UNPKG

angarum

Version:

A library which helps you focus on your delivery.

176 lines (154 loc) 4.83 kB
var Template = require('./template.js'); var querystring = require('querystring'); var _ = require("lodash"); var host = process.env['DELHIVERY_HOST']; var return_details = { /* "client": "Elanic", "return_add": "", "return_city": "", "return_country": "", "return_name": "", "return_phone": "", "return_pin": "", "return_state": "", */ }; var defaults={ format: "json", output: "json", token: process.env["DELHIVERY_TOKEN"], }; // Declare partner specific variables here. // Check out other partners for more information. module.exports = Template.extend('Delhivery', { init: function() { this._super(host); }, order: function(params, cb) { var url = "/cmu/push/json/?" + querystring.stringify(_.pick(defaults, ["token"])); // Check out Order schema file for more information. params.map([], { "from_address" : "from_add", "to_address" : "to_add", "from_mobile_number": "from_phone", "to_mobile_number": "to_phone", "from_pin_code": "from_pin", "to_pin_code": "to_pin", "reference_number": "waybill", "to_mobile_number": "to_phone", "order_time": "order_date", "invoice_number": "order", "declared_Value": "total_amount", "item_name": "product_desc", }, function(inp) { var ship = _.extend(_.pick(inp, ["waybill", "from_name", "order", "product_desc", "order_date", "total_amount", "cod_amount", "from_add", "from_city", "from_state", "from_country", "from_phone", "from_pin", "weight", "quantity"]), return_details); var pickup = _.pick(inp, ["to_add", "to_city", "to_state", "to_country", "to_name", "to_phone", "to_pin"]); for (item in ship) { if (item.indexOf("from_") == 0) { ship[item.slice(5)] = ship[item]; delete ship[item]; } } for (item in pickup) { if (item.indexOf("to_") == 0) { pickup[item.slice(3)] = pickup[item]; delete pickup[item]; } } /* if (inp.order_type.indexOf("pickup") > 0) { ship.package_type = "pickup"; ship.cod_amount = 0; if (inp.order_type.indexOf("return") == 0) { ["add", "name", "city", "state", "country", "phone", "pin"].forEach(function(item) { temp = ship[item]; ship[item] = pickup[item]; pickup[item] = temp; }); } } else { ship.package_type = "pre-paid"; if (inp.is_cod) ship.package_type = "cod"; else ship.cod_amount = 0; }*/ ship.package_type = "pickup"; ship.payment_mode = "pickup"; pickup.name = "ELANIC"; return _.extend({ "data": JSON.stringify({ "pickup_location": pickup, "shipments": [ship], }) }, defaults); }); params.out_map({ "error": "err", }, function(out) { if (out && out.constructor == String) out = JSON.parse(out); if (out.packages && out.packages.length > 0) out.awb = out.packages[0].waybill; if (out.success) { out.err = null; } else { out.success = false; out.err = out.rmk; } return out; }); return this.post_req(url, params, cb, {json: null, body: null, form: params.get()}); }, track: function(params, cb) { params.set({ "tracking_url": this.get_tracking_url(params.get().awb_number)}); return cb(null, params); }, get_tracking_url: function(awb) { return "https://track.delhivery.com/p/" + awb; }, single_tracking_status: function(params, cb) { var url = "https://track.delhivery.com/api/status/packages/json/?waybill="+params.get().awb_number; var awb = params.get().awb_number; params.out_map({ "err": "error", }, function(out) { if (String == out.constructor) out = JSON.parse(out); out.success = Boolean(out.ShipmentData); if (out.ShipmentData && out.ShipmentData.constructor == Array && out.ShipmentData.length > 0) { var details = out.ShipmentData[0].Shipment.Scans.map(function(scan) { scan = scan.ScanDetail; return { "time": scan.ScanDateTime, "status": scan.Scan, "location": scan.ScannedLocation, "description": scan.Instructions, }; }); out.details = details; } out.awb = awb; return out; }); return this.get_req(url, params, cb, {url: url}) }, cancel: function(params, cb) { params.set({success: false, err: "Error link not available"}); return cb(null, params); //unclear var url = "/api/p/edit/"; params.map([], { "awb" : "waybill", }, function(inp) { inp.cancellation = true; return _.extend(inp, defaults); }); params.out_map({ "error": "err", }, function(out) { out.success = (out.success == "True"); return out; }); return this.post_req(url, params, cb, {headers: {"Authorization": "Token " + defaults.token}}); }, });