mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 05:40:31 +00:00
feat: link pdf template to sales transactions
This commit is contained in:
@@ -236,6 +236,9 @@ export default class PaymentReceivesController extends BaseController {
|
||||
|
||||
check('attachments').isArray().optional(),
|
||||
check('attachments.*.key').exists().isString(),
|
||||
|
||||
// Pdf template id.
|
||||
check('pdf_template_id').optional({ nullable: true }).isNumeric().toInt(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -167,6 +167,9 @@ export default class PaymentReceivesController extends BaseController {
|
||||
|
||||
check('attachments').isArray().optional(),
|
||||
check('attachments.*.key').exists().isString(),
|
||||
|
||||
// Pdf template id.
|
||||
check('pdf_template_id').optional({ nullable: true }).isNumeric().toInt(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -168,9 +168,7 @@ export default class SalesEstimatesController extends BaseController {
|
||||
check('entries.*.item_id').exists().isNumeric().toInt(),
|
||||
check('entries.*.quantity').exists().isNumeric().toInt(),
|
||||
check('entries.*.rate').exists().isNumeric().toFloat(),
|
||||
check('entries.*.description')
|
||||
.optional({ nullable: true })
|
||||
.trim(),
|
||||
check('entries.*.description').optional({ nullable: true }).trim(),
|
||||
check('entries.*.discount')
|
||||
.optional({ nullable: true })
|
||||
.isNumeric()
|
||||
@@ -186,6 +184,9 @@ export default class SalesEstimatesController extends BaseController {
|
||||
|
||||
check('attachments').isArray().optional(),
|
||||
check('attachments.*.key').exists().isString(),
|
||||
|
||||
// Pdf template id.
|
||||
check('pdf_template_id').optional({ nullable: true }).isNumeric().toInt(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -224,9 +224,7 @@ export default class SaleInvoicesController extends BaseController {
|
||||
.optional({ nullable: true })
|
||||
.isNumeric()
|
||||
.toFloat(),
|
||||
check('entries.*.description')
|
||||
.optional({ nullable: true })
|
||||
.trim(),
|
||||
check('entries.*.description').optional({ nullable: true }).trim(),
|
||||
check('entries.*.tax_code')
|
||||
.optional({ nullable: true })
|
||||
.trim()
|
||||
@@ -257,6 +255,9 @@ export default class SaleInvoicesController extends BaseController {
|
||||
.optional({ nullable: true })
|
||||
.isNumeric()
|
||||
.toFloat(),
|
||||
|
||||
// Pdf template id.
|
||||
check('pdf_template_id').optional({ nullable: true }).isNumeric().toInt(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -148,17 +148,20 @@ export default class SalesReceiptsController extends BaseController {
|
||||
.optional({ nullable: true })
|
||||
.isNumeric()
|
||||
.toInt(),
|
||||
check('entries.*.description')
|
||||
.optional({ nullable: true })
|
||||
.trim(),
|
||||
check('entries.*.description').optional({ nullable: true }).trim(),
|
||||
check('entries.*.warehouse_id')
|
||||
.optional({ nullable: true })
|
||||
.isNumeric()
|
||||
.toInt(),
|
||||
|
||||
check('receipt_message').optional().trim(),
|
||||
|
||||
check('statement').optional().trim(),
|
||||
check('attachments').isArray().optional(),
|
||||
check('attachments.*.key').exists().isString(),
|
||||
|
||||
// Pdf template id.
|
||||
check('pdf_template_id').optional({ nullable: true }).isNumeric().toInt(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -3,13 +3,49 @@
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('pdf_templates', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.text('resource');
|
||||
table.text('template_name');
|
||||
table.json('attributes');
|
||||
table.timestamps();
|
||||
});
|
||||
return knex.schema
|
||||
.createTable('pdf_templates', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.text('resource');
|
||||
table.text('template_name');
|
||||
table.json('attributes');
|
||||
table.timestamps();
|
||||
})
|
||||
.table('sales_invoices', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('payment_receives', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -17,5 +53,21 @@ exports.up = function (knex) {
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('pdf_templates');
|
||||
return knex.schema
|
||||
.table('payment_receives', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('sales_invoices', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.dropTableIfExists('pdf_templates');
|
||||
};
|
||||
|
||||
@@ -31,13 +31,18 @@ export class CreatePdfTemplate {
|
||||
const attributes = invoiceTemplateDTO;
|
||||
|
||||
return this.uow.withTransaction(tenantId, async (trx) => {
|
||||
// Triggers `onPdfTemplateCreating` event.
|
||||
await this.eventPublisher.emitAsync(events.pdfTemplate.onCreating, {
|
||||
tenantId,
|
||||
});
|
||||
|
||||
await PdfTemplate.query(trx).insert({
|
||||
templateName,
|
||||
resource,
|
||||
attributes,
|
||||
});
|
||||
|
||||
await this.eventPublisher.emitAsync(events.pdfTemplate.onInvoiceCreated, {
|
||||
// Triggers `onPdfTemplateCreated` event.
|
||||
await this.eventPublisher.emitAsync(events.pdfTemplate.onCreated, {
|
||||
tenantId,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -24,8 +24,14 @@ export class DeletePdfTemplate {
|
||||
const { PdfTemplate } = this.tenancy.models(tenantId);
|
||||
|
||||
return this.uow.withTransaction(tenantId, async (trx) => {
|
||||
// Triggers `onPdfTemplateDeleting` event.
|
||||
await this.eventPublisher.emitAsync(events.pdfTemplate.onDeleting, {
|
||||
tenantId,
|
||||
templateId,
|
||||
});
|
||||
await PdfTemplate.query(trx).deleteById(templateId);
|
||||
|
||||
// Triggers `onPdfTemplateDeleted` event.
|
||||
await this.eventPublisher.emitAsync(events.pdfTemplate.onDeleted, {
|
||||
tenantId,
|
||||
templateId,
|
||||
|
||||
@@ -692,6 +692,7 @@ export default {
|
||||
onEditing: 'onPdfTemplateEditing',
|
||||
onEdited: 'onPdfTemplatedEdited',
|
||||
|
||||
onDeleting: 'onPdfTemplateDeleting',
|
||||
onDeleted: 'onPdfTemplateDeleted',
|
||||
|
||||
onInvoiceCreated: 'onInvoicePdfTemplateCreated',
|
||||
|
||||
Reference in New Issue
Block a user