details: https://code.openbravo.com/erp/devel/pi/rev/f06b2e72932e
changeset: 16879:f06b2e72932e
user: Naiara Martinez <naiara.martinez <at> openbravo.com>
date: Tue Jun 19 16:18:44 2012 +0200
summary: Fixed bug 20771: automatic payment completing the invoice not
working properly
diffstat:
modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
| 100 ++++++---
1 files changed, 62 insertions(+), 38 deletions(-)
diffs (183 lines):
diff -r 899980d88f09 -r f06b2e72932e
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
Wed Jun 20 17:21:28 2012 +0200
+++
b/modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
Tue Jun 19 16:18:44 2012 +0200
@@ -16,11 +16,12 @@
* under the License.
* The Original Code is Openbravo ERP.
* The Initial Developer of the Original Code is Openbravo SLU
-* All portions are Copyright (C) 2010-2011 Openbravo SLU
+* All portions are Copyright (C) 2010-2012 Openbravo SLU
* All Rights Reserved.
* Contributor(s): ______________________________________.
************************************************************************/
+
p_message VARCHAR(2000);
p_record_id VARCHAR(60);
p_docAction VARCHAR(60);
@@ -70,11 +71,12 @@
v_creditmultiplier NUMBER:= 1;
v_lang AD_User.Default_AD_Language%TYPE;
v_orderno C_Order.DocumentNo%TYPE:=null;
-v_finpayment_desc FIN_Payment.Description%TYPE;
+v_finpayment_desc VARCHAR2(2000);
v_orderno_trl AD_Message.MsgText%TYPE;
v_invoiceno_trl AD_Message.MsgText%TYPE;
v_payment_desc AD_OrgInfo.em_aprm_payment_desc%TYPE;
v_fin_orig_payment_schedule_id
Fin_Orig_Payment_Schedule.Fin_Orig_Payment_Schedule_Id%Type;
+v_description_first BOOLEAN := TRUE;
TYPE RECORD IS REF CURSOR;
Cur_Params RECORD;
@@ -82,6 +84,7 @@
cur_finaccpaymentmethod RECORD;
cur_PaymentScheduleOrder RECORD;
cur_paymentscheduledetail RECORD;
+cur_linktopayment_scheddetails RECORD;
BEGIN
@@ -570,28 +573,20 @@
FOR cur_paymentschedule IN (
SELECT ps.fin_paymentmethod_id, ps.duedate, ps.c_currency_id,
ps.ad_org_id, ps.fin_payment_schedule_id,
- coalesce(sum(psd.amount),0) as outstandingamt,
psd.fin_payment_schedule_order
+ coalesce(sum(psd.amount),0) as outstandingamt
FROM fin_payment_schedule ps
INNER JOIN fin_payment_scheduledetail psd ON
ps.fin_payment_schedule_id = psd.fin_payment_schedule_invoice
AND
psd.fin_payment_detail_id is null
WHERE ps.c_invoice_id = p_record_id
AND ps.isactive = 'Y'
- GROUP BY ps.fin_paymentmethod_id, ps.duedate, ps.c_currency_id,
ps.ad_org_id, ps.fin_payment_schedule_id, psd.fin_payment_schedule_order
+ GROUP BY ps.fin_paymentmethod_id, ps.duedate, ps.c_currency_id,
ps.ad_org_id, ps.fin_payment_schedule_id
ORDER BY ps.duedate, ps.fin_payment_schedule_id
)
LOOP
-- Create FIN_Payment description
SELECT ad_message_get2('InvoiceDocumentno', v_lang) INTO
v_invoiceno_trl FROM DUAL;
v_finpayment_desc:=v_invoiceno_trl || ': ' || v_documentno;
- SELECT MIN(o.DocumentNo) INTO v_orderno
- FROM fin_payment_schedule ps INNER JOIN c_order o ON (o.C_Order_ID =
ps.C_Order_ID)
- WHERE
fin_payment_schedule_id=cur_paymentschedule.fin_payment_schedule_order;
- IF (v_orderno IS NOT NULL) THEN
- v_finpayment_desc:=v_finpayment_desc || chr(13);
- SELECT ad_message_get2('OrderDocumentno', v_lang) INTO
v_orderno_trl FROM DUAL;
- v_finpayment_desc:=v_finpayment_desc || v_orderno_trl || ': ' ||
v_orderno;
- END IF;
-
+
FOR cur_finaccpaymentmethod IN (
SELECT CASE WHEN v_IsSOTrx='Y' THEN AUTOMATIC_RECEIPT ELSE
AUTOMATIC_PAYMENT END AS CreatePayment,
CASE WHEN v_IsSOTrx='Y' THEN AUTOMATIC_DEPOSIT ELSE
AUTOMATIC_WITHDRAWN END AS CreateFinTransaction,
@@ -637,20 +632,35 @@
'N', 'N', 'N', v_finpayment_desc,
v_Financial_Account_ID, v_PaymentDocType_ID, v_project_id,
v_campaign_id,
v_activity_id, v_user1, v_user2, 'N', 'N', 'N');
- v_FIN_PAYMENT_DETAIL_ID := GET_UUID();
- INSERT INTO fin_payment_detail(
- fin_payment_detail_id, ad_client_id, ad_org_id, created,
createdby,
- updated, updatedby, fin_payment_id, amount, refund, isactive,
- writeoffamt, c_glitem_id, isprepayment)
- VALUES (v_FIN_PAYMENT_DETAIL_ID, v_client_id,
cur_paymentschedule.AD_ORG_ID, now(), p_user,
- now(), p_user, v_FIN_PAYMENT_ID,
cur_paymentschedule.OUTSTANDINGAMT, 'N', 'Y',
- 0, NULL, 'N');
+
+ v_description_first := TRUE;
+ -- link to the new payment all the pending payment schedule
details
+ FOR cur_linktopayment_scheddetails IN (
+ SELECT FIN_PAYMENT_SCHEDULEDETAIL_ID, AMOUNT
+ FROM FIN_PAYMENT_SCHEDULEDETAIL
+ WHERE FIN_PAYMENT_SCHEDULE_INVOICE =
cur_paymentschedule.FIN_PAYMENT_SCHEDULE_ID
+ AND FIN_PAYMENT_DETAIL_ID IS NULL
+ )
+ LOOP
+ v_FIN_PAYMENT_DETAIL_ID := GET_UUID();
+ INSERT INTO fin_payment_detail(
+ fin_payment_detail_id, ad_client_id, ad_org_id, created,
createdby,
+ updated, updatedby, fin_payment_id, amount, refund, isactive,
+ writeoffamt, c_glitem_id, isprepayment)
+ VALUES (v_FIN_PAYMENT_DETAIL_ID, v_client_id,
cur_paymentschedule.AD_ORG_ID, now(), p_user,
+ now(), p_user, v_FIN_PAYMENT_ID,
cur_linktopayment_scheddetails.AMOUNT, 'N', 'Y',
+ 0, NULL, 'N');
+
+ UPDATE FIN_PAYMENT_SCHEDULEDETAIL
+ SET FIN_PAYMENT_DETAIL_ID = v_FIN_PAYMENT_DETAIL_ID
+ WHERE FIN_PAYMENT_SCHEDULEDETAIL_ID =
cur_linktopayment_scheddetails.FIN_PAYMENT_SCHEDULEDETAIL_ID
+ AND FIN_PAYMENT_DETAIL_ID IS NULL;
+ END LOOP;
--Fixes 14403 defect
-- Payment document id is added in success message when invoice
is completed with auto receipt is checked
v_Message:='@APRM_PaymentDocumentno@ ' || v_PaymentDocumentNo ||
' @beenCreated@';
UPDATE ad_ep_instance_para SET p_text= v_Message WHERE
ad_ep_instance_id= p_ep_instance AND parametername LIKE 'Message';
-
IF (cur_finaccpaymentmethod.deferred = 'N'
AND cur_finaccpaymentmethod.ExecutionType='A') THEN
INSERT INTO aprm_pending_paymentinvoice (
@@ -662,11 +672,7 @@
now(), p_user, now(), p_user,
'N', v_fin_payment_id, p_record_id,
cur_finaccpaymentmethod.execution_process_id);
END IF;
-
- UPDATE FIN_PAYMENT_SCHEDULEDETAIL
- SET FIN_PAYMENT_DETAIL_ID = v_FIN_PAYMENT_DETAIL_ID
- WHERE FIN_PAYMENT_SCHEDULE_INVOICE =
cur_paymentschedule.FIN_PAYMENT_SCHEDULE_ID
- AND FIN_PAYMENT_DETAIL_ID IS NULL;
+
UPDATE FIN_PAYMENT
SET PROCESSED = 'Y',
EM_APRM_PROCESS_PAYMENT = 'R'
@@ -674,15 +680,27 @@
-- Update payment schedule amounts and payment monitor in case
that the payment is not left in awaiting
-- execution status.
- IF (cur_finaccpaymentmethod.ExecutionType<>'A') THEN
- FOR cur_PaymentScheduleOrder IN (
- SELECT FIN_PAYMENT_SCHEDULE_ORDER
- FROM FIN_PAYMENT_SCHEDULEDETAIL
- WHERE FIN_PAYMENT_SCHEDULE_INVOICE =
cur_paymentschedule.FIN_PAYMENT_SCHEDULE_ID
- AND FIN_PAYMENT_SCHEDULE_ORDER IS NOT NULL
- GROUP BY FIN_PAYMENT_SCHEDULE_ORDER
- ) LOOP
-
+ FOR cur_PaymentScheduleOrder IN (
+ SELECT FIN_PAYMENT_SCHEDULE_ORDER
+ FROM FIN_PAYMENT_SCHEDULEDETAIL
+ WHERE FIN_PAYMENT_SCHEDULE_INVOICE =
cur_paymentschedule.FIN_PAYMENT_SCHEDULE_ID
+ AND FIN_PAYMENT_SCHEDULE_ORDER IS NOT NULL
+ GROUP BY FIN_PAYMENT_SCHEDULE_ORDER
+ ) LOOP
+ SELECT MIN(o.DocumentNo) INTO v_orderno
+ FROM fin_payment_schedule ps INNER JOIN c_order o ON
(o.C_Order_ID = ps.C_Order_ID)
+ WHERE
fin_payment_schedule_id=cur_PaymentScheduleOrder.FIN_PAYMENT_SCHEDULE_ORDER;
+ IF (v_orderno IS NOT NULL) THEN
+ IF (v_description_first) THEN
+ v_finpayment_desc:=v_finpayment_desc || chr(13);
+ SELECT ad_message_get2('OrderDocumentno', v_lang) INTO
v_orderno_trl FROM DUAL;
+ v_finpayment_desc:=v_finpayment_desc || v_orderno_trl ||
': ' || v_orderno;
+ v_description_first := FALSE;
+ ELSE
+ v_finpayment_desc:=v_finpayment_desc || ', ' || v_orderno;
+ END IF;
+ END IF;
+ IF (cur_finaccpaymentmethod.ExecutionType<>'A') THEN
UPDATE FIN_PAYMENT_SCHEDULE
SET PAIDAMT = (SELECT COALESCE(sum(amount +
COALESCE(writeoffamt, 0)), 0)
FROM fin_payment_scheduledetail
@@ -703,8 +721,14 @@
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;
-
+ END IF;
+ END LOOP;
+ IF (length(v_finpayment_desc) > 255) THEN
+ SELECT SUBSTR(v_finpayment_desc, 1, 252) || '...' INTO
v_finpayment_desc FROM DUAL;
+ END IF;
+ UPDATE FIN_PAYMENT SET DESCRIPTION = v_finpayment_desc
+ WHERE FIN_PAYMENT_ID = v_FIN_PAYMENT_ID;
+ IF (cur_finaccpaymentmethod.ExecutionType<>'A') THEN
UPDATE FIN_PAYMENT_SCHEDULE
SET PAIDAMT = PAIDAMT +
COALESCE(cur_paymentschedule.OUTSTANDINGAMT,0),
OUTSTANDINGAMT = OUTSTANDINGAMT -
COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0)
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits