@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 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;