Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PIDM-42] fix(payment-status): fix payment option status and payment …
Browse files Browse the repository at this point in the history
…position status not changing to PAID when paying the full amount in presence of already paid installments;
dylantangredi-bvt committed Jan 30, 2025
1 parent 775cf5e commit 34b4721
Showing 2 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import javax.validation.Valid;
@@ -233,7 +234,10 @@ private PaymentOption updatePaymentStatus(PaymentPosition pp, String nav, Paymen
}

// aggiorno lo stato della payment position
if (countPaidPartialPayment > 0 && countPaidPartialPayment < numberOfPartialPayment) {
// PIDM-42 if paying the full amount when there is already a paid partial payment
// then update the payment position status to PAID
if (countPaidPartialPayment > 0 && countPaidPartialPayment < numberOfPartialPayment
&& Boolean.TRUE.equals(Objects.requireNonNull(poToPay).getIsPartialPayment())) {
pp.setStatus(DebtPositionStatus.PARTIALLY_PAID);
} else {
pp.setStatus(DebtPositionStatus.PAID);
Original file line number Diff line number Diff line change
@@ -239,10 +239,28 @@ private static void checkPaymentOptionPayable(PaymentPosition ppToPay, String na
}

// La posizione debitoria è già in PARTIALLY_PAID ed arriva una richiesta di pagamento su una payment option non rateizzata (isPartialPayment = false) => errore
if (ppToPay.getStatus().equals(DebtPositionStatus.PARTIALLY_PAID) && Boolean.FALSE.equals(poToPay.getIsPartialPayment())) {
throw new AppException(AppError.PAYMENT_OPTION_ALREADY_PAID, poToPay.getOrganizationFiscalCode(), nav);
// PIDM-42: if this is a full payment and the position is partially paid then
// log this but allow the payment option status to be changed to PO_PAID instead of throwing an error
if (ppToPay.getStatus().equals(DebtPositionStatus.PARTIALLY_PAID)
&& Boolean.FALSE.equals(poToPay.getIsPartialPayment())) {

// log detailed information about this edge case
log.warn("Potential payment state inconsistency detected || " +
"Organization: {} || " +
"IUPD: {} || " +
"NAV: {} || " +
"Position Status: {} || " +
"Payment Option Status: {} || " +
"Is Partial Payment: {} || " +
"Timestamp: {}",
ppToPay.getOrganizationFiscalCode(),
ppToPay.getIupd(),
nav,
ppToPay.getStatus(),
poToPay.getStatus(),
poToPay.getIsPartialPayment(),
LocalDateTime.now());

Check failure

Code scanning / CodeQL

Log Injection High

This log entry depends on a
user-provided value
.
}

}

private static boolean isPaid(PaymentOption po) {

0 comments on commit 34b4721

Please sign in to comment.