Matthew,
Currently the penalty application feature is built such that waiving a penalty
will waive out the entire penalty applied to the account. Hence you are seeing
the behavior whereby a negative amount is visible. We had designed this feature
such that for any account which has a penalty applied to it, there should
always be a way to waive/remove the amount given that historically Microfinance
has had a social angle to the entire operations and we wanted to a way waive
penalty on those grounds.
But now that I think of it, I am wondering how we should treat the already
paid out penalty i.e. the case where a penalty is applied and also paid out. I
think there is a need to have a check before the waiving a penalty whether the
penalty is already paid ( fully or partially) and applied to the account. IF
already paid out, that penalty cannot be reversed. However if the penalty
applied but paid out partially, the remaining amount should be waived. I will
raise a JIRA ticket and log it for a fixing in the next release.
Thanks
Chetan
From: Matthew Laurenson [mailto:[email protected]]
Sent: Thursday, April 26, 2012 12:08 AM
To: [email protected]
Subject: [Mifos-users] Waiving partially repaid client account fees gives odd
result
Greetings all
We have been using Mifos 2.3.1 operationally for about a month to operate a
small loan business. It is a very solid product and a credit to those involved.
In the case where we need to apply a late penalty to a partially repaid loan,
then we use Apply Charges (Misc Penalty) under Client charges(because Mifos
doesn't seem to let us apply a penalty to the loan itself in this situation). I
am seeing some odd behaviour if I try to waive a partially repaid penalty in
this situation. This can be reproduced as follows:
Select any active client.
Apply a Client charge (Misc Penalty) of 20.
Apply a Payment of 15, leaving a balance of 5.
Click the "Waive" link next to the 5.
The account balance becomes -15.
According to the "Recent Account Activity" table on the same page, the waive
action has deducted 20 (the original balance perhaps) rather than 5:
Account summary
Amount Due: -15
Waive<customerAction.do?method=waiveChargeDue&globalCustNum=0002-000000042&accountType=3&prdOfferingName=Siliva%20Apulu&statusId=3&type=Client&input=Client&accountId=86&globalAccountNum=000200000000086&randomNUm=2465957871840109967¤tFlowKey=1335377845579>
Amount Overdue: 0
Total: -15
Upcoming charges (26/04/2012)
View transaction
history<accountAppAction.do?method=getTrxnHistory&statusId=3&globalCustNum=0002-000000042&input=ViewClientCharges&globalAccountNum=000200000000086&accountId=86&accountType=3&prdOfferingName=Siliva%20Apulu&headingInput=ViewClientCharges&searchInput=ClientChargesDetails&randomNUm=2465957871840109967¤tFlowKey=1335377845579>
Fee Type:
Amount
Misc Penalty
-15
Recent Account Activity
View all account
activities<customerAction.do?method=getAllActivity&statusId=3&type=Client&globalCustNum=0002-000000042&prdOfferingName=Siliva%20Apulu&input=ViewClientCharges&globalAccountNum=000200000000086&accountType=3&accountId=86&randomNUm=2465957871840109967¤tFlowKey=1335377845579>
Date
Description
Amount
Posted By
26/04/2012
Misc penalty applied
20
mifos
26/04/2012
Payment rcvd.
15
mifos
26/04/2012
Amnt waived
20
mifos
Recurring Account Fees
I tried to reproduce this behaviour in the demo server in 2.3.2 (see the client
"smith smith" under branch "ClientAccFeeWaiveTest") but I got a separate error
(The class 'org.mifos.framework.util.helpers.Money' does not have the property
'aomunt' - full stack trace follows at end of message) when trying to View the
Client charge details (which might relate to configuration of the test server):
Any explanation of the client account fee waive behaviour/assistance with the
bug would be greatly appreciated.
Regards
Matthew
System Information
Welcome to the Mifos system information area.
Operating System / Arch / Version
Windows 7/amd64/6.1
Java Vendor / Version
Sun Microsystems Inc./1.6.0_27
Database vendor / version
MySQL/5.1.60-community-log
Database driver / version
MySQL-AB JDBC Driver/mysql-connector-java-5.1.18 ( Revision:
[email protected]<mailto:[email protected]>
)
Application Server
jetty/7.5.4.v20111024
Release Name
mifos-v2.3.1
Commit Identifier
4ec7636fd6d2e9112e5d16a0d1966a76b73ed96d
Build Date
Mon Apr 02 08:52:32 PDT 2012
Build Number
hudson-head-h-release-archive-42
Custom Reports Directory
C:\Users\Matthew\.mifos\uploads\report
Database Parameter Source
[C:\mifos\config\local.properties]
Database Server
localhost
Database Port
3306
Database Name
mifos
Database User
mifos@localhost
Date and Time
26/04/12 6:33 AM
Date and Time in ISO8601 format
2012-04-26T06:33:19.971+12:00
Operating System User
Matthew
Stack Trace of error observed on demo server:
javax.el.PropertyNotFoundException: The class
'org.mifos.framework.util.helpers.Money' does not have the property 'aomunt'.
at javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:579) at
javax.el.BeanELResolver.getValue(BeanELResolver.java:281) at
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175) at
com.sun.el.parser.AstValue.getValue(AstValue.java:138) at
com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206) at
org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:1001)
at
org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp._jspx_meth_fmt_formatNumber_5(org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp:1751)
at
org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp._jspx_meth_c_if_8(org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp:1705)
at
org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp._jspx_meth_c_if_5(org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp:1437)
at
org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp._jspx_meth_tiles_put_0(org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp:414)
at
org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp._jspx_meth_tiles_insert_0(org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp:220)
at
org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp._jspService(org.apache.jsp.pages.application.client.jsp.view_005fclientchargesdetail_jsp:143)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486) at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534) at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1352)
at
org.mifos.servlet.filters.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:70)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:474)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:935)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:404)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:870)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:285) at
org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:116) at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
at
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534) at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1352)
at
org.mifos.servlet.filters.MifosAccessLogFilter.doFilter(MifosAccessLogFilter.java:72)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
at
org.mifos.framework.persistence.DatabaseInitFilter.doFilter(DatabaseInitFilter.java:58)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
at
org.mifos.security.authentication.MifosLegacyUsernamePasswordAuthenticationFilter.doFilter(MifosLegacyUsernamePasswordAuthenticationFilter.java:115)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
at
org.mifos.servlet.filters.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:70)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:474)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:480)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:935)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:404)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:870)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:151)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:346) at
org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596)
at
org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1051)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:592) at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214) at
org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:520)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:528)
at java.lang.Thread.run(Thread.java:619)
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Mifos-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mifos-users