details: https://code.openbravo.com/erp/devel/pi/rev/9076baa5e480 changeset: 32410:9076baa5e480 user: Armaignac <collazoandy4 <at> gmail.com> date: Fri Jun 23 10:40:44 2017 -0400 summary: Fixes issue 36297: Wrong schedule details when voiding a prepaid invoice
The void process of prepaid invoice was taking into account all payments schedule detail to update their amount with the invoice payment schedule amount. Now the order payment schedule detail update it it's the one not asociated to any invoice or a new one is created if the order have no pending payment schedule detail. The invoice prepayment amount was also incorrect when the invoice is created from CreateInvoicesFromOrder process and the order have a discount line. Now the compute of prepayment amount is made without join the order lines to prevent duplicate the payment schedule paidamt. details: https://code.openbravo.com/erp/devel/pi/rev/01727c5b58ac changeset: 32411:01727c5b58ac user: Víctor Martínez Romanos <victor.martinez <at> openbravo.com> date: Wed Jul 05 14:16:09 2017 +0200 summary: Fixed bug 36282: Adapted Grid Legacy process definitions Four process definitions have been adapted: Open Close Periods: Just set "Compatibility with Legacy Grids" = N as it's a manual UI Pattern process UpdateInvariants: Just set "Compatibility with Legacy Grids" = N as it's a manual UI Pattern process Modify Payment In Plan and Modify Payment Out Plan: Minor refactor in Handler to support new grid definition diffstat: modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml | 4 +- modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/ModifyPaymentPlanActionHandler.java | 7 +- modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessInvoice.java | 28 +++++++-- src-db/database/model/functions/C_INVOICE_POST.xml | 20 +++--- src-db/database/sourcedata/OBUIAPP_PROCESS.xml | 4 +- 5 files changed, 41 insertions(+), 22 deletions(-) diffs (171 lines): diff -r b06cf6616ecc -r 01727c5b58ac modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml --- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml Wed Jul 05 18:57:28 2017 +0530 +++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml Wed Jul 05 14:16:09 2017 +0200 @@ -53,7 +53,7 @@ <!--4EEB3497082C4F2182E16A4371CD5D96--> <UIPATTERN><![CDATA[OBUIAPP_PickAndExecute]]></UIPATTERN> <!--4EEB3497082C4F2182E16A4371CD5D96--> <ISMULTIRECORD><![CDATA[N]]></ISMULTIRECORD> <!--4EEB3497082C4F2182E16A4371CD5D96--> <IS_EXPLICIT_ACCESS><![CDATA[N]]></IS_EXPLICIT_ACCESS> -<!--4EEB3497082C4F2182E16A4371CD5D96--> <ISGRIDLEGACY><![CDATA[Y]]></ISGRIDLEGACY> +<!--4EEB3497082C4F2182E16A4371CD5D96--> <ISGRIDLEGACY><![CDATA[N]]></ISGRIDLEGACY> <!--4EEB3497082C4F2182E16A4371CD5D96--> <ISCANADDRECORDSTOSELECTOR><![CDATA[N]]></ISCANADDRECORDSTOSELECTOR> <!--4EEB3497082C4F2182E16A4371CD5D96--></OBUIAPP_PROCESS> @@ -71,7 +71,7 @@ <!--6F87442DF7BC43AB8A666BDED2F7D64E--> <UIPATTERN><![CDATA[OBUIAPP_PickAndExecute]]></UIPATTERN> <!--6F87442DF7BC43AB8A666BDED2F7D64E--> <ISMULTIRECORD><![CDATA[N]]></ISMULTIRECORD> <!--6F87442DF7BC43AB8A666BDED2F7D64E--> <IS_EXPLICIT_ACCESS><![CDATA[N]]></IS_EXPLICIT_ACCESS> -<!--6F87442DF7BC43AB8A666BDED2F7D64E--> <ISGRIDLEGACY><![CDATA[Y]]></ISGRIDLEGACY> +<!--6F87442DF7BC43AB8A666BDED2F7D64E--> <ISGRIDLEGACY><![CDATA[N]]></ISGRIDLEGACY> <!--6F87442DF7BC43AB8A666BDED2F7D64E--> <ISCANADDRECORDSTOSELECTOR><![CDATA[N]]></ISCANADDRECORDSTOSELECTOR> <!--6F87442DF7BC43AB8A666BDED2F7D64E--></OBUIAPP_PROCESS> diff -r b06cf6616ecc -r 01727c5b58ac modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/ModifyPaymentPlanActionHandler.java --- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/ModifyPaymentPlanActionHandler.java Wed Jul 05 18:57:28 2017 +0530 +++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/ModifyPaymentPlanActionHandler.java Wed Jul 05 14:16:09 2017 +0200 @@ -11,7 +11,7 @@ * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SLU - * All portions are Copyright (C) 2012-2016 Openbravo SLU + * All portions are Copyright (C) 2012-2017 Openbravo SLU * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************ @@ -67,12 +67,15 @@ JSONObject jsonRequest = null; try { jsonRequest = new JSONObject(content); + JSONObject params = jsonRequest.getJSONObject("_params"); + JSONObject gridInfo = params.getJSONObject("grid"); + String strInvoiceId = jsonRequest.getString("inpcInvoiceId"); if (strInvoiceId == null || strInvoiceId.isEmpty() || "null".equalsIgnoreCase(strInvoiceId)) { strInvoiceId = jsonRequest.getString("C_Invoice_ID"); } Invoice invoice = OBDal.getInstance().get(Invoice.class, strInvoiceId); - JSONArray gridRows = jsonRequest.getJSONArray(ApplicationConstants.ALL_ROWS_PARAM); + JSONArray gridRows = gridInfo.getJSONArray(ApplicationConstants.ALL_ROWS_PARAM); List<FIN_PaymentSchedule> databaseRows = new ArrayList<FIN_PaymentSchedule>(); databaseRows = getDatabaseRows(invoice); diff -r b06cf6616ecc -r 01727c5b58ac modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessInvoice.java --- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessInvoice.java Wed Jul 05 18:57:28 2017 +0530 +++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessInvoice.java Wed Jul 05 14:16:09 2017 +0200 @@ -405,8 +405,10 @@ // Updating dummy payment lines with invoice and reverse invoice for (FIN_PaymentScheduleDetail fpsd : psdQuery.list()) { - // invoice payment detail asociated to the order - boolean invoiceFPDOrder = fpsd.getPaymentDetails() != null; + + // Invoice payment detail associated to the order + FIN_PaymentDetail invoiceFPDOrder = fpsd.getPaymentDetails(); + FIN_PaymentSchedule orderPaymentSchedule = fpsd.getOrderPaymentSchedule(); // Create a payment detail FIN_PaymentDetail pd = OBProvider.getInstance().get(FIN_PaymentDetail.class); @@ -425,22 +427,36 @@ dummyPayment.getFINPaymentDetailList().add(pd); - if (invoiceFPDOrder) { + if (invoiceFPDOrder != null) { StringBuilder orderPSDHQLQuery = new StringBuilder(); orderPSDHQLQuery.append(" as fpsd"); orderPSDHQLQuery.append(" join fpsd.paymentDetails fpd"); orderPSDHQLQuery.append(" where fpd.finPayment.id = :paymentId"); orderPSDHQLQuery.append(" and fpsd.id <> :invoicePSDId"); + orderPSDHQLQuery.append(" and fpsd.invoicePaymentSchedule is null"); OBQuery<FIN_PaymentScheduleDetail> orderPSDQuery = OBDal.getInstance() .createQuery(FIN_PaymentScheduleDetail.class, orderPSDHQLQuery.toString()); - orderPSDQuery.setNamedParameter("paymentId", orderPayment.getId()); + orderPSDQuery.setNamedParameter("paymentId", invoiceFPDOrder.getFinPayment() + .getId()); orderPSDQuery.setNamedParameter("invoicePSDId", fpsd.getId()); + orderPSDQuery.setMaxResult(1); + FIN_PaymentScheduleDetail orderPSD = orderPSDQuery.uniqueResult(); - for (FIN_PaymentScheduleDetail orderPSD : orderPSDQuery.list()) { + if (orderPSD == null) { + // Order with no payment schedule detail, create a new one + orderPSD = OBProvider.getInstance().get(FIN_PaymentScheduleDetail.class); + orderPSD.setOrganization(fpsd.getOrganization()); + orderPSD.setAmount(fpsd.getAmount()); + orderPSD.setBusinessPartner(fpsd.getBusinessPartner()); + orderPSD.setPaymentDetails(invoiceFPDOrder); + orderPSD.setOrderPaymentSchedule(orderPaymentSchedule); + } else { // Update order received amount orderPSD.setAmount(orderPSD.getAmount().add(fpsd.getAmount())); - OBDal.getInstance().save(orderPSD); } + OBDal.getInstance().save(orderPSD); + + // Update invoice payment schedule FIN_PaymentSchedule ps = fpsd.getInvoicePaymentSchedule(); ps.setPaidAmount(BigDecimal.ZERO); ps.setOutstandingAmount(fpsd.getAmount()); diff -r b06cf6616ecc -r 01727c5b58ac src-db/database/model/functions/C_INVOICE_POST.xml --- a/src-db/database/model/functions/C_INVOICE_POST.xml Wed Jul 05 18:57:28 2017 +0530 +++ b/src-db/database/model/functions/C_INVOICE_POST.xml Wed Jul 05 14:16:09 2017 +0200 @@ -174,7 +174,6 @@ v_iscashvat C_Invoice.IsCashVat%TYPE; v_invoiceline_qtysum NUMBER; v_prepaymentamt NUMBER; - v_prepayment_inorders NUMBER; v_hasTaxes NUMBER; v_calendarId C_CALENDAR.C_CALENDAR_ID%TYPE; @@ -1797,21 +1796,22 @@ END IF; END IF;--FINISH_PROCESS IF (NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN - --Update the prepayment amount from orders related to the invoice lines. - SELECT COALESCE(SUM(fps.paidamt),0) - INTO v_prepayment_inorders - FROM fin_payment_schedule fps - JOIN c_order o ON o.c_order_id=fps.c_order_id - JOIN c_orderline ol ON ol.c_order_id = o.c_order_id - JOIN c_invoiceline il ON il.c_orderline_id = ol.c_orderline_id - WHERE il.c_invoice_id = v_Record_ID; + -- Update prepayment amount for invoice related to order + UPDATE C_Invoice i + SET prepaymentamt = ( + SELECT COALESCE(SUM(fps.paidamt), 0) + FROM FIN_Payment_Schedule fps + WHERE fps.C_Order_ID = i.C_Order_ID + ) + WHERE i.C_Invoice_ID = v_Record_ID; + END IF;--FINISH_PROCESS + IF (NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN -- Finish up ------------------------------------------------------------- UPDATE C_INVOICE SET DocStatus='CO', Processed='Y', DocAction='RE', - PrepaymentAmt=v_prepayment_inorders, Updated=now(), UpdatedBy=v_UpdatedBy WHERE C_Invoice_ID=v_Record_ID; diff -r b06cf6616ecc -r 01727c5b58ac src-db/database/sourcedata/OBUIAPP_PROCESS.xml --- a/src-db/database/sourcedata/OBUIAPP_PROCESS.xml Wed Jul 05 18:57:28 2017 +0530 +++ b/src-db/database/sourcedata/OBUIAPP_PROCESS.xml Wed Jul 05 14:16:09 2017 +0200 @@ -450,7 +450,7 @@ <!--7DC2C8DC186B4C1DB18E147911950861--> <UIPATTERN><![CDATA[M]]></UIPATTERN> <!--7DC2C8DC186B4C1DB18E147911950861--> <ISMULTIRECORD><![CDATA[N]]></ISMULTIRECORD> <!--7DC2C8DC186B4C1DB18E147911950861--> <IS_EXPLICIT_ACCESS><![CDATA[N]]></IS_EXPLICIT_ACCESS> -<!--7DC2C8DC186B4C1DB18E147911950861--> <ISGRIDLEGACY><![CDATA[Y]]></ISGRIDLEGACY> +<!--7DC2C8DC186B4C1DB18E147911950861--> <ISGRIDLEGACY><![CDATA[N]]></ISGRIDLEGACY> <!--7DC2C8DC186B4C1DB18E147911950861--> <ISCANADDRECORDSTOSELECTOR><![CDATA[N]]></ISCANADDRECORDSTOSELECTOR> <!--7DC2C8DC186B4C1DB18E147911950861--></OBUIAPP_PROCESS> @@ -562,7 +562,7 @@ <!--A832A5DA28FB4BB391BDE883E928DFC5--> <UIPATTERN><![CDATA[M]]></UIPATTERN> <!--A832A5DA28FB4BB391BDE883E928DFC5--> <ISMULTIRECORD><![CDATA[Y]]></ISMULTIRECORD> <!--A832A5DA28FB4BB391BDE883E928DFC5--> <IS_EXPLICIT_ACCESS><![CDATA[N]]></IS_EXPLICIT_ACCESS> -<!--A832A5DA28FB4BB391BDE883E928DFC5--> <ISGRIDLEGACY><![CDATA[Y]]></ISGRIDLEGACY> +<!--A832A5DA28FB4BB391BDE883E928DFC5--> <ISGRIDLEGACY><![CDATA[N]]></ISGRIDLEGACY> <!--A832A5DA28FB4BB391BDE883E928DFC5--> <ISCANADDRECORDSTOSELECTOR><![CDATA[N]]></ISCANADDRECORDSTOSELECTOR> <!--A832A5DA28FB4BB391BDE883E928DFC5--></OBUIAPP_PROCESS> ------------------------------------------------------------------------------ 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