Step:1
=====
Go to Ajax Callback Process.
Create Process.
Name: INSERT_PAYMENT
Type: Execute Code
PLSQL Code:
DECLARE
V_PK_ID NUMBER;
V_AUTO_NUMBER NUMBER;
V_INVOICE_NO VARCHAR2 (50);
BEGIN
IF :P31_ID IS NULL
THEN
-- GENERATE NEW PK_ID
SELECT COALESCE (MAX (ID), 100) + 1 INTO V_PK_ID FROM SIM_CARD_PAYMENT_MST;
-- GENERATE NEW AUTO_NUMBER
SELECT COALESCE (MAX (AUTO_NUMBER), 100) + 1
INTO V_AUTO_NUMBER
FROM SIM_CARD_PAYMENT_MST
WHERE COM_ID = :GCOM_ID;
-- GENERATE SELL_NUMBER
V_INVOICE_NO := 'INV/' || TO_CHAR (SYSDATE, 'YY') || '/' || V_AUTO_NUMBER;
-- INSERT THE NEW RECORD
INSERT INTO SIM_CARD_PAYMENT_MST (
ID,
AUTO_NUMBER,
INVOICE_NO,
INVOICE_DATE,
ASSIGEN_COMPANY_ID,
TOTAL_AMOUNT,
DISCOUNT,
PAID_AMOUNT,
DUE_AMOUNT,
STATUS,
COM_ID,
CREATOR,
CREATED_ON )
VALUES (
V_PK_ID,
V_AUTO_NUMBER,
V_INVOICE_NO,
SYSDATE,
:P31_ASSIGEN_COMPANY_ID,
:P31_TOTAL_AMOUNT,
:P31_DISCOUNT,
:P31_PAID_AMOUNT,
:P31_DUE_AMOUNT,
1,
:GCOM_ID,
:GUSER_ID,
TO_CHAR (SYSDATE, 'DD-MM-RRRR HH:MI:SS')
)
RETURNING
ID,
AUTO_NUMBER,
INVOICE_NO
INTO
:P31_ID,
:P31_AUTO_NUMBER,
:P31_INVOICE_NO;
END IF;
IF :P31_ID IS NOT NULL
THEN
UPDATE SIM_CARD_PAYMENT_MST SET
ASSIGEN_COMPANY_ID = :P31_ASSIGEN_COMPANY_ID,
TOTAL_AMOUNT = :P31_TOTAL_AMOUNT,
DISCOUNT = :P31_DISCOUNT,
PAID_AMOUNT = :P31_PAID_AMOUNT,
DUE_AMOUNT = :P31_DUE_AMOUNT,
MODIFIER = :GUSER_ID,
MODIFIED_ON = TO_CHAR (SYSDATE, 'DD-MM-RRRR HH:MI:SS')
WHERE ID = :P31_ID;
END IF;
COMMIT;
APEX_JSON.OPEN_OBJECT;
APEX_JSON.WRITE ('jsonstatus', 200);
APEX_JSON.WRITE ('id', :P31_ID);
APEX_JSON.WRITE ('invoice_no', :P31_INVOICE_NO);
APEX_JSON.WRITE ('invoice_date', :P31_INVOICE_DATE);
APEX_JSON.WRITE ('assigen_company_id', :P31_ASSIGEN_COMPANY_ID);
APEX_JSON.WRITE ('auto_number', :P31_AUTO_NUMBER);
APEX_JSON.WRITE ('total_amount', :P31_TOTAL_AMOUNT);
APEX_JSON.WRITE ('discount', :P31_DISCOUNT);
APEX_JSON.WRITE ('paid_amount', :P31_PAID_AMOUNT);
APEX_JSON.WRITE ('due_amount', :P31_DUE_AMOUNT);
APEX_JSON.WRITE ('status', :P31_STATUS);
APEX_JSON.WRITE ('com_id', :P31_COM_ID);
apex_json.close_all;
EXCEPTION
WHEN OTHERS
THEN
-- ROLLBACK ON ERROR
ROLLBACK;
-- RETURN AN ERROR RESPONSE
apex_json.open_object;
apex_json.write ('jsonstatus', 500);
apex_json.write ('error', SQLERRM);
apex_json.close_all;
END;
Step:2
====
Go to Function and Global Variable Declaration:
// ******* Payment master Insert and Update process **********
function f_insertPayment() { //function Name
let agent = $v("P31_ASSIGEN_COMPANY_ID");
// Validation Checks
if (!agent) {
apex.message.alert('❌ Agent Name cannot be blank.');
return;
}
// Show Loading Indicator
// loading();
// AJAX Request to Insert Payment
apex.server.process(
'INSERT_PAYMENT', //Ajax Callback Name (must copy the same Name)
{
pageItems: '#P31_ID, #P31_INVOICE_NO, #P31_INVOICE_DATE, #P31_ASSIGEN_COMPANY_ID, #P31_AUTO_NUMBER, #P31_TOTAL_AMOUNT, #P31_DISCOUNT, #P31_PAID_AMOUNT, #P31_DUE_AMOUNT, #P31_STATUS, #P31_PAID_FLAG, #P31_COM_ID, #P31_CREATOR, #P31_CREATED_ON, #P31_MODIFIER, #P31_MODIFIED_ON'
},
{
success: function (data) {
if (data.jsonstatus=== 200) {
// Populate form fields with the returned data
$s('P31_ID', data.id);
$s('P31_INVOICE_NO', data.invoice_no);
$s('P31_INVOICE_DATE', data.invoice_date);
$s('P31_ASSIGEN_COMPANY_ID', data.assigen_company_id);
$s('P31_AUTO_NUMBER', data.auto_number);
$s('P31_TOTAL_AMOUNT', data.total_amount);
$s('P31_DISCOUNT', data.discount);
$s('P31_PAID_AMOUNT', data.paid_amount);
$s('P31_DUE_AMOUNT', data.due_amount);
$s('P31_COM_ID', data.com_id);
$s('P31_CREATOR', data.creator);
$s('P31_CREATED_ON', data.created_on);
apex.region('detailsid').refresh(); // refresh details Region
apex.message.alert('✅ Agent inserted successfully.');
removeLoading();
} else {
apex.message.alert('❌ Error: Unexpected response from server.');
}
},
error: function (jqXHR, textStatus, errorThrown) {
apex.message.alert('❌ AJAX Error: ' + textStatus + ' - ' + errorThrown);
console.error("AJAX Error:", textStatus, errorThrown);
}
}
);
}
Step:3
====
Create Button.
Name: Save
Dynamic Action: INSERT_PAYMENT
Event: Click
Action: Execute Javascript Code
Code:
loading();
f_insertPayment(); //Call Global function Name
setTimeout(removeLoading, 2000);
==========================================
Clear All Apex Items without page load for New Insert Data.
Create Button.
Name: New_Insert
Event: Click
Action: Execute Javascript Code
Code:
loading();
$s('P31_ID', '');
$s('P31_INVOICE_NO', '');
// $s('P31_INVOICE_DATE', '');
$s('P31_ASSIGEN_COMPANY_ID', '');
$s('P31_AUTO_NUMBER', '');
$s('P31_TOTAL_AMOUNT', '');
$s('P31_DISCOUNT', '');
$s('P31_PAID_AMOUNT', '');
$s('P31_DUE_AMOUNT', '');
$s('P31_STATUS', '');
$s('P31_PAID_FLAG', '');
$s('P31_COM_ID', '');
$s('P31_CREATOR', '');
$s('P31_CREATED_ON', '');
$s('P31_MODIFIER', '');
$s('P31_MODIFIED_ON', '');
apex.region('detailsid').refresh(); //Clear Region Static ID
setTimeout(removeLoading, 2000);