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]
