somasorosdpc commented on code in PR #6542:
URL: https://github.com/apache/fineract/pull/6542#discussion_r4271149433
##########
fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java:
##########
@@ -813,6 +814,179 @@ public CommandProcessingResult undoTransaction(final Long
loanId, final Long tra
};
}
+ @Override
+ public CommandProcessingResult adjustByDeltaTransaction(final Long loanId,
final Long transactionId, final JsonCommand command) {
+ final WorkingCapitalLoan loan =
loanRepository.findById(loanId).orElseThrow(() -> new
WorkingCapitalLoanNotFoundException(loanId));
+ final WorkingCapitalLoanTransaction transaction =
transactionRepository.findByIdAndWcLoan_Id(transactionId, loanId)
+ .orElseThrow(() -> new
PlatformApiDataValidationException("validation.msg.wc.loan.transaction.not.found",
+ "Working capital loan transaction not found",
WorkingCapitalLoanConstants.transactionIdParamName));
+
+ return switch (transaction.getTypeOf()) {
+ case REPAYMENT, GOODWILL_CREDIT, CHARGE_ADJUSTMENT, PAYOUT_REFUND
->
+ adjustByDeltaRepaymentLikeTransaction(loan, transaction,
command);
+ default -> throw new
PlatformApiDataValidationException("validation.msg.wc.loan.transaction.adjust.not.supported",
+ "Adjust is not supported for transaction type " +
transaction.getTypeOf(),
+ WorkingCapitalLoanConstants.transactionTypeParamName);
+ };
+ }
+
+ private CommandProcessingResult
adjustByDeltaRepaymentLikeTransaction(final WorkingCapitalLoan loan,
+ final WorkingCapitalLoanTransaction transactionToAdjust, final
JsonCommand command) {
+ this.validator.validateAdjustByDelta(command, loan,
transactionToAdjust);
+
+ final BigDecimal deltaAmount =
this.fromApiJsonHelper.extractBigDecimalNamed(WorkingCapitalLoanConstants.transactionAmountParamName,
+ command.parsedJson(), new HashSet<>());
+ final BigDecimal newTransactionAmount =
transactionToAdjust.getTransactionAmount().add(deltaAmount);
+
+ final Map<String, Object> changes = new LinkedHashMap<>();
+ changes.put("adjustByDelta", true);
+
+ return adjustRepaymentLikeTransaction(loan, transactionToAdjust,
newTransactionAmount, command, changes);
+ }
+
+ private CommandProcessingResult
adjustRepaymentLikeTransaction(WorkingCapitalLoan loan,
+ WorkingCapitalLoanTransaction transactionToAdjust, BigDecimal
newTransactionAmount, JsonCommand command,
+ final Map<String, Object> changes) {
+ final LocalDate businessLocalDate = DateUtils.getBusinessLocalDate();
+ final LoanStatus oldStatus = loan.getStatus();
+
+ ExternalId reversalExternalId = externalIdFactory
+
.create(command.stringValueOfParameterNamedAllowingNull(WorkingCapitalLoanConstants.reversalExternalIdParamName));
+
+ final boolean isReverseOnly =
newTransactionAmount.compareTo(BigDecimal.ZERO) == 0;
+
+ final WorkingCapitalLoanTransaction newTransaction = !isReverseOnly
+ ? resolveNewTransaction(loan, transactionToAdjust,
newTransactionAmount, command, changes)
+ : null;
+
+ if (isReverseOnly) {
+ changes.put("reversed", true);
+ changes.put("reversedOnDate", businessLocalDate);
+ propagateChangesByTransaction(transactionToAdjust, changes);
+ }
+
+ transactionToAdjust.setReversed(true);
+ transactionToAdjust.setReversalExternalId(reversalExternalId);
+ transactionToAdjust.setReversedOnDate(businessLocalDate);
+
+ processUndoTransaction(loan, transactionToAdjust);
+
+ if (!isReverseOnly) {
+
+ saveNewTransactionRelation(newTransaction, transactionToAdjust,
LoanTransactionRelationTypeEnum.REPLAYED);
+
+ propagateChangesByTransaction(newTransaction, changes);
+ changes.put("adjustedTransaction",
propagateChangesByTransaction(transactionToAdjust, new HashMap<>()));
+
+ transactionProcessor.processRepaymentLikeTransaction(loan,
newTransaction, newTransaction.getTransactionDate(),
+ newTransactionAmount);
Review Comment:
after revase it resolved
##########
fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java:
##########
@@ -813,6 +814,179 @@ public CommandProcessingResult undoTransaction(final Long
loanId, final Long tra
};
}
+ @Override
+ public CommandProcessingResult adjustByDeltaTransaction(final Long loanId,
final Long transactionId, final JsonCommand command) {
+ final WorkingCapitalLoan loan =
loanRepository.findById(loanId).orElseThrow(() -> new
WorkingCapitalLoanNotFoundException(loanId));
+ final WorkingCapitalLoanTransaction transaction =
transactionRepository.findByIdAndWcLoan_Id(transactionId, loanId)
+ .orElseThrow(() -> new
PlatformApiDataValidationException("validation.msg.wc.loan.transaction.not.found",
+ "Working capital loan transaction not found",
WorkingCapitalLoanConstants.transactionIdParamName));
+
+ return switch (transaction.getTypeOf()) {
+ case REPAYMENT, GOODWILL_CREDIT, CHARGE_ADJUSTMENT, PAYOUT_REFUND
->
+ adjustByDeltaRepaymentLikeTransaction(loan, transaction,
command);
+ default -> throw new
PlatformApiDataValidationException("validation.msg.wc.loan.transaction.adjust.not.supported",
+ "Adjust is not supported for transaction type " +
transaction.getTypeOf(),
+ WorkingCapitalLoanConstants.transactionTypeParamName);
+ };
+ }
+
+ private CommandProcessingResult
adjustByDeltaRepaymentLikeTransaction(final WorkingCapitalLoan loan,
+ final WorkingCapitalLoanTransaction transactionToAdjust, final
JsonCommand command) {
+ this.validator.validateAdjustByDelta(command, loan,
transactionToAdjust);
+
+ final BigDecimal deltaAmount =
this.fromApiJsonHelper.extractBigDecimalNamed(WorkingCapitalLoanConstants.transactionAmountParamName,
+ command.parsedJson(), new HashSet<>());
+ final BigDecimal newTransactionAmount =
transactionToAdjust.getTransactionAmount().add(deltaAmount);
+
+ final Map<String, Object> changes = new LinkedHashMap<>();
+ changes.put("adjustByDelta", true);
+
+ return adjustRepaymentLikeTransaction(loan, transactionToAdjust,
newTransactionAmount, command, changes);
+ }
+
+ private CommandProcessingResult
adjustRepaymentLikeTransaction(WorkingCapitalLoan loan,
+ WorkingCapitalLoanTransaction transactionToAdjust, BigDecimal
newTransactionAmount, JsonCommand command,
+ final Map<String, Object> changes) {
+ final LocalDate businessLocalDate = DateUtils.getBusinessLocalDate();
+ final LoanStatus oldStatus = loan.getStatus();
+
+ ExternalId reversalExternalId = externalIdFactory
+
.create(command.stringValueOfParameterNamedAllowingNull(WorkingCapitalLoanConstants.reversalExternalIdParamName));
+
+ final boolean isReverseOnly =
newTransactionAmount.compareTo(BigDecimal.ZERO) == 0;
+
+ final WorkingCapitalLoanTransaction newTransaction = !isReverseOnly
+ ? resolveNewTransaction(loan, transactionToAdjust,
newTransactionAmount, command, changes)
+ : null;
+
+ if (isReverseOnly) {
+ changes.put("reversed", true);
+ changes.put("reversedOnDate", businessLocalDate);
+ propagateChangesByTransaction(transactionToAdjust, changes);
+ }
+
+ transactionToAdjust.setReversed(true);
+ transactionToAdjust.setReversalExternalId(reversalExternalId);
+ transactionToAdjust.setReversedOnDate(businessLocalDate);
+
+ processUndoTransaction(loan, transactionToAdjust);
+
+ if (!isReverseOnly) {
+
+ saveNewTransactionRelation(newTransaction, transactionToAdjust,
LoanTransactionRelationTypeEnum.REPLAYED);
+
+ propagateChangesByTransaction(newTransaction, changes);
+ changes.put("adjustedTransaction",
propagateChangesByTransaction(transactionToAdjust, new HashMap<>()));
+
+ transactionProcessor.processRepaymentLikeTransaction(loan,
newTransaction, newTransaction.getTransactionDate(),
+ newTransactionAmount);
Review Comment:
after rebase it resolved
--
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]