UNPKG

medusa-invoice

Version:
200 lines 17.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const medusa_1 = require("@medusajs/medusa"); const medusa_2 = require("@medusajs/medusa"); const utils_1 = require("@medusajs/utils"); const packing_slip_1 = require("../models/packing-slip"); const document_settings_1 = require("../models/document-settings"); const template_kind_1 = require("./types/template-kind"); const packing_slip_generator_1 = require("./generators/packing-slip-generator"); const constants_1 = require("./types/constants"); class PackingSlipService extends medusa_1.TransactionBaseService { constructor(container) { super(container); this.orderService = container.orderService; this.documentPackingSlipSettingsService = container.documentPackingSlipSettingsService; } calculateFormatNumber(documentPackingSlipSettings) { if (documentPackingSlipSettings && documentPackingSlipSettings.number_format) { return documentPackingSlipSettings.number_format; } return undefined; } calculateTemplateKind(documentPackingSlipSettings) { if (documentPackingSlipSettings && documentPackingSlipSettings.template) { return documentPackingSlipSettings.template; } return template_kind_1.PackingSlipTemplateKind.BASIC; } async getNextNumber() { const lastPackingSlip = await this.activeManager_ .getRepository(packing_slip_1.PackingSlip) .createQueryBuilder("packs") .orderBy("created_at", "DESC") .getOne(); if (lastPackingSlip !== null && lastPackingSlip !== undefined) { return (parseInt(lastPackingSlip.number) + 1).toString(); } return "1"; } async getLastDocumentSettings() { const documentSettingsRepository = this.activeManager_.getRepository(document_settings_1.DocumentSettings); const lastDocumentSettings = await documentSettingsRepository .createQueryBuilder("documentSettings") .leftJoinAndSelect("documentSettings.store_address", "store_address") .orderBy("documentSettings.created_at", "DESC") .getOne(); if (lastDocumentSettings === null) { return undefined; } return lastDocumentSettings; } async getPackingSlip(packingSlipId, includeBuffer = false) { if (includeBuffer) { const packingSlip = await this.activeManager_ .getRepository(packing_slip_1.PackingSlip) .createQueryBuilder("packslip") .leftJoinAndSelect("packslip.document_settings", "document_settings") .leftJoinAndSelect("document_settings.store_address", "store_address") .leftJoinAndSelect("packslip.document_packing_slip_settings", "document_packing_slip_settings") .leftJoinAndSelect("packslip.order", "order") .where("packslip.id = :packingSlipId", { packingSlipId: packingSlipId }) .getOne(); if (packingSlip && packingSlip !== null && packingSlip.document_settings) { const order = await this.orderService.retrieveWithTotals(packingSlip.order.id, { relations: [ "billing_address", "shipping_address", "shipping_methods", "shipping_methods.shipping_option", ], }); const calculatedTemplateKind = this.calculateTemplateKind(packingSlip.document_packing_slip_settings); const buffer = await (0, packing_slip_generator_1.generate)(calculatedTemplateKind, packingSlip.document_settings, packingSlip, order); return { packingSlip: packingSlip, buffer: buffer, }; } } const packingSlip = await this.activeManager_ .getRepository(packing_slip_1.PackingSlip) .createQueryBuilder("packslip") .where("packslip.id = :packingSlipId", { packingSlipId: packingSlipId }) .getOne(); if (packingSlip && packingSlip !== null) { return { packingSlip: packingSlip, }; } return { packingSlip: undefined, buffer: undefined, }; } async create(orderId) { const order = await this.orderService.retrieveWithTotals(orderId, { relations: [ "billing_address", "shipping_address", "shipping_methods", "shipping_methods.shipping_option", ], }); if (order) { const settings = await this.getLastDocumentSettings(); if (settings) { const packingSlipSettings = await this.documentPackingSlipSettingsService.getLastDocumentPackingSlipSettings(); if (packingSlipSettings) { const calculatedTemplateKind = this.calculateTemplateKind(packingSlipSettings); const [validationPassed, info] = (0, packing_slip_generator_1.validateInputForProvidedKind)(calculatedTemplateKind, settings); if (validationPassed) { const nextNumber = await this.getNextNumber(); const newEntry = this.activeManager_.create(packing_slip_1.PackingSlip); newEntry.number = nextNumber; const packingSlipFormatNumber = this.calculateFormatNumber(packingSlipSettings); newEntry.display_number = packingSlipFormatNumber ? packingSlipFormatNumber.replace(constants_1.PACKING_SLIP_NUMBER_PLACEHOLDER, newEntry.number) : newEntry.number; newEntry.order = order; newEntry.document_settings = settings; newEntry.document_packing_slip_settings = packingSlipSettings; const resultInvoice = await this.activeManager_ .getRepository(packing_slip_1.PackingSlip) .save(newEntry); const metaDataUpdate = (0, medusa_1.setMetadata)(order, { packing_slip_id: resultInvoice.id, }); order.metadata = metaDataUpdate; await this.activeManager_.getRepository(medusa_2.Order).save(order); const buffer = await (0, packing_slip_generator_1.generate)(calculatedTemplateKind, settings, resultInvoice, order); return { packingSlip: newEntry, buffer: buffer, }; } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, info); } } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Retrieve packing slip settings failed. Please check if they are set - e.g. if you set template or other settings."); } } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Retrieve document settings failed. Please check if they are set."); } } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Cant retrieve order"); } } async generatePreview(templateKind) { const lastOrder = await this.activeManager_.getRepository(medusa_2.Order).find({ skip: 0, take: 1, order: { created_at: "DESC" }, }); if (lastOrder && lastOrder.length > 0) { const lastOrderWithTotals = await this.orderService.retrieveWithTotals(lastOrder[0].id, { relations: [ "billing_address", "shipping_address", "shipping_methods", "shipping_methods.shipping_option", ], }); const settings = await this.getLastDocumentSettings(); if (settings) { const previewPackingSlip = this.activeManager_.create(packing_slip_1.PackingSlip); const nextNumber = await this.getNextNumber(); previewPackingSlip.number = nextNumber; previewPackingSlip.display_number = nextNumber; previewPackingSlip.created_at = new Date(Date.now()); const [validationPassed, info] = (0, packing_slip_generator_1.validateInputForProvidedKind)(templateKind, settings); if (validationPassed) { const buffer = await (0, packing_slip_generator_1.generate)(templateKind, settings, previewPackingSlip, lastOrderWithTotals); return { packingSlip: previewPackingSlip, buffer: buffer, }; } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, info); } } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Document settings are not defined"); } } else { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "You need to have at least one order to see preview"); } } } exports.default = PackingSlipService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1zbGlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3BhY2tpbmctc2xpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUFnRjtBQUNoRiw2Q0FBdUQ7QUFDdkQsMkNBQThDO0FBQzlDLHlEQUFxRDtBQUNyRCxtRUFBK0Q7QUFHL0QseURBQWdFO0FBQ2hFLGdGQUc2QztBQUU3QyxpREFBb0U7QUFFcEUsTUFBcUIsa0JBQW1CLFNBQVEsK0JBQXNCO0lBSXBFLFlBQVksU0FBUztRQUNuQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQ0FBa0M7WUFDckMsU0FBUyxDQUFDLGtDQUFrQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsMkJBQXdEO1FBRXhELElBQ0UsMkJBQTJCO1lBQzNCLDJCQUEyQixDQUFDLGFBQWEsRUFDekM7WUFDQSxPQUFPLDJCQUEyQixDQUFDLGFBQWEsQ0FBQztTQUNsRDtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsMkJBQXdEO1FBRXhELElBQUksMkJBQTJCLElBQUksMkJBQTJCLENBQUMsUUFBUSxFQUFFO1lBQ3ZFLE9BQU8sMkJBQTJCLENBQUMsUUFBbUMsQ0FBQztTQUN4RTtRQUNELE9BQU8sdUNBQXVCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixNQUFNLGVBQWUsR0FBdUIsTUFBTSxJQUFJLENBQUMsY0FBYzthQUNsRSxhQUFhLENBQUMsMEJBQVcsQ0FBQzthQUMxQixrQkFBa0IsQ0FBQyxPQUFPLENBQUM7YUFDM0IsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUM7YUFDN0IsTUFBTSxFQUFFLENBQUM7UUFDWixJQUFJLGVBQWUs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