details: https://code.openbravo.com/erp/devel/pi/rev/42227f2c47c3 changeset: 31525:42227f2c47c3 user: Mark <markmm82 <at> gmail.com> date: Wed Feb 15 15:56:52 2017 -0500 summary: Related to issue 34993: Update the invoice prepaiment amount with correct value if after create from a paid order line, it updates the line net amount to 0 or it changes from 0 to a another value.
If you create the invoice line from a paid order line, and then the line net amount changes it value to 0 (by updating qty = 0 or price = 0, for instance), then previously prepayment was remaining instead of be discarded. So, you may have an invoice with Total Gross Amount of 0 and a prepayment different than 0. When you are updating a line with a NEW line net amount = 0 or deleting the line, it is needed to remove the prepayment of this line from the invoice. If the OLD line net amount was zero (the prepayment was removed or not taken into account when creating or updating the line) and it changes to a non-zero new line net amount value, is necessary take into account the prepaid order line amount to increase the invoice prepayment amount with its value. In any other case it is not necessary update the prepayment amount of the invoice. diffstat: src-db/database/model/triggers/C_INVOICELINE_TRG2.xml | 20 ++++++++++++++---- 1 files changed, 15 insertions(+), 5 deletions(-) diffs (36 lines): diff -r e1c6deda8742 -r 42227f2c47c3 src-db/database/model/triggers/C_INVOICELINE_TRG2.xml --- a/src-db/database/model/triggers/C_INVOICELINE_TRG2.xml Tue Feb 14 15:52:41 2017 -0500 +++ b/src-db/database/model/triggers/C_INVOICELINE_TRG2.xml Wed Feb 15 15:56:52 2017 -0500 @@ -105,17 +105,27 @@ END IF; IF(UPDATING OR DELETING) THEN v_oldLine:= COALESCE(:OLD.LineNetAmt,0); - IF(DELETING AND (:old.c_orderline_id IS NOT NULL OR :old.c_orderline_id <> '')) THEN + IF(UPDATING) THEN + v_newLineNetAmt := COALESCE(:new.LineNetAmt,0); + END IF; + + IF(:old.c_orderline_id IS NOT NULL AND (v_oldLine <> 0 OR v_newLineNetAmt <> 0)) THEN SELECT COALESCE(sum(fps.paidamt),0) INTO v_prepayment FROM fin_payment_schedule fps JOIN c_order ord ON ord.c_order_id=fps.c_order_id JOIN c_orderline ordline ON ordline.c_order_id = ord.c_order_id WHERE ordline.c_orderline_id = :old.c_orderline_id; - - UPDATE c_invoice - SET prepaymentamt = prepaymentamt - v_prepayment - WHERE c_invoice_id = :old.c_invoice_id; + + IF (DELETING OR (UPDATING AND v_newLineNetAmt = 0 AND v_oldLine <> 0)) THEN + UPDATE c_invoice + SET prepaymentamt = prepaymentamt - v_prepayment + WHERE c_invoice_id = :old.c_invoice_id; + ELSEIF (UPDATING AND v_newLineNetAmt <> 0 AND v_oldLine = 0) THEN + UPDATE c_invoice + SET prepaymentamt = prepaymentamt + v_prepayment + WHERE c_invoice_id = :old.c_invoice_id; + END IF; END IF; END IF; IF (INSERTING OR UPDATING) THEN ------------------------------------------------------------------------------ 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