@sourceloop/ctrl-plane-tenant-management-service
Version:
Tenant Management microservice for SaaS control plane
68 lines • 2.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InvoiceHelperService = void 0;
const tslib_1 = require("tslib");
const pdfkit_1 = tslib_1.__importDefault(require("pdfkit"));
const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
const repository_1 = require("@loopback/repository");
const repositories_1 = require("../repositories");
const context_1 = require("@loopback/context");
const LARGE_SIZE = 16;
const MEDIUM_SIZE = 12;
let InvoiceHelperService = class InvoiceHelperService {
constructor(invoiceRepository) {
this.invoiceRepository = invoiceRepository;
}
async createInvoice(invoice) {
return this.invoiceRepository.create(invoice);
}
async downloadInvoice(id) {
const invoice = await this.invoiceRepository.findById(id);
if (!invoice) {
throw new Error('Invoice with given id does not exist');
}
const pdfFilePath = await this.generatePDF(invoice);
invoice.invoiceFile = pdfFilePath;
await this.invoiceRepository.updateById(invoice.id, invoice);
}
async generatePDF(invoice) {
const doc = new pdfkit_1.default();
const fileName = `invoice_${invoice.id}.pdf`;
const writeStream = node_fs_1.default.createWriteStream(fileName);
doc.pipe(writeStream);
// Write invoice details to PDF
doc
.fontSize(LARGE_SIZE)
.text('Invoice Details', { underline: true })
.moveDown();
doc.fontSize(MEDIUM_SIZE).text(`Invoice ID: ${invoice.id}`).moveDown();
doc
.fontSize(MEDIUM_SIZE)
.text(`Start Date: ${invoice.startDate}`)
.moveDown();
doc.fontSize(MEDIUM_SIZE).text(`End Date: ${invoice.endDate}`).moveDown();
doc
.fontSize(MEDIUM_SIZE)
.text(`Amount: ${invoice.amount} ${invoice.currencyCode}`)
.moveDown();
doc.fontSize(MEDIUM_SIZE).text(`Due Date: ${invoice.dueDate}`).moveDown();
doc.fontSize(MEDIUM_SIZE).text(`Status: ${invoice.status}`).moveDown();
// End PDF generation
doc.end();
return new Promise((resolve, reject) => {
writeStream.on('finish', () => {
resolve(fileName);
});
writeStream.on('error', err => {
reject(err);
});
});
}
};
exports.InvoiceHelperService = InvoiceHelperService;
exports.InvoiceHelperService = InvoiceHelperService = tslib_1.__decorate([
(0, context_1.injectable)({ scope: context_1.BindingScope.TRANSIENT }),
tslib_1.__param(0, (0, repository_1.repository)(repositories_1.InvoiceRepository)),
tslib_1.__metadata("design:paramtypes", [repositories_1.InvoiceRepository])
], InvoiceHelperService);
//# sourceMappingURL=invoice-helper.service.js.map