/var/www/greso.tech/server/nsm/controllers/order
NameSizeModeActions
comment/-0755rm
document/-0755rm
inventory/-0755rm
message/-0755rm
movement/-0755rm
payment/-0755rm
status/-0755rm
create.js127780644editdlrm
delete.js8280644editdlrm
details.js21680644editdlrm
edit.js140900644editdlrm
history.js11930644editdlrm
lead.js110190644editdlrm
list.js37870644editdlrm
search.js30470644editdlrm
Edit: /var/www/greso.tech/server/nsm/controllers/order/lead.js (11019B)
module.exports = function ({ db, logger }) { const uuid = require('uuid'); const { NotFound, BadRequest } = require('../../responseModels/errors') const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber, 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() try { // client name // client phone // client email // pickup address (street, state, zip, city) // delivery address (street, state, zip, city) var { id, // provider key, client_name, client_phone, client_email, pickup_street, pickup_apt, pickup_state, pickup_city, pickup_zip, pickup_comment, delivery_street, delivery_apt, delivery_state, delivery_city, delivery_zip, delivery_comment, reference_number, // provider pickupDateFrom, // provider pickupDateTo, // provider deliveryDateFrom, // provider deliveryDateTo, // provider } = req.body // get provider and company by key const provider = await db.providers.findOne({ where: { key: key } }) if (!provider) { throw new BadRequest({ code: 403, lang: req.user?.languageCode }) } const providerId = provider.id const companyId = provider.companyId if (!isSet(companyId) || isEmpty(companyId)) { throw new BadRequest({ code: 2003, lang: req.user?.languageCode }) } const company = await db.company.findOne({ where: { id: companyId } }) if (!company) { throw new BadRequest({ code: 2003, lang: req.user?.languageCode }) } var params = { providerId, companyId, } // get user by email const userEmail = await db.userEmail.findOne({ where: { email: client_email } }) var userId; var destinationUserId; if (userEmail) { userId = userEmail.userId destinationUserId = userEmail.userId } else { //if user not exists create user, then add to company // get role const role = db.role.findOne({ where: { key: 'client' } }) if (!role) { throw new BadRequest({ code: 2001, lang: req.user?.languageCode }) } const user = await db.user.create({ roleId: role.id, }) let u = { id: uuid.v4(), name: client_name, email: client_email, userId: user.id } await db.userEmail.create(u) let p = { id: uuid.v4(), phone: client_phone, userId: user.id } await db.userPhone.create(p) let userCompany = await db.companyUsers.findOne({ where: { userId: user.id, companyId: company.id } }) if (!userCompany) { await db.companyUsers.create({ userId: user.id, companyId: company.id, roleId: role.id }) } } var pickupAddressId var pickupAreaId var deliveryAddressId var deliveryAreaId // create pickup address if (isSet(pickup_zip) || isSet(pickup_street)) { var latitude var longitude if (isSet(pickup_zip) && pickup_zip.length == 5) { zipCode = await db.zipCode.findOne({ where: { zip: pickup_zip } }) if (zipCode) { latitude = zipCode.latitude longitude = zipCode.longitude area = await SERVICES.CompanyService.GetRateArea({companyId, latitude, longitude}) } if (area.length > 0) { pickupAreaId = area[0].id if (!isSet(pickup_state) || isEmpty(pickup_state)) { pickup_state = area[0].name } } } const address = await db.address.create({ id: uuid.v4(), // name, city: pickup_city, state: pickup_state, street: pickup_street, // street_number, number: pickup_apt, zip: pickup_zip, comment: pickup_comment, // doorbell, // floor, latitude: latitude, longitude: longitude, }) pickupAddressId = address.id } // create delivery address if (isSet(delivery_zip) || isSet(delivery_street)) { var latitude var longitude if (isSet(delivery_zip) && delivery_zip.length == 5) { zipCode = await db.zipCode.findOne({ where: { zip: delivery_zip } }) if (zipCode) { latitude = zipCode.latitude longitude = zipCode.longitude area = await SERVICES.CompanyService.GetRateArea({companyId, latitude, longitude}) } if (area.length > 0) { deliveryAreaId = area[0].id if (!isSet(delivery_state) || isEmpty(delivery_state)) { delivery_state = area[0].name } } } const address = await db.address.create({ id: uuid.v4(), // name, city: delivery_city, state: delivery_state, street: delivery_street, // street_number, number: delivery_apt, zip: delivery_zip, comment: delivery_comment, // doorbell, // floor, latitude: latitude, longitude: longitude, }) deliveryAddressId = address.id } // rate var rate = 0 var companyConfig = JSON.parse(company.config) if (companyConfig) { for (var c in companyConfig) { if (companyConfig[c].key == 'inventory_rate') { rate = companyConfig[c].value ?? 0 } } } if (pickupAreaId && deliveryAreaId) { var wh = {} wh['rateFromId'] = pickupAreaId wh['rateToId'] = deliveryAreaId const rateItem = await db.rateItems.findOne({ wh }) if (rateItem && rateItem.price > 0) { rate = rateItem.price } } // required if (!isSet(id) || isEmpty(id)) { id = uuid.v4() }else{ const order = await db.order.findOne({ where: { id: id } }) if (order) { throw new BadRequest({ code: 2000, lang: req.user?.languageCode }) } } // static params params['status'] = ORDER_STATUS.NEW params['pay_status_order'] = 'no_pay' // not required if (isSet(id)){ if(isEmpty(id)) { throw new BadRequest({ code: 2007, lang: req.user?.languageCode }) }else{ params['id'] = id } } if (isSet(reference_number)){ if(isEmpty(reference_number)) { throw new BadRequest({ code: 2024, lang: req.user?.languageCode }) }else{ params['reference_number'] = reference_number } } if (isSet(userId)){ if(isEmpty(userId)) { throw new BadRequest({ code: 2011, lang: req.user?.languageCode }) }else{ params['userId'] = userId } } if (isSet(destinationUserId)){ if(isEmpty(destinationUserId)) { throw new BadRequest({ code: 2048, lang: req.user?.languageCode }) }else{ params['destinationUserId'] = destinationUserId } } if (isSet(pickupAddressId)){ if(isEmpty(pickupAddressId)) { throw new BadRequest({ code: 2018, lang: req.user?.languageCode }) }else{ params['pickupAddressId'] = pickupAddressId } } if (isSet(deliveryAddressId)){ if(isEmpty(deliveryAddressId)) { throw new BadRequest({ code: 2019, lang: req.user?.languageCode }) }else{ params['deliveryAddressId'] = deliveryAddressId } } if (isSet(pickupAreaId)){ if(isEmpty(pickupAreaId)) { throw new BadRequest({ code: 2039, lang: req.user?.languageCode }) }else{ params['pickupAreaId'] = pickupAreaId } } if (isSet(deliveryAreaId)){ if(isEmpty(deliveryAreaId)) { throw new BadRequest({ code: 2040, lang: req.user?.languageCode }) }else{ params['deliveryAreaId'] = deliveryAreaId } } if (isSet(pickupDateFrom)){ if(isEmpty(pickupDateFrom)) { throw new BadRequest({ code: 2020, lang: req.user?.languageCode }) }else{ params['pickupDateFrom'] = pickupDateFrom } } if (isSet(pickupDateTo)){ if(isEmpty(pickupDateTo)) { throw new BadRequest({ code: 2022, lang: req.user?.languageCode }) }else{ params['pickupDateTo'] = pickupDateTo } } if (isSet(deliveryDateFrom)){ if(isEmpty(deliveryDateFrom)) { throw new BadRequest({ code: 2021, lang: req.user?.languageCode }) }else{ params['deliveryDateFrom'] = deliveryDateFrom } } if (isSet(deliveryDateTo)){ if(isEmpty(deliveryDateTo)) { throw new BadRequest({ code: 2021, lang: req.user?.languageCode }) }else{ params['deliveryDateTo'] = deliveryDateTo } } company.ordersCreated++ company.save() // GENERATE ID var zerofilled = ('000000'+company.ordersCreated).slice(-6); params['number'] = company.prefix + zerofilled // params['updateUserId'] = req.user.id; // ??? var inventoryId = uuid.v4() params['inventoryId'] = inventoryId; const newOrder = await db.order.create(params) await db.orderHistory.create({ orderId: newOrder.id, userId: null, // userId: req.body.userId || null, status: ORDER_STATUS.NEW, comment: 'Lead provider order created' }) try { await db.orderInventory.create( { id: inventoryId, orderId: id, type: 'estimate', status: 'edit', localRateId: null, pickupFrom: null, pickupTo: null, pickupHours: 0, drivingFrom: null, drivingTo: null, drivingHours: 0, deliveryFrom: null, deliveryTo: null, deliveryHours: 0, doubleDriving: false, rate: rate, rate_multiply: 'volume', carrier_rate: 0, storage_rate: 0, storage: false, valuation: '', items_weight: 0, items_volume: 0, items_count: 0, items_total: 0, bulky_count: 0, bulky_total: 0, extras_count: 0, extras_total: 0, packages_count: 0, packages_total: 0, fuel_percent: 0, fuel_total: 0, edited_packages: false, custom_packages: 0, edited_weight: false, custom_weight: 0, edited_volume: false, custom_volume: 0, edited_total: false, custom_total: 0, discount_comment: '', discount_cash: 0, total: 0, paid: 0, due: 0, } ) } catch(e){ throw new BadRequest({ code: 500, message: e.message, lang: req.user?.languageCode }) } transaction.commit() await transaction.afterCommit(async (t) => { newOrder.orderInventoryId = inventoryId const salesRep = await SERVICES.LeadService.GetNextLD(companyId) newOrder.salesRepId = salesRep.salesRepId await newOrder.save() SERVICES.OrderService.OrderStatus(newOrder, 'orderCreate') }); transaction = null const time = performance.now() - t1 return res.status(200).json({ status: 'success', id: newOrder.id, time }) } catch (err) { transaction?.rollback() next(err) } } }