diff --git a/Jenkinsfile b/Jenkinsfile
index b1706d802..5f329ee61 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -52,6 +52,7 @@ pipeline {
}}}
environment {
NODE_ENV = ""
+ TZ = 'Europe/Madrid'
}
parallel {
stage('Frontend') {
diff --git a/back/locale/account/en.yml b/back/locale/account/en.yml
new file mode 100644
index 000000000..0d6c5db80
--- /dev/null
+++ b/back/locale/account/en.yml
@@ -0,0 +1,17 @@
+name: account
+columns:
+ id: id
+ name: name
+ roleFk: role
+ nickname: nickname
+ lang: lang
+ password: password
+ bcryptPassword: bcrypt password
+ active: active
+ email: email
+ emailVerified: email verified
+ created: created
+ updated: updated
+ image: image
+ hasGrant: has grant
+ userFk: user
diff --git a/back/locale/account/es.yml b/back/locale/account/es.yml
new file mode 100644
index 000000000..79e8a8cc6
--- /dev/null
+++ b/back/locale/account/es.yml
@@ -0,0 +1,17 @@
+name: cuenta
+columns:
+ id: id
+ name: nombre
+ roleFk: rol
+ nickname: apodo
+ lang: idioma
+ password: contraseña
+ bcryptPassword: contraseña bcrypt
+ active: activo
+ email: email
+ emailVerified: email verificado
+ created: creado
+ updated: actualizado
+ image: imagen
+ hasGrant: tiene permiso
+ userFk: usuario
diff --git a/db/.archive/225201/00-invoiceOut_new.sql b/db/.archive/225201/00-invoiceOut_new.sql
index 10a42d40d..4c60b50bc 100644
--- a/db/.archive/225201/00-invoiceOut_new.sql
+++ b/db/.archive/225201/00-invoiceOut_new.sql
@@ -8,7 +8,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceOut_new`(
BEGIN
/**
* Creación de facturas emitidas.
- * requiere previamente tabla ticketToInvoice(id).
+ * requiere previamente tabla tmp.ticketToInvoice(id).
*
* @param vSerial serie a la cual se hace la factura
* @param vInvoiceDate fecha de la factura
@@ -36,13 +36,13 @@ BEGIN
SELECT t.clientFk, t.companyFk
INTO vClient, vCompany
- FROM ticketToInvoice tt
+ FROM tmp.ticketToInvoice tt
JOIN ticket t ON t.id = tt.id
LIMIT 1;
- -- Eliminem de ticketToInvoice els tickets que no han de ser facturats
+ -- Eliminem de tmp.ticketToInvoice els tickets que no han de ser facturats
DELETE ti.*
- FROM ticketToInvoice ti
+ FROM tmp.ticketToInvoice ti
JOIN ticket t ON t.id = ti.id
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
@@ -57,7 +57,7 @@ BEGIN
SELECT SUM(s.quantity * s.price * (100 - s.discount)/100), ts.id
INTO vIsAnySaleToInvoice, vIsAnyServiceToInvoice
- FROM ticketToInvoice t
+ FROM tmp.ticketToInvoice t
LEFT JOIN sale s ON s.ticketFk = t.id
LEFT JOIN ticketService ts ON ts.ticketFk = t.id;
@@ -100,13 +100,13 @@ BEGIN
WHERE id = vNewInvoiceId;
UPDATE ticket t
- JOIN ticketToInvoice ti ON ti.id = t.id
+ JOIN tmp.ticketToInvoice ti ON ti.id = t.id
SET t.refFk = vNewRef;
DROP TEMPORARY TABLE IF EXISTS tmp.updateInter;
CREATE TEMPORARY TABLE tmp.updateInter ENGINE = MEMORY
SELECT s.id,ti.id ticket_id,vWorker Id_Trabajador
- FROM ticketToInvoice ti
+ FROM tmp.ticketToInvoice ti
LEFT JOIN ticketState ts ON ti.id = ts.ticket
JOIN state s
WHERE IFNULL(ts.alertLevel,0) < 3 and s.`code` = getAlert3State(ti.id);
@@ -116,7 +116,7 @@ BEGIN
INSERT INTO ticketLog (action, userFk, originFk, description)
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
- FROM ticketToInvoice ti;
+ FROM tmp.ticketToInvoice ti;
CALL invoiceExpenceMake(vNewInvoiceId);
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
@@ -159,7 +159,7 @@ BEGIN
(KEY (ticketFk))
ENGINE = MEMORY
SELECT id ticketFk
- FROM ticketToInvoice;
+ FROM tmp.ticketToInvoice;
CALL `ticket_getTax`('NATIONAL');
@@ -220,6 +220,6 @@ BEGIN
END IF;
- DROP TEMPORARY TABLE `ticketToInvoice`;
+ DROP TEMPORARY TABLE `tmp`.`ticketToInvoice`;
END$$
DELIMITER ;
diff --git a/db/changes/231001/02-invoiceOut_new.sql b/db/changes/231001/02-invoiceOut_new.sql
index 0fd91ef58..d2b96eff7 100644
--- a/db/changes/231001/02-invoiceOut_new.sql
+++ b/db/changes/231001/02-invoiceOut_new.sql
@@ -10,14 +10,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceOut_new`(
BEGIN
/**
* Creación de facturas emitidas.
- * requiere previamente tabla ticketToInvoice(id).
+ * requiere previamente tabla tmp.ticketToInvoice(id).
*
* @param vSerial serie a la cual se hace la factura
* @param vInvoiceDate fecha de la factura
* @param vTaxArea tipo de iva en relacion a la empresa y al cliente
* @param vNewInvoiceId id de la factura que se acaba de generar
* @return vNewInvoiceId
- */
+ */
DECLARE vIsAnySaleToInvoice BOOL;
DECLARE vIsAnyServiceToInvoice BOOL;
DECLARE vNewRef VARCHAR(255);
@@ -37,32 +37,32 @@ BEGIN
DECLARE vMaxShipped DATE;
SET vInvoiceDate = IFNULL(vInvoiceDate, util.CURDATE());
-
- SELECT t.clientFk,
- t.companyFk,
+
+ SELECT t.clientFk,
+ t.companyFk,
MAX(DATE(t.shipped)),
DATE(vInvoiceDate) >= invoiceOut_getMaxIssued(
- vSerial,
- t.companyFk,
+ vSerial,
+ t.companyFk,
YEAR(vInvoiceDate))
- INTO vClientFk,
+ INTO vClientFk,
vCompanyFk,
vMaxShipped,
vIsCorrectInvoiceDate
- FROM ticketToInvoice tt
+ FROM tmp.ticketToInvoice tt
JOIN ticket t ON t.id = tt.id;
- IF(vMaxShipped > vInvoiceDate) THEN
+ IF(vMaxShipped > vInvoiceDate) THEN
CALL util.throw("Invoice date can't be less than max date");
END IF;
-
+
IF NOT vIsCorrectInvoiceDate THEN
CALL util.throw('Exists an invoice with a previous date');
END IF;
-
- -- Eliminem de ticketToInvoice els tickets que no han de ser facturats
+
+ -- Eliminem de tmp.ticketToInvoice els tickets que no han de ser facturats
DELETE ti.*
- FROM ticketToInvoice ti
+ FROM tmp.ticketToInvoice ti
JOIN ticket t ON t.id = ti.id
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
@@ -77,11 +77,11 @@ BEGIN
SELECT SUM(s.quantity * s.price * (100 - s.discount)/100) <> 0
INTO vIsAnySaleToInvoice
- FROM ticketToInvoice t
+ FROM tmp.ticketToInvoice t
JOIN sale s ON s.ticketFk = t.id;
SELECT COUNT(*) > 0 INTO vIsAnyServiceToInvoice
- FROM ticketToInvoice t
+ FROM tmp.ticketToInvoice t
JOIN ticketService ts ON ts.ticketFk = t.id;
IF (vIsAnySaleToInvoice OR vIsAnyServiceToInvoice)
@@ -121,13 +121,13 @@ BEGIN
WHERE id = vNewInvoiceId;
UPDATE ticket t
- JOIN ticketToInvoice ti ON ti.id = t.id
+ JOIN tmp.ticketToInvoice ti ON ti.id = t.id
SET t.refFk = vNewRef;
DROP TEMPORARY TABLE IF EXISTS tmp.updateInter;
CREATE TEMPORARY TABLE tmp.updateInter ENGINE = MEMORY
SELECT s.id,ti.id ticket_id,vWorker Id_Trabajador
- FROM ticketToInvoice ti
+ FROM tmp.ticketToInvoice ti
LEFT JOIN ticketState ts ON ti.id = ts.ticket
JOIN state s
WHERE IFNULL(ts.alertLevel,0) < 3 and s.`code` = getAlert3State(ti.id);
@@ -137,7 +137,7 @@ BEGIN
INSERT INTO ticketLog (action, userFk, originFk, description)
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
- FROM ticketToInvoice ti;
+ FROM tmp.ticketToInvoice ti;
CALL invoiceExpenceMake(vNewInvoiceId);
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
@@ -157,12 +157,12 @@ BEGIN
WHERE io.id = vNewInvoiceId;
DROP TEMPORARY TABLE tmp.updateInter;
-
- SELECT COUNT(*), id
+
+ SELECT COUNT(*), id
INTO vIsInterCompany, vInterCompanyFk
- FROM company
+ FROM company
WHERE clientFk = vClientFk;
-
+
IF (vIsInterCompany) THEN
INSERT INTO invoiceIn(supplierFk, supplierRef, issued, companyFk)
@@ -175,7 +175,7 @@ BEGIN
(KEY (ticketFk))
ENGINE = MEMORY
SELECT id ticketFk
- FROM ticketToInvoice;
+ FROM tmp.ticketToInvoice;
CALL `ticket_getTax`('NATIONAL');
@@ -201,7 +201,7 @@ BEGIN
) sub;
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
- SELECT vNewInvoiceInFk,
+ SELECT vNewInvoiceInFk,
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
@vTaxableBaseServices, 0) taxableBase,
i.expenceFk,
@@ -215,13 +215,13 @@ BEGIN
ORDER BY tt.priority;
CALL invoiceInDueDay_calculate(vNewInvoiceInFk);
-
- SELECT COUNT(*) INTO vIsCEESerial
+
+ SELECT COUNT(*) INTO vIsCEESerial
FROM invoiceOutSerial
WHERE code = vSerial;
IF vIsCEESerial THEN
-
+
INSERT INTO invoiceInIntrastat (
invoiceInFk,
intrastatFk,
@@ -253,6 +253,6 @@ BEGIN
DROP TEMPORARY TABLE tmp.ticketServiceTax;
END IF;
END IF;
- DROP TEMPORARY TABLE `ticketToInvoice`;
+ DROP TEMPORARY TABLE tmp.`ticketToInvoice`;
END$$
-DELIMITER ;
\ No newline at end of file
+DELIMITER ;
diff --git a/db/changes/231601/00-User.sql b/db/changes/231601/00-User.sql
deleted file mode 100644
index 6c80d2c2d..000000000
--- a/db/changes/231601/00-User.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-create or replace definer = root@localhost view User as
-select `account`.`user`.`id` AS `id`,
- `account`.`user`.`realm` AS `realm`,
- `account`.`user`.`name` AS `name`,
- `account`.`user`.`nickname` AS `nickname`,
- `account`.`user`.`bcryptPassword` AS `password`,
- `account`.`user`.`role` AS `role`,
- `account`.`user`.`active` AS `active`,
- `account`.`user`.`email` AS `email`,
- `account`.`user`.`emailVerified` AS `emailVerified`,
- `account`.`user`.`verificationToken` AS `verificationToken`,
- `account`.`user`.`lang` AS `lang`,
- `account`.`user`.`lastPassChange` AS `lastPassChange`,
- `account`.`user`.`created` AS `created`,
- `account`.`user`.`updated` AS `updated`,
- `account`.`user`.`image` AS `image`,
- `account`.`user`.`recoverPass` AS `recoverPass`,
- `account`.`user`.`sync` AS `sync`,
- `account`.`user`.`hasGrant` AS `hasGrant`
-from `account`.`user`;
-
diff --git a/db/changes/231601/00-deleteProcs_refund.sql b/db/changes/231601/00-deleteProcs_refund.sql
new file mode 100644
index 000000000..8bf8982f4
--- /dev/null
+++ b/db/changes/231601/00-deleteProcs_refund.sql
@@ -0,0 +1,2 @@
+DROP PROCEDURE `vn`.`refund`;
+DROP PROCEDURE `vn`.`ticket_doRefund`;
diff --git a/db/changes/231601/00-insertI18n.sql b/db/changes/231601/00-insertI18n.sql
deleted file mode 100644
index f86cb6a73..000000000
--- a/db/changes/231601/00-insertI18n.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-INSERT INTO `vn`.`companyI18n` (`companyFk`, `lang`, `footnotes`)
-VALUES (442, 'en', 'In compliance with the provisions of Organic Law 15/1999, on the Protection of Personal Data, we inform you that the personal data you provide will be included in automated files of VERDNATURA LEVANTE SL, being able at all times to exercise the rights of access, rectification, cancellation and opposition, communicating it in writing to the registered office of the entity. The purpose of the file is administrative management, accounting, and billing.'),
- (442, 'es', '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.'),
- (442, 'fr', '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.'),
- (442, 'pt', '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/db/changes/231601/00-kkearEntryNotes.sql b/db/changes/231601/00-kkearEntryNotes.sql
new file mode 100644
index 000000000..ff5c7ce29
--- /dev/null
+++ b/db/changes/231601/00-kkearEntryNotes.sql
@@ -0,0 +1 @@
+ALTER TABLE `vn`.`entry` DROP COLUMN `notes`;
\ No newline at end of file
diff --git a/db/changes/231601/00-updateIsVies.sql b/db/changes/231601/00-updateIsVies.sql
new file mode 100644
index 000000000..83fde7352
--- /dev/null
+++ b/db/changes/231601/00-updateIsVies.sql
@@ -0,0 +1,5 @@
+ UPDATE vn.supplier s
+ JOIN vn.country c ON c.id = s.countryFk
+ SET s.nif = MID(REPLACE(s.nif, ' ', ''), 3, LENGTH(REPLACE(s.nif, ' ', '')) - 1)
+ WHERE s.isVies = TRUE
+ AND c.code = LEFT(REPLACE(s.nif, ' ', ''), 2);
\ No newline at end of file
diff --git a/db/changes/231601/00-updateisViesClient.sql b/db/changes/231601/00-updateisViesClient.sql
new file mode 100644
index 000000000..bdf62d7a8
--- /dev/null
+++ b/db/changes/231601/00-updateisViesClient.sql
@@ -0,0 +1,5 @@
+UPDATE IGNORE vn.client c
+ JOIN vn.country co ON co.id = c.countryFk
+ SET c.fi = MID(REPLACE(c.fi, ' ', ''), 3, LENGTH(REPLACE(c.fi, ' ', '')) - 1)
+ WHERE c.isVies = TRUE
+ AND co.code = LEFT(REPLACE(c.fi, ' ', ''), 2);
\ No newline at end of file
diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql
index 15ccece35..e69974d08 100644
--- a/db/dump/fixtures.sql
+++ b/db/dump/fixtures.sql
@@ -1409,16 +1409,16 @@ INSERT INTO `vn`.`travel`(`id`,`shipped`, `landed`, `warehouseInFk`, `warehouseO
(7, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 4, 1, 50.00, 500, 'seventh travel', 2, 1),
(8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2);
-INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `isRaid`, `notes`, `evaNotes`)
+INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `isRaid`, `evaNotes`)
VALUES
- (1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 1, 442, 'IN2001', 'Movement 1', 0, 0, '', ''),
- (2, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 2, 0, 442, 'IN2002', 'Movement 2', 0, 0, 'this is the note two', 'observation two'),
- (3, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 3, 0, 442, 'IN2003', 'Movement 3', 0, 0, 'this is the note three', 'observation three'),
- (4, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 2, 0, 69, 'IN2004', 'Movement 4', 0, 0, 'this is the note four', 'observation four'),
- (5, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 0, 442, 'IN2005', 'Movement 5', 0, 0, 'this is the note five', 'observation five'),
- (6, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 6, 0, 442, 'IN2006', 'Movement 6', 0, 0, 'this is the note six', 'observation six'),
- (7, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2007', 'Movement 7', 0, 0, 'this is the note seven', 'observation seven'),
- (8, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2008', 'Movement 8', 1, 1, '', '');
+ (1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 1, 442, 'IN2001', 'Movement 1', 0, 0, ''),
+ (2, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 2, 0, 442, 'IN2002', 'Movement 2', 0, 0, 'observation two'),
+ (3, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 3, 0, 442, 'IN2003', 'Movement 3', 0, 0, 'observation three'),
+ (4, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 2, 0, 69, 'IN2004', 'Movement 4', 0, 0, 'observation four'),
+ (5, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 0, 442, 'IN2005', 'Movement 5', 0, 0, 'observation five'),
+ (6, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 6, 0, 442, 'IN2006', 'Movement 6', 0, 0, 'observation six'),
+ (7, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2007', 'Movement 7', 0, 0, 'observation seven'),
+ (8, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2008', 'Movement 8', 1, 1, '');
INSERT INTO `bs`.`waste`(`buyer`, `year`, `week`, `family`, `itemFk`, `itemTypeFk`, `saleTotal`, `saleWaste`, `rate`)
VALUES
diff --git a/db/dump/structure.sql b/db/dump/structure.sql
index 90e4c4bc9..3256ecdca 100644
--- a/db/dump/structure.sql
+++ b/db/dump/structure.sql
@@ -42776,7 +42776,7 @@ CREATE DEFINER=`root`@`localhost` FUNCTION `hasAnyNegativeBase`() RETURNS tinyin
BEGIN
/* Calcula si existe alguna base imponible negativa
-* Requiere la tabla temporal vn.ticketToInvoice(id)
+* Requiere la tabla temporal tmp.ticketToInvoice(id)
*
* returns BOOLEAN
*/
@@ -42787,7 +42787,7 @@ BEGIN
(KEY (ticketFk))
ENGINE = MEMORY
SELECT id ticketFk
- FROM ticketToInvoice;
+ FROM tmp.ticketToInvoice;
CALL ticket_getTax(NULL);
@@ -55223,7 +55223,7 @@ DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceExpenceMake`(IN vInvoice INT)
BEGIN
/* Inserta las partidas de gasto correspondientes a la factura
- * REQUIERE tabla ticketToInvoice
+ * REQUIERE tabla tmp.ticketToInvoice
* @param vInvoice Numero de factura
*/
DELETE FROM invoiceOutExpence
@@ -55233,7 +55233,7 @@ BEGIN
SELECT vInvoice,
expenceFk,
SUM(ROUND(quantity * price * (100 - discount)/100,2)) amount
- FROM ticketToInvoice t
+ FROM tmp.ticketToInvoice t
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
GROUP BY i.expenceFk
@@ -55243,7 +55243,7 @@ BEGIN
SELECT vInvoice,
tst.expenceFk,
SUM(ROUND(ts.quantity * ts.price ,2)) amount
- FROM ticketToInvoice t
+ FROM tmp.ticketToInvoice t
JOIN ticketService ts ON ts.ticketFk = t.id
JOIN ticketServiceType tst ON tst.id = ts.ticketServiceTypeFk
HAVING amount != 0;
@@ -55270,9 +55270,9 @@ BEGIN
SET vMaxTicketDate = vn2008.DAYEND(vMaxTicketDate);
- DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
+ DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
- CREATE TEMPORARY TABLE `ticketToInvoice`
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`))
ENGINE = MEMORY
SELECT Id_Ticket id FROM vn2008.Tickets WHERE (Fecha BETWEEN vMinDateTicket
@@ -55305,8 +55305,8 @@ BEGIN
SET vMinTicketDate = util.firstDayOfYear(vMaxTicketDate - INTERVAL 1 YEAR);
SET vMaxTicketDate = util.dayend(vMaxTicketDate);
- DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
- CREATE TEMPORARY TABLE `ticketToInvoice`
+ DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`))
ENGINE = MEMORY
SELECT id FROM ticket t
@@ -55333,9 +55333,9 @@ DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceFromTicket`(IN vTicket INT)
BEGIN
- DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
+ DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
- CREATE TEMPORARY TABLE `ticketToInvoice`
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`))
ENGINE = MEMORY
SELECT id FROM vn.ticket
@@ -55931,9 +55931,9 @@ BEGIN
JOIN invoiceOut io ON io.companyFk = s.id
WHERE io.id = vInvoiceFk;
- DROP TEMPORARY TABLE IF EXISTS ticketToInvoice;
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticketToInvoice;
- CREATE TEMPORARY TABLE ticketToInvoice
+ CREATE TEMPORARY TABLE tmp.ticketToInvoice
SELECT id
FROM ticket
WHERE refFk = vInvoiceRef;
@@ -56408,9 +56408,9 @@ BEGIN
JOIN client c ON c.id = io.clientFk
WHERE io.id = vInvoice;
- DROP TEMPORARY TABLE IF EXISTS ticketToInvoice;
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticketToInvoice;
- CREATE TEMPORARY TABLE ticketToInvoice
+ CREATE TEMPORARY TABLE tmp.ticketToInvoice
SELECT id
FROM ticket
WHERE refFk = vInvoiceRef;
@@ -56456,7 +56456,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceOut_exportationFromClient`(
vCompanyFk INT)
BEGIN
/**
- * Genera tabla temporal ticketToInvoice necesaría para el proceso de facturación
+ * Genera tabla temporal tmp.ticketToInvoice necesaría para el proceso de facturación
* Los abonos quedan excluidos en las exportaciones
*
* @param vMaxTicketDate Fecha hasta la cual cogerá tickets para facturar
@@ -56467,8 +56467,8 @@ BEGIN
SET vMinTicketDate = util.firstDayOfYear(vMaxTicketDate - INTERVAL 1 YEAR);
SET vMaxTicketDate = util.dayend(vMaxTicketDate);
- DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
- CREATE TEMPORARY TABLE `ticketToInvoice`
+ DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`))
ENGINE = MEMORY
SELECT t.id
@@ -56503,7 +56503,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceOut_new`(
BEGIN
/**
* Creación de facturas emitidas.
- * requiere previamente tabla ticketToInvoice(id).
+ * requiere previamente tabla tmp.ticketToInvoice(id).
*
* @param vSerial serie a la cual se hace la factura
* @param vInvoiceDate fecha de la factura
@@ -56531,13 +56531,13 @@ BEGIN
SELECT t.clientFk, t.companyFk
INTO vClientFk, vCompanyFk
- FROM ticketToInvoice tt
+ FROM tmp.ticketToInvoice tt
JOIN ticket t ON t.id = tt.id
LIMIT 1;
- -- Eliminem de ticketToInvoice els tickets que no han de ser facturats
+ -- Eliminem de tmp.ticketToInvoice els tickets que no han de ser facturats
DELETE ti.*
- FROM ticketToInvoice ti
+ FROM tmp.ticketToInvoice ti
JOIN ticket t ON t.id = ti.id
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
@@ -56552,7 +56552,7 @@ BEGIN
SELECT SUM(s.quantity * s.price * (100 - s.discount)/100), ts.id
INTO vIsAnySaleToInvoice, vIsAnyServiceToInvoice
- FROM ticketToInvoice t
+ FROM tmp.ticketToInvoice t
LEFT JOIN sale s ON s.ticketFk = t.id
LEFT JOIN ticketService ts ON ts.ticketFk = t.id;
@@ -56593,13 +56593,13 @@ BEGIN
WHERE id = vNewInvoiceId;
UPDATE ticket t
- JOIN ticketToInvoice ti ON ti.id = t.id
+ JOIN tmp.ticketToInvoice ti ON ti.id = t.id
SET t.refFk = vNewRef;
DROP TEMPORARY TABLE IF EXISTS tmp.updateInter;
CREATE TEMPORARY TABLE tmp.updateInter ENGINE = MEMORY
SELECT s.id,ti.id ticket_id,vWorker Id_Trabajador
- FROM ticketToInvoice ti
+ FROM tmp.ticketToInvoice ti
LEFT JOIN ticketState ts ON ti.id = ts.ticket
JOIN state s
WHERE IFNULL(ts.alertLevel,0) < 3 and s.`code` = getAlert3State(ti.id);
@@ -56609,7 +56609,7 @@ BEGIN
INSERT INTO ticketLog (action, userFk, originFk, description)
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
- FROM ticketToInvoice ti;
+ FROM tmp.ticketToInvoice ti;
CALL invoiceExpenceMake(vNewInvoiceId);
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
@@ -56647,7 +56647,7 @@ BEGIN
(KEY (ticketFk))
ENGINE = MEMORY
SELECT id ticketFk
- FROM ticketToInvoice;
+ FROM tmp.ticketToInvoice;
CALL `ticket_getTax`('NATIONAL');
@@ -56725,7 +56725,7 @@ BEGIN
DROP TEMPORARY TABLE tmp.ticketServiceTax;
END IF;
END IF;
- DROP TEMPORARY TABLE `ticketToInvoice`;
+ DROP TEMPORARY TABLE `tmp`.`ticketToInvoice`;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -56876,7 +56876,7 @@ BEGIN
(KEY (ticketFk))
ENGINE = MEMORY
SELECT id ticketFk
- FROM ticketToInvoice;
+ FROM tmp.ticketToInvoice;
CALL ticket_getTax(vTaxArea);
@@ -68689,7 +68689,7 @@ DELIMITER ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `ticketToInvoiceByAddress` */;
+/*!50003 DROP PROCEDURE IF EXISTS `tmp`.`ticketToInvoiceByAddress` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
@@ -68709,9 +68709,9 @@ BEGIN
SET vEnded = util.dayEnd(vEnded);
- DROP TEMPORARY TABLE IF EXISTS vn.ticketToInvoice;
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticketToInvoice;
- CREATE TEMPORARY TABLE vn.ticketToInvoice
+ CREATE TEMPORARY TABLE tmp.ticketToInvoice
SELECT id
FROM vn.ticket
WHERE addressFk = vAddress
@@ -68745,9 +68745,9 @@ BEGIN
SET vEnded = util.dayEnd(vEnded);
- DROP TEMPORARY TABLE IF EXISTS vn.ticketToInvoice;
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticketToInvoice;
- CREATE TEMPORARY TABLE vn.ticketToInvoice
+ CREATE TEMPORARY TABLE tmp.ticketToInvoice
SELECT id
FROM vn.ticket
WHERE clientFk = vClient
@@ -68808,9 +68808,9 @@ BEGIN
JOIN vn.client c ON c.id = io.clientFk
WHERE io.id = vInvoice;
- DROP TEMPORARY TABLE IF EXISTS vn.ticketToInvoice;
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticketToInvoice;
- CREATE TEMPORARY TABLE vn.ticketToInvoice
+ CREATE TEMPORARY TABLE tmp.ticketToInvoice
SELECT id
FROM vn.ticket
WHERE refFk = vInvoiceRef;
diff --git a/db/export-data.sh b/db/export-data.sh
index bdf8049e0..11358e64c 100755
--- a/db/export-data.sh
+++ b/db/export-data.sh
@@ -68,6 +68,7 @@ TABLES=(
time
volumeConfig
workCenter
+ companyI18n
)
dump_tables ${TABLES[@]}
diff --git a/e2e/helpers/extensions.js b/e2e/helpers/extensions.js
index 1fcbfd616..b54afe5a7 100644
--- a/e2e/helpers/extensions.js
+++ b/e2e/helpers/extensions.js
@@ -218,6 +218,23 @@ let actions = {
return handle.jsonValue();
},
+ getValue: async function(selector) {
+ return await this.waitToGetProperty(selector, 'value');
+ },
+
+ getValues: async function(selectorMap) {
+ const values = {};
+ for (const key in selectorMap)
+ values[key] = await this.waitToGetProperty(selectorMap[key], 'value');
+ return values;
+ },
+
+ innerText: async function(selector) {
+ const element = await this.$(selector);
+ const handle = await element.getProperty('innerText');
+ return handle.jsonValue();
+ },
+
waitPropertyLength: async function(selector, property, minLength) {
await this.waitForFunction((selector, property, minLength) => {
const element = document.querySelector(selector);
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index 7e8b91fa1..1740db7ca 100644
--- a/e2e/helpers/selectors.js
+++ b/e2e/helpers/selectors.js
@@ -283,12 +283,6 @@ export default {
cancelEditAddressButton: 'vn-client-address-edit > form > vn-button-bar > vn-button > button',
watcher: 'vn-client-address-edit vn-watcher'
},
- clientWebAccess: {
- enableWebAccessCheckbox: 'vn-check[label="Enable web access"]',
- userName: 'vn-client-web-access vn-textfield[ng-model="$ctrl.account.name"]',
- email: 'vn-client-web-access vn-textfield[ng-model="$ctrl.account.email"]',
- saveButton: 'button[type=submit]'
- },
clientNotes: {
addNoteFloatButton: 'vn-float-button',
note: 'vn-textarea[ng-model="$ctrl.note.text"]',
@@ -312,15 +306,6 @@ export default {
clientMandate: {
firstMandateText: 'vn-client-mandate vn-card vn-table vn-tbody > vn-tr'
},
- clientLog: {
- lastModificationPreviousValue: 'vn-client-log vn-tr table tr td.before',
- lastModificationCurrentValue: 'vn-client-log vn-tr table tr td.after',
- namePreviousValue: 'vn-client-log vn-tr table tr:nth-child(1) td.before',
- nameCurrentValue: 'vn-client-log vn-tr table tr:nth-child(1) td.after',
- activePreviousValue: 'vn-client-log vn-tr:nth-child(2) table tr:nth-child(2) td.before',
- activeCurrentValue: 'vn-client-log vn-tr:nth-child(2) table tr:nth-child(2) td.after'
-
- },
clientBalance: {
company: 'vn-client-balance-index vn-autocomplete[ng-model="$ctrl.companyId"]',
newPaymentButton: `vn-float-button`,
@@ -755,6 +740,7 @@ export default {
anyDocument: 'vn-ticket-dms-index > vn-data-viewer vn-tbody vn-tr'
},
ticketFuture: {
+ searchResult: 'vn-ticket-future tbody tr',
openAdvancedSearchButton: 'vn-searchbar .append vn-icon[icon="arrow_drop_down"]',
originDated: 'vn-date-picker[label="Origin date"]',
futureDated: 'vn-date-picker[label="Destination date"]',
@@ -770,7 +756,6 @@ export default {
problems: 'vn-check[label="With problems"]',
tableButtonSearch: 'vn-button[vn-tooltip="Search"]',
moveButton: 'vn-button[vn-tooltip="Future tickets"]',
- acceptButton: '.vn-confirm.shown button[response="accept"]',
firstCheck: 'tbody > tr:nth-child(1) > td > vn-check',
multiCheck: 'vn-multi-check',
tableId: 'vn-textfield[name="id"]',
@@ -1361,18 +1346,6 @@ export default {
notes: 'vn-supplier-basic-data vn-textarea[ng-model="$ctrl.supplier.note"]',
saveButton: 'vn-supplier-basic-data button[type="submit"]',
},
- supplierFiscalData: {
- socialName: 'vn-supplier-fiscal-data vn-textfield[ng-model="$ctrl.supplier.name"]',
- taxNumber: 'vn-supplier-fiscal-data vn-textfield[ng-model="$ctrl.supplier.nif"]',
- account: 'vn-supplier-fiscal-data vn-textfield[ng-model="$ctrl.supplier.account"]',
- sageTaxType: 'vn-supplier-fiscal-data vn-autocomplete[ng-model="$ctrl.supplier.sageTaxTypeFk"]',
- sageWihholding: 'vn-supplier-fiscal-data vn-autocomplete[ng-model="$ctrl.supplier.sageWithholdingFk"]',
- postCode: 'vn-supplier-fiscal-data vn-datalist[ng-model="$ctrl.supplier.postCode"]',
- city: 'vn-supplier-fiscal-data vn-datalist[ng-model="$ctrl.supplier.city"]',
- province: 'vn-supplier-fiscal-data vn-autocomplete[ng-model="$ctrl.supplier.provinceFk"]',
- country: 'vn-supplier-fiscal-data vn-autocomplete[ng-model="$ctrl.supplier.countryFk"]',
- saveButton: 'vn-supplier-fiscal-data button[type="submit"]',
- },
supplierBillingData: {
payMethod: 'vn-supplier-billing-data vn-autocomplete[ng-model="$ctrl.supplier.payMethodFk"]',
payDem: 'vn-supplier-billing-data vn-autocomplete[ng-model="$ctrl.supplier.payDemFk"]',
diff --git a/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js b/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js
index 25735e50a..f9844d5f7 100644
--- a/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js
+++ b/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js
@@ -81,9 +81,7 @@ describe('SmartTable SearchBar integration', () => {
await page.accessToSection('item.fixedPrice');
await page.keyboard.press('Enter');
- const result = await page.waitToGetProperty(selectors.itemFixedPrice.firstItemID, 'value');
-
- expect(result).toEqual('1');
+ await page.waitForTextInField(selectors.itemFixedPrice.firstItemID, '1');
});
it('should order by last id, reload page and have same order', async() => {
@@ -91,9 +89,7 @@ describe('SmartTable SearchBar integration', () => {
await page.reload({
waitUntil: 'networkidle2'
});
- const result = await page.waitToGetProperty(selectors.itemFixedPrice.firstItemID, 'value');
-
- expect(result).toEqual('13');
+ await page.waitForTextInField(selectors.itemFixedPrice.firstItemID, '13');
});
});
});
diff --git a/e2e/paths/02-client/07_edit_web_access.spec.js b/e2e/paths/02-client/07_edit_web_access.spec.js
index 29b39f788..26b4c4e27 100644
--- a/e2e/paths/02-client/07_edit_web_access.spec.js
+++ b/e2e/paths/02-client/07_edit_web_access.spec.js
@@ -1,88 +1,56 @@
-/* eslint max-len: ["error", { "code": 150 }]*/
-import selectors from '../../helpers/selectors';
import getBrowser from '../../helpers/puppeteer';
-describe('Client Edit web access path', () => {
+const $ = {
+ enableWebAccess: 'vn-client-web-access vn-check[label="Enable web access"]',
+ userName: 'vn-client-web-access vn-textfield[ng-model="$ctrl.account.name"]',
+ email: 'vn-client-web-access vn-textfield[ng-model="$ctrl.account.email"]',
+ saveButton: 'vn-client-web-access button[type=submit]',
+ nameValue: 'vn-client-log .change:nth-child(1) .basic-json:nth-child(1) vn-json-value',
+ activeValue: 'vn-client-log .change:nth-child(2) .basic-json:nth-child(2) vn-json-value'
+};
+
+describe('Client web access path', () => {
let browser;
let page;
+
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.loginAndModule('salesPerson', 'client');
await page.accessToSearchResult('max');
- await page.accessToSection('client.card.webAccess');
});
afterAll(async() => {
await browser.close();
});
- it('should uncheck the Enable web access checkbox', async() => {
- await page.waitToClick(selectors.clientWebAccess.enableWebAccessCheckbox);
- await page.waitToClick(selectors.clientWebAccess.saveButton);
- const message = await page.waitForSnackbar();
+ it('should modify and save web access attributes', async() => {
+ await page.accessToSection('client.card.webAccess');
+ await page.click($.enableWebAccess);
+ await page.click($.saveButton);
+ const enableMessage = await page.waitForSnackbar();
+ await page.overwrite($.userName, 'Legion');
+ await page.overwrite($.email, 'legion@marvel.com');
+ await page.click($.saveButton);
+ const modifyMessage = await page.waitForSnackbar();
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should update the name`, async() => {
- await page.clearInput(selectors.clientWebAccess.userName);
- await page.write(selectors.clientWebAccess.userName, 'Legion');
- await page.waitToClick(selectors.clientWebAccess.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should update the email`, async() => {
- await page.clearInput(selectors.clientWebAccess.email);
- await page.write(selectors.clientWebAccess.email, 'legion@marvel.com');
- await page.waitToClick(selectors.clientWebAccess.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reload the section and confirm web access is now unchecked', async() => {
await page.reloadSection('client.card.webAccess');
- const result = await page.checkboxState(selectors.clientWebAccess.enableWebAccessCheckbox);
+ const hasAccess = await page.checkboxState($.enableWebAccess);
+ const userName = await page.getValue($.userName);
+ const email = await page.getValue($.email);
- expect(result).toBe('unchecked');
- });
-
- it('should confirm web access name have been updated', async() => {
- const result = await page.waitToGetProperty(selectors.clientWebAccess.userName, 'value');
-
- expect(result).toEqual('Legion');
- });
-
- it('should confirm web access email have been updated', async() => {
- const result = await page.waitToGetProperty(selectors.clientWebAccess.email, 'value');
-
- expect(result).toEqual('legion@marvel.com');
- });
-
- it(`should navigate to the log section`, async() => {
await page.accessToSection('client.card.log');
- });
+ const logName = await page.innerText($.nameValue);
+ const logActive = await page.innerText($.activeValue);
- it(`should confirm the last log shows the updated client name and no modifications on active checkbox`, async() => {
- let namePreviousValue = await page
- .waitToGetProperty(selectors.clientLog.namePreviousValue, 'innerText');
- let nameCurrentValue = await page
- .waitToGetProperty(selectors.clientLog.nameCurrentValue, 'innerText');
+ expect(enableMessage.type).toBe('success');
+ expect(modifyMessage.type).toBe('success');
- expect(namePreviousValue).toEqual('MaxEisenhardt');
- expect(nameCurrentValue).toEqual('Legion');
- });
+ expect(hasAccess).toBe('unchecked');
+ expect(userName).toEqual('Legion');
+ expect(email).toEqual('legion@marvel.com');
- it(`should confirm the penultimate log shows the updated active and no modifications on client name`, async() => {
- let activePreviousValue = await page
- .waitToGetProperty(selectors.clientLog.activePreviousValue, 'innerText');
- let activeCurrentValue = await page
- .waitToGetProperty(selectors.clientLog.activeCurrentValue, 'innerText');
-
- expect(activePreviousValue).toEqual('✓');
- expect(activeCurrentValue).toEqual('✗');
+ expect(logName).toEqual('Legion');
+ expect(logActive).toEqual('✗');
});
});
diff --git a/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js b/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js
index 323646d29..1b3204046 100644
--- a/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js
+++ b/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js
@@ -246,6 +246,7 @@ describe('Ticket Edit sale path', () => {
it('should select the third sale and create a claim of it', async() => {
await page.accessToSearchResult('16');
await page.accessToSection('ticket.card.sale');
+ await page.waitToClick(selectors.ticketSales.firstSaleCheckbox);
await page.waitToClick(selectors.ticketSales.thirdSaleCheckbox);
await page.waitToClick(selectors.ticketSales.moreMenu);
await page.waitToClick(selectors.ticketSales.moreMenuCreateClaim);
diff --git a/e2e/paths/05-ticket/21_future.spec.js b/e2e/paths/05-ticket/21_future.spec.js
index 626056958..783b0c9b2 100644
--- a/e2e/paths/05-ticket/21_future.spec.js
+++ b/e2e/paths/05-ticket/21_future.spec.js
@@ -126,10 +126,11 @@ describe('Ticket Future path', () => {
});
it('should check the three last tickets and move to the future', async() => {
+ await page.waitForNumberOfElements(selectors.ticketFuture.searchResult, 4);
await page.waitToClick(selectors.ticketFuture.multiCheck);
await page.waitToClick(selectors.ticketFuture.firstCheck);
await page.waitToClick(selectors.ticketFuture.moveButton);
- await page.waitToClick(selectors.ticketFuture.acceptButton);
+ await page.waitToClick(selectors.globalItems.acceptButton);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Tickets moved successfully!');
diff --git a/e2e/paths/09-invoice-in/05_serial.spec.js b/e2e/paths/09-invoice-in/05_serial.spec.js
index 3aa94f48c..8be5660da 100644
--- a/e2e/paths/09-invoice-in/05_serial.spec.js
+++ b/e2e/paths/09-invoice-in/05_serial.spec.js
@@ -35,7 +35,7 @@ describe('InvoiceIn serial path', () => {
});
it('should go to index and check if the search-panel has the correct params', async() => {
- await page.click(selectors.invoiceInSerial.goToIndex);
+ await page.waitToClick(selectors.invoiceInSerial.goToIndex);
const params = await page.$$(selectors.invoiceInIndex.topbarSearchParams);
const serial = await params[0].getProperty('title');
const isBooked = await params[1].getProperty('title');
diff --git a/e2e/paths/12-entry/05_basicData.spec.js b/e2e/paths/12-entry/05_basicData.spec.js
index 3b5f40c35..0272446d9 100644
--- a/e2e/paths/12-entry/05_basicData.spec.js
+++ b/e2e/paths/12-entry/05_basicData.spec.js
@@ -20,7 +20,6 @@ describe('Entry basic data path', () => {
it('should edit the basic data', async() => {
await page.write(selectors.entryBasicData.reference, 'new movement 8');
await page.write(selectors.entryBasicData.invoiceNumber, 'new movement 8');
- await page.write(selectors.entryBasicData.notes, 'new notes');
await page.write(selectors.entryBasicData.observations, ' edited');
await page.autocompleteSearch(selectors.entryBasicData.supplier, 'Plants nick');
await page.autocompleteSearch(selectors.entryBasicData.currency, 'eur');
@@ -53,12 +52,6 @@ describe('Entry basic data path', () => {
expect(result).toEqual('new movement 8');
});
- it('should confirm the note was edited', async() => {
- const result = await page.waitToGetProperty(selectors.entryBasicData.notes, 'value');
-
- expect(result).toEqual('new notes');
- });
-
it('should confirm the observation was edited', async() => {
const result = await page.waitToGetProperty(selectors.entryBasicData.observations, 'value');
diff --git a/e2e/paths/13-supplier/03_fiscal_data.spec.js b/e2e/paths/13-supplier/03_fiscal_data.spec.js
index 4f9581e32..170a8d05a 100644
--- a/e2e/paths/13-supplier/03_fiscal_data.spec.js
+++ b/e2e/paths/13-supplier/03_fiscal_data.spec.js
@@ -1,6 +1,20 @@
-import selectors from '../../helpers/selectors.js';
import getBrowser from '../../helpers/puppeteer';
+const $ = {
+ saveButton: 'vn-supplier-fiscal-data button[type="submit"]',
+};
+const $inputs = {
+ province: 'vn-supplier-fiscal-data [name="province"]',
+ country: 'vn-supplier-fiscal-data [name="country"]',
+ postcode: 'vn-supplier-fiscal-data [name="postcode"]',
+ city: 'vn-supplier-fiscal-data [name="city"]',
+ socialName: 'vn-supplier-fiscal-data [name="socialName"]',
+ taxNumber: 'vn-supplier-fiscal-data [name="taxNumber"]',
+ account: 'vn-supplier-fiscal-data [name="account"]',
+ sageWithholding: 'vn-supplier-fiscal-data [ng-model="$ctrl.supplier.sageWithholdingFk"]',
+ sageTaxType: 'vn-supplier-fiscal-data [ng-model="$ctrl.supplier.sageTaxTypeFk"]'
+};
+
describe('Supplier fiscal data path', () => {
let browser;
let page;
@@ -10,102 +24,44 @@ describe('Supplier fiscal data path', () => {
page = browser.page;
await page.loginAndModule('administrative', 'supplier');
await page.accessToSearchResult('2');
- await page.accessToSection('supplier.card.fiscalData');
});
afterAll(async() => {
await browser.close();
});
- it('should attempt to edit the fiscal data but fail as the tax number is invalid', async() => {
- await page.clearInput(selectors.supplierFiscalData.city);
- await page.clearInput(selectors.supplierFiscalData.province);
- await page.clearInput(selectors.supplierFiscalData.country);
- await page.clearInput(selectors.supplierFiscalData.postCode);
- await page.write(selectors.supplierFiscalData.city, 'Valencia');
- await page.waitForTimeout(1000); // must repeat this action twice or fails. also #2699 may be a cool solution to this.
- await page.clearInput(selectors.supplierFiscalData.city);
- await page.write(selectors.supplierFiscalData.city, 'Valencia');
- await page.clearInput(selectors.supplierFiscalData.socialName);
- await page.write(selectors.supplierFiscalData.socialName, 'Farmer King SL');
- await page.clearInput(selectors.supplierFiscalData.taxNumber);
- await page.write(selectors.supplierFiscalData.taxNumber, 'Wrong tax number');
- await page.clearInput(selectors.supplierFiscalData.account);
- await page.write(selectors.supplierFiscalData.account, '0123456789');
- await page.autocompleteSearch(selectors.supplierFiscalData.sageWihholding, 'retencion estimacion objetiva');
- await page.autocompleteSearch(selectors.supplierFiscalData.sageTaxType, 'operaciones no sujetas');
+ it('should attempt to edit the fiscal data and check data is saved', async() => {
+ await page.accessToSection('supplier.card.fiscalData');
+ await page.clearInput($inputs.province);
+ await page.clearInput($inputs.country);
+ await page.clearInput($inputs.postcode);
+ await page.overwrite($inputs.city, 'Valencia');
+ await page.overwrite($inputs.socialName, 'Farmer King SL');
+ await page.overwrite($inputs.taxNumber, 'Wrong tax number');
+ await page.overwrite($inputs.account, '0123456789');
+ await page.autocompleteSearch($inputs.sageWithholding, 'retencion estimacion objetiva');
+ await page.autocompleteSearch($inputs.sageTaxType, 'operaciones no sujetas');
+ await page.click($.saveButton);
+ const errorMessage = await page.waitForSnackbar();
+ await page.overwrite($inputs.taxNumber, '12345678Z');
+ await page.click($.saveButton);
+ const successMessage = await page.waitForSnackbar();
- await page.waitToClick(selectors.supplierFiscalData.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Invalid Tax number');
- });
-
- it('should save the changes as the tax number is valid this time', async() => {
- await page.clearInput(selectors.supplierFiscalData.taxNumber);
- await page.write(selectors.supplierFiscalData.taxNumber, '12345678Z');
-
- await page.waitToClick(selectors.supplierFiscalData.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reload the section', async() => {
await page.reloadSection('supplier.card.fiscalData');
- });
+ const values = await page.getValues($inputs);
- it('should check the socialName was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.socialName, 'value');
-
- expect(result).toEqual('Farmer King SL');
- });
-
- it('should check the taxNumber was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.taxNumber, 'value');
-
- expect(result).toEqual('12345678Z');
- });
-
- it('should check the account was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.account, 'value');
-
- expect(result).toEqual('0123456789');
- });
-
- it('should check the sageWihholding was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.sageWihholding, 'value');
-
- expect(result).toEqual('RETENCION ESTIMACION OBJETIVA');
- });
-
- it('should check the sageTaxType was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.sageTaxType, 'value');
-
- expect(result).toEqual('Operaciones no sujetas');
- });
-
- it('should check the postCode was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.postCode, 'value');
-
- expect(result).toEqual('46000');
- });
-
- it('should check the city was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.city, 'value');
-
- expect(result).toEqual('Valencia');
- });
-
- it('should check the province was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.province, 'value');
-
- expect(result).toEqual('Province one (España)');
- });
-
- it('should check the country was edited', async() => {
- const result = await page.waitToGetProperty(selectors.supplierFiscalData.country, 'value');
-
- expect(result).toEqual('España');
+ expect(errorMessage.text).toContain('Invalid Tax number');
+ expect(successMessage.type).toBe('success');
+ expect(values).toEqual({
+ province: 'Province one (España)',
+ country: 'España',
+ postcode: '46000',
+ city: 'Valencia',
+ socialName: 'Farmer King SL',
+ taxNumber: '12345678Z',
+ account: '0123456789',
+ sageWithholding: 'RETENCION ESTIMACION OBJETIVA',
+ sageTaxType: 'Operaciones no sujetas'
+ });
});
});
diff --git a/front/core/components/autocomplete/index.js b/front/core/components/autocomplete/index.js
index 52491f7e0..2539c4ef4 100755
--- a/front/core/components/autocomplete/index.js
+++ b/front/core/components/autocomplete/index.js
@@ -174,7 +174,6 @@ export default class Autocomplete extends Field {
refreshDisplayed() {
let display = '';
- let hasTemplate = this.$transclude && this.$transclude.isSlotFilled('tplItem');
if (this._selection && this.showField) {
if (this.multiple && Array.isArray(this._selection)) {
@@ -182,19 +181,8 @@ export default class Autocomplete extends Field {
if (display.length > 0) display += ', ';
display += item[this.showField];
}
- } else {
+ } else
display = this._selection[this.showField];
- if (hasTemplate) {
- let template = this.$transclude(() => {}, null, 'tplItem');
- const element = template[0];
- const description = element.querySelector('.text-secondary');
- if (description) description.remove();
-
- const displayElement = angular.element(element);
- const displayText = displayElement.text();
- display = this.$interpolate(displayText)(this._selection);
- }
- }
}
this.input.value = display;
diff --git a/front/core/components/avatar/index.html b/front/core/components/avatar/index.html
new file mode 100644
index 000000000..2819e1d50
--- /dev/null
+++ b/front/core/components/avatar/index.html
@@ -0,0 +1,5 @@
+
+ {{::$ctrl.val && $ctrl.val.charAt(0).toUpperCase()}}
+
+
+
diff --git a/front/core/components/avatar/index.js b/front/core/components/avatar/index.js
new file mode 100644
index 000000000..e1aede6be
--- /dev/null
+++ b/front/core/components/avatar/index.js
@@ -0,0 +1,63 @@
+import ngModule from '../../module';
+import Component from 'core/lib/component';
+import './style.scss';
+
+/**
+ * Displays colored avatar based on value.
+ *
+ * @property {*} val The value
+ */
+export default class Avatar extends Component {
+ get val() {
+ return this._val;
+ }
+
+ set val(value) {
+ this._val = value;
+
+ const val = value || '';
+ let hash = 0;
+ for (let i = 0; i < val.length; i++)
+ hash += val.charCodeAt(i);
+ const color = '#' + colors[hash % colors.length];
+
+ const el = this.element;
+ el.style.backgroundColor = color;
+ el.title = val;
+ }
+}
+
+ngModule.vnComponent('vnAvatar', {
+ template: require('./index.html'),
+ controller: Avatar,
+ bindings: {
+ val: '@?'
+ },
+ transclude: true
+});
+
+const colors = [
+ 'e2553d', // Coral
+ 'FFA07A', // Salmon
+ 'FFDAB9', // Peach
+ 'a17077', // Pink
+ 'bf0e99', // Pink light
+ '52a500', // Green chartreuse
+ '00aeae', // Cian
+ 'b754cf', // Purple middle
+ '8a69cd', // Blue lavender
+ '1fa8a1', // Green ocean
+ 'DC143C', // Red crimson
+ '5681cf', // Blue steel
+ 'FF1493', // Ping intense
+ '02ba02', // Green lime
+ '1E90FF', // Blue sky
+ '8B008B', // Purple dark
+ 'cc7000', // Orange bright
+ '00b5b8', // Turquoise
+ '8B0000', // Red dark
+ '008080', // Green bluish
+ '2F4F4F', // Gray board
+ '7e7e7e', // Gray
+ '5d5d5d', // Gray dark
+];
diff --git a/front/core/components/avatar/style.scss b/front/core/components/avatar/style.scss
new file mode 100644
index 000000000..272930821
--- /dev/null
+++ b/front/core/components/avatar/style.scss
@@ -0,0 +1,32 @@
+@import "variables";
+
+vn-avatar {
+ display: block;
+ border-radius: 50%;
+ overflow: hidden;
+ height: 36px;
+ width: 36px;
+ font-size: 22px;
+ background-color: $color-main;
+ position: relative;
+
+ & > * {
+ width: 100%;
+ height: 100%;
+ }
+ & > .letter {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ & > .image {
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ & > img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+}
diff --git a/front/core/components/field/index.js b/front/core/components/field/index.js
index 40ea01e47..e89a042a5 100644
--- a/front/core/components/field/index.js
+++ b/front/core/components/field/index.js
@@ -166,7 +166,7 @@ export default class Field extends FormInput {
if (event.defaultPrevented) return;
event.preventDefault();
this.field = null;
- this.input.dispatchEvent(new Event('change'));
+ this.element.dispatchEvent(new Event('change'));
}
buildInput(type) {
diff --git a/front/core/components/index.js b/front/core/components/index.js
index 86ab89212..45d182121 100644
--- a/front/core/components/index.js
+++ b/front/core/components/index.js
@@ -17,6 +17,7 @@ import './pagination/pagination';
import './searchbar/searchbar';
import './scroll-up/scroll-up';
import './autocomplete';
+import './avatar';
import './button';
import './button-menu';
import './calendar';
@@ -32,6 +33,7 @@ import './float-button';
import './icon-menu';
import './icon-button';
import './input-number';
+import './json-value';
import './label-value';
import './range';
import './input-time';
diff --git a/front/core/components/json-value/index.js b/front/core/components/json-value/index.js
new file mode 100644
index 000000000..6bf0ae4aa
--- /dev/null
+++ b/front/core/components/json-value/index.js
@@ -0,0 +1,73 @@
+import ngModule from '../../module';
+import Component from 'core/lib/component';
+import './style.scss';
+
+const maxStrLen = 50;
+
+/**
+ * Displays pretty JSON value.
+ *
+ * @property {*} value The value
+ */
+export default class Controller extends Component {
+ get value() {
+ return this._value;
+ }
+
+ set value(value) {
+ const wasEmpty = this._value === undefined;
+ this._value = value;
+
+ let text;
+ let cssClass;
+ const type = typeof value;
+
+ if (value == null) {
+ text = '∅';
+ cssClass = 'null';
+ } else {
+ cssClass = type;
+ switch (type) {
+ case 'boolean':
+ text = value ? '✓' : '✗';
+ cssClass = value ? 'true' : 'false';
+ break;
+ case 'string':
+ text = value.length <= maxStrLen
+ ? value
+ : value.substring(0, maxStrLen) + '...';
+ break;
+ case 'object':
+ if (value instanceof Date) {
+ const hasZeroTime =
+ value.getHours() === 0 &&
+ value.getMinutes() === 0 &&
+ value.getSeconds() === 0;
+ const format = hasZeroTime ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm:ss';
+ text = this.$filter('date')(value, format);
+ } else
+ text = value;
+ break;
+ default:
+ text = value;
+ }
+ }
+
+ const el = this.element;
+ el.textContent = text;
+ el.title = type == 'string' && value.length > maxStrLen ? value : '';
+
+ cssClass = `json-${cssClass}`;
+ if (wasEmpty)
+ el.classList.add(cssClass);
+ else
+ el.classList.replace(this.className, cssClass);
+ }
+}
+
+ngModule.vnComponent('vnJsonValue', {
+ controller: Controller,
+ bindings: {
+ value: ''
+ }
+});
diff --git a/front/core/components/json-value/index.spec.js b/front/core/components/json-value/index.spec.js
new file mode 100644
index 000000000..b79d15a5d
--- /dev/null
+++ b/front/core/components/json-value/index.spec.js
@@ -0,0 +1,79 @@
+import './index';
+
+describe('Component vnJsonValue', () => {
+ let controller;
+ let $scope;
+ let $element;
+ let el;
+
+ beforeEach(ngModule('vnCore'));
+
+ beforeEach(inject(($componentController, $rootScope) => {
+ $scope = $rootScope.$new();
+ $element = angular.element('');
+ controller = $componentController('vnJsonValue', {$element, $scope});
+ el = controller.element;
+ }));
+
+ describe('set value()', () => {
+ it('should display null symbol when value is null equivalent', () => {
+ controller.value = null;
+
+ expect(el.textContent).toEqual('∅');
+ expect(el.className).toContain('json-null');
+ });
+
+ it('should display ballot when value is false', () => {
+ controller.value = false;
+
+ expect(el.textContent).toEqual('✗');
+ expect(el.className).toContain('json-false');
+ });
+
+ it('should display check when value is true', () => {
+ controller.value = true;
+
+ expect(el.textContent).toEqual('✓');
+ expect(el.className).toContain('json-true');
+ });
+
+ it('should display string when value is an string', () => {
+ controller.value = 'Foo';
+
+ expect(el.textContent).toEqual('Foo');
+ expect(el.className).toContain('json-string');
+ });
+
+ it('should display only date when value is date with time set to zero', () => {
+ const date = Date.vnNew();
+ date.setHours(0, 0, 0, 0);
+ controller.value = date;
+
+ expect(el.textContent).toEqual('01/01/2001');
+ expect(el.className).toContain('json-object');
+ });
+
+ it('should display full date without time when value is date with time', () => {
+ const date = Date.vnNew();
+ date.setHours(15, 45);
+ controller.value = date;
+
+ expect(el.textContent).toEqual('01/01/2001 15:45:00');
+ expect(el.className).toContain('json-object');
+ });
+
+ it('should display object when value is an object', () => {
+ controller.value = {foo: 'bar'};
+
+ expect(el.textContent).toEqual('[object Object]');
+ expect(el.className).toContain('json-object');
+ });
+
+ it('should display number when value is a number', () => {
+ controller.value = 2050;
+
+ expect(el.textContent).toEqual('2050');
+ expect(el.className).toContain('json-number');
+ });
+ });
+});
diff --git a/front/core/components/json-value/style.scss b/front/core/components/json-value/style.scss
new file mode 100644
index 000000000..009a13d40
--- /dev/null
+++ b/front/core/components/json-value/style.scss
@@ -0,0 +1,23 @@
+vn-json-value {
+ display: inline;
+
+ &.json-string {
+ color: #d172cc;
+ }
+ &.json-object {
+ color: #d1a572;
+ }
+ &.json-number {
+ color: #85d0ff;
+ }
+ &.json-true {
+ color: #7dc489;
+ }
+ &.json-false {
+ color: #c74949;
+ }
+ &.json-null {
+ color: #cd7c7c;
+ font-style: italic;
+ }
+}
diff --git a/front/core/components/table/style.scss b/front/core/components/table/style.scss
index 557268661..2e5d225fd 100644
--- a/front/core/components/table/style.scss
+++ b/front/core/components/table/style.scss
@@ -41,10 +41,15 @@ vn-table {
display: table-row;
height: 48px;
}
- vn-thead, .vn-thead,
- vn-tbody, .vn-tbody,
- vn-tfoot, .vn-tfoot,
- thead, tbody, tfoot {
+ & > thead,
+ & > tbody,
+ & > tfoot,
+ & > vn-thead,
+ & > vn-tbody,
+ & > vn-tfoot,
+ & > .vn-thead,
+ & > .vn-tbody,
+ & > .vn-tfoot {
& > * {
display: table-row;
@@ -111,14 +116,14 @@ vn-table {
color: inherit;
}
}
- a.vn-tbody {
+ & > a.vn-tbody {
&.clickable {
@extend %clickable;
}
}
- vn-tbody > *,
- .vn-tbody > *,
- tbody > * {
+ & > vn-tbody > *,
+ & > .vn-tbody > *,
+ & > tbody > * {
border-bottom: $border-thin;
&:last-child {
diff --git a/front/core/styles/variables.scss b/front/core/styles/variables.scss
index c280838ca..bcc9fab66 100644
--- a/front/core/styles/variables.scss
+++ b/front/core/styles/variables.scss
@@ -2,7 +2,6 @@
$font-size: 11pt;
$menu-width: 256px;
-$right-menu-width: 318px;
$topbar-height: 56px;
$mobile-width: 800px;
$float-spacing: 20px;
diff --git a/front/salix/components/layout/style.scss b/front/salix/components/layout/style.scss
index 6697bb1b0..612366228 100644
--- a/front/salix/components/layout/style.scss
+++ b/front/salix/components/layout/style.scss
@@ -88,13 +88,13 @@ vn-layout {
}
&.right-menu {
& > vn-topbar > .end {
- width: 80px + $right-menu-width;
+ width: 80px + $menu-width;
}
& > .main-view {
- padding-right: $right-menu-width;
+ padding-right: $menu-width;
}
[fixed-bottom-right] {
- right: $right-menu-width;
+ right: $menu-width;
}
}
& > .main-view {
diff --git a/front/salix/components/log/index.html b/front/salix/components/log/index.html
index 05abe84c0..b7697a1fd 100644
--- a/front/salix/components/log/index.html
+++ b/front/salix/components/log/index.html
@@ -3,70 +3,212 @@
url="{{$ctrl.url}}"
filter="$ctrl.filter"
link="{originFk: $ctrl.originId}"
- where="{changedModel: $ctrl.changedModel,
- changedModelId: $ctrl.changedModelId}"
+ where="{changedModel: $ctrl.changedModel, changedModelId: $ctrl.changedModelId}"
data="$ctrl.logs"
- limit="20"
+ order="creationDate DESC, id DESC"
+ limit="20">
+
+
-
-
-
-
-
- Date
- User
- Model
- Action
- Name
- Changes
-
-
-
-
-
- {{::log.creationDate | date:'dd/MM/yyyy HH:mm'}}
-
-
- {{::log.user.name || 'System' | translate}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{::log.changedModelI18n}}
+
+
+ #{{::log.changedModelId}}
+
+
+ {{::log.changedModelValue}}
+
+
+
+
+
+
+
+
+
+
+
+ {{::prop.nameI18n}}:
+
+ ,
-
-
- {{::log.changedModel}}
-
-
- {{::$ctrl.actionsText[log.action]}}
-
-
- {{::log.changedModelValue}}
-
-
-
-
-
- Field |
- Before |
- After |
-
-
-
-
- {{prop.name}} |
- {{prop.old}} |
- {{prop.new}} |
-
-
-
-
- {{::log.description}}
+
+
+
+ {{::prop.nameI18n}}:
+
+
+
+ ←
+
+
-
-
-
-
-
+
+
+ {{::log.description}}
+
+
+ No changes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{::nickname}}
+
{{::name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/front/salix/components/log/index.js b/front/salix/components/log/index.js
index 1c54aa9b8..ba7c5bc55 100644
--- a/front/salix/components/log/index.js
+++ b/front/salix/components/log/index.js
@@ -13,11 +13,17 @@ export default class Controller extends Section {
delete: 'Deletes',
select: 'Views'
};
+ this.actionsClass = {
+ insert: 'success',
+ update: 'warning',
+ delete: 'alert',
+ select: 'notice'
+ };
this.filter = {
include: [{
relation: 'user',
scope: {
- fields: ['name'],
+ fields: ['nickname', 'name', 'image'],
include: {
relation: 'worker',
scope: {
@@ -27,6 +33,20 @@ export default class Controller extends Section {
},
}],
};
+
+ this.dateFilter = this.$filter('date');
+ this.lang = this.$translate.use();
+ this.today = Date.vnNew();
+ this.today.setHours(0, 0, 0, 0);
+ }
+
+ $postLink() {
+ this.resetFilter();
+ this.$.$watch(
+ () => this.$.filter,
+ () => this.applyFilter(),
+ true
+ );
}
get logs() {
@@ -42,6 +62,7 @@ export default class Controller extends Section {
const oldValues = log.oldInstance || empty;
const newValues = log.newInstance || empty;
const locale = validations[log.changedModel]?.locale || empty;
+ log.changedModelI18n = locale.name || log.changedModel;
let props = Object.keys(oldValues).concat(Object.keys(newValues));
props = [...new Set(props)];
@@ -49,9 +70,10 @@ export default class Controller extends Section {
log.props = [];
for (const prop of props) {
log.props.push({
- name: locale[prop] || prop,
- old: this.formatValue(oldValues[prop]),
- new: this.formatValue(newValues[prop])
+ name: prop,
+ nameI18n: locale.columns?.[prop] || prop,
+ old: this.castJsonValue(oldValues[prop]),
+ new: this.castJsonValue(newValues[prop])
});
}
}
@@ -61,36 +83,112 @@ export default class Controller extends Section {
return !(this.changedModel && this.changedModelId);
}
- formatValue(value) {
- let type = typeof value;
+ castJsonValue(value) {
+ return typeof value === 'string' && validDate.test(value)
+ ? new Date(value)
+ : value;
+ }
- if (type === 'string' && validDate.test(value)) {
- value = new Date(value);
- type = typeof value;
+ mainVal(prop, action) {
+ return action == 'delete' ? prop.old : prop.new;
+ }
+
+ toggleAttributes(log, changesEl, force) {
+ log.expand = force;
+ changesEl.classList.toggle('expanded', force);
+ }
+
+ relativeDate(dateVal) {
+ if (dateVal == null) return '';
+ const date = new Date(dateVal);
+ const dateZeroTime = new Date(dateVal);
+ dateZeroTime.setHours(0, 0, 0, 0);
+ const diff = Math.trunc((this.today.getTime() - dateZeroTime.getTime()) / (1000 * 3600 * 24));
+
+ let format;
+ if (diff == 0)
+ format = `'${this.$t('today')}'`;
+ else if (diff == 1)
+ format = `'${this.$t('yesterday')}'`;
+ else if (diff > 1 && diff < 7)
+ format = `'${date.toLocaleDateString(this.lang, {weekday: 'short'})}'`;
+ else if (this.today.getFullYear() == date.getFullYear())
+ format = `d '${date.toLocaleDateString(this.lang, {month: 'short'})}'`;
+ else
+ format = `dd/MM/yyyy`;
+
+ return this.dateFilter(date, `${format} HH:mm`);
+ }
+
+ resetFilter() {
+ this.$.filter = {who: 'all'};
+ }
+
+ applyFilter() {
+ const filter = this.$.filter;
+
+ function getParam(prop, value) {
+ if (value == null || value == '') return null;
+ switch (prop) {
+ case 'changedModelValue':
+ return {[prop]: {like: `%${value}%`}};
+ case 'who':
+ switch (value) {
+ case 'all':
+ return null;
+ case 'user':
+ return {userFk: {neq: null}};
+ case 'system':
+ return {userFk: null};
+ }
+ case 'actions':
+ const inq = [];
+ for (const action in value) {
+ if (value[action])
+ inq.push(action);
+ }
+ return inq.length ? {action: {inq}} : null;
+ case 'from':
+ if (filter.to) {
+ return {creationDate: {gte: value}};
+ } else {
+ const to = new Date(value);
+ to.setHours(23, 59, 59, 999);
+ return {creationDate: {between: [value, to]}};
+ }
+ case 'to':
+ const to = new Date(value);
+ to.setHours(23, 59, 59, 999);
+ return {creationDate: {lte: to}};
+ default:
+ return {[prop]: value};
+ }
}
- switch (type) {
- case 'boolean':
- return value ? '✓' : '✗';
- case 'object':
- if (value instanceof Date) {
- const hasZeroTime =
- value.getHours() === 0 &&
- value.getMinutes() === 0 &&
- value.getSeconds() === 0;
- const format = hasZeroTime ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm:ss';
- return this.$filter('date')(value, format);
- }
- else
- return value;
- default:
- return value;
+ const and = [];
+ for (const prop in filter) {
+ const param = getParam(prop, filter[prop]);
+ if (param) and.push(param);
+ }
+
+ const lbFilter = and.length ? {where: {and}} : null;
+ return this.$.model.applyFilter(lbFilter);
+ }
+
+ searchUser(search) {
+ if (/^[0-9]+$/.test(search)) {
+ return {id: search};
+ } else {
+ return {or: [
+ {name: search},
+ {nickname: {like: `%${search}%`}}
+ ]}
}
}
- showWorkerDescriptor(event, workerId) {
- if (!workerId) return;
- this.$.workerDescriptor.show(event.target, workerId);
+ showWorkerDescriptor(event, log) {
+ if (log.user?.worker)
+ this.$.workerDescriptor.show(event.target, log.userFk);
}
}
diff --git a/front/salix/components/log/index.spec.js b/front/salix/components/log/index.spec.js
new file mode 100644
index 000000000..d01a08967
--- /dev/null
+++ b/front/salix/components/log/index.spec.js
@@ -0,0 +1,97 @@
+import './index';
+
+describe('Salix Component vnLog', () => {
+ let controller;
+ let $scope;
+ let $element;
+
+ beforeEach(ngModule('salix'));
+
+ beforeEach(inject(($componentController, $rootScope) => {
+ $scope = $rootScope.$new();
+ $element = angular.element('');
+ controller = $componentController('vnLog', {$element, $scope});
+ }));
+
+ describe('relativeDate()', () => {
+ let date;
+
+ beforeEach(() => {
+ date = Date.vnNew();
+ });
+
+ it('should return empty string when date is null', () => {
+ const ret = controller.relativeDate(null);
+
+ expect(ret).toEqual('');
+ });
+
+ it('should return empty string when date is undefined', () => {
+ const ret = controller.relativeDate(undefined);
+
+ expect(ret).toEqual('');
+ });
+
+ it('should return today and time when date is today', () => {
+ const ret = controller.relativeDate(date);
+
+ expect(ret).toEqual('today 12:00');
+ });
+
+ it('should return yesterday and time when date is yesterday', () => {
+ date.setDate(date.getDate() - 1);
+ const ret = controller.relativeDate(date);
+
+ expect(ret).toEqual('yesterday 12:00');
+ });
+
+ it('should return abreviated weekday name and time when date is on past week', () => {
+ date.setDate(date.getDate() - 3);
+ const ret = controller.relativeDate(date);
+
+ expect(ret).toEqual('Fri 12:00');
+ });
+
+ it('should return abreviated month name, day number and time when date is on this year', () => {
+ date.setDate(date.getDate() + 20);
+ const ret = controller.relativeDate(date);
+
+ expect(ret).toEqual('21 Jan 12:00');
+ });
+
+ it('should return abreviated month name, day number, year and time when date is on different year', () => {
+ date.setDate(date.getDate() - 20);
+ const ret = controller.relativeDate(date);
+
+ expect(ret).toEqual('12/12/2000 12:00');
+ });
+
+ it('should convert to date and return string when date is not a Date class instance', () => {
+ const ret = controller.relativeDate(date.toJSON());
+
+ expect(ret).toEqual('today 12:00');
+ });
+ });
+
+ describe('castJsonValue()', () => {
+ it('should return date when string has valid JSON date format', () => {
+ const now = Date.vnNew();
+
+ const ret = controller.castJsonValue(now.toJSON());
+
+ expect(ret).toBeInstanceOf(Date);
+ });
+
+ it('should return same value when is string with invalid JSON date format', () => {
+ const ret = controller.castJsonValue('Foo');
+
+ expect(ret).toEqual('Foo');
+ });
+
+ it('should return same value when is not an string', () => {
+ const ret = controller.castJsonValue(1001);
+
+ expect(ret).toEqual(1001);
+ });
+ });
+});
diff --git a/front/salix/components/log/locale/es.yml b/front/salix/components/log/locale/es.yml
index d341095d8..385b42147 100644
--- a/front/salix/components/log/locale/es.yml
+++ b/front/salix/components/log/locale/es.yml
@@ -13,3 +13,6 @@ Views: Visualiza
System: Sistema
note: nota
Changes: Cambios
+No changes: No hay cambios
+today: hoy
+yesterday: ayer
diff --git a/front/salix/components/log/style.scss b/front/salix/components/log/style.scss
index 68cd5a047..b78dc3824 100644
--- a/front/salix/components/log/style.scss
+++ b/front/salix/components/log/style.scss
@@ -1,66 +1,152 @@
@import "variables";
vn-log {
- vn-td {
- vertical-align: initial !important;
- }
- .changes {
- display: none;
- }
- .label {
- color: $color-font-secondary;
- }
- .value {
- color: $color-font;
- }
+ .change {
+ display: flex;
- @media screen and (max-width: 1570px) {
- vn-table .expendable {
+ & > .user-wrapper {
+ position: relative;
+ padding-right: 10px;
+
+ & > vn-avatar {
+ cursor: pointer;
+
+ &.system {
+ background-color: $color-main !important;
+ }
+ }
+ & > .arrow {
+ height: 8px;
+ width: 8px;
+ position: absolute;
+ transform: rotateY(0deg) rotate(45deg);
+ top: 18px;
+ right: -4px;
+ z-index: 1;
+ }
+ & > .line {
+ position: absolute;
+ background-color: $color-main;
+ width: 2px;
+ left: 17px;
+ z-index: -1;
+ top: 44px;
+ bottom: -8px;
+ }
+ }
+ &:last-child > .user-wrapper > .line {
display: none;
}
- .changes {
- padding-top: 10px;
- display: block;
+ .detail {
+ position: relative;
+ flex-grow: 1;
+ width: 100%;
+ border-radius: 2px;
+ overflow: hidden;
+
+ & > .header {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ & > .chip {
+ padding: 2px 4px;
+ border-radius: 4px;
+ display: inline-block;
+ color: $color-font-bg;
+
+ &.notice {
+ background-color: $color-notice-medium;
+ }
+ &.success {
+ background-color: $color-success-medium;
+ }
+ &.warning {
+ background-color: $color-main-medium;
+ }
+ &.alert {
+ background-color: lighten($color-alert, 5%);
+ }
+ }
+ .date {
+ float: right;
+ }
+ }
+ & > .model {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ & > .model-name {
+ text-transform: capitalize;
+ }
+ & > .model-value {
+ font-style: italic;
+ color: #c7bd2b;
+ }
+ & > .model-id {
+ color: $color-font-secondary;
+ font-size: .9em;
+ }
+ }
}
}
- .attributes {
- width: 100%;
+ .changes {
+ overflow: hidden;
+ background-color: rgba(255, 255, 255, .05);
+ border-radius: 4px;
+ color: $color-font-secondary;
+ transition: max-height 150ms ease-in-out;
+ max-height: 28px;
+ position: relative;
- tr {
- height: 10px;
+ & > .expand-button,
+ & > .shrink-button {
+ display: none;
+ }
+ &.props {
+ padding-right: 24px;
- & > td {
- padding: 2px;
+ & > .expand-button,
+ & > .shrink-button {
+ position: absolute;
+ top: 6px;
+ right: 8px;
+ font-size: inherit;
+ float: right;
+ cursor: pointer;
}
- & > td.field,
- & > th.field {
- width: 20%;
- color: gray;
+ & > .expand-button {
+ display: block;
}
- & > td.before,
- & > th.before,
- & > td.after,
- & > th.after {
- width: 40%;
- white-space: pre-line;
+ &.expanded {
+ max-height: 500px;
+ padding-right: 0;
+
+ & > .changes-wrapper {
+ text-overflow: initial;
+ white-space: initial;
+ }
+ & > .shrink-button {
+ display: block;
+ }
+ & > .expand-button {
+ display: none;
+ }
+ }
+ }
+ & > .changes-wrapper {
+ padding: 4px 6px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ & > .no-changes {
+ font-style: italic;
+ }
+ .json-field {
+ text-transform: capitalize;
}
}
}
}
-.ellipsis {
- white-space: nowrap;
- overflow: hidden;
- max-width: 400px;
- text-overflow: ellipsis;
- display: inline-block;
-}
-.no-ellipsize,
-[no-ellipsize] {
- text-overflow: '';
- white-space: normal;
- overflow: auto;
-}
-.alignSpan {
- overflow: hidden;
- display: inline-block;
-}
diff --git a/loopback/common/methods/log/editors.js b/loopback/common/methods/log/editors.js
new file mode 100644
index 000000000..4c0b6d2d5
--- /dev/null
+++ b/loopback/common/methods/log/editors.js
@@ -0,0 +1,40 @@
+const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
+
+module.exports = Self => {
+ Self.remoteMethod('editors', {
+ description: 'Get the list of entity editors',
+ accepts: [
+ {
+ arg: 'id',
+ type: 'integer',
+ description: 'The model id',
+ required: true
+ }, {
+ arg: 'filter',
+ type: 'Object',
+ description: 'The user filter object'
+ }
+ ],
+ returns: {
+ type: [Self],
+ root: true
+ },
+ http: {
+ path: `/:id/editors`,
+ verb: 'GET'
+ }
+ });
+
+ Self.editors = async(id, filter) => {
+ const res = await Self.find({
+ fields: ['userFk'],
+ where: {originFk: id}
+ });
+ const userIds = new Set(res.map(x => x.userFk));
+
+ filter = mergeFilters(filter, {
+ where: {id: {inq: [...userIds]}}
+ });
+ return await Self.app.models.VnUser.find(filter);
+ };
+};
diff --git a/loopback/common/methods/log/models.js b/loopback/common/methods/log/models.js
new file mode 100644
index 000000000..ec3eac1ad
--- /dev/null
+++ b/loopback/common/methods/log/models.js
@@ -0,0 +1,44 @@
+const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
+
+module.exports = Self => {
+ Self.remoteMethod('models', {
+ description: 'Get the list of entity models',
+ accepts: [
+ {
+ arg: 'id',
+ type: 'integer',
+ description: 'The model id',
+ required: true
+ }, {
+ arg: 'filter',
+ type: 'Object',
+ description: 'The filter object'
+ }
+ ],
+ returns: {
+ type: [Self],
+ root: true
+ },
+ http: {
+ path: `/:id/models`,
+ verb: 'GET'
+ }
+ });
+
+ Self.models = async(id, filter) => {
+ filter = mergeFilters(filter, {
+ fields: ['changedModel'],
+ where: {
+ originFk: id,
+ changedModel: {neq: null}
+ }
+ });
+ const res = await Self.find(filter);
+
+ const set = new Set();
+ return res.filter(x => set.has(x.changedModel)
+ ? false
+ : set.add(x.changedModel)
+ );
+ };
+};
diff --git a/loopback/common/models/log.js b/loopback/common/models/log.js
new file mode 100644
index 000000000..0622431a6
--- /dev/null
+++ b/loopback/common/models/log.js
@@ -0,0 +1,10 @@
+
+module.exports = function(Self) {
+ Object.assign(Self, {
+ setup() {
+ Self.super_.setup.call(this);
+ require('../methods/log/editors')(this);
+ require('../methods/log/models')(this);
+ }
+ });
+};
diff --git a/loopback/common/models/log.json b/loopback/common/models/log.json
new file mode 100644
index 000000000..54046f072
--- /dev/null
+++ b/loopback/common/models/log.json
@@ -0,0 +1,4 @@
+{
+ "name": "Log",
+ "base": "VnModel"
+}
diff --git a/loopback/common/models/vn-model.js b/loopback/common/models/vn-model.js
index f57fb3c30..f469e893a 100644
--- a/loopback/common/models/vn-model.js
+++ b/loopback/common/models/vn-model.js
@@ -28,12 +28,14 @@ module.exports = function(Self) {
});
// Register field ACL validation
- /* this.beforeRemote('prototype.patchAttributes', ctx => this.checkUpdateAcls(ctx));
+ /*
+ this.beforeRemote('prototype.patchAttributes', ctx => this.checkUpdateAcls(ctx));
this.beforeRemote('updateAll', ctx => this.checkUpdateAcls(ctx));
this.beforeRemote('patchOrCreate', ctx => this.checkInsertAcls(ctx));
this.beforeRemote('create', ctx => this.checkInsertAcls(ctx));
this.beforeRemote('replaceById', ctx => this.checkInsertAcls(ctx));
- this.beforeRemote('replaceOrCreate', ctx => this.checkInsertAcls(ctx)); */
+ this.beforeRemote('replaceOrCreate', ctx => this.checkInsertAcls(ctx));
+ */
this.remoteMethod('crud', {
description: `Create, update or/and delete instances from model with a single request`,
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index 5767632ee..ae0da8170 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -156,18 +156,19 @@
"Component cost not set": "Componente coste no está estabecido",
"Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº 2": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº 2",
"Description cannot be blank": "Description cannot be blank",
- "company": "Company",
- "country": "Country",
- "clientId": "Id client",
- "clientSocialName": "Client",
- "amount": "Amount",
- "taxableBase": "Taxable base",
- "ticketFk": "Id ticket",
- "isActive": "Active",
- "hasToInvoice": "Invoice",
- "isTaxDataChecked": "Data checked",
- "comercialId": "Id Comercial",
- "comercialName": "Comercial",
+ "company": "Company",
+ "country": "Country",
+ "clientId": "Id client",
+ "clientSocialName": "Client",
+ "amount": "Amount",
+ "taxableBase": "Taxable base",
+ "ticketFk": "Id ticket",
+ "isActive": "Active",
+ "hasToInvoice": "Invoice",
+ "isTaxDataChecked": "Data checked",
+ "comercialId": "Id Comercial",
+ "comercialName": "Comercial",
"Added observation": "Added observation",
- "Comment added to client": "Comment added to client"
-}
+ "Comment added to client": "Comment added to client",
+ "This ticket is already a refund": "This ticket is already a refund"
+}
\ No newline at end of file
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index 3ef3c4a22..45993bdd5 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -279,15 +279,16 @@
"Comment added to client": "Observación añadida al cliente {{clientFk}}",
"Cannot create a new claimBeginning from a different ticket": "No se puede crear una línea de reclamación de un ticket diferente al origen",
"company": "Compañía",
- "country": "País",
- "clientId": "Id cliente",
- "clientSocialName": "Cliente",
- "amount": "Importe",
- "taxableBase": "Base",
- "ticketFk": "Id ticket",
- "isActive": "Activo",
- "hasToInvoice": "Facturar",
- "isTaxDataChecked": "Datos comprobados",
- "comercialId": "Id comercial",
- "comercialName": "Comercial"
-}
+ "country": "País",
+ "clientId": "Id cliente",
+ "clientSocialName": "Cliente",
+ "amount": "Importe",
+ "taxableBase": "Base",
+ "ticketFk": "Id ticket",
+ "isActive": "Activo",
+ "hasToInvoice": "Facturar",
+ "isTaxDataChecked": "Datos comprobados",
+ "comercialId": "Id comercial",
+ "comercialName": "Comercial",
+ "Invalid NIF for VIES": "Invalid NIF for VIES"
+}
\ No newline at end of file
diff --git a/modules/account/back/locale/mail/en.yml b/modules/account/back/locale/mail/en.yml
new file mode 100644
index 000000000..b492ea640
--- /dev/null
+++ b/modules/account/back/locale/mail/en.yml
@@ -0,0 +1,7 @@
+name: mail
+columns:
+ id: id
+ receiver: receiver
+ replyTo: reply to
+ subject: subject
+ body: body
diff --git a/modules/account/back/locale/mail/es.yml b/modules/account/back/locale/mail/es.yml
new file mode 100644
index 000000000..a0b02b45f
--- /dev/null
+++ b/modules/account/back/locale/mail/es.yml
@@ -0,0 +1,7 @@
+name: mail
+columns:
+ id: id
+ receiver: receptor
+ replyTo: responder a
+ subject: asunto
+ body: cuerpo
diff --git a/modules/account/back/models/role-log.json b/modules/account/back/models/role-log.json
index b4fc3daf9..510e98b68 100644
--- a/modules/account/back/models/role-log.json
+++ b/modules/account/back/models/role-log.json
@@ -1,6 +1,6 @@
{
"name": "RoleLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "account.roleLog"
diff --git a/modules/account/back/models/user-log.json b/modules/account/back/models/user-log.json
index 01acb0176..c5aa08e05 100644
--- a/modules/account/back/models/user-log.json
+++ b/modules/account/back/models/user-log.json
@@ -1,6 +1,6 @@
{
"name": "UserLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "account.userLog"
diff --git a/modules/account/front/main/index.html b/modules/account/front/main/index.html
index dd3489e9f..5872a328d 100644
--- a/modules/account/front/main/index.html
+++ b/modules/account/front/main/index.html
@@ -6,6 +6,7 @@
-
\ No newline at end of file
+
diff --git a/modules/claim/back/locale/claim-beginning/en.yml b/modules/claim/back/locale/claim-beginning/en.yml
new file mode 100644
index 000000000..47cc29c69
--- /dev/null
+++ b/modules/claim/back/locale/claim-beginning/en.yml
@@ -0,0 +1,6 @@
+name: claim beginning
+columns:
+ id: id
+ quantity: quantity
+ claimFk: claim
+ saleFk: sale
diff --git a/modules/claim/back/locale/claim-beginning/es.yml b/modules/claim/back/locale/claim-beginning/es.yml
new file mode 100644
index 000000000..5e898c25e
--- /dev/null
+++ b/modules/claim/back/locale/claim-beginning/es.yml
@@ -0,0 +1,6 @@
+name: comienzo reclamación
+columns:
+ id: id
+ quantity: cantidad
+ claimFk: reclamación
+ saleFk: línea
diff --git a/modules/claim/back/locale/claim-development/en.yml b/modules/claim/back/locale/claim-development/en.yml
new file mode 100644
index 000000000..054381e67
--- /dev/null
+++ b/modules/claim/back/locale/claim-development/en.yml
@@ -0,0 +1,9 @@
+name: claim development
+columns:
+ id: id
+ claimFk: claim
+ claimResponsibleFk: responsible
+ claimReasonFk: reason
+ claimResultFk: result
+ claimRedeliveryFk: redelivery
+ workerFk: worker
diff --git a/modules/claim/back/locale/claim-development/es.yml b/modules/claim/back/locale/claim-development/es.yml
new file mode 100644
index 000000000..d5223e755
--- /dev/null
+++ b/modules/claim/back/locale/claim-development/es.yml
@@ -0,0 +1,9 @@
+name: desarrollo reclamación
+columns:
+ id: id
+ claimFk: reclamación
+ claimResponsibleFk: responsable
+ claimReasonFk: motivo
+ claimResultFk: resultado
+ claimRedeliveryFk: reenvío
+ workerFk: trabajador
diff --git a/modules/claim/back/locale/claim-dms/en.yml b/modules/claim/back/locale/claim-dms/en.yml
new file mode 100644
index 000000000..c76c364e7
--- /dev/null
+++ b/modules/claim/back/locale/claim-dms/en.yml
@@ -0,0 +1,4 @@
+name: claim dms
+columns:
+ dmsFk: dms
+ claimFk: claim
diff --git a/modules/claim/back/locale/claim-dms/es.yml b/modules/claim/back/locale/claim-dms/es.yml
new file mode 100644
index 000000000..949e20a36
--- /dev/null
+++ b/modules/claim/back/locale/claim-dms/es.yml
@@ -0,0 +1,4 @@
+name: documento reclamación
+columns:
+ dmsFk: dms
+ claimFk: reclamación
diff --git a/modules/claim/back/locale/claim-end/en.yml b/modules/claim/back/locale/claim-end/en.yml
new file mode 100644
index 000000000..f9e736d76
--- /dev/null
+++ b/modules/claim/back/locale/claim-end/en.yml
@@ -0,0 +1,7 @@
+name: claim end
+columns:
+ id: id
+ claimFk: claim
+ saleFk: sale
+ workerFk: worker
+ claimDestinationFk: destination
diff --git a/modules/claim/back/locale/claim-end/es.yml b/modules/claim/back/locale/claim-end/es.yml
new file mode 100644
index 000000000..9855eca03
--- /dev/null
+++ b/modules/claim/back/locale/claim-end/es.yml
@@ -0,0 +1,7 @@
+name: final reclamación
+columns:
+ id: id
+ claimFk: reclamación
+ saleFk: línea
+ workerFk: trabajador
+ claimDestinationFk: destino
diff --git a/modules/claim/back/locale/claim-observation/en.yml b/modules/claim/back/locale/claim-observation/en.yml
new file mode 100644
index 000000000..772ea038c
--- /dev/null
+++ b/modules/claim/back/locale/claim-observation/en.yml
@@ -0,0 +1,7 @@
+name: claim observation
+columns:
+ id: id
+ claimFk: claim
+ text: text
+ created: created
+ workerFk: worker
diff --git a/modules/claim/back/locale/claim-observation/es.yml b/modules/claim/back/locale/claim-observation/es.yml
new file mode 100644
index 000000000..fae3a1ae9
--- /dev/null
+++ b/modules/claim/back/locale/claim-observation/es.yml
@@ -0,0 +1,7 @@
+name: observación reclamación
+columns:
+ id: id
+ claimFk: reclamación
+ text: texto
+ created: creado
+ workerFk: tabajador
diff --git a/modules/claim/back/locale/claim/en.yml b/modules/claim/back/locale/claim/en.yml
new file mode 100644
index 000000000..7c3ee7555
--- /dev/null
+++ b/modules/claim/back/locale/claim/en.yml
@@ -0,0 +1,16 @@
+name: claim
+columns:
+ id: id
+ observation: observation
+ ticketCreated: ticket created
+ isChargedToMana: charged to mana
+ created: created
+ responsibility: responsibility
+ hasToPickUp: has to pickUp
+ ticketFk: ticket
+ claimStateFk: claim state
+ workerFk: worker
+ packages: packages
+ rma: rma
+ clientFk: client
+ claimFk: claim
diff --git a/modules/claim/back/locale/claim/es.yml b/modules/claim/back/locale/claim/es.yml
new file mode 100644
index 000000000..27fd76ceb
--- /dev/null
+++ b/modules/claim/back/locale/claim/es.yml
@@ -0,0 +1,16 @@
+name: reclamación
+columns:
+ id: id
+ observation: observación
+ ticketCreated: ticket creado
+ isChargedToMana: cargado al maná
+ created: creado
+ responsibility: responsabilidad
+ hasToPickUp: es recogida
+ ticketFk: ticket
+ claimStateFk: estado reclamación
+ workerFk: trabajador
+ packages: paquetes
+ rma: rma
+ clientFk: cliente
+ claimFk: reclamación
diff --git a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js
index f0686ffa6..83043f012 100644
--- a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js
+++ b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js
@@ -109,6 +109,11 @@ module.exports = Self => {
zoneFk: zone.id
}, myOptions);
+ await models.TicketRefund.create({
+ refundTicketFk: newRefundTicket.id,
+ originalTicketFk: claim.ticket().id
+ }, myOptions);
+
await saveObservation({
description: `Reclama ticket: ${claim.ticketFk}`,
ticketFk: newRefundTicket.id,
diff --git a/modules/claim/back/models/claim-log.json b/modules/claim/back/models/claim-log.json
index bb6af02b4..9f28af63e 100644
--- a/modules/claim/back/models/claim-log.json
+++ b/modules/claim/back/models/claim-log.json
@@ -1,6 +1,6 @@
{
"name": "ClaimLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "claimLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/claim/front/action/index.html b/modules/claim/front/action/index.html
index 81b14d3a7..9da51b8de 100644
--- a/modules/claim/front/action/index.html
+++ b/modules/claim/front/action/index.html
@@ -16,7 +16,7 @@
value="{{$ctrl.claimedTotal | currency: 'EUR':2}}">
-
+
-
+ label="Change destination"
+ disabled="$ctrl.checked.length == 0"
+ ng-click="changeDestination.show()">
+
+
+
-
-
-
+
diff --git a/modules/client/back/locale/address/en.yml b/modules/client/back/locale/address/en.yml
new file mode 100644
index 000000000..3d090ba89
--- /dev/null
+++ b/modules/client/back/locale/address/en.yml
@@ -0,0 +1,20 @@
+name: address
+columns:
+ id: id
+ nickname: nickname
+ street: street
+ city: city
+ postalCode: postal code
+ phone: phone
+ mobile: mobile
+ isActive: active
+ longitude: longitude
+ latitude: latitude
+ isEqualizated: equalizated
+ isLogifloraAllowed: logiflora allowed
+ provinceFk: province
+ clientFk: client
+ agencyModeFk: agency
+ addressFk: address
+ incotermsFk: incoterms
+ customsAgentFk: customs agent
diff --git a/modules/client/back/locale/address/es.yml b/modules/client/back/locale/address/es.yml
new file mode 100644
index 000000000..1379f75a4
--- /dev/null
+++ b/modules/client/back/locale/address/es.yml
@@ -0,0 +1,20 @@
+name: dirección
+columns:
+ id: id
+ nickname: apodo
+ street: calle
+ city: ciudad
+ postalCode: código postal
+ phone: teléfono
+ mobile: móvil
+ isActive: activo
+ longitude: longitud
+ latitude: latitud
+ isEqualizated: igualado
+ isLogifloraAllowed: logiflora permitido
+ provinceFk: provincia
+ clientFk: cliente
+ agencyModeFk: agencia
+ addressFk: dirección
+ incotermsFk: incoterms
+ customsAgentFk: agente adunanas
diff --git a/modules/client/back/locale/client-contact/en.yml b/modules/client/back/locale/client-contact/en.yml
new file mode 100644
index 000000000..5bd6e25db
--- /dev/null
+++ b/modules/client/back/locale/client-contact/en.yml
@@ -0,0 +1,6 @@
+name: client contact
+columns:
+ id: id
+ name: name
+ phone: phone
+ clientFk: client
diff --git a/modules/client/back/locale/client-contact/es.yml b/modules/client/back/locale/client-contact/es.yml
new file mode 100644
index 000000000..5802c0dde
--- /dev/null
+++ b/modules/client/back/locale/client-contact/es.yml
@@ -0,0 +1,6 @@
+name: contacto cliente
+columns:
+ id: id
+ name: nombre
+ phone: teléfono
+ clientFk: cliente
diff --git a/modules/client/back/locale/client-dms/en.yml b/modules/client/back/locale/client-dms/en.yml
new file mode 100644
index 000000000..c8ad68635
--- /dev/null
+++ b/modules/client/back/locale/client-dms/en.yml
@@ -0,0 +1,4 @@
+name: client dms
+columns:
+ dmsFk: dms
+ clientFk: client
diff --git a/modules/client/back/locale/client-dms/es.yml b/modules/client/back/locale/client-dms/es.yml
new file mode 100644
index 000000000..c683f4764
--- /dev/null
+++ b/modules/client/back/locale/client-dms/es.yml
@@ -0,0 +1,4 @@
+name: documento cliente
+columns:
+ dmsFk: dms
+ clientFk: client
diff --git a/modules/client/back/locale/client-observation/en.yml b/modules/client/back/locale/client-observation/en.yml
new file mode 100644
index 000000000..2dd8393ae
--- /dev/null
+++ b/modules/client/back/locale/client-observation/en.yml
@@ -0,0 +1,7 @@
+name: client observation
+columns:
+ id: id
+ clientFk: client
+ text: text
+ created: created
+ workerFk: worker
diff --git a/modules/client/back/locale/client-observation/es.yml b/modules/client/back/locale/client-observation/es.yml
new file mode 100644
index 000000000..0fc6bbf04
--- /dev/null
+++ b/modules/client/back/locale/client-observation/es.yml
@@ -0,0 +1,7 @@
+name: observación cliente
+columns:
+ id: id
+ clientFk: cliente
+ text: texto
+ created: creado
+ workerFk: trabajador
diff --git a/modules/client/back/locale/client-sample/en.yml b/modules/client/back/locale/client-sample/en.yml
new file mode 100644
index 000000000..77639fbb4
--- /dev/null
+++ b/modules/client/back/locale/client-sample/en.yml
@@ -0,0 +1,8 @@
+name: client sample
+columns:
+ id: id
+ created: created
+ clientFk: client
+ typeFk: type
+ userFk: user
+ companyFk: company
diff --git a/modules/client/back/locale/client-sample/es.yml b/modules/client/back/locale/client-sample/es.yml
new file mode 100644
index 000000000..6311eb25a
--- /dev/null
+++ b/modules/client/back/locale/client-sample/es.yml
@@ -0,0 +1,8 @@
+name: muestra cliente
+columns:
+ id: id
+ created: creado
+ clientFk: cliente
+ typeFk: tipo
+ userFk: usuario
+ companyFk: compañia
diff --git a/modules/client/back/locale/client/en.yml b/modules/client/back/locale/client/en.yml
new file mode 100644
index 000000000..71048f657
--- /dev/null
+++ b/modules/client/back/locale/client/en.yml
@@ -0,0 +1,50 @@
+name: client
+columns:
+ id: id
+ name: name
+ fi: fi
+ socialName: socialName
+ contact: contact
+ street: street
+ city: city
+ postcode: postcode
+ email: email
+ phone: phone
+ mobile: mobile
+ isActive: active
+ credit: credit
+ creditInsurance: credit insurance
+ iban: iban
+ dueDay: due day
+ isEqualizated: equalizated
+ isFreezed: freezed
+ hasToInvoiceByAddress: invoice by address
+ hasToInvoice: has to invoice
+ isToBeMailed: be mailed
+ hasSepaVnl: sepa nnl
+ hasLcr: lcr
+ hasCoreVnl: core vnl
+ hasCoreVnh: core vnh
+ hasIncoterms: incoterms
+ isTaxDataChecked: tax data checked
+ eypbc: eypbc
+ quality: quality
+ isVies: vies
+ isRelevant: relevant
+ accountingAccount: accounting account
+ created: created
+ sageTaxTypeFk: sage tax type
+ sageTransactionTypeFk: sage transaction type
+ businessTypeFk: business type
+ salesPersonFk: sales person
+ hasElectronicInvoice: electronic invoice
+ payMethodFk: pay method
+ provinceFk: province
+ countryFk: country
+ contactChannelFk: contact channel
+ clientTypeFk: client type
+ clientFk: client
+ defaultAddressFk: default address
+ bankEntityFk: bank entity
+ transferorFk: transferor
+
diff --git a/modules/client/back/locale/client/es.yml b/modules/client/back/locale/client/es.yml
new file mode 100644
index 000000000..04e391af0
--- /dev/null
+++ b/modules/client/back/locale/client/es.yml
@@ -0,0 +1,50 @@
+name: cliente
+columns:
+ id: id
+ name: nombre
+ fi: fi
+ socialName: nombre social
+ contact: contacto
+ street: calle
+ city: ciudad
+ postcode: código postal
+ email: email
+ phone: teléfono
+ mobile: móvil
+ isActive: activo
+ credit: crédito
+ creditInsurance: seguro crédito
+ iban: iban
+ dueDay: día vencimiento
+ isEqualizated: igualado
+ isFreezed: congelado
+ hasToInvoiceByAddress: factura por dirección
+ hasToInvoice: tiene que facturar
+ isToBeMailed: envío por email
+ hasSepaVnl: sepa nnl
+ hasLcr: lcr
+ hasCoreVnl: centro vnl
+ hasCoreVnh: cenrto vnh
+ hasIncoterms: incoterms
+ isTaxDataChecked: datos fiscales comprobados
+ eypbc: eypbc
+ quality: calidad
+ isVies: vies
+ isRelevant: importante
+ accountingAccount: cuenta contable
+ created: creado
+ sageTaxTypeFk: tipo impuesto sage
+ sageTransactionTypeFk: tipo transacción sage
+ businessTypeFk: tipo negocio
+ salesPersonFk: comercial
+ hasElectronicInvoice: factura electrónica
+ payMethodFk: método pago
+ provinceFk: provincia
+ countryFk: país
+ contactChannelFk: canal de contacto
+ clientTypeFk: tipo de cliente
+ clientFk: cliente
+ defaultAddressFk: dirección predeterminada
+ bankEntityFk: entidad bancaria
+ transferorFk: cedente
+
diff --git a/modules/client/back/locale/greuge/en.yml b/modules/client/back/locale/greuge/en.yml
new file mode 100644
index 000000000..5c84ef4ee
--- /dev/null
+++ b/modules/client/back/locale/greuge/en.yml
@@ -0,0 +1,11 @@
+name: greuge
+columns:
+ id: id
+ description: description
+ amount: amount
+ shipped: shipped
+ created: created
+ greugeTypeFk: greuge type
+ clientFk: client
+ ticketFk: ticket
+ userFk: user
diff --git a/modules/client/back/locale/greuge/es.yml b/modules/client/back/locale/greuge/es.yml
new file mode 100644
index 000000000..ffb29eb61
--- /dev/null
+++ b/modules/client/back/locale/greuge/es.yml
@@ -0,0 +1,11 @@
+name: greuge
+columns:
+ id: id
+ description: descripción
+ amount: cantidad
+ shipped: enviado
+ created: creado
+ greugeTypeFk: tipo de greuge
+ clientFk: cliente
+ ticketFk: ticket
+ userFk: usuario
diff --git a/modules/client/back/locale/recovery/en.yml b/modules/client/back/locale/recovery/en.yml
new file mode 100644
index 000000000..ba02df7c2
--- /dev/null
+++ b/modules/client/back/locale/recovery/en.yml
@@ -0,0 +1,8 @@
+name: recovery
+columns:
+ id: id
+ started: started
+ finished: finished
+ amount: amount
+ period: period
+ clientFk: client
diff --git a/modules/client/back/locale/recovery/es.yml b/modules/client/back/locale/recovery/es.yml
new file mode 100644
index 000000000..6d84b00da
--- /dev/null
+++ b/modules/client/back/locale/recovery/es.yml
@@ -0,0 +1,8 @@
+name: recuperación
+columns:
+ id: id
+ started: comenzado
+ finished: terminado
+ amount: cantidad
+ period: período
+ clientFk: cliente
diff --git a/modules/client/back/locale/tpv-transaction/en.yml b/modules/client/back/locale/tpv-transaction/en.yml
new file mode 100644
index 000000000..fbe1bbadc
--- /dev/null
+++ b/modules/client/back/locale/tpv-transaction/en.yml
@@ -0,0 +1,15 @@
+name: tpv transaction
+columns:
+ id: id
+ merchantFk: merchant
+ clientFk: client
+ receiptFk: receipt
+ amount: amount
+ response: response
+ errorCode: error code
+ status: status
+ created: created
+ merchantParameters: merchant parameters
+ signature: signature
+ signatureVersion: signature version
+ responseError: response error
diff --git a/modules/client/back/locale/tpv-transaction/es.yml b/modules/client/back/locale/tpv-transaction/es.yml
new file mode 100644
index 000000000..c751b354d
--- /dev/null
+++ b/modules/client/back/locale/tpv-transaction/es.yml
@@ -0,0 +1,15 @@
+name: transacción tpv
+columns:
+ id: id
+ merchantFk: comerciante
+ clientFk: cliente
+ receiptFk: recibo
+ amount: cantidad
+ response: respuesta
+ errorCode: código error
+ status: estado
+ created: creado
+ merchantParameters: parámetros comerciante
+ signature: firma
+ signatureVersion: versión firma
+ responseError: error de respuesta
diff --git a/modules/client/back/methods/client/getCard.js b/modules/client/back/methods/client/getCard.js
index a2365ee25..414cbe058 100644
--- a/modules/client/back/methods/client/getCard.js
+++ b/modules/client/back/methods/client/getCard.js
@@ -76,7 +76,7 @@ module.exports = function(Self) {
const date = Date.vnNew();
date.setHours(0, 0, 0, 0);
- const query = `SELECT vn.clientGetDebt(?, ?) AS debt`;
+ const query = `SELECT vn.client_getDebt(?, ?) AS debt`;
const data = await Self.rawSql(query, [id, date], myOptions);
client.debt = data[0].debt;
diff --git a/modules/client/back/methods/client/getDebt.js b/modules/client/back/methods/client/getDebt.js
index 5f8a8c569..859746083 100644
--- a/modules/client/back/methods/client/getDebt.js
+++ b/modules/client/back/methods/client/getDebt.js
@@ -27,7 +27,7 @@ module.exports = Self => {
const date = Date.vnNew();
date.setHours(0, 0, 0, 0);
- const query = `SELECT vn.clientGetDebt(?, ?) AS debt`;
+ const query = `SELECT vn.client_getDebt(?, ?) AS debt`;
const [debt] = await Self.rawSql(query, [clientFk, date], myOptions);
return debt;
diff --git a/modules/client/back/models/client-log.json b/modules/client/back/models/client-log.json
index 28b767b2a..316dbe972 100644
--- a/modules/client/back/models/client-log.json
+++ b/modules/client/back/models/client-log.json
@@ -1,6 +1,6 @@
{
"name": "ClientLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "clientLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js
index a86a782e4..56adc8b03 100644
--- a/modules/client/back/models/client.js
+++ b/modules/client/back/models/client.js
@@ -14,7 +14,7 @@ module.exports = Self => {
Self.validatesPresenceOf('street', {
message: 'Street cannot be empty'
});
-
+
Self.validatesPresenceOf('city', {
message: 'City cannot be empty'
});
@@ -89,8 +89,9 @@ module.exports = Self => {
};
const country = await Self.app.models.Country.findOne(filter);
const code = country ? country.code.toLowerCase() : null;
+ const countryCode = this.fi.toLowerCase().substring(0, 2);
- if (!this.fi || !validateTin(this.fi, code))
+ if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code))
err();
done();
}
diff --git a/modules/client/front/fiscal-data/index.html b/modules/client/front/fiscal-data/index.html
index 88586cff7..4b1219f31 100644
--- a/modules/client/front/fiscal-data/index.html
+++ b/modules/client/front/fiscal-data/index.html
@@ -72,7 +72,9 @@
-
+
diff --git a/modules/client/front/fiscal-data/locale/es.yml b/modules/client/front/fiscal-data/locale/es.yml
index 7624c86bd..61a91828f 100644
--- a/modules/client/front/fiscal-data/locale/es.yml
+++ b/modules/client/front/fiscal-data/locale/es.yml
@@ -12,3 +12,5 @@ Previous client: Cliente anterior
In case of a company succession, specify the grantor company: En el caso de que haya habido una sucesión de empresa, indicar la empresa cedente
Incoterms authorization: Autorización incoterms
Electronic invoice: Factura electrónica
+When activating it, do not enter the country code in the IF.: Al activarlo, no informar el código del país en el campo IF
+The first two values are letters: Los dos primeros valores son letras
\ No newline at end of file
diff --git a/modules/entry/back/locale/buy/en.yml b/modules/entry/back/locale/buy/en.yml
new file mode 100644
index 000000000..2db7c7be5
--- /dev/null
+++ b/modules/entry/back/locale/buy/en.yml
@@ -0,0 +1,18 @@
+name: buy
+columns:
+ id: id
+ quantity: quantity
+ buyingValue: buying value
+ freightValue: freight value
+ packing: packing
+ grouping: grouping
+ stickers: stickers
+ groupingMode: grouping mode
+ comissionValue: comission value
+ packageValue: package value
+ price2: price2
+ price3: price3
+ weight: weight
+ entryFk: entry
+ itemFk: item
+ packageFk: package
diff --git a/modules/entry/back/locale/buy/es.yml b/modules/entry/back/locale/buy/es.yml
new file mode 100644
index 000000000..666bf7640
--- /dev/null
+++ b/modules/entry/back/locale/buy/es.yml
@@ -0,0 +1,18 @@
+name: compra
+columns:
+ id: id
+ quantity: cantidad
+ buyingValue: valor compra
+ freightValue: valor flete
+ packing: embalaje
+ grouping: agrupación
+ stickers: pegatinas
+ groupingMode: modo agrupación
+ comissionValue: valor comisión
+ packageValue: valor paquete
+ price2: precio2
+ price3: precio3
+ weight: peso
+ entryFk: entrada
+ itemFk: artículo
+ packageFk: paquete
diff --git a/modules/entry/back/locale/entry-observation/en.yml b/modules/entry/back/locale/entry-observation/en.yml
new file mode 100644
index 000000000..efe908c9f
--- /dev/null
+++ b/modules/entry/back/locale/entry-observation/en.yml
@@ -0,0 +1,6 @@
+name: entry observation
+columns:
+ id: id
+ description: description
+ entryFk: entry
+ observationTypeFk: observation type
diff --git a/modules/entry/back/locale/entry-observation/es.yml b/modules/entry/back/locale/entry-observation/es.yml
new file mode 100644
index 000000000..43799ae00
--- /dev/null
+++ b/modules/entry/back/locale/entry-observation/es.yml
@@ -0,0 +1,6 @@
+name: observación entrada
+columns:
+ id: id
+ description: descripción
+ entryFk: entrada
+ observationTypeFk: tipo observación
diff --git a/modules/entry/back/locale/entry/en.yml b/modules/entry/back/locale/entry/en.yml
new file mode 100644
index 000000000..6bc2333e6
--- /dev/null
+++ b/modules/entry/back/locale/entry/en.yml
@@ -0,0 +1,23 @@
+name: entry
+columns:
+ id: id
+ dated: dated
+ reference: reference
+ invoiceNumber: invoice number
+ isBooked: booked
+ isExcludedFromAvailable: excluded from available
+ notes: notes
+ isConfirmed: confirmed
+ isVirtual: virtual
+ isRaid: raid
+ commission: commission
+ isOrdered: price3
+ created: created
+ observation: observation
+ isBlocked: blocked
+ loadPriority: load priority
+ supplierFk: supplier
+ travelFk: travel
+ companyFk: company
+ observationEditorFk: observation editor
+ currencyFk: currency
diff --git a/modules/entry/back/locale/entry/es.yml b/modules/entry/back/locale/entry/es.yml
new file mode 100644
index 000000000..3a0c3d9c1
--- /dev/null
+++ b/modules/entry/back/locale/entry/es.yml
@@ -0,0 +1,23 @@
+name: entrada
+columns:
+ id: id
+ dated: fecha
+ reference: referencia
+ invoiceNumber: número factura
+ isBooked: reservado
+ isExcludedFromAvailable: excluido del disponible
+ notes: notas
+ isConfirmed: confirmado
+ isVirtual: virtual
+ isRaid: incursión
+ commission: comisión
+ isOrdered: precio3
+ created: creado
+ observation: observación
+ isBlocked: bloqueado
+ loadPriority: prioridad de carga
+ supplierFk: proveedor
+ travelFk: envío
+ companyFk: empresa
+ observationEditorFk: editor observación
+ currencyFk: moneda
diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js
index e90043074..1cd12b737 100644
--- a/modules/entry/back/methods/entry/filter.js
+++ b/modules/entry/back/methods/entry/filter.js
@@ -158,7 +158,6 @@ module.exports = Self => {
e.invoiceNumber,
e.isBooked,
e.isExcludedFromAvailable,
- e.notes,
e.evaNotes AS observation,
e.isConfirmed,
e.isOrdered,
diff --git a/modules/entry/back/models/entry-log.json b/modules/entry/back/models/entry-log.json
index 7415a3efe..b4370e3bc 100644
--- a/modules/entry/back/models/entry-log.json
+++ b/modules/entry/back/models/entry-log.json
@@ -1,6 +1,6 @@
{
"name": "EntryLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "entryLog"
@@ -55,4 +55,4 @@
"scope": {
"order": ["creationDate DESC", "id DESC"]
}
-}
\ No newline at end of file
+}
diff --git a/modules/entry/back/models/entry.json b/modules/entry/back/models/entry.json
index 3933f6a34..a7508b4e8 100644
--- a/modules/entry/back/models/entry.json
+++ b/modules/entry/back/models/entry.json
@@ -27,9 +27,6 @@
"isExcludedFromAvailable": {
"type": "boolean"
},
- "notes": {
- "type": "string"
- },
"isConfirmed": {
"type": "boolean"
},
diff --git a/modules/entry/front/basic-data/index.html b/modules/entry/front/basic-data/index.html
index 68a65e890..4e4631a3c 100644
--- a/modules/entry/front/basic-data/index.html
+++ b/modules/entry/front/basic-data/index.html
@@ -52,13 +52,6 @@
rule
vn-focus>
-
-
-
-
diff --git a/modules/invoiceIn/back/models/invoice-in-log.json b/modules/invoiceIn/back/models/invoice-in-log.json
index b5c5afea9..70892d0f9 100644
--- a/modules/invoiceIn/back/models/invoice-in-log.json
+++ b/modules/invoiceIn/back/models/invoice-in-log.json
@@ -1,6 +1,6 @@
{
"name": "InvoiceInLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "invoiceInLog"
@@ -58,4 +58,4 @@
"id DESC"
]
}
-}
\ No newline at end of file
+}
diff --git a/modules/invoiceOut/back/methods/invoiceOut/refund.js b/modules/invoiceOut/back/methods/invoiceOut/refund.js
index ba1fdfedd..ad480dc7d 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/refund.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/refund.js
@@ -35,7 +35,7 @@ module.exports = Self => {
const tickets = await models.Ticket.find(filter, myOptions);
const ticketsIds = tickets.map(ticket => ticket.id);
- const refundedTickets = await models.Ticket.refund(ticketsIds, true, myOptions);
+ const refundedTickets = await models.Ticket.refund(ticketsIds, myOptions);
if (tx) await tx.commit();
diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/refund.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/refund.spec.js
index c5a1ac603..35f2b4023 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/specs/refund.spec.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/specs/refund.spec.js
@@ -17,7 +17,7 @@ describe('InvoiceOut refund()', () => {
try {
const result = await models.InvoiceOut.refund('T1111111', options);
- expect(result.length).toEqual(1);
+ expect(result).toBeDefined();
await tx.rollback();
} catch (e) {
diff --git a/modules/invoiceOut/front/descriptor-menu/index.js b/modules/invoiceOut/front/descriptor-menu/index.js
index 456939119..57ea653a8 100644
--- a/modules/invoiceOut/front/descriptor-menu/index.js
+++ b/modules/invoiceOut/front/descriptor-menu/index.js
@@ -118,8 +118,11 @@ class Controller extends Section {
const query = 'InvoiceOuts/refund';
const params = {ref: this.invoiceOut.ref};
this.$http.post(query, params).then(res => {
- const ticketIds = res.data.map(ticket => ticket.id).join(', ');
- this.vnApp.showSuccess(this.$t('The following refund tickets have been created', {ticketIds}));
+ const refundTicket = res.data;
+ this.vnApp.showSuccess(this.$t('The following refund ticket have been created', {
+ ticketId: refundTicket.id
+ }));
+ this.$state.go('ticket.card.sale', {id: refundTicket.id});
});
}
}
diff --git a/modules/item/back/locale/item-barcode/en.yml b/modules/item/back/locale/item-barcode/en.yml
new file mode 100644
index 000000000..c1b20855f
--- /dev/null
+++ b/modules/item/back/locale/item-barcode/en.yml
@@ -0,0 +1,5 @@
+name: item barcode
+columns:
+ id: id
+ code: code
+ itemFk: item
diff --git a/modules/item/back/locale/item-barcode/es.yml b/modules/item/back/locale/item-barcode/es.yml
new file mode 100644
index 000000000..c1557f6d8
--- /dev/null
+++ b/modules/item/back/locale/item-barcode/es.yml
@@ -0,0 +1,5 @@
+name: código barras artículo
+columns:
+ id: id
+ code: código
+ itemFk: artículo
diff --git a/modules/item/back/locale/item-botanical/en.yml b/modules/item/back/locale/item-botanical/en.yml
new file mode 100644
index 000000000..f5a9e4c5a
--- /dev/null
+++ b/modules/item/back/locale/item-botanical/en.yml
@@ -0,0 +1,5 @@
+name: item botanical
+columns:
+ itemFk: item
+ genusFk: genus
+ specieFk: specie
diff --git a/modules/item/back/locale/item-botanical/es.yml b/modules/item/back/locale/item-botanical/es.yml
new file mode 100644
index 000000000..8e0a45491
--- /dev/null
+++ b/modules/item/back/locale/item-botanical/es.yml
@@ -0,0 +1,5 @@
+name: artículo botánico
+columns:
+ itemFk: artículo
+ genusFk: género
+ specieFk: especie
diff --git a/modules/item/back/locale/item-tag/en.yml b/modules/item/back/locale/item-tag/en.yml
new file mode 100644
index 000000000..fee588b4c
--- /dev/null
+++ b/modules/item/back/locale/item-tag/en.yml
@@ -0,0 +1,7 @@
+name: item tag
+columns:
+ id: id
+ value: value
+ itemFk: item
+ tagFk: tag
+ priority: priority
diff --git a/modules/item/back/locale/item-tag/es.yml b/modules/item/back/locale/item-tag/es.yml
new file mode 100644
index 000000000..3e1d1a9cf
--- /dev/null
+++ b/modules/item/back/locale/item-tag/es.yml
@@ -0,0 +1,7 @@
+name: etiqueta artículo
+columns:
+ id: id
+ value: valor
+ itemFk: artículo
+ tagFk: etiqueta
+ priority: prioridad
diff --git a/modules/item/back/locale/item-tax-country/en.yml b/modules/item/back/locale/item-tax-country/en.yml
new file mode 100644
index 000000000..060ad9910
--- /dev/null
+++ b/modules/item/back/locale/item-tax-country/en.yml
@@ -0,0 +1,7 @@
+name: item tax country
+columns:
+ id: id
+ effectived: effectived
+ itemFk: item
+ countryFk: country
+ taxClassFk: tax class
diff --git a/modules/item/back/locale/item-tax-country/es.yml b/modules/item/back/locale/item-tax-country/es.yml
new file mode 100644
index 000000000..2a0e6b5e2
--- /dev/null
+++ b/modules/item/back/locale/item-tax-country/es.yml
@@ -0,0 +1,7 @@
+name: impuesto país del artículo
+columns:
+ id: id
+ effectived: efectivo
+ itemFk: artículo
+ countryFk: país
+ taxClassFk: clase impuestos
diff --git a/modules/item/back/locale/item/en.yml b/modules/item/back/locale/item/en.yml
new file mode 100644
index 000000000..d63c95c70
--- /dev/null
+++ b/modules/item/back/locale/item/en.yml
@@ -0,0 +1,47 @@
+name: item
+columns:
+ id: id
+ name: name
+ quantity: quantity
+ size: size
+ category: category
+ typeFk: type
+ stems: stems
+ description: description
+ isActive: active
+ relevancy: relevancy
+ weightByPiece: weight by piece
+ stemMultiplier: stem multiplier
+ image: image
+ longName: long name
+ subName: sub name
+ tag5: tag5
+ value5: value5
+ tag6: tag6
+ value6: value6
+ tag7: tag7
+ value7: value7
+ tag8: tag8
+ value8: value8
+ tag9: tag9
+ value9: value9
+ tag10: tag10
+ value10: value10
+ itemPackingTypeFk: item packing type
+ hasKgPrice: has kg price
+ family: family
+ expenseFk: expense
+ minPrice: min price
+ packingOut: packing out
+ hasMinPrice: has min price
+ isFragile: fragile
+ isFloramondo: is floramondo
+ packingShelve: packing shelve
+ isLaid: laid
+ inkFk: ink
+ originFk: origin
+ producerFk: producer
+ intrastatFk: intrastat
+ genericFk: generic
+ itemFk: item
+
diff --git a/modules/item/back/locale/item/es.yml b/modules/item/back/locale/item/es.yml
new file mode 100644
index 000000000..d65288954
--- /dev/null
+++ b/modules/item/back/locale/item/es.yml
@@ -0,0 +1,47 @@
+name: artículo
+columns:
+ id: id
+ name: nombre
+ quantity: cantidad
+ size: tamaño
+ category: categoría
+ typeFk: tipo
+ stems: tallos
+ description: descripción
+ isActive: activo
+ relevancy: relevancia
+ weightByPiece: peso por pieza
+ stemMultiplier: multiplicador de tallo
+ image: imagen
+ longName: nombre largo
+ subName: subnombre
+ tag5: etiqueta5
+ value5: valor5
+ tag6: etiqueta6
+ value6: valor6
+ tag7: etiqueta7
+ value7: valor7
+ tag8: etiqueta8
+ value8: valor8
+ tag9: etiqueta9
+ value9: valor9
+ tag10: etiqueta10
+ value10: valor10
+ itemPackingTypeFk: embalaje del artículo
+ hasKgPrice: tiene precio kg
+ family: familia
+ expenseFk: gasto
+ minPrice: precio mínimo
+ packingOut: empaquetar
+ hasMinPrice: tiene precio mínimo
+ isFragile: frágil
+ isFloramondo: es floramondo
+ packingShelve: estantería embalaje
+ isLaid: puesto
+ inkFk: tinta
+ originFk: origen
+ producerFk: productor
+ intrastatFk: intrastat
+ genericFk: genérico
+ itemFk: artículo
+
diff --git a/modules/item/back/models/item-log.json b/modules/item/back/models/item-log.json
index 5bab2af86..19c132187 100644
--- a/modules/item/back/models/item-log.json
+++ b/modules/item/back/models/item-log.json
@@ -1,6 +1,6 @@
{
"name": "ItemLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "itemLog"
@@ -12,7 +12,7 @@
"type": "number",
"forceId": false
},
- "originFk": {
+ "originFk": {
"type": "number",
"required": true
},
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/item/front/fixed-price-search-panel/style.scss b/modules/item/front/fixed-price-search-panel/style.scss
index a63f84f3b..e386033dd 100644
--- a/modules/item/front/fixed-price-search-panel/style.scss
+++ b/modules/item/front/fixed-price-search-panel/style.scss
@@ -2,7 +2,7 @@
vn-fixed-price-search-panel vn-side-menu {
.menu {
- min-width: $right-menu-width;
+ min-width: $menu-width;
}
& > div {
.input {
diff --git a/modules/monitor/back/methods/sales-monitor/salesFilter.js b/modules/monitor/back/methods/sales-monitor/salesFilter.js
index 8f7b336ab..4f9edd11c 100644
--- a/modules/monitor/back/methods/sales-monitor/salesFilter.js
+++ b/modules/monitor/back/methods/sales-monitor/salesFilter.js
@@ -238,7 +238,7 @@ module.exports = Self => {
ENGINE = MEMORY
SELECT DISTINCT clientFk FROM tmp.filter`);
- stmt = new ParameterizedSQL('CALL clientGetDebt(?)', [args.to]);
+ stmt = new ParameterizedSQL('CALL client_getDebt(?)', [args.to]);
stmts.push(stmt);
stmts.push('DROP TEMPORARY TABLE tmp.clientGetDebt');
diff --git a/modules/route/back/locale/route/en.yml b/modules/route/back/locale/route/en.yml
new file mode 100644
index 000000000..96aaddb72
--- /dev/null
+++ b/modules/route/back/locale/route/en.yml
@@ -0,0 +1,19 @@
+name: route
+columns:
+ id: id
+ created: created
+ time: time
+ kmStart: km start
+ kmEnd: km end
+ started: started
+ finished: finished
+ gestdoc: gestdoc
+ cost: cost
+ m3: m3
+ description: description
+ isOk: ok
+ workerFk: worker
+ vehicleFk: vehicle
+ agencyModeFk: agency
+ routeFk: route
+ zoneFk: zone
diff --git a/modules/route/back/locale/route/es.yml b/modules/route/back/locale/route/es.yml
new file mode 100644
index 000000000..d1e38ff7e
--- /dev/null
+++ b/modules/route/back/locale/route/es.yml
@@ -0,0 +1,19 @@
+name: ruta
+columns:
+ id: id
+ created: creado
+ time: tiempo
+ kmStart: km inicio
+ kmEnd: km fin
+ started: comenzado
+ finished: terminado
+ gestdoc: gestdoc
+ cost: costo
+ m3: m3
+ description: descripción
+ isOk: ok
+ workerFk: trabajador
+ vehicleFk: vehículo
+ agencyModeFk: agencia
+ routeFk: ruta
+ zoneFk: zona
diff --git a/modules/route/back/models/route-log.json b/modules/route/back/models/route-log.json
index c8b7b5e9b..93f570593 100644
--- a/modules/route/back/models/route-log.json
+++ b/modules/route/back/models/route-log.json
@@ -1,6 +1,6 @@
{
"name": "RouteLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "routeLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/shelving/back/models/shelving-log.json b/modules/shelving/back/models/shelving-log.json
index d47058b8b..e8245f770 100644
--- a/modules/shelving/back/models/shelving-log.json
+++ b/modules/shelving/back/models/shelving-log.json
@@ -1,6 +1,6 @@
{
"name": "ShelvingLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "shelvingLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/supplier/back/locale/supplier-account/en.yml b/modules/supplier/back/locale/supplier-account/en.yml
new file mode 100644
index 000000000..bc2add833
--- /dev/null
+++ b/modules/supplier/back/locale/supplier-account/en.yml
@@ -0,0 +1,7 @@
+name: supplier account
+columns:
+ id: id
+ iban: iban
+ beneficiary: beneficiary
+ supplierFk: supplier
+ bankEntityFk: bank entity
diff --git a/modules/supplier/back/locale/supplier-account/es.yml b/modules/supplier/back/locale/supplier-account/es.yml
new file mode 100644
index 000000000..0d751b387
--- /dev/null
+++ b/modules/supplier/back/locale/supplier-account/es.yml
@@ -0,0 +1,7 @@
+name: cuenta proveedor
+columns:
+ id: id
+ iban: iban
+ beneficiary: beneficiario
+ supplierFk: proveedor
+ bankEntityFk: entidad bancaria
diff --git a/modules/supplier/back/locale/supplier-contact/en.yml b/modules/supplier/back/locale/supplier-contact/en.yml
new file mode 100644
index 000000000..62f923293
--- /dev/null
+++ b/modules/supplier/back/locale/supplier-contact/en.yml
@@ -0,0 +1,9 @@
+name: supplier contact
+columns:
+ id: id
+ supplierFk: supplier
+ phone: phone
+ mobile: mobile
+ email: email
+ observation: observation
+ name: name
diff --git a/modules/supplier/back/locale/supplier-contact/es.yml b/modules/supplier/back/locale/supplier-contact/es.yml
new file mode 100644
index 000000000..d35f0bf2e
--- /dev/null
+++ b/modules/supplier/back/locale/supplier-contact/es.yml
@@ -0,0 +1,9 @@
+name: contacto proveedor
+columns:
+ id: id
+ supplierFk: proveedor
+ phone: teléfono
+ mobile: móvil
+ email: email
+ observation: observación
+ name: nombre
diff --git a/modules/supplier/back/locale/supplier/en.yml b/modules/supplier/back/locale/supplier/en.yml
new file mode 100644
index 000000000..1be941a70
--- /dev/null
+++ b/modules/supplier/back/locale/supplier/en.yml
@@ -0,0 +1,36 @@
+name: supplier
+columns:
+ id: id
+ name: name
+ account: account
+ countryFk: country
+ nif: nif
+ phone: phone
+ retAccount: ret account
+ commission: commission
+ postcodeFk: postcode
+ isActive: active
+ isOfficial: official
+ isSerious: serious
+ isTrucker: trucker
+ note: note
+ street: street
+ city: city
+ provinceFk: province
+ postCode: postcode
+ payMethodFk: pay method
+ payDemFk: pay dem
+ payDay: pay day
+ nickname: nickname
+ workerFk: worker
+ sageTaxTypeFk: sage tax type
+ taxTypeSageFk: sage tax type
+ sageTransactionTypeFk: sage transaction type
+ transactionTypeSageFk: sage transaction type
+ sageWithholdingFk: sage with holding
+ withholdingSageFk: sage with holding
+ isPayMethodChecked: pay method checked
+ supplierActivityFk: supplier activity
+ healthRegister: health register
+ isVies: vies
+ supplierFk: supplier
diff --git a/modules/supplier/back/locale/supplier/es.yml b/modules/supplier/back/locale/supplier/es.yml
new file mode 100644
index 000000000..6ac8379f5
--- /dev/null
+++ b/modules/supplier/back/locale/supplier/es.yml
@@ -0,0 +1,36 @@
+name: proveedor
+columns:
+ id: id
+ name: nombre
+ account: cuenta
+ countryFk: país
+ nif: nif
+ phone: teléfono
+ retAccount: cuenta ret
+ commission: comisión
+ postcodeFk: código postal
+ isActive: activo
+ isOfficial: oficial
+ isSerious: serio
+ isTrucker: camionero
+ note: nota
+ street: calle
+ city: ciudad
+ provinceFk: provincia
+ postCode: código postal
+ payMethodFk: método pago
+ payDemFk: pagar dem
+ payDay: día pago
+ nickname: apodo
+ workerFk: trabajador
+ sageTaxTypeFk: tipo de impuesto sage
+ taxTypeSageFk: tipo de impuesto sage
+ sageTransactionTypeFk: tipo de transacción sage
+ transactionTypeSageFk: tipo de transacción sage
+ sageWithholdingFk: sage con tenencia
+ withholdingSageFk: sage con tenencia
+ isPayMethodChecked: método pago verificado
+ supplierActivityFk: actividad del proveedor
+ healthRegister: registro sanitario
+ isVies: vies
+ supplierFk: proveedor
diff --git a/modules/supplier/back/methods/supplier/specs/newSupplier.spec.js b/modules/supplier/back/methods/supplier/specs/newSupplier.spec.js
index d4479d00b..c368ec1b8 100644
--- a/modules/supplier/back/methods/supplier/specs/newSupplier.spec.js
+++ b/modules/supplier/back/methods/supplier/specs/newSupplier.spec.js
@@ -19,13 +19,14 @@ describe('Supplier newSupplier()', () => {
});
});
- it('should create a new supplier containing only the name', async() => {
+ it('should create a new supplier containing only the name and the nif', async() => {
const tx = await models.Supplier.beginTransaction({});
try {
const options = {transaction: tx};
ctx.args = {
- name: 'newSupplier'
+ name: 'newSupplier',
+ nif: '12345678Z'
};
const result = await models.Supplier.newSupplier(ctx, options);
diff --git a/modules/supplier/back/models/supplier-log.json b/modules/supplier/back/models/supplier-log.json
index b88266988..86fa2e54a 100644
--- a/modules/supplier/back/models/supplier-log.json
+++ b/modules/supplier/back/models/supplier-log.json
@@ -1,6 +1,6 @@
{
"name": "SupplierLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "supplierLog"
@@ -55,4 +55,4 @@
"scope": {
"order": ["creationDate DESC", "id DESC"]
}
-}
\ No newline at end of file
+}
diff --git a/modules/supplier/back/models/supplier.js b/modules/supplier/back/models/supplier.js
index c4ce0c517..ae3eb4bcc 100644
--- a/modules/supplier/back/models/supplier.js
+++ b/modules/supplier/back/models/supplier.js
@@ -67,8 +67,9 @@ module.exports = Self => {
};
const country = await Self.app.models.Country.findOne(filter);
const code = country ? country.code.toLowerCase() : null;
+ const countryCode = this.nif.toLowerCase().substring(0, 2);
- if (!this.nif || !validateTin(this.nif, code))
+ if (!this.nif || !validateTin(this.nif, code) || (this.isVies && countryCode == code))
err();
done();
}
diff --git a/modules/supplier/front/fiscal-data/index.html b/modules/supplier/front/fiscal-data/index.html
index ccbd5b0d9..3a0aefbf2 100644
--- a/modules/supplier/front/fiscal-data/index.html
+++ b/modules/supplier/front/fiscal-data/index.html
@@ -42,6 +42,7 @@
vn-two
vn-focus
label="Social name"
+ name="socialName"
ng-model="$ctrl.supplier.name"
info="Only letters, numbers and spaces can be used"
required="true"
@@ -50,44 +51,53 @@
+ rule
+ >
-
-
-
@@ -95,12 +105,14 @@
-
-
-
-
-
@@ -188,7 +211,9 @@
+ info="When activating it, do not enter the country code in the ID field."
+ ng-model="$ctrl.supplier.isVies"
+ >
diff --git a/modules/supplier/front/fiscal-data/locale/es.yml b/modules/supplier/front/fiscal-data/locale/es.yml
index 5232dd95d..ee641231f 100644
--- a/modules/supplier/front/fiscal-data/locale/es.yml
+++ b/modules/supplier/front/fiscal-data/locale/es.yml
@@ -3,4 +3,6 @@ Sage transaction type: Tipo de transacción Sage
Sage withholding: Retención Sage
Supplier activity: Actividad proveedor
Healt register: Pasaporte sanitario
-Trucker: Transportista
\ No newline at end of file
+Trucker: Transportista
+When activating it, do not enter the country code in the ID field.: Al activarlo, no informar el código del país en el campo nif
+The first two values are letters.: Los dos primeros valores son letras
\ No newline at end of file
diff --git a/modules/supplier/front/locale/es.yml b/modules/supplier/front/locale/es.yml
index abb6a9775..a2b6dd04d 100644
--- a/modules/supplier/front/locale/es.yml
+++ b/modules/supplier/front/locale/es.yml
@@ -1 +1,2 @@
-Accounts: Cuentas
\ No newline at end of file
+Accounts: Cuentas
+Invalid NIF for VIES: NIF no valido por VIES
\ No newline at end of file
diff --git a/modules/ticket/back/locale/expedition/en.yml b/modules/ticket/back/locale/expedition/en.yml
new file mode 100644
index 000000000..1834984ea
--- /dev/null
+++ b/modules/ticket/back/locale/expedition/en.yml
@@ -0,0 +1,10 @@
+name: expedition
+columns:
+ id: id
+ freightItemFk: freight item
+ created: created
+ counter: counter
+ ticketFk: ticket
+ agencyModeFk: agency
+ workerFk: worker
+ packagingFk: packaging
diff --git a/modules/ticket/back/locale/expedition/es.yml b/modules/ticket/back/locale/expedition/es.yml
new file mode 100644
index 000000000..32f72b943
--- /dev/null
+++ b/modules/ticket/back/locale/expedition/es.yml
@@ -0,0 +1,10 @@
+name: expedición
+columns:
+ id: id
+ freightItemFk: artículo de carga
+ created: creado
+ counter: contador
+ ticketFk: ticket
+ agencyModeFk: agencia
+ workerFk: trabajador
+ packagingFk: embalaje
diff --git a/modules/ticket/back/locale/sale/en.yml b/modules/ticket/back/locale/sale/en.yml
index ae8f67d5e..f844bf0c5 100644
--- a/modules/ticket/back/locale/sale/en.yml
+++ b/modules/ticket/back/locale/sale/en.yml
@@ -1,11 +1,13 @@
-concept: concept
-quantity: quantity
-price: price
-discount: discount
-reserved: reserved
-isPicked: is picked
-created: created
-originalQuantity: original quantity
-itemFk: item
-ticketFk: ticket
-saleFk: sale
+name: sale
+columns:
+ concept: concept
+ quantity: quantity
+ price: price
+ discount: discount
+ reserved: reserved
+ isPicked: is picked
+ created: created
+ originalQuantity: original quantity
+ itemFk: item
+ ticketFk: ticket
+ saleFk: sale
diff --git a/modules/ticket/back/locale/sale/es.yml b/modules/ticket/back/locale/sale/es.yml
index ff8cc5466..8196a089c 100644
--- a/modules/ticket/back/locale/sale/es.yml
+++ b/modules/ticket/back/locale/sale/es.yml
@@ -1,11 +1,13 @@
-concept: concepto
-quantity: cantidad
-price: precio
-discount: descuento
-reserved: reservado
-isPicked: esta seleccionado
-created: creado
-originalQuantity: cantidad original
-itemFk: artículo
-ticketFk: ticket
-saleFk: línea
+name: línea
+columns:
+ concept: concepto
+ quantity: cantidad
+ price: precio
+ discount: descuento
+ reserved: reservado
+ isPicked: esta seleccionado
+ created: creado
+ originalQuantity: cantidad original
+ itemFk: artículo
+ ticketFk: ticket
+ saleFk: línea
diff --git a/modules/ticket/back/locale/ticket-dms/en.yml b/modules/ticket/back/locale/ticket-dms/en.yml
new file mode 100644
index 000000000..771e4daf3
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-dms/en.yml
@@ -0,0 +1,4 @@
+name: ticket dms
+columns:
+ dmsFk: dms
+ ticketFk: ticket
diff --git a/modules/ticket/back/locale/ticket-dms/es.yml b/modules/ticket/back/locale/ticket-dms/es.yml
new file mode 100644
index 000000000..360268428
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-dms/es.yml
@@ -0,0 +1,4 @@
+name: documento ticket
+columns:
+ dmsFk: dms
+ ticketFk: ticket
diff --git a/modules/ticket/back/locale/ticket-observation/en.yml b/modules/ticket/back/locale/ticket-observation/en.yml
new file mode 100644
index 000000000..40bd567bf
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-observation/en.yml
@@ -0,0 +1,6 @@
+name: ticket observation
+columns:
+ id: id
+ description: description
+ ticketFk: ticket
+ observationTypeFk: observation type
diff --git a/modules/ticket/back/locale/ticket-observation/es.yml b/modules/ticket/back/locale/ticket-observation/es.yml
new file mode 100644
index 000000000..155eb58e2
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-observation/es.yml
@@ -0,0 +1,6 @@
+name: observación ticket
+columns:
+ id: id
+ description: descripción
+ ticketFk: ticket
+ observationTypeFk: tipo observación
diff --git a/modules/ticket/back/locale/ticket-packaging/en.yml b/modules/ticket/back/locale/ticket-packaging/en.yml
new file mode 100644
index 000000000..4dd018524
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-packaging/en.yml
@@ -0,0 +1,8 @@
+name: ticket packaging
+columns:
+ id: id
+ quantity: quantity
+ created: created
+ pvp: pvp
+ ticketFk: ticket
+ packagingFk: packaging
diff --git a/modules/ticket/back/locale/ticket-packaging/es.yml b/modules/ticket/back/locale/ticket-packaging/es.yml
new file mode 100644
index 000000000..a31a8c097
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-packaging/es.yml
@@ -0,0 +1,8 @@
+name: embalaje ticket
+columns:
+ id: id
+ quantity: cantidad
+ created: creado
+ pvp: pvp
+ ticketFk: ticket
+ packagingFk: embalaje
diff --git a/modules/ticket/back/locale/ticket-refund/en.yml b/modules/ticket/back/locale/ticket-refund/en.yml
new file mode 100644
index 000000000..961b5c8c3
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-refund/en.yml
@@ -0,0 +1,5 @@
+name: ticket refund
+columns:
+ id: id
+ refundTicketFk: refund ticket
+ originalTicketFk: original ticket
diff --git a/modules/ticket/back/locale/ticket-refund/es.yml b/modules/ticket/back/locale/ticket-refund/es.yml
new file mode 100644
index 000000000..8826ef949
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-refund/es.yml
@@ -0,0 +1,5 @@
+name: ticket abono
+columns:
+ id: id
+ refundTicketFk: ticket abono
+ originalTicketFk: ticket original
diff --git a/modules/ticket/back/locale/ticket-request/en.yml b/modules/ticket/back/locale/ticket-request/en.yml
new file mode 100644
index 000000000..498a933ac
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-request/en.yml
@@ -0,0 +1,15 @@
+name: ticket request
+columns:
+ id: id
+ description: description
+ created: created
+ quantity: quantity
+ price: price
+ isOk: ok
+ response: response
+ saleFk: sale
+ ticketFk: ticket
+ attenderFk: attender
+ requesterFk: requester
+ itemFk: item
+
diff --git a/modules/ticket/back/locale/ticket-request/es.yml b/modules/ticket/back/locale/ticket-request/es.yml
new file mode 100644
index 000000000..b2871e737
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-request/es.yml
@@ -0,0 +1,15 @@
+name: peticiones ticket
+columns:
+ id: id
+ description: descripción
+ created: creado
+ quantity: cantidad
+ price: precio
+ isOk: ok
+ response: respuesta
+ saleFk: línea
+ ticketFk: ticket
+ attenderFk: asistente
+ requesterFk: solicitante
+ itemFk: artículo
+
diff --git a/modules/ticket/back/locale/ticket-service/en.yml b/modules/ticket/back/locale/ticket-service/en.yml
new file mode 100644
index 000000000..cf4e6f43f
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-service/en.yml
@@ -0,0 +1,10 @@
+name: ticket service
+columns:
+ id: id
+ ticketFk: ticket
+ description: description
+ quantity: quantity
+ price: price
+ taxClassFk: tax class
+ ticketServiceTypeFk: ticket service type
+
diff --git a/modules/ticket/back/locale/ticket-service/es.yml b/modules/ticket/back/locale/ticket-service/es.yml
new file mode 100644
index 000000000..ee07c13d3
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-service/es.yml
@@ -0,0 +1,10 @@
+name: servicios ticket
+columns:
+ id: id
+ ticketFk: ticket
+ description: descripción
+ quantity: cantidad
+ price: precio
+ taxClassFk: tipo impuestos
+ ticketServiceTypeFk: tipo servicio ticket
+
diff --git a/modules/ticket/back/locale/ticket-tracking/en.yml b/modules/ticket/back/locale/ticket-tracking/en.yml
new file mode 100644
index 000000000..15505a763
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-tracking/en.yml
@@ -0,0 +1,7 @@
+name: ticket tracking
+columns:
+ id: id
+ created: created
+ ticketFk: ticket
+ stateFk: state
+ workerFk: worker
diff --git a/modules/ticket/back/locale/ticket-tracking/es.yml b/modules/ticket/back/locale/ticket-tracking/es.yml
new file mode 100644
index 000000000..3459ab367
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-tracking/es.yml
@@ -0,0 +1,7 @@
+name: seguimiento ticket
+columns:
+ id: id
+ created: creado
+ ticketFk: ticket
+ stateFk: estado
+ workerFk: trabajador
diff --git a/modules/ticket/back/locale/ticket-weekly/en.yml b/modules/ticket/back/locale/ticket-weekly/en.yml
new file mode 100644
index 000000000..af1c94dc9
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-weekly/en.yml
@@ -0,0 +1,5 @@
+name: ticket weekly
+columns:
+ ticketFk: ticket
+ weekDay: week day
+ agencyModeFk: agency
diff --git a/modules/ticket/back/locale/ticket-weekly/es.yml b/modules/ticket/back/locale/ticket-weekly/es.yml
new file mode 100644
index 000000000..597d9d46a
--- /dev/null
+++ b/modules/ticket/back/locale/ticket-weekly/es.yml
@@ -0,0 +1,5 @@
+name: ticket semanal
+columns:
+ ticketFk: ticket
+ weekDay: día semana
+ agencyModeFk: agencia
diff --git a/modules/ticket/back/locale/ticket/en.yml b/modules/ticket/back/locale/ticket/en.yml
index c4ad84232..2481c42f8 100644
--- a/modules/ticket/back/locale/ticket/en.yml
+++ b/modules/ticket/back/locale/ticket/en.yml
@@ -1,23 +1,25 @@
-shipped: shipped
-landed: landed
-nickname: nickname
-location: location
-solution: solution
-packages: packages
-updated: updated
-isDeleted: is deleted
-priority: priority
-zoneFk: zone
-zonePrice: zone price
-zoneBonus: zone bonus
-totalWithVat: total with vat
-totalWithoutVat: total without vat
-clientFk: client
-warehouseFk: warehouse
-refFk: reference
-addressFk: address
-routeFk: route
-companyFk: company
-agencyModeFk: agency
-ticketFk: ticket
-mergedTicket: merged ticket
+name: ticket
+columns:
+ shipped: shipped
+ landed: landed
+ nickname: nickname
+ location: location
+ solution: solution
+ packages: packages
+ updated: updated
+ isDeleted: is deleted
+ priority: priority
+ zoneFk: zone
+ zonePrice: zone price
+ zoneBonus: zone bonus
+ totalWithVat: total with vat
+ totalWithoutVat: total without vat
+ clientFk: client
+ warehouseFk: warehouse
+ refFk: reference
+ addressFk: address
+ routeFk: route
+ companyFk: company
+ agencyModeFk: agency
+ ticketFk: ticket
+ mergedTicket: merged ticket
diff --git a/modules/ticket/back/locale/ticket/es.yml b/modules/ticket/back/locale/ticket/es.yml
index 15b5a39bf..558378612 100644
--- a/modules/ticket/back/locale/ticket/es.yml
+++ b/modules/ticket/back/locale/ticket/es.yml
@@ -1,25 +1,27 @@
-shipped: fecha salida
-landed: fecha entrega
-nickname: alias
-location: ubicación
-solution: solución
-packages: embalajes
-updated: fecha última actualización
-isDeleted: esta eliminado
-priority: prioridad
-zoneFk: zona
-zonePrice: precio zona
-zoneBonus: bonus zona
-totalWithVat: total con IVA
-totalWithoutVat: total sin IVA
-clientFk: cliente
-warehouseFk: almacén
-refFk: referencia
-addressFk: dirección
-routeFk: ruta
-companyFk: empresa
-agencyModeFk: agencia
-ticketFk: ticket
-mergedTicket: ticket fusionado
-withWarningAccept: aviso negativos
-isWithoutNegatives: sin negativos
+name: ticket
+columns:
+ shipped: salida
+ landed: entrega
+ nickname: alias
+ location: ubicación
+ solution: solución
+ packages: embalajes
+ updated: última actualización
+ isDeleted: eliminado
+ priority: prioridad
+ zoneFk: zona
+ zonePrice: precio zona
+ zoneBonus: bonus zona
+ totalWithVat: total con IVA
+ totalWithoutVat: total sin IVA
+ clientFk: cliente
+ warehouseFk: almacén
+ refFk: referencia
+ addressFk: dirección
+ routeFk: ruta
+ companyFk: empresa
+ agencyModeFk: agencia
+ ticketFk: ticket
+ mergedTicket: ticket fusionado
+ withWarningAccept: aviso negativos
+ isWithoutNegatives: sin negativos
diff --git a/modules/ticket/back/methods/boxing/getVideoList.js b/modules/ticket/back/methods/boxing/getVideoList.js
index 3d45a720d..ba989936e 100644
--- a/modules/ticket/back/methods/boxing/getVideoList.js
+++ b/modules/ticket/back/methods/boxing/getVideoList.js
@@ -53,7 +53,7 @@ module.exports = Self => {
let start = new Date(expedition.created);
let end = new Date(start.getTime() + (packingSiteConfig.avgBoxingTime * 1000));
- if (from && to) {
+ if (from != undefined && to != undefined) {
start.setHours(from, 0, 0);
end.setHours(to, 0, 0);
}
diff --git a/modules/ticket/back/methods/sale/refund.js b/modules/ticket/back/methods/sale/refund.js
index 7b63fd66e..af58a6286 100644
--- a/modules/ticket/back/methods/sale/refund.js
+++ b/modules/ticket/back/methods/sale/refund.js
@@ -11,11 +11,6 @@ module.exports = Self => {
{
arg: 'servicesIds',
type: ['number']
- },
- {
- arg: 'createSingleTicket',
- type: 'boolean',
- required: false
}
],
returns: {
@@ -28,7 +23,7 @@ module.exports = Self => {
}
});
- Self.refund = async(salesIds, servicesIds, createSingleTicket = false, options) => {
+ Self.refund = async(salesIds, servicesIds, options) => {
const models = Self.app.models;
const myOptions = {};
let tx;
@@ -67,40 +62,14 @@ module.exports = Self => {
const sales = await models.Sale.find(salesFilter, myOptions);
const ticketsIds = [...new Set(sales.map(sale => sale.ticketFk))];
- const refundTickets = [];
- const mappedTickets = new Map();
const now = Date.vnNew();
-
const [firstTicketId] = ticketsIds;
- if (createSingleTicket) {
- await createTicketRefund(
- firstTicketId,
- refundTickets,
- mappedTickets,
- now,
- refundAgencyMode,
- refoundZoneId,
- myOptions
- );
- } else {
- for (let ticketId of ticketsIds) {
- await createTicketRefund(
- ticketId,
- refundTickets,
- mappedTickets,
- now,
- refundAgencyMode,
- refoundZoneId,
- myOptions
- );
- }
- }
+
+ const refundTicket = await createTicketRefund(firstTicketId, now, refundAgencyMode, refoundZoneId, myOptions);
for (const sale of sales) {
- const refundTicketId = await getTicketRefundId(createSingleTicket, sale.ticketFk, refundTickets, mappedTickets);
-
const createdSale = await models.Sale.create({
- ticketFk: refundTicketId,
+ ticketFk: refundTicket.id,
itemFk: sale.itemFk,
quantity: - sale.quantity,
concept: sale.concept,
@@ -120,16 +89,13 @@ module.exports = Self => {
where: {id: {inq: servicesIds}}
};
const services = await models.TicketService.find(servicesFilter, myOptions);
-
for (const service of services) {
- const refundTicketId = await getTicketRefundId(createSingleTicket, service.ticketFk, refundTickets, mappedTickets);
-
await models.TicketService.create({
description: service.description,
quantity: - service.quantity,
price: service.price,
taxClassFk: service.taxClassFk,
- ticketFk: refundTicketId,
+ ticketFk: refundTicket.id,
ticketServiceTypeFk: service.ticketServiceTypeFk,
}, myOptions);
}
@@ -137,22 +103,14 @@ module.exports = Self => {
if (tx) await tx.commit();
- return refundTickets;
+ return refundTicket;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
- async function createTicketRefund(
- ticketId,
- refundTickets,
- mappedTickets,
- now,
- refundAgencyMode,
- refoundZoneId,
- myOptions
- ) {
+ async function createTicketRefund(ticketId, now, refundAgencyMode, refoundZoneId, myOptions) {
const models = Self.app.models;
const filter = {include: {relation: 'address'}};
@@ -170,20 +128,11 @@ module.exports = Self => {
zoneFk: refoundZoneId
}, myOptions);
- refundTickets.push(refundTicket);
-
- mappedTickets.set(ticketId, refundTicket.id);
-
await models.TicketRefund.create({
refundTicketFk: refundTicket.id,
originalTicketFk: ticket.id,
}, myOptions);
- }
- async function getTicketRefundId(createSingleTicket, ticketId, refundTickets, mappedTickets) {
- if (createSingleTicket) {
- const [firstRefundTicket] = refundTickets;
- return firstRefundTicket.id;
- } else return mappedTickets.get(ticketId);
+ return refundTicket;
}
};
diff --git a/modules/ticket/back/methods/sale/specs/refund.spec.js b/modules/ticket/back/methods/sale/specs/refund.spec.js
index 403b4b477..83b3755e2 100644
--- a/modules/ticket/back/methods/sale/specs/refund.spec.js
+++ b/modules/ticket/back/methods/sale/specs/refund.spec.js
@@ -22,9 +22,9 @@ describe('Sale refund()', () => {
try {
const options = {transaction: tx};
- const response = await models.Sale.refund(salesIds, servicesIds, false, options);
+ const refundedTicket = await models.Sale.refund(salesIds, servicesIds, options);
- expect(response.length).toBeGreaterThanOrEqual(1);
+ expect(refundedTicket).toBeDefined();
await tx.rollback();
} catch (e) {
@@ -33,23 +33,18 @@ describe('Sale refund()', () => {
}
});
- it('should create a ticket for each unique ticketFk in the sales', async() => {
+ it('should create one ticket for each unique ticketFk in the sales', async() => {
const tx = await models.Sale.beginTransaction({});
const salesIds = [6, 7];
try {
const options = {transaction: tx};
- const createSingleTicket = false;
- const tickets = await models.Sale.refund(salesIds, servicesIds, createSingleTicket, options);
+ const ticket = await models.Sale.refund(salesIds, servicesIds, options);
- const ticketsIds = tickets.map(ticket => ticket.id);
-
- const refundedTickets = await models.Ticket.find({
+ const refundedTicket = await models.Ticket.findOne({
where: {
- id: {
- inq: ticketsIds
- }
+ id: ticket.id
},
include: [
{
@@ -66,16 +61,12 @@ describe('Sale refund()', () => {
]
}, options);
- const firstRefoundedTicket = refundedTickets[0];
- const secondRefoundedTicket = refundedTickets[1];
- const salesLength = firstRefoundedTicket.ticketSales().length;
- const componentsLength = firstRefoundedTicket.ticketSales()[0].components().length;
- const servicesLength = secondRefoundedTicket.ticketServices().length;
+ const salesLength = refundedTicket.ticketSales().length;
+ const componentsLength = refundedTicket.ticketSales()[0].components().length;
- expect(refundedTickets.length).toEqual(2);
- expect(salesLength).toEqual(1);
+ expect(refundedTicket).toBeDefined();
+ expect(salesLength).toEqual(2);
expect(componentsLength).toEqual(4);
- expect(servicesLength).toBeGreaterThanOrEqual(1);
await tx.rollback();
} catch (e) {
diff --git a/modules/ticket/back/methods/ticket/makeInvoice.js b/modules/ticket/back/methods/ticket/makeInvoice.js
index 9739f5985..bd899ef7b 100644
--- a/modules/ticket/back/methods/ticket/makeInvoice.js
+++ b/modules/ticket/back/methods/ticket/makeInvoice.js
@@ -75,8 +75,8 @@ module.exports = function(Self) {
serial = result.serial;
await Self.rawSql(`
- DROP TEMPORARY TABLE IF EXISTS ticketToInvoice;
- CREATE TEMPORARY TABLE ticketToInvoice
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticketToInvoice;
+ CREATE TEMPORARY TABLE tmp.ticketToInvoice
(PRIMARY KEY (id))
ENGINE = MEMORY
SELECT id FROM vn.ticket
diff --git a/modules/ticket/back/methods/ticket/refund.js b/modules/ticket/back/methods/ticket/refund.js
index 1f0021316..91f48cfd6 100644
--- a/modules/ticket/back/methods/ticket/refund.js
+++ b/modules/ticket/back/methods/ticket/refund.js
@@ -7,11 +7,6 @@ module.exports = Self => {
arg: 'ticketsIds',
type: ['number'],
required: true
- },
- {
- arg: 'createSingleTicket',
- type: 'boolean',
- required: false
}
],
returns: {
@@ -24,7 +19,7 @@ module.exports = Self => {
}
});
- Self.refund = async(ticketsIds, createSingleTicket = false, options) => {
+ Self.refund = async(ticketsIds, options) => {
const models = Self.app.models;
const myOptions = {};
let tx;
@@ -46,7 +41,7 @@ module.exports = Self => {
const services = await models.TicketService.find(filter, myOptions);
const servicesIds = services.map(service => service.id);
- const refundedTickets = await models.Sale.refund(salesIds, servicesIds, createSingleTicket, myOptions);
+ const refundedTickets = await models.Sale.refund(salesIds, servicesIds, myOptions);
if (tx) await tx.commit();
diff --git a/modules/ticket/back/models/ticket-log.json b/modules/ticket/back/models/ticket-log.json
index 516ea506c..df04348da 100644
--- a/modules/ticket/back/models/ticket-log.json
+++ b/modules/ticket/back/models/ticket-log.json
@@ -1,6 +1,6 @@
{
"name": "TicketLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "ticketLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/ticket/front/descriptor-menu/index.js b/modules/ticket/front/descriptor-menu/index.js
index 1a88b00d5..e32363f09 100644
--- a/modules/ticket/front/descriptor-menu/index.js
+++ b/modules/ticket/front/descriptor-menu/index.js
@@ -300,7 +300,7 @@ class Controller extends Section {
const params = {ticketsIds: [this.id]};
const query = 'Tickets/refund';
return this.$http.post(query, params).then(res => {
- const [refundTicket] = res.data;
+ const refundTicket = res.data;
this.vnApp.showSuccess(this.$t('The following refund ticket have been created', {
ticketId: refundTicket.id
}));
diff --git a/modules/ticket/front/descriptor-menu/index.spec.js b/modules/ticket/front/descriptor-menu/index.spec.js
index babc22038..48998325a 100644
--- a/modules/ticket/front/descriptor-menu/index.spec.js
+++ b/modules/ticket/front/descriptor-menu/index.spec.js
@@ -250,7 +250,7 @@ describe('Ticket Component vnTicketDescriptorMenu', () => {
const params = {
ticketsIds: [16]
};
- $httpBackend.expectPOST('Tickets/refund', params).respond([{id: 99}]);
+ $httpBackend.expectPOST('Tickets/refund', params).respond({id: 99});
controller.refund();
$httpBackend.flush();
diff --git a/modules/ticket/front/sale/index.js b/modules/ticket/front/sale/index.js
index 20739b619..24b077476 100644
--- a/modules/ticket/front/sale/index.js
+++ b/modules/ticket/front/sale/index.js
@@ -516,7 +516,7 @@ class Controller extends Section {
const params = {salesIds: salesIds};
const query = 'Sales/refund';
this.$http.post(query, params).then(res => {
- const [refundTicket] = res.data;
+ const refundTicket = res.data;
this.vnApp.showSuccess(this.$t('The following refund ticket have been created', {
ticketId: refundTicket.id
}));
diff --git a/modules/ticket/front/sale/index.spec.js b/modules/ticket/front/sale/index.spec.js
index c35ed3d9a..5fb3b3df3 100644
--- a/modules/ticket/front/sale/index.spec.js
+++ b/modules/ticket/front/sale/index.spec.js
@@ -726,8 +726,7 @@ describe('Ticket', () => {
salesIds: [1, 4],
};
const refundTicket = {id: 99};
- const createdTickets = [refundTicket];
- $httpBackend.expect('POST', 'Sales/refund', params).respond(200, createdTickets);
+ $httpBackend.expect('POST', 'Sales/refund', params).respond(200, refundTicket);
controller.createRefund();
$httpBackend.flush();
diff --git a/modules/travel/back/locale/travel-thermograph/en.yml b/modules/travel/back/locale/travel-thermograph/en.yml
new file mode 100644
index 000000000..92acee896
--- /dev/null
+++ b/modules/travel/back/locale/travel-thermograph/en.yml
@@ -0,0 +1,10 @@
+name: travel thermograph
+columns:
+ id: id
+ created: created
+ temperatureFk: temperature
+ result: result
+ warehouseFk: warehouse
+ travelFk: travel
+ dmsFk: dms
+ thermographFk: thermograph
diff --git a/modules/travel/back/locale/travel-thermograph/es.yml b/modules/travel/back/locale/travel-thermograph/es.yml
new file mode 100644
index 000000000..0d08863b6
--- /dev/null
+++ b/modules/travel/back/locale/travel-thermograph/es.yml
@@ -0,0 +1,10 @@
+name: travel thermograph
+columns:
+ id: id
+ created: creado
+ temperatureFk: temperatura
+ result: resultado
+ warehouseFk: almacén
+ travelFk: envío
+ dmsFk: dms
+ thermographFk: termógrafo
diff --git a/modules/travel/back/locale/travel/en.yml b/modules/travel/back/locale/travel/en.yml
new file mode 100644
index 000000000..f3bab57d1
--- /dev/null
+++ b/modules/travel/back/locale/travel/en.yml
@@ -0,0 +1,15 @@
+name: travel
+columns:
+ id: id
+ shipped: shipped
+ landed: landed
+ isDelivered: delivered
+ isReceived: received
+ ref: ref
+ totalEntries: total entries
+ m3: m3
+ kg: kg
+ cargoSupplierFk: cargo supplier
+ agencyModeFk: agency
+ warehouseInFk: warehouse in
+ warehouseOutFk: warehouse out
diff --git a/modules/travel/back/locale/travel/es.yml b/modules/travel/back/locale/travel/es.yml
new file mode 100644
index 000000000..ac86c003d
--- /dev/null
+++ b/modules/travel/back/locale/travel/es.yml
@@ -0,0 +1,15 @@
+name: envío
+columns:
+ id: id
+ shipped: enviado
+ landed: entregado
+ isDelivered: está entregado
+ isReceived: está recibido
+ ref: referencia
+ totalEntries: entradas totales
+ m3: m3
+ kg: kg
+ cargoSupplierFk: proveedor carga
+ agencyModeFk: agencia
+ warehouseInFk: almacén entrega
+ warehouseOutFk: almacén salida
diff --git a/modules/travel/back/methods/travel/extraCommunityFilter.js b/modules/travel/back/methods/travel/extraCommunityFilter.js
index 5ee51de8e..388ba52a1 100644
--- a/modules/travel/back/methods/travel/extraCommunityFilter.js
+++ b/modules/travel/back/methods/travel/extraCommunityFilter.js
@@ -167,7 +167,6 @@ module.exports = Self => {
s.name AS supplierName,
SUM(b.stickers) AS stickers,
e.evaNotes,
- e.notes,
e.invoiceAmount,
CAST(SUM(b.weight * b.stickers) AS DECIMAL(10,0)) as loadedkg,
CAST(SUM(vc.aerealVolumetricDensity * b.stickers * IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000) AS DECIMAL(10,0)) as volumeKg
diff --git a/modules/travel/back/methods/travel/getEntries.js b/modules/travel/back/methods/travel/getEntries.js
index 5ca12f7a1..71bb0d8fb 100644
--- a/modules/travel/back/methods/travel/getEntries.js
+++ b/modules/travel/back/methods/travel/getEntries.js
@@ -31,7 +31,6 @@ module.exports = Self => {
e.isConfirmed,
e.invoiceNumber,
e.reference,
- e.notes,
e.evaNotes AS observation,
s.name AS supplierName,
CAST((SUM(IF(p.volume > 0,p.volume,p.width * p.depth * IF(p.height, p.height, i.size + pconfig.upperGap))
diff --git a/modules/travel/back/models/travel-log.json b/modules/travel/back/models/travel-log.json
index a72d9e0a5..e781c2948 100644
--- a/modules/travel/back/models/travel-log.json
+++ b/modules/travel/back/models/travel-log.json
@@ -1,6 +1,6 @@
{
"name": "TravelLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "travelLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/travel/front/search-panel/style.scss b/modules/travel/front/search-panel/style.scss
index 94fe7b239..0da52408a 100644
--- a/modules/travel/front/search-panel/style.scss
+++ b/modules/travel/front/search-panel/style.scss
@@ -2,7 +2,7 @@
vn-travel-search-panel vn-side-menu {
.menu {
- min-width: $right-menu-width;
+ min-width: $menu-width;
}
& > div {
.input {
diff --git a/modules/travel/front/summary/index.html b/modules/travel/front/summary/index.html
index 113128e0e..5d38ed08f 100644
--- a/modules/travel/front/summary/index.html
+++ b/modules/travel/front/summary/index.html
@@ -100,12 +100,6 @@
{{entry.pallet}}
{{entry.m3}}
-
-
{
client = await models.Client.findById(
user.id,
- {fields: ['id', 'name', 'socialName', 'street', 'city', 'iban', 'bankEntityFk', 'defaultAddressFk']},
+ {fields: ['id', 'name', 'socialName', 'street', 'city', 'iban', 'bankEntityFk', 'defaultAddressFk', 'fi']},
myOptions
);
diff --git a/modules/worker/back/models/device-production-log.json b/modules/worker/back/models/device-production-log.json
index c935398fc..71c54a9c1 100644
--- a/modules/worker/back/models/device-production-log.json
+++ b/modules/worker/back/models/device-production-log.json
@@ -1,6 +1,6 @@
{
"name": "DeviceProductionLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "deviceProductionLog"
diff --git a/modules/worker/back/models/worker-log.json b/modules/worker/back/models/worker-log.json
index 3cd5f9010..6eb8b75be 100644
--- a/modules/worker/back/models/worker-log.json
+++ b/modules/worker/back/models/worker-log.json
@@ -1,6 +1,6 @@
{
"name": "WorkerLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "workerLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/modules/zone/back/locale/zone-event/en.yml b/modules/zone/back/locale/zone-event/en.yml
new file mode 100644
index 000000000..2d6ef39ab
--- /dev/null
+++ b/modules/zone/back/locale/zone-event/en.yml
@@ -0,0 +1,14 @@
+name: zone event
+columns:
+ id: id
+ zoneFk: zone
+ type: type
+ dated: dated
+ started: started
+ ended: ended
+ weekDays: week days
+ hour: hour
+ travelingDays: traveling days
+ price: price
+ bonus: bonus
+ m3Max: max m3
diff --git a/modules/zone/back/locale/zone-event/es.yml b/modules/zone/back/locale/zone-event/es.yml
new file mode 100644
index 000000000..9bc8db9fe
--- /dev/null
+++ b/modules/zone/back/locale/zone-event/es.yml
@@ -0,0 +1,14 @@
+name: evento zona
+columns:
+ id: id
+ zoneFk: zona
+ type: tipo
+ dated: fecha
+ started: comenzado
+ ended: terminado
+ weekDays: días semana
+ hour: hora
+ travelingDays: días de viaje
+ price: precio
+ bonus: bono
+ m3Max: máx. m3
diff --git a/modules/zone/back/locale/zone-exclusion/en.yml b/modules/zone/back/locale/zone-exclusion/en.yml
new file mode 100644
index 000000000..4389d8b93
--- /dev/null
+++ b/modules/zone/back/locale/zone-exclusion/en.yml
@@ -0,0 +1,5 @@
+name: zone exclusion
+columns:
+ id: id
+ dated: dated
+ zoneFk: zone
diff --git a/modules/zone/back/locale/zone-exclusion/es.yml b/modules/zone/back/locale/zone-exclusion/es.yml
new file mode 100644
index 000000000..4e59cba46
--- /dev/null
+++ b/modules/zone/back/locale/zone-exclusion/es.yml
@@ -0,0 +1,5 @@
+name: zone exclusion
+columns:
+ id: id
+ dated: fecha
+ zoneFk: zona
diff --git a/modules/zone/back/locale/zone-included/en.yml b/modules/zone/back/locale/zone-included/en.yml
new file mode 100644
index 000000000..0e44989e9
--- /dev/null
+++ b/modules/zone/back/locale/zone-included/en.yml
@@ -0,0 +1,5 @@
+name: zone included
+columns:
+ id: id
+ dated: dated
+ zoneFk: zone
diff --git a/modules/zone/back/locale/zone-included/es.yml b/modules/zone/back/locale/zone-included/es.yml
new file mode 100644
index 000000000..30a89373a
--- /dev/null
+++ b/modules/zone/back/locale/zone-included/es.yml
@@ -0,0 +1,5 @@
+name: zona incluida
+columns:
+ id: id
+ dated: fecha
+ zoneFk: zona
diff --git a/modules/zone/back/locale/zone-warehouse/en.yml b/modules/zone/back/locale/zone-warehouse/en.yml
new file mode 100644
index 000000000..b9c4f7609
--- /dev/null
+++ b/modules/zone/back/locale/zone-warehouse/en.yml
@@ -0,0 +1,5 @@
+name: zone warehouse
+columns:
+ id: id
+ warehouseFk: warehouse
+ zoneFk: zone
diff --git a/modules/zone/back/locale/zone-warehouse/es.yml b/modules/zone/back/locale/zone-warehouse/es.yml
new file mode 100644
index 000000000..ec8dec2dd
--- /dev/null
+++ b/modules/zone/back/locale/zone-warehouse/es.yml
@@ -0,0 +1,5 @@
+name: almacén zona
+columns:
+ id: id
+ warehouseFk: almacén
+ zoneFk: zona
diff --git a/modules/zone/back/locale/zone/en.yml b/modules/zone/back/locale/zone/en.yml
new file mode 100644
index 000000000..649631faa
--- /dev/null
+++ b/modules/zone/back/locale/zone/en.yml
@@ -0,0 +1,14 @@
+name: zone
+columns:
+ id: id
+ name: name
+ hour: hour
+ travelingDays: traveling days
+ price: price
+ bonus: bonus
+ isVolumetric: volumetric
+ inflation: inflation
+ m3Max: max m3
+ itemMaxSize: item max size
+ agencyModeFk: agency
+ zoneFk: zone
diff --git a/modules/zone/back/locale/zone/es.yml b/modules/zone/back/locale/zone/es.yml
new file mode 100644
index 000000000..3534c2e12
--- /dev/null
+++ b/modules/zone/back/locale/zone/es.yml
@@ -0,0 +1,14 @@
+name: zona
+columns:
+ id: id
+ name: nombre
+ hour: hora
+ travelingDays: días viaje
+ price: precio
+ bonus: bono
+ isVolumetric: volumétrico
+ inflation: inflación
+ m3Max: máx. m3
+ itemMaxSize: tamaño máximo artículo
+ agencyModeFk: agencia
+ zoneFk: zona
diff --git a/modules/zone/back/models/zone-log.json b/modules/zone/back/models/zone-log.json
index e84153467..72dd305b2 100644
--- a/modules/zone/back/models/zone-log.json
+++ b/modules/zone/back/models/zone-log.json
@@ -1,6 +1,6 @@
{
"name": "ZoneLog",
- "base": "VnModel",
+ "base": "Log",
"options": {
"mysql": {
"table": "zoneLog"
@@ -50,7 +50,7 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "userFk"
- }
+ }
},
"scope": {
"order": ["creationDate DESC", "id DESC"]
diff --git a/print/templates/reports/entry-order/entry-order.html b/print/templates/reports/entry-order/entry-order.html
index 5d362dea9..ddf0e9b5d 100644
--- a/print/templates/reports/entry-order/entry-order.html
+++ b/print/templates/reports/entry-order/entry-order.html
@@ -77,16 +77,6 @@
-
-
-
-
-
{{$t('notes')}}
-
{{entry.notes}}
-
-
-
-
diff --git a/print/templates/reports/entry-order/sql/entry.sql b/print/templates/reports/entry-order/sql/entry.sql
index 57b8d9293..c30eebca8 100644
--- a/print/templates/reports/entry-order/sql/entry.sql
+++ b/print/templates/reports/entry-order/sql/entry.sql
@@ -1,7 +1,6 @@
SELECT
e.id,
e.invoiceNumber,
- e.notes,
c.code companyCode,
t.landed
FROM entry e