@chevre/domain
Version:
Chevre Domain Library for Node.js
82 lines (81 loc) • 4 kB
JavaScript
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.call = call;
const factory = require("../../factory");
const acceptedOffer_1 = require("../../repo/acceptedOffer");
const accountingReport_1 = require("../../repo/accountingReport");
const action_1 = require("../../repo/action");
const order_1 = require("../../repo/order");
const createAccountingReportIfNotExist_1 = require("../order/createAccountingReportIfNotExist");
/**
* タスク実行関数
*/
function call(data) {
return (_a) => __awaiter(this, [_a], void 0, function* ({ connection }) {
yield createAccountingReport(data)({
acceptedOffer: new acceptedOffer_1.AcceptedOfferRepo(connection),
accountingReport: new accountingReport_1.AccountingReportRepo(connection),
action: new action_1.ActionRepo(connection),
order: new order_1.OrderRepo(connection)
});
});
}
function createAccountingReport(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
const order = yield repos.order.projectFieldsByOrderNumber({
orderNumber: params.object.mainEntity.orderNumber,
project: { id: params.project.id },
inclusion: [
'orderNumber', 'project', 'customer', 'confirmationNumber',
'paymentMethods', 'orderedItem', 'price', 'priceCurrency', 'seller', 'broker', 'typeOf', 'orderDate'
] // explicit projection(2024-07-25~)
});
const simpleOrder = {
typeOf: order.typeOf,
// seller: {
// id: order.seller.id,
// typeOf: order.seller.typeOf,
// name: order.seller.name
// }, // 廃止(2024-03-06~)
// customer: { typeOf: order.customer.typeOf, id: order.customer.id }, // 廃止(2024-03-06~)
orderNumber: order.orderNumber,
// price: order.price,
// priceCurrency: order.priceCurrency,
orderDate: order.orderDate
};
const actionAttributes = {
project: { id: params.project.id, typeOf: factory.organizationType.Project },
typeOf: factory.actionType.CreateAction,
agent: { id: params.project.id, typeOf: factory.organizationType.Project },
object: Object.assign(Object.assign({}, params), { typeOf: 'Report' }),
purpose: simpleOrder
};
const action = yield repos.action.start(actionAttributes);
try {
const acceptedOffers = yield repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
orderNumber: { $eq: params.object.mainEntity.orderNumber },
project: { id: { $eq: params.project.id } }
});
yield (0, createAccountingReportIfNotExist_1.createAccountingReportIfNotExist)(Object.assign(Object.assign({}, order), { acceptedOffers }))(repos);
}
catch (error) {
try {
yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error });
}
catch (__) {
// 失敗したら仕方ない
}
throw error;
}
yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: {} });
});
}
;