import ngModule from '../module'; import Descriptor from 'salix/components/descriptor'; class Controller extends Descriptor { get invoiceOut() { return this.entity; } set invoiceOut(value) { this.entity = value; } get hasInvoicing() { return this.aclService.hasAny(['invoicing']); } get filter() { if (this.invoiceOut) return JSON.stringify({refFk: this.invoiceOut.ref}); return null; } loadData() { const filter = { include: [ { relation: 'company', scope: { fields: ['id', 'code'] } }, { relation: 'client', scope: { fields: ['id', 'name', 'email'] } } ] }; return this.getData(`InvoiceOuts/${this.id}`, {filter}) .then(res => this.entity = res.data); } reload() { return this.loadData().then(() => { if (this.cardReload) this.cardReload(); }); } cardReload() { // Prevents error when not defined } deleteInvoiceOut() { return this.$http.post(`InvoiceOuts/${this.id}/delete`) .then(() => this.$state.go('invoiceOut.index')) .then(() => this.vnApp.showSuccess(this.$t('InvoiceOut deleted'))); } bookInvoiceOut() { return this.$http.post(`InvoiceOuts/${this.invoiceOut.ref}/book`) .then(() => this.$state.reload()) .then(() => this.vnApp.showSuccess(this.$t('InvoiceOut booked'))); } createPdfInvoice() { const invoiceId = this.invoiceOut.id; return this.$http.post(`InvoiceOuts/${invoiceId}/createPdf`) .then(() => this.reload()) .then(() => { const snackbarMessage = this.$t( `The invoice PDF document has been regenerated`); this.vnApp.showSuccess(snackbarMessage); }); } showCsvInvoice() { this.vnReport.showCsv('invoice', { recipientId: this.invoiceOut.client.id, invoiceId: this.id, }); } sendPdfInvoice($data) { return this.vnEmail.send('invoice', { recipientId: this.invoiceOut.client.id, recipient: $data.email, invoiceId: this.id }); } sendCsvInvoice($data) { return this.vnEmail.sendCsv('invoice', { recipientId: this.invoiceOut.client.id, recipient: $data.email, invoiceId: this.id }); } } ngModule.vnComponent('vnInvoiceOutDescriptor', { template: require('./index.html'), controller: Controller, bindings: { invoiceOut: '<', cardReload: '&' } });