in component-test/src/main/java/org/apache/fineract/cn/portfolio/TestAccountingInteractionInLoanWorkflow.java [1312:1351]
private void step8IWriteOff(
final LocalDateTime forDateTime) throws InterruptedException {
logger.info("step8IWriteOff for '{}'", forDateTime);
checkCostComponentForActionCorrect(
product.getIdentifier(),
customerCase.getIdentifier(),
Action.WRITE_OFF,
null,
null,
forDateTime,
MINOR_CURRENCY_UNIT_DIGITS,
new CostComponent(ChargeIdentifiers.WRITE_OFF_ID, expectedCurrentPrincipal),
new CostComponent(ChargeIdentifiers.INTEREST_ID, interestAccrued),
new CostComponent(ChargeIdentifiers.LATE_FEE_ID, lateFees));
checkStateTransfer(
product.getIdentifier(),
customerCase.getIdentifier(),
Action.WRITE_OFF,
forDateTime,
Collections.singletonList(assignExpenseToGeneralExpense()),
IndividualLoanEventConstants.WRITE_OFF_INDIVIDUALLOAN_CASE,
Case.State.CLOSED); //Close has to be done explicitly.
checkNextActionsCorrect(product.getIdentifier(), customerCase.getIdentifier());
final Set<Debtor> debtors = new HashSet<>();
debtors.add(new Debtor(AccountingFixture.GENERAL_EXPENSE_ACCOUNT_IDENTIFIER, expectedCurrentPrincipal.toPlainString()));
debtors.add(new Debtor(AccountingFixture.LATE_FEE_ACCRUAL_ACCOUNT_IDENTIFIER, lateFees.toPlainString()));
debtors.add(new Debtor(AccountingFixture.LOAN_INTEREST_ACCRUAL_ACCOUNT_IDENTIFIER, interestAccrued.toPlainString()));
final Set<Creditor> creditors = new HashSet<>();
creditors.add(new Creditor(AccountingFixture.GENERAL_LOSS_ALLOWANCE_ACCOUNT_IDENTIFIER, expectedCurrentPrincipal.toPlainString()));
creditors.add(new Creditor(AccountingFixture.PRODUCT_LOSS_ALLOWANCE_ACCOUNT_IDENTIFIER, lateFees.add(interestAccrued).toPlainString()));
AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors, product.getIdentifier(), customerCase.getIdentifier(), Action.WRITE_OFF);
productLossAllowance = BigDecimal.ZERO;
updateBalanceMock();
}