Function to create a Sales order for Shopify order

/**
* @description Create the Sales Order for the Shopify order
* @param {Object} parameterObject
* @param {Number|String} parameterObject.shopifyRecordId - The shopify integration record id
* @param {Number|String} parameterObject.shopifyOrderId - The shopify order id
* @param {Number|String} parameterObject.entity - The NetSuite Customer Id for the order
* @param {String} parameterObject.cardCompany - specifies the card company
* @param {String} parameterObject.order_date - the shopify order date
* @param {Number|String} parameterObject.order_num - the shopify order number
* @param {String} parameterObject.order_note - the shopify order note
* @param {Array} parameterObject.order_line - the shopify order item lines details
* @param {Object} parameterObject.shipping_address - the shipping address of the shopify order
* @param {Object} parameterObject.billing_address - the billing address of the shopify order
* @param {Array} parameterObject.shipping_lines - the shipping lines of the shopify order which contains the shipment methods details
* @param {Array} parameterObject.discount_applications - the discount details if any
* @returns {*|number|boolean} - Sales Order Internal ID if successful, else false
*/
createSalesOrder({
shopifyRecordId,
shopifyOrderId,
entity,
cardCompany,
order_date,
order_num,
order_note,
order_line,
shipping_address,
billing_address,
shipping_lines,
discount_applications,
discount_amount,
tax_lines
}) {

try {
let salesOrderRecord = record.transform({
fromType: record.Type.CUSTOMER,
fromId: entity,
toType: record.Type.SALES_ORDER,
isDynamic: true
});

let shippingFields = [];
if (jjUtil.checkForParameter(shipping_address)) {

shippingFields = [
{
fieldId: 'country',
value: jjUtil.isNumberOrString(shipping_address.country_code) ? shipping_address.country_code : ""
},
{
fieldId: 'attention',
value: ""
},
{
fieldId: 'addressee',
value: jjUtil.isNumberOrString(shipping_address.name) ? shipping_address.name : ""
},
{
fieldId: 'addrphone',
value: jjUtil.isNumberOrString(shipping_address.phone) ? shipping_address.phone : ""
},
{
fieldId: 'addr1',
value: jjUtil.isNumberOrString(shipping_address.address1) ? shipping_address.address1 : ""
},
{
fieldId: 'addr2',
value: jjUtil.isNumberOrString(shipping_address.address2) ? shipping_address.address2 : ""
},
{
fieldId: 'addr3',
value: ""
},
{
fieldId: 'city',
value: jjUtil.isNumberOrString(shipping_address.city) ? shipping_address.city : ""
},
{
fieldId: 'state',
value: jjUtil.isNumberOrString(shipping_address.province) ? shipping_address.province : ""
},
{
fieldId: 'zip',
value: jjUtil.isNumberOrString(shipping_address.zip) ? shipping_address.zip : ""
}
]

}

let shipAddressRecord = salesOrderRecord.getSubrecord({
fieldId: 'shippingaddress'
});
shipAddressRecord.setValue({
fieldId: 'customform',
value: '56'
});
log.debug('shipAddressRecord', shipAddressRecord);
//Set Address Sublist Subrecord values
for (let subrecordField of shippingFields) {
if (subrecordField.value !== null && subrecordField.value !== undefined && subrecordField.value !== "") {
try {
shipAddressRecord.setValue({
fieldId: subrecordField.fieldId,
value: subrecordField.value,
ignoreFieldChange: true
});
} catch (er) {
log.error('error@ setting shipping Address Fields skipped', JSON.stringify(er));
continue;
}
}
}


let billingFields = [
{
fieldId: 'country',
value: jjUtil.isNumberOrString(billing_address.country_code) ? billing_address.country_code : ""
},
{
fieldId: 'attention',
value: ""
},
{
fieldId: 'addressee',
value: jjUtil.isNumberOrString(billing_address.name) ? billing_address.name : ""
},
{
fieldId: 'addrphone',
value: jjUtil.isNumberOrString(billing_address.phone) ? billing_address.phone : ""
},
{
fieldId: 'addr1',
value: jjUtil.isNumberOrString(billing_address.address1) ? billing_address.address1 : ""
},
{
fieldId: 'addr2',
value: jjUtil.isNumberOrString(billing_address.address2) ? billing_address.address2 : ""
},
{
fieldId: 'addr3',
value: ""
},
{
fieldId: 'city',
value: jjUtil.isNumberOrString(billing_address.city) ? billing_address.city : ""
},
{
fieldId: 'state',
value: jjUtil.isNumberOrString(billing_address.province) ? billing_address.province : ""
},
{
fieldId: 'zip',
value: jjUtil.isNumberOrString(billing_address.zip) ? billing_address.zip : ""
}
]

let billAddressRecord = salesOrderRecord.getSubrecord({
fieldId: 'billingaddress'
});
log.debug('billAddressRecord', billAddressRecord);
//Set Address Sublist Subrecord values
for (let subrecordField2 of billingFields) {
if (subrecordField2.value !== null && subrecordField2.value !== undefined && subrecordField2.value !== "") {
try {
billAddressRecord.setValue({
fieldId: subrecordField2.fieldId,
value: subrecordField2.value,
ignoreFieldChange: true
});
} catch (er) {
log.error('error@ setting billing Address Fields skipped', JSON.stringify(er));
continue;
}
}
}


//Field Map for Sales Order Body Fields
let bodyFieldArray = [
{
fieldId: 'tranid',
value: (order_num).toString()
},
{
fieldId: 'custbody_jj_shopify_order_id_oius196',
value: (shopifyOrderId).toString()
},
{
fieldId: 'memo',
value: order_note && util.isString(order_note) ? order_note.toString().substring(0, 200) : ""
},
{
fieldId: 'currency', value: 1 //USD
},
{
fieldId: 'location', value: 1
},
{
fieldId: 'trandate', value: order_date ? new Date(order_date.toString().trim()) : new Date()
},
{
fieldId: 'class',
value: CLASS
},
{
fieldId: 'custbody_osi69_jj_source_webstore',
value: SOURCE
}
];
log.debug('bodyFieldArray of salesorder', bodyFieldArray);
log.debug('id',FORM)

//To set body fields in Sales Order Record
for (let bodyField of bodyFieldArray) {
if (bodyField.value !== null && bodyField.value !== undefined && bodyField.value !== "") {
try {
salesOrderRecord.setValue({fieldId: bodyField.fieldId, value: bodyField.value});
} catch (er) {
log.error('error@createSalesOrder in setting Sales Order Body Field skipped', JSON.stringify(er));
continue;
}
}
}

//Shipment Methods
log.debug('shipping_lines',shipping_lines);
if (jjUtil.checkForParameter(shipping_lines) && shipping_lines.length != 0) {
log.debug('set shipmethod!!')
salesOrderRecord.setValue({
fieldId: "shipmethod",
value: SHIPMETHOD
});
salesOrderRecord.setValue({
fieldId: "shippingcost",
value: Number(shipping_lines[0].price)
});


} else {

}
// tax lines
log.debug('tax lines',tax_lines);
if (jjUtil.checkForParameter(tax_lines) && tax_lines.length != 0) {
log.debug('set tax !!')
salesOrderRecord.setValue({
fieldId: "istaxable",
value: true
});

} else {

}


//Discount Items
if (discount_applications.length != 0) {
salesOrderRecord.selectNewLine({sublistId: 'item'});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: DISCOUNT_ITEM
});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: 1,
ignoreFieldChange: false
});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: Number(discount_amount) * -1,
ignoreFieldChange: false
});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'amount',
value: Number(discount_amount) * -1,
ignoreFieldChange: false
});
salesOrderRecord.commitLine({sublistId: 'item'});
}

//add items
log.debug('order_line', order_line);

for (let line of order_line) {
let itemId = savedSearch.fetchShopifyItemID(line.product_id, shopifyRecordId);
log.debug('itemId', itemId);
if (jjUtil.checkForParameter(itemId)) {
try {
log.debug('inside item update!!')
salesOrderRecord.selectNewLine({sublistId: 'item'});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: itemId
});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: (Number(line.quantity)).toString()
});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: Number(line.price),
ignoreFieldChange: false
});
salesOrderRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'amount',
value: Number(line.price) * Number(line.quantity),
ignoreFieldChange: false
});
salesOrderRecord.commitLine({sublistId: 'item'});
} catch (e) {
log.error('error@createSalesOrder', e);
record.submitFields({
type: "customrecord_shopify_int_info",
id: shopifyRecordId,
values: {
custrecord_jj_err_on_so_creation: JSON.stringify(e)
},
options: {enableSourcing: true, ignoreMandatoryFields: true}
});
return false;
}

} else {
let errormsg = "Shopify item is not available in NetSuite";
log.error('errormsg', errormsg);
record.submitFields({
type: "customrecord_shopify_int_info",
id: shopifyRecordId,
values: {
custrecord_jj_err_on_so_creation: errormsg
},
options: {enableSourcing: true, ignoreMandatoryFields: true}
});
return false;
}
}
let salesOrderId = salesOrderRecord.save({ignoreMandatoryFields: true, enableSourcing: true})
log.debug('salesOrderId 1142', salesOrderId);

record.submitFields({
type: "customrecord_shopify_int_info",
id: shopifyRecordId,
values: {
custrecord_jj_sales_order_id: salesOrderId,
custrecord_jj_err_on_so_creation: "",
},
options: {enableSourcing: true, ignoreMandatoryFields: true}
});
return salesOrderId;

} catch
(err) {
log.error('error@createSalesOrder', err);
record.submitFields({
type: "customrecord_shopify_int_info",
id: shopifyRecordId,
values: {
custrecord_jj_err_on_so_creation: JSON.stringify(err)
},
options: {enableSourcing: true, ignoreMandatoryFields: true}
});
return false;
}

}

Leave a comment

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