@lynsoluciones/medusa-docs
Version:
Medusa plugins to generate docs
187 lines (186 loc) • 9.68 kB
JavaScript
;
/*
*
*
* 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;