diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea4725448..aa63ad637 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,22 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2308.01] - 2023-03-09
+
+### Added
+-
+
+### Changed
+-
+
+### Fixed
+-
+
## [2306.01] - 2023-02-23
### Added
- (Tickets -> Datos Básicos) Mensaje de confirmación al intentar generar tickets con negativos
+- (Artículos) El visible y disponible se calcula a partir de un almacén diferente dependiendo de la sección en la que te encuentres. Se ha añadido un icono que informa sobre a partir de que almacén se esta calculando.
### Changed
- (General -> Inicio) Ahora permite recuperar la contraseña tanto con el correo de recuperación como el usuario
@@ -16,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- (Monitor de tickets) Cuando ordenas por columna, ya no se queda deshabilitado el botón de 'Actualizar'
- (Zone -> Días de entrega) Al hacer click en un día, muestra correctamente las zonas
+- (Artículos) El disponible en la vista previa se muestra correctamente
## [2304.01] - 2023-02-09
diff --git a/db/changes/230402/00-invoiceOut_getWeight.sql b/db/changes/230402/00-invoiceOut_getWeight.sql
new file mode 100644
index 000000000..4ca284857
--- /dev/null
+++ b/db/changes/230402/00-invoiceOut_getWeight.sql
@@ -0,0 +1,30 @@
+DROP FUNCTION IF EXISTS `vn`.`invoiceOut_getWeight`;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceOut_getWeight`(vInvoice VARCHAR(15)) RETURNS decimal(10,2)
+ READS SQL DATA
+BEGIN
+/**
+ * Calcula el peso de una factura emitida
+ *
+ * @param vInvoice Id de la factura
+ * @return vTotalWeight peso de la factura
+ */
+ DECLARE vTotalWeight DECIMAL(10,2);
+
+ SELECT SUM(CAST(IFNULL(i.stems, 1)
+ * s.quantity
+ * IF(ic.grams, ic.grams, IFNULL(i.weightByPiece, 0)) / 1000 AS DECIMAL(10,2)))
+ INTO vTotalWeight
+ FROM ticket t
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
+ JOIN itemCost ic ON ic.itemFk = i.id
+ AND ic.warehouseFk = t.warehouseFk
+ WHERE t.refFk = vInvoice
+ AND i.intrastatFk;
+
+ RETURN vTotalWeight;
+END$$
+DELIMITER ;
diff --git a/db/changes/230403/00-clienteCompensado.sql b/db/changes/230403/00-clienteCompensado.sql
new file mode 100644
index 000000000..ff1982b93
--- /dev/null
+++ b/db/changes/230403/00-clienteCompensado.sql
@@ -0,0 +1,3 @@
+INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
+ VALUES
+ ('Client', 'getClientOrSupplierReference', 'READ', 'ALLOW', 'ROLE', 'employee');
diff --git a/db/changes/230404/00-ticket_canAdvance.sql b/db/changes/230404/00-ticket_canAdvance.sql
new file mode 100644
index 000000000..d7386e9d1
--- /dev/null
+++ b/db/changes/230404/00-ticket_canAdvance.sql
@@ -0,0 +1,127 @@
+DROP PROCEDURE IF EXISTS `vn`.`ticket_canAdvance`;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT)
+BEGIN
+/**
+ * Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar.
+ *
+ * @param vDateFuture Fecha de los tickets que se quieren adelantar.
+ * @param vDateToAdvance Fecha a cuando se quiere adelantar.
+ * @param vWarehouseFk Almacén
+ */
+
+ DECLARE vDateInventory DATE;
+
+ SELECT inventoried INTO vDateInventory FROM config;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp.stock;
+ CREATE TEMPORARY TABLE tmp.stock
+ (itemFk INT PRIMARY KEY,
+ amount INT)
+ ENGINE = MEMORY;
+
+ INSERT INTO tmp.stock(itemFk, amount)
+ SELECT itemFk, SUM(quantity) amount FROM
+ (
+ SELECT itemFk, quantity
+ FROM itemTicketOut
+ WHERE shipped >= vDateInventory
+ AND shipped < vDateFuture
+ AND warehouseFk = vWarehouseFk
+ UNION ALL
+ SELECT itemFk, quantity
+ FROM itemEntryIn
+ WHERE landed >= vDateInventory
+ AND landed < vDateFuture
+ AND isVirtualStock = FALSE
+ AND warehouseInFk = vWarehouseFk
+ UNION ALL
+ SELECT itemFk, quantity
+ FROM itemEntryOut
+ WHERE shipped >= vDateInventory
+ AND shipped < vDateFuture
+ AND warehouseOutFk = vWarehouseFk
+ ) t
+ GROUP BY itemFk HAVING amount != 0;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp.filter;
+ CREATE TEMPORARY TABLE tmp.filter
+ (INDEX (id))
+
+ SELECT
+ origin.ticketFk futureId,
+ dest.ticketFk id,
+ dest.state,
+ origin.futureState,
+ origin.futureIpt,
+ dest.ipt,
+ origin.workerFk,
+ origin.futureLiters,
+ origin.futureLines,
+ dest.shipped,
+ origin.shipped futureShipped,
+ dest.totalWithVat,
+ origin.totalWithVat futureTotalWithVat,
+ dest.agency,
+ origin.futureAgency,
+ dest.lines,
+ dest.liters,
+ origin.futureLines - origin.hasStock AS notMovableLines,
+ (origin.futureLines = origin.hasStock) AS isFullMovable
+ FROM (
+ SELECT
+ s.ticketFk,
+ t.workerFk,
+ t.shipped,
+ t.totalWithVat,
+ st.name futureState,
+ t.addressFk,
+ am.name futureAgency,
+ count(s.id) futureLines,
+ GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
+ CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
+ SUM((s.quantity <= IFNULL(st.amount,0))) hasStock
+ FROM ticket t
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN saleVolume sv ON sv.saleFk = s.id
+ JOIN item i ON i.id = s.itemFk
+ JOIN ticketState ts ON ts.ticketFk = t.id
+ JOIN state st ON st.id = ts.stateFk
+ JOIN agencyMode am ON t.agencyModeFk = am.id
+ LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
+ LEFT JOIN tmp.stock st ON st.itemFk = i.id
+ WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
+ AND t.warehouseFk = vWarehouseFk
+ GROUP BY t.id
+ ) origin
+ JOIN (
+ SELECT
+ t.id ticketFk,
+ t.addressFk,
+ st.name state,
+ GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt,
+ t.shipped,
+ t.totalWithVat,
+ am.name agency,
+ CAST(SUM(litros) AS DECIMAL(10,0)) liters,
+ CAST(COUNT(*) AS DECIMAL(10,0)) `lines`
+ FROM ticket t
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN saleVolume sv ON sv.saleFk = s.id
+ JOIN item i ON i.id = s.itemFk
+ JOIN ticketState ts ON ts.ticketFk = t.id
+ JOIN state st ON st.id = ts.stateFk
+ JOIN agencyMode am ON t.agencyModeFk = am.id
+ LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
+ WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance)
+ AND t.warehouseFk = vWarehouseFk
+ AND st.order <= 5
+ GROUP BY t.id
+ ) dest ON dest.addressFk = origin.addressFk
+ WHERE origin.hasStock != 0;
+
+ DROP TEMPORARY TABLE tmp.stock;
+END$$
+DELIMITER ;
diff --git a/db/changes/230601/00-itemConfig_warehouseFk.sql b/db/changes/230601/00-itemConfig_warehouseFk.sql
index 84987d512..c860986d6 100644
--- a/db/changes/230601/00-itemConfig_warehouseFk.sql
+++ b/db/changes/230601/00-itemConfig_warehouseFk.sql
@@ -2,5 +2,3 @@ ALTER TABLE `vn`.`itemConfig` ADD warehouseFk smallint(6) unsigned NULL;
UPDATE `vn`.`itemConfig`
SET warehouseFk=60
WHERE id=0;
-INSERT INTO `salix`.`ACL` (model, property, accessType, permission, principalType, principalId)
- VALUES('ItemConfig', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
diff --git a/db/changes/230801/.gitkeep b/db/changes/230801/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql
index e8cd5c1b8..6f766f8ad 100644
--- a/db/dump/fixtures.sql
+++ b/db/dump/fixtures.sql
@@ -717,7 +717,8 @@ INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeF
(28, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE()),
(29, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE()),
(30, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE()),
- (31, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE());
+ (31, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE()),
+ (32, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE());
INSERT INTO `vn`.`ticketObservation`(`id`, `ticketFk`, `observationTypeFk`, `description`)
VALUES
@@ -1019,7 +1020,9 @@ INSERT INTO `vn`.`sale`(`id`, `itemFk`, `ticketFk`, `concept`, `quantity`, `pric
(34, 4, 28, 'Melee weapon heavy shield 1x0.5m', 20, 1.72, 0, 0, 0, util.VN_CURDATE()),
(35, 4, 29, 'Melee weapon heavy shield 1x0.5m', 20, 1.72, 0, 0, 0, util.VN_CURDATE()),
(36, 4, 30, 'Melee weapon heavy shield 1x0.5m', 20, 1.72, 0, 0, 0, util.VN_CURDATE()),
- (37, 4, 31, 'Melee weapon heavy shield 1x0.5m', 20, 1.72, 0, 0, 0, util.VN_CURDATE());
+ (37, 4, 31, 'Melee weapon heavy shield 1x0.5m', 20, 1.72, 0, 0, 0, util.VN_CURDATE()),
+ (38, 2, 32, 'Melee weapon combat fist 15cm', 30, 7.07, 0, 0, 0, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH)),
+ (39, 1, 32, 'Ranged weapon longbow 2m', 2, 103.49, 0, 0, 0, util.VN_CURDATE());
INSERT INTO `vn`.`saleChecked`(`saleFk`, `isChecked`)
VALUES
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index 8f9fcda57..efaa13ee3 100644
--- a/e2e/helpers/selectors.js
+++ b/e2e/helpers/selectors.js
@@ -778,18 +778,16 @@ export default {
ipt: 'vn-autocomplete[label="Destination IPT"]',
tableIpt: 'vn-autocomplete[name="ipt"]',
tableFutureIpt: 'vn-autocomplete[name="futureIpt"]',
- futureState: 'vn-check[label="Pending Origin"]',
- state: 'vn-check[label="Pending Destination"]',
+ isFullMovable: 'vn-check[ng-model="filter.isFullMovable"]',
warehouseFk: 'vn-autocomplete[label="Warehouse"]',
tableButtonSearch: 'vn-button[vn-tooltip="Search"]',
moveButton: 'vn-button[vn-tooltip="Advance tickets"]',
acceptButton: '.vn-confirm.shown button[response="accept"]',
- multiCheck: 'vn-multi-check',
+ firstCheck: 'tbody > tr:nth-child(1) > td > vn-check',
tableId: 'vn-textfield[name="id"]',
tableFutureId: 'vn-textfield[name="futureId"]',
tableLiters: 'vn-textfield[name="liters"]',
tableLines: 'vn-textfield[name="lines"]',
- tableStock: 'vn-textfield[name="hasStock"]',
submit: 'vn-submit[label="Search"]',
table: 'tbody > tr:not(.empty-rows)'
},
diff --git a/e2e/paths/05-ticket/16_summary.spec.js b/e2e/paths/05-ticket/16_summary.spec.js
index 960998c7d..a6017e454 100644
--- a/e2e/paths/05-ticket/16_summary.spec.js
+++ b/e2e/paths/05-ticket/16_summary.spec.js
@@ -55,7 +55,7 @@ describe('Ticket Summary path', () => {
let result = await page
.waitToGetProperty(selectors.ticketSummary.firstSaleItemId, 'innerText');
- expect(result).toContain('000002');
+ expect(result).toContain('2');
});
it(`should click on the first sale ID to make the item descriptor visible`, async() => {
diff --git a/e2e/paths/05-ticket/22_advance.spec.js b/e2e/paths/05-ticket/22_advance.spec.js
index 3a6234fe9..c92cd7a20 100644
--- a/e2e/paths/05-ticket/22_advance.spec.js
+++ b/e2e/paths/05-ticket/22_advance.spec.js
@@ -4,12 +4,17 @@ import getBrowser from '../../helpers/puppeteer';
describe('Ticket Advance path', () => {
let browser;
let page;
+ const httpRequests = [];
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.loginAndModule('employee', 'ticket');
await page.accessToSection('ticket.advance');
+ page.on('request', req => {
+ if (req.url().includes(`Tickets/getTicketsAdvance`))
+ httpRequests.push(req.url());
+ });
});
afterAll(async() => {
@@ -43,91 +48,74 @@ describe('Ticket Advance path', () => {
it('should search with the required data', async() => {
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
+
+ expect(httpRequests.length).toBeGreaterThan(0);
});
it('should search with the origin IPT', async() => {
- await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.autocompleteSearch(selectors.ticketAdvance.ipt, 'Horizontal');
- await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
-
- await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.clearInput(selectors.ticketAdvance.ipt);
- await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
- });
-
- it('should search with the destination IPT', async() => {
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
await page.autocompleteSearch(selectors.ticketAdvance.futureIpt, 'Horizontal');
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
+
+ const request = httpRequests.find(req => req.includes(('futureIpt=H')));
+
+ expect(request).toBeDefined();
+
+ httpRequests.splice(httpRequests.indexOf(request), 1);
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
await page.clearInput(selectors.ticketAdvance.futureIpt);
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
});
- it('should search with the origin pending state', async() => {
+ it('should search with the destination IPT', async() => {
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.waitToClick(selectors.ticketAdvance.futureState);
+ await page.autocompleteSearch(selectors.ticketAdvance.ipt, 'Horizontal');
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
+
+ const request = httpRequests.find(req => req.includes(('ipt=H')));
+
+ expect(request).toBeDefined();
+
+ httpRequests.splice(httpRequests.indexOf(request), 1);
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.waitToClick(selectors.ticketAdvance.futureState);
+ await page.clearInput(selectors.ticketAdvance.ipt);
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 0);
-
- await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.waitToClick(selectors.ticketAdvance.futureState);
- await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
- });
-
- it('should search with the destination grouped state', async() => {
- await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.waitToClick(selectors.ticketAdvance.state);
- await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 0);
-
- await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.waitToClick(selectors.ticketAdvance.state);
- await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
-
- await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
- await page.waitToClick(selectors.ticketAdvance.state);
- await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
});
it('should search in smart-table with an IPT Origin', async() => {
await page.waitToClick(selectors.ticketAdvance.tableButtonSearch);
await page.autocompleteSearch(selectors.ticketAdvance.tableFutureIpt, 'Vertical');
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
+
+ const request = httpRequests.find(req => req.includes(('futureIpt')));
+
+ expect(request).toBeDefined();
+
+ httpRequests.splice(httpRequests.indexOf(request), 1);
await page.waitToClick(selectors.ticketAdvance.tableButtonSearch);
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
});
it('should search in smart-table with an IPT Destination', async() => {
await page.waitToClick(selectors.ticketAdvance.tableButtonSearch);
await page.autocompleteSearch(selectors.ticketAdvance.tableIpt, 'Vertical');
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
+
+ const request = httpRequests.find(req => req.includes(('ipt')));
+
+ expect(request).toBeDefined();
+
+ httpRequests.splice(httpRequests.indexOf(request), 1);
await page.waitToClick(selectors.ticketAdvance.tableButtonSearch);
await page.waitToClick(selectors.ticketAdvance.openAdvancedSearchButton);
await page.waitToClick(selectors.ticketAdvance.submit);
- await page.waitForNumberOfElements(selectors.ticketAdvance.table, 1);
});
- it('should check the one ticket and move to the present', async() => {
- await page.waitToClick(selectors.ticketAdvance.multiCheck);
+ it('should check the first ticket and move to the present', async() => {
+ await page.waitToClick(selectors.ticketAdvance.firstCheck);
await page.waitToClick(selectors.ticketAdvance.moveButton);
await page.waitToClick(selectors.ticketAdvance.acceptButton);
const message = await page.waitForSnackbar();
diff --git a/e2e/paths/06-claim/05_summary.spec.js b/e2e/paths/06-claim/05_summary.spec.js
index 00b021f88..758dc2ee3 100644
--- a/e2e/paths/06-claim/05_summary.spec.js
+++ b/e2e/paths/06-claim/05_summary.spec.js
@@ -45,7 +45,7 @@ describe('Claim summary path', () => {
it('should display the claimed line(s)', async() => {
const result = await page.waitToGetProperty(selectors.claimSummary.firstSaleItemId, 'innerText');
- expect(result).toContain('000002');
+ expect(result).toContain('2');
});
it(`should click on the first sale ID making the item descriptor visible`, async() => {
diff --git a/front/core/filters/index.js b/front/core/filters/index.js
index 2c3f77ebe..6097a18a1 100644
--- a/front/core/filters/index.js
+++ b/front/core/filters/index.js
@@ -3,5 +3,4 @@ import './ucwords';
import './dash-if-empty';
import './percentage';
import './currency';
-import './zero-fill';
import './id';
diff --git a/front/core/filters/specs/zero-fill.spec.js b/front/core/filters/specs/zero-fill.spec.js
deleted file mode 100644
index 97f04c655..000000000
--- a/front/core/filters/specs/zero-fill.spec.js
+++ /dev/null
@@ -1,25 +0,0 @@
-describe('ZeroFill filter', () => {
- let zeroFillFilter;
-
- beforeEach(ngModule('vnCore'));
-
- beforeEach(inject(_zeroFillFilter_ => {
- zeroFillFilter = _zeroFillFilter_;
- }));
-
- it('should return null for a input null', () => {
- expect(zeroFillFilter(null, null)).toBeNull();
- });
-
- it('should return a positive number pads a number with five zeros', () => {
- expect(zeroFillFilter(1, 5)).toBe('00001');
- });
-
- it('should return negative number pads a number with five zeros', () => {
- expect(zeroFillFilter(-1, 5)).toBe('-00001');
- });
-
- it('should return zero number with zero zeros', () => {
- expect(zeroFillFilter(0, 1)).toBe('0');
- });
-});
diff --git a/front/core/filters/zero-fill.js b/front/core/filters/zero-fill.js
deleted file mode 100644
index c4d76b96f..000000000
--- a/front/core/filters/zero-fill.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import ngModule from '../module';
-
-/**
- * Pads a number with zeros.
- *
- * @param {Number} input The number to pad
- * @param {Number} padLength The resulting number of digits
- * @return {String} The zero-filled number
- */
-export default function zeroFill() {
- return function(input, padLength) {
- if (input == null) return input;
- let sign = Math.sign(input) === -1 ? '-' : '';
- return sign + new Array(padLength).concat([Math.abs(input)]).join('0').slice(-padLength);
- };
-}
-ngModule.filter('zeroFill', zeroFill);
diff --git a/modules/claim/front/action/index.html b/modules/claim/front/action/index.html
index 35e788290..81b14d3a7 100644
--- a/modules/claim/front/action/index.html
+++ b/modules/claim/front/action/index.html
@@ -101,7 +101,7 @@
- {{$t('Date')}} {{formatDate(client.payed, '%d-%m-%Y')}} {{$t('Compensate')}} {{client.amountPaid}} € - {{$t('From client')}} {{client.name}} {{$t('Toclient')}} {{company.name}}. + {{$t('Date')}} {{client.payed | date('%d-%m-%Y')}} {{$t('Compensate')}} {{client.amountPaid}} € + {{$t('From client')}} {{client.name}} {{$t('Against the balance of')}}: {{client.invoiceFk}}.
{{$t('Reception')}} administracion@verdnatura.es diff --git a/print/templates/reports/balance-compensation/locale/es.yml b/print/templates/reports/balance-compensation/locale/es.yml index 546e55f06..1c76274ae 100644 --- a/print/templates/reports/balance-compensation/locale/es.yml +++ b/print/templates/reports/balance-compensation/locale/es.yml @@ -4,13 +4,13 @@ Compensation: Compensación de saldos deudores y acreedores In one hand: De una parte CIF: con CIF NIF: con NIF -Home: y domicilio sito en +Home: y domicilio sito en In other hand: De la otra Sr: Don/Doña Agree: Acuerdan Date: En fecha de -Compensate: se ha compensado el saldo de +Compensate: se ha compensado el saldo de From client: del cliente/proveedor -To client: con el cliente/proveedor +Against the balance of: contra el saldo de Reception: Por favor, rogamos confirmen la recepción de esta compensación al email -Greetings: Saludos cordiales, \ No newline at end of file +Greetings: Saludos cordiales, diff --git a/print/templates/reports/balance-compensation/sql/client.sql b/print/templates/reports/balance-compensation/sql/client.sql index b4463be23..c3679b68a 100644 --- a/print/templates/reports/balance-compensation/sql/client.sql +++ b/print/templates/reports/balance-compensation/sql/client.sql @@ -4,6 +4,7 @@ SELECT c.street, c.fi, c.city, + r.invoiceFk, r.amountPaid, r.payed FROM client c diff --git a/print/templates/reports/campaign-metrics/campaign-metrics.html b/print/templates/reports/campaign-metrics/campaign-metrics.html index 57d616a29..ad60c511c 100644 --- a/print/templates/reports/campaign-metrics/campaign-metrics.html +++ b/print/templates/reports/campaign-metrics/campaign-metrics.html @@ -45,7 +45,7 @@