UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

125 lines (124 loc) 5.95 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.onOrderPaymentDue = onOrderPaymentDue; /** * 注文決済時処理 */ const createDebug = require("debug"); const factory = require("../../../factory"); // import { createMaskedCustomer } from '../../../factory/order'; const debug = createDebug('chevre-domain:service:order'); function onOrderPaymentDue(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { debug('onOrderStatusChanged called.', params.order.orderNumber, params.order.orderStatus, params.order.orderDate); let tasks = []; // const maskedCustomer = createMaskedCustomer(params.order, { noProfile: true }); const simpleOrder = { typeOf: params.order.typeOf, // seller: { // id: params.order.seller.id, // typeOf: params.order.seller.typeOf, // name: params.order.seller.name // }, // 廃止(2024-03-06~) // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~) orderNumber: params.order.orderNumber, // price: params.order.price, // priceCurrency: params.order.priceCurrency, orderDate: params.order.orderDate }; switch (params.order.orderStatus) { // OrderPaymentDueを追加(2023-08-23~) case factory.orderStatus.OrderPaymentDue: tasks = [ ...yield createConfirmPayTransactionTasks(params.order, simpleOrder)(repos), ...createCreateAccountingReportTask(params.order) // 経理レポート作成タスク(2024-02-02~) ]; break; default: throw new factory.errors.NotImplemented(`${params.order.orderStatus} not implemented`); } yield repos.task.saveMany(tasks, { emitImmediately: true }); }); } function createConfirmPayTransactionTasks(order, simpleOrder) { return (repos) => __awaiter(this, void 0, void 0, function* () { const taskRunsAt = new Date(); const tasks = []; yield Promise.all(order.paymentMethods.map((invoice) => __awaiter(this, void 0, void 0, function* () { // PaymentAutomaticallyAppliedであれば、自動決済処理を実行(2023-08-24~) if (invoice.paymentStatus !== factory.paymentStatusType.PaymentAutomaticallyApplied) { return; } // 冗長なタスク作成を回避 const existingTasks = yield repos.task.projectFields({ limit: 1, page: 1, project: { id: { $eq: order.project.id } }, name: factory.taskName.ConfirmPayTransaction, data: { object: { transactionNumber: { $eq: invoice.paymentMethodId } }, purpose: { orderNumber: { $eq: order.orderNumber } } } }, ['id'] // { // data: 0, executionResults: 0, name: 0, numberOfTried: 0, // remainingNumberOfTries: 0, runsAt: 0, status: 0 // } ); if (existingTasks.length === 0) { const data = { project: order.project, typeOf: factory.actionType.ConfirmAction, object: [{ typeOf: factory.assetTransactionType.Pay, transactionNumber: invoice.paymentMethodId }], agent: order.project, purpose: Object.assign(Object.assign({}, simpleOrder), { confirmationNumber: order.confirmationNumber }), // 廃止(2024-03-12~) // instrument: { // typeOf: factory.assetTransactionType.Pay, // 産取引化(2024-03-11~) // identifier: factory.action.authorize.paymentMethod.any.ServiceIdentifier.Chevre, // transactionNumber: invoice.paymentMethodId // }, processOrder: order.orderStatus === factory.orderStatus.OrderPaymentDue, // OrderPaymentDueの場合、processOrderを実行する useOnOrderStatusChanged: true }; tasks.push({ project: order.project, name: factory.taskName.ConfirmPayTransaction, status: factory.taskStatus.Ready, runsAt: taskRunsAt, remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [], data }); } }))); return tasks; }); } function createCreateAccountingReportTask(order) { const taskRunsAt = new Date(); const task = { project: order.project, name: factory.taskName.CreateAccountingReport, status: factory.taskStatus.Ready, runsAt: taskRunsAt, remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [], data: { object: { mainEntity: { orderNumber: order.orderNumber } }, project: { id: order.project.id } } }; return [task]; }