details: /erp/devel/pi/rev/dd590d8a6075
changeset: 12158:dd590d8a6075
user: Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date: Fri May 13 12:58:15 2011 +0200
summary: Fixes invoice processing extension point for APRM
diffstat:
modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
| 55 ++++++++-
1 files changed, 45 insertions(+), 10 deletions(-)
diffs (124 lines):
diff -r 1cec5d04837c -r dd590d8a6075
modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
---
a/modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
Fri May 13 12:44:53 2011 +0200
+++
b/modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
Fri May 13 12:58:15 2011 +0200
@@ -65,7 +65,7 @@
v_Line FIN_FINACC_TRANSACTION.LINE%TYPE;
v_count NUMBER;
v_PaymentPriority VARCHAR(32);
-v_creditmultiplier NUMBER:= 1;
+v_creditmultiplier NUMBER := 1;
TYPE RECORD IS REF CURSOR;
@@ -164,6 +164,7 @@
v_invoicedamount NUMBER;
v_notassignedamount NUMBER;
v_assignedamount NUMBER;
+ v_pendingAmountFromOrder NUMBER:=0;
v_scheduledetailamount NUMBER;
v_oldorder VARCHAR2(32) := '-1';
v_payment_schedule_invoice VARCHAR2(32);
@@ -335,6 +336,16 @@
IF(v_Count=0) THEN
v_differenceamount:= 0;
+ -- Calculate
+ SELECT SUM(amount) + v_pendingAmountFromOrder INTO
v_pendingAmountFromOrder
+ FROM fin_payment_scheduledetail
+ WHERE fin_payment_schedule_order =
order_schdet.fin_payment_schedule_order
+ AND fin_payment_detail_id is null;
+ -- link remaining payment schedule detail from order to the
invoice as it is fully invoiced
+ UPDATE fin_payment_scheduledetail
+ SET fin_payment_schedule_invoice = v_payment_schedule_invoice
+ WHERE fin_payment_schedule_order =
order_schdet.fin_payment_schedule_order
+ AND fin_payment_detail_id is null;
END IF;
IF (v_differenceamount > 0) THEN
@@ -400,7 +411,7 @@
v_oldorder := order_schdet.order_id;
END LOOP;
- IF (v_scheduledamount != 0 ) THEN
+ IF (v_scheduledamount - v_pendingAmountFromOrder != 0 ) THEN
-- no orders, insert payment schedule detail with remaining amount
INSERT INTO fin_payment_scheduledetail
(
@@ -418,8 +429,9 @@
null,
v_payment_schedule_invoice,
null,
- v_scheduledamount
+ v_scheduledamount - v_pendingAmountFromOrder
);
+ v_pendingAmountFromOrder:=0;
END IF;
END LOOP;
@@ -433,7 +445,7 @@
FROM FIN_PAYMENT_SCHEDULE
WHERE C_INVOICE_ID=P_RECORD_ID;
-- Getting DueAmount from FIN_PAYMENT_SCHEDULE for the Invoice
- SELECT sum(OUTSTANDINGAMT) as DueAmount
+ SELECT coalesce(sum(OUTSTANDINGAMT),0) as DueAmount
INTO V_DueAmount
FROM FIN_PAYMENT_SCHEDULE
WHERE C_INVOICE_ID=P_RECORD_ID
@@ -567,20 +579,43 @@
AND FIN_PAYMENT_SCHEDULE_ORDER IS NOT NULL
GROUP BY FIN_PAYMENT_SCHEDULE_ORDER
) LOOP
+
UPDATE FIN_PAYMENT_SCHEDULE
- SET PAIDAMT = PAIDAMT + cur_paymentschedule.OUTSTANDINGAMT,
- OUTSTANDINGAMT=OUTSTANDINGAMT -
cur_paymentschedule.OUTSTANDINGAMT
+ SET PAIDAMT = (SELECT COALESCE(sum(amount +
COALESCE(writeoffamt, 0)), 0)
+ FROM fin_payment_scheduledetail
+ WHERE
fin_payment_schedule_order=cur_PaymentScheduleOrder.FIN_PAYMENT_SCHEDULE_ORDER
AND
+ fin_payment_detail_id is not null AND
+ exists (SELECT 1
+ FROM fin_payment,
fin_payment_detail
+ WHERE
fin_payment.fin_payment_id = fin_payment_detail.fin_payment_id
+ and
fin_payment.processed='Y' and fin_payment.status<>'RPAE'
+ and
fin_payment_detail.fin_payment_detail_id =
fin_payment_scheduledetail.fin_payment_detail_id)),
+ OUTSTANDINGAMT = (SELECT COALESCE(sum(amount), 0)
+ FROM fin_payment_scheduledetail
+ WHERE
fin_payment_schedule_order=cur_PaymentScheduleOrder.FIN_PAYMENT_SCHEDULE_ORDER
AND
+ (fin_payment_detail_id is null OR
+ exists (SELECT 1
+ FROM fin_payment,
fin_payment_detail
+ WHERE
fin_payment.fin_payment_id = fin_payment_detail.fin_payment_id
+ and
fin_payment.processed='Y' and fin_payment.status = 'RPAE'
+ and
fin_payment_detail.fin_payment_detail_id =
fin_payment_scheduledetail.fin_payment_detail_id)))
WHERE FIN_PAYMENT_SCHEDULE_ID =
cur_PaymentScheduleOrder.FIN_PAYMENT_SCHEDULE_ORDER;
END LOOP;
UPDATE FIN_PAYMENT_SCHEDULE
SET PAIDAMT = PAIDAMT +
COALESCE(cur_paymentschedule.OUTSTANDINGAMT,0),
- OUTSTANDINGAMT=0
+ OUTSTANDINGAMT = OUTSTANDINGAMT -
COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0)
WHERE FIN_PAYMENT_SCHEDULE_ID =
cur_paymentschedule.FIN_PAYMENT_SCHEDULE_ID;
+ -- Getting DueAmount from FIN_PAYMENT_SCHEDULE for the Invoice
+ SELECT coalesce(sum(OUTSTANDINGAMT),0) as DueAmount
+ INTO V_DueAmount
+ FROM FIN_PAYMENT_SCHEDULE
+ WHERE C_INVOICE_ID=P_RECORD_ID
+ AND duedate<=now();
UPDATE C_INVOICE
SET TOTALPAID = TOTALPAID +
COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0),
- OUTSTANDINGAMT = 0,
- DUEAMT = DUEAMT -
COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0)
+ OUTSTANDINGAMT = OUTSTANDINGAMT -
COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0),
+ DUEAMT = V_DueAmount
WHERE C_INVOICE_ID = P_RECORD_ID;
UPDATE C_INVOICE
SET ISPAID = 'Y'
@@ -626,7 +661,7 @@
DECLARE
v_count NUMBER;
v_documentno VARCHAR2(40);
- v_PaymentPlanExpectedTotal NUMBER:= 0;
+ v_PaymentPlanExpectedTotal NUMBER := 0;
BEGIN
SELECT count(*), max(p.documentno)
INTO v_count, v_documentno
------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits