Jira Code: OSI-65
The script calls an API for refund the captured amount using the authorization id that we have got when we have been done order in PayPal. And it will be performed in the save action of a cash refund. The order id is fetching from the return authorization created for the sales order.
/**
* @NApiVersion 2.x
* @NScriptType workflowactionscript
*/
define(['N/https', 'N/record', 'N/search'],
function(https, record, search) {
/**
* Definition of the Suitelet script trigger point.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @Since 2016.1
*/
function onAction(scriptContext) {
var currRecord = scriptContext.newRecord;
var id = currRecord.id;
var paypalSiteCat = currRecord.getValue({
fieldId: 'custbody_jj_paypal_site_category'
});
var paymentMthd = currRecord.getValue({
fieldId: 'paymentmethod'
});
var paypalAuthId = currRecord.getValue({
fieldId: 'paypalauthid'
});
var paypalTranid = currRecord.getValue({
fieldId: 'paypaltranid'
});
var paypalOrderid = currRecord.getValue({
fieldId: 'paypalorderid'
});
var currency = currRecord.getText({
fieldId: 'currency'
});
var createdFrom = currRecord.getValue({
fieldId: 'createdfrom'
});
var createdFromNm = currRecord.getText({
fieldId: 'createdfrom'
});
log.debug('createdFromNm',createdFromNm);
var total = currRecord.getValue({
fieldId: 'total'
});
var paypalStatusJJ = currRecord.getValue({
fieldId: 'custbody_jj_paypal_status'
});
/*createdFromNm = createdFromNm.toString();
log.debug('createdFromNm2',createdFromNm);*/
log.debug('createdFromNm.startsWith("Return Authorization")',(createdFromNm.indexOf("Return Authorization") == 1) );
// str = ''+createdFromNm;
/* str = "Return Authorization 112";
log.debug('str',str);
val = str.startsWith("Return Authorization");
log.debug('val',val);
log.debug('createdFromNm.startsWith("Return Authorization")',val);*/
if(paypalTranid == null || paypalTranid =="" || paypalTranid==undefined && (createdFromNm.indexOf("Return Authorization") == 1) )
{
log.debug('createdFromNm111245');
var returnauthorizationSearchObj = search.create({
type: "returnauthorization",
filters:
[
["type","anyof","RtnAuth"],
"AND",
["internalidnumber","equalto",createdFrom],
"AND",
["mainline","is","T"]
],
columns:
[
search.createColumn({
name: "paypaltranid",
join: "createdFrom",
label: "PayPal Transaction ID"
})
]
});
var searchResultCount = returnauthorizationSearchObj.runPaged().count;
log.debug("returnauthorizationSearchObj result count",searchResultCount);
returnauthorizationSearchObj.run().each(function(result){
paypalTranid = result.getValue({
name: "paypaltranid",
join: "createdFrom"
});
return true;
});
log.debug('paypalTranidzzz',paypalTranid);
}
total = fixFloat(total,2);
// sandbox: Basic
// QVNqaE9Sal9ZS0FtLTlkVlFQMWRlYVFySzE0UXpHUkQ5Skk0SkVacWlxOXNjQXFCdGdqa1lxSXVoeGVTejRQeWVpME9OZTNERXdhZGptaVk6RURVTnQ3T2lOVVE2RmxlUldJT2FjQlN3VF9YRFFTQXc5YlpEeXRvc0ZBWG55QUptd3IzRzRqTzcxT0UwOHVaTWtUaXpaOEhYUUNTaDEtd18=
// production: Basic
// QVN1UEtQcXlKWDk4amthV3JlUWVIMkFuOEJudUtXbXplR2QtLWR0WnBiVkp2YkJFZExZQm9Da3k3YjdCTDdDSi1pZjBGU1JZUmJ1UmxYSG86RUotYTZSNGZrdFg1RnBycm04b3BTQUc3Z1pqNmxaakR1azNUNGE3Q2w3dHVBUUR0S0tyR2VoNkczekRxZndnSVk3dWxkMWotcmI3Nlh1QXk=
if( (paypalSiteCat == 1) && (paypalAuthId) && (paypalOrderid) && (paypalTranid) && ((paypalStatusJJ != 'Completed') || (paypalStatusJJ != 'COMPLETED')))
{
try
{
// CALLING THE API to refund captured payment
var headerObj = {
"Authorization": "Basic QVNqaE9Sal9ZS0FtLTlkVlFQMWRlYVFySzE0UXpHUkQ5Skk0SkVacWlxOXNjQXFCdGdqa1lxSXVoeGVTejRQeWVpME9OZTNERXdhZGptaVk6RURVTnQ3T2lOVVE2RmxlUldJT2FjQlN3VF9YRFFTQXc5YlpEeXRvc0ZBWG55QUptd3IzRzRqTzcxT0UwOHVaTWtUaXpaOEhYUUNTaDEtd18=",
"Content-Type": "application/json",
"Accept": "application/json"
};
var bodyObj = {
"amount": {
"value": total,
"currency_code": currency
}
};
//'https://api.sandbox.paypal.com/v2/payments/captures/'+ paypalTranid +'/refund'
// Posting a request for reauthorize
var paypalRefundResponse = https.post({
url: 'https://api.sandbox.paypal.com/v2/payments/captures/'+ paypalTranid +'/refund' ,
body: JSON.stringify(bodyObj),
headers: headerObj
});
var statusCode = paypalRefundResponse.code;
log.debug('statusCode',statusCode);
var dataCapture = JSON.parse(paypalRefundResponse.body);
log.debug('dataCapture',dataCapture);
if(statusCode == '201')
{
var dataCapture = JSON.parse(paypalRefundResponse.body);
tranId = dataCapture.id;
status = dataCapture.status;
if (status == 'COMPLETED') {
status = 'Completed';
}
log.debug('dataCapture',dataCapture +','+ tranId +','+status);
record.submitFields({
type: record.Type.CASH_REFUND,
id: id,
values: {
'paypaltranid' : tranId,
'custbody_jj_paypal_status': status,
'paypalstatus': status
}
});
}
}
catch (e) {
log.debug({
title: e.name,
details: e.message
});
}
}
}
function fixFloat(value, decimals) {
return roundFloat(parseFloat(value), parseInt(decimals)).toFixed(parseInt(decimals));
}
function roundFloat(value, decimals) {
return Number(Math.round(parseFloat(value) + 'e' + parseInt(decimals)) + 'e-' + parseInt(decimals));
}
return {
onAction : onAction
};
});