pwargulak opened a new pull request, #6757: URL: https://github.com/apache/fineract/pull/6757
## Description [FINERACT-3007](https://issues.apache.org/jira/browse/FINERACT-3007) When a payment covers only part of an installment's fees (or penalties), which of two charges due on the same date received the money changed from run to run. The advanced payment allocation collects the installment's charges into a `HashSet`, `findEarliestUnpaidChargeFromUnOrderedSet` keeps the first of two charges with equal due dates (strict `isBefore`), and `LoanCharge` has no `equals`/`hashCode`, so the winner followed identity-hash order. Balances were right in total, but the paid-by links, each charge's paid amount and anything derived from them (such as the tax booked on a taxed charge) differed between identical runs. `AbstractLoanRepaymentScheduleTransactionProcessor` now orders charges of the same kind by due date, then by id: charges due on the same date are paid in the order they were created, a charge not saved yet after the saved ones. `findLatestPaidChargeFromUnOrderedSet`, used when a payment is undone, had the same tie and now takes back in the reverse order. Charges with different due dates and installment fees behave as before. Tests: new `AbstractLoanRepaymentScheduleTransactionProcessorChargeOrderTest` (4). The three tie cases fail on `develop`; the fourth checks that an earlier due date still wins over a lower id. Run locally on develop 43911acb2f: spotless, checkstyle, spotbugs and modernizer on `fineract-loan` are clean; the unit suites of `fineract-loan` (92 tests), `fineract-progressive-loan` (290) and `fineract-provider` (1946, 3 skipped), no failures. Not run: the integration tests and the e2e (Cucumber) suite. ## Checklist - [x] Write the commit message as per [our guidelines](https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests) - [x] 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. - [x] Create/update [unit or integration tests](https://fineract.apache.org/docs/current/#_testing) for verifying the changes made. - [x] 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 - [x] [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). - [x] If merging this PR resolves a JIRA issue, I will mark that issue as resolved and set "Fix Version/s" appropriately. - [x] I followed the [AI Policy](https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#ai-policy). -- 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]
