-
-
Save cafeasp/30318813c65199e167a94431ab8ea555 to your computer and use it in GitHub Desktop.
/** | |
* @NApiVersion 2.x | |
* @NScriptType Restlet | |
* @NModuleScope SameAccount | |
*/ | |
define(['N/search', 'N/record', 'N/util', './momentjs.js', './cafeaspMagento.js'], | |
/** | |
* @param {search} search | |
* @param {record} record | |
* @param {util} util | |
* @param {moment} moment | |
* @param {cafeaspmagento} cafeaspmagento | |
*/ | |
function (search, record, util, moment, cafeaspmagento) { | |
/** | |
* Function called upon sending a GET request to the RESTlet. | |
* | |
* @param {Object} requestParams - Parameters from HTTP request URL; parameters will be passed into function as an Object (for all supported content types) | |
* @returns {string | Object} HTTP response body; return string when request Content-Type is 'text/plain'; return Object when request Content-Type is 'application/json' | |
* @since 2015.1 | |
*/ | |
function doGet() { | |
} | |
/** | |
* Function called upon sending a PUT request to the RESTlet. | |
* FOR CREATING ITEM FULFILLMENT | |
* @param {string | Object} requestBody - The HTTP request body; request body will be passed into function as a string when request Content-Type is 'text/plain' | |
* or parsed into an Object when request Content-Type is 'application/json' (in which case the body must be a valid JSON) | |
* @returns {string | Object} HTTP response body; return string when request Content-Type is 'text/plain'; return Object when request Content-Type is 'application/json' | |
* @since 2015.2 | |
*/ | |
function doPut(requestBody) { | |
if (requestBody) { | |
var trackingNumber = '123'; | |
var shipDate = '12/12/2019'; | |
var status = salesOrderStatus(salesOrderid); | |
if (status == 'Pending Fulfillment') { | |
//create IF | |
var fulfillment = record.transform({ | |
fromType: record.Type.SALES_ORDER, | |
fromId: salesOrderid, | |
toType: record.Type.ITEM_FULFILLMENT | |
}); | |
fulfillment.setValue({ fieldId: 'shipstatus', value: 'C' }); | |
fulfillment.setValue({ fieldId: 'custbody14333', value: trackingNumber }); | |
//line below can be improved | |
fulfillment.setValue({ fieldId: 'trandate', value: new Date(moment(shipDate).format('M/D/YYYY')) }); | |
var fulfillmentLineCount = fulfillment.getLineCount({ | |
sublistId: 'item' | |
}); | |
for (var i = 0; i < fulfillmentLineCount; i++) { | |
fulfillment.setSublistValue({ | |
sublistId: 'item', | |
line: i, | |
fieldId: 'itemReceive', | |
value: true | |
}); | |
fulfillment.setSublistValue({ | |
sublistId: 'item', | |
line: i, | |
fieldId: 'itemIsFulfilled', | |
value: true | |
}); | |
} | |
var itemFulfillmentId = fulfillment.save({ | |
enableSourcing: true, | |
ignoreMandatoryFields: false | |
}); | |
} | |
} | |
return "ok"; | |
} | |
/** | |
* Function called upon sending a POST request to the RESTlet. | |
* | |
* @param {string | Object} requestBody - The HTTP request body; request body will be passed into function as a string when request Content-Type is 'text/plain' | |
* or parsed into an Object when request Content-Type is 'application/json' (in which case the body must be a valid JSON) | |
* @returns {string | Object} HTTP response body; return string when request Content-Type is 'text/plain'; return Object when request Content-Type is 'application/json' | |
* @since 2015.2 | |
*/ | |
function doPost(requestBody) { | |
return "ok"; | |
} | |
/** | |
* Function called upon sending a DELETE request to the RESTlet. | |
* | |
* @param {Object} requestParams - Parameters from HTTP request URL; parameters will be passed into function as an Object (for all supported content types) | |
* @returns {string | Object} HTTP response body; return string when request Content-Type is 'text/plain'; return Object when request Content-Type is 'application/json' | |
* @since 2015.2 | |
*/ | |
function doDelete(requestParams) { | |
} | |
return { | |
'get': doGet, | |
put: doPut, | |
post: doPost, | |
'delete': doDelete | |
}; | |
}); |
Question about the following line of logic: var status = salesOrderStatus(salesOrderid);
Is there a missing function called, salesOrderStatus?
Please provide if this is the case.
Thanks.
Hello, not the same function that I had but it will give you an idea.
function findSalesOrderInternalId(salesOrderNumber) {
var salesOrderInternalId = '';
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type", "anyof", "SalesOrd"],
"AND",
["transactionnumber", "is", salesOrderNumber],
"AND",
["mainline", "is", "T"]
],
columns:
[
search.createColumn({ name: "internalid", label: "Internal ID" })
]
});
var searchResultCount = salesorderSearchObj.runPaged().count;
log.debug("salesorderSearchObj result count", searchResultCount);
var resultSet = salesorderSearchObj.run();
var result = resultSet.getRange({ start: 0, end: 1 });
log.debug('search result', result);
if (searchResultCount > 0) {
salesOrderInternalId = result[0].getValue({ name: 'internalid' });
}
log.debug('internal id OC', salesOrderInternalId);
return salesOrderInternalId;
}
another idea is to use the search.lookupFields call
columns, you can add the fields you need.
var fieldLookUp = search.lookupFields({
type: search.Type.SALES_ORDER,
id: '87',
columns: ['entity', 'subsidiary', 'name', 'currency','status']
});
It looks like this script assumes no partial fulfilment of line items and no duplicate line items. Both scenarios are very common and not covering them would have large accounting and inventory management impacts.