function* paidTx() { let transaction = yield Transaction.findOne({ order: order._id, status: Transaction.STATUS_PENDING }); yield* order.onPaid(transaction); order.status = Order.STATUS_SUCCESS; }
function* paidDirect() { let transaction = yield Transaction.findOne({ order: order._id, status: Transaction.STATUS_PENDING }); if (transaction) { yield transaction.persist({ status: Transaction.STATUS_FAIL }); } yield Transaction.create({ order: order._id, amount: order.amount, status: Transaction.STATUS_SUCCESS, currency: order.currency, paymentMethod: 'direct' }); yield* order.onPaid(); order.status = Order.STATUS_SUCCESS; }
exports.post = function*() { yield* loadOrderAdmin.call(this); this.order.amount = this.request.body.amount; this.order.currency = this.request.body.currency; let order = this.order; function* paidTx() { let transaction = yield Transaction.findOne({ order: order._id, status: Transaction.STATUS_PENDING }); yield* order.onPaid(transaction); order.status = Order.STATUS_SUCCESS; } function* paidDirect() { let transaction = yield Transaction.findOne({ order: order._id, status: Transaction.STATUS_PENDING }); if (transaction) { yield transaction.persist({ status: Transaction.STATUS_FAIL }); } yield Transaction.create({ order: order._id, amount: order.amount, status: Transaction.STATUS_SUCCESS, currency: order.currency, paymentMethod: 'direct' }); yield* order.onPaid(); order.status = Order.STATUS_SUCCESS; } if (this.order.status == Order.STATUS_CANCEL) { if (this.request.body.action == 'pending') { this.order.status = Order.STATUS_PENDING; } else if (this.request.body.action == 'paid-tx') { yield* paidTx(); } else if (this.request.body.action == 'paid-direct') { yield* paidDirect(); } } else if (this.order.status == Order.STATUS_PENDING) { if (this.request.body.action == 'paid-tx') { yield* paidTx(); } else if (this.request.body.action == 'paid-free') { this.order.amount = 0; yield* order.onPaid(); order.status = Order.STATUS_SUCCESS; } else if (this.request.body.action == 'paid-direct') { yield* paidDirect(); } } else if (this.order.status == Order.STATUS_SUCCESS) { if (this.request.body.action == 'cancel') { this.order.status = Order.STATUS_CANCEL; var userIdsByEmails = yield User.find({ email: { $in: this.order.data.emails } }, {id: 1}); userIdsByEmails = userIdsByEmails.map(user => user._id); var participants = yield CourseParticipant.find({ group: this.order.data.group, user: { $in: userIdsByEmails }, isActive: true }); this.log.debug("cancel participants", participants); for (var i = 0; i < participants.length; i++) { var participant = participants[i]; yield participant.persist({ isActive: false }); } let transaction = yield Transaction.findOne({ order: order._id, status: Transaction.STATUS_SUCCESS }); if (transaction) { yield transaction.log('возврат'); yield transaction.persist({ status: Transaction.STATUS_REFUND }); } } } let pendingTransaction = yield Transaction.findOne({ order: order._id, status: Transaction.STATUS_PENDING }); if (pendingTransaction) { pendingTransaction.amount = order.convertAmount(pendingTransaction.currency); yield pendingTransaction.persist(); } yield this.order.persist(); this.redirect(this.originalUrl); };