oluexpert99 opened a new pull request, #6126:
URL: https://github.com/apache/fineract/pull/6126

   …osted is zero
   
   - Closing (or posting interest on) a withholding-tax deposit account threw a 
500 NullPointerException whenever the net interest posted on the account was 
zero: SavingsAccount.createWithHoldTransaction / updateWithHoldTransaction 
guard only on the tax group and then evaluate 
amount.compareTo(BigDecimal.ZERO), but amount can be null. 
SavingsAccountTransactionSummaryWrapper.calculateTotalInterestPosted returns 
total.getAmountDefaultedToNullIfZero() -- i.e. null -- when there are no net 
interest-posting transactions, and that null is passed straight into both 
helpers.
   - The common real-world trigger is premature-closing a short-term fixed 
deposit whose pre-closure penalty rate is greater than or equal to the chart 
rate: the effective interest is clamped to zero 
(FixedDepositAccount.getEffectiveInterestRateAsFraction), so 
postPreMaturityInterest posts no interest transaction, and the withholding-tax 
pass then runs with a null interest total. For a withholding-tax account the 
tax group is non-null, so the first clause passes and amount.compareTo throws; 
the whole command rolls back and the account cannot be closed.
   - Null-guard amount in both createWithHoldTransaction and 
updateWithHoldTransaction: a null (or non-positive) interest total means there 
is nothing to withhold tax on, so both no-op and return false. No behaviour 
change when interest is actually posted -- a non-null positive amount takes the 
same path as before.
   - Add a unit test (SavingsAccountWithHoldTaxNullAmountTest) that sets a 
non-null tax group so the guard is exercised rather than short-circuited, and 
asserts that a null or zero amount no longer throws and adds no withholding 
transaction.
   
   ## Description
   
   Describe the changes made and why they were made. (Ignore if these details 
are present on the associated Apache Fineract JIRA ticket.)
   
   ## Checklist
   
   Please make sure these boxes are checked before submitting your pull request 
- thanks!
   
   - [ ] Write the commit message as per [our 
guidelines](https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests)
   - [ ] Acknowledge that we will not review PRs that are not passing the build 
_("green")_ - it is your responsibility to get a proposed PR to pass the build, 
not primarily the project's maintainers.
   - [ ] Create/update [unit or integration 
tests](https://fineract.apache.org/docs/current/#_testing) for verifying the 
changes made.
   - [ ] Follow our [coding 
conventions](https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions).
   - [ ] Add required Swagger annotation and update API documentation at 
fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with 
details of any API changes
   - [ ] [This PR must not be a "code 
dump"](https://cwiki.apache.org/confluence/display/FINERACT/Pull+Request+Size+Limit).
 Large changes can be made in a branch, with assistance. Ask for help on the 
[developer mailing list](https://fineract.apache.org/#contribute).
   
   Your assigned reviewer(s) will follow our [guidelines for code 
reviews](https://cwiki.apache.org/confluence/display/FINERACT/Code+Review+Guide).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to