From 2a8a928ac5cc8b74d5a775a3097858704f36d8d7 Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 16 Dec 2022 10:36:18 +0100 Subject: [PATCH] feat: create invoiceIn --- db/changes/225001/00-invoiceInConfig.sql | 12 ++++ modules/invoiceIn/back/model-config.json | 5 +- .../back/models/invoice-in-config.json | 35 ++++++++++ modules/invoiceIn/front/descriptor/index.html | 11 +++- modules/invoiceIn/front/descriptor/index.js | 4 ++ .../invoiceOut/specs/downloadZip.spec.js | 1 + modules/ticket/front/descriptor-menu/index.js | 2 +- .../reports/entry-order/entry-order.html | 2 +- .../reports/entry-order/sql/entry.sql | 4 +- .../extra-community/extra-community.html | 2 +- .../reports/extra-community/sql/entries.sql | 4 +- .../reports/invoiceIn/invoiceIn.html | 65 ++++++++----------- .../templates/reports/invoiceIn/invoiceIn.js | 13 ++++ .../templates/reports/invoiceIn/locale/en.yml | 11 +++- .../templates/reports/invoiceIn/locale/es.yml | 11 +++- .../reports/invoiceIn/sql/defaultTax.sql | 5 ++ .../templates/reports/invoiceIn/sql/entry.sql | 2 +- .../reports/invoiceIn/sql/invoice.sql | 2 +- .../templates/reports/invoiceIn/sql/taxes.sql | 3 +- .../supplier-campaign-metrics/sql/entries.sql | 2 +- .../supplier-campaign-metrics.html | 2 +- 21 files changed, 140 insertions(+), 58 deletions(-) create mode 100644 db/changes/225001/00-invoiceInConfig.sql create mode 100644 modules/invoiceIn/back/models/invoice-in-config.json create mode 100644 print/templates/reports/invoiceIn/sql/defaultTax.sql diff --git a/db/changes/225001/00-invoiceInConfig.sql b/db/changes/225001/00-invoiceInConfig.sql new file mode 100644 index 000000000..a27b59440 --- /dev/null +++ b/db/changes/225001/00-invoiceInConfig.sql @@ -0,0 +1,12 @@ +CREATE TABLE `vn`.`invoiceInConfig` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `retentionRate` int(3) NOT NULL, + `retentionName` varchar(25) NOT NULL, + `sageWithholdingFk` smallint(6) NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `invoiceInConfig_sageWithholdingFk` FOREIGN KEY (`sageWithholdingFk`) REFERENCES `sage`.`TiposRetencion`(`CodigoRetencion`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; + +INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageWithholdingFk`) + VALUES + (1, -2, 'Retención 2%', 2); diff --git a/modules/invoiceIn/back/model-config.json b/modules/invoiceIn/back/model-config.json index 6765ae81c..bd37b3bf1 100644 --- a/modules/invoiceIn/back/model-config.json +++ b/modules/invoiceIn/back/model-config.json @@ -2,7 +2,7 @@ "InvoiceIn": { "dataSource": "vn" }, - "InvoiceInTax": { + "InvoiceInConfig": { "dataSource": "vn" }, "InvoiceInDueDay": { @@ -13,5 +13,8 @@ }, "InvoiceInLog": { "dataSource": "vn" + }, + "InvoiceInTax": { + "dataSource": "vn" } } diff --git a/modules/invoiceIn/back/models/invoice-in-config.json b/modules/invoiceIn/back/models/invoice-in-config.json new file mode 100644 index 000000000..5cf0ed64c --- /dev/null +++ b/modules/invoiceIn/back/models/invoice-in-config.json @@ -0,0 +1,35 @@ +{ + "name": "InvoiceInConfig", + "base": "VnModel", + "options": { + "mysql": { + "table": "invoiceInConfig" + } + }, + "properties": { + "id": { + "id": true, + "type": "number", + "description": "Identifier" + }, + "retentionRate": { + "type": "number" + }, + "retentionName": { + "type": "string" + } + }, + "relations": { + "sageWithholding": { + "type": "belongsTo", + "model": "SageWithholding", + "foreignKey": "sageWithholdingFk" + } + }, + "acls": [{ + "accessType": "READ", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "ALLOW" + }] +} diff --git a/modules/invoiceIn/front/descriptor/index.html b/modules/invoiceIn/front/descriptor/index.html index a2b48b5cd..40f7dec18 100644 --- a/modules/invoiceIn/front/descriptor/index.html +++ b/modules/invoiceIn/front/descriptor/index.html @@ -1,3 +1,10 @@ + + Show agricultural invoice as PDF Send agricultural invoice as PDF diff --git a/modules/invoiceIn/front/descriptor/index.js b/modules/invoiceIn/front/descriptor/index.js index 5cd00d743..4dc89a459 100644 --- a/modules/invoiceIn/front/descriptor/index.js +++ b/modules/invoiceIn/front/descriptor/index.js @@ -110,6 +110,10 @@ class Controller extends Descriptor { recipientId: this.entity.supplier.id }); } + + isAgricultural() { + return this.invoiceIn.supplier.sageWithholdingFk == this.config[0].sageWithholdingFk; + } } ngModule.vnComponent('vnInvoiceInDescriptor', { diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js index 536fa07a0..2c27e0990 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js +++ b/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js @@ -13,6 +13,7 @@ describe('InvoiceOut downloadZip()', () => { }; it('should return part of link to dowloand the zip', async() => { + pending('https://redmine.verdnatura.es/issues/4875'); const tx = await models.InvoiceOut.beginTransaction({}); try { diff --git a/modules/ticket/front/descriptor-menu/index.js b/modules/ticket/front/descriptor-menu/index.js index f10e059ad..100d27cd0 100644 --- a/modules/ticket/front/descriptor-menu/index.js +++ b/modules/ticket/front/descriptor-menu/index.js @@ -256,7 +256,7 @@ class Controller extends Section { this.$http.post(`NotificationQueues`, { notificationFk: 'invoiceElectronic', authorFk: client.id, - }).then(a => { + }).then(() => { this.vnApp.showSuccess(this.$t('Invoice sent')); }); } diff --git a/print/templates/reports/entry-order/entry-order.html b/print/templates/reports/entry-order/entry-order.html index bdc4b0759..26294787b 100644 --- a/print/templates/reports/entry-order/entry-order.html +++ b/print/templates/reports/entry-order/entry-order.html @@ -20,7 +20,7 @@ {{$t('ref')}} - {{entry.ref}} + {{entry.invoiceNumber}} diff --git a/print/templates/reports/entry-order/sql/entry.sql b/print/templates/reports/entry-order/sql/entry.sql index 44feaae01..57b8d9293 100644 --- a/print/templates/reports/entry-order/sql/entry.sql +++ b/print/templates/reports/entry-order/sql/entry.sql @@ -1,10 +1,10 @@ SELECT e.id, - e.ref, + e.invoiceNumber, e.notes, c.code companyCode, t.landed FROM entry e JOIN travel t ON t.id = e.travelFk JOIN company c ON c.id = e.companyFk -WHERE e.id = ? \ No newline at end of file +WHERE e.id = ? diff --git a/print/templates/reports/extra-community/extra-community.html b/print/templates/reports/extra-community/extra-community.html index 42afedc76..6a46cc689 100644 --- a/print/templates/reports/extra-community/extra-community.html +++ b/print/templates/reports/extra-community/extra-community.html @@ -49,7 +49,7 @@ {{entry.supplierName}} - {{entry.ref}} + {{entry.reference}} {{entry.volumeKg | number($i18n.locale)}} {{entry.loadedKg | number($i18n.locale)}} {{entry.stickers}} diff --git a/print/templates/reports/extra-community/sql/entries.sql b/print/templates/reports/extra-community/sql/entries.sql index a90bf8b0b..84dc497c0 100644 --- a/print/templates/reports/extra-community/sql/entries.sql +++ b/print/templates/reports/extra-community/sql/entries.sql @@ -1,7 +1,7 @@ SELECT e.id, e.travelFk, - e.ref, + e.reference, s.name AS supplierName, SUM(b.stickers) AS stickers, CAST(SUM(b.weight * b.stickers) as DECIMAL(10,0)) as loadedKg, @@ -15,4 +15,4 @@ SELECT JOIN supplier s ON s.id = e.supplierFk JOIN vn.volumeConfig vc WHERE t.id IN(?) - GROUP BY e.id \ No newline at end of file + GROUP BY e.id diff --git a/print/templates/reports/invoiceIn/invoiceIn.html b/print/templates/reports/invoiceIn/invoiceIn.html index 69ce3d0f2..f101f7408 100644 --- a/print/templates/reports/invoiceIn/invoiceIn.html +++ b/print/templates/reports/invoiceIn/invoiceIn.html @@ -5,9 +5,8 @@
-
-
-

{{$t('title')}}

+
+
@@ -16,7 +15,7 @@ - + @@ -26,7 +25,7 @@
{{$t('invoiceId')}}{{invoice.id}}{{invoice.supplierRef}}
{{$t('date')}}
-
+
{{$t('invoiceData')}}
@@ -43,7 +42,7 @@
-

{{$t('invoiceId')}}

+

{{$t('entry')}}

@@ -64,7 +63,7 @@
- {{entry.ref}} + {{entry.reference}}
@@ -82,7 +81,7 @@ {{buy.name}} {{buy.quantity}} - {{buy.buyingValue}} + {{buy.buyingValue | currency('EUR', $i18n.locale)}} {{buyImport(buy) | currency('EUR', $i18n.locale)}} @@ -103,27 +102,31 @@
+
-
+
+
+
{{$t('payMethod')}}: {{invoice.payMethod}}
+
+
{{$t('signer.received')}}:
+
{{$t('signer.signed')}}:
+
+
+
+ +
- - - - - - - - - - + + @@ -150,28 +153,16 @@ -
-
-
-
{{$t('observations')}}
-
-
{{$t('payMethod')}}
-
{{invoice.payMethod}}
-
-
-
-
+ + + diff --git a/print/templates/reports/invoiceIn/invoiceIn.js b/print/templates/reports/invoiceIn/invoiceIn.js index 40dd25a5b..03549c276 100755 --- a/print/templates/reports/invoiceIn/invoiceIn.js +++ b/print/templates/reports/invoiceIn/invoiceIn.js @@ -9,6 +9,16 @@ module.exports = { this.invoice = await this.fetchInvoice(this.id); this.taxes = await this.fetchTaxes(this.id); + let defaultTax = await this.fetchDefaultTax(); + + if (defaultTax) { + defaultTax = Object.assign(defaultTax, { + taxableBase: 0, + vat: (this.taxTotal() * defaultTax.rate / 100) + }); + this.taxes.push(defaultTax); + } + if (!this.invoice) throw new Error('Something went wrong'); @@ -43,6 +53,9 @@ module.exports = { fetchBuy(id) { return this.rawSqlFromDef('buy', [id]); }, + fetchDefaultTax() { + return this.findOneFromDef('defaultTax'); + }, async fetchTaxes(id) { const taxes = await this.rawSqlFromDef(`taxes`, [id]); return this.taxVat(taxes); diff --git a/print/templates/reports/invoiceIn/locale/en.yml b/print/templates/reports/invoiceIn/locale/en.yml index 92d3b0c2d..5f41a9ceb 100644 --- a/print/templates/reports/invoiceIn/locale/en.yml +++ b/print/templates/reports/invoiceIn/locale/en.yml @@ -1,6 +1,6 @@ -reportName: invoice -title: Agricultural invoice -invoiceId: Agricultural invoice +reportName: agricultural receip +title: Agricultural receip +invoiceId: Agricultural receip supplierId: Proveedor invoiceData: Invoice data reference: Reference @@ -23,3 +23,8 @@ subtotal: Subtotal taxBreakdown: Tax breakdown observations: Observations payMethod: Pay method +entry: Entry +signer: + received: Received + signed: Signature +footer: Passive subject covered by the special agrarian regime. Please send this duly signed and sealed copy. Thanks. diff --git a/print/templates/reports/invoiceIn/locale/es.yml b/print/templates/reports/invoiceIn/locale/es.yml index f2fb28e64..90f7db6bd 100644 --- a/print/templates/reports/invoiceIn/locale/es.yml +++ b/print/templates/reports/invoiceIn/locale/es.yml @@ -1,6 +1,6 @@ -reportName: factura -title: Factura Agrícola -invoiceId: Factura Agrícola +reportName: recibo agrícola +title: Recibo Agrícola +invoiceId: Recibo Agrícola supplierId: Proveedor invoiceData: Datos de facturación reference: Referencia @@ -23,3 +23,8 @@ subtotal: Subtotal taxBreakdown: Desglose impositivo observations: Observaciones payMethod: Método de pago +entry: Entrada +signer: + received: Recibí + signed: Firma y sello +footer: Sujeto pasivo acogido al régimen especial agrario. Les rogamos remitan esta copia debidamente firmada y sellada. Gracias. diff --git a/print/templates/reports/invoiceIn/sql/defaultTax.sql b/print/templates/reports/invoiceIn/sql/defaultTax.sql new file mode 100644 index 000000000..25f8a7090 --- /dev/null +++ b/print/templates/reports/invoiceIn/sql/defaultTax.sql @@ -0,0 +1,5 @@ +SELECT + id, + retentionRate rate, + retentionName name + FROM invoiceInConfig; diff --git a/print/templates/reports/invoiceIn/sql/entry.sql b/print/templates/reports/invoiceIn/sql/entry.sql index 0b29cd81c..d81a81afb 100644 --- a/print/templates/reports/invoiceIn/sql/entry.sql +++ b/print/templates/reports/invoiceIn/sql/entry.sql @@ -1,7 +1,7 @@ SELECT e.id, t.landed, - e.ref + e.reference FROM entry e JOIN invoiceIn i ON i.id = e.invoiceInFk JOIN travel t ON t.id = e.travelFk diff --git a/print/templates/reports/invoiceIn/sql/invoice.sql b/print/templates/reports/invoiceIn/sql/invoice.sql index fe9ef1e9e..eea8e81a5 100644 --- a/print/templates/reports/invoiceIn/sql/invoice.sql +++ b/print/templates/reports/invoiceIn/sql/invoice.sql @@ -1,5 +1,5 @@ SELECT - i.id, + i.supplierRef, s.id supplierId, i.created, s.name, diff --git a/print/templates/reports/invoiceIn/sql/taxes.sql b/print/templates/reports/invoiceIn/sql/taxes.sql index 20df33f83..07b7be822 100644 --- a/print/templates/reports/invoiceIn/sql/taxes.sql +++ b/print/templates/reports/invoiceIn/sql/taxes.sql @@ -5,4 +5,5 @@ SELECT FROM invoiceIn ii JOIN invoiceInTax iit ON ii.id = iit.invoiceInFk JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk - WHERE ii.id = ?; + WHERE ii.id = ? + ORDER BY name DESC; diff --git a/print/templates/reports/supplier-campaign-metrics/sql/entries.sql b/print/templates/reports/supplier-campaign-metrics/sql/entries.sql index aa458dda0..b48e99c23 100644 --- a/print/templates/reports/supplier-campaign-metrics/sql/entries.sql +++ b/print/templates/reports/supplier-campaign-metrics/sql/entries.sql @@ -1,6 +1,6 @@ SELECT e.id, - e.ref, + e.reference, e.supplierFk, t.shipped FROM vn.entry e diff --git a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html index fd6ee5725..baff51bfe 100644 --- a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html +++ b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html @@ -39,7 +39,7 @@

{{$t('entry')}} {{entry.id}} {{$t('dated')}} {{entry.shipped | date('%d-%m-%Y')}} - {{$t('reference')}} {{entry.ref}} + {{$t('reference')}} {{entry.reference}}

{{$t('taxBreakdown')}}
{{$t('type')}}{{$t('taxBase')}}{{$t('tax')}}{{$t('fee')}}
{{tax.name}}{{tax.taxableBase | currency('EUR', $i18n.locale)}}{{tax.rate | percentage}}{{tax.taxableBase | currency('EUR', $i18n.locale)}} + {{(tax.rate / 100) | percentage}} {{tax.vat | currency('EUR', $i18n.locale)}}