UNPKG

@lynsoluciones/medusa-docs

Version:
187 lines (186 loc) 9.68 kB
"use strict"; /* * * * MIT License * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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 shipping_tag_1 = require("../models/shipping-tag"); const document_settings_1 = require("../models/document-settings"); const template_kind_1 = require("./types/template-kind"); const shipping_tag_generator_1 = require("./generators/shipping-tag-generator"); const constants_1 = require("./types/constants"); class ShippingTagService extends medusa_1.TransactionBaseService { constructor(container) { super(container); this.orderService = container.orderService; this.documentShippingTagSettingsService = container.documentShippingTagSettingsService; } calculateFormatNumber(documentShippingTagSettings) { if (documentShippingTagSettings && documentShippingTagSettings.number_format) { return documentShippingTagSettings.number_format; } return undefined; } calculateTemplateKind(documentShippingTagSettings) { if (documentShippingTagSettings && documentShippingTagSettings.template) { return documentShippingTagSettings.template; } return template_kind_1.ShippingTagTemplateKind.BASIC; } async getNextNumber() { const lastShippingTag = await this.activeManager_ .getRepository(shipping_tag_1.ShippingTag) .createQueryBuilder('packs') .orderBy('created_at', 'DESC') .getOne(); if (lastShippingTag !== null && lastShippingTag !== undefined) { return (parseInt(lastShippingTag.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 getShippingTag(shippingTagId, includeBuffer = false) { if (includeBuffer) { const shippingTag = await this.activeManager_ .getRepository(shipping_tag_1.ShippingTag) .createQueryBuilder('shipptag') .leftJoinAndSelect("shipptag.document_settings", "document_settings") .leftJoinAndSelect("document_settings.store_address", "store_address") .leftJoinAndSelect("shipptag.document_shipping_tag_settings", "document_shipping_tag_settings") .leftJoinAndSelect("shipptag.order", "order") .where("shipptag.id = :shippingTagId", { shippingTagId: shippingTagId }) .getOne(); if (shippingTag && shippingTag !== null && shippingTag.document_settings) { const order = await this.orderService.retrieveWithTotals(shippingTag.order.id, { relations: ['billing_address', 'shipping_address', 'shipping_methods', 'shipping_methods.shipping_option'] }); const calculatedTemplateKind = this.calculateTemplateKind(shippingTag.document_shipping_tag_settings); const buffer = await (0, shipping_tag_generator_1.generate)(calculatedTemplateKind, shippingTag.document_settings, shippingTag, order); return { shippingTag: shippingTag, buffer: buffer }; } } const shippingTag = await this.activeManager_ .getRepository(shipping_tag_1.ShippingTag) .createQueryBuilder('shipptag') .where("shipptag.id = :shippingTagId", { shippingTagId: shippingTagId }) .getOne(); if (shippingTag && shippingTag !== null) { return { shippingTag: shippingTag }; } return { shippingTag: 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 shippingTagSettings = await this.documentShippingTagSettingsService.getLastDocumentShippingTagSettings(); if (shippingTagSettings) { const calculatedTemplateKind = this.calculateTemplateKind(shippingTagSettings); const [validationPassed, info] = (0, shipping_tag_generator_1.validateInputForProvidedKind)(calculatedTemplateKind, settings); if (validationPassed) { const nextNumber = await this.getNextNumber(); const newEntry = this.activeManager_.create(shipping_tag_1.ShippingTag); newEntry.number = nextNumber; const shippingTagFormatNumber = this.calculateFormatNumber(shippingTagSettings); newEntry.display_number = shippingTagFormatNumber ? shippingTagFormatNumber.replace(constants_1.SHIPPING_TAG_NUMBER_PLACEHOLDER, newEntry.number) : newEntry.number; newEntry.order = order; newEntry.document_settings = settings; newEntry.document_shipping_tag_settings = shippingTagSettings; const resultInvoice = await this.activeManager_.getRepository(shipping_tag_1.ShippingTag).save(newEntry); const metaDataUpdate = (0, medusa_1.setMetadata)(order, { shipping_tag_id: resultInvoice.id }); order.metadata = metaDataUpdate; await this.activeManager_.getRepository(medusa_2.Order).save(order); const buffer = await (0, shipping_tag_generator_1.generate)(calculatedTemplateKind, settings, resultInvoice, order); return { shippingTag: 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 previewShippingTag = this.activeManager_.create(shipping_tag_1.ShippingTag); const nextNumber = await this.getNextNumber(); previewShippingTag.number = nextNumber; previewShippingTag.display_number = nextNumber; previewShippingTag.created_at = new Date(Date.now()); const [validationPassed, info] = (0, shipping_tag_generator_1.validateInputForProvidedKind)(templateKind, settings); if (validationPassed) { const buffer = await (0, shipping_tag_generator_1.generate)(templateKind, settings, previewShippingTag, lastOrderWithTotals); return { shippingTag: previewShippingTag, 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 = ShippingTagService;