Credit memo creation in Oracle application
AR_CREDIT_MEMO_API_PUB.CREATE_REQUEST : It will create a request for a Credit Memo
AR_CM_APPLICATION_PUB.ACTIVITY_APPLICATION: It will apply the credit memo to the Refund activity.
set serveroutput on size 1000000
-- Declaration section
DECLARE
l_dummy varchar2(240);
l_customer_trx_id ra_customer_trx.customer_trx_id%type;
l_line_credits_flag ra_cm_requests.line_credits_flag%type;
l_line_amount number;
l_freight_amount number := 0;
l_cm_lines_tbl arw_cmreq_cover.cm_line_tbl_type_cover;
l_cm_reason_code varchar2(150);
l_comments varchar2(150);
l_msg_count number := 0;
l_msg_data varchar2(20000) := null;
l_return_status varchar2(1);
l_request_id NUMBER;
l_batch_source_name varchar2(150) default null;
cm_trx_id number;
BEGIN
-- Set the applications and org context
fnd_global.apps_initialize(1318,50559,222,0);
mo_global.init('AR');
mo_global.set_policy_context('S',204);
-- provide CUSTOMER_TRX_ID of the invoice to credit
l_customer_trx_id := 527689;
l_comments := 'Demo for Create_Request API';
-- Populate Batch Source information
l_batch_source_name := 'TEST API';
-- the presence of l_cm_lines_tbl indicates this is a LINE-LEVEL credit
-- details for (1) are credits against line #1 identified by customer_trx_line_id = 824472
l_cm_lines_tbl(1).customer_trx_line_id := 824472;
l_cm_lines_tbl(1).quantity_credited := -1;
l_cm_lines_tbl(1).price := 150.00;
l_cm_lines_tbl(1).extended_amount := -150.00;
-- details for (2) are credits against line #2 identified by customer_trx_line_id = 824473
l_cm_lines_tbl(2).customer_trx_line_id := 824473;
l_cm_lines_tbl(2).quantity_credited := -2;
l_cm_lines_tbl(2).price := 200.00;
l_cm_lines_tbl(2).extended_amount := -400.00;
-- call CREATE_REQUEST
AR_CREDIT_MEMO_API_PUB.CREATE_REQUEST(
P_API_VERSION => 1.0,
P_INIT_MSG_LIST => FND_API.G_TRUE,
P_COMMIT => FND_API.G_FALSE,
P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
P_CUSTOMER_TRX_ID => l_customer_trx_id,
P_LINE_CREDIT_FLAG => 'Y',
P_CM_REASON_CODE => 'EXPIRED PRODUCT',
P_CM_LINE_TBL => l_cm_lines_tbl,
P_SKIP_WORKFLOW_FLAG => 'Y',
P_CREDIT_METHOD_INSTALLMENTS => null,
P_CREDIT_METHOD_RULES => null,
P_BATCH_SOURCE_NAME => l_batch_source_name,
P_ORG_ID => 204,
X_REQUEST_ID => l_request_id,
X_RETURN_STATUS => l_return_status,
X_MSG_COUNT => l_msg_count,
X_MSG_DATA => l_msg_data);
-- return information about the status of the API run
FND_MSG_PUB.count_and_get (
p_encoded => FND_API.g_false,
p_count => l_msg_count,
p_data => l_msg_data );
dbms_output.put_line('Return Status ==> '||l_return_status);
dbms_output.put_line('Credit Memo request_id ==> '||l_request_id);
dbms_output.put_line('l_msg_count ==> '||l_msg_count);
-- display messages from the message stack
FOR I IN 1..L_MSG_COUNT LOOP
DBMS_OUTPUT.PUT_LINE(SUBSTR(FND_MSG_PUB.GET(P_MSG_INDEX => I, P_ENCODED => 'F'), 1, 254));
END LOOP;
IF l_return_status <> 'S' THEN
NULL;
ELSE
select cm_customer_trx_id
into cm_trx_id
from ra_cm_requests_all
where request_id = l_request_id;
dbms_output.put_line(' CM trx_id = '|| cm_trx_id );
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('exception error!');
dbms_output.put_line(substr(sqlerrm, 1, 80));
fnd_message.retrieve(l_dummy);
dbms_output.put_line(l_dummy);
END;
/
Check the Credit memo Created in base table:
SQL> select trx_number from ra_customer_trx_All where customer_trx_id = 527702;
How to apply credit memo to refund activity: Apply Credit Memo to refund activity
Reference: