Created
March 12, 2023 11:03
-
-
Save marawan-nwh/b74bc630e887af015f5ac241134b4a02 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @NApiVersion 2.1 | |
* @NScriptType Restlet | |
*/ | |
define([ | |
"N/record", | |
"N/runtime", | |
"N/search", | |
"/SuiteApps/com.netsuite.base/api", | |
"/SuiteApps/com.netsuite.base/utils", | |
], function (record, runtime, search, api, utils) { | |
let scriptID = "RL-JobCodes"; | |
let correlationID; | |
let logger; | |
let Items = []; | |
let DelayItemID; | |
let TriangulationItemID; | |
let GensetItemID; | |
let XRayDelayItemID; | |
let NolonItemID; | |
let AccessoriesItemID; | |
let CustomFormID; | |
function init() { | |
// production | |
if (runtime.accountId == "7237495") { | |
NolonItemID = 1012; | |
Items = [ | |
{ id: 1012, name: "TRUCKING SERVICE" }, | |
{ id: 1114, name: "Delay" }, | |
{ id: 1112, name: "Generator Genset" }, | |
{ id: 1116, name: "Labels" }, | |
{ id: 1115, name: "Other Expenses" }, | |
{ id: 1113, name: "Triangulation" }, | |
{ id: 1313, name: "Allocation Fees" }, | |
{ id: 1319, name: "Badr-Port" }, | |
{ id: 1318, name: "Cil-EG" }, | |
{ id: 1317, name: "Dam Port" }, | |
{ id: 1314, name: "Load/Off Loading Fees" }, | |
{ id: 1315, name: "Suez Canal" }, | |
{ id: 1316, name: "Wieght / Scales" }, | |
{ id: 921, name: "DPW - ops" }, | |
{ id: 893, name: "أطلنتس - ops" }, | |
{ id: 875, name: "أيصالات طريق-ops" }, | |
{ id: 878, name: "اكرامية - ops" }, | |
{ id: 879, name: "ايصال ارضيات - ops" }, | |
{ id: 880, name: "ايصال تحميل/تعتيق - ops" }, | |
{ id: 881, name: "ايصال تصريح جمركى - ops" }, | |
{ id: 882, name: "ايصال جيش - ops" }, | |
{ id: 883, name: "ايصال ساحة صينية - ops" }, | |
{ id: 884, name: "ايصال سيناء - ops" }, | |
{ id: 885, name: "ايصال طرق وكبارى - ops" }, | |
{ id: 886, name: "ايصال غرامه ارضيه - ops" }, | |
{ id: 887, name: "ايصال معدية - ops" }, | |
{ id: 888, name: "ايصال ميزان بيسكول - ops" }, | |
{ id: 889, name: "ايصال نفق - ops" }, | |
{ id: 890, name: "ايصال نوباتجية - ops" }, | |
{ id: 891, name: "ايصال هيئة الميناء - ops" }, | |
{ id: 892, name: "ايصال VGM - ops" }, | |
{ id: 874, name: "ايصالات AICT - OPS" }, | |
{ id: 894, name: "ايصلات تخصيص - ops" }, | |
{ id: 877, name: "ايصلات هيئة - OPS" }, | |
{ id: 895, name: "بوصله - ops" }, | |
{ id: 896, name: "بوليصة مشترك - ops" }, | |
{ id: 897, name: "تأشيرة / تجديد تأشيره - ops" }, | |
{ id: 898, name: "تحميل - ops" }, | |
{ id: 899, name: "تخصيص - ops" }, | |
{ id: 900, name: "تعتيق - ops" }, | |
{ id: 917, name: "ساجة هامبورج - ops" }, | |
{ id: 904, name: "ساحة الجودة - ops" }, | |
{ id: 901, name: "ساحة النورس - ops" }, | |
{ id: 906, name: "ساحة الوطنية - ops" }, | |
{ id: 902, name: "شفت حاويه - ops" }, | |
{ id: 903, name: "شهاده - ops" }, | |
{ id: 905, name: "ضمان الخط - ops" }, | |
{ id: 873, name: "ضمان توكيل - OPS" }, | |
{ id: 907, name: "ضمان جمرك - ops" }, | |
{ id: 908, name: "ضمان خط - ops" }, | |
{ id: 909, name: "عطلة X-ray - ops" }, | |
{ id: 910, name: "فاتورة xray - ops" }, | |
{ id: 876, name: "فك بوصلة - OPS" }, | |
{ id: 911, name: "فك ستوب - ops" }, | |
{ id: 912, name: "كارتات - ops" }, | |
{ id: 913, name: "كارتة محاجر - ops" }, | |
{ id: 871, name: "كشف استخلاص - OPS" }, | |
{ id: 914, name: "م انتقالات - ops" }, | |
{ id: 915, name: "م تحميل - ops" }, | |
{ id: 916, name: "م تخليص - ops" }, | |
{ id: 918, name: "م تصريح - ops" }, | |
{ id: 919, name: "م تعتيق - ops" }, | |
{ id: 920, name: "م زيادة وزن - ops" }, | |
{ id: 922, name: "م غرامات - ops" }, | |
{ id: 923, name: "م محضر - ops" }, | |
{ id: 924, name: "م PTI - ops" }, | |
{ id: 925, name: "مصروف ميناء - ops" }, | |
{ id: 872, name: "مصروف ميناء - OPS" }, | |
{ id: 926, name: "مصروفات اخري - ops" }, | |
{ id: 927, name: "موازين هيئة - ops" }, | |
{ id: 834, name: "B/L بوصيله" }, | |
{ id: 932, name: "DPW" }, | |
{ id: 851, name: "ايصال تخصيص / تجديد تخصيص" }, | |
{ id: 858, name: "ايصال شروق" }, | |
{ id: 928, name: "أطلنتس" }, | |
{ id: 813, name: "أيصالات طريق" }, | |
{ id: 865, name: "اكرامية" }, | |
{ id: 862, name: "ايصال ارضيات" }, | |
{ id: 852, name: "ايصال تحميل/تعتيق" }, | |
{ id: 864, name: "ايصال تصريح جمركى" }, | |
{ id: 849, name: "ايصال جيش" }, | |
{ id: 859, name: "ايصال ساحة صينية" }, | |
{ id: 857, name: "ايصال سيناء" }, | |
{ id: 863, name: "ايصال طرق وكبارى" }, | |
{ id: 854, name: "ايصال غرامه ارضيه" }, | |
{ id: 855, name: "ايصال معدية" }, | |
{ id: 853, name: "ايصال ميزان بيسكول" }, | |
{ id: 856, name: "ايصال نفق" }, | |
{ id: 868, name: "ايصال نوباتجية" }, | |
{ id: 850, name: "ايصال هيئة الميناء" }, | |
{ id: 860, name: "ايصال VGM" }, | |
{ id: 861, name: "ايصال XRAY" }, | |
{ id: 814, name: "ايصالات AICT" }, | |
{ id: 815, name: "ايصلات تخصيص" }, | |
{ id: 816, name: "ايصلات هيئة" }, | |
{ id: 831, name: "بوصله" }, | |
{ id: 844, name: "بوليصة مشترك" }, | |
{ id: 846, name: "تأشيرة / تجديد تأشيره" }, | |
{ id: 822, name: "تحميل" }, | |
{ id: 829, name: "تخصيص" }, | |
{ id: 823, name: "تعتيق" }, | |
{ id: 931, name: "ساجة هامبورج" }, | |
{ id: 929, name: "ساحة الجودة" }, | |
{ id: 869, name: "ساحة النورس" }, | |
{ id: 930, name: "ساحة الوطنية" }, | |
{ id: 848, name: "شفت حاويه" }, | |
{ id: 832, name: "شهاده" }, | |
{ id: 812, name: "ضمان توكيل" }, | |
{ id: 824, name: "ضمان الخط" }, | |
{ id: 817, name: "ضمان توكيل" }, | |
{ id: 825, name: "ضمان جمرك" }, | |
{ id: 830, name: "ضمان خط" }, | |
{ id: 866, name: "عطلة X-ray" }, | |
{ id: 826, name: "فاتورة xray" }, | |
{ id: 818, name: "فك بوصلة" }, | |
{ id: 847, name: "فك ستوب" }, | |
{ id: 819, name: "كارتات" }, | |
{ id: 870, name: "كارتة محاجر" }, | |
{ id: 820, name: "كشف استخلاص" }, | |
{ id: 843, name: "م انتقالات" }, | |
{ id: 835, name: "م تحميل" }, | |
{ id: 841, name: "م تخليص" }, | |
{ id: 839, name: "م تصريح" }, | |
{ id: 836, name: "م تعتيق" }, | |
{ id: 867, name: "م زيادة وزن" }, | |
{ id: 838, name: "م ضمان جمرك" }, | |
{ id: 837, name: "م ضمان خط" }, | |
{ id: 840, name: "م غرامات" }, | |
{ id: 833, name: "م محضر" }, | |
{ id: 842, name: "م PTI" }, | |
{ id: 821, name: "مصروف ميناء" }, | |
{ id: 845, name: "مصروفات اخري" }, | |
{ id: 827, name: "موازين هيئة" }, | |
{ id: 828, name: "ميزان هيئة" }, | |
]; | |
DelayItemID = 1114; | |
TriangulationItemID = 1113; | |
GensetItemID = 1112; | |
XRayDelayItemID = 866; | |
AccessoriesItemID = 1413; | |
CustomFormID = 168; | |
} | |
// sandbox | |
if (runtime.accountId == "7237495_SB1") { | |
NolonItemID = 46; | |
Items = [ | |
{ id: 46, name: "النولون" }, | |
{ id: 10, name: "Official Receipts service" }, | |
{ id: 11, name: "Road Tolls" }, | |
{ id: 12, name: "Allocation Fees" }, | |
{ id: 13, name: "Load/Off Loading Fees" }, | |
{ id: 32, name: "Accessories" }, | |
{ id: 33, name: "Generator Genset" }, | |
{ id: 34, name: "Labels" }, | |
{ id: 35, name: "Triangulation" }, | |
{ id: 36, name: "ضمان توكيل" }, | |
{ id: 37, name: "أيصالات طريق" }, | |
{ id: 38, name: "ايصالات AICT" }, | |
{ id: 39, name: "ايصلات تخصيص" }, | |
{ id: 40, name: "ايصلات هيئة" }, | |
{ id: 41, name: "ضمان توكيل" }, | |
{ id: 42, name: "فك بوصلة" }, | |
{ id: 43, name: "كارتات" }, | |
{ id: 44, name: "كشف استخلاص" }, | |
{ id: 45, name: "مصروف ميناء" }, | |
{ id: 47, name: "تحميل" }, | |
{ id: 48, name: "تعتيق" }, | |
{ id: 49, name: "ضمان الخط" }, | |
{ id: 50, name: "ضمان جمرك" }, | |
{ id: 51, name: "فاتورة xray" }, | |
{ id: 52, name: "موازين هيئة" }, | |
{ id: 55, name: "ميزان هيئة" }, | |
{ id: 56, name: "تخصيص" }, | |
{ id: 57, name: "ضمان خط" }, | |
{ id: 258, name: "بوصله" }, | |
{ id: 259, name: "شهاده" }, | |
{ id: 260, name: "م محضر" }, | |
{ id: 261, name: "B/L بوصيله" }, | |
{ id: 262, name: "م تحميل" }, | |
{ id: 263, name: "م تعتيق" }, | |
{ id: 264, name: "م ضمان خط" }, | |
{ id: 265, name: "م ضمان جمرك" }, | |
{ id: 266, name: "م تصريح" }, | |
{ id: 267, name: "م غرامات" }, | |
{ id: 268, name: "م تخليص" }, | |
{ id: 269, name: "م PTI" }, | |
{ id: 270, name: "م انتقالات" }, | |
{ id: 271, name: "بوليصة مشترك" }, | |
{ id: 272, name: "مصروفات اخري" }, | |
{ id: 273, name: "تأشيرة / تجديد تأشيره" }, | |
{ id: 274, name: "فك ستوب" }, | |
{ id: 275, name: "شفت حاويه" }, | |
{ id: 358, name: "ايصال جيش" }, | |
{ id: 359, name: "ايصال هيئة الميناء" }, | |
{ id: 360, name: "ايصال تخصيص / تجديد تخصيص" }, | |
{ id: 361, name: "ايصال تحميل/تعتيق" }, | |
{ id: 362, name: "ايصال ميزان بيسكول" }, | |
{ id: 363, name: "ايصال غرامه ارضيه" }, | |
{ id: 364, name: "ايصال معدية" }, | |
{ id: 365, name: "ايصال نفق" }, | |
{ id: 366, name: "ايصال سيناء" }, | |
{ id: 367, name: "ايصال شروق" }, | |
{ id: 368, name: "ايصال ساحة صينية" }, | |
{ id: 369, name: "ايصال VGM" }, | |
{ id: 370, name: "ايصال XRAY" }, | |
{ id: 371, name: "ايصال ارضيات" }, | |
{ id: 372, name: "ايصال طرق وكبارى" }, | |
{ id: 373, name: "ايصال تصريح جمركى" }, | |
{ id: 374, name: "اكرامية" }, | |
{ id: 375, name: "عطلة X-ray" }, | |
{ id: 376, name: "م زيادة وزن" }, | |
{ id: 377, name: "ايصال نوباتجية" }, | |
{ id: 378, name: "ساحة النورس" }, | |
{ id: 379, name: "كارتة محاجر" }, | |
{ id: 458, name: "كشف استخلاص - OPS" }, | |
{ id: 459, name: "مصروف ميناء - OPS" }, | |
{ id: 460, name: "ضمان توكيل - OPS" }, | |
{ id: 463, name: "ايصالات AICT - OPS" }, | |
{ id: 464, name: "أيصالات طريق-ops" }, | |
{ id: 465, name: "فك بوصلة - OPS" }, | |
{ id: 466, name: "ايصلات هيئة - OPS" }, | |
{ id: 470, name: "اكرامية - ops" }, | |
{ id: 472, name: "ايصال ارضيات - ops" }, | |
{ id: 473, name: "ايصال تحميل/تعتيق - ops" }, | |
{ id: 474, name: "ايصال تصريح جمركى - ops" }, | |
{ id: 475, name: "ايصال جيش - ops" }, | |
{ id: 476, name: "ايصال ساحة صينية - ops" }, | |
{ id: 477, name: "ايصال سيناء - ops" }, | |
{ id: 478, name: "ايصال طرق وكبارى - ops" }, | |
{ id: 479, name: "ايصال غرامه ارضيه - ops" }, | |
{ id: 480, name: "ايصال معدية - ops" }, | |
{ id: 481, name: "ايصال ميزان بيسكول - ops" }, | |
{ id: 482, name: "ايصال نفق - ops" }, | |
{ id: 483, name: "ايصال نوباتجية - ops" }, | |
{ id: 484, name: "ايصال هيئة الميناء - ops" }, | |
{ id: 485, name: "ايصال VGM - ops" }, | |
{ id: 486, name: "أطلنتس - ops" }, | |
{ id: 487, name: "ايصلات تخصيص - ops" }, | |
{ id: 488, name: "بوصله - ops" }, | |
{ id: 489, name: "بوليصة مشترك - ops" }, | |
{ id: 490, name: "تأشيرة / تجديد تأشيره - ops" }, | |
{ id: 491, name: "تحميل - ops" }, | |
{ id: 492, name: "تخصيص - ops" }, | |
{ id: 493, name: "تعتيق - ops" }, | |
{ id: 494, name: "ساحة النورس - ops" }, | |
{ id: 495, name: "شفت حاويه - ops" }, | |
{ id: 496, name: "شهاده - ops" }, | |
{ id: 497, name: "ساحة الجودة - ops" }, | |
{ id: 498, name: "ضمان الخط - ops" }, | |
{ id: 499, name: "ساحة الوطنية - ops" }, | |
{ id: 500, name: "ضمان جمرك - ops" }, | |
{ id: 501, name: "ضمان خط - ops" }, | |
{ id: 502, name: "عطلة X-ray - ops" }, | |
{ id: 503, name: "فاتورة xray - ops" }, | |
{ id: 504, name: "فك ستوب - ops" }, | |
{ id: 505, name: "كارتات - ops" }, | |
{ id: 506, name: "كارتة محاجر - ops" }, | |
{ id: 507, name: "م انتقالات - ops" }, | |
{ id: 508, name: "م تحميل - ops" }, | |
{ id: 509, name: "م تخليص - ops" }, | |
{ id: 510, name: "ساجة هامبورج - ops" }, | |
{ id: 511, name: "م تصريح - ops" }, | |
{ id: 512, name: "م تعتيق - ops" }, | |
{ id: 513, name: "م زيادة وزن - ops" }, | |
{ id: 514, name: "DPW - ops" }, | |
{ id: 515, name: "م غرامات - ops" }, | |
{ id: 516, name: "م محضر - ops" }, | |
{ id: 517, name: "م PTI - ops" }, | |
{ id: 518, name: "مصروف ميناء - ops" }, | |
{ id: 519, name: "مصروفات اخري - ops" }, | |
{ id: 520, name: "موازين هيئة - ops" }, | |
{ id: 570, name: "أطلنتس" }, | |
{ id: 571, name: "ساحة الجودة" }, | |
{ id: 572, name: "ساحة الوطنية" }, | |
{ id: 573, name: "ساجة هامبورج" }, | |
{ id: 574, name: "DPW" }, | |
{ id: 670, name: "Operating Expense" }, | |
{ id: 673, name: "Delay" }, | |
{ id: 675, name: "Suez Canal" }, | |
{ id: 676, name: "Other Expenses" }, | |
{ id: 677, name: "Wieght / Scales" }, | |
{ id: 678, name: "Dam Port" }, | |
{ id: 679, name: "Cil-EG" }, | |
{ id: 680, name: "Badr-Port" }, | |
{ id: 681, name: "Other Expenses" }, | |
]; | |
DelayItemID = 673; | |
TriangulationItemID = 35; | |
GensetItemID = 33; | |
XRayDelayItemID = 375; | |
AccessoriesItemID = 684; | |
CustomFormID = 168; | |
} | |
// initialize logger | |
correlationID = Math.floor(Date.now()).toString(); | |
logger = { | |
log: function (title, details) { | |
log.debug( | |
correlationID + " | " + title.toUpperCase(), | |
correlationID + " | " + scriptID + " | " + details | |
); | |
}, | |
}; | |
} | |
let schema = [ | |
{ | |
key: "id", | |
destination: "externalid", | |
type: "string", | |
required: true, | |
}, | |
{ | |
key: "currency", | |
destination: "currencysymbol", | |
type: "string", | |
set: "text", | |
required: true, | |
}, | |
{ | |
key: "driver_id", | |
destination: "entity", | |
type: "reference", | |
reference: "vendor", | |
required: true, | |
set: "value", | |
}, | |
{ | |
key: "client_id", | |
destination: "custbody5", | |
type: "reference", | |
reference: "customer", | |
required: true, | |
set: "value", | |
}, | |
{ | |
key: "date", | |
destination: "trandate", | |
type: "date", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "execution_date", | |
destination: "custbody_execute_date", | |
type: "date", | |
set: "text", | |
}, | |
{ | |
key: "client_ref", | |
destination: "custbody_client_ref_po", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "cutoff_date", | |
destination: "custbodyclient_cut_of_date", | |
type: "date", | |
set: "text", | |
}, | |
{ | |
key: "jobcode_status", | |
destination: "custbody_last_job_status", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "location", | |
destination: "location", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "vertical", | |
destination: "department", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "class", | |
destination: "class", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "shipper_id", | |
destination: "custbody26", | |
type: "reference", | |
reference: "customer", | |
set: "value", | |
}, | |
{ | |
key: "gate_in", | |
destination: "custbody_gate_in", | |
}, | |
{ | |
key: "gate_out", | |
destination: "custbody_gate_out", | |
required: true, | |
}, | |
{ | |
key: "destination", | |
destination: "custbody_destination", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "start_date", | |
destination: "custbody27", | |
type: "date", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "job_group_on_bill", | |
destination: "custbody_job_gr_bill", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "booking_number", | |
destination: "custbody_job_code_booking_num", | |
}, | |
{ | |
key: "has_genset", | |
destination: "custbody_has_genset", | |
type: "boolean", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "genset_cost_price", | |
destination: "custbody_genset_cost_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "genset_sales_price", | |
destination: "custbody_genset_sales_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "has_triangulation", | |
destination: "custbody_has_traingulation", | |
type: "boolean", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "triangulation_cost_price", | |
destination: "custbody_traing_cost_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "triangulation_sales_price", | |
destination: "custbody_traing_sales_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "has_delay", | |
destination: "custbody_has_delay", | |
type: "boolean", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "delay_cost_price", | |
destination: "custbody_delay_cost_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "delay_sales_price", | |
destination: "custbody_delay_sale_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "has_xray_delay", | |
destination: "custbody_has_x_r_delay", | |
type: "boolean", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "xray_delay_cost_price", | |
destination: "custbody_x_r_delay_cost", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "xray_delay_sales_price", | |
destination: "custbody_x_r_delay_price", | |
type: "number", | |
// type: "decimal", | |
set: "text", | |
}, | |
{ | |
key: "contractor_id", | |
destination: "custbody_main_contractor", | |
type: "reference", | |
reference: "vendor", | |
set: "value", | |
}, | |
{ | |
key: "bill_of_lading", | |
destination: "custbody_bill_of_lading", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "truck_number", | |
destination: "custbody_truck_no", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "truck_license_number", | |
destination: "custbody_truck_license_number", | |
type: "string", | |
required: true, | |
set: "text", | |
}, | |
{ | |
key: "tail_code", | |
destination: "custbody_tail_code", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "tail_license_number", | |
destination: "custbody_tail_license_number", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "cargo", | |
destination: "custbodybill_cargo", | |
required: true, | |
}, | |
{ | |
key: "first_container", | |
destination: "custbody_first_container", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "second_container", | |
destination: "custbody_sec_container", | |
type: "string", | |
set: "text", | |
}, | |
{ | |
key: "load_weight", | |
destination: "custbody_load_weight", | |
type: "number", | |
set: "text", | |
}, | |
]; | |
function post(context) { | |
init(); | |
try { | |
logger.log("Request", JSON.stringify(context)); | |
let result = api.validate({ | |
schema: schema, | |
context: context, | |
}); | |
// other validations | |
let rules = [ | |
// class is required only only if department is Marin | |
{ | |
condition: | |
context["department"] == "Marin" && !utils.isDefined("class"), | |
error: "class is required if department is Marin", | |
}, | |
// booking_number is required only if department is NOT Domestic | |
{ | |
condition: | |
context["department"] != "Domestic" && | |
!utils.isDefined("booking_number"), | |
error: "booking_number is required if department is not Domestic", | |
}, | |
// gate_in is required only if department is Marin | |
{ | |
condition: | |
context["department"] == "Marin" && | |
!utils.isDefined(context["gate_in"]), | |
error: "gate_in is required if department is Marin", | |
}, | |
// genset_cost_price is required only if has_genset is true | |
{ | |
condition: | |
context["has_genset"] && !utils.isDefined("genset_cost_price"), | |
error: "genset_cost_price is required if has_genset is true", | |
}, | |
// genset_sales_price is required only if has_genset is true | |
{ | |
condition: | |
context["has_genset"] && !utils.isDefined("genset_sales_price"), | |
error: "genset_sales_price is required if has_genset is true", | |
}, | |
// triangulation_cost_price is required only if has_triangulation is true | |
{ | |
condition: | |
context["has_triangulation"] && | |
!utils.isDefined("triangulation_cost_price"), | |
error: | |
"triangulation_cost_price is required if has_triangulation is true", | |
}, | |
// triangulation_sales_price is required only if has_triangulation is true | |
{ | |
condition: | |
context["has_triangulation"] && | |
!utils.isDefined("triangulation_sales_price"), | |
error: | |
"triangulation_sales_price is required if has_triangulation is true", | |
}, | |
// delay_cost_price is required only if has_delay is true | |
{ | |
condition: | |
context["has_delay"] && !utils.isDefined("delay_cost_price"), | |
error: "delay_cost_price is required if has_delay is true", | |
}, | |
// delay_sales_price is required only if has_delay is true | |
{ | |
condition: | |
context["has_delay"] && !utils.isDefined("delay_sales_price"), | |
error: "delay_sales_price is required if has_delay is true", | |
}, | |
// xray_delay_cost_price is required only if has_xray_delay is true | |
{ | |
condition: | |
context["has_xray_delay"] && | |
!utils.isDefined("xray_delay_cost_price"), | |
error: "xray_delay_cost_price is required if has_xray_delay is true", | |
}, | |
// xray_delay_sales_price is required only if has_xray_delay is true | |
{ | |
condition: | |
context["has_xray_delay"] && | |
!utils.isDefined("xray_delay_sales_price"), | |
error: "xray_delay_sales_price is required if has_xray_delay is true", | |
}, | |
// first_container is required only if department is Marin | |
{ | |
condition: | |
context["department"] == "Marin" && | |
!utils.isDefined(context["first_container"]), | |
error: "first_container is required if department is Marin", | |
}, | |
// second_container is required only if department is Marin | |
{ | |
condition: | |
context["department"] == "Marin" && | |
!utils.isDefined(context["second_container"]), | |
error: "second_container is required if department is Marin", | |
}, | |
]; | |
if (result.ok) { | |
for (let i = 0; i < rules.length; i++) { | |
if (rules[i].condition) { | |
result.ok = false; | |
result.error = rules[i].error; | |
break; | |
} | |
} | |
} | |
if (result.ok) { | |
// map (has_x from ture and false to Yes and No) | |
context["has_genset"] = context["has_genset"] ? "Yes" : "No"; | |
context["has_triangulation"] = context["has_triangulation"] | |
? "Yes" | |
: "No"; | |
context["has_delay"] = context["has_delay"] ? "Yes" : "No"; | |
context["has_xray_delay"] = context["has_xray_delay"] ? "Yes" : "No"; | |
let isNew; | |
let vendorbill; | |
let vendorbillID; | |
let srch = search.create({ | |
type: "vendorbill", | |
filters: [["externalid", "is", context["id"]]], | |
}); | |
let searchResultCount = srch.runPaged().count; | |
if (searchResultCount > 0) { | |
vendorbillID = srch.run().getRange(0, 1)[0].id; | |
vendorbill = record.load({ | |
type: "vendorbill", | |
id: vendorbillID, | |
isDynamic: true, | |
}); | |
let invoiceID = vendorbill.getValue("custbody_inv_jobgroup_no"); | |
if (utils.isDefined(invoiceID)) { | |
let json = { | |
correlation_id: correlationID, | |
status: { | |
code: 400, | |
message: "Jobcode is invoiced. Edits are not allowed.", | |
}, | |
error: { | |
name: "Jobcode is invoiced. Edits are not allowed.", | |
message: "Jobcode is invoiced. Edits are not allowed.", | |
stack: "", | |
}, | |
}; | |
logger.log("Response", JSON.stringify(json)); | |
return json; | |
} | |
} else { | |
vendorbill = record.create({ | |
type: "vendorbill", | |
isDynamic: true, | |
}); | |
vendorbill.setValue("tranid", context["id"]); | |
vendorbill.setValue("customform", CustomFormID); | |
vendorbill.setValue("externalid", context["id"]); | |
vendorbill.setValue("custbody_externalid", context["id"]); | |
isNew = true; | |
} | |
if (utils.isDefined(context["booking_number"])) { | |
let bnumID; | |
srch = search.create({ | |
type: "customrecord_booking_number", | |
filters: [ | |
["externalid", "is", context["booking_number"].toString()], | |
"AND", | |
["isinactive", "is", "F"], | |
], | |
}); | |
searchResultCount = srch.runPaged().count; | |
if (searchResultCount > 0) { | |
bnumID = srch.run().getRange(0, 1)[0].id; | |
} else { | |
bnum = record.create({ | |
type: "customrecord_booking_number", | |
isDynamic: true, | |
}); | |
bnum.setValue("name", context["booking_number"].toString()); | |
bnum.setValue("externalid", context["booking_number"].toString()); | |
bnumID = bnum.save(); | |
} | |
vendorbill.setValue("custbody_job_code_booking_num", bnumID); | |
} | |
api.set({ | |
schema: schema, | |
context: context, | |
record: vendorbill, | |
}); | |
// handle gate in | |
srch = search.create({ | |
type: "customrecord_gate_in_list_ed", | |
filters: [ | |
["name", "is", context["gate_in"]], | |
"AND", | |
["isinactive", "is", "F"], | |
], | |
}); | |
if (srch.runPaged().count == 0) { | |
let rec = record.create({ | |
type: "customrecord_gate_in_list_ed", | |
}); | |
rec.setValue("name", context["gate_in"]); | |
rec.save(); | |
} | |
vendorbill.setValue( | |
"custbody_gate_in", | |
srch.run().getRange(0, 1)[0].id | |
); | |
// handle gate out | |
srch = search.create({ | |
type: "customrecord_gate_out_list_ed", | |
filters: [ | |
["name", "is", context["gate_out"]], | |
"AND", | |
["isinactive", "is", "F"], | |
], | |
}); | |
if (srch.runPaged().count == 0) { | |
let rec = record.create({ | |
type: "customrecord_gate_out_list_ed", | |
}); | |
rec.setValue("name", context["gate_out"]); | |
rec.save(); | |
} | |
vendorbill.setValue( | |
"custbody_gate_out", | |
srch.run().getRange(0, 1)[0].id | |
); | |
// handle cargo | |
srch = search.create({ | |
type: "customrecord_kind_of_cargo", | |
filters: [ | |
["name", "is", context["cargo"]], | |
"AND", | |
["isinactive", "is", "F"], | |
], | |
}); | |
if (srch.runPaged().count == 0) { | |
let rec = record.create({ | |
type: "customrecord_kind_of_cargo", | |
}); | |
rec.setValue("name", context["cargo"]); | |
rec.save(); | |
} | |
vendorbill.setValue( | |
"custbodybill_cargo", | |
srch.run().getRange(0, 1)[0].id | |
); | |
let currID; | |
if (utils.isDefined(context["currency"])) { | |
srch = search.create({ | |
type: "currency", | |
filters: [ | |
["symbol", "is", context["currency"]], | |
"AND", | |
["isinactive", "is", "F"], | |
], | |
}); | |
searchResultCount = srch.runPaged().count; | |
if (searchResultCount > 0) { | |
currID = srch.run().getRange(0, 1)[0].id; | |
vendorbill.setValue("currency", currID); | |
} | |
} | |
let clientID; | |
if (utils.isDefined(context["client_id"])) { | |
srch = search.create({ | |
type: "customer", | |
filters: [ | |
["externalid", "is", context["client_id"]], | |
"AND", | |
["isinactive", "is", "F"], | |
], | |
}); | |
searchResultCount = srch.runPaged().count; | |
if (searchResultCount > 0) { | |
clientID = srch.run().getRange(0, 1)[0].id; | |
} | |
} | |
for (let i = 0; i < Items.length; i++) { | |
if (isNew) { | |
vendorbill.selectNewLine({ | |
sublistId: "item", | |
}); | |
} else { | |
vendorbill.selectLine({ | |
sublistId: "item", | |
line: i, | |
}); | |
} | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "item", | |
value: Items[i].id, | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "quantity", | |
value: 1, | |
}); | |
if (i == 0) { | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "rate", | |
value: Number(context["driver_cost"]), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "custcol_customer_rate", | |
value: Number(context["customer_price"]), | |
}); | |
} else if (isNew) { | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "rate", | |
value: 0, | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "custcol_customer_rate", | |
value: 0, | |
}); | |
} | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "customer", | |
value: clientID, | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "isbillable", | |
value: | |
Items[i].name.toLowerCase().indexOf("ops") > -1 || | |
Items[i].id == NolonItemID | |
? false | |
: true, | |
}); | |
vendorbill.setCurrentSublistText({ | |
sublistId: "item", | |
fieldId: "location", | |
text: context["location"], | |
}); | |
vendorbill.setCurrentSublistText({ | |
sublistId: "item", | |
fieldId: "department", | |
text: context["department"], | |
}); | |
vendorbill.commitLine({ sublistId: "item" }); | |
} | |
let additionalCharges = [ | |
{ | |
itemID: DelayItemID, | |
condition: context["has_delay"], | |
rate: context["delay_cost_price"], | |
custrate: context["delay_sales_price"], | |
}, | |
{ | |
itemID: XRayDelayItemID, | |
condition: context["has_xray_delay"], | |
rate: context["xray_delay_cost_price"], | |
custrate: context["xray_delay_sales_price"], | |
}, | |
{ | |
itemID: TriangulationItemID, | |
condition: context["has_triangulation"], | |
rate: context["triangulation_cost_price"], | |
custrate: context["triangulation_sales_price"], | |
}, | |
{ | |
itemID: GensetItemID, | |
condition: context["has_genset"], | |
rate: context["genset_cost_price"], | |
custrate: context["genset_sales_price"], | |
}, | |
]; | |
let count = vendorbill.getLineCount({ | |
sublistId: "item", | |
}); | |
for (let i = 0; i < additionalCharges.length; i++) { | |
if (additionalCharges[i].condition == "Yes") { | |
// select the correct line | |
for (let j = 0; j < count; j++) { | |
vendorbill.selectLine({ | |
sublistId: "item", | |
line: j, | |
}); | |
let itemID = vendorbill.getCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "item", | |
}); | |
if (itemID == additionalCharges[i].itemID) { | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "rate", | |
value: Number(additionalCharges[i].rate), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "custcol_customer_rate", | |
value: Number(additionalCharges[i].custrate), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "isbillable", | |
value: false, | |
}); | |
vendorbill.commitLine({ sublistId: "item" }); | |
} | |
} | |
} else { | |
for (let j = 0; j < count; j++) { | |
vendorbill.selectLine({ | |
sublistId: "item", | |
line: j, | |
}); | |
let itemID = vendorbill.getCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "item", | |
}); | |
if (itemID == additionalCharges[i].itemID) { | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "rate", | |
value: 0, | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "custcol_customer_rate", | |
value: 0, | |
}); | |
vendorbill.commitLine({ sublistId: "item" }); | |
} | |
} | |
} | |
} | |
// handle accessories | |
if ( | |
utils.isDefined(context["accessories"]) && | |
context["accessories"].length > 0 | |
) { | |
for (let i = 0; i < context["accessories"].length; i++) { | |
let exists = false; | |
// edit it if it exists | |
for (let j = 0; j < count; j++) { | |
vendorbill.selectLine({ | |
sublistId: "item", | |
line: j, | |
}); | |
let itemID = vendorbill.getCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "item", | |
}); | |
let description = vendorbill.getCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "description", | |
}); | |
if ( | |
itemID == AccessoriesItemID && | |
context["accessories"][i].name == description | |
) { | |
exists = true; | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "rate", | |
value: Number(context["accessories"][i].cost), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "quantity", | |
value: Number(context["accessories"][i].qty), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "custcol_customer_rate", | |
value: Number(context["accessories"][i].price), | |
}); | |
vendorbill.commitLine({ sublistId: "item" }); | |
} | |
} | |
// add it if it doesn't exist | |
if (!exists) { | |
vendorbill.selectNewLine({ | |
sublistId: "item", | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "item", | |
value: AccessoriesItemID, | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "description", | |
value: context["accessories"][i].name, | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "rate", | |
value: Number(context["accessories"][i].cost), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "quantity", | |
value: Number(context["accessories"][i].qty), | |
}); | |
vendorbill.setCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "custcol_customer_rate", | |
value: Number(context["accessories"][i].price), | |
}); | |
vendorbill.commitLine({ sublistId: "item" }); | |
} | |
} | |
} | |
// remove accessories that are not in the request | |
for (let i = 0; i < count; i++) { | |
vendorbill.selectLine({ | |
sublistId: "item", | |
line: i, | |
}); | |
let itemID = vendorbill.getCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "item", | |
}); | |
let description = vendorbill.getCurrentSublistValue({ | |
sublistId: "item", | |
fieldId: "description", | |
}); | |
if (itemID == AccessoriesItemID) { | |
let exists = false; | |
for (let j = 0; j < context["accessories"].length; j++) { | |
if (context["accessories"][j].name == description) { | |
exists = true; | |
} | |
} | |
if (!exists) { | |
vendorbill.removeLine({ | |
sublistId: "item", | |
line: i, | |
}); | |
} | |
} | |
} | |
vendorbillID = vendorbill.save({ | |
enableSourcing: true, | |
ignoreMandatoryFields: true, | |
}); | |
vendorbill = record.load({ | |
type: "vendorbill", | |
id: vendorbillID, | |
isDynamic: true, | |
}); | |
let json = { | |
correlation_id: correlationID, | |
vendorbill_number: context["id"], | |
vendorbill_internal_id: vendorbillID.toString(), | |
status: { | |
code: 200, | |
message: "Succeeded!", | |
}, | |
}; | |
logger.log("Response", JSON.stringify(json)); | |
return json; | |
} else { | |
let json = { | |
correlation_id: correlationID, | |
status: { | |
code: 400, | |
message: result.error, | |
}, | |
error: { | |
name: result.error, | |
message: result.error, | |
stack: "", | |
}, | |
}; | |
logger.log("Response", JSON.stringify(json)); | |
return json; | |
} | |
} catch (err) { | |
let json = { | |
correlation_id: correlationID, | |
status: { | |
code: 500, | |
message: err.message, | |
}, | |
error: { | |
name: err.name, | |
message: err.message, | |
stack: err.stack, | |
}, | |
}; | |
logger.log("Response", JSON.stringify(json)); | |
return json; | |
} | |
} | |
return { | |
post: post, | |
}; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment