Jira code: UMAR 65
This code is for to create a purchase order from sales order using a custom button which is in the sales order. This will copy all the values and item line from the SO and create a new PO based on that.
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
/**
* Script Description: This script for Creating the Quotation From Purchase requisition
*/
/*******************************************************************************
* * UMAR WSR * *
* **************************************************************************
* Date:13/2/18 Script name: NetU SL Create PO Script id:
* customscript_netu_sl_create_po Deployment id: customdeploynetu_sl_create_po
* REvised on 26/5/18 for setting sales values
* REvised on 28/5/18 for changing to search from load
* using json method(response)
******************************************************************************/
define(['N/record', 'N/search', 'N/url', 'N/https', 'N/error', 'N/currency',
'N/redirect', 'N/error', 'N/ui/serverWidget' ],
function(record, search, url, https, e, currency, redirect, error,
serverWidget) {
/**
* Definition of the Suitelet script trigger point.
*
* @param {Object}
* context
* @param {ServerRequest}
* context.request - Encapsulation of the incoming
* request
* @param {ServerResponse}
* context.response - Encapsulation of the Suitelet
* response
* @Since 2015.2
*/
function onRequest(context) {
try {
var soId = context.request.parameters.quoteID;
var soCustomValuesSearchObj = search.create({
type: "salesorder",
filters:
[
["type","anyof","SalesOrd"],
"AND",
["internalidnumber","equalto",soId]
],
columns:
[
search.createColumn({name: "custbody_netu_vendor", label: "Vendor"}),
search.createColumn({name: "custbody_netu_main_job", label: "Main Job"}),
search.createColumn({name: "custbody_netu_subjob", label: "Sub Job Number"}),
search.createColumn({name: "custbody_netu_purchase_requisition", label: "Purchase Requ. #"}),
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "class", label: "Class"}),
search.createColumn({name: "location", label: "Location"}),
search.createColumn({name: "department", label: "Department"}),
search.createColumn({name: "custbody_netu_vessel", label: "Vessel"}),
search.createColumn({name: "custbody_netu_quotation_number", label: "Quotation #"}),
search.createColumn({name: "custbody_netu_cost_gross_amount", label: "Cost Gross Amount"}),
search.createColumn({name: "custbody_netu_cost_discount_amount", label: "Cost Discount Amount"}),
search.createColumn({name: "custbody_netu_scale_commission", label: "Scale Commission"}),
search.createColumn({name: "custbody_netu_cost_commission_amount", label: "Cost Commission Amount"}),
search.createColumn({name: "custbody_netu_cost_net_amount", label: "Cost Net Amount"}),
search.createColumn({name: "custbody_netu_v_packing_charges", label: "V.Packing / Handling Charges"}),
search.createColumn({name: "custbody_netu_v_freight", label: "V.Freight"}),
search.createColumn({name: "custbody_netu_cost_net_amnt_charges", label: "Cost Net Amount after charges"}),
search.createColumn({name: "custbody_netu_sales_gross_amount", label: "Sales Gross Amount"}),
search.createColumn({name: "custbody_netu_sales_discount_amount", label: "Sales Discount Amount"}),
search.createColumn({name: "custbody_netu_sales_net_amount", label: "Sales Net Amount"}),
search.createColumn({name: "custbody_netu_packing_charges", label: "Packing / Handling Charges"}),
search.createColumn({name: "custbody_netu_freight", label: "Freight"}),
search.createColumn({name: "custbody_netu_sales_net_amnt_charges", label: "Sales Net Amount after charges"}),
search.createColumn({name: "custbody_netu_profit_amount", label: "Profit Amount"}),
search.createColumn({name: "custbody_netu_invoicing_company", label: "Invoicing Company"}),
search.createColumn({name: "custbody_netu_invoiced_customer", label: "Invoiced Customer"}),
search.createColumn({name: "custbody_netu_invoiced_vendor", label: "Invoiced Vendor"}),
search.createColumn({name: "custbodynetu_invoiced_owner", label: "Invoiced Owner"}),
search.createColumn({name: "custbody_netu_vessel_agent", label: "Vessel Agent"}),
search.createColumn({name: "custbody_netu_agent_primary_contact", label: "Vessel Agent Primary Contact"}),
search.createColumn({name: "custbody_netu_agent_delivery_address", label: "Agent Delivery Address"}),
search.createColumn({name: "custbody_netu_v_discount_perc", label: "V.Discount %"}),
search.createColumn({name: "custbody_netu_v_commission_perc", label: "V.Commission %"}),
search.createColumn({name: "custbody_netu_c_discount_perc", label: "C.Discount %"}),
search.createColumn({name: "custbody_netu_profit_perc", label: "Profit%"}),
search.createColumn({name: "currency", label: "Currency"}),
search.createColumn({name: "createdfrom", label: "Created From"}),
search.createColumn({name: "custrecord_netu_subjob_subsidiary",join: "CUSTBODY_NETU_SUBJOB",label: "Subsidiary"}),
search.createColumn({name: "custbody_netu_vessel_tba", label: "Vessel TBA"})
]
});
var soCustomValueResultCount = soCustomValuesSearchObj.runPaged().count;
var rcdMandDtls=[];
var rcdDtls=[];
var setRcdValues=[];
if(soCustomValueResultCount>0)
{
var custValues = soCustomValuesSearchObj.run().getRange({
start:0,
end:1
});
var rcdMandValues=['custbody_netu_vendor','custbody_netu_main_job','custbody_netu_subjob',
'class','location','department','custbody_netu_vessel'];
var recordTitle=['vendor','Mainjob','subjob','class','location','department','vessel'];
quotationNo = custValues[0].getValue({
name: 'custbody_netu_quotation_number'
})
quotationNo = custValues[0].getValue({
name: 'createdfrom'
})
var subsidiary = custValues[0].getValue({
name: "custrecord_netu_subjob_subsidiary",
join: "CUSTBODY_NETU_SUBJOB"
})
for(var n=0;n<7;n++)
{
rcdMandDtls[n] = custValues[0].getValue({
name: rcdMandValues[n]
})
if((rcdMandDtls[n] == null) || (rcdMandDtls[n] == "") || (rcdMandDtls[n] == undefined))
{
context.response.write(JSON.stringify('Missing the value for: '+recordTitle[n]));
}
}
var recordValues=['custbody_netu_main_job','custbody_netu_subjob','custbody_netu_purchase_requisition',
'internalid','class','location','department','custbody_netu_vessel',
'custbody_netu_cost_gross_amount','custbody_netu_cost_discount_amount','custbody_netu_scale_commission','custbody_netu_cost_commission_amount',
'custbody_netu_cost_net_amount','custbody_netu_v_packing_charges','custbody_netu_v_freight','custbody_netu_cost_net_amnt_charges',
'custbody_netu_sales_gross_amount','custbody_netu_sales_discount_amount','custbody_netu_sales_net_amount','custbody_netu_packing_charges',
'custbody_netu_freight','custbody_netu_sales_net_amnt_charges','custbody_netu_profit_amount',
'custbody_netu_invoicing_company','custbody_netu_invoiced_customer','custbody_netu_invoiced_vendor','custbodynetu_invoiced_owner',
'custbody_netu_vessel_agent','custbody_netu_agent_primary_contact','custbody_netu_agent_delivery_address','custbody_netu_vessel_tba',
'custbody_netu_v_discount_perc','custbody_netu_v_commission_perc','custbody_netu_c_discount_perc','custbody_netu_profit_perc'];
var setFileds=['custbody_netu_main_job','custbody_netu_subjob','custbody_netu_purchase_requisition',
'createdfrom','class','location','department','custbody_netu_vessel',
'custbody_netu_cost_gross_amount','custbody_netu_cost_discount_amount','custbody_netu_scale_commission','custbody_netu_cost_commission_amount',
'custbody_netu_cost_net_amount','custbody_netu_v_packing_charges','custbody_netu_v_freight','custbody_netu_cost_net_amnt_charges',
'custbody_netu_sales_gross_amount','custbody_netu_sales_discount_amount','custbody_netu_sales_net_amount','custbody_netu_packing_charges',
'custbody_netu_freight','custbody_netu_sales_net_amnt_charges','custbody_netu_profit_amount',
'custbody_netu_invoicing_company','custbody_netu_invoiced_customer','custbody_netu_invoiced_vendor','custbodynetu_invoiced_owner',
'custbody_netu_vessel_agent','custbody_netu_agent_primary_contact','custbody_netu_agent_delivery_address','custbody_netu_vessel_tba',
'custbody_netu_v_discount_perc','custbody_netu_v_commission_perc','custbody_netu_c_discount_perc','custbody_netu_profit_perc'];
var rec = record.create({
type : record.Type.PURCHASE_ORDER,
isDynamic : true,
defaultValues : {
entity : rcdMandDtls[0]
}
});
rec.setValue({
fieldId : 'subsidiary',
value : subsidiary
});
for(var k=0;k<35;k++)
{
rcdDtls[k] = custValues[0].getValue({
name : recordValues[k]
});
if(k>=31)
{
var Perc = rcdDtls[k].split("%");
rcdDtls[k]=Perc[0];
}
rec.setValue({
fieldId : setFileds[k],
value : rcdDtls[k]
});
}
rcdcurrency = custValues[0].getValue({
name : 'currency'
});
rec.setValue({
fieldId : 'currency',
value : rcdcurrency
});
rec.setValue({
fieldId : 'custbody_netu_subjob_status',
value : 9
});
rec.setValue({
fieldId : 'custbody6',
value : soId
});
rec.setValue({
fieldId : 'custbody_netu_quotation_number',
value : quotationNo
});
}
//getting item lines
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type","anyof","SalesOrd"],
"AND",
["internalidnumber","equalto",soId],
"AND",
["mainline","is","F"],
"AND",
["taxline","is","F"],
"AND",
["item.name","doesnotcontain","discount"]
],
columns:
[
search.createColumn({name: "item", label: "Item"}),
search.createColumn({name: "quantity", label: "Quantity"}),
search.createColumn({name: "memo", label: "Memo"}),
// search.createColumn({name: "rate", label: "Item Rate"}),
// search.createColumn({name: "taxcode", label: "Tax Item"}),
search.createColumn({name: "amount", label: "Amount"}),
search.createColumn({name: "custcol_netu_purch_price", label: "Cost Price"}),
search.createColumn({name: "custcol_netu_purch_gross_amount", label: "Cost Gross Amount"}),
search.createColumn({name: "class", label: "Class"}),
//search.createColumn({name: "grossamount", label: "Amount (Gross)"}),
search.createColumn({name: "custcol_netu_incomeid", label: "IncomeId"})
]
});
var soItemLineResultCount = salesorderSearchObj.runPaged().count;
itemDtls=[];
if(soItemLineResultCount>0)
{
var itemLineResults = salesorderSearchObj.run().getRange({
start:0,
end:1000
});
var column=['item','quantity','memo','custcol_netu_purch_price','custcol_netu_purch_gross_amount','class','custcol_netu_increment','custcol_netu_incomeid','amount'];
var setColumn=['item','quantity','description','rate','amount','class','custcol_netu_increment','custcol_netu_incomeid','custcol_netu_actual_cost_price'];
for(i = 0; i < soItemLineResultCount; i++)
{
rec.selectNewLine({
sublistId : 'item'
});
for(j=0;j<9;j++)
{
itemDtls[j] = itemLineResults[i].getValue({
name : column[j]
});
rec.setCurrentSublistValue({
sublistId : 'item',
fieldId : setColumn[j],
value : itemDtls[j]
});
}
rec.commitLine({
sublistId : 'item'
});
}
}
//**************************************************
//setting the vendor discount item based on the class revenue map
var customrecord_netu_class_revenue_mapSearchObj = search.create({
type: "customrecord_netu_class_revenue_map",
filters:
[
["custrecord_netu_map_class.internalidnumber","equalto",rcdDtls[4]],
"AND",
["custrecord_netu_vendor_discount","is","T"]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "custrecord_netu_item_code", label: "Item Code"}),
search.createColumn({
name: "internalid",
join: "CUSTRECORD_NETU_ITEM_CODE",
label: "Internal ID"
})
]
});
var resultCount = customrecord_netu_class_revenue_mapSearchObj.runPaged().count;
if(resultCount > 0){
var classRevenueCountinResults = customrecord_netu_class_revenue_mapSearchObj.run().getRange({
start:0,
end:1
});
vendorDiscount = classRevenueCountinResults[0].getValue({
name: "internalid",
join: "CUSTRECORD_NETU_ITEM_CODE"
});
log.debug('vendorDiscount',vendorDiscount);
//setting item code in a new line
rec.selectNewLine({
sublistId : 'item'
});
rec.setCurrentSublistValue({
sublistId : 'item',
fieldId : 'item',
value : vendorDiscount
});
rec.setCurrentSublistValue({
sublistId : 'item',
fieldId : 'rate',//'grossamt',amount,rate
value : -rcdDtls[9]
});
rec.setCurrentSublistValue({
sublistId : 'item',
fieldId : 'custcol_netu_incomeid',
value : '1'
});
rec.commitLine({
sublistId : 'item'
});
}
//**************************************************
var recordId = rec.save({
enableSourcing : true,
ignoreMandatoryFields : false
});
//setting the status in subjob,pr,quotation,so
if (recordId != null) {
record.submitFields({
type : 'customrecord_netu_sub_job',
id : rcdMandDtls[2],
values : {
'custrecord_netu_subjob_status' : '9'
},
options : {
enableSourcing : false,
ignoreMandatoryFields : true
}
});
record.submitFields({
type : 'customrecord_netu_purchase_requisition',
id : rcdDtls[2],
values : {
'custrecord_netu_req_sub_job_status' : '9'
},
options : {
enableSourcing : false,
ignoreMandatoryFields : true
}
});
record.submitFields({
type : record.Type.ESTIMATE,
id : quotationNo,
values : {
'custbody_netu_subjob_status' : '9'
},
options : {
enableSourcing : false,
ignoreMandatoryFields : true
}
});
record.submitFields({
type : record.Type.SALES_ORDER,
id : rcdDtls[3],
values : {
'custbody_netu_subjob_status' : '9'
}
});
redirect.toRecord({
type : record.Type.PURCHASE_ORDER,
id : recordId,
isEditMode : true
});
}
} catch (e) {
context.response.write(JSON.stringify(e.message));
log.debug({
title: e.name,
details: e.message
});
}
}
return {
onRequest : onRequest
};
});