Split the discount into Wallet Refund, Donation and Cart Discount Item in Sales Order

Description:

Create 3 body fields in sales order for storing the values fot  Wallet Refund, Donation and Cart Discount. 
While saving the record add items on the line level for wallet refund, donation and cart level and source the amount for the items for corresponding body field in Sales order.
Script needs to work only on creation of the sales order.

Solution:

/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
/************************************************************************************
YALLA - 56 Support - Using a script split the discount into Wallet Refund,
Donation and Cart Discount Item in Sales Order
************************************************************************************
*
* Author: Jobin & Jismi IT Services LLP
*
* Date Created : 5th-July-2022
*
* Description : Support - Using a script split the discount into Wallet Refund,
* Donation and Cart Discount Item in Sales Order
*
* REVISION HISTORY
*
***********************************************************************************/
define(['N/record'],
/**
* @param{record} record
*/
(record) => {


const ITEM_WALLET_REFUND_ID = 35089;
const ITEM_DONATION_ID = 35090;
const ITEM_CART_DISCOUNT_ID = 35091;

/**
* Function to check the parameters
* @param parameter
* @returns {boolean}
*/


const checkForParameter = function checkForParameter(parameter) {

if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null" && parameter !== "undefined" && parameter !== " " && parameter !== 'false' && parameter !== 0 && parameter !== '0') {
return true;
}

}

/**
* Defines the function definition that is executed after record is submitted.
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
* @since 2015.2
*/
const afterSubmit = (scriptContext) => {


try {
if (scriptContext.type === 'create') {

let currentRecord = scriptContext.newRecord;
let salesOrderData = record.load({
type: record.Type.SALES_ORDER,
id: currentRecord.id,
isDynamic: true
});
log.debug("salesOrderData", salesOrderData);


let itemArray = [
{
id: ITEM_WALLET_REFUND_ID,
rate: salesOrderData.getValue({
fieldId: "custbody_jj_wallet_refund_yalla_56"
})
},
{
id: ITEM_DONATION_ID,
rate: salesOrderData.getValue({
fieldId: "custbody_jj_donation_yalla_56"
})
},
{
id: ITEM_CART_DISCOUNT_ID,
rate: salesOrderData.getValue({
fieldId: "custbody_jj_cart_discount_yalla_56"
})
},];

log.debug("itemArray", itemArray);

let lineNumber;

for (let i = 0; i < itemArray.length; i++) {

if (checkForParameter(itemArray[i]["rate"])) {

lineNumber = salesOrderData.findSublistLineWithValue({
sublistId: 'item',
fieldId: 'item',
value: itemArray[i]["id"]
});
log.debug("lineNumber1", lineNumber);
if (lineNumber === -1) {
salesOrderData.selectNewLine({sublistId: 'item'});
salesOrderData.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: itemArray[i]["id"]

});
salesOrderData.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: itemArray[i]["rate"]

});
salesOrderData.commitLine({
sublistId: 'item',
});
} else {
log.debug("line**", lineNumber);
let currentRate = salesOrderData.getSublistValue({
sublistId: 'item',
fieldId: 'rate',
line: lineNumber,
});
log.debug("currentRate", currentRate)
if (currentRate !== itemArray[i]["rate"]) {
let lineNum = salesOrderData.selectLine({
sublistId: 'item',
line: lineNumber
});

salesOrderData.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: itemArray[i]["id"]

});
salesOrderData.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
line: lineNum,
value: itemArray[i]["rate"]

});
salesOrderData.commitLine({
sublistId: 'item',
});
}

}
}

}

salesOrderData.save({
enableSourcing: true,
ignoreMandatoryFields: true
})
}

} catch (err) {
log.debug("error@afterSubmit", err)
}
}

return {afterSubmit}

});


Leave a comment

Your email address will not be published. Required fields are marked *