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]

Reply via email to