details: https://code.openbravo.com/erp/devel/pi/rev/380d8ab86ea4 changeset: 30505:380d8ab86ea4 user: Alvaro Ferraz <alvaro.ferraz <at> openbravo.com> date: Fri Oct 21 12:56:10 2016 +0200 summary: Related to issue 34207: Code review improvements
Throw error only if we are not reactivating payment in APRM_FIN_PMT_CHECK_TRG trigger. Remove onSave event in FIN_PaymentEventListener. Zero payment sufix will only be added in case we are processing the payment and it will only be removed in case we are reactivating the payment. diffstat: modules/org.openbravo.advpaymentmngt/src-db/database/model/triggers/APRM_FIN_PMT_CHECK_TRG.xml | 2 +- modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/event/FIN_PaymentEventListener.java | 75 ++++----- src/org/openbravo/erpCommon/businessUtility/CancelAndReplaceUtils.java | 1 + 3 files changed, 38 insertions(+), 40 deletions(-) diffs (136 lines): diff -r 306b87decaa6 -r 380d8ab86ea4 modules/org.openbravo.advpaymentmngt/src-db/database/model/triggers/APRM_FIN_PMT_CHECK_TRG.xml --- a/modules/org.openbravo.advpaymentmngt/src-db/database/model/triggers/APRM_FIN_PMT_CHECK_TRG.xml Fri Oct 21 12:40:46 2016 +0200 +++ b/modules/org.openbravo.advpaymentmngt/src-db/database/model/triggers/APRM_FIN_PMT_CHECK_TRG.xml Fri Oct 21 12:56:10 2016 +0200 @@ -28,7 +28,7 @@ END IF; IF (UPDATING) THEN - IF(:OLD.PROCESSED='Y' AND ((COALESCE(:OLD.AD_ORG_ID, '0') <> COALESCE(:NEW.AD_ORG_ID, '0')) + IF(:OLD.PROCESSED='Y' AND :NEW.PROCESSED='Y' AND ((COALESCE(:OLD.AD_ORG_ID, '0') <> COALESCE(:NEW.AD_ORG_ID, '0')) OR(COALESCE(:OLD.DOCUMENTNO, '0') <> COALESCE(:NEW.DOCUMENTNO, '0')) OR(COALESCE(:OLD.C_CURRENCY_ID, '0') <> COALESCE(:NEW.C_CURRENCY_ID, '0')) OR(COALESCE(:OLD.C_BPARTNER_ID, '0') <> COALESCE(:NEW.C_BPARTNER_ID, '0')) diff -r 306b87decaa6 -r 380d8ab86ea4 modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/event/FIN_PaymentEventListener.java --- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/event/FIN_PaymentEventListener.java Fri Oct 21 12:40:46 2016 +0200 +++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/event/FIN_PaymentEventListener.java Fri Oct 21 12:56:10 2016 +0200 @@ -31,7 +31,6 @@ import org.openbravo.base.model.ModelProvider; import org.openbravo.base.model.Property; import org.openbravo.client.kernel.event.EntityDeleteEvent; -import org.openbravo.client.kernel.event.EntityNewEvent; import org.openbravo.client.kernel.event.EntityPersistenceEvent; import org.openbravo.client.kernel.event.EntityPersistenceEventObserver; import org.openbravo.client.kernel.event.EntityUpdateEvent; @@ -54,18 +53,6 @@ return entities; } - public void onSave(@Observes EntityNewEvent event) { - if (!isValidEvent(event)) { - return; - } - FIN_Payment payment = (FIN_Payment) event.getTargetInstance(); - if (payment.isProcessed() && payment.getAmount().compareTo(BigDecimal.ZERO) == 0) { - String newDocumentNo = payment.getDocumentNo(); - newDocumentNo = newDocumentNo + CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX; - setDocumentNoToPayment(event, newDocumentNo); - } - } - public void onUpdate(@Observes EntityUpdateEvent event) { if (!isValidEvent(event)) { return; @@ -73,34 +60,46 @@ final FIN_Payment payment = (FIN_Payment) event.getTargetInstance(); final Entity paymentEntity = ModelProvider.getInstance().getEntity(FIN_Payment.ENTITY_NAME); + final Property paymentProcessedProperty = paymentEntity + .getProperty(FIN_Payment.PROPERTY_PROCESSED); + final Boolean currentPaymentProcessed = (Boolean) event + .getCurrentState(paymentProcessedProperty); + final Boolean oldPaymentProcessed = (Boolean) event.getPreviousState(paymentProcessedProperty); final Property paymentAmountProperty = paymentEntity.getProperty(FIN_Payment.PROPERTY_AMOUNT); - BigDecimal oldPaymentAmount = (BigDecimal) event.getPreviousState(paymentAmountProperty); + final BigDecimal currentPaymentAmount = (BigDecimal) event + .getCurrentState(paymentAmountProperty); + final BigDecimal oldPaymentAmount = (BigDecimal) event.getPreviousState(paymentAmountProperty); final Property paymentStatusProperty = paymentEntity.getProperty(FIN_Payment.PROPERTY_STATUS); final String currentPaymentStatus = (String) event.getCurrentState(paymentStatusProperty); final String oldPaymentStatus = (String) event.getPreviousState(paymentStatusProperty); - String documentNo = payment.getDocumentNo(); - int documentNoLength = payment.getDocumentNo().length(); - if (payment.isProcessed()) { - if (payment.getAmount().compareTo(BigDecimal.ZERO) == 0) { - // Payment has no already an *Z* at the end of the document number - if (documentNo.length() < CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length() - || !CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.equals(documentNo - .substring(documentNoLength - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length()))) { - String newDocumentNo = documentNo + CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX; - setDocumentNoToPayment(event, newDocumentNo); - } - } else if (oldPaymentAmount.compareTo(BigDecimal.ZERO) == 0) { - // The payment has already the *Z* at the end of the document number and is not a payment of - // 0 - if (documentNo.length() >= CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length() - && CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.equals(documentNo - .substring(documentNoLength - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length()))) { - String newDocumentNo = documentNo.substring(0, documentNoLength - - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length()); - setDocumentNoToPayment(event, newDocumentNo); - } - } + final String documentNo = payment.getDocumentNo(); + final int documentNoLength = documentNo.length(); + + if (!oldPaymentProcessed + && currentPaymentProcessed + && currentPaymentAmount.compareTo(BigDecimal.ZERO) == 0 + && (documentNoLength < CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length() || !CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX + .equals(documentNo.substring(documentNoLength + - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length())))) { + // Processing a zero payment: add sufix + final int documentNoLimit = CancelAndReplaceUtils.PAYMENT_DOCNO_LENGTH + - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length(); + String newDocumentNo = (documentNoLength > documentNoLimit ? documentNo.substring(0, + documentNoLimit) : documentNo) + CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX; + setDocumentNoToPayment(event, newDocumentNo); + } + + else if (oldPaymentProcessed + && !currentPaymentProcessed + && oldPaymentAmount.compareTo(BigDecimal.ZERO) == 0 + && documentNoLength > CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length() + && CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.equals(documentNo.substring(documentNoLength + - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length()))) { + // Reactivating a zero payment: remove sufix + String newDocumentNo = documentNo.substring(0, documentNoLength + - CancelAndReplaceUtils.ZERO_PAYMENT_SUFIX.length()); + setDocumentNoToPayment(event, newDocumentNo); } manageAPRMPendingPaymentFromInvoiceRecord(payment, currentPaymentStatus, oldPaymentStatus); @@ -209,11 +208,9 @@ } private void setDocumentNoToPayment(EntityPersistenceEvent event, String newDocumentNo) { - String truncatedDocumentNo = (newDocumentNo.length() > 30) ? newDocumentNo.substring(0, 30) - : newDocumentNo.toString(); final Entity paymentEntity = ModelProvider.getInstance().getEntity(FIN_Payment.ENTITY_NAME); final Property paymentDocumentNoProperty = paymentEntity .getProperty(FIN_Payment.PROPERTY_DOCUMENTNO); - event.setCurrentState(paymentDocumentNoProperty, truncatedDocumentNo); + event.setCurrentState(paymentDocumentNoProperty, newDocumentNo); } } diff -r 306b87decaa6 -r 380d8ab86ea4 src/org/openbravo/erpCommon/businessUtility/CancelAndReplaceUtils.java --- a/src/org/openbravo/erpCommon/businessUtility/CancelAndReplaceUtils.java Fri Oct 21 12:40:46 2016 +0200 +++ b/src/org/openbravo/erpCommon/businessUtility/CancelAndReplaceUtils.java Fri Oct 21 12:56:10 2016 +0200 @@ -88,6 +88,7 @@ public static String REVERSE_PREFIX = "*R*"; public static String ZERO_PAYMENT_SUFIX = "*Z*"; public static String DOCTYPE_MatShipment = "MMS"; + public static int PAYMENT_DOCNO_LENGTH = 30; /** * Process that creates a replacement order in temporary status in order to Cancel and Replace an ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits