/var/www/greso.tech/server/nsm/controllers/order
Edit: /var/www/greso.tech/server/nsm/controllers/order/edit.js (14090B)
module.exports = function ({ db, logger }) {
const { NotFound, BadRequest } = require('../../responseModels/errors')
const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber, isArray, parseBool } = require('../../utils/validator.util')
return async (req, res, next) => {
logger.child({ path: req.path, request: req.query }).info()
let t1 = performance.now()
let transaction = await db.sequelize.transaction()
let changes = ''
try {
var {
id,
reference_number,
rate,
storage,
fuel_surcharge,
carrierRate,
rate_multiply,
companyId,
userId,
destinationUserId,
salesRepId,
qaId,
warehouseId,
providerId,
app,
valuation,
discount_cash,
pickupAddressId,
deliveryAddressId,
pickupAreaId,
deliveryAreaId,
hold,
orderType,
followUpDate,
pickupDateFrom,
pickupDateTo,
deliveryDateFrom,
deliveryDateTo,
loadingDate,
deliveryDate,
edited_total,
custom_total,
edited_packages,
custom_packages,
edited_weight,
custom_weight,
edited_volume,
custom_volume,
orderItems
} = req.body
if (!isSet(id) || isEmpty(id)) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
const order = await db.order.findOne({
where: { id: id }
})
if (!order) {
throw new NotFound({ lang: req.user?.languageCode })
}
if (!isSet(companyId) || isEmpty(companyId)) {
throw new BadRequest({
code: 2003,
lang: req.user?.languageCode
})
}
order.companyId = companyId
// not required
if (isSet(orderType)){
if(isEmpty(orderType)) {
throw new BadRequest({
code: 2124,
lang: req.user?.languageCode
})
}else{
if(order.orderType != orderType){
order.orderType = orderType
changes += 'order type, '
}
}
}
if (isSet(reference_number)){
if(isEmpty(reference_number)) {
throw new BadRequest({
code: 2024,
lang: req.user?.languageCode
})
}else{
if(order.reference_number != reference_number){
order.reference_number = reference_number
changes += 'ref #, '
}
}
}
if (isSet(valuation)){
if(isEmpty(valuation)) {
throw new BadRequest({
code: 2085,
lang: req.user?.languageCode
})
}else{
if(order.valuation != valuation){
order.valuation = valuation
changes += 'valuation, '
}
}
}
if (isSet(rate)){
if(isEmpty(rate)) {
throw new BadRequest({
code: 2027,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.rate) != parseFloat(rate)){
order.rate = rate
changes += 'rate, '
}
}
}
if (isSet(fuel_surcharge)){
if(isEmpty(fuel_surcharge)) {
throw new BadRequest({
code: 2086,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.fuel_surcharge) != parseFloat(fuel_surcharge)){
order.fuel_surcharge = fuel_surcharge
changes += 'fuel surcharge, '
}
}
}
if (isSet(carrierRate)){
if(isEmpty(carrierRate)) {
throw new BadRequest({
code: 2027,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.carrierRate) != parseFloat(carrierRate)){
order.carrierRate = carrierRate
changes += 'carrier rate, '
}
}
}
if (isSet(userId)){
if(isEmpty(userId)) {
throw new BadRequest({
code: 2011,
lang: req.user?.languageCode
})
}else{
if(order.userId != userId){
order.userId = userId
changes += 'client, '
}
}
}
if (isSet(destinationUserId)){
if(isEmpty(destinationUserId)) {
throw new BadRequest({
code: 2048,
lang: req.user?.languageCode
})
}else{
if(order.destinationUserId != destinationUserId){
order.destinationUserId = destinationUserId
changes += 'destination client, '
}
}
}
if (isSet(salesRepId)){
if(isEmpty(salesRepId)) {
throw new BadRequest({
code: 2047,
lang: req.user?.languageCode
})
}else{
if(order.salesRepId != salesRepId){
order.salesRepId = salesRepId
changes += 'sales rep, '
}
}
}
if (isSet(qaId)){
if(isEmpty(qaId)) {
throw new BadRequest({
code: 2049,
lang: req.user?.languageCode
})
}else{
if(order.qaId != qaId){
order.qaId = qaId
changes += 'QA, '
}
}
}
if (isSet(warehouseId)){
if(isEmpty(warehouseId)) {
throw new BadRequest({
code: 2053,
lang: req.user?.languageCode
})
}else{
if(order.warehouseId != warehouseId){
order.warehouseId = warehouseId
changes += 'warehouse, '
}
}
}
if (isSet(providerId)){
if(isEmpty(providerId)) {
throw new BadRequest({
code: 2054,
lang: req.user?.languageCode
})
}else{
if(order.providerId != providerId){
order.providerId = providerId
changes += 'provider, '
}
}
}
if (isSet(app)){
if(isEmpty(app)) {
throw new BadRequest({
code: 2016,
lang: req.user?.languageCode
})
}else{
order.app = app
}
}
if (isSet(pickupAddressId)){
if(isEmpty(pickupAddressId)) {
throw new BadRequest({
code: 2018,
lang: req.user?.languageCode
})
}else{
if(order.pickupAddressId != pickupAddressId){
order.pickupAddressId = pickupAddressId
changes += 'pickup address, '
}
}
}
if (isSet(deliveryAddressId)){
if(isEmpty(deliveryAddressId)) {
throw new BadRequest({
code: 2019,
lang: req.user?.languageCode
})
}else{
if(order.deliveryAddressId != deliveryAddressId){
order.deliveryAddressId = deliveryAddressId
changes += 'delivery address, '
}
}
}
if (isSet(pickupAreaId)){
if(isEmpty(pickupAreaId)) {
throw new BadRequest({
code: 2039,
lang: req.user?.languageCode
})
}else{
if(order.pickupAreaId != pickupAreaId){
order.pickupAreaId = pickupAreaId
changes += 'pickup area, '
}
}
}
if (isSet(deliveryAreaId)){
if(isEmpty(deliveryAreaId)) {
throw new BadRequest({
code: 2040,
lang: req.user?.languageCode
})
}else{
if(order.deliveryAreaId != deliveryAreaId){
order.deliveryAreaId = deliveryAreaId
changes += 'delivery area, '
}
}
}
if (isSet(hold)){
if(isEmpty(hold)) {
throw new BadRequest({
code: 2103,
lang: req.user?.languageCode
})
}else{
if(order.hold != parseBool(hold)){
order.hold = hold
changes += 'hold, '
}
}
}
if (isSet(followUpDate)){
if(isEmpty(followUpDate)) {
throw new BadRequest({
code: 2102,
lang: req.user?.languageCode
})
}else{
const x = new Date(order.followUpDate).setHours(0,0,0,0);
const y = new Date(followUpDate).setHours(0,0,0,0);
if(x != y){
order.followUpDate = followUpDate
changes += 'follow up date, '
}
}
}
if (isSet(pickupDateFrom)){
if(isEmpty(pickupDateFrom)) {
throw new BadRequest({
code: 2020,
lang: req.user?.languageCode
})
}else{
const x = new Date(order.pickupDateFrom).setHours(0,0,0,0);
const y = new Date(pickupDateFrom).setHours(0,0,0,0);
if(x != y){
order.pickupDateFrom = pickupDateFrom
changes += 'pickup date, '
}
}
}
if (isSet(pickupDateTo)){
if(isEmpty(pickupDateTo)) {
throw new BadRequest({
code: 2022,
lang: req.user?.languageCode
})
}else{
const x = new Date(order.pickupDateTo).setHours(0,0,0,0);
const y = new Date(pickupDateTo).setHours(0,0,0,0);
if(x != y){
order.pickupDateTo = pickupDateTo
changes += 'pickup window, '
}
}
}
if (isSet(deliveryDateFrom)){
if(isEmpty(deliveryDateFrom)) {
if(order.deliveryDateFrom != null){
order.deliveryDateFrom = null
changes += 'reset delivery date, '
}
}else{
const x = new Date(order.deliveryDateFrom).setHours(0,0,0,0);
const y = new Date(deliveryDateFrom).setHours(0,0,0,0);
if(x != y){
order.deliveryDateFrom = deliveryDateFrom
changes += 'delivery date, '
}
}
}
if (isSet(deliveryDateTo)){
if(isEmpty(deliveryDateTo)) {
if(order.deliveryDateTo != null){
order.deliveryDateTo = null
changes += 'reset delivery window, '
}
}else{
const x = new Date(order.deliveryDateTo).setHours(0,0,0,0);
const y = new Date(deliveryDateTo).setHours(0,0,0,0);
if(x != y){
order.deliveryDateTo = deliveryDateTo
changes += 'delivery window, '
}
}
}
if (isSet(loadingDate)){
if(isEmpty(loadingDate)) {
throw new BadRequest({
code: 2055,
lang: req.user?.languageCode
})
}else{
if(order.loadingDate != loadingDate){
order.loadingDate = loadingDate
changes += 'loading date, '
}
}
}
if (isSet(deliveryDate)){
if(isEmpty(deliveryDate)) {
throw new BadRequest({
code: 2084,
lang: req.user?.languageCode
})
}else{
if(order.deliveryDate != deliveryDate){
order.deliveryDate = deliveryDate
changes += 'Delivery date, '
}
}
}
if (isSet(discount_cash)){
if(isEmpty(discount_cash)) {
throw new BadRequest({
code: 2056,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.discount_cash) != parseFloat(discount_cash)){
order.discount_cash = discount_cash
changes += 'discount cash, '
}
}
}
if (isSet(rate_multiply)){
if(isEmpty(rate_multiply)) {
throw new BadRequest({
code: 2057,
lang: req.user?.languageCode
})
}else{
if(order.rate_multiply != rate_multiply){
order.rate_multiply = rate_multiply
changes += 'rate multiply, '
}
}
}
if (isSet(storage)){
if(isEmpty(storage)) {
throw new BadRequest({
code: 2100,
lang: req.user?.languageCode
})
}else{
if(order.storage != parseBool(storage)){
order.storage = parseBool(storage)
changes += 'storage, '
}
}
}
if (isSet(edited_packages)){
if(isEmpty(edited_packages)) {
throw new BadRequest({
code: 2078,
lang: req.user?.languageCode
})
}else{
if(order.edited_packages != parseBool(edited_packages)){
order.edited_packages = parseBool(edited_packages)
changes += 'edited packages, '
}
}
}
if (isSet(custom_packages)){
if(isEmpty(custom_packages)) {
throw new BadRequest({
code: 2079,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.custom_packages) != parseFloat(custom_packages)){
order.custom_packages = parseFloat(custom_packages)
changes += 'custom packages, '
}
}
}
if (isSet(edited_weight)){
if(isEmpty(edited_weight)) {
throw new BadRequest({
code: 2070,
lang: req.user?.languageCode
})
}else{
if(order.edited_weight != parseBool(edited_weight)){
order.edited_weight = parseBool(edited_weight)
changes += 'edited weight, '
}
}
}
if (isSet(custom_weight)){
if(isEmpty(custom_weight)) {
throw new BadRequest({
code: 2071,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.custom_weight) != parseFloat(custom_weight)){
order.custom_weight = parseFloat(custom_weight)
changes += 'custom weight, '
}
}
}
if (isSet(edited_volume)){
if(isEmpty(edited_volume)) {
throw new BadRequest({
code: 2072,
lang: req.user?.languageCode
})
}else{
if(order.edited_volume != parseBool(edited_volume)){
order.edited_volume = parseBool(edited_volume)
changes += 'edited volume, '
}
}
}
if (isSet(custom_volume)){
if(isEmpty(custom_volume)) {
throw new BadRequest({
code: 2073,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.custom_volume) != parseFloat(custom_volume)){
order.custom_volume = parseFloat(custom_volume)
changes += 'custom volume, '
}
}
}
if (isSet(edited_total)){
if(isEmpty(edited_total)) {
throw new BadRequest({
code: 2061,
lang: req.user?.languageCode
})
}else{
if(order.edited_total != parseBool(edited_total)){
order.edited_total = parseBool(edited_total)
changes += 'edited total, '
}
}
}
if (isSet(custom_total)){
if(isEmpty(custom_total)) {
throw new BadRequest({
code: 2062,
lang: req.user?.languageCode
})
}else{
if(parseFloat(order.custom_total) != parseFloat(custom_total)){
order.custom_total = parseFloat(custom_total)
changes += 'custom total, '
}
}
}
// if (isSet(orderItems) ){
// orderItems = JSON.parse(orderItems)
// const oldItems = order.orderItems
// if(isArray(orderItems)&& oldItems != orderItems){
// db.orderItems.destroy({ where: { orderId: order.id } })
// for (var i = 0; i < orderItems.length; i++) {
// orderItems[i].orderId = order.id;
// }
// db.orderItems.bulkCreate(orderItems)
// // order.orderItems = orderItems
// }
// }
order.updateUserId = req.user.id;
if(changes!=''){
await order.save()
await db.orderHistory.create({
orderId: order.id,
userId: req.user.id || null,
status: order.status,
comment: 'Edit ' + changes,
createdAt: Date.now(),
updatedAt: Date.now(),
})
}
transaction.commit()
transaction = null
await SERVICES.OrderService.OrderStatus(order, 'orderEdit')
const time = performance.now() - t1
return res.status(200).json({ status: 'success', id: order.id, time })
} catch (err) {
transaction?.rollback()
next(err)
}
}
}