/** *@NApiVersion 2.x *@NScriptType UserEventScript *@Author Trevor McLean * *Update taxcode field for all PO Line Items if shipaddress is changed * */ define(['N/log', '../CDN Energy/CDNRG/customers', 'N/record', 'N/search'], function (log, customers, record, search) { function afterSubmit(context) { //run only on edit to prevent new PO errors if(context.type !== context.UserEventType.CREATE) { //read the values of shipaddress and shipcountry on old and new record var or = context.oldRecord; var nr = context.newRecord; var nrId = nr.id; var oldShipaddress = or.getValue({ fieldId: 'shipaddress' }); var newShipaddress = nr.getValue({ fieldId: 'shipaddress' }); var oldShipcountry = or.getValue({ fieldId: 'shipcountry' }); var newShipcountry = nr.getValue({ fieldId: 'shipcountry' }); if(newShipaddress !== oldShipaddress) { //if there's a disparity between old and new shipaddress, load the record var lr = record.load({ type: record.Type.PURCHASE_ORDER, id: nrId, isDynamic: true }); try { log.debug('ship country difference found', 'old: '+oldShipcountry+', new: '+newShipcountry) //determine line item count to limit iterations var itemCount = nr.getLineCount({ sublistId: 'item' }); if(newShipcountry === 'CA') { //if the new shipcountry is canada, set taxcode values based on nexus search in customers helper log.debug('running CA logic'); var itemId = lr.getSublistValue({ sublistId: 'item', fieldId: 'item', line: 0 }); var itemFields = search.lookupFields({ type: 'item', id: itemId, columns: ['taxschedule'] }); var shipstate = lr.getValue({ fieldId: 'shipstate' }) var itemTaxCode = customers.getTaxCode(itemFields.taxschedule[0].value, shipstate); log.debug('looked up tax code', itemTaxCode[0]) for(var i = 0; i < itemCount; i++) { //update each line item's tax code based on helper function return var pre = lr.getSublistValue({ sublistId: 'item', fieldId: 'taxcode', line: i }); log.debug('initial taxcode', pre) lr.selectLine({ sublistId: 'item', line: i }) lr.setCurrentSublistValue({ sublistId: 'item', fieldId: 'taxcode', value: itemTaxCode[0].value }).setCurrentSublistText({ sublistId: 'item', fieldId: 'taxcode', text: itemTaxCode[0].label }); lr.commitLine({ sublistId: 'item' }); var post = lr.getSublistValue({ sublistId: 'item', fieldId: 'taxcode', line: i }); log.debug('new taxcode', post) }; lr.save({ignoreMandatoryFields: true}); } else { log.debug("running int'l logic"); //for non-canadian shipcountry values, use default tax-exempt code for(var i = 0; i < itemCount; i++) { var pre = lr.getSublistValue({ sublistId: 'item', fieldId: 'taxcode', line: i }); log.debug('initial taxcode', pre) lr.selectLine({ sublistId: 'item', line: i }); lr.setCurrentSublistValue({ sublistId: 'item', fieldId: 'taxcode', value: '14' }).setCurrentSublistText({ sublistId: 'item', fieldId: 'taxcode', text: 'CA-E' }); lr.commitLine({ sublistId: 'item' }); var post = lr.getSublistValue({ sublistId: 'item', fieldId: 'taxcode', line: i }); log.debug('new taxcode', post) }; lr.save({ignoreMandatoryFields: true}); } } catch (e) { log.debug('An error has occurred!', 'Error: '+e) } } else { log.debug('new shipaddress same as previous shipaddress') } } else { return; } } return { afterSubmit: afterSubmit }; });