b2w
Version:
A library for the B2W Group (Americanas[dot]com, Submarino & Shoptime) API using Promises
91 lines (73 loc) • 2.3 kB
JavaScript
;
var errorHelper = require('./helper'),
coreAPI,
trackingAPI = {
init(coreAPIObj) {
coreAPI = coreAPIObj;
return trackingAPI;
},
getTrackingInfo(zipCode, paymentType, skuObj, cupom) {
var cartObj = { orderLines: {} },
paymentObj;
if(!zipCode || zipCode.length !== 8) {
return errorHelper.errorHandler('tracking', 'missingZipCode');
}
if(!paymentType) {
return errorHelper.errorHandler('tracking', 'missingPayment');
}
if(!skuObj || (!skuObj.id && !skuObj.similar)) {
return errorHelper.errorHandler('tracking', 'missingSku');
}
switch (paymentType) {
case 'corporate':
paymentObj = { type: 'CORPORATE_SALE_PAYMENT' };
break;
default:
paymentObj = {
type: 'CREDIT_CARD',
cardBrand: paymentType.toUpperCase()
};
break;
}
cartObj.orderLines.orderLine = {
sku: (skuObj.id || skuObj.similar),
quantity: (skuObj.quantity || 1)
};
if(skuObj.similar) {
delete cartObj.orderLines.orderLine.sku;
cartObj.orderLines.orderLine.similarId = skuObj.similar;
}
if(cupom) {
cartObj.cupom = cupom;
}
return coreAPI
.makeRequest('POST', 'freight', {}, coreAPI.parseXML({
addresses: { shipping: { zipcode: zipCode } },
payments: { payment: paymentObj },
cart: cartObj
}))
.catch((error) => errorHelper.errorHandler('tracking', error.erro.errorCode, error))
.then((xmlBody) => {
var freteObj = xmlBody.freight,
dateArray = freteObj.time.split('-'),
deliveryDates = [];
deliveryDates = freteObj.scheduledDelivery.
scheduledDeliveryAvailableDates.scheduledDeliveryAvailableDate.map((el) => {
var dateArray = el.split('-');
return new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);
});
return {
deliveryDate: new Date(dateArray[0], dateArray[1] - 1, dateArray[2]),
scheduledDelivery: {
dates: deliveryDates,
value: parseFloat(freteObj.scheduledDelivery.scheduledDeliveryAmount),
periods: freteObj.scheduledDelivery.scheduledDeliveryPeriod.replace(/[\[\]\s]/gm, '').split(',')
},
value: parseFloat(freteObj.amount),
discount: (parseFloat(freteObj.discount) || 0),
total: parseFloat(freteObj.totalAmount)
};
});
}
};
module.exports = Object.create(trackingAPI);