/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/edit.js (13580B)
module.exports = function ({ db, logger }) { const { NotFound, BadRequest } = require('../../../responseModels/errors') const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber, isStatusBiggerThen } = require('../../../utils/validator.util') return async (req, res, next) => { logger.child({ path: req.path, request: req.query }).info() let t1 = performance.now() try { var { id, orderId, inventoryId, documentId, userId, name, rootDocumentId, status, link, objects, } = req.body if (!isSet(id) || isEmpty(id)) { throw new BadRequest({ code: 400, lang: req.user?.languageCode }) } if (!isSet(orderId) || isEmpty(orderId)) { throw new BadRequest({ code: 2032, lang: req.user?.languageCode }) } // check order const order = await db.order.findOne({ where: { id: orderId } }) if (!order) { throw new BadRequest({ code: 2032, lang: req.user?.languageCode }) } // ------- WORK WITH SIGNATURES -------- // check document const document = await db.documents.findOne({ where: { id: documentId } }) if (!document) { throw new NotFound({ 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 inventory const inventory = await db.orderInventory.findOne({ where: { id: documentEdit.inventoryId } }) if (!inventory) { throw new NotFound({ code: 2035, lang: req.user?.languageCode }) } // MAIN VARIABLES var foundNewSignPickup = false; var foundNewSignDelivery = false; var foundNewSignSalesRep = false; var foundNewSignAgent = false; var foundNewSignCarrier = false; if (isSet(userId) && !isEmpty(userId)) { documentEdit.userId = userId } if (isSet(inventoryId) && !isEmpty(inventoryId)) { documentEdit.inventoryId = inventoryId } if (isSet(documentId) && !isEmpty(documentId)) { documentEdit.documentId = documentId } if (isSet(name) && !isEmpty(name)) { documentEdit.name = name } if (isSet(rootDocumentId) && !isEmpty(rootDocumentId)) { documentEdit.rootDocumentId = rootDocumentId } if (isSet(status) && !isEmpty(status)) { documentEdit.status = status } if (isSet(objects) && !isEmpty(objects)) { try { var old_objects = documentEdit.objects != '' ? JSON.parse(documentEdit.objects) : [] var new_objects = JSON.parse(objects) for (var new_idx in new_objects) { var found = false for (var old_idx in old_objects) { if (old_objects[old_idx].id == new_objects[new_idx].id) { found = true } } if (!found) { if(new_objects[new_idx].type == 'sign'){ switch(new_objects[new_idx].model){ case 'pickupClient': foundNewSignPickup = true break; case 'deliveryClient': foundNewSignDelivery = true break; case 'salesRep': foundNewSignSalesRep = true break; case 'agentWorker': foundNewSignAgent = true break; case 'carrierWorker': foundNewSignCarrier = true break; } } } } } catch (e) { throw new NotFound({ code: 2119, lang: req.user?.languageCode }) } documentEdit.objects = objects } if (isSet(link) && !isEmpty(link)) { documentEdit.link = link } // --> CHECK SIGNATURES var onPickupClientSignOrderStatus = '' var onDeliveryClientSignOrderStatus = '' var onSalesRepSignOrderStatus = '' var onAgentWorkerSignOrderStatus = '' var onCarrierWorkerSignOrderStatus = '' var onPickupClientSignInventoryStatus = '' var onDeliveryClientSignInventoryStatus = '' var onSalesRepSignInventoryStatus = '' var onAgentWorkerSignInventoryStatus = '' var onCarrierWorkerSignInventoryStatus = '' var onPickupClientSignSendDocument = '' var onDeliveryClientSignSendDocument = '' var onSalesRepSignSendDocument = '' var onAgentWorkerSignSendDocument = '' var onCarrierWorkerSignSendDocument = '' // FIND ALL NEEDED SIGNATURES AND SET ACTIONS var signedPickupClient = false var signedDeliveryClient = false var signedSalesRep = false var signedAgentWorker = false var signedCarrierWorker = false var countPickupClient = 0; var countDeliveryClient = 0; var countSalesRep = 0; var countAgentWorker = 0; var countCarrierWorker = 0; var signPickupClient = [] var signDeliveryClient = [] var signSalesRep = [] var signAgentWorker = [] var signCarrierWorker = [] var pages = JSON.parse(document.objects) for (var page in pages) { // check page status if (isStatusBiggerThen(order.status, pages[page].status)) { var objects = JSON.parse(pages[page].objects) for (var obj in objects) { if (objects[obj].type == 'sign') { if (isStatusBiggerThen(order.status, objects[obj].value)) { switch (objects[obj].model) { case 'pickupClient': signPickupClient.push(objects[obj]) break; case 'deliveryClient': signDeliveryClient.push(objects[obj]) break; case 'salesRep': signSalesRep.push(objects[obj]) break; case 'agentWorker': signAgentWorker.push(objects[obj]) break; case 'carrierWorker': signCarrierWorker.push(objects[obj]) break; } } } if (objects[obj].type == 'action') { if (objects[obj].model == 'actionOnPickupClientSign') { if (objects[obj].key == 'actionSetOrderStatus') { onPickupClientSignOrderStatus = objects[obj].value } if (objects[obj].key == 'actionSetEstimateStatus') { onPickupClientSignInventoryStatus = objects[obj].value } if (objects[obj].key == 'actionSetSendDocument') { onPickupClientSignSendDocument = objects[obj].value } } if (objects[obj].model == 'actionOnDeliveryClientSign') { if (objects[obj].key == 'actionSetOrderStatus') { onDeliveryClientSignOrderStatus = objects[obj].value } if (objects[obj].key == 'actionSetEstimateStatus') { onDeliveryClientSignInventoryStatus = objects[obj].value } if (objects[obj].key == 'actionSetSendDocument') { onDeliveryClientSignSendDocument = objects[obj].value } } if (objects[obj].model == 'actionOnSalesRepSign') { if (objects[obj].key == 'actionSetOrderStatus') { onSalesRepSignOrderStatus = objects[obj].value } if (objects[obj].key == 'actionSetEstimateStatus') { onSalesRepSignInventoryStatus = objects[obj].value } if (objects[obj].key == 'actionSetSendDocument') { onSalesRepSignSendDocument = objects[obj].value } } if (objects[obj].model == 'actionOnAgentWorkerSign') { if (objects[obj].key == 'actionSetOrderStatus') { onAgentWorkerSignOrderStatus = objects[obj].value } if (objects[obj].key == 'actionSetEstimateStatus') { onAgentWorkerSignInventoryStatus = objects[obj].value } if (objects[obj].key == 'actionSetSendDocument') { onAgentWorkerSignSendDocument = objects[obj].value } } if (objects[obj].model == 'actionOnCarrierWorkerSign') { if (objects[obj].key == 'actionSetOrderStatus') { onCarrierWorkerSignOrderStatus = objects[obj].value } if (objects[obj].key == 'actionSetEstimateStatus') { onCarrierWorkerSignInventoryStatus = objects[obj].value } if (objects[obj].key == 'actionSetSendDocument') { onCarrierWorkerSignSendDocument = objects[obj].value } } } } } } // CHECK DOCUMENT SIGNATURES var orderDocumentObjects = JSON.parse(documentEdit.objects) // SIGN COUNT for(var d_obj in orderDocumentObjects){ for(var obj in signPickupClient){ if(signPickupClient[obj].id == orderDocumentObjects[d_obj].id){ countPickupClient++ } } for(var obj in signDeliveryClient){ if(signDeliveryClient[obj].id == orderDocumentObjects[d_obj].id){ countDeliveryClient++ } } for(var obj in signSalesRep){ if(signSalesRep[obj].id == orderDocumentObjects[d_obj].id){ countSalesRep++ } } for(var obj in signAgentWorker){ if(signAgentWorker[obj].id == orderDocumentObjects[d_obj].id){ countAgentWorker++ } } for(var obj in signCarrierWorker){ if(signCarrierWorker[obj].id == orderDocumentObjects[d_obj].id){ countCarrierWorker++ } } } // SIGNED if(countPickupClient == signPickupClient.length){ signedPickupClient = true; } if(countDeliveryClient == signDeliveryClient.length){ signedDeliveryClient = true; } if(countSalesRep == signSalesRep.length){ signedSalesRep = true; } if(countAgentWorker == signAgentWorker.length){ signedAgentWorker = true; } if(countCarrierWorker == signCarrierWorker.length){ signedCarrierWorker = true; } // ACTIONS VARS var onSignOrderStatus = '' var onSignInventoryStatus = '' var onSignSendDocument = '' // SET ACTION VARS ( ONLY ONE ACTION WORK ON ONE REQUEST !!! ) if (foundNewSignPickup && signedPickupClient) { onSignOrderStatus = onPickupClientSignOrderStatus onSignInventoryStatus = onPickupClientSignInventoryStatus onSignSendDocument = onPickupClientSignSendDocument } if (foundNewSignDelivery && signedDeliveryClient) { onSignOrderStatus = onDeliveryClientSignOrderStatus onSignInventoryStatus = onDeliveryClientSignInventoryStatus onSignSendDocument = onDeliveryClientSignSendDocument } if (foundNewSignSalesRep && signedSalesRep) { onSignOrderStatus = onSalesRepSignOrderStatus onSignInventoryStatus = onSalesRepSignInventoryStatus onSignSendDocument = onSalesRepSignSendDocument } if (foundNewSignAgent && signedAgentWorker) { onSignOrderStatus = onAgentWorkerSignOrderStatus onSignInventoryStatus = onAgentWorkerSignInventoryStatus onSignSendDocument = onAgentWorkerSignSendDocument } if (foundNewSignCarrier && signedCarrierWorker) { onSignOrderStatus = onCarrierWorkerSignOrderStatus onSignInventoryStatus = onCarrierWorkerSignInventoryStatus onSignSendDocument = onCarrierWorkerSignSendDocument } // DO ACTION if (onSignOrderStatus != '' && isStatusBiggerThen(onSignOrderStatus, order.status)) { order.status = onSignOrderStatus 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; } await db.orderHistory.create({ orderId: order.id, userId: req.user.id || null, status: order.status, comment: 'Order set status ' + order.status + ' after sign document' }) order.save() } if (onSignInventoryStatus != '') { inventory.status = onSignInventoryStatus 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 sign document' }) } if (onSignSendDocument != '') { const sendDocument = await db.documents.findOne({ where: { id: onSignSendDocument } }) if (sendDocument) { const result = await SERVICES.MailService.SendDocument(sendDocument) var status = 'ERROR' if (result.accepted.length > 0) { sendDocument.status = "sended" sendDocument.save() } } } // ALL SIGNATURES COMPLETED IN THIS STATUS !!! if (signedPickupClient && signedDeliveryClient && signedSalesRep && signedAgentWorker && signedCarrierWorker) { documentEdit.status = 'signed' } await documentEdit.save() await SERVICES.OrderService.OrderStatus(order, 'orderEdit') const time = performance.now() - t1 return res.status(200).json({ status: 'success', id: documentEdit.id, time }) } catch (err) { next(err) } } }