Google Groups

Re: [Mifos-users] Waiving partially repaid client account fees gives odd result


chetan.b...@sungard.com Apr 26, 2012 9:48 PM
Posted in group: Mifos Users

Lukasz,

 

I created MIFOS-5583 to track and close this bug.

 

Thanks,

Chetan

 

 

From: Lukasz Chudy [mailto:lch...@soldevelo.com]
Sent: Thursday, April 26, 2012 6:02 PM
To: A good place to start for users or folks new to Mifos.
Subject: Re: [Mifos-users] Waiving partially repaid client account fees gives odd result

 

Hi Matthew, Chetan

I checked this issue locally on Mifos 2.3.2 and also on test server (http://demo.mifos.org). Stack trace is only displayed on test server. It is because on demo.mifos.org there is a 2.3.0 version. This stack trace was fixed in 2.3.2.

I reproduced issue with negative amount locally and I agree that is a bug. It should be fixed in a way that Chetan described.

Chetan, if you create Jira ticket for this bug, please respond to this thread with Jira issue number.

Best regards,
Lukasz


On 04/26/2012 01:22 PM, Chetan.B...@sungard.com wrote:

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:...@laurenson.name]
Sent: Thursday, April 26, 2012 12:08 AM
To: mifos...@lists.sourceforge.net
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
Amount Overdue: 0
Total: -15

 

Upcoming charges (26/04/2012)

View transaction history

 

Fee Type:

Amount

Misc Penalty

-15

 

Recent Account Activity

View all account activities

 

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: tonci...@oracle.com-20110930151701-jfj14ddfq48ifkfq )

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
Mifos...@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mifos-users