+
+
diff --git a/print/core/components/email-header/email-header.js b/print/core/components/email-header/email-header.js
new file mode 100755
index 0000000000..257770cadc
--- /dev/null
+++ b/print/core/components/email-header/email-header.js
@@ -0,0 +1,4 @@
+module.exports = {
+ name: 'email-header',
+ props: ['locale']
+};
diff --git a/print/report/rpt-delivery-note/assets/css/index.js b/print/core/components/report-footer/assets/css/import.js
similarity index 64%
rename from print/report/rpt-delivery-note/assets/css/index.js
rename to print/core/components/report-footer/assets/css/import.js
index 515dea7503..a2a9334cb1 100644
--- a/print/report/rpt-delivery-note/assets/css/index.js
+++ b/print/core/components/report-footer/assets/css/import.js
@@ -1,6 +1,6 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
+const Stylesheet = require(`${appPath}/core/stylesheet`);
-module.exports = new CssReader([
+module.exports = new Stylesheet([
`${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`,
diff --git a/print/report/report-footer/assets/css/style.css b/print/core/components/report-footer/assets/css/style.css
similarity index 100%
rename from print/report/report-footer/assets/css/style.css
rename to print/core/components/report-footer/assets/css/style.css
diff --git a/print/core/components/report-footer/locale/es.yml b/print/core/components/report-footer/locale/es.yml
new file mode 100644
index 0000000000..8c54b796f3
--- /dev/null
+++ b/print/core/components/report-footer/locale/es.yml
@@ -0,0 +1,10 @@
+numPages: Página {{page}} de {{pages}}
+law:
+ phytosanitary: 'VERDNATURA LEVANTE SL - Pasaporte Fitosanitario R.P. Generalitat
+ Valenciana - Nº Comerciante: ES17462130'
+ privacy: En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección
+ de Datos de Carácter Personal, le comunicamos que los datos personales que facilite
+ se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en
+ todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición,
+ comunicándolo por escrito al domicilio social de la entidad. La finalidad del
+ fichero es la gestión administrativa, contabilidad, y facturación.
diff --git a/print/core/components/report-footer/locale/fr.yml b/print/core/components/report-footer/locale/fr.yml
new file mode 100644
index 0000000000..e35f9fb7ff
--- /dev/null
+++ b/print/core/components/report-footer/locale/fr.yml
@@ -0,0 +1,10 @@
+numPages: Page {{page}} de {{pages}}
+law:
+ phytosanitary: 'VERDNATURA LEVANTE SL - Passeport Phytosanitaire R.P. Generalitat
+ Valenciana - Numéro d''opérateur: ES17462130'
+ privacy: Conformément aux dispositions de la loi organique 15/1999 sur la protection
+ des données personnelles, nous vous informons que les données personnelles que
+ vous fournissez seront incluses dans des dossiers. VERDNATURA LEVANTE S.L., vous
+ pouvez à tout moment, exercer les droits d'accès, de rectification, d'annulation
+ et d'opposition, en communiquant par écrit au siège social de la société. Le dossier
+ a pour objet la gestion administrative, la comptabilité et la facturation.
diff --git a/print/core/components/report-footer/locale/pt.yml b/print/core/components/report-footer/locale/pt.yml
new file mode 100644
index 0000000000..8494c1ed53
--- /dev/null
+++ b/print/core/components/report-footer/locale/pt.yml
@@ -0,0 +1,10 @@
+numPages: Página {{page}} de {{pages}}
+law:
+ phytosanitary: 'VERDNATURA LEVANTE S.L - Passaporte Fitossanitário R.P. Generalitat
+ Valenciana - Nº Comerciante: ES17462130'
+ privacy: Em cumprimento do disposto na lei Orgânica 15/1999, de Protecção de Dados
+ de Carácter Pessoal, comunicamos que os dados pessoais que facilite se incluirão
+ nos ficheiros automatizados de VERDNATURA LEVANTE S.L., podendo em todo momento
+ exercer os direitos de acesso, rectificação, cancelação e oposição, comunicando
+ por escrito ao domicílio social da entidade. A finalidade do ficheiro é a gestão
+ administrativa, contabilidade e facturação.
diff --git a/print/report/report-footer/index.html b/print/core/components/report-footer/report-footer.html
similarity index 63%
rename from print/report/report-footer/index.html
rename to print/core/components/report-footer/report-footer.html
index 11b314af01..af433676f7 100644
--- a/print/report/report-footer/index.html
+++ b/print/core/components/report-footer/report-footer.html
@@ -1,7 +1,7 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/print/report/client-welcome/index.js b/print/report/client-welcome/index.js
deleted file mode 100755
index b2278b4eef..0000000000
--- a/print/report/client-welcome/index.js
+++ /dev/null
@@ -1,47 +0,0 @@
-const database = require(`${appPath}/lib/database`);
-const UserException = require(`${appPath}/lib/exceptions/userException`);
-
-module.exports = {
- name: 'client-welcome',
- async asyncData(ctx, params) {
- const data = {
- isPreview: ctx.method === 'GET',
- };
-
- if (!params.clientFk)
- throw new UserException('No client id specified');
-
- return this.methods.fetchClient(params.clientFk)
- .then(([result]) => {
- if (!result)
- throw new UserException('No client data found');
- return Object.assign(data, result[0]);
- });
- },
- created() {
- if (this.locale)
- this.$i18n.locale = this.locale;
- },
- methods: {
- fetchClient(clientFk) {
- return database.pool.query(`
- SELECT
- c.id,
- u.lang locale,
- u.name AS userName,
- c.email recipient,
- CONCAT(w.lastName, ' ', w.firstName) salesPersonName,
- w.phone AS salesPersonPhone,
- CONCAT(wu.name, '@verdnatura.es') AS salesPersonEmail
- FROM client c
- JOIN account.user u ON u.id = c.id
- LEFT JOIN worker w ON w.id = c.salesPersonFk
- LEFT JOIN account.user wu ON wu.id = w.userFk
- WHERE c.id = ?`, [clientFk]);
- },
- },
- components: {
- 'email-header': require('../email-header'),
- 'email-footer': require('../email-footer'),
- },
-};
diff --git a/print/report/client-welcome/locale.js b/print/report/client-welcome/locale.js
deleted file mode 100644
index bf18a9d918..0000000000
--- a/print/report/client-welcome/locale.js
+++ /dev/null
@@ -1,55 +0,0 @@
-module.exports = {
- messages: {
- es: {
- subject: 'Bienvenido a Verdnatura',
- title: '¡Te damos la bienvenida!',
- dearClient: 'Estimado cliente',
- clientData: `Tus datos para poder comprar en la web de Verdnatura
- (https://www.verdnatura.es)
- o en nuestras aplicaciones para iOS y
- Android
- (Ver tutorial de uso), son`,
- clientId: 'Identificador de cliente',
- user: 'Usuario',
- password: 'Contraseña',
- passwordResetText: 'Haz clic en "¿Has olvidado tu contraseña?"',
- sections: {
- howToBuy: {
- title: 'Cómo hacer un pedido',
- description: `Para realizar un pedido en nuestra web,
- debes configurarlo indicando:`,
- requeriments: [
- 'Si quieres recibir el pedido (por agencia o por nuestro propio reparto) o si lo prefieres recoger en alguno de nuestros almacenes.',
- 'La fecha en la que quieres recibir el pedido (se preparará el día anterior).',
- 'La dirección de entrega o el almacén donde quieres recoger el pedido.'],
- stock: 'En nuestra web y aplicaciones puedes visualizar el stock disponible de flor cortada, verdes, plantas, complementos y artificial. Ten en cuenta que dicho stock puede variar en función de la fecha seleccionada al configurar el pedido. Es importante CONFIRMAR los pedidos para que la mercancía quede reservada.',
- delivery: 'El reparto se realiza de lunes a sábado según la zona en la que te encuentres. Por regla general, los pedidos que se entregan por agencia, deben estar confirmados y pagados antes de las 17h del día en que se preparan (el día anterior a recibirlos), aunque esto puede variar si el pedido se envía a través de nuestro reparto y según la zona.',
- },
- howToPay: {
- title: 'Cómo pagar',
- description: 'Las formas de pago admitidas en Verdnatura son:',
- options: [
- 'Con tarjeta a través de nuestra plataforma web (al confirmar el pedido).',
- 'Mediante giro bancario mensual, modalidad que hay que solicitar y tramitar.',
- ],
- },
- toConsider: {
- title: 'Cosas a tener en cuenta',
- description: `Verdnatura vende EXCLUSIVAMENTE a profesionales, por lo que debes
- remitirnos el Modelo 036 ó 037, para comprobar que está
- dado/a de alta en el epígrafe correspondiente al comercio de flores.`,
- },
- claimsPolicy: {
- title: 'POLÍTICA DE RECLAMACIONES',
- description: `Verdnatura aceptará las reclamaciones que se realicen dentro
- de los dos días naturales siguientes a la recepción del pedido (incluyendo el mismo día de la recepción).
- Pasado este plazo no se aceptará ninguna reclamación.`,
- },
- },
- help: 'Cualquier duda que te surja, no dudes en consultarla, ¡estamos para atenderte!',
- salesPersonName: 'Soy tu comercial y mi nombre es',
- salesPersonPhone: 'Teléfono y whatsapp',
- salesPersonEmail: 'Dirección de e-mail',
- },
- },
-};
diff --git a/print/report/delivery-note/assets/css/index.js b/print/report/delivery-note/assets/css/index.js
deleted file mode 100644
index 321c632dc7..0000000000
--- a/print/report/delivery-note/assets/css/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
-
-module.exports = new CssReader([
- `${appPath}/common/css/layout.css`,
- `${appPath}/common/css/email.css`,
- `${appPath}/common/css/misc.css`])
- .mergeStyles();
diff --git a/print/report/delivery-note/index.html b/print/report/delivery-note/index.html
deleted file mode 100644
index b85f8fab0f..0000000000
--- a/print/report/delivery-note/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- {{ $t('subject') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/print/report/printer-setup/index.js b/print/report/printer-setup/index.js
deleted file mode 100755
index 1353d996c7..0000000000
--- a/print/report/printer-setup/index.js
+++ /dev/null
@@ -1,55 +0,0 @@
-const database = require(`${appPath}/lib/database`);
-const UserException = require(`${appPath}/lib/exceptions/userException`);
-
-module.exports = {
- name: 'printer-setup',
- async asyncData(ctx, params) {
- const data = {
- isPreview: ctx.method === 'GET',
- };
-
- if (!params.clientFk)
- throw new UserException('No client id specified');
-
- return this.methods.fetchClient(params.clientFk)
- .then(([result]) => {
- if (!result)
- throw new UserException('No client data found');
- return Object.assign(data, result[0]);
- });
- },
- created() {
- if (this.locale)
- this.$i18n.locale = this.locale;
- },
- data() {
- return {
- files: [
- '/assets/files/model.ezp',
- '/assets/files/port.png'
- ],
- };
- },
- methods: {
- fetchClient(clientFk) {
- return database.pool.query(`
- SELECT
- c.id,
- u.lang locale,
- u.name AS userName,
- c.email recipient,
- CONCAT(w.lastName, ' ', w.firstName) salesPersonName,
- w.phone AS salesPersonPhone,
- CONCAT(wu.name, '@verdnatura.es') AS salesPersonEmail
- FROM client c
- JOIN account.user u ON u.id = c.id
- LEFT JOIN worker w ON w.id = c.salesPersonFk
- LEFT JOIN account.user wu ON wu.id = w.userFk
- WHERE c.id = ?`, [clientFk]);
- },
- },
- components: {
- 'email-header': require('../email-header'),
- 'email-footer': require('../email-footer'),
- },
-};
diff --git a/print/report/printer-setup/locale.js b/print/report/printer-setup/locale.js
deleted file mode 100644
index dc95c931aa..0000000000
--- a/print/report/printer-setup/locale.js
+++ /dev/null
@@ -1,59 +0,0 @@
-module.exports = {
- messages: {
- es: {
- subject: 'Instalación y configuración de impresora',
- title: '¡Gracias por tu confianza!',
- description: {
- dear: 'Estimado cliente',
- instructions: 'Sigue las instrucciones especificadas en este correo para llevar a cabo la instalación de la impresora.',
- followGuide: `Puedes utilizar como guía, el vídeo del montaje del ribon y la cinta
- https://www.youtube.com/watch?v=qhb0kgQF3o8.
- También necesitarás el QLabel, el programa para imprimir las cintas.`,
- downloadFrom: `Puedes descargarlo desde este enlace
- https://godex.s3-accelerate.amazonaws.com/gGnOPoojkP6vC1lgmrbEqQ.file?v01`,
- },
- sections: {
- QLabel: {
- title: 'Utilización de QLabel',
- description: 'Para utilizar el programa de impresión de cintas sigue estos pasos',
- steps: [
- 'Abre el programa QLabel',
- 'Haz clic en el icono de la barra superior con forma de "carpeta"',
- 'Selecciona el archivo llamado "model.ezp" adjunto en este correo, y haz clic en abrir',
- 'Ve a "File" -> "Save as" y guárdalo en el escritorio con otro nombre',
- 'Cierra el Qlabel y abre el archivo que acabamos de guardar',
- 'Haz clic encima del texto con el botón secundario del ratón',
- 'Elige la primera opción "setup"',
- 'Cambia el texto para imprimir',
- 'Haz clic en el botón "Ok"',
- 'Desplázate con el ratón para ver la medida máxima que ocupa el texto',
- 'Haz clic encima del texto con el botón secundario del ratón',
- 'Elige la segunda opción "Setup printer"',
- 'Haz clic en la primera pestaña "Label Setup"',
- 'Modifica la propiedad "Paper Height" con la medida máxima consultada anteriormente',
- `Comprueba el puerto de la impresora, botón de de la derecha
- "SETUP PRINTER" y en la parte derecha, igual como la imagen
- que adjuntamos, seleccionar la que ponga "USB00x: GODEX"`,
- 'Haz clic en el botón "Ok"',
- 'Haz clic sobre el icono de la impresora',
- 'Haz clic en "Print"',
- ],
- },
- help: {
- title: '¿Necesitas ayuda?',
- description: `Si necesitas ayuda, descárgate nuestro programa de soporte para poder conectarnos
- remotamente a tu equipo y hacerte la instalación. Proporciónanos un horario de contacto para atenderte, y contactaremos contigo.`,
- remoteSupport: `Puedes descargarte el programa desde este enlace
- http://soporte.verdnatura.es.`,
- },
- },
- help: 'Cualquier duda que te surja, no dudes en consultarla, ¡estamos para atenderte!',
- salesPersonName: 'Soy tu comercial y mi nombre es',
- salesPersonPhone: 'Teléfono y whatsapp',
- salesPersonEmail: 'Dirección de e-mail',
- },
- },
-};
-
-
diff --git a/print/report/report-footer/assets/css/index.js b/print/report/report-footer/assets/css/index.js
deleted file mode 100644
index c44219258c..0000000000
--- a/print/report/report-footer/assets/css/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
-
-module.exports = new CssReader([
- `${__dirname}/style.css`,
- `${appPath}/common/css/misc.css`])
- .mergeStyles();
diff --git a/print/report/report-footer/locale.js b/print/report/report-footer/locale.js
deleted file mode 100644
index bf564c731e..0000000000
--- a/print/report/report-footer/locale.js
+++ /dev/null
@@ -1,32 +0,0 @@
-module.exports = {
- messages: {
- es: {
- numPages: 'Página {{page}} de {{pages}}',
- law: {
- phytosanitary: 'VERDNATURA LEVANTE SL - Pasaporte Fitosanitario R.P. Generalitat Valenciana - Nº Comerciante: ES17462130',
- privacy: `En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal,
- le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L.,
- pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo
- por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación.`,
- }
- },
- fr: {
- numPages: 'Page {{page}} de {{pages}}',
- law: {
- phytosanitary: `VERDNATURA LEVANTE SL - Passeport Phytosanitaire R.P. Generalitat Valenciana - Numéro d'opérateur: ES17462130`,
- privacy: `Conformément aux dispositions de la loi organique 15/1999 sur la protection des données personnelles, nous vous informons que les données personnelles que vous fournissez seront incluses dans des dossiers.
- VERDNATURA LEVANTE S.L., vous pouvez à tout moment, exercer les droits d'accès, de rectification, d'annulation et d'opposition, en communiquant par écrit au siège social de la société. Le dossier a pour objet la gestion administrative, la comptabilité et la facturation.`,
- }
- },
- pt: {
- numPages: 'Página {{page}} de {{pages}}',
- law: {
- phytosanitary: 'VERDNATURA LEVANTE S.L - Passaporte Fitossanitário R.P. Generalitat Valenciana - Nº Comerciante: ES17462130',
- privacy: `Em cumprimento do disposto na lei Orgânica 15/1999, de Protecção de Dados de Carácter Pessoal, comunicamos que os
- dados pessoais que facilite se incluirão nos ficheiros automatizados de VERDNATURA LEVANTE S.L., podendo em todo momento
- exercer os direitos de acesso, rectificação, cancelação e oposição, comunicando por escrito ao domicílio social da entidade.
- A finalidade do ficheiro é a gestão administrativa, contabilidade e facturação.`,
- }
- },
- },
-};
diff --git a/print/report/report-header/assets/css/index.js b/print/report/report-header/assets/css/index.js
deleted file mode 100644
index c321a3fe7f..0000000000
--- a/print/report/report-header/assets/css/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
-
-module.exports = new CssReader([`${__dirname}/style.css`])
- .mergeStyles();
diff --git a/print/report/report-header/index.js b/print/report/report-header/index.js
deleted file mode 100755
index 8eae2e25ab..0000000000
--- a/print/report/report-header/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
- name: 'report-header',
- created() {
- if (this.locale)
- this.$i18n.locale = this.locale;
-
- const embeded = [];
- this.files.map(file => {
- embeded[file] = `file://${__dirname + file}`;
- });
- this.embeded = embeded;
- },
- data() {
- return {
- files: ['/assets/images/report-logo.svg'],
- };
- },
- props: ['locale']
-};
diff --git a/print/report/report-header/locale.js b/print/report/report-header/locale.js
deleted file mode 100644
index 7b3b9f38ee..0000000000
--- a/print/report/report-header/locale.js
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
- messages: {
- es: {
- company: {
- fiscalAddress: 'VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es',
- registry: `CIF: B97367486 Registro Mercantil de Valencia, Tomo 8041, Libro 5334, Folio 160, sección 8, Hoja V 102076`,
- }
- },
- pt: {
- company: {
- fiscalAddress: 'VERDNATURA LEVANTE S.L., B97367486 Avda. Espioca, 100, 46460 Silla - www.verdnatura.es - clientes@verdnatura.es',
- registry: `CIF: B97367486 Registro Mercantil de Valencia, Tomo 8041, Libro 5334, Folio 160, Sección 8, Hoja V 102076`,
- }
- },
- },
-};
diff --git a/print/report/rpt-claim-pickup-order/index.html b/print/report/rpt-claim-pickup-order/index.html
deleted file mode 100644
index b5c571a5cf..0000000000
--- a/print/report/rpt-claim-pickup-order/index.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- Recibo de {{client.socialName}},
- la cantidad de {{receipt.amountPaid}} € en concepto de 'entrega a cuenta',
- quedando pendiente en la cuenta del cliente
- un saldo de {{receipt.amountUnpaid}} €.
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/print/report/rpt-sepa-core/index.js b/print/report/rpt-sepa-core/index.js
deleted file mode 100755
index 63c54b907c..0000000000
--- a/print/report/rpt-sepa-core/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const fs = require('fs');
-const strftime = require('strftime');
-const database = require(`${appPath}/lib/database`);
-
-const template = fs.readFileSync(__dirname + '/index.html').toString();
-const lang = require('./locale.js');
-
-const UserException = require(`${appPath}/lib/exceptions/userException`);
-
-const rptSepaCore = {
- name: 'rpt-sepa-core',
-
- async asyncData(ctx, params) {
- if (!params.clientFk)
- throw new UserException('No client id specified');
-
- if (!params.companyFk)
- throw new UserException('No company id specified');
-
- return this.methods.fetchClient(params.clientFk, params.companyFk)
- .then(([[client]]) => {
- if (!client)
- throw new UserException('No client data found');
-
- return client;
- });
- },
- created() {
- this.clientId = 101;
- if (this.locale)
- this.$i18n.locale = this.locale;
- },
- methods: {
- fetchClient(clientFk, companyFk) {
- return database.pool.query(
- `SELECT
- c.id clientId,
- u.lang locale,
- m.code mandateCode,
- c.email AS recipient,
- c.socialName AS clientName,
- c.street AS clientStreet,
- c.postcode AS clientPostCode,
- c.city AS clientCity,
- p.name AS clientProvince,
- ct.country AS clientCountry,
- ct.code AS clientCountryCode,
- ct.ibanLength AS ibanLength,
- s.name AS supplierName,
- s.street AS supplierStreet,
- sc.country AS supplierCountry,
- s.postCode AS supplierPostCode,
- s.city AS supplierCity,
- sp.name AS supplierProvince
- FROM client c
- JOIN account.user u ON u.id = c.id
- JOIN country ct ON ct.id = c.countryFk
- LEFT JOIN mandate m ON m.clientFk = c.id
- AND m.companyFk = ? AND m.finished IS NULL
- LEFT JOIN supplier s ON s.id = m.companyFk
- LEFT JOIN country sc ON sc.id = s.countryFk
- LEFT JOIN province sp ON sp.id = s.provinceFk
- LEFT JOIN province p ON p.id = c.provinceFk
- WHERE (m.companyFk = ? OR m.companyFk IS NULL) AND c.id = ?
- ORDER BY m.created DESC LIMIT 1`, [companyFk, companyFk, clientFk]);
- },
- dated: () => {
- return strftime('%d-%m-%Y', new Date());
- },
- toISOString: date => {
- return strftime('%d-%m-%Y', date);
- },
- },
- components: {
- 'report-header': require('../report-header'),
- 'report-footer': require('../report-footer'),
- },
- template: template,
- i18n: lang,
- props: ['test']
-};
-
-
-module.exports = rptSepaCore;
diff --git a/print/report/rpt-sepa-core/locale.js b/print/report/rpt-sepa-core/locale.js
deleted file mode 100644
index 459cdc3673..0000000000
--- a/print/report/rpt-sepa-core/locale.js
+++ /dev/null
@@ -1,81 +0,0 @@
-module.exports = {
- messages: {
- es: {
- title: 'Orden de domiciliación de adeudo SEPA CORE',
- description: `Mediante la firma de esta orden de domiciliación, el deudor autoriza (A) al acreedor a enviar instrucciones
- a la entidad del deudor para adeudar su cuenta y (B) a la entidad para efectuar los adeudos en su cuenta siguiendo las
- instrucciones del acreedor.Como parte de sus derechos, el deudor está legitimado al reembolso por su entidad en los
- términos y condiciones del contrato suscrito con la misma. La solicitud de reembolso deberá efectuarse dentro de las
- ocho semanas que adeudo en cuenta. Puede obtener información adicional sobre sus derechos en su entidad financiera.`,
- documentCopy: `Debe llevar a su Entidad Bancaria una copia
- del documento firmado para que lo registre y evitar la devolución.`,
- mandatoryFields: `TODOS LOS CAMPOS HAN DE SER CUMPLIMENTADOS OBLIGATORIAMENTE.`,
- sendOrder: `UNA VEZ FIRMADA ESTA ORDEN DE DOMICILIACIÓN DEBE SER ENVIADA AL ACREEDOR PARA SU CUSTODIA Y ES RECOMENDABLE FACILITAR UNA COPIA A SU ENTIDAD BANCARIA.`,
- supplier: {
- toCompleteBySupplier: 'A cumplimentar por el acreedor',
- orderReference: 'Referencia de la orden de domiciliación',
- identifier: 'Identificador del acreedor',
- name: 'Nombre del acreedor',
- street: 'Dirección',
- location: 'CP - Población - Provincia',
- country: 'País'
- },
- client: {
- toCompleteByClient: 'A cumplimentar por el deudor',
- name: 'Nombre del deudor/es',
- street: 'Dirección del deudor',
- location: 'CP - Población - Provincia',
- country: 'País del deudor',
- swift: 'Swift BIC',
- accountNumber: 'Número de cuenta - IBAN',
- accountHolder: '(Titular/es de la cuenta de cargo)',
- accountNumberFormat: 'En España el IBAN consta de 24 posiciones comenzando siempre por ES',
- paymentType: 'Tipo de pago',
- recurrent: 'Recurrente',
- unique: 'Único',
- signLocation: 'Fecha - Localidad',
- sign: 'Firma del deudor y sello',
- },
- order: 'Ord. domiciliación {0}',
- },
- pt: {
- title: 'Autorização de débito directo SEPA CORE',
- description: `Ao subscrever esta autorização, está a autorizar a (A) Verdnatura Levante S.L. a enviar instruções ao
- seu banco para debitar a sua conta e (B) seu banco a debitar a sua conta, de acordo com as instruções da
- Verdnatura Levante S.L. Os seus direitos incluem a possibilidade de exigir do seu banco o reembolso do
- montante debitado, nos termos e condições acordados com o seu banco. O reembolso deve ser solicitado até um
- prazo de oito semanas, a contar da data do débito na sua conta. Os seus direitos, referentes à autorização
- acima referida, são explicados em declaração que pode obter no seu banco.`,
- documentCopy: `Deve levar à sua Entidade Bancária uma cópia do documento assinado para que o registre e evitar a devolução`,
- mandatoryFields: `TODOS OS CAMPOS DEVEM SER PREENCHIDOS OBRIGATORIAMENTE.`,
- sendOrder: `UMA VEZ ASSINADA, ESTA AUTORIZAÇÃO DE DÉBITO DEVE SER ENVIADA AO CREDOR PARA SUA CUSTÓDIA E É RECOMENDÁVEL
- FACILITAR UMA CÓPIA À SUA ENTIDADE BANCÁRIA.`,
- supplier: {
- toCompleteBySupplier: 'A preencher pelo credor',
- orderReference: 'Referência da ordem',
- identifier: 'Identificador do Credor',
- name: 'Nome do Credor',
- street: 'Morada',
- location: 'CP - Município - Distrito',
- country: 'País'
- },
- client: {
- toCompleteByClient: 'A preencher pelo devedor',
- name: 'Nome do devedor (Titular da conta)',
- street: 'Dirección del deudor',
- location: 'Cod. Postal - Município - Distrito',
- country: 'País do devedor',
- swift: 'Swift BIC',
- accountNumber: 'Número de Conta IBAN',
- accountHolder: '(Titular/es de la cuenta de cargo)',
- accountNumberFormat: 'Em Portugal o IBAN é composto por 25 dígitos e começa sempre por PT',
- paymentType: 'Tipos de pagamento Pagamento',
- recurrent: 'Recorrente',
- unique: 'Pagamento pontual',
- signLocation: 'Data - Localidade',
- sign: 'Assinatura e carimbo do devedor',
- },
- order: 'Referência da ordem {0}',
- },
- },
-};
diff --git a/print/report/rpt-zone/assets/css/index.js b/print/report/rpt-zone/assets/css/index.js
deleted file mode 100644
index 06417fceed..0000000000
--- a/print/report/rpt-zone/assets/css/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
-
-module.exports = new CssReader([
- `${appPath}/common/css/layout.css`,
- `${appPath}/common/css/report.css`,
- `${__dirname}/style.css`])
- .mergeStyles();
diff --git a/print/report/rpt-zone/index.html b/print/report/rpt-zone/index.html
deleted file mode 100644
index 5e64da73c8..0000000000
--- a/print/report/rpt-zone/index.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
- {{zone.agencyName}}
- {{zone.id}}
- {{zone.plateNumber}} {{zoneTime(zone.time)}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/print/report/rpt-zone/index.js b/print/report/rpt-zone/index.js
deleted file mode 100755
index c6b0a245ce..0000000000
--- a/print/report/rpt-zone/index.js
+++ /dev/null
@@ -1,36 +0,0 @@
-const strftime = require('strftime');
-const database = require(`${appPath}/lib/database`);
-const UserException = require(`${appPath}/lib/exceptions/userException`);
-
-module.exports = {
- name: 'rpt-zone',
- async asyncData(ctx, params) {
- if (!params.routeFk)
- throw new UserException('No route id specified');
-
- let [[zone]] = await this.methods.fetchRoute(params.routeFk);
-
- if (!zone)
- throw new UserException('Route not ready');
-
- return {zone};
- },
- methods: {
- fetchRoute(routeFk) {
- return database.pool.query(
- `SELECT
- r.id,
- r.time,
- am.name agencyName,
- v.numberPlate plateNumber
- FROM route r
- JOIN agencyMode am ON am.id = r.agencyModeFk
- JOIN vehicle v ON v.id = r.vehicleFk
- WHERE r.id = ?`, [routeFk]);
- },
- zoneTime: zoneTime => {
- if (zoneTime)
- return strftime('%H:%M', zoneTime);
- },
- },
-};
diff --git a/print/report/rpt-zone/locale.js b/print/report/rpt-zone/locale.js
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/print/report/sample-report/assets/css/index.js b/print/report/sample-report/assets/css/index.js
deleted file mode 100644
index 515dea7503..0000000000
--- a/print/report/sample-report/assets/css/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
-
-module.exports = new CssReader([
- `${appPath}/common/css/layout.css`,
- `${appPath}/common/css/report.css`,
- `${appPath}/common/css/misc.css`,
- `${__dirname}/style.css`])
- .mergeStyles();
diff --git a/print/report/sample-report/assets/css/style.css b/print/report/sample-report/assets/css/style.css
deleted file mode 100644
index e621f3e235..0000000000
--- a/print/report/sample-report/assets/css/style.css
+++ /dev/null
@@ -1,3 +0,0 @@
-table.column-oriented {
- margin-top: 50px !important
-}
\ No newline at end of file
diff --git a/print/report/sample-report/index.html b/print/report/sample-report/index.html
deleted file mode 100644
index 9a60114fdf..0000000000
--- a/print/report/sample-report/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/print/report/sepa-core/index.js b/print/report/sepa-core/index.js
deleted file mode 100755
index 00fe18c3fe..0000000000
--- a/print/report/sepa-core/index.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const database = require(`${appPath}/lib/database`);
-const reportEngine = require(`${appPath}/lib/reportEngine.js`);
-const UserException = require(`${appPath}/lib/exceptions/userException`);
-
-module.exports = {
- name: 'sepa-core',
- async asyncData(ctx, params) {
- const promises = [];
- const data = {
- isPreview: ctx.method === 'GET',
- };
-
- if (!params.clientFk)
- throw new UserException('No client id specified');
-
- promises.push(reportEngine.toPdf('rpt-sepa-core', ctx));
- promises.push(this.methods.fetchClient(params.clientFk));
-
- return Promise.all(promises).then(result => {
- const stream = result[0];
- const [[client]] = result[1];
-
- Object.assign(data, client);
- Object.assign(data, {attachments: [{filename: 'rpt-sepa-core.pdf', content: stream}]});
-
- return data;
- });
- },
- created() {
- if (this.locale)
- this.$i18n.locale = this.locale;
- },
-
- methods: {
- fetchClient(clientFk) {
- return database.pool.query(`
- SELECT
- u.lang locale,
- c.email recipient
- FROM client c
- JOIN account.user u ON u.id = c.id
- WHERE c.id = ?`, [clientFk]);
- },
- },
- components: {
- 'email-header': require('../email-header'),
- 'email-footer': require('../email-footer'),
- },
-};
diff --git a/print/report/sepa-core/locale.js b/print/report/sepa-core/locale.js
deleted file mode 100644
index 1c5f926a17..0000000000
--- a/print/report/sepa-core/locale.js
+++ /dev/null
@@ -1,24 +0,0 @@
-module.exports = {
- messages: {
- es: {
- subject: 'Solicitud de domiciliación bancaria',
- title: 'Domiciliación SEPA CORE',
- description: {
- dear: 'Estimado cliente',
- instructions: `Para poder tramitar tu solicitud de cambio de tu forma de pago a giro bancario,
- te adjuntamos los documentos correspondientes a la ley de pago, que tienes que cumplimentar y enviarnos.`,
- conclusion: 'Gracias por tu atención.'
- },
- },
- pt: {
- subject: 'Autorização de débito directo SEPA CORE',
- title: 'Débito directo SEPA CORE',
- description: {
- dear: 'Prezado Cliente',
- instructions: `Para poder tramitar vossa solicitação de forma de pagamento a Débito Automático, anexamos os
- documentos correspondentes à Lei de Pagamentos, que deves preencher e reenviar-nos.`,
- conclusion: 'Obrigado pela atenção.'
- },
- }
- },
-};
diff --git a/print/server.js b/print/server.js
deleted file mode 100644
index 31830009df..0000000000
--- a/print/server.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = app => {
- global.appPath = __dirname;
-
- process.env.OPENSSL_CONF = '/etc/ssl/';
-
- // Init database instance
- require('./lib/database').init();
- // Init SMTP Instance
- require('./lib/smtp').init();
-
- require('./lib/router')(app);
-};
-
-
diff --git a/print/templates/email/claim-pickup-order/assets/css/import.js b/print/templates/email/claim-pickup-order/assets/css/import.js
new file mode 100644
index 0000000000..b44d6bd371
--- /dev/null
+++ b/print/templates/email/claim-pickup-order/assets/css/import.js
@@ -0,0 +1,8 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/templates/email/claim-pickup-order/attachments.json b/print/templates/email/claim-pickup-order/attachments.json
new file mode 100644
index 0000000000..8fb5569e4a
--- /dev/null
+++ b/print/templates/email/claim-pickup-order/attachments.json
@@ -0,0 +1,4 @@
+[{
+ "filename": "claim-pickup-order.pdf",
+ "component": "claim-pickup"
+}]
\ No newline at end of file
diff --git a/print/templates/email/claim-pickup-order/claim-pickup-order.html b/print/templates/email/claim-pickup-order/claim-pickup-order.html
new file mode 100644
index 0000000000..de08d8d8c1
--- /dev/null
+++ b/print/templates/email/claim-pickup-order/claim-pickup-order.html
@@ -0,0 +1,50 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('title') }}
+
{{$t('description.dear')}},
+
{{$t('description.instructions')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/claim-pickup-order/claim-pickup-order.js b/print/templates/email/claim-pickup-order/claim-pickup-order.js
new file mode 100755
index 0000000000..4396b144a5
--- /dev/null
+++ b/print/templates/email/claim-pickup-order/claim-pickup-order.js
@@ -0,0 +1,16 @@
+const Component = require(`${appPath}/core/component`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+
+module.exports = {
+ name: 'claim-pickup-order',
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build()
+ },
+ props: {
+ claimId: {
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/claim-pickup-order/locale/es.yml b/print/templates/email/claim-pickup-order/locale/es.yml
new file mode 100644
index 0000000000..1d49b2b2b4
--- /dev/null
+++ b/print/templates/email/claim-pickup-order/locale/es.yml
@@ -0,0 +1,23 @@
+subject: Orden de recogida
+title: Orden de recogida
+description:
+ dear: Estimado cliente
+ instructions: Aqui tienes tu orden de recogida.
+sections:
+ howToBuy:
+ title: Cómo hacer un pedido
+ description: 'Para realizar un pedido en nuestra web, debes configurarlo indicando:'
+ requeriments:
+ - Si quieres recibir el pedido (por agencia o por nuestro propio reparto) o si
+ lo prefieres recoger en alguno de nuestros almacenes.
+ - La fecha en la que quieres recibir el pedido (se preparará el día anterior).
+ - La dirección de entrega o el almacén donde quieres recoger el pedido.
+ stock: En nuestra web y aplicaciones puedes visualizar el stock disponible de
+ flor cortada, verdes, plantas, complementos y artificial. Ten en cuenta que
+ dicho stock puede variar en función de la fecha seleccionada al configurar el
+ pedido. Es importante CONFIRMAR los pedidos para que la mercancía quede reservada.
+ delivery: El reparto se realiza de lunes a sábado según la zona en la que te encuentres.
+ Por regla general, los pedidos que se entregan por agencia, deben estar confirmados
+ y pagados antes de las 17h del día en que se preparan (el día anterior a recibirlos),
+ aunque esto puede variar si el pedido se envía a través de nuestro reparto y
+ según la zona.
diff --git a/print/report/claim-pickup-order/assets/css/index.js b/print/templates/email/client-lcr/assets/css/index.js
similarity index 100%
rename from print/report/claim-pickup-order/assets/css/index.js
rename to print/templates/email/client-lcr/assets/css/index.js
diff --git a/print/report/client-lcr/index.html b/print/templates/email/client-lcr/index.html
similarity index 100%
rename from print/report/client-lcr/index.html
rename to print/templates/email/client-lcr/index.html
diff --git a/print/report/client-lcr/index.js b/print/templates/email/client-lcr/index.js
similarity index 100%
rename from print/report/client-lcr/index.js
rename to print/templates/email/client-lcr/index.js
diff --git a/print/report/client-lcr/locale.js b/print/templates/email/client-lcr/locale.js
similarity index 100%
rename from print/report/client-lcr/locale.js
rename to print/templates/email/client-lcr/locale.js
diff --git a/print/templates/email/client-welcome/assets/css/import.js b/print/templates/email/client-welcome/assets/css/import.js
new file mode 100644
index 0000000000..b44d6bd371
--- /dev/null
+++ b/print/templates/email/client-welcome/assets/css/import.js
@@ -0,0 +1,8 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/templates/email/client-welcome/client-welcome.html b/print/templates/email/client-welcome/client-welcome.html
new file mode 100644
index 0000000000..88eaf56d0b
--- /dev/null
+++ b/print/templates/email/client-welcome/client-welcome.html
@@ -0,0 +1,96 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/client-welcome/client-welcome.js b/print/templates/email/client-welcome/client-welcome.js
new file mode 100755
index 0000000000..35b373bc43
--- /dev/null
+++ b/print/templates/email/client-welcome/client-welcome.js
@@ -0,0 +1,36 @@
+const Component = require(`${appPath}/core/component`);
+const db = require(`${appPath}/core/database`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+
+module.exports = {
+ name: 'client-welcome',
+ async serverPrefetch() {
+ this.client = await this.fetchClient(this.clientId);
+ },
+ methods: {
+ fetchClient(clientId) {
+ return db.findOne(`
+ SELECT
+ c.id,
+ u.name AS userName,
+ CONCAT(w.lastName, ' ', w.firstName) salesPersonName,
+ w.phone AS salesPersonPhone,
+ CONCAT(wu.name, '@verdnatura.es') AS salesPersonEmail
+ FROM client c
+ JOIN account.user u ON u.id = c.id
+ LEFT JOIN worker w ON w.id = c.salesPersonFk
+ LEFT JOIN account.user wu ON wu.id = w.userFk
+ WHERE c.id = ?`, [clientId]);
+ },
+ },
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build()
+ },
+ props: {
+ clientId: {
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/client-welcome/locale/es.yml b/print/templates/email/client-welcome/locale/es.yml
new file mode 100644
index 0000000000..ac43a7cc63
--- /dev/null
+++ b/print/templates/email/client-welcome/locale/es.yml
@@ -0,0 +1,55 @@
+subject: Bienvenido a Verdnatura
+title: "¡Te damos la bienvenida!"
+dearClient: Estimado cliente
+clientData: 'Tus datos para poder comprar en la web de Verdnatura (https://www.verdnatura.es)
+ o en nuestras aplicaciones para iOS y Android (Ver tutorial de uso), son'
+clientId: Identificador de cliente
+user: Usuario
+password: Contraseña
+passwordResetText: Haz clic en '¿Has olvidado tu contraseña?'
+sections:
+ howToBuy:
+ title: Cómo hacer un pedido
+ description: 'Para realizar un pedido en nuestra web, debes configurarlo indicando:'
+ requeriments:
+ - Si quieres recibir el pedido (por agencia o por nuestro propio reparto) o si
+ lo prefieres recoger en alguno de nuestros almacenes.
+ - La fecha en la que quieres recibir el pedido (se preparará el día anterior).
+ - La dirección de entrega o el almacén donde quieres recoger el pedido.
+ stock: En nuestra web y aplicaciones puedes visualizar el stock disponible de
+ flor cortada, verdes, plantas, complementos y artificial. Ten en cuenta que
+ dicho stock puede variar en función de la fecha seleccionada al configurar el
+ pedido. Es importante CONFIRMAR los pedidos para que la mercancía quede reservada.
+ delivery: El reparto se realiza de lunes a sábado según la zona en la que te encuentres.
+ Por regla general, los pedidos que se entregan por agencia, deben estar confirmados
+ y pagados antes de las 17h del día en que se preparan (el día anterior a recibirlos),
+ aunque esto puede variar si el pedido se envía a través de nuestro reparto y
+ según la zona.
+ howToPay:
+ title: Cómo pagar
+ description: 'Las formas de pago admitidas en Verdnatura son:'
+ options:
+ - Con tarjeta a través de nuestra plataforma web (al confirmar
+ el pedido).
+ - Mediante giro bancario mensual, modalidad que hay que solicitar
+ y tramitar.
+ toConsider:
+ title: Cosas a tener en cuenta
+ description: Verdnatura vende EXCLUSIVAMENTE a profesionales, por lo que debes
+ remitirnos el Modelo 036 ó 037, para comprobar que está dado/a de alta en el
+ epígrafe correspondiente al comercio de flores.
+ claimsPolicy:
+ title: POLÍTICA DE RECLAMACIONES
+ description: Verdnatura aceptará las reclamaciones que se realicen dentro de los
+ dos días naturales siguientes a la recepción del pedido (incluyendo el mismo
+ día de la recepción). Pasado este plazo no se aceptará ninguna reclamación.
+help: Cualquier duda que te surja, no dudes en consultarla, ¡estamos para
+ atenderte!
+salesPersonName: Soy tu comercial y mi nombre es
+salesPersonPhone: Teléfono y whatsapp
+salesPersonEmail: Dirección de e-mail
diff --git a/print/templates/email/delivery-note/assets/css/import.js b/print/templates/email/delivery-note/assets/css/import.js
new file mode 100644
index 0000000000..b44d6bd371
--- /dev/null
+++ b/print/templates/email/delivery-note/assets/css/import.js
@@ -0,0 +1,8 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/templates/email/delivery-note/attachments.json b/print/templates/email/delivery-note/attachments.json
new file mode 100644
index 0000000000..d963db0c59
--- /dev/null
+++ b/print/templates/email/delivery-note/attachments.json
@@ -0,0 +1,4 @@
+[{
+ "filename": "delivery-note.pdf",
+ "component": "delivery-note"
+}]
\ No newline at end of file
diff --git a/print/templates/email/delivery-note/delivery-note.html b/print/templates/email/delivery-note/delivery-note.html
new file mode 100644
index 0000000000..ff6186eb2d
--- /dev/null
+++ b/print/templates/email/delivery-note/delivery-note.html
@@ -0,0 +1,51 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('title') }}
+
{{$t('dearClient')}},
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/delivery-note/delivery-note.js b/print/templates/email/delivery-note/delivery-note.js
new file mode 100755
index 0000000000..64839b8e0e
--- /dev/null
+++ b/print/templates/email/delivery-note/delivery-note.js
@@ -0,0 +1,17 @@
+const Component = require(`${appPath}/core/component`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+
+module.exports = {
+ name: 'delivery-note',
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build()
+ },
+ props: {
+ ticketId: {
+ type: String,
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/delivery-note/locale/es.yml b/print/templates/email/delivery-note/locale/es.yml
new file mode 100644
index 0000000000..cdc63e8eba
--- /dev/null
+++ b/print/templates/email/delivery-note/locale/es.yml
@@ -0,0 +1,6 @@
+subject: Aquí tienes tu albarán
+title: "¡Este es tu albarán!"
+dearClient: Estimado cliente
+clientData: A continuación adjuntamos tu albarán.
+help: Cualquier duda que te surja, no dudes en consultarla, ¡estamos para
+ atenderte!
\ No newline at end of file
diff --git a/print/templates/email/driver-route/assets/css/import.js b/print/templates/email/driver-route/assets/css/import.js
new file mode 100644
index 0000000000..b44d6bd371
--- /dev/null
+++ b/print/templates/email/driver-route/assets/css/import.js
@@ -0,0 +1,8 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/templates/email/driver-route/attachments.json b/print/templates/email/driver-route/attachments.json
new file mode 100644
index 0000000000..e80a74ce0a
--- /dev/null
+++ b/print/templates/email/driver-route/attachments.json
@@ -0,0 +1,4 @@
+[{
+ "filename": "driver-route.pdf",
+ "component": "driver-route"
+}]
\ No newline at end of file
diff --git a/print/templates/email/driver-route/driver-route.html b/print/templates/email/driver-route/driver-route.html
new file mode 100644
index 0000000000..33fcebd22a
--- /dev/null
+++ b/print/templates/email/driver-route/driver-route.html
@@ -0,0 +1,49 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('title') }}
+
{{$t('description.instructions')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/driver-route/driver-route.js b/print/templates/email/driver-route/driver-route.js
new file mode 100755
index 0000000000..de1dd9c39a
--- /dev/null
+++ b/print/templates/email/driver-route/driver-route.js
@@ -0,0 +1,17 @@
+const Component = require(`${appPath}/core/component`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+
+module.exports = {
+ name: 'driver-route',
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build()
+ },
+ props: {
+ routeId: {
+ type: String,
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/driver-route/locale/es.yml b/print/templates/email/driver-route/locale/es.yml
new file mode 100644
index 0000000000..f5ed12e5d2
--- /dev/null
+++ b/print/templates/email/driver-route/locale/es.yml
@@ -0,0 +1,4 @@
+subject: Hoja de ruta
+title: Hoja de ruta
+description:
+ instructions: Adjuntamos tu hoja de ruta.
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-nd/assets/css/import.js b/print/templates/email/letter-debtor-nd/assets/css/import.js
new file mode 100644
index 0000000000..624404a6c1
--- /dev/null
+++ b/print/templates/email/letter-debtor-nd/assets/css/import.js
@@ -0,0 +1,9 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
+
diff --git a/print/templates/email/letter-debtor-nd/attachments.json b/print/templates/email/letter-debtor-nd/attachments.json
new file mode 100644
index 0000000000..ae8a3f4cca
--- /dev/null
+++ b/print/templates/email/letter-debtor-nd/attachments.json
@@ -0,0 +1,4 @@
+[{
+ "filename": "letter-debtor.pdf",
+ "component": "letter-debtor"
+}]
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-nd/letter-debtor-nd.html b/print/templates/email/letter-debtor-nd/letter-debtor-nd.html
new file mode 100644
index 0000000000..7a2ae877ab
--- /dev/null
+++ b/print/templates/email/letter-debtor-nd/letter-debtor-nd.html
@@ -0,0 +1,93 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('title') }}
+
{{ $t('sections.introduction.title') }},
+
{{ $t('sections.introduction.description') }}
+
{{ $t('sections.introduction.terms') }}
+
+
+ {{ $t('sections.payMethod.description') }}:
+
+
+ {{ option }}
+
+
+
+
+
+ {{ $t('sections.legalAction.description') }}:
+
+
+ {{ option }}
+
+
+
+
+
+
+
+
+
+
{{debtor.bankName}}
+
{{debtor.iban}}
+
+
{{$t('transferAccount') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-nd/letter-debtor-nd.js b/print/templates/email/letter-debtor-nd/letter-debtor-nd.js
new file mode 100755
index 0000000000..7d7cc84ef9
--- /dev/null
+++ b/print/templates/email/letter-debtor-nd/letter-debtor-nd.js
@@ -0,0 +1,47 @@
+const Component = require(`${appPath}/core/component`);
+const db = require(`${appPath}/core/database`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+const attachment = new Component('attachment');
+const attachments = require('./attachments.json');
+
+module.exports = {
+ name: 'letter-debtor-nd',
+ async serverPrefetch() {
+ this.debtor = await this.fetchDebtor(this.clientId, this.companyId);
+
+ if (!this.debtor)
+ throw new Error('Something went wrong');
+ },
+ data() {
+ return {attachments};
+ },
+ methods: {
+ fetchDebtor(clientId, companyId) {
+ return db.findOne(`
+ SELECT
+ c.dueDay,
+ c.iban,
+ sa.iban,
+ be.name AS bankName
+ FROM client c
+ JOIN company AS cny
+ JOIN supplierAccount AS sa ON sa.id = cny.supplierAccountFk
+ JOIN bankEntity be ON be.id = sa.bankEntityFk
+ WHERE c.id = ? AND cny.id = ?`, [clientId, companyId]);
+ }
+ },
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build(),
+ 'attachment': attachment.build()
+ },
+ props: {
+ clientId: {
+ required: true
+ },
+ companyId: {
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/letter-debtor-nd/locale/es.yml b/print/templates/email/letter-debtor-nd/locale/es.yml
new file mode 100644
index 0000000000..506c55dd62
--- /dev/null
+++ b/print/templates/email/letter-debtor-nd/locale/es.yml
@@ -0,0 +1,26 @@
+subject: Reiteración de aviso por saldo deudor
+title: Aviso reiterado
+sections:
+ introduction:
+ title: Estimado cliente
+ description: Nos dirigimos a ti nuevamente para informarte que sigue pendiente
+ tu deuda con nuestra empresa, tal y como puedes comprobar en el extracto adjunto.
+ terms: Dado que los plazos de pago acordados están ampliamente superados, no procede
+ mayor dilación en la liquidación del importe adeudado.
+ payMethod:
+ description: Para ello dispones de las siguientes formas de pago
+ options:
+ - Pago online desde nuestra web.
+ - Ingreso o transferencia al número de cuenta que detallamos al pie de esta carta,
+ indicando el número de cliente.
+ legalAction:
+ description: En caso de no ser atendido este apremio de pago, nos veremos obligados
+ a iniciar las acciones legales que procedan, entre las que están
+ options:
+ - Inclusión en ficheros negativos sobre solvencia patrimonial y crédito.
+ - Reclamación judicial.
+ - Cesión de deuda a una empresa de gestión de cobro.
+contactPhone: Para consultas, puedes ponerte en contacto con nosotros en el 96
+ 324 21 00.
+conclusion: En espera de tus noticias. Gracias por tu atención.
+transferAccount: Datos para transferencia bancaria
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-st/assets/css/import.js b/print/templates/email/letter-debtor-st/assets/css/import.js
new file mode 100644
index 0000000000..624404a6c1
--- /dev/null
+++ b/print/templates/email/letter-debtor-st/assets/css/import.js
@@ -0,0 +1,9 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
+
diff --git a/print/templates/email/letter-debtor-st/attachments.json b/print/templates/email/letter-debtor-st/attachments.json
new file mode 100644
index 0000000000..ae8a3f4cca
--- /dev/null
+++ b/print/templates/email/letter-debtor-st/attachments.json
@@ -0,0 +1,4 @@
+[{
+ "filename": "letter-debtor.pdf",
+ "component": "letter-debtor"
+}]
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-st/letter-debtor-st.html b/print/templates/email/letter-debtor-st/letter-debtor-st.html
new file mode 100644
index 0000000000..039885e869
--- /dev/null
+++ b/print/templates/email/letter-debtor-st/letter-debtor-st.html
@@ -0,0 +1,76 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('title') }}
+
{{ $t('sections.introduction.title') }},
+
{{ $t('sections.introduction.description') }}
+
+
{{ $t('checkExtract') }}
+
{{ $t('checkValidData') }}
+
{{ $t('payMethod') }}
+
{{ $t('conclusion') }}
+
+
+
+
{{debtor.bankName}}
+
{{debtor.iban}}
+
+
{{$t('transferAccount') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-st/letter-debtor-st.js b/print/templates/email/letter-debtor-st/letter-debtor-st.js
new file mode 100755
index 0000000000..c34a9320a3
--- /dev/null
+++ b/print/templates/email/letter-debtor-st/letter-debtor-st.js
@@ -0,0 +1,47 @@
+const Component = require(`${appPath}/core/component`);
+const db = require(`${appPath}/core/database`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+const attachment = new Component('attachment');
+const attachments = require('./attachments.json');
+
+module.exports = {
+ name: 'letter-debtor-st',
+ async serverPrefetch() {
+ this.debtor = await this.fetchDebtor(this.clientId, this.companyId);
+
+ if (!this.debtor)
+ throw new Error('Something went wrong');
+ },
+ data() {
+ return {attachments};
+ },
+ methods: {
+ fetchDebtor(clientId, companyId) {
+ return db.findOne(`
+ SELECT
+ c.dueDay,
+ c.iban,
+ sa.iban,
+ be.name AS bankName
+ FROM client c
+ JOIN company AS cny
+ JOIN supplierAccount AS sa ON sa.id = cny.supplierAccountFk
+ JOIN bankEntity be ON be.id = sa.bankEntityFk
+ WHERE c.id = ? AND cny.id = ?`, [clientId, companyId]);
+ }
+ },
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build(),
+ 'attachment': attachment.build()
+ },
+ props: {
+ clientId: {
+ required: true
+ },
+ companyId: {
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/letter-debtor-st/locale/es.yml b/print/templates/email/letter-debtor-st/locale/es.yml
new file mode 100644
index 0000000000..d65014a1d0
--- /dev/null
+++ b/print/templates/email/letter-debtor-st/locale/es.yml
@@ -0,0 +1,19 @@
+subject: Aviso inicial por saldo deudor
+title: Aviso inicial por saldo deudor
+sections:
+ introduction:
+ title: Estimado cliente
+ description: Por el presente escrito te comunicamos que, según nuestros datos
+ contables, tu cuenta tiene un saldo pendiente de liquidar.
+checkExtract: Te solicitamos compruebes que el extracto adjunto corresponde con los
+ datos de que dispones. Nuestro departamento de administración te aclarará gustosamente
+ cualquier duda que puedas tener, e igualmente te facilitará cualquier documento
+ que solicites.
+checkValidData: Si al comprobar los datos aportados resultaran correctos, te rogamos
+ procedas a regularizar tu situación.
+payMethod: Si no deseas desplazarte personalmente hasta nuestras oficinas, puedes
+ realizar el pago mediante transferencia bancaria a la cuenta que figura al pie del
+ comunicado, indicando tu número de cliente, o bien puedes realizar el pago online
+ desde nuestra página web.
+conclusion: De antemano te agradecemos tu amable colaboración.
+transferAccount: Datos para transferencia bancaria
diff --git a/print/templates/email/payment-update/assets/css/import.js b/print/templates/email/payment-update/assets/css/import.js
new file mode 100644
index 0000000000..b44d6bd371
--- /dev/null
+++ b/print/templates/email/payment-update/assets/css/import.js
@@ -0,0 +1,8 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/templates/email/payment-update/locale/es.yml b/print/templates/email/payment-update/locale/es.yml
new file mode 100644
index 0000000000..464b525914
--- /dev/null
+++ b/print/templates/email/payment-update/locale/es.yml
@@ -0,0 +1,18 @@
+subject: Cambios en las condiciones de pago
+title: Cambios en las condiciones
+sections:
+ introduction:
+ title: Estimado cliente
+ description: Te informamos que han cambiado las condiciones de pago de tu cuenta.
+ A continuación te indicamos las nuevas condiciones
+ pay:
+ method: Método de pago
+ day: Día de pago
+ dueDay: "{0} de cada mes"
+ cardImplicates: Tu modo de pago actual implica que deberás abonar el importe de
+ los pedidos realizados en el mismo día para que se puedan enviar.
+ accountImplicates: Tu modo de pago actual implica que se te pasará un cargo a
+ la cuenta terminada en '{0}' por el importe pendiente, al vencimiento
+ establecido en las condiciones.
+notifyAnError: En el caso de detectar algún error en los datos indicados o para cualquier
+ aclaración, debes dirigirte a tu comercial.
diff --git a/print/templates/email/payment-update/locale/fr.yml b/print/templates/email/payment-update/locale/fr.yml
new file mode 100644
index 0000000000..20fa7a5f4e
--- /dev/null
+++ b/print/templates/email/payment-update/locale/fr.yml
@@ -0,0 +1,17 @@
+subject: Changement des C.G.V
+title: Changement des C.G.V
+sections:
+ introduction:
+ title: Chèr client
+ description: Nous vous informons que les conditions de paiement ont changé. Voici
+ les nouvelles conditions
+ pay:
+ method: Méthode de paiement
+ day: Date paiement
+ dueDay: "{0} de chaque mois"
+ cardImplicates: Avec votre mode de règlement vous devrez payer le montant des
+ commandes avant son départ.
+ accountImplicates: Avec ce mode de règlement nous vous passerons un prélèvement
+ automatique dans votre compte bancaire se termine dans '{0}'
+ our le montant dû, au date à terme établi en nos conditions.
+notifyAnError: Pour tout renseignement contactez votre commercial.
diff --git a/print/templates/email/payment-update/payment-update.html b/print/templates/email/payment-update/payment-update.html
new file mode 100644
index 0000000000..27c9352ef0
--- /dev/null
+++ b/print/templates/email/payment-update/payment-update.html
@@ -0,0 +1,68 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/payment-update/payment-update.js b/print/templates/email/payment-update/payment-update.js
new file mode 100755
index 0000000000..8510e088e6
--- /dev/null
+++ b/print/templates/email/payment-update/payment-update.js
@@ -0,0 +1,43 @@
+const Component = require(`${appPath}/core/component`);
+const db = require(`${appPath}/core/database`);
+const emailHeader = new Component('email-header');
+const emailFooter = new Component('email-footer');
+
+module.exports = {
+ name: 'payment-update',
+ async serverPrefetch() {
+ this.client = await this.fetchClient(this.clientId);
+
+ if (!this.client)
+ throw new Error('Something went wrong');
+ },
+ computed: {
+ accountAddress: function() {
+ return this.iban.slice(-4);
+ },
+ },
+ methods: {
+ // Redmine #1854 Replace payMethodId by code
+ fetchClient(id) {
+ return db.findOne(
+ `SELECT
+ c.dueDay,
+ c.iban,
+ pm.id payMethodId,
+ pm.name payMethodName
+ FROM client c
+ JOIN payMethod pm ON pm.id = c.payMethodFk
+ JOIN account.user u ON u.id = c.id
+ WHERE c.id = :clientId`, {clientId: id});
+ }
+ },
+ components: {
+ 'email-header': emailHeader.build(),
+ 'email-footer': emailFooter.build()
+ },
+ props: {
+ clientId: {
+ required: true
+ }
+ }
+};
diff --git a/print/templates/email/printer-setup/assets/css/import.js b/print/templates/email/printer-setup/assets/css/import.js
new file mode 100644
index 0000000000..b44d6bd371
--- /dev/null
+++ b/print/templates/email/printer-setup/assets/css/import.js
@@ -0,0 +1,8 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/report/printer-setup/assets/files/model.ezp b/print/templates/email/printer-setup/assets/files/model.ezp
similarity index 100%
rename from print/report/printer-setup/assets/files/model.ezp
rename to print/templates/email/printer-setup/assets/files/model.ezp
diff --git a/print/report/printer-setup/assets/files/port.png b/print/templates/email/printer-setup/assets/files/port.png
similarity index 100%
rename from print/report/printer-setup/assets/files/port.png
rename to print/templates/email/printer-setup/assets/files/port.png
diff --git a/print/templates/email/printer-setup/attachments.json b/print/templates/email/printer-setup/attachments.json
new file mode 100644
index 0000000000..2f828a6a00
--- /dev/null
+++ b/print/templates/email/printer-setup/attachments.json
@@ -0,0 +1,12 @@
+[{
+ "filename": "model.ezp",
+ "component": "printer-setup",
+ "path": "/assets/files/model.ezp",
+ "cid": "model.ezp"
+},
+{
+ "filename": "port.png",
+ "component": "printer-setup",
+ "path": "/assets/files/port.png",
+ "cid": "port.png"
+}]
\ No newline at end of file
diff --git a/print/templates/email/printer-setup/locale/es.yml b/print/templates/email/printer-setup/locale/es.yml
new file mode 100644
index 0000000000..39568bd1b9
--- /dev/null
+++ b/print/templates/email/printer-setup/locale/es.yml
@@ -0,0 +1,50 @@
+subject: Instalación y configuración de impresora
+title: "¡Gracias por tu confianza!"
+description:
+ dear: Estimado cliente
+ instructions: Sigue las instrucciones especificadas en este correo para llevar a
+ cabo la instalación de la impresora.
+ followGuide: Puedes utilizar como guía, el vídeo del montaje del ribon y la cinta
+ https://www.youtube.com/watch?v=qhb0kgQF3o8. También
+ necesitarás el QLabel, el programa para imprimir las cintas.
+ downloadFrom: Puedes descargarlo desde este enlace https://godex.s3-accelerate.amazonaws.com/gGnOPoojkP6vC1lgmrbEqQ.file?v01
+sections:
+ QLabel:
+ title: Utilización de QLabel
+ description: Para utilizar el programa de impresión de cintas sigue estos pasos
+ steps:
+ - Abre el programa QLabel
+ - Haz clic en el icono de la barra superior con forma de 'carpeta'
+ - Selecciona el archivo llamado 'model.ezp' adjunto en este correo, y haz clic
+ en abrir
+ - Ve a 'File' -> 'Save as' y guárdalo en el escritorio con otro nombre
+ - Cierra el Qlabel y abre el archivo que acabamos de guardar
+ - Haz clic encima del texto con el botón secundario del ratón
+ - Elige la primera opción 'setup'
+ - Cambia el texto para imprimir
+ - Haz clic en el botón 'Ok'
+ - Desplázate con el ratón para ver la medida máxima que ocupa el texto
+ - Haz clic encima del texto con el botón secundario del ratón
+ - Elige la segunda opción 'Setup printer'
+ - Haz clic en la primera pestaña 'Label Setup'
+ - Modifica la propiedad 'Paper Height' con la medida máxima consultada anteriormente
+ - 'Comprueba el puerto de la impresora, botón de de la derecha ''SETUP PRINTER''
+ y en la parte derecha, igual como la imagen que adjuntamos, seleccionar la que
+ ponga ''USB00x: GODEX'''
+ - Haz clic en el botón 'Ok'
+ - Haz clic sobre el icono de la impresora
+ - Haz clic en 'Print'
+ help:
+ title: "¿Necesitas ayuda?"
+ description: Si necesitas ayuda, descárgate nuestro programa de soporte para poder
+ conectarnos remotamente a tu equipo y hacerte la instalación. Proporciónanos
+ un horario de contacto para atenderte, y contactaremos contigo.
+ remoteSupport: Puedes descargarte el programa desde este enlace http://soporte.verdnatura.es.
+help: Cualquier duda que te surja, no dudes en consultarla, ¡estamos para
+ atenderte!
+salesPersonName: Soy tu comercial y mi nombre es
+salesPersonPhone: Teléfono y whatsapp
+salesPersonEmail: Dirección de e-mail
\ No newline at end of file
diff --git a/print/templates/email/printer-setup/printer-setup.html b/print/templates/email/printer-setup/printer-setup.html
new file mode 100644
index 0000000000..08ef588d40
--- /dev/null
+++ b/print/templates/email/printer-setup/printer-setup.html
@@ -0,0 +1,93 @@
+
+
+
+ {{ $t('subject') }}
+
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/reports/letter-debtor/letter-debtor.js b/print/templates/reports/letter-debtor/letter-debtor.js
new file mode 100755
index 0000000000..b2983eb513
--- /dev/null
+++ b/print/templates/reports/letter-debtor/letter-debtor.js
@@ -0,0 +1,89 @@
+const Component = require(`${appPath}/core/component`);
+const db = require(`${appPath}/core/database`);
+const reportHeader = new Component('report-header');
+const reportFooter = new Component('report-footer');
+
+module.exports = {
+ name: 'letter-debtor',
+ async serverPrefetch() {
+ this.client = await this.fetchClient(this.clientId);
+ this.sales = await this.fetchSales(this.clientId, this.companyId);
+
+ if (!this.client)
+ throw new Error('Something went wrong');
+ },
+ computed: {
+ dated: function() {
+ const filters = this.$options.filters;
+
+ return filters.date(new Date(), '%d-%m-%Y');
+ }
+ },
+ data() {
+ return {totalBalance: 0.00};
+ },
+ methods: {
+ fetchClient(clientId) {
+ return db.findOne(
+ `SELECT
+ c.id,
+ c.socialName,
+ c.street,
+ c.postcode,
+ c.city,
+ c.fi,
+ p.name AS province,
+ ct.country
+ FROM client c
+ JOIN country ct ON ct.id = c.countryFk
+ LEFT JOIN province p ON p.id = c.provinceFk
+ WHERE c.id = ?`, [clientId]);
+ },
+ fetchSales(clientId, companyId) {
+ return db.find(
+ `CALL vn.clientGetDebtDiary(:clientId, :companyId)`, {
+ clientId: clientId,
+ companyId: companyId,
+ }).then(rows => {
+ return rows[0];
+ });
+ },
+ getBalance(sale) {
+ if (sale.debtOut)
+ this.totalBalance += parseFloat(sale.debtOut);
+
+ if (sale.debtIn)
+ this.totalBalance -= parseFloat(sale.debtIn);
+
+ return parseFloat(this.totalBalance.toFixed(2));
+ },
+ getTotalDebtOut() {
+ let debtOut = 0.00;
+ this.sales.forEach(sale => {
+ debtOut += sale.debtOut ? parseFloat(sale.debtOut) : 0;
+ });
+
+ return debtOut.toFixed(2);
+ },
+ getTotalDebtIn() {
+ let debtIn = 0.00;
+ this.sales.forEach(sale => {
+ debtIn += sale.debtIn ? parseFloat(sale.debtIn) : 0;
+ });
+
+ return debtIn.toFixed(2);
+ },
+ },
+ components: {
+ 'report-header': reportHeader.build(),
+ 'report-footer': reportFooter.build()
+ },
+ props: {
+ clientId: {
+ required: true
+ },
+ companyId: {
+ required: true
+ }
+ }
+};
diff --git a/print/templates/reports/letter-debtor/locale/es.yml b/print/templates/reports/letter-debtor/locale/es.yml
new file mode 100644
index 0000000000..09a31ee5bc
--- /dev/null
+++ b/print/templates/reports/letter-debtor/locale/es.yml
@@ -0,0 +1,10 @@
+title: Extracto
+claimId: Reclamación
+clientId: Cliente
+clientData: Datos del cliente
+dated: Fecha
+concept: Concepto
+invoiced: Facturado
+payed: Pagado
+balance: Saldo
+client: Cliente {0}
\ No newline at end of file
diff --git a/print/report/rpt-lcr/assets/css/index.js b/print/templates/reports/receipt/assets/css/import.js
similarity index 64%
rename from print/report/rpt-lcr/assets/css/index.js
rename to print/templates/reports/receipt/assets/css/import.js
index 515dea7503..a2a9334cb1 100644
--- a/print/report/rpt-lcr/assets/css/index.js
+++ b/print/templates/reports/receipt/assets/css/import.js
@@ -1,6 +1,6 @@
-const CssReader = require(`${appPath}/lib/cssReader`);
+const Stylesheet = require(`${appPath}/core/stylesheet`);
-module.exports = new CssReader([
+module.exports = new Stylesheet([
`${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`,
diff --git a/print/report/rpt-receipt/assets/css/style.css b/print/templates/reports/receipt/assets/css/style.css
similarity index 100%
rename from print/report/rpt-receipt/assets/css/style.css
rename to print/templates/reports/receipt/assets/css/style.css
diff --git a/print/report/rpt-lcr/assets/images/signature.png b/print/templates/reports/receipt/assets/images/signature.png
similarity index 100%
rename from print/report/rpt-lcr/assets/images/signature.png
rename to print/templates/reports/receipt/assets/images/signature.png
diff --git a/print/lib/filters/index.js b/print/templates/reports/receipt/locale/en.yml
similarity index 100%
rename from print/lib/filters/index.js
rename to print/templates/reports/receipt/locale/en.yml
diff --git a/print/templates/reports/receipt/locale/es.yml b/print/templates/reports/receipt/locale/es.yml
new file mode 100644
index 0000000000..67b9a948f2
--- /dev/null
+++ b/print/templates/reports/receipt/locale/es.yml
@@ -0,0 +1,17 @@
+title: 'Recibo'
+date: 'Fecha'
+payed: 'En {0}, a {1} de {2} de {3}'
+client: 'Cliente {0}'
+months:
+ - 'Enero'
+ - 'Febrero'
+ - 'Marzo'
+ - 'Abril'
+ - 'Mayo'
+ - 'Junio'
+ - 'Julio'
+ - 'Agosto'
+ - 'Septiembre'
+ - 'Octubre'
+ - 'Noviembre'
+ - 'Diciembre'
\ No newline at end of file
diff --git a/print/templates/reports/receipt/receipt.html b/print/templates/reports/receipt/receipt.html
new file mode 100644
index 0000000000..ffcc4ffb16
--- /dev/null
+++ b/print/templates/reports/receipt/receipt.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{$t('title')}}
+
+ Recibo de {{client.socialName}},
+ la cantidad de {{receipt.amountPaid}} € en concepto de 'entrega a cuenta',
+ quedando pendiente en la cuenta del cliente
+ un saldo de {{receipt.amountUnpaid}} €.
+
+
+
\ No newline at end of file
diff --git a/print/templates/reports/receipt/receipt.js b/print/templates/reports/receipt/receipt.js
new file mode 100755
index 0000000000..1b220bddaf
--- /dev/null
+++ b/print/templates/reports/receipt/receipt.js
@@ -0,0 +1,49 @@
+const Component = require(`${appPath}/core/component`);
+const db = require(`${appPath}/core/database`);
+const reportHeader = new Component('report-header');
+const reportFooter = new Component('report-footer');
+
+module.exports = {
+ name: 'receipt',
+ async serverPrefetch() {
+ this.client = await this.fetchClient(this.receiptId);
+ this.receipt = await this.fetchReceipt(this.receiptId);
+
+ if (!this.receipt)
+ throw new Error('Something went wrong');
+ },
+ methods: {
+ fetchClient(receiptId) {
+ return db.findOne(
+ `SELECT
+ c.id,
+ c.socialName,
+ u.lang locale
+ FROM receipt r
+ JOIN client c ON c.id = r.clientFk
+ JOIN account.user u ON u.id = c.id
+ WHERE r.id = ?`, [receiptId]);
+ },
+ fetchReceipt(receiptId) {
+ return db.findOne(
+ `SELECT
+ r.id,
+ r.amountPaid,
+ r.amountUnpaid,
+ r.payed,
+ r.companyFk
+ FROM receipt r
+ JOIN client c ON c.id = r.clientFk
+ WHERE r.id = ?`, [receiptId]);
+ }
+ },
+ components: {
+ 'report-header': reportHeader.build(),
+ 'report-footer': reportFooter.build()
+ },
+ props: {
+ receiptId: {
+ required: true
+ }
+ }
+};
diff --git a/print/report/rpt-claim-pickup-order/assets/css/index.js b/print/templates/reports/rpt-lcr/assets/css/index.js
similarity index 100%
rename from print/report/rpt-claim-pickup-order/assets/css/index.js
rename to print/templates/reports/rpt-lcr/assets/css/index.js
diff --git a/print/report/rpt-lcr/assets/css/style.css b/print/templates/reports/rpt-lcr/assets/css/style.css
similarity index 100%
rename from print/report/rpt-lcr/assets/css/style.css
rename to print/templates/reports/rpt-lcr/assets/css/style.css
diff --git a/print/report/rpt-receipt/assets/images/signature.png b/print/templates/reports/rpt-lcr/assets/images/signature.png
similarity index 100%
rename from print/report/rpt-receipt/assets/images/signature.png
rename to print/templates/reports/rpt-lcr/assets/images/signature.png
diff --git a/print/report/rpt-lcr/index.html b/print/templates/reports/rpt-lcr/index.html
similarity index 100%
rename from print/report/rpt-lcr/index.html
rename to print/templates/reports/rpt-lcr/index.html
diff --git a/print/report/rpt-lcr/index.js b/print/templates/reports/rpt-lcr/index.js
similarity index 100%
rename from print/report/rpt-lcr/index.js
rename to print/templates/reports/rpt-lcr/index.js
diff --git a/print/report/rpt-lcr/locale.js b/print/templates/reports/rpt-lcr/locale.js
similarity index 100%
rename from print/report/rpt-lcr/locale.js
rename to print/templates/reports/rpt-lcr/locale.js
diff --git a/print/templates/reports/sepa-core/assets/css/import.js b/print/templates/reports/sepa-core/assets/css/import.js
new file mode 100644
index 0000000000..fd8796c2bf
--- /dev/null
+++ b/print/templates/reports/sepa-core/assets/css/import.js
@@ -0,0 +1,9 @@
+const Stylesheet = require(`${appPath}/core/stylesheet`);
+
+module.exports = new Stylesheet([
+ `${appPath}/common/css/spacing.css`,
+ `${appPath}/common/css/misc.css`,
+ `${appPath}/common/css/layout.css`,
+ `${appPath}/common/css/report.css`,
+ `${__dirname}/style.css`])
+ .mergeStyles();
diff --git a/print/report/rpt-sepa-core/assets/css/style.css b/print/templates/reports/sepa-core/assets/css/style.css
similarity index 100%
rename from print/report/rpt-sepa-core/assets/css/style.css
rename to print/templates/reports/sepa-core/assets/css/style.css
diff --git a/print/templates/reports/sepa-core/locale/es.yml b/print/templates/reports/sepa-core/locale/es.yml
new file mode 100644
index 0000000000..d8955bc1f8
--- /dev/null
+++ b/print/templates/reports/sepa-core/locale/es.yml
@@ -0,0 +1,39 @@
+title: Orden de domiciliación de adeudo SEPA CORE
+description: Mediante la firma de esta orden de domiciliación, el deudor autoriza
+ (A) al acreedor a enviar instrucciones a la entidad del deudor para adeudar su cuenta
+ y (B) a la entidad para efectuar los adeudos en su cuenta siguiendo las instrucciones
+ del acreedor.Como parte de sus derechos, el deudor está legitimado al reembolso
+ por su entidad en los términos y condiciones del contrato suscrito con la misma.
+ La solicitud de reembolso deberá efectuarse dentro de las ocho semanas que adeudo
+ en cuenta. Puede obtener información adicional sobre sus derechos en su entidad
+ financiera.
+documentCopy: Debe llevar a su Entidad Bancaria una copia del documento firmado para
+ que lo registre y evitar la devolución.
+mandatoryFields: TODOS LOS CAMPOS HAN DE SER CUMPLIMENTADOS OBLIGATORIAMENTE.
+sendOrder: UNA VEZ FIRMADA ESTA ORDEN DE DOMICILIACIÓN DEBE SER ENVIADA AL ACREEDOR
+ PARA SU CUSTODIA Y ES RECOMENDABLE FACILITAR UNA COPIA A SU ENTIDAD BANCARIA.
+supplier:
+ toCompleteBySupplier: A cumplimentar por el acreedor
+ orderReference: Referencia de la orden de domiciliación
+ identifier: Identificador del acreedor
+ name: Nombre del acreedor
+ street: Dirección
+ location: CP - Población - Provincia
+ country: País
+client:
+ toCompleteByClient: A cumplimentar por el deudor
+ name: Nombre del deudor/es
+ street: Dirección del deudor
+ location: CP - Población - Provincia
+ country: País del deudor
+ swift: Swift BIC
+ accountNumber: Número de cuenta - IBAN
+ accountHolder: "(Titular/es de la cuenta de cargo)"
+ accountNumberFormat: En España el IBAN consta de 24 posiciones comenzando siempre
+ por ES
+ paymentType: Tipo de pago
+ recurrent: Recurrente
+ unique: Único
+ signLocation: Fecha - Localidad
+ sign: Firma del deudor y sello
+order: Ord. domiciliación {0}
diff --git a/print/templates/reports/sepa-core/locale/fr.yml b/print/templates/reports/sepa-core/locale/fr.yml
new file mode 100644
index 0000000000..d8955bc1f8
--- /dev/null
+++ b/print/templates/reports/sepa-core/locale/fr.yml
@@ -0,0 +1,39 @@
+title: Orden de domiciliación de adeudo SEPA CORE
+description: Mediante la firma de esta orden de domiciliación, el deudor autoriza
+ (A) al acreedor a enviar instrucciones a la entidad del deudor para adeudar su cuenta
+ y (B) a la entidad para efectuar los adeudos en su cuenta siguiendo las instrucciones
+ del acreedor.Como parte de sus derechos, el deudor está legitimado al reembolso
+ por su entidad en los términos y condiciones del contrato suscrito con la misma.
+ La solicitud de reembolso deberá efectuarse dentro de las ocho semanas que adeudo
+ en cuenta. Puede obtener información adicional sobre sus derechos en su entidad
+ financiera.
+documentCopy: Debe llevar a su Entidad Bancaria una copia del documento firmado para
+ que lo registre y evitar la devolución.
+mandatoryFields: TODOS LOS CAMPOS HAN DE SER CUMPLIMENTADOS OBLIGATORIAMENTE.
+sendOrder: UNA VEZ FIRMADA ESTA ORDEN DE DOMICILIACIÓN DEBE SER ENVIADA AL ACREEDOR
+ PARA SU CUSTODIA Y ES RECOMENDABLE FACILITAR UNA COPIA A SU ENTIDAD BANCARIA.
+supplier:
+ toCompleteBySupplier: A cumplimentar por el acreedor
+ orderReference: Referencia de la orden de domiciliación
+ identifier: Identificador del acreedor
+ name: Nombre del acreedor
+ street: Dirección
+ location: CP - Población - Provincia
+ country: País
+client:
+ toCompleteByClient: A cumplimentar por el deudor
+ name: Nombre del deudor/es
+ street: Dirección del deudor
+ location: CP - Población - Provincia
+ country: País del deudor
+ swift: Swift BIC
+ accountNumber: Número de cuenta - IBAN
+ accountHolder: "(Titular/es de la cuenta de cargo)"
+ accountNumberFormat: En España el IBAN consta de 24 posiciones comenzando siempre
+ por ES
+ paymentType: Tipo de pago
+ recurrent: Recurrente
+ unique: Único
+ signLocation: Fecha - Localidad
+ sign: Firma del deudor y sello
+order: Ord. domiciliación {0}
diff --git a/print/templates/reports/sepa-core/locale/pt.yml b/print/templates/reports/sepa-core/locale/pt.yml
new file mode 100644
index 0000000000..2e2d08937b
--- /dev/null
+++ b/print/templates/reports/sepa-core/locale/pt.yml
@@ -0,0 +1,39 @@
+title: Autorização de débito directo SEPA CORE
+description: Ao subscrever esta autorização, está a autorizar a (A) Verdnatura Levante
+ S.L. a enviar instruções ao seu banco para debitar a sua conta e (B) seu banco a
+ debitar a sua conta, de acordo com as instruções da Verdnatura Levante S.L. Os seus
+ direitos incluem a possibilidade de exigir do seu banco o reembolso do montante
+ debitado, nos termos e condições acordados com o seu banco. O reembolso deve ser
+ solicitado até um prazo de oito semanas, a contar da data do débito na sua conta.
+ Os seus direitos, referentes à autorização acima referida, são explicados em declaração
+ que pode obter no seu banco.
+documentCopy: Deve levar à sua Entidade Bancária uma cópia do documento assinado para
+ que o registre e evitar a devolução
+mandatoryFields: TODOS OS CAMPOS DEVEM SER PREENCHIDOS OBRIGATORIAMENTE.
+sendOrder: UMA VEZ ASSINADA, ESTA AUTORIZAÇÃO DE DÉBITO DEVE SER ENVIADA AO CREDOR
+ PARA SUA CUSTÓDIA E É RECOMENDÁVEL FACILITAR UMA CÓPIA À SUA ENTIDADE BANCÁRIA.
+supplier:
+ toCompleteBySupplier: A preencher pelo credor
+ orderReference: Referência da ordem
+ identifier: Identificador do Credor
+ name: Nome do Credor
+ street: Morada
+ location: CP - Município - Distrito
+ country: País
+client:
+ toCompleteByClient: A preencher pelo devedor
+ name: Nome do devedor (Titular da conta)
+ street: Dirección del deudor
+ location: Cod. Postal - Município - Distrito
+ country: País do devedor
+ swift: Swift BIC
+ accountNumber: Número de Conta IBAN
+ accountHolder: "(Titular/es de la cuenta de cargo)"
+ accountNumberFormat: Em Portugal o IBAN é composto por 25 dígitos e começa sempre
+ por PT
+ paymentType: Tipos de pagamento Pagamento
+ recurrent: Recorrente
+ unique: Pagamento pontual
+ signLocation: Data - Localidade
+ sign: Assinatura e carimbo do devedor
+order: Referência da ordem {0}
diff --git a/print/templates/reports/sepa-core/sepa-core.html b/print/templates/reports/sepa-core/sepa-core.html
new file mode 100644
index 0000000000..16fdc163c7
--- /dev/null
+++ b/print/templates/reports/sepa-core/sepa-core.html
@@ -0,0 +1,179 @@
+
+
+
+