/var/www/greso.tech/server/nsm/controllers/order/document
NameSizeModeActions
create.js23120644editdlrm
delete.js8590644editdlrm
edit.js135800644editdlrm
list.js12840644editdlrm
send.js56340644editdlrm
Edit: /var/www/greso.tech/server/nsm/controllers/order/document/send.js (5634B)
module.exports = function ({ db, logger }) { const { NotFound, BadRequest } = require('../../../responseModels/errors') const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber, isStatusBiggerThen } = require('../../../utils/validator.util') const uuid = require('uuid'); return async (req, res, next) => { logger.child({ path: req.path }).info() let t1 = performance.now() try { const { id } = req.body if (!isSet(id) || isEmpty(id)) { throw new BadRequest({ code: 400, lang: req.user?.languageCode }) } // check order document const documentEdit = await db.orderDocument.findOne({ where: { id: id } }) if (!documentEdit) { throw new NotFound({ lang: req.user?.languageCode }) } // check document const document = await db.documents.findOne({ where: { id: documentEdit.documentId } }) if (!document) { throw new NotFound({ lang: req.user?.languageCode }) } // check order const order = await db.order.findOne({ where: { id: documentEdit.orderId } }) if (!order) { throw new NotFound({ code: 2032, lang: req.user?.languageCode }) } // check inventory const inventory = await db.orderInventory.findOne({ where: { id: documentEdit.inventoryId } }) if (!inventory) { throw new NotFound({ code: 2035, lang: req.user?.languageCode }) } // check sign before sent document var onSendOrderStatus = '' var onSendInventoryStatus = '' var beforeSignObjects = [] var beforeSignCount = 0; try{ // FIND ALL NEEDED SIGNATURES AND SET ACTIONS var pages = JSON.parse(document.objects) var orderDocumentObjects = documentEdit.objects!='' ? JSON.parse(documentEdit.objects) : [] for(var page in pages){ var objects = JSON.parse(pages[page].objects) for(var obj in objects){ if(objects[obj].type == 'sign' && objects[obj].key == 'signBeforeSend'){ beforeSignObjects.push(objects[obj]) } if(objects[obj].type == 'action'){ if(objects[obj].model == 'actionOnSend'){ if(objects[obj].key == 'actionSetOrderStatus'){ onSendOrderStatus = objects[obj].value } if(objects[obj].key == 'actionSetEstimateStatus'){ onSendInventoryStatus = objects[obj].value } } } } } // CHECK DOCUMENT SIGNATURES for(var d_obj in orderDocumentObjects){ for(var obj in beforeSignObjects){ if (beforeSignObjects[obj].id == orderDocumentObjects[d_obj].id) { beforeSignCount++ } } } if (beforeSignObjects.length != beforeSignCount) { throw new NotFound({ code: 2118, lang: req.user?.languageCode }) } } catch (e) { throw new NotFound({ code: 2119, lang: req.user?.languageCode }) } // check completed, start sending document const result = await SERVICES.MailService.SendDocument(documentEdit) var status = 'ERROR' if(result.accepted.length>0){ documentEdit.status = "sended" documentEdit.save() // --> Set order status if(onSendOrderStatus != '' && isStatusBiggerThen(onSendOrderStatus, order.status)){ order.status = onSendOrderStatus order.updateUserId = req.user.id; switch(order.status){ case ORDER_STATUS.ESTIMATE: order.estimateAt = Date.now() break; case ORDER_STATUS.BOOKED: order.bookedAt = Date.now() break; case ORDER_STATUS.CONFIRMED: order.confirmedAt = Date.now() break; case ORDER_STATUS.ONSITE: order.onsiteAt = Date.now() break; case ORDER_STATUS.PICKUP: order.pickupAt = Date.now() break; case ORDER_STATUS.PICKED_UP: order.pickedUpAt = Date.now() break; case ORDER_STATUS.WAREHOUSE: order.warehouseAt = Date.now() break; case ORDER_STATUS.STORAGE: order.storageAt = Date.now() break; case ORDER_STATUS.WAREHOUSE_UNLOADING: order.warehouseUnloadingAt = Date.now() break; case ORDER_STATUS.LOADING: order.loadingAt = Date.now() break; case ORDER_STATUS.ENROUTE: order.enrouteAt = Date.now() break; case ORDER_STATUS.ARRIVED: order.arrivedAt = Date.now() break; case ORDER_STATUS.UNLOADING: order.unloadingAt = Date.now() break; case ORDER_STATUS.COMPLETE: order.completeAt = Date.now() break; case ORDER_STATUS.CANCEL: order.cancelAt = Date.now() break; } order.save() await db.orderHistory.create({ orderId: order.id, userId: req.user.id || order.updateUserId, status: order.status, comment: 'Order set status ' + order.status + ' after send mail' }) } // --> Set inventory status if (onSendInventoryStatus != '') { inventory.status = onSendInventoryStatus await inventory.save() await db.orderHistory.create({ orderId: order.id, userId: req.user.id || order.updateUserId, status: order.status, comment: 'Inventory set status ' + inventory.status + ' after send mail' }) } // <-- CHECK SIGNATURES // ACTIONS status = 'OK' } var params = { id: uuid.v4(), orderId: order.id, userId: order.userId, type: 'email', message: document.name+' sent', status, } await db.orderMessage.create(params) await SERVICES.OrderService.OrderStatus(order, 'orderEdit') const time = performance.now() - t1 return res.status(200).json({ status: 'success', id: document.id, time }) } catch (err) { next(err) } } }