/
var
/
www
/
greso.tech
/
server
/
nsm
/
controllers
/
order
/
document
/
/var/www/greso.tech/server/nsm/controllers/order/document
mkdir
upload
Name
Size
Mode
Actions
create.js
2312
0644
edit
dl
rm
delete.js
859
0644
edit
dl
rm
edit.js
13580
0644
edit
dl
rm
list.js
1284
0644
edit
dl
rm
send.js
5634
0644
edit
dl
rm
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) } } }
Save
cmd:
run