Oracle API to Cancellation of AP Invoices.
DECLARE
v_error_code
VARCHAR2 (100);
v_debug_info
VARCHAR2 (1000);
v_boolean
BOOLEAN;
v_message_name
VARCHAR2 (1000);
v_invoice_amount
NUMBER;
v_base_amount
NUMBER;
v_temp_cancelled_amount NUMBER;
v_cancelled_by
VARCHAR2 (1000);
v_cancelled_amount NUMBER;
v_cancelled_date
DATE;
v_last_update_date DATE;
v_orig_prepay_amt NUMBER;
v_pay_cur_inv_amt NUMBER;
v_token
VARCHAR2 (100);
CURSOR c1
IS
SELECT DISTINCT a.org_id, a.invoice_id,
a.last_update_login,
a.last_updated_by, b.accounting_date
FROM
ap_invoices_all a, ap_invoice_lines_all b
WHERE 1 =
1
AND
a.invoice_id = b.invoice_id
AND
a.invoice_id IN (SELECT invoice_id
FROM ap_invoice_cancel01aug2015)
AND
NOT EXISTS (SELECT 1
FROM
ap_invoice_distributions_all
WHERE invoice_id
= a.invoice_id)
-- and a.invoice_id=44891029
AND
cancelled_date IS NULL;
BEGIN
FOR i IN c1
LOOP
mo_global.init ('PO');
mo_global.set_policy_context ('S', i.org_id);
v_boolean :=
ap_cancel_pkg.is_invoice_cancellable (p_invoice_id
=> i.invoice_id,
p_error_code
=> v_error_code,
p_debug_info
=> v_debug_info,
p_calling_sequence => NULL
);
IF v_boolean = TRUE
THEN
UPDATE
ap_invoice_cancel01aug2015
SET status = 'S',
error_message =
'Invoice ' || i.invoice_id || '
is cancellable'
WHERE invoice_id =
i.invoice_id;
ELSE
UPDATE
ap_invoice_cancel01aug2015
SET status = 'E',
error_message =
'Invoice ' || i.invoice_id || ' is not cancellable'
WHERE invoice_id =
i.invoice_id;
END IF;
IF v_boolean = TRUE
THEN
v_boolean :=
ap_cancel_pkg.ap_cancel_single_invoice
(p_invoice_id
=> i.invoice_id,
p_last_updated_by
=> i.last_updated_by,
p_last_update_login
=> i.last_update_login,
p_accounting_date
=> i.accounting_date,
p_message_name
=> v_message_name,
p_invoice_amount
=> v_invoice_amount,
p_base_amount
=> v_base_amount,
p_temp_cancelled_amount
=> v_temp_cancelled_amount,
p_cancelled_by
=> v_cancelled_by,
p_cancelled_amount
=> v_cancelled_amount,
p_cancelled_date
=> v_cancelled_date,
p_last_update_date
=> v_last_update_date,
p_original_prepayment_amount
=> v_orig_prepay_amt,
p_pay_curr_invoice_amount
=> v_pay_cur_inv_amt,
p_token
=> v_token,
p_calling_sequence
=> NULL
);
IF v_boolean
THEN
UPDATE
ap_invoice_cancel01aug2015
SET status
= 'S',
error_message =
'Invoice ' ||
i.invoice_id || ' is cancelled'
WHERE invoice_id =
i.invoice_id;
COMMIT;
ELSE
UPDATE
ap_invoice_cancel01aug2015
SET status
= 'S',
error_message =
'Failed to Cancel the Invoice' ||
v_message_name
WHERE invoice_id =
i.invoice_id;
ROLLBACK;
END IF;
END IF;
END LOOP;
END;
No comments:
Post a Comment