/var/www/greso.tech/server/nsm/services
Edit: /var/www/greso.tech/server/nsm/services/order.service.js (5352B)
const logger = require('../logger')({ service: 'OrderService' })
const { Op } = require('sequelize')
const {
OrderModel
} = require('../responseModels')
const uuid = require('uuid');
module.exports = class OrderService {
constructor({ db, config }) {
this.db = db
this.interval = null
this.config = config
logger.child({ service: 'OrderService', method: 'Constructor' }).info('Success')
}
async Run() {
logger.child({ service: 'OrderService', method: 'Run' }).info('Success')
}
async Stop() {
this.interval = null
logger.child({ service: 'OrderService', method: 'Stop' }).info('Success')
}
async OrderStatus(ord, status) {
// DOCUMENT ACTION CREATE ON STATUS -->
const documents = await this.db.documents.findAll();
const documentsMap = new Map();
// add all root
for (let index = 0; index < documents.length; index++) {
if(documents[index].rootDocumentId==null||documents[index].rootDocumentId==''){
documentsMap.set(documents[index].id, documents[index]);
}
}
// replace company documents
for (let index = 0; index < documents.length; index++) {
if(documents[index].companyId == ord.companyId
&& documents[index].rootDocumentId != null
&& documents[index].rootDocumentId != ''){
documentsMap.set(documents[index].rootDocumentId, documents[index]);
}
}
// search create document action
var docForCreate = [];
documentsMap.forEach(doc => {
try{
var pages = JSON.parse(doc.dataValues.objects);
pages.forEach(page => {
try{
var objects = JSON.parse(page.objects);
objects.forEach(object => {
if(object.key == 'actionCreateThisDocument'
&& object.value == ord.status){
docForCreate.push(doc);
// console.log(object.value);
}
});
}catch(e){
console.log(e);
}
});
}catch(e){
console.log(e);
}
});
// get order documents
const orderDocuments = await this.db.orderDocument.findAll({
where: { orderId: ord.id, inventoryId: ord.orderInventoryId }
});
// ------- create document
for (let index = 0; index < docForCreate.length; index++) {
// check exist order document
let exist = false;
for (let index2 = 0; index2 < orderDocuments.length; index2++) {
if(orderDocuments[index2].documentId == docForCreate[index].id){
exist = true;
}
}
if(!exist){
// create document
var params = {
// id,
orderId: ord.id,
inventoryId: ord.orderInventoryId,
documentId: docForCreate[index].id,
userId: ord.updateUserId,
name: docForCreate[index].name,
rootDocumentId: '',
status: 'edit',
link: '',
objects: '[]'
}
try{
await this.db.orderDocument.create(params)
await this.db.orderHistory.create({
orderId: ord.id,
userId: ord.updateUserId,
status: ord.status,
comment: 'Auto create document ' + docForCreate[index].name + ' on status ' + ord.status
})
}catch(e){
console.log(e);
}
}
}
// <-- DOCUMENT ACTION CREATE ON STATUS
let include = [
{
model: this.db.user,
include: [
this.db.userEmail,
this.db.userPhone
],
as: 'user'
},
{
model: this.db.user,
include: [
this.db.userEmail,
this.db.userPhone
],
as: 'destinationUser'
},
{model: this.db.address, as: 'pickupAddress'},
{model: this.db.address, as: 'deliveryAddress'},
{model: this.db.orderDocument, as: 'orderDocuments'},
]
let where = { 'id' : ord.id }
const order = await this.db.order.findOne({
include: include,
where,
})
const inventories = await this.db.orderInventory.findAll({
include: [
{ model: this.db.inventoryItemsCategories, as: 'itemsCategory' },
{ model: this.db.inventoryExtras, as: 'extras' },
{ model: this.db.inventoryItems, as: 'items',
include: [
{ model: this.db.inventoryItemsConditions, as: 'conditions' },
{ model: this.db.inventoryItemsPackages, as: 'packages' },
{ model: this.db.inventoryItemsAttachments, as: 'attachments' }
],
},
],
where: { 'orderId' : ord.id },
})
order.dataValues['inventories'] = inventories
const payments = await this.db.orderPayment.findAll({
where: { 'orderId' : ord.id },
})
order.dataValues['payments'] = payments
const movements = await this.db.orderMovement.findAll({
include: [
{
model: this.db.user,
include: [
this.db.userEmail,
this.db.userPhone
],
as: 'workers'
}
],
where: { 'orderId' : ord.id },
order: [
['createdAt', 'ASC'],
],
})
order.dataValues['movements'] = movements
const headerClients = new OrderModel(order.dataValues)
const headerOperators = new OrderModel(order.dataValues)
// отправить клинету
await SERVICES.WebSocketService.SendToClient(order.userId, status, headerClients)
// отправить company
if(order.companyId != null && order.companyId != ''){
await SERVICES.WebSocketService.SendToCrmByCompany(
order.companyId,
status,
headerOperators
)
}
// отправить branch
// if(order.branchId != null && order.branchId != ''){
// await SERVICES.WebSocketService.SendToCrmByBranch(
// order.branchId,
// status,
// headerOperators
// )
// }
}
}