/var/www/qr4y.com/server/delivery/api/controllers/order
Edit: /var/www/qr4y.com/server/delivery/api/controllers/order/pay.js (5108B)
const { NotFound, BadRequest, ApiError } = require('../../responseModels/errors')
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 {
// checkPermission(req, 'order_delete')
const { orderId, userId, summ } = req.body
if (!summ) throw new BadRequest({ lang: req.user?.languageCode })
if (!orderId) throw new BadRequest({ lang: req.user?.languageCode })
if (!userId) throw new BadRequest({ lang: req.user?.languageCode })
let order = await SERVICES.OrderService.GetOrder(orderId)
// const order = await db.order.findOne({ where: { id: orderId } })
if (!order) {
throw new NotFound({ lang: req.user?.languageCode })
}
const user = await db.user.findOne({ where: { id: userId } })
if (!user) {
throw new NotFound({ lang: req.user?.languageCode })
}
let orderPay = await db.orderPay.findOne({
where: { orderId: order.id }
})
if (!orderPay) {
orderPay = await db.orderPay.create({
orderId: order.id,
userId: user.id,
payTypeId: order.payTypeId,
summ: summ,
status: 'paid'
})
} else if (orderPay.status === 'not_paid') {
if (!parseFloat(summ) !== parseFloat(orderPay.summ)) {
// throw new BadRequest({ code: 1031, lang: req.user?.languageCode })
}
// безнал
// if (!order.payType.isCash) {
// if (!order.userId) throw new NotFound({ code: 1028, lang: req.user?.languageCode })
// // var accountClient = await db.account.findOne({ where: { userId: order.userId, type: ACCOUNT_TYPE.CLIENT } })
// // if (!accountClient)
// // accountClient = await db.account.create({
// // branchId: order?.branchId,
// // companyId: order?.companyId,
// // userId: user?.id,
// // type: 'cash',
// // balance: '0',
// // description: 'Bill autocreate'
// // })
// // // throw new NotFound({ code: 1030, lang: req.user?.languageCode })
// // // проверить остаток на счете
// // if (parseFloat(accountClient.balance) < parseFloat(summ)) {
// // throw new BadRequest({ code: 1031, lang: req.user?.languageCode })
// // }
// // снятие со счета клиента
// // const accountClientBalance = parseFloat(accountClient.balance)
// // accountClient.balance = accountClientBalance - parseFloat(summ)
// // await db.accountHistory.create({
// // accountId: accountClient.id,
// // summ: parseFloat(summ) * -1,
// // balanceBefore: accountClientBalance,
// // balanceAfter: accountClient.balance,
// // event: ACCOUNT_HISTORY_EVENT.TRANSFER
// // })
// // await accountClient.save()
// // зачисление на счет филиала
// const accountBranch = await db.account.findOne({ where: { branchId: order.branchId, type: ACCOUNT_TYPE.BRANCH } })
// if (!accountBranch) throw new NotFound({ code: 1051, lang: req.user?.languageCode })
// const accountBranchBalance = parseFloat(accountBranch.balance)
// accountBranch.balance = accountBranchBalance + parseFloat(summ)
// await db.accountHistory.create({
// accountId: accountBranch.id,
// summ: parseFloat(summ),
// balanceBefore: accountBranchBalance,
// balanceAfter: accountBranch.balance,
// event: ACCOUNT_HISTORY_EVENT.TRANSFER
// })
// await accountBranch.save()
// } else { // наличные
// зачисление в кассу филиала
const accountBranch = await db.account.findOne({ where: { branchId: order.branchId, type: ACCOUNT_TYPE.CASH } })
if (!accountBranch) throw new NotFound({ code: 1052, lang: req.user?.languageCode })
const accountBranchBalance = parseFloat(accountBranch.balance)
accountBranch.balance = accountBranchBalance + parseFloat(summ)
await db.accountHistory.create({
accountId: accountBranch.id,
summ: parseFloat(summ),
balanceBefore: accountBranchBalance,
balanceAfter: accountBranch.balance,
event: ACCOUNT_HISTORY_EVENT.TRANSFER
})
await accountBranch.save()
// }
orderPay.status = 'paid'
orderPay.summ = summ
await orderPay.save()
order.pay_status_order = 'paid'
order.pay_status_delivery = 'paid'
order.payAt = Date.now()
await order.save()
await SERVICES.OrderService.PayOrder(order, orderPay)
} else if (orderPay.status === 'paid') {
if (order.pay_status_order !== 'paid') {
order.pay_status_order = 'paid'
order.pay_status_delivery = 'paid'
order.payAt = Date.now()
await order.save()
}
await SERVICES.OrderService.PayOrder(order, orderPay)
}
transaction.commit()
transaction = null
if (order.deliveryServerId) {
await SERVICES.DeliveryService.UpdateOrder(order.id)
}
return res.status(200).json({ status: 'success', id: order.id })
} catch (err) {
transaction?.rollback()
next(err)
}
}
}