821 lines
25 KiB
JavaScript
821 lines
25 KiB
JavaScript
const moment = require('moment');
|
|
const Validator = require('validatorjs');
|
|
const Helper = require('../library/LibHelper');
|
|
const response = require('../config/response');
|
|
const LibMail = require('../library/LibMail');
|
|
const DanaModels = require('../models/DanaModels');
|
|
// const LibQueueBlastOrder = require('../library/LibQueueBlastOrder');
|
|
|
|
Validator.useLang('en');
|
|
|
|
class OrderController {
|
|
|
|
async createOrder(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
trx_code,
|
|
trx_at,
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
client_addr,
|
|
client_prefer_type_truck,
|
|
// weight,
|
|
// cbm,
|
|
// koli,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
vendors,
|
|
admins,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
trx_code,
|
|
trx_at,
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck,
|
|
// weight,
|
|
// cbm,
|
|
// koli,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
vendors,
|
|
admins,
|
|
};
|
|
const rulesInput = {
|
|
trx_code: 'required|string',
|
|
trx_at: 'required|numeric',
|
|
client_id: 'required|integer',
|
|
client_name: 'required|string|max:255',
|
|
client_phone: 'required|string',
|
|
client_mail: 'required|email',
|
|
// client_addr: 'required|string',
|
|
client_prefer_type_truck: 'present|string',
|
|
// weight: 'required|numeric',
|
|
// cbm: 'required|numeric',
|
|
// koli: 'required|numeric',
|
|
pickup_zone_title: 'required|string',
|
|
pickup_zone_addr: 'required|string',
|
|
pickup_at: 'required|numeric',
|
|
drop_zone_title: 'required|string',
|
|
drop_zone_addr: 'required|string',
|
|
// vendors: 'required|array',
|
|
// 'vendors.*.vendor_id': 'required|integer',
|
|
// 'vendors.*.vendor_name': 'required|string|max:255',
|
|
// 'vendors.*.vendor_phone': 'required|string',
|
|
// 'vendors.*.vendor_mail': 'required|email',
|
|
// 'vendors.*.vendor_addr': 'present|string',
|
|
// 'vendors.*.vendor_acc_link': 'required|string',
|
|
// 'vendors.*.vendor_reject_link': 'required|string',
|
|
admins: 'required|array',
|
|
'admins.*.admin_id': 'required|integer',
|
|
'admins.*.admin_name': 'required|string|max:255',
|
|
'admins.*.admin_phone': 'required|string',
|
|
'admins.*.admin_mail': 'required|email',
|
|
// 'admins.*.admin_addr': 'present|string',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
let resp = {};
|
|
// for (let vendor of vendors) {
|
|
// let bidOrderMailData = {
|
|
// client_id,
|
|
// client_name,
|
|
// client_phone,
|
|
// client_mail,
|
|
// client_addr,
|
|
// client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
// pickup_zone_title,
|
|
// pickup_zone_addr,
|
|
// pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
// drop_zone_title,
|
|
// drop_zone_addr,
|
|
// vendor_id: vendor.vendor_id,
|
|
// vendor_name: vendor.vendor_name,
|
|
// vendor_phone: vendor.vendor_phone,
|
|
// vendor_mail: vendor.vendor_mail,
|
|
// vendor_addr: vendor.vendor_addr,
|
|
// };
|
|
// LibMail.sendBidOrderMail('Ada Order Masuk', vendor.vendor_mail, bidOrderMailData);
|
|
// }
|
|
|
|
for (let admin of admins) {
|
|
let infoOrderMailData = {
|
|
trx_code,
|
|
trx_at: moment.unix(trx_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
admin_id: admin.admin_id,
|
|
admin_name: admin.admin_name,
|
|
admin_phone: admin.admin_phone,
|
|
admin_mail: admin.admin_mail,
|
|
// admin_addr: admin.admin_addr,
|
|
};
|
|
LibMail.sendAdminInfoOrdMail('Ada Order Masuk', admin.admin_mail, infoOrderMailData);
|
|
}
|
|
|
|
let clientCreateOrdMailData = {
|
|
trx_code,
|
|
trx_at: moment.unix(trx_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
};
|
|
LibMail.sendClientCreateOrdMail('Kamu Telah Membuat Order ' + trx_code, client_mail, clientCreateOrdMailData);
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success create new order';
|
|
apiRes.data = resp;
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
async emailToVendor(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
trx_code,
|
|
trx_at,
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck,
|
|
// weight,
|
|
// cbm,
|
|
// koli,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
vendors,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
trx_code,
|
|
trx_at,
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck,
|
|
// weight,
|
|
// cbm,
|
|
// koli,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
vendors,
|
|
};
|
|
|
|
const rulesInput = {
|
|
trx_code: 'required|string',
|
|
trx_at: 'required|numeric',
|
|
client_id: 'required|integer',
|
|
client_name: 'required|string|max:255',
|
|
client_phone: 'required|string',
|
|
client_mail: 'required|email',
|
|
// client_addr: 'required|string',
|
|
client_prefer_type_truck: 'present|string',
|
|
// weight: 'required|numeric',
|
|
// cbm: 'required|numeric',
|
|
// koli: 'required|numeric',
|
|
pickup_zone_title: 'required|string',
|
|
pickup_zone_addr: 'required|string',
|
|
pickup_at: 'required|numeric',
|
|
drop_zone_title: 'required|string',
|
|
drop_zone_addr: 'required|string',
|
|
vendors: 'required|array',
|
|
'vendors.*.vendor_id': 'required|integer',
|
|
'vendors.*.vendor_name': 'required|string|max:255',
|
|
'vendors.*.vendor_phone': 'required|string',
|
|
'vendors.*.vendor_mail': 'required|email',
|
|
// 'vendors.*.vendor_addr': 'present|string',
|
|
'vendors.*.vendor_acc_link': 'required|string',
|
|
// 'vendors.*.vendor_reject_link': 'required|string',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
let resp = {};
|
|
for (let vendor of vendors) {
|
|
let bidOrderMailData = {
|
|
trx_code,
|
|
// client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
// vendor_id: vendor.vendor_id,
|
|
vendor_name: vendor.vendor_name,
|
|
vendor_phone: vendor.vendor_phone,
|
|
vendor_mail: vendor.vendor_mail,
|
|
vendor_addr: vendor.vendor_addr,
|
|
vendor_acc_link: vendor.vendor_acc_link,
|
|
};
|
|
LibMail.sendBidOrderMail('Ada Order Masuk', vendor.vendor_mail, bidOrderMailData);
|
|
}
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success send email';
|
|
apiRes.data = resp;
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
async emailVdrAccOrder(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
trx_code,
|
|
trx_at,
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck,
|
|
// weight,
|
|
// cbm,
|
|
// koli,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
vendors,
|
|
drivers,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
trx_code,
|
|
trx_at,
|
|
client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck,
|
|
// weight,
|
|
// cbm,
|
|
// koli,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
vendors,
|
|
drivers,
|
|
};
|
|
const rulesInput = {
|
|
trx_code: 'required|string',
|
|
trx_at: 'required|numeric',
|
|
client_id: 'required|integer',
|
|
client_name: 'required|string|max:255',
|
|
client_phone: 'required|string',
|
|
client_mail: 'required|email',
|
|
// client_addr: 'required|string',
|
|
client_prefer_type_truck: 'present|string',
|
|
// weight: 'required|numeric',
|
|
// cbm: 'required|numeric',
|
|
// koli: 'required|numeric',
|
|
pickup_zone_title: 'required|string',
|
|
pickup_zone_addr: 'required|string',
|
|
pickup_at: 'required|numeric',
|
|
drop_zone_title: 'required|string',
|
|
drop_zone_addr: 'required|string',
|
|
vendors: 'required|array',
|
|
'vendors.*.vendor_id': 'required|integer',
|
|
'vendors.*.vendor_name': 'required|string|max:255',
|
|
'vendors.*.vendor_phone': 'required|string',
|
|
'vendors.*.vendor_mail': 'required|email',
|
|
// 'vendors.*.vendor_addr': 'present|string',
|
|
'vendors.*.vendor_acc_at': 'required|numeric',
|
|
drivers: 'required|array',
|
|
'drivers.*.driver_id': 'required|integer',
|
|
'drivers.*.driver_name': 'required|string|max:255',
|
|
'drivers.*.driver_phone': 'required|string',
|
|
'drivers.*.driver_mail': 'required|email',
|
|
// 'drivers.*.driver_addr': 'present|string',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
let resp = {};
|
|
for (let vendor of vendors) {
|
|
let vdrAccOrderMailData = {
|
|
trx_code,
|
|
// client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
// vendor_id: vendor.vendor_id,
|
|
vendor_name: vendor.vendor_name,
|
|
vendor_phone: vendor.vendor_phone,
|
|
vendor_mail: vendor.vendor_mail,
|
|
vendor_addr: vendor.vendor_addr,
|
|
acc_at: moment.unix(vendor.vendor_acc_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
};
|
|
LibMail.sendVdrAccOrderMail('Kamu Telah Menerima Order', vendor.vendor_mail, vdrAccOrderMailData);
|
|
}
|
|
|
|
for (let driver of drivers) {
|
|
let driverGetOrderMailData = {
|
|
trx_code,
|
|
// client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
// driver_id: driver.driver_id,
|
|
driver_name: driver.driver_name,
|
|
driver_phone: driver.driver_phone,
|
|
driver_mail: driver.driver_mail,
|
|
driver_addr: driver.driver_addr,
|
|
acc_at: moment.unix(vendors[0].vendor_acc_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
};
|
|
LibMail.sendDrvGetOrderMail('Kamu Mendapatkan Order', driver.driver_mail, driverGetOrderMailData);
|
|
}
|
|
|
|
let sendClientOrderHaveBeenAccMailData = {
|
|
trx_code,
|
|
// client_id,
|
|
client_name,
|
|
client_phone,
|
|
client_mail,
|
|
// client_addr,
|
|
client_prefer_type_truck: client_prefer_type_truck,
|
|
// weight: Number(weight),
|
|
// cbm: Number(cbm),
|
|
// koli: Number(koli),
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
pickup_at: moment.unix(pickup_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
// vendor_id: vendors[0].vendor_id,
|
|
vendor_name: vendors[0].vendor_name,
|
|
vendor_phone: vendors[0].vendor_phone,
|
|
vendor_mail: vendors[0].vendor_mail,
|
|
vendor_addr: vendors[0].vendor_addr,
|
|
// driver_id: drivers[0].driver_id,
|
|
driver_name: drivers[0].driver_name,
|
|
driver_phone: drivers[0].driver_phone,
|
|
driver_mail: drivers[0].driver_mail,
|
|
driver_addr: drivers[0].driver_addr,
|
|
acc_at: moment.unix(vendors[0].vendor_acc_at).format('DD MMM YYYY HH:mm') + ' WIB',
|
|
};
|
|
LibMail.sendClientOrderHaveBeenAccMail('Order Kamu Telah Diambil Driver', client_mail, sendClientOrderHaveBeenAccMailData);
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success send email';
|
|
apiRes.data = resp;
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
async delayBlastOrderBAK(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
ord_id,
|
|
ord_code,
|
|
current_ord_vdr_id,
|
|
next_ord_vdr_id,
|
|
next_vdr_bid_token,
|
|
next_vdr_acc_link,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
ord_id,
|
|
ord_code,
|
|
current_ord_vdr_id,
|
|
next_ord_vdr_id,
|
|
next_vdr_bid_token,
|
|
next_vdr_acc_link,
|
|
};
|
|
|
|
const rulesInput = {
|
|
ord_id: 'required|integer|min:1',
|
|
ord_code: 'required|string',
|
|
current_ord_vdr_id: 'required|integer|min:1',
|
|
next_ord_vdr_id: 'present|array',
|
|
next_vdr_bid_token: 'present|array',
|
|
next_vdr_acc_link: 'present|array',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
LibQueueBlastOrder.addQueue({
|
|
ord_id,
|
|
ord_code,
|
|
current_ord_vdr_id,
|
|
next_ord_vdr_id,
|
|
next_vdr_bid_token,
|
|
next_vdr_acc_link,
|
|
label: 'Delay Blast Order to Another Vendor',
|
|
delay: 10 * (60 * 1000), // 600000 || 10 minute || 10 * (60 * 1000)
|
|
});
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success blast order';
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
async delayBlastOrder(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
ord_id,
|
|
ord_code,
|
|
base_link,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
ord_id,
|
|
ord_code,
|
|
base_link,
|
|
};
|
|
|
|
const rulesInput = {
|
|
ord_id: 'required|integer|min:1',
|
|
ord_code: 'required|string',
|
|
base_link: 'required|string',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
LibQueueBlastOrder.addQueue({
|
|
ord_id,
|
|
ord_code,
|
|
base_link,
|
|
delay: 10 * (60 * 1000), // 600000 || 10 minute || 10 * (60 * 1000)
|
|
});
|
|
LibQueueBlastOrder.addQueue({
|
|
ord_id,
|
|
ord_code,
|
|
base_link,
|
|
delay: 20 * (60 * 1000), // 600000 || 20 minute || 20 * (60 * 1000)
|
|
});
|
|
LibQueueBlastOrder.addQueue({
|
|
ord_id,
|
|
ord_code,
|
|
base_link,
|
|
delay: 30 * (60 * 1000), // 600000 || 30 minute || 30 * (60 * 1000)
|
|
});
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success blast order';
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
async sendFinanceInfoTfPocket(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
trx_code,
|
|
drv_name,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
pocket_total,
|
|
bank_name,
|
|
bank_code,
|
|
bank_branch_name,
|
|
bank_acc_name,
|
|
bank_acc_no,
|
|
admins,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
trx_code,
|
|
drv_name,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
pocket_total,
|
|
bank_name,
|
|
bank_code,
|
|
bank_branch_name,
|
|
bank_acc_name,
|
|
bank_acc_no,
|
|
admins,
|
|
};
|
|
const rulesInput = {
|
|
trx_code: 'required|string|max:255',
|
|
drv_name: 'required|string|max:255',
|
|
pickup_zone_title: 'required|string|max:255',
|
|
pickup_zone_addr: 'required|string',
|
|
drop_zone_title: 'required|string|max:255',
|
|
drop_zone_addr: 'required|string',
|
|
pocket_total: 'required|string|max:255',
|
|
bank_name: 'required|string',
|
|
bank_code: 'required|string|max:255',
|
|
bank_branch_name: 'string',
|
|
bank_acc_name: 'required|string',
|
|
bank_acc_no: 'required|string',
|
|
admins: 'required|array',
|
|
// 'admins.*.admin_id': 'required|integer',
|
|
'admins.*.admin_name': 'required|string|max:255',
|
|
'admins.*.admin_phone': 'required|string',
|
|
'admins.*.admin_mail': 'required|email',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
let resp = {};
|
|
|
|
let mailData = {
|
|
trx_code,
|
|
drv_name,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
pocket_total,
|
|
bank_name,
|
|
bank_code,
|
|
bank_branch_name,
|
|
bank_acc_name,
|
|
bank_acc_no,
|
|
};
|
|
|
|
for (let admin of admins) {
|
|
mailData.admin_name = admin.admin_name;
|
|
LibMail.sendFinanceInfoTfPocket('Transfer uang saku order ' + trx_code, admin.admin_mail, mailData);
|
|
}
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success send mail';
|
|
apiRes.data = resp;
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
async sendFinanceInfoDanaAmount(req, res) {
|
|
let apiRes = {};
|
|
try {
|
|
const now = moment().unix();
|
|
|
|
const {
|
|
trx_code,
|
|
drv_name,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
pocket_total,
|
|
bank_name,
|
|
bank_code,
|
|
bank_branch_name,
|
|
bank_acc_name,
|
|
bank_acc_no,
|
|
admins,
|
|
} = req.body;
|
|
|
|
// input validation
|
|
const input = {
|
|
trx_code,
|
|
drv_name,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
pocket_total,
|
|
bank_name,
|
|
bank_code,
|
|
bank_branch_name,
|
|
bank_acc_name,
|
|
bank_acc_no,
|
|
admins,
|
|
};
|
|
const rulesInput = {
|
|
trx_code: 'required|string|max:255',
|
|
drv_name: 'required|string|max:255',
|
|
pickup_zone_title: 'required|string|max:255',
|
|
pickup_zone_addr: 'required|string',
|
|
drop_zone_title: 'string|max:255',
|
|
drop_zone_addr: 'string',
|
|
pocket_total: 'required|string|max:255',
|
|
bank_name: 'required|string',
|
|
bank_code: 'required|string|max:255',
|
|
bank_branch_name: 'string',
|
|
bank_acc_name: 'required|string',
|
|
bank_acc_no: 'required|string',
|
|
admins: 'required|array',
|
|
// 'admins.*.admin_id': 'required|integer',
|
|
'admins.*.admin_name': 'required|string|max:255',
|
|
'admins.*.admin_phone': 'required|string',
|
|
'admins.*.admin_mail': 'required|email',
|
|
};
|
|
const isInputValid = new Validator(input, rulesInput);
|
|
if (isInputValid.fails()) {
|
|
apiRes = JSON.parse(JSON.stringify(response[422]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
|
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
|
|
const danas = await DanaModels.list({'id': DanaModels.PK_ID, 'limit': 1});
|
|
if (danas.length < 1) {
|
|
apiRes = JSON.parse(JSON.stringify(response[400]));
|
|
apiRes.meta.message = 'dana error';
|
|
return res.status(200).json(apiRes);
|
|
}
|
|
const dana = danas[0];
|
|
|
|
let resp = {};
|
|
|
|
let mailData = {
|
|
trx_code,
|
|
drv_name,
|
|
pickup_zone_title,
|
|
pickup_zone_addr,
|
|
drop_zone_title,
|
|
drop_zone_addr,
|
|
pocket_total,
|
|
bank_name,
|
|
bank_code,
|
|
bank_branch_name,
|
|
bank_acc_name,
|
|
bank_acc_no,
|
|
dana_current: 'Rp'+((new Intl.NumberFormat('id-ID')).format(dana.amt)).split('.').join('-').split(',').join('.').split('-').join(','), // yang . => - || , => . || - => ,,
|
|
dana_minimum: 'Rp'+((new Intl.NumberFormat('id-ID')).format(DanaModels.MINIMUM_AMT)).split('.').join('-').split(',').join('.').split('-').join(','), // yang . => - || , => . || - => ,,
|
|
};
|
|
|
|
for (let admin of admins) {
|
|
mailData.admin_name = admin.admin_name;
|
|
LibMail.sendFinanceInfoDanaAmount('Saldo Dana Tidak Mencukupi', admin.admin_mail, mailData);
|
|
}
|
|
|
|
// success response
|
|
apiRes = JSON.parse(JSON.stringify(response[200]));
|
|
apiRes.meta.message = 'success send mail';
|
|
apiRes.data = resp;
|
|
return res.status(200).json(apiRes);
|
|
} catch (e) {
|
|
apiRes = JSON.parse(JSON.stringify(response[500]));
|
|
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
|
return res.status(500).json(apiRes);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
const object = new OrderController();
|
|
|
|
module.exports = object; |