/var/www/qr4y.com/server/delivery/api/controllers/order
NameSizeModeActions
accept.js14550644editdlrm
add_waiter.js13920644editdlrm
arrived.js14020644editdlrm
cancel.js19090644editdlrm
complete.js23280644editdlrm
confirmed.js25730644editdlrm
create.js62500644editdlrm
delete.js9120644editdlrm
delivery.js14670644editdlrm
details.js18110644editdlrm
edit.js8840644editdlrm
history.js15500644editdlrm
list.js35520644editdlrm
pay.js51080644editdlrm
printed.js12610644editdlrm
ready.js14570644editdlrm
remove_waiter.js10000644editdlrm
set_table.js11050644editdlrm
set_user.js10980644editdlrm
statistic.js61160644editdlrm
Edit: /var/www/qr4y.com/server/delivery/api/controllers/order/create.js (6250B)
// const { Op } = require('sequelize') const uuid = require('uuid'); const { NotFound, BadRequest, ApiError } = require('../../responseModels/errors') const { isSet, isEmpty, isArray, isNumber } = require('../../utils/validator.util') // const checkPermission = require('../utils/checkPermission.util') const { performance } = require('perf_hooks') // const { getDateByDateRange, hoursList, daysOfWeekList } = require('../utils/date') // const fetch = require('node-fetch') // const config = require('../../../config/app.json') module.exports = function ({ db, logger }) { return async (req, res, next) => { logger.child({ path: req.path, request: req.body }).info() let transaction = await db.sequelize.transaction() try { let t1 = performance.now() // checkPermission(req, 'order_create') var { id, addressId, companyId, branchId, status, tips, phone, payTypeId, deliveryPayTypeId, deliveryTypeId, delivery_time, delivery_distance, delivery_cost, delivery_cost_calculated, order_cost, userId, comment, tableId, reservAt, person_count, userCartItems } = req.body // company counters const company = await db.company.findOne({ where: { id: companyId } }) if (!company) { throw new BadRequest({ code: 1059, lang: req.user?.languageCode }) } company.ordersCreated++ company.save() const number = company.ordersCreated; if (!isSet(order_cost) || isEmpty(order_cost)) { throw new BadRequest({ code: 1062, lang: req.user?.languageCode }) } if (!isSet(userCartItems) || !isArray(userCartItems)) { throw new BadRequest({ code: 1014, lang: req.user?.languageCode }) } if (!isSet(person_count) || isEmpty(person_count)) { person_count = 1 } if (!isSet(delivery_time) || isEmpty(delivery_time)) { delivery_time = 0 } if (!isSet(delivery_distance) || isEmpty(delivery_distance)) { delivery_distance = 0 } if (!isSet(delivery_cost) || isEmpty(delivery_cost)) { delivery_cost = 0 } if (!isSet(delivery_cost_calculated) || isEmpty(delivery_cost_calculated)) { delivery_cost_calculated = 0 } if (!isSet(tips) || isEmpty(tips)) { tips = 0 } // пройти по корзине и заполнить массив let discount = 0 let prepare_time = 0 let orderItems = userCartItems.map((userCartItem) => { console.log(userCartItem.price_json) // максимальное время приготовления // if (branchProduct.prepare_time > prepare_time) { // prepare_time = branchProduct.prepare_time // } // orderTotal += branchProduct.price * userCartItem.qty // вернуть новый orderItem return { productId: userCartItem.productId, price_json: userCartItem.price_json, // productPrinterId: branchProduct.printerId, } }) let params = { companyId, branchId, number, status, payTypeId, deliveryPayTypeId, deliveryTypeId, prepare_time, discount, order_cost: order_cost, delivery_time: delivery_time, delivery_distance: delivery_distance, delivery_cost: delivery_cost, delivery_cost_calculated: delivery_cost_calculated, person_count: person_count, tax: 0, bag: 0, tips: tips, no_plastic: false, comment, orderItems } if (!isSet(id) || isEmpty(id)) { id = uuid.v4() } params['id'] = id let inc = [{ model: db.orderItems }] // discount if (isSet(userId) && !isEmpty(userId)) { const user = await db.user.findOne({ where: { id: userId } }) if (user) { user.ordersCreated++ user.save() params['userId'] = userId const companyClient = await db.companyClients.findOne({ where: { companyId: companyId, userId: userId } }) if (companyClient) { discount = parseInt(companyClient.discount) if (discount > 0) { params['discount'] = discount } } else { // add company client db.companyClients.create({ userId: userId, companyId: companyId }) // company counters const company = await db.company.findOne({ where: { id: companyId } }) if (company) { company.countClients++ company.save() } } } await db.userCartItem.destroy({ where: { userId: userId, branchId: branchId }, truncate: false }) } if (isSet(reservAt) && !isEmpty(reservAt)) { params['reservAt'] = reservAt } if (isSet(tableId) && !isEmpty(tableId)) { params['tableId'] = tableId } if (phone != null && phone.length > 9) { params['phone'] = phone } // ИТОГО ------------ params['total'] = params['delivery_cost'] + params['tax'] + params['bag'] + params['tips'] + params['order_cost'] - ((params['order_cost'] / 100) * params['discount']) // создать заказ let order = await db.order.create(params, { include: inc }) await db.orderHistory.create({ orderId: order.id, userId: req.body.userId || null, event: ORDER_HISTORY_EVENT.CREATE, app: req.user?.app || APP.UNKNOWN }) if (isSet(addressId) && !isEmpty(addressId)) { const address = await db.address.findOne({ where: { id: addressId } }) if (address) { await db.orderAddress.create({ orderId: order.id, adres: address.adres, latitude: address.latitude, longtitude: address.longtitude, }) } } let orderPay = await db.orderPay.create({ orderId: order.id, userId: order.userId, payTypeId: order.payTypeId, summ: order.total, created: req.user?.app | 'system', paid: req.user?.app | 'system', pay_status: 'not_paid' }) transaction.commit() transaction = null // форматирование и рассылка заказа await SERVICES.OrderService.StatusOrder(order) const time = performance.now() - t1 return res.status(200).json({ status: 'success', id: order.id, order, time }) } catch (err) { transaction?.rollback() next(err) } } }