Clients need a suitelet API to present the Sales Order Information on the Website to create RMa record for the Sales Order.
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define(['N/https', 'N/record', 'N/search', 'N/ui/serverWidget', 'N/url'],
/**
* @param{https} https
* @param{record} record
* @param{search} search
* @param{serverWidget} serverWidget
* @param{url} url
*/
(https, record, search, serverWidget, url) => {
function checkForParameter(parameter) {
if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null"
&& parameter !== "undefined" && parameter !== " " && parameter !== 'false') {
return true;
} else {
log.debug("empty")
return false;
}
}
function checkCustomer(name,email){
try{
var customerSearchObj = search.create({
type: "customer",
filters:
[
["email","is",email]
],
columns:
[
search.createColumn({
name: "entityid",
sort: search.Sort.ASC,
label: "ID"
}),
search.createColumn({name: "altname", label: "Name"}),
search.createColumn({name: "email", label: "Email"}),
search.createColumn({name: "internalid", label: "Internal ID"})
]
});
var searchResultCount = customerSearchObj.runPaged().count;
let customerDetails=[]
if(searchResultCount>0){
customerSearchObj.run().each(function(result){
let obj={}
obj.name=result.getValue({name: "altname", label: "Name"})
obj.internalID=result.getValue({name: "internalid", label: "Internal ID"});
obj.email=result.getValue({name: "internalid", label: "Internal ID"});
customerDetails.push(obj)
return true;
});
}
return customerDetails;
}catch (e) {
log.debug("error@CheckCustomer",e)
let responseBody={
'status': 500,
'message': e.message,
'isSuccess': false,
}
return scriptContext.response.write(JSON.stringify(responseBody))
}
}
function toFindSODetals(orderID){
try{
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type","anyof","SalesOrd"],
"AND",
["status","anyof","SalesOrd:D","SalesOrd:E","SalesOrd:F","SalesOrd:G","SalesOrd:B"],
"AND",
["mainline","is","F"],
"AND",
["shipping","is","F"],
"AND",
["quantityshiprecv","greaterthan","0"],
// "AND",
// ["customermain.internalid","anyof",customerID],
"AND",
["taxline","is","F"],
"AND",
[[["numbertext","is",orderID]],"OR",[["formulatext: {otherrefnum}","is",orderID]]]
],
columns:
[
search.createColumn({
name: "item",
summary: "GROUP",
label: "Item"
}),
search.createColumn({
name: "quantity",
summary: "GROUP",
label: "Quantity"
}),
search.createColumn({
name: "quantity",
join: "applyingTransaction",
summary: "SUM",
label: "Quantity"
}),
search.createColumn({
name: "line",
summary: "GROUP",
label: "Line ID"
}),
search.createColumn({
name: "formulanumeric",
summary: "SUM",
formula: "CASE WHEN {applyingtransaction.type} = 'Return Authorization' THEN {applyingtransaction.quantity} ELSE 0 END",
label: "Formula (Numeric)"
}),
search.createColumn({
name: "quantityshiprecv",
summary: "GROUP",
label: "Quantity Fulfilled/Received"
})
]
});
var searchResultCount = salesorderSearchObj.runPaged().count;
let orderDetails=[]
log.debug("salesorderSearchObj result count",searchResultCount);
if(searchResultCount>0){
salesorderSearchObj.run().each(function(result){
let itemQunatity=result.getValue({
name: "quantityshiprecv",
summary: "GROUP",
label: "Quantity Fulfilled/Received"
})
let appliedQuantity=result.getValue({
name: "formulanumeric",
summary: "SUM",
formula: "CASE WHEN {applyingtransaction.type} = 'Return Authorization' THEN {applyingtransaction.quantity} ELSE 0 END",
label: "Formula (Numeric)"
});
let mainQuantity=(parseInt(itemQunatity) + parseInt(appliedQuantity))
log.debug("mainQuantity",mainQuantity)
if(mainQuantity>0){
let obj={}
obj.item=result.getText({
name: "item",
summary: "GROUP",
label: "Item"
})
obj.quantity=mainQuantity
obj.lineId=result.getValue({
name: "line",
summary: "GROUP",
label: "Line ID"
})
orderDetails.push(obj)
}
// .run().each has a limit of 4,000 results
return true;
});
}
return orderDetails;
}catch (e) {
log.debug("error@toFindSODetails",e)
let responseBody={
'status': 500,
'message': e.message,
'isSuccess': false,
}
return scriptContext.response.write(JSON.stringify(responseBody))
}
}
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request - Incoming request
* @param {ServerResponse} scriptContext.response - Suitelet response
* @since 2015.2
*/
const onRequest = (scriptContext) => {
try {
let method=scriptContext.request.method;
log.debug("method",method)
if(scriptContext.request.method==='POST'){
let login_key= scriptContext.request?.headers?.login_key;
log.debug("Login Key",login_key)
if(!login_key || login_key!=='c782779b77215248bb2372c545132ae1') {
let message = {
'status': 500,
'message': 'Invalid Login Attempt',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
let requestBody=JSON.parse(scriptContext.request.body);
log.debug("requestBody",requestBody);
if (!checkForParameter(requestBody.first_name)) {
let message = {
'status': 500,
'message': 'First Name Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.last_name)) {
let message = {
'status': 500,
'message': 'Last Name Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.email)) {
let message = {
'status': 500,
'message': 'Email Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.phone)) {
let message = {
'status': 500,
'message': 'Phone Number Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.address.address1)) {
let message = {
'status': 500,
'message': 'Address1 Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.address.city)) {
let message = {
'status': 500,
'message': 'City Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.address.state)) {
let message = {
'status': 500,
'message': 'State Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.address.country)) {
let message = {
'status': 500,
'message': 'Country Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
if (!checkForParameter(requestBody.order_id)) {
let message = {
'status': 500,
'message': 'Order ID Is Empty',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
let orderDetails=toFindSODetals(requestBody.order_id);
if(orderDetails.length<=0){
let message = {
'status': 500,
'message': 'Order Doesnot Exist',
'isSuccess': false
}
return scriptContext.response.write(JSON.stringify(message))
}
let responseBody={
'status': 200,
'message': 'Order Found',
'isSuccess': true,
'order_id': requestBody.order_id,
'email': requestBody.email,
items: orderDetails
}
return scriptContext.response.write(JSON.stringify(responseBody))
}
//log.debug("request",scriptContext.request)
}catch (e) {
log.debug("error @ onRequest",e)
let responseBody={
'status': 500,
'message': e.message,
'isSuccess': false,
}
return scriptContext.response.write(JSON.stringify(responseBody))
}
}
return {onRequest}
});