Merge branch 'dev' into 7191-entry_BeforeUpdate-isBooked
gitea/salix/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Ivan Mas 2024-04-22 13:08:06 +00:00
commit f03a431ea2
57 changed files with 531 additions and 387 deletions

View File

@ -30,7 +30,7 @@ module.exports = Self => {
path: `/:id/downloadFile`, path: `/:id/downloadFile`,
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadFile = async function(ctx, id) { Self.downloadFile = async function(ctx, id) {

View File

@ -43,7 +43,7 @@ module.exports = Self => {
path: `/:id/download`, path: `/:id/download`,
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.download = async function(id, fileCabinet, filter) { Self.download = async function(id, fileCabinet, filter) {

View File

@ -48,7 +48,7 @@ module.exports = Self => {
path: `/:collection/:size/:id/download`, path: `/:collection/:size/:id/download`,
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.download = async function(ctx, collection, size, id) { Self.download = async function(ctx, collection, size, id) {

View File

@ -28,6 +28,9 @@ describe('Renew Token', () => {
}); });
it('should renew token', async() => { it('should renew token', async() => {
const {courtesyTime} = await models.AccessTokenConfig.findOne({
fields: ['courtesyTime']
});
const mockDate = new Date(startingTime + 26600000); const mockDate = new Date(startingTime + 26600000);
jasmine.clock().mockDate(mockDate); jasmine.clock().mockDate(mockDate);
const {id} = await models.VnUser.renewToken(ctx); const {id} = await models.VnUser.renewToken(ctx);
@ -35,7 +38,7 @@ describe('Renew Token', () => {
expect(id).not.toEqual(ctx.req.accessToken.id); expect(id).not.toEqual(ctx.req.accessToken.id);
await models.VnUser.logout(ctx.req.accessToken.id); await models.VnUser.logout(ctx.req.accessToken.id);
jasmine.clock().tick(70 * 1000); jasmine.clock().tick((courtesyTime + 10) * 1000);
let tokenNotExists; let tokenNotExists;
try { try {
tokenNotExists = await models.AccessToken.findById(ctx.req.accessToken.id); tokenNotExists = await models.AccessToken.findById(ctx.req.accessToken.id);

View File

@ -527,7 +527,8 @@ INSERT INTO `vn`.`observationType`(`id`,`description`, `code`)
(4, 'SalesPerson', 'salesPerson'), (4, 'SalesPerson', 'salesPerson'),
(5, 'Administrative', 'administrative'), (5, 'Administrative', 'administrative'),
(6, 'Weight', 'weight'), (6, 'Weight', 'weight'),
(7, 'InvoiceOut', 'invoiceOut'); (7, 'InvoiceOut', 'invoiceOut'),
(8, 'DropOff', 'dropOff');
INSERT INTO `vn`.`addressObservation`(`id`,`addressFk`,`observationTypeFk`,`description`) INSERT INTO `vn`.`addressObservation`(`id`,`addressFk`,`observationTypeFk`,`description`)
VALUES VALUES

View File

@ -92,12 +92,12 @@ BEGIN
UPDATE bi.Greuge_Evolution ge UPDATE bi.Greuge_Evolution ge
JOIN ( JOIN (
SELECT cs.Id_Cliente, sum(Valor * Cantidad) as Importe SELECT cs.Id_Cliente, sum(Valor * Cantidad) as Importe
FROM vn2008.Tickets t FROM vn.ticket t
JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.addressFk
JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket JOIN vn2008.Movimientos m on m.Id_Ticket = t.id
JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
WHERE t.Fecha >= datFEC WHERE t.shipped >= datFEC
AND t.Fecha < datFEC_TOMORROW AND t.shipped < datFEC_TOMORROW
AND mc.Id_Componente = 17 -- Recobro AND mc.Id_Componente = 17 -- Recobro
GROUP BY cs.Id_Cliente GROUP BY cs.Id_Cliente
) sub using(Id_Cliente) ) sub using(Id_Cliente)

View File

@ -1,5 +1,5 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`() CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
BEGIN BEGIN
DECLARE vLastMonth DATE; DECLARE vLastMonth DATE;
@ -10,18 +10,18 @@ BEGIN
OR (Año = YEAR(vLastMonth) AND Mes >= MONTH(vLastMonth)); OR (Año = YEAR(vLastMonth) AND Mes >= MONTH(vLastMonth));
INSERT INTO analisis_ventas ( INSERT INTO analisis_ventas (
Familia, Familia,
Reino, Reino,
Comercial, Comercial,
Comprador, Comprador,
Provincia, Provincia,
almacen, almacen,
Año, Año,
Mes, Mes,
Semana, Semana,
Vista, Vista,
Importe Importe
) )
SELECT SELECT
tp.Tipo AS Familia, tp.Tipo AS Familia,
r.reino AS Reino, r.reino AS Reino,
@ -35,19 +35,19 @@ BEGIN
dm.description AS Vista, dm.description AS Vista,
bt.importe AS Importe bt.importe AS Importe
FROM bs.ventas bt FROM bs.ventas bt
LEFT JOIN vn2008.Tipos tp ON tp.tipo_id = bt.tipo_id LEFT JOIN vn2008.Tipos tp ON tp.tipo_id = bt.tipo_id
LEFT JOIN vn2008.reinos r ON r.id = tp.reino_id LEFT JOIN vn2008.reinos r ON r.id = tp.reino_id
LEFT JOIN vn2008.Clientes c on c.Id_Cliente = bt.Id_Cliente LEFT JOIN vn2008.Clientes c on c.Id_Cliente = bt.Id_Cliente
LEFT JOIN vn2008.Trabajadores tr ON tr.Id_Trabajador = c.Id_Trabajador LEFT JOIN vn2008.Trabajadores tr ON tr.Id_Trabajador = c.Id_Trabajador
LEFT JOIN vn2008.Trabajadores tr2 ON tr2.Id_Trabajador = tp.Id_Trabajador LEFT JOIN vn2008.Trabajadores tr2 ON tr2.Id_Trabajador = tp.Id_Trabajador
JOIN vn2008.time tm ON tm.date = bt.fecha JOIN vn2008.time tm ON tm.date = bt.fecha
JOIN vn2008.Movimientos m ON m.Id_Movimiento = bt.Id_Movimiento JOIN vn2008.Movimientos m ON m.Id_Movimiento = bt.Id_Movimiento
LEFT JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket LEFT JOIN vn.ticket t ON t.id = m.Id_Ticket
JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia JOIN vn2008.Agencias a ON a.Id_Agencia = t.agencyModeFk
LEFT JOIN vn.deliveryMethod dm ON dm.id = a.Vista LEFT JOIN vn.deliveryMethod dm ON dm.id = a.Vista
LEFT JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna LEFT JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.addressFk
LEFT JOIN vn2008.province p ON p.province_id = cs.province_id LEFT JOIN vn2008.province p ON p.province_id = cs.province_id
LEFT JOIN vn.warehouse w ON w.id = t.warehouse_id LEFT JOIN vn.warehouse w ON w.id = t.warehouseFk
WHERE bt.fecha >= vLastMonth AND r.mercancia; WHERE bt.fecha >= vLastMonth AND r.mercancia;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -59,18 +59,18 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list; DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list CREATE TEMPORARY TABLE tmp.ticket_list
(PRIMARY KEY (Id_Ticket)) (PRIMARY KEY (Id_Ticket))
SELECT DISTINCT t.Id_Ticket SELECT DISTINCT t.id Id_Ticket
FROM vn2008.Movimientos_componentes mc FROM vn2008.Movimientos_componentes mc
JOIN vn2008.Movimientos m ON mc.Id_Movimiento = m.Id_Movimiento JOIN vn2008.Movimientos m ON mc.Id_Movimiento = m.Id_Movimiento
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket JOIN vn.ticket t ON t.id = m.Id_Ticket
JOIN vn2008.Tickets_state ts ON ts.Id_Ticket = t.Id_Ticket JOIN vn.ticketLastState ts ON ts.ticketFk = t.id
JOIN vn.ticketTracking tt ON tt.id = ts.inter_id JOIN vn.ticketTracking tt ON tt.id = ts.ticketTrackingFk
JOIN vn2008.state s ON s.id = tt.stateFk JOIN vn.state s ON s.id = tt.stateFk
WHERE mc.Id_Componente = 17 WHERE mc.Id_Componente = 17
AND mc.greuge = 0 AND mc.greuge = 0
AND t.Fecha >= '2016-10-01' AND t.shipped >= '2016-10-01'
AND t.Fecha < util.VN_CURDATE() AND t.shipped < util.VN_CURDATE()
AND s.alert_level >= 3; AND s.alertLevel >= 3;
DELETE g.* DELETE g.*
FROM vn.greuge g FROM vn.greuge g
@ -79,18 +79,18 @@ BEGIN
INSERT INTO vn.greuge(clientFk, description, amount,shipped, INSERT INTO vn.greuge(clientFk, description, amount,shipped,
greugeTypeFk, ticketFk) greugeTypeFk, ticketFk)
SELECT Id_Cliente SELECT t.clientFk
,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2) ,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2)
AS dif AS dif
,date(t.Fecha) ,date(t.shipped)
, 2 , 2
,tt.Id_Ticket ,tt.Id_Ticket
FROM vn2008.Movimientos m FROM vn2008.Movimientos m
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket JOIN vn.ticket t ON t.id = m.Id_Ticket
JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.id
JOIN vn2008.Movimientos_componentes mc JOIN vn2008.Movimientos_componentes mc
ON mc.Id_Movimiento = m.Id_Movimiento AND mc.Id_Componente = 17 ON mc.Id_Movimiento = m.Id_Movimiento AND mc.Id_Componente = 17
GROUP BY t.Id_Ticket GROUP BY t.id
HAVING ABS(dif) > 1; HAVING ABS(dif) > 1;
UPDATE vn2008.Movimientos_componentes mc UPDATE vn2008.Movimientos_componentes mc

View File

@ -15,17 +15,17 @@ BEGIN
IF lastCOMP < vMaxPeriod - 3 AND vMaxWeek > 3 THEN IF lastCOMP < vMaxPeriod - 3 AND vMaxWeek > 3 THEN
REPLACE vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price) REPLACE vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe) SELECT tm.period as Periodo, m.Id_Article, t.warehouseFk, sum(m.Cantidad), sum(v.importe)
FROM bs.ventas v FROM bs.ventas v
JOIN vn2008.time tm ON tm.date = v.fecha JOIN vn2008.time tm ON tm.date = v.fecha
JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
JOIN vn2008.reinos r ON r.id = tp.reino_id JOIN vn2008.reinos r ON r.id = tp.reino_id
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket JOIN vn.ticket t ON t.id = m.Id_Ticket
WHERE tm.period BETWEEN lastCOMP AND vMaxPeriod - 3 WHERE tm.period BETWEEN lastCOMP AND vMaxPeriod - 3
AND t.Id_Cliente NOT IN(400,200) AND t.clientFk NOT IN(400,200)
AND t.warehouse_id NOT IN (0,13) AND t.warehouseFk NOT IN (0,13)
GROUP BY m.Id_Article, Periodo, t.warehouse_id; GROUP BY m.Id_Article, Periodo, t.warehouseFk;
END IF; END IF;
END$$ END$$

View File

@ -25,16 +25,16 @@ BEGIN
WHERE Periodo BETWEEN periodStart AND periodEnd; WHERE Periodo BETWEEN periodStart AND periodEnd;
INSERT INTO vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price) INSERT INTO vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe) SELECT tm.period as Periodo, m.Id_Article, t.warehouseFk, sum(m.Cantidad), sum(v.importe)
FROM bs.ventas v FROM bs.ventas v
JOIN vn2008.time tm ON tm.date = v.fecha JOIN vn2008.time tm ON tm.date = v.fecha
JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
JOIN vn2008.reinos r ON r.id = tp.reino_id JOIN vn2008.reinos r ON r.id = tp.reino_id
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket JOIN vn.ticket t ON t.id = m.Id_Ticket
WHERE tm.period BETWEEN periodStart AND periodEnd WHERE tm.period BETWEEN periodStart AND periodEnd
AND t.Id_Cliente NOT IN(400,200) AND t.clientFk NOT IN(400,200)
AND t.warehouse_id NOT IN (0,13) AND t.warehouseFk NOT IN (0,13)
GROUP BY m.Id_Article, Periodo, t.warehouse_id; GROUP BY m.Id_Article, Periodo, t.warehouseFk;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -11,13 +11,13 @@ AS SELECT `time`.`year` AS `year`,
FROM ( FROM (
( (
( (
`vn2008`.`Tickets` `t` `vn`.`ticket` `t`
JOIN `bi`.`f_tvc` ON(`t`.`Id_Ticket` = `bi`.`f_tvc`.`Id_Ticket`) JOIN `bi`.`f_tvc` ON(`t`.`id` = `bi`.`f_tvc`.`Id_Ticket`)
) )
JOIN `vn2008`.`Movimientos` `m` ON(`t`.`Id_Ticket` = `m`.`Id_Ticket`) JOIN `vn2008`.`Movimientos` `m` ON(`t`.`id` = `m`.`Id_Ticket`)
) )
JOIN `vn2008`.`time` ON(`time`.`date` = cast(`t`.`Fecha` AS date)) JOIN `vn2008`.`time` ON(`time`.`date` = cast(`t`.`shipped` AS date))
) )
WHERE `t`.`Fecha` >= '2014-01-01' WHERE `t`.`shipped` >= '2014-01-01'
GROUP BY `time`.`year`, GROUP BY `time`.`year`,
`time`.`month` `time`.`month`

View File

@ -70,23 +70,23 @@ BEGIN
AND (v.fecha BETWEEN TIMESTAMPADD(DAY, - DAY(vDate) + 1, vDate) AND TIMESTAMPADD(DAY, - 1, vDate)) AND (v.fecha BETWEEN TIMESTAMPADD(DAY, - DAY(vDate) + 1, vDate) AND TIMESTAMPADD(DAY, - 1, vDate))
GROUP BY Id_Cliente) mes_actual ON mes_actual.Id_Cliente = c.Id_Cliente GROUP BY Id_Cliente) mes_actual ON mes_actual.Id_Cliente = c.Id_Cliente
LEFT JOIN LEFT JOIN
(SELECT t.Id_Cliente, SUM(m.preu * m.Cantidad * (1 - m.Descuento / 100)) futur (SELECT t.clientFk Id_Cliente, SUM(m.preu * m.Cantidad * (1 - m.Descuento / 100)) futur
FROM vn2008.Tickets t FROM vn.ticket t
JOIN vn2008.Clientes c ON c.Id_Cliente = t.Id_Cliente JOIN vn2008.Clientes c ON c.Id_Cliente = t.clientFk
JOIN vn2008.Movimientos m ON m.Id_Ticket = t.Id_Ticket JOIN vn2008.Movimientos m ON m.Id_Ticket = t.id
LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
WHERE WHERE
(c.Id_Trabajador = vWorker OR tr.boss = vWorker) (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
AND t.Fecha BETWEEN vDate AND util.dayEnd(LAST_DAY(vDate)) AND t.shipped BETWEEN vDate AND util.dayEnd(LAST_DAY(vDate))
GROUP BY Id_Cliente) f ON c.Id_Cliente = f.Id_Cliente GROUP BY Id_Cliente) f ON c.Id_Cliente = f.Id_Cliente
LEFT JOIN LEFT JOIN
(SELECT MAX(t.Fecha) LastTicket, c.Id_Cliente (SELECT MAX(t.shipped) LastTicket, c.Id_Cliente
FROM vn2008.Tickets t FROM vn.ticket t
JOIN vn2008.Clientes c ON c.Id_cliente = t.Id_Cliente JOIN vn2008.Clientes c ON c.Id_cliente = t.clientFk
LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
WHERE WHERE
(c.Id_Trabajador = vWorker OR tr.boss = vWorker) (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
GROUP BY t.Id_Cliente) LastTicket ON LastTicket.Id_Cliente = c.Id_Cliente GROUP BY t.clientFk) LastTicket ON LastTicket.Id_Cliente = c.Id_Cliente
LEFT JOIN LEFT JOIN
( (
SELECT SUM(importe) peso, c.Id_Cliente SELECT SUM(importe) peso, c.Id_Cliente

View File

@ -68,13 +68,13 @@ BEGIN
FROM FROM
( (
SELECT cs.Id_Cliente, Cantidad * Valor as mana SELECT cs.Id_Cliente, Cantidad * Valor as mana
FROM vn2008.Tickets t FROM vn.ticket t
JOIN vn2008.Consignatarios cs using(Id_Consigna) JOIN vn2008.Consignatarios cs using(Id_Consigna)
JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket JOIN vn2008.Movimientos m on m.Id_Ticket = t.id
JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
WHERE Id_Componente IN (vManaAutoId, vManaId, vClaimManaId) WHERE Id_Componente IN (vManaAutoId, vManaId, vClaimManaId)
AND t.Fecha > vFromDated AND t.shipped > vFromDated
AND date(t.Fecha) <= vToDated AND date(t.shipped) <= vToDated
UNION ALL UNION ALL
SELECT r.Id_Cliente, - Entregado SELECT r.Id_Cliente, - Entregado
FROM vn2008.Recibos r FROM vn2008.Recibos r

View File

@ -19,11 +19,11 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list; DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list CREATE TEMPORARY TABLE tmp.ticket_list
(PRIMARY KEY (Id_Ticket)) (PRIMARY KEY (id))
ENGINE = MEMORY ENGINE = MEMORY
SELECT Id_Ticket SELECT t.id
FROM vn2008.Tickets t FROM vn.ticket t
JOIN vn.invoiceOut io ON io.`ref` = t.Factura JOIN vn.invoiceOut io ON io.`ref` = t.refFk
WHERE year(io.issued) = vYear WHERE year(io.issued) = vYear
AND month(io.issued) = vMonth; AND month(io.issued) = vMonth;
@ -46,7 +46,7 @@ BEGIN
) as grupo ) as grupo
, tp.reino_id , tp.reino_id
, a.tipo_id , a.tipo_id
, t.empresa_id , t.companyFk
, a.expenseFk , a.expenseFk
+ IF(e.empresa_grupo = e2.empresa_grupo + IF(e.empresa_grupo = e2.empresa_grupo
,1 ,1
@ -54,19 +54,19 @@ BEGIN
) * 100000 ) * 100000
+ tp.reino_id * 1000 as Gasto + tp.reino_id * 1000 as Gasto
FROM vn2008.Movimientos m FROM vn2008.Movimientos m
JOIN vn2008.Tickets t on t.Id_Ticket = m.Id_Ticket JOIN vn.ticket t ON t.id = m.Id_Ticket
JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.addressFk
JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente
JOIN tmp.ticket_list tt on tt.Id_Ticket = t.Id_Ticket JOIN tmp.ticket_list tt on tt.id = t.id
JOIN vn2008.Articles a on m.Id_Article = a.Id_Article JOIN vn2008.Articles a on m.Id_Article = a.Id_Article
JOIN vn2008.empresa e on e.id = t.empresa_id JOIN vn2008.empresa e on e.id = t.companyFk
LEFT JOIN vn2008.empresa e2 on e2.Id_Cliente = c.Id_Cliente LEFT JOIN vn2008.empresa e2 on e2.Id_Cliente = c.Id_Cliente
JOIN vn2008.Tipos tp on tp.tipo_id = a.tipo_id JOIN vn2008.Tipos tp on tp.tipo_id = a.tipo_id
WHERE Cantidad <> 0 WHERE Cantidad <> 0
AND Preu <> 0 AND Preu <> 0
AND m.Descuento <> 100 AND m.Descuento <> 100
AND a.tipo_id != TIPO_PATRIMONIAL AND a.tipo_id != TIPO_PATRIMONIAL
GROUP BY grupo, reino_id, tipo_id, empresa_id, Gasto; GROUP BY grupo, reino_id, tipo_id, companyFk, Gasto;
INSERT INTO bs.ventas_contables(year INSERT INTO bs.ventas_contables(year
, month , month
@ -92,7 +92,7 @@ BEGIN
JOIN vn.ticket t ON ts.ticketFk = t.id JOIN vn.ticket t ON ts.ticketFk = t.id
JOIN vn.address a on a.id = t.addressFk JOIN vn.address a on a.id = t.addressFk
JOIN vn.client cl on cl.id = a.clientFk JOIN vn.client cl on cl.id = a.clientFk
JOIN tmp.ticket_list tt on tt.Id_Ticket = t.id JOIN tmp.ticket_list tt on tt.id = t.id
JOIN vn.company c on c.id = t.companyFk JOIN vn.company c on c.id = t.companyFk
LEFT JOIN vn.company c2 on c2.clientFk = cl.id LEFT JOIN vn.company c2 on c2.clientFk = cl.id
GROUP BY grupo, t.companyFk ; GROUP BY grupo, t.companyFk ;

View File

@ -10,38 +10,38 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list; DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list CREATE TEMPORARY TABLE tmp.ticket_list
(PRIMARY KEY (Id_Ticket)) (PRIMARY KEY (id))
SELECT Id_Ticket SELECT t.id
FROM vn2008.Tickets t FROM vn.ticket t
JOIN vn.invoiceOut io ON io.id = t.Factura JOIN vn.invoiceOut io ON io.id = t.refFk
WHERE year(io.issued) = vYear WHERE year(io.issued) = vYear
AND month(io.issued) = vMonth; AND month(io.issued) = vMonth;
SELECT vYear Año, SELECT vYear Año,
vMonth Mes, vMonth Mes,
t.Id_Cliente, t.clientFk Id_Cliente,
round(sum(Cantidad * Preu * (100 - m.Descuento)/100)) Venta, round(sum(Cantidad * Preu * (100 - m.Descuento)/100)) Venta,
IF(e.empresa_grupo = e2.empresa_grupo, IF(e.empresa_grupo = e2.empresa_grupo,
1, 1,
IF(e2.empresa_grupo,2,0)) IF(e2.empresa_grupo,2,0))
AS grupo, AS grupo,
t.empresa_id empresa t.companyFk empresa
FROM vn2008.Movimientos m FROM vn2008.Movimientos m
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket JOIN vn.ticket t ON t.id = m.Id_Ticket
JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.addressFk
JOIN vn2008.Clientes c ON c.Id_Cliente = cs.Id_Cliente JOIN vn2008.Clientes c ON c.Id_Cliente = cs.Id_Cliente
JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket JOIN tmp.ticket_list tt ON tt.id = t.id
JOIN vn2008.Articles a ON m.Id_Article = a.Id_Article JOIN vn2008.Articles a ON m.Id_Article = a.Id_Article
JOIN vn2008.empresa e ON e.id = t.empresa_id JOIN vn2008.empresa e ON e.id = t.companyFk
LEFT JOIN vn2008.empresa e2 ON e2.Id_Cliente = c.Id_Cliente LEFT JOIN vn2008.empresa e2 ON e2.Id_Cliente = c.Id_Cliente
JOIN vn2008.Tipos tp ON tp.tipo_id = a.tipo_id JOIN vn2008.Tipos tp ON tp.tipo_id = a.tipo_id
WHERE Cantidad <> 0 WHERE Cantidad <> 0
AND Preu <> 0 AND Preu <> 0
AND m.Descuento <> 100 AND m.Descuento <> 100
AND a.tipo_id != 188 AND a.tipo_id != 188
GROUP BY t.Id_Cliente, grupo,t.empresa_id; GROUP BY t.clientFk, grupo,t.companyFk;
DROP TEMPORARY TABLE tmp.ticket_list; DROP TEMPORARY TABLE tmp.ticket_list;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -11,9 +11,9 @@ BEGIN
SELECT SELECT
a.Vista a.Vista
INTO vDeliveryType INTO vDeliveryType
FROM vn2008.Tickets t FROM ticket t
JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia JOIN vn2008.Agencias a ON a.Id_Agencia = t.agencyModeFk
WHERE Id_Ticket = vTicket; WHERE t.id = vTicket;
CASE vDeliveryType CASE vDeliveryType
WHEN 1 THEN -- AGENCIAS WHEN 1 THEN -- AGENCIAS
@ -23,11 +23,11 @@ BEGIN
SET vCode = 'ON_DELIVERY'; SET vCode = 'ON_DELIVERY';
ELSE -- MERCADO, OTROS ELSE -- MERCADO, OTROS
SELECT t.warehouse_id <> w.warehouse_id INTO isWaitingForPickUp SELECT t.warehouseFk <> w.warehouse_id INTO isWaitingForPickUp
FROM vn2008.Tickets t FROM ticket t
LEFT JOIN vn2008.warehouse_pickup w LEFT JOIN vn2008.warehouse_pickup w
ON w.agency_id = t.Id_Agencia AND w.warehouse_id = t.warehouse_id ON w.agency_id = t.agencyModeFk AND w.warehouse_id = t.warehouseFk
WHERE t.Id_Ticket = vTicket; WHERE t.id = vTicket;
IF isWaitingForPickUp THEN IF isWaitingForPickUp THEN
SET vCode = 'WAITING_FOR_PICKUP'; SET vCode = 'WAITING_FOR_PICKUP';

View File

@ -28,10 +28,10 @@ SELECT t.routeFk, t.warehouseFk, IFNULL(ts.productionOrder,0)
SELECT (ag.`name` = 'VN_VALENCIA') SELECT (ag.`name` = 'VN_VALENCIA')
INTO vIsValenciaPath INTO vIsValenciaPath
FROM vn2008.Rutas r FROM `route` r
JOIN vn2008.Agencias a on a.Id_Agencia = r.Id_Agencia JOIN vn2008.Agencias a on a.Id_Agencia = r.agencyModeFk
JOIN vn2008.agency ag on ag.agency_id = a.agency_id JOIN vn2008.agency ag on ag.agency_id = a.agency_id
WHERE r.Id_Ruta = vMyPath; WHERE r.id = vMyPath;
IF vIsValenciaPath THEN -- Rutas Valencia IF vIsValenciaPath THEN -- Rutas Valencia

View File

@ -3,7 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_assign`(
vUserFk INT, vUserFk INT,
OUT vCollectionFk INT OUT vCollectionFk INT
) )
proc:BEGIN BEGIN
/** /**
* Comprueba si existen colecciones libres que se ajustan * Comprueba si existen colecciones libres que se ajustan
* al perfil del usuario y le asigna la más antigua. * al perfil del usuario y le asigna la más antigua.
@ -16,7 +16,7 @@ proc:BEGIN
DECLARE vItemPackingTypeFk VARCHAR(1); DECLARE vItemPackingTypeFk VARCHAR(1);
DECLARE vWarehouseFk INT; DECLARE vWarehouseFk INT;
DECLARE vLockName VARCHAR(215); DECLARE vLockName VARCHAR(215);
DECLARE vLockTime INT DEFAULT 15; DECLARE vLockTime INT DEFAULT 30;
DECLARE EXIT HANDLER FOR SQLEXCEPTION DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN BEGIN
@ -39,7 +39,6 @@ proc:BEGIN
IF vHasTooMuchCollections THEN IF vHasTooMuchCollections THEN
CALL util.throw('Hay colecciones pendientes'); CALL util.throw('Hay colecciones pendientes');
LEAVE proc;
END IF; END IF;
SELECT warehouseFk, itemPackingTypeFk SELECT warehouseFk, itemPackingTypeFk
@ -54,7 +53,7 @@ proc:BEGIN
); );
IF NOT GET_LOCK(vLockName, vLockTime) THEN IF NOT GET_LOCK(vLockName, vLockTime) THEN
LEAVE proc; CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
END IF; END IF;
-- Se eliminan las colecciones sin asignar que estan obsoletas -- Se eliminan las colecciones sin asignar que estan obsoletas

View File

@ -1,6 +1,6 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_new`(vUserFk INT, OUT vCollectionFk INT) CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_new`(vUserFk INT, OUT vCollectionFk INT)
proc:BEGIN BEGIN
/** /**
* Genera colecciones de tickets sin asignar trabajador. * Genera colecciones de tickets sin asignar trabajador.
* *
@ -26,7 +26,7 @@ proc:BEGIN
DECLARE vHasUniqueCollectionTime BOOL; DECLARE vHasUniqueCollectionTime BOOL;
DECLARE vDone INT DEFAULT FALSE; DECLARE vDone INT DEFAULT FALSE;
DECLARE vLockName VARCHAR(215); DECLARE vLockName VARCHAR(215);
DECLARE vLockTime INT DEFAULT 15; DECLARE vLockTime INT DEFAULT 30;
DECLARE vFreeWagonFk INT; DECLARE vFreeWagonFk INT;
DECLARE c1 CURSOR FOR DECLARE c1 CURSOR FOR
@ -86,7 +86,7 @@ proc:BEGIN
); );
IF NOT GET_LOCK(vLockName, vLockTime) THEN IF NOT GET_LOCK(vLockName, vLockTime) THEN
LEAVE proc; CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
END IF; END IF;
-- Se prepara el tren, con tantos vagones como sea necesario. -- Se prepara el tren, con tantos vagones como sea necesario.

View File

@ -188,7 +188,7 @@ BEGIN
FROM tPendingDuedates vp FROM tPendingDuedates vp
LEFT JOIN supplier s ON s.id = vp.supplierFk LEFT JOIN supplier s ON s.id = vp.supplierFk
LEFT JOIN client c ON c.fi = s.nif LEFT JOIN client c ON c.fi = s.nif
JOIN clientRisk cr ON cr.clientFk = c.id LEFT JOIN clientRisk cr ON cr.clientFk = c.id
AND cr.companyFk = vp.companyFk AND cr.companyFk = vp.companyFk
LEFT JOIN supplierAccount sa ON sa.supplierFk = s.id LEFT JOIN supplierAccount sa ON sa.supplierFk = s.id
LEFT JOIN bankEntity be ON be.id = sa.bankEntityFk LEFT JOIN bankEntity be ON be.id = sa.bankEntityFk

View File

@ -0,0 +1,42 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
BEGIN
/**
* Devuelve el riesgo de los clientes que estan asegurados
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt
(PRIMARY KEY (clientFk))
ENGINE = MEMORY
SELECT * FROM (
SELECT cc.client clientFk, ci.grade
FROM creditClassification cc
JOIN creditInsurance ci ON cc.id = ci.creditClassification
WHERE dateEnd IS NULL
ORDER BY ci.creationDate DESC
LIMIT 10000000000000000000) t1
GROUP BY clientFk;
CALL client_getDebt(util.VN_CURDATE());
SELECT c.id,
c.name,
c.credit clientCredit,
c.creditInsurance solunion,
CAST(r.risk AS DECIMAL(10,0)) risk,
CAST(c.creditInsurance - r.risk AS DECIMAL(10,0)) riskAlive,
cac.invoiced billedAnnually,
c.dueDay,
cgd.grade,
c2.country
FROM tmp.clientGetDebt cgd
LEFT JOIN tmp.risk r ON r.clientFk = cgd.clientFk
JOIN client c ON c.id = cgd.clientFk
JOIN bs.clientAnnualConsumption cac ON c.id = cac.clientFk
JOIN country c2 ON c2.id = c.countryFk
GROUP BY c.id;
DROP TEMPORARY TABLE
tmp.risk,
tmp.clientGetDebt;
END$$
DELIMITER ;

View File

@ -8,12 +8,15 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`; DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
CREATE TEMPORARY TABLE `tmp.``ticketToInvoice` CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`)) (PRIMARY KEY (`id`))
ENGINE = MEMORY ENGINE = MEMORY
SELECT Id_Ticket id FROM vn2008.Tickets WHERE (Fecha BETWEEN vMinDateTicket SELECT id
AND vMaxTicketDate) AND Id_Consigna = vAddress FROM ticket
AND Factura IS NULL AND empresa_id = vCompany; WHERE (shipped BETWEEN vMinDateTicket AND vMaxTicketDate)
AND addressFk = vAddress
AND refFk IS NULL
AND companyFk = vCompany;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -39,7 +39,7 @@ BEGIN
UPDATE vn.itemShelving UPDATE vn.itemShelving
SET isChecked = vIsChecked SET isChecked = vIsChecked
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
AND itemFk = vItemFk; AND itemFk = vItemFk AND isChecked IS NULL;
SET vCounter = vCounter + 1; SET vCounter = vCounter + 1;
END WHILE; END WHILE;

View File

@ -65,7 +65,8 @@ BEGIN
WHEN b.groupingMode = 'packing' THEN b.packing WHEN b.groupingMode = 'packing' THEN b.packing
ELSE 1 ELSE 1
END AS minQuantity, END AS minQuantity,
iss.visible located iss.visible located,
b.price2
FROM vn.item i FROM vn.item i
JOIN cache.available a ON a.item_id = i.id JOIN cache.available a ON a.item_id = i.id
AND a.calc_id = vCalcFk AND a.calc_id = vCalcFk

View File

@ -1,8 +1,8 @@
CREATE OR REPLACE DEFINER=`root`@`localhost` CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER SQL SECURITY DEFINER
VIEW `vn`.`ticketMRW` VIEW `vn`.`ticketMRW`
AS SELECT `Tickets`.`Id_Agencia` AS `id_Agencia`, AS SELECT `ticket`.`agencyModeFk` AS `id_Agencia`,
`Tickets`.`empresa_id` AS `empresa_id`, `ticket`.`companyFk` AS `empresa_id`,
`Consignatarios`.`consignatario` AS `Consignatario`, `Consignatarios`.`consignatario` AS `Consignatario`,
`Consignatarios`.`domicilio` AS `DOMICILIO`, `Consignatarios`.`domicilio` AS `DOMICILIO`,
`Consignatarios`.`poblacion` AS `POBLACION`, `Consignatarios`.`poblacion` AS `POBLACION`,
@ -19,13 +19,13 @@ AS SELECT `Tickets`.`Id_Agencia` AS `id_Agencia`,
0 0
) AS `movil`, ) AS `movil`,
`Clientes`.`if` AS `IF`, `Clientes`.`if` AS `IF`,
`Tickets`.`Id_Ticket` AS `Id_Ticket`, `ticket`.`id` AS `Id_Ticket`,
`Tickets`.`warehouse_id` AS `warehouse_id`, `ticket`.`warehouseFk` AS `warehouse_id`,
`Consignatarios`.`id_consigna` AS `Id_Consigna`, `Consignatarios`.`id_consigna` AS `Id_Consigna`,
`Paises`.`Codigo` AS `CodigoPais`, `Paises`.`Codigo` AS `CodigoPais`,
`Tickets`.`Fecha` AS `Fecha`, `ticket`.`shipped` AS `Fecha`,
`province`.`province_id` AS `province_id`, `province`.`province_id` AS `province_id`,
`Tickets`.`landing` AS `landing` `ticket`.`landed` AS `landing`
FROM ( FROM (
( (
( (
@ -35,8 +35,8 @@ FROM (
`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente` `Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`
) )
) )
JOIN `vn2008`.`Tickets` ON( JOIN `vn`.`ticket` ON(
`Consignatarios`.`id_consigna` = `Tickets`.`Id_Consigna` `Consignatarios`.`id_consigna` = `ticket`.`addressFk`
) )
) )
JOIN `vn2008`.`province` ON( JOIN `vn2008`.`province` ON(
@ -44,4 +44,4 @@ FROM (
) )
) )
JOIN `vn2008`.`Paises` ON(`province`.`Paises_Id` = `Paises`.`Id`) JOIN `vn2008`.`Paises` ON(`province`.`Paises_Id` = `Paises`.`Id`)
) );

View File

@ -18,7 +18,7 @@ proc: BEGIN
-- Calcula algunos parámetros necesarios -- Calcula algunos parámetros necesarios
SET vDatedFrom = TIMESTAMP(vDated, '00:00:00'); SET vDatedFrom = TIMESTAMP(vDated, '00:00:00');
SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59'); SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59');
SELECT FechaInventario INTO vDatedInventory FROM tblContadores; SELECT inventoried INTO vDatedInventory FROM vn.config;
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
FROM hedera.orderConfig; FROM hedera.orderConfig;

View File

@ -1,6 +1,9 @@
CREATE OR REPLACE DEFINER=`root`@`localhost` CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER SQL SECURITY DEFINER
VIEW `vn2008`.`payroll_employee` VIEW `vn2008`.`payroll_employee` AS
AS SELECT `pw`.`workerFkA3` AS `CodTrabajador`, SELECT
`pw`.`companyFkA3` AS `codempresa` `pw`.`workerFkA3` AS `CodTrabajador`,
FROM `vn`.`payrollWorker` `pw` `pw`.`companyFkA3` AS `codempresa`,
`pw`.`workerFk` AS `workerFk`
FROM
`vn`.`payrollWorker` `pw`;

View File

@ -0,0 +1,3 @@
-- Place your SQL code here
ALTER TABLE vn.packaging
MODIFY COLUMN volume decimal(10,2) CHECK (volume >= COALESCE(width, 1) * COALESCE(depth, 1) * COALESCE(height, 1));

View File

@ -0,0 +1,4 @@
-- Place your SQL code here
USE vn;
INSERT INTO vn.observationType (description,code) VALUES ('Entrega','dropOff');

View File

@ -2,4 +2,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_getRisk`()
BEGIN BEGIN
END; END;
GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financialBoss; GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financial;
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
BEGIN
END;
GRANT EXECUTE ON PROCEDURE vn.creditInsurance_getRisk TO financial;

View File

@ -0,0 +1 @@
DROP SCHEMA IF EXISTS rfid;

View File

@ -1,217 +1,217 @@
{ {
"State cannot be blank": "State cannot be blank", "State cannot be blank": "State cannot be blank",
"Cannot be blank": "Cannot be blank", "Cannot be blank": "Cannot be blank",
"The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero", "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
"The grade must be an integer greater than or equal to zero": "The grade must be an integer greater than or equal to zero", "The grade must be an integer greater than or equal to zero": "The grade must be an integer greater than or equal to zero",
"Invalid email": "Invalid email", "Invalid email": "Invalid email",
"Name cannot be blank": "Name cannot be blank", "Name cannot be blank": "Name cannot be blank",
"Phone cannot be blank": "Phone cannot be blank", "Phone cannot be blank": "Phone cannot be blank",
"Description should have maximum of 45 characters": "Description should have maximum of 45 characters", "Description should have maximum of 45 characters": "Description should have maximum of 45 characters",
"Period cannot be blank": "Period cannot be blank", "Period cannot be blank": "Period cannot be blank",
"Sample type cannot be blank": "Sample type cannot be blank", "Sample type cannot be blank": "Sample type cannot be blank",
"That payment method requires an IBAN": "That payment method requires an IBAN", "That payment method requires an IBAN": "That payment method requires an IBAN",
"That payment method requires a BIC": "That payment method requires a BIC", "That payment method requires a BIC": "That payment method requires a BIC",
"The default consignee can not be unchecked": "The default consignee can not be unchecked", "The default consignee can not be unchecked": "The default consignee can not be unchecked",
"Enter an integer different to zero": "Enter an integer different to zero", "Enter an integer different to zero": "Enter an integer different to zero",
"Package cannot be blank": "Package cannot be blank", "Package cannot be blank": "Package cannot be blank",
"The price of the item changed": "The price of the item changed", "The price of the item changed": "The price of the item changed",
"The sales of this ticket can't be modified": "The sales of this ticket can't be modified", "The sales of this ticket can't be modified": "The sales of this ticket can't be modified",
"Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF", "Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
"You can't create an order for a frozen client": "You can't create an order for a frozen client", "You can't create an order for a frozen client": "You can't create an order for a frozen client",
"This address doesn't exist": "This address doesn't exist", "This address doesn't exist": "This address doesn't exist",
"Warehouse cannot be blank": "Warehouse cannot be blank", "Warehouse cannot be blank": "Warehouse cannot be blank",
"Agency cannot be blank": "Agency cannot be blank", "Agency cannot be blank": "Agency cannot be blank",
"The IBAN does not have the correct format": "The IBAN does not have the correct format", "The IBAN does not have the correct format": "The IBAN does not have the correct format",
"You can't make changes on the basic data of an confirmed order or with rows": "You can't make changes on the basic data of an confirmed order or with rows", "You can't make changes on the basic data of an confirmed order or with rows": "You can't make changes on the basic data of an confirmed order or with rows",
"You can't create a ticket for an inactive client": "You can't create a ticket for an inactive client", "You can't create a ticket for an inactive client": "You can't create a ticket for an inactive client",
"Worker cannot be blank": "Worker cannot be blank", "Worker cannot be blank": "Worker cannot be blank",
"You must delete the claim id %d first": "You must delete the claim id %d first", "You must delete the claim id %d first": "You must delete the claim id %d first",
"You don't have enough privileges": "You don't have enough privileges", "You don't have enough privileges": "You don't have enough privileges",
"Tag value cannot be blank": "Tag value cannot be blank", "Tag value cannot be blank": "Tag value cannot be blank",
"A client with that Web User name already exists": "A client with that Web User name already exists", "A client with that Web User name already exists": "A client with that Web User name already exists",
"The warehouse can't be repeated": "The warehouse can't be repeated", "The warehouse can't be repeated": "The warehouse can't be repeated",
"Barcode must be unique": "Barcode must be unique", "Barcode must be unique": "Barcode must be unique",
"You don't have enough privileges to do that": "You don't have enough privileges to do that", "You don't have enough privileges to do that": "You don't have enough privileges to do that",
"You can't create a ticket for a frozen client": "You can't create a ticket for a frozen client", "You can't create a ticket for a frozen client": "You can't create a ticket for a frozen client",
"can't be blank": "can't be blank", "can't be blank": "can't be blank",
"Street cannot be empty": "Street cannot be empty", "Street cannot be empty": "Street cannot be empty",
"City cannot be empty": "City cannot be empty", "City cannot be empty": "City cannot be empty",
"EXTENSION_INVALID_FORMAT": "Invalid extension", "EXTENSION_INVALID_FORMAT": "Invalid extension",
"The secret can't be blank": "The secret can't be blank", "The secret can't be blank": "The secret can't be blank",
"Invalid TIN": "Invalid Tax number", "Invalid TIN": "Invalid Tax number",
"This ticket can't be invoiced": "This ticket can't be invoiced", "This ticket can't be invoiced": "This ticket can't be invoiced",
"The value should be a number": "The value should be a number", "The value should be a number": "The value should be a number",
"The current ticket can't be modified": "The current ticket can't be modified", "The current ticket can't be modified": "The current ticket can't be modified",
"Extension format is invalid": "Extension format is invalid", "Extension format is invalid": "Extension format is invalid",
"NO_ZONE_FOR_THIS_PARAMETERS": "NO_ZONE_FOR_THIS_PARAMETERS", "NO_ZONE_FOR_THIS_PARAMETERS": "NO_ZONE_FOR_THIS_PARAMETERS",
"This client can't be invoiced": "This client can't be invoiced", "This client can't be invoiced": "This client can't be invoiced",
"You must provide the correction information to generate a corrective invoice": "You must provide the correction information to generate a corrective invoice", "You must provide the correction information to generate a corrective invoice": "You must provide the correction information to generate a corrective invoice",
"The introduced hour already exists": "The introduced hour already exists", "The introduced hour already exists": "The introduced hour already exists",
"Invalid parameters to create a new ticket": "Invalid parameters to create a new ticket", "Invalid parameters to create a new ticket": "Invalid parameters to create a new ticket",
"Concept cannot be blank": "Concept cannot be blank", "Concept cannot be blank": "Concept cannot be blank",
"Ticket id cannot be blank": "Ticket id cannot be blank", "Ticket id cannot be blank": "Ticket id cannot be blank",
"Weekday cannot be blank": "Weekday cannot be blank", "Weekday cannot be blank": "Weekday cannot be blank",
"This ticket can not be modified": "This ticket can not be modified", "This ticket can not be modified": "This ticket can not be modified",
"You can't delete a confirmed order": "You can't delete a confirmed order", "You can't delete a confirmed order": "You can't delete a confirmed order",
"Value has an invalid format": "Value has an invalid format", "Value has an invalid format": "Value has an invalid format",
"The postcode doesn't exist. Please enter a correct one": "The postcode doesn't exist. Please enter a correct one", "The postcode doesn't exist. Please enter a correct one": "The postcode doesn't exist. Please enter a correct one",
"Swift / BIC can't be empty": "Swift / BIC can't be empty", "Swift / BIC can't be empty": "Swift / BIC can't be empty",
"Deleted sales from ticket": "I have deleted the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", "Deleted sales from ticket": "I have deleted the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
"Added sale to ticket": "I have added the following line to the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", "Added sale to ticket": "I have added the following line to the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
"Changed sale discount": "I have changed the following lines discounts from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", "Changed sale discount": "I have changed the following lines discounts from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
"Created claim": "I have created the claim [{{claimId}}]({{{claimUrl}}}) for the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", "Created claim": "I have created the claim [{{claimId}}]({{{claimUrl}}}) for the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
"Changed sale price": "I have changed the price of [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) from {{oldPrice}}€ ➔ *{{newPrice}}€* of the ticket [{{ticketId}}]({{{ticketUrl}}})", "Changed sale price": "I have changed the price of [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) from {{oldPrice}}€ ➔ *{{newPrice}}€* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
"Changed sale quantity": "I have changed the quantity of [{{itemId}} {{concept}}]({{{itemUrl}}}) from {{oldQuantity}} ➔ *{{newQuantity}}* of the ticket [{{ticketId}}]({{{ticketUrl}}})", "Changed sale quantity": "I have changed the quantity of [{{itemId}} {{concept}}]({{{itemUrl}}}) from {{oldQuantity}} ➔ *{{newQuantity}}* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
"Changed sale reserved state": "I have changed the following lines reserved state from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", "Changed sale reserved state": "I have changed the following lines reserved state from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
"Bought units from buy request": "Bought {{quantity}} units of [{{itemId}} {{concept}}]({{{urlItem}}}) for the ticket id [{{ticketId}}]({{{url}}})", "Bought units from buy request": "Bought {{quantity}} units of [{{itemId}} {{concept}}]({{{urlItem}}}) for the ticket id [{{ticketId}}]({{{url}}})",
"MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} ({{clientId}})]({{{url}}}) to *{{credit}} €*", "MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} ({{clientId}})]({{{url}}}) to *{{credit}} €*",
"Changed client paymethod": "I have changed the pay method for client [{{clientName}} ({{clientId}})]({{{url}}})", "Changed client paymethod": "I have changed the pay method for client [{{clientName}} ({{clientId}})]({{{url}}})",
"Sent units from ticket": "I sent *{{quantity}}* units of [{{concept}} ({{itemId}})]({{{itemUrl}}}) to *\"{{nickname}}\"* coming from ticket id [{{ticketId}}]({{{ticketUrl}}})", "Sent units from ticket": "I sent *{{quantity}}* units of [{{concept}} ({{itemId}})]({{{itemUrl}}}) to *\"{{nickname}}\"* coming from ticket id [{{ticketId}}]({{{ticketUrl}}})",
"Change quantity": "{{concept}} change of {{oldQuantity}} to {{newQuantity}}", "Change quantity": "{{concept}} change of {{oldQuantity}} to {{newQuantity}}",
"Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked, with the pickup type *{{claimPickup}}*", "Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked, with the pickup type *{{claimPickup}}*",
"Claim state has changed to": "The state of the claim [({{claimId}})]({{{claimUrl}}}) from client *{{clientName}}* has changed to *{{newState}}*", "Claim state has changed to": "The state of the claim [({{claimId}})]({{{claimUrl}}}) from client *{{clientName}}* has changed to *{{newState}}*",
"Customs agent is required for a non UEE member": "Customs agent is required for a non UEE member", "Customs agent is required for a non UEE member": "Customs agent is required for a non UEE member",
"Incoterms is required for a non UEE member": "Incoterms is required for a non UEE member", "Incoterms is required for a non UEE member": "Incoterms is required for a non UEE member",
"Client checked as validated despite of duplication": "Client checked as validated despite of duplication from client id {{clientId}}", "Client checked as validated despite of duplication": "Client checked as validated despite of duplication from client id {{clientId}}",
"Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment", "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
"NOT_ZONE_WITH_THIS_PARAMETERS": "There's no zone available for this day", "NOT_ZONE_WITH_THIS_PARAMETERS": "There's no zone available for this day",
"Created absence": "The worker <strong>{{author}}</strong> has added an absence of type '{{absenceType}}' to <a href='{{{workerUrl}}}'><strong>{{employee}}</strong></a> for day {{dated}}.", "Created absence": "The worker <strong>{{author}}</strong> has added an absence of type '{{absenceType}}' to <a href='{{{workerUrl}}}'><strong>{{employee}}</strong></a> for day {{dated}}.",
"Deleted absence": "The worker <strong>{{author}}</strong> has deleted an absence of type '{{absenceType}}' to <a href='{{{workerUrl}}}'><strong>{{employee}}</strong></a> for day {{dated}}.", "Deleted absence": "The worker <strong>{{author}}</strong> has deleted an absence of type '{{absenceType}}' to <a href='{{{workerUrl}}}'><strong>{{employee}}</strong></a> for day {{dated}}.",
"I have deleted the ticket id": "I have deleted the ticket id [{{id}}]({{{url}}})", "I have deleted the ticket id": "I have deleted the ticket id [{{id}}]({{{url}}})",
"I have restored the ticket id": "I have restored the ticket id [{{id}}]({{{url}}})", "I have restored the ticket id": "I have restored the ticket id [{{id}}]({{{url}}})",
"Changed this data from the ticket": "I have changed the data from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", "Changed this data from the ticket": "I have changed the data from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
"The grade must be similar to the last one": "The grade must be similar to the last one", "The grade must be similar to the last one": "The grade must be similar to the last one",
"agencyModeFk": "Agency", "agencyModeFk": "Agency",
"clientFk": "Client", "clientFk": "Client",
"zoneFk": "Zone", "zoneFk": "Zone",
"warehouseFk": "Warehouse", "warehouseFk": "Warehouse",
"shipped": "Shipped", "shipped": "Shipped",
"landed": "Landed", "landed": "Landed",
"addressFk": "Address", "addressFk": "Address",
"companyFk": "Company", "companyFk": "Company",
"agency": "Agency", "agency": "Agency",
"delivery": "Delivery", "delivery": "Delivery",
"You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data", "You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data",
"The social name cannot be empty": "The social name cannot be empty", "The social name cannot be empty": "The social name cannot be empty",
"The nif cannot be empty": "The nif cannot be empty", "The nif cannot be empty": "The nif cannot be empty",
"Amount cannot be zero": "Amount cannot be zero", "Amount cannot be zero": "Amount cannot be zero",
"Company has to be official": "Company has to be official", "Company has to be official": "Company has to be official",
"Unable to clone this travel": "Unable to clone this travel", "Unable to clone this travel": "Unable to clone this travel",
"The observation type can't be repeated": "The observation type can't be repeated", "The observation type can't be repeated": "The observation type can't be repeated",
"New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*", "New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*",
"New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*", "New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*",
"There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})", "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
"Swift / BIC cannot be empty": "Swift / BIC cannot be empty", "Swift / BIC cannot be empty": "Swift / BIC cannot be empty",
"Role name must be written in camelCase": "Role name must be written in camelCase", "Role name must be written in camelCase": "Role name must be written in camelCase",
"Client assignment has changed": "I did change the salesperson ~*\"<{{previousWorkerName}}>\"*~ by *\"<{{currentWorkerName}}>\"* from the client [{{clientName}} ({{clientId}})]({{{url}}})", "Client assignment has changed": "I did change the salesperson ~*\"<{{previousWorkerName}}>\"*~ by *\"<{{currentWorkerName}}>\"* from the client [{{clientName}} ({{clientId}})]({{{url}}})",
"None": "None", "None": "None",
"error densidad = 0": "error densidad = 0", "error densidad = 0": "error densidad = 0",
"This document already exists on this ticket": "This document already exists on this ticket", "This document already exists on this ticket": "This document already exists on this ticket",
"serial non editable": "This serial doesn't allow to set a reference", "serial non editable": "This serial doesn't allow to set a reference",
"nickname": "nickname", "nickname": "nickname",
"State": "State", "State": "State",
"regular": "regular", "regular": "regular",
"reserved": "reserved", "reserved": "reserved",
"Global invoicing failed": "[Global invoicing] Wasn't able to invoice some of the clients", "Global invoicing failed": "[Global invoicing] Wasn't able to invoice some of the clients",
"A ticket with a negative base can't be invoiced": "A ticket with a negative base can't be invoiced", "A ticket with a negative base can't be invoiced": "A ticket with a negative base can't be invoiced",
"This client is not invoiceable": "This client is not invoiceable", "This client is not invoiceable": "This client is not invoiceable",
"INACTIVE_PROVIDER": "Inactive provider", "INACTIVE_PROVIDER": "Inactive provider",
"reference duplicated": "reference duplicated", "reference duplicated": "reference duplicated",
"The PDF document does not exist": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option", "The PDF document does not exist": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option",
"This item is not available": "This item is not available", "This item is not available": "This item is not available",
"Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}", "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}",
"The type of business must be filled in basic data": "The type of business must be filled in basic data", "The type of business must be filled in basic data": "The type of business must be filled in basic data",
"The worker has hours recorded that day": "The worker has hours recorded that day", "The worker has hours recorded that day": "The worker has hours recorded that day",
"isWithoutNegatives": "isWithoutNegatives", "isWithoutNegatives": "isWithoutNegatives",
"routeFk": "routeFk", "routeFk": "routeFk",
"Not enough privileges to edit a client with verified data": "Not enough privileges to edit a client with verified data", "Not enough privileges to edit a client with verified data": "Not enough privileges to edit a client with verified data",
"Can't change the password of another worker": "Can't change the password of another worker", "Can't change the password of another worker": "Can't change the password of another worker",
"No hay un contrato en vigor": "There is no existing contract", "No hay un contrato en vigor": "There is no existing contract",
"No está permitido trabajar": "Not allowed to work", "No está permitido trabajar": "Not allowed to work",
"Dirección incorrecta": "Wrong direction", "Dirección incorrecta": "Wrong direction",
"No se permite fichar a futuro": "It is not allowed to sign in the future", "No se permite fichar a futuro": "It is not allowed to sign in the future",
"Descanso diario 12h.": "Daily rest 12h.", "Descanso diario 12h.": "Daily rest 12h.",
"Fichadas impares": "Odd signs", "Fichadas impares": "Odd signs",
"Descanso diario 9h.": "Daily rest 9h.", "Descanso diario 9h.": "Daily rest 9h.",
"Descanso semanal 36h. / 72h.": "Weekly rest 36h. / 72h.", "Descanso semanal 36h. / 72h.": "Weekly rest 36h. / 72h.",
"Verify email": "Verify email", "Verify email": "Verify email",
"Click on the following link to verify this email. If you haven't requested this email, just ignore it": "Click on the following link to verify this email. If you haven't requested this email, just ignore it", "Click on the following link to verify this email. If you haven't requested this email, just ignore it": "Click on the following link to verify this email. If you haven't requested this email, just ignore it",
"Password does not meet requirements": "Password does not meet requirements", "Password does not meet requirements": "Password does not meet requirements",
"You don't have privileges to change the zone": "You don't have privileges to change the zone or for these parameters there are more than one shipping options, talk to agencies", "You don't have privileges to change the zone": "You don't have privileges to change the zone or for these parameters there are more than one shipping options, talk to agencies",
"Not enough privileges to edit a client": "Not enough privileges to edit a client", "Not enough privileges to edit a client": "Not enough privileges to edit a client",
"Claim pickup order sent": "Claim pickup order sent [{{claimId}}]({{{claimUrl}}}) to client *{{clientName}}*", "Claim pickup order sent": "Claim pickup order sent [{{claimId}}]({{{claimUrl}}}) to client *{{clientName}}*",
"You don't have grant privilege": "You don't have grant privilege", "You don't have grant privilege": "You don't have grant privilege",
"You don't own the role and you can't assign it to another user": "You don't own the role and you can't assign it to another user", "You don't own the role and you can't assign it to another user": "You don't own the role and you can't assign it to another user",
"Email verify": "Email verify", "Email verify": "Email verify",
"Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) merged with [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) merged with [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
"App locked": "App locked by user {{userId}}", "App locked": "App locked by user {{userId}}",
"The sales of the receiver ticket can't be modified": "The sales of the receiver ticket can't be modified", "The sales of the receiver ticket can't be modified": "The sales of the receiver ticket can't be modified",
"Receipt's bank was not found": "Receipt's bank was not found", "Receipt's bank was not found": "Receipt's bank was not found",
"This receipt was not compensated": "This receipt was not compensated", "This receipt was not compensated": "This receipt was not compensated",
"Client's email was not found": "Client's email was not found", "Client's email was not found": "Client's email was not found",
"Tickets with associated refunds": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº %d", "Tickets with associated refunds": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº %d",
"It is not possible to modify tracked sales": "It is not possible to modify tracked sales", "It is not possible to modify tracked sales": "It is not possible to modify tracked sales",
"It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo", "It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo",
"It is not possible to modify cloned sales": "It is not possible to modify cloned sales", "It is not possible to modify cloned sales": "It is not possible to modify cloned sales",
"Warehouse inventory not set": "Almacén inventario no está establecido", "Warehouse inventory not set": "Almacén inventario no está establecido",
"Component cost not set": "Componente coste no está estabecido", "Component cost not set": "Componente coste no está estabecido",
"Description cannot be blank": "Description cannot be blank", "Description cannot be blank": "Description cannot be blank",
"company": "Company", "company": "Company",
"country": "Country", "country": "Country",
"clientId": "Id client", "clientId": "Id client",
"clientSocialName": "Client", "clientSocialName": "Client",
"amount": "Amount", "amount": "Amount",
"taxableBase": "Taxable base", "taxableBase": "Taxable base",
"ticketFk": "Id ticket", "ticketFk": "Id ticket",
"isActive": "Active", "isActive": "Active",
"hasToInvoice": "Invoice", "hasToInvoice": "Invoice",
"isTaxDataChecked": "Data checked", "isTaxDataChecked": "Data checked",
"comercialId": "Id Comercial", "comercialId": "Id Comercial",
"comercialName": "Comercial", "comercialName": "Comercial",
"Added observation": "Added observation", "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", "This ticket is already a refund": "This ticket is already a refund",
"A claim with that sale already exists": "A claim with that sale already exists", "A claim with that sale already exists": "A claim with that sale already exists",
"Pass expired": "The password has expired, change it from Salix", "Pass expired": "The password has expired, change it from Salix",
"Can't transfer claimed sales": "Can't transfer claimed sales", "Can't transfer claimed sales": "Can't transfer claimed sales",
"Invalid quantity": "Invalid quantity", "Invalid quantity": "Invalid quantity",
"Failed to upload delivery note": "Error to upload delivery note {{id}}", "Failed to upload delivery note": "Error to upload delivery note {{id}}",
"Mail not sent": "There has been an error sending the invoice to the client [{{clientId}}]({{{clientUrl}}}), please check the email address", "Mail not sent": "There has been an error sending the invoice to the client [{{clientId}}]({{{clientUrl}}}), please check the email address",
"The renew period has not been exceeded": "The renew period has not been exceeded", "The renew period has not been exceeded": "The renew period has not been exceeded",
"You can not use the same password": "You can not use the same password", "You can not use the same password": "You can not use the same password",
"Valid priorities": "Valid priorities: %d", "Valid priorities": "Valid priorities: %d",
"hasAnyNegativeBase": "Negative basis of tickets: {{ticketsIds}}", "hasAnyNegativeBase": "Negative basis of tickets: {{ticketsIds}}",
"hasAnyPositiveBase": "Positive basis of tickets: {{ticketsIds}}", "hasAnyPositiveBase": "Positive basis of tickets: {{ticketsIds}}",
"This ticket cannot be left empty.": "This ticket cannot be left empty. %s", "This ticket cannot be left empty.": "This ticket cannot be left empty. %s",
"Social name should be uppercase": "Social name should be uppercase", "Social name should be uppercase": "Social name should be uppercase",
"Street should be uppercase": "Street should be uppercase", "Street should be uppercase": "Street should be uppercase",
"You don't have enough privileges.": "You don't have enough privileges.", "You don't have enough privileges.": "You don't have enough privileges.",
"This ticket is locked": "This ticket is locked", "This ticket is locked": "This ticket is locked",
"This ticket is not editable.": "This ticket is not editable.", "This ticket is not editable.": "This ticket is not editable.",
"The ticket doesn't exist.": "The ticket doesn't exist.", "The ticket doesn't exist.": "The ticket doesn't exist.",
"The sales do not exists": "The sales do not exists", "The sales do not exists": "The sales do not exists",
"Ticket without Route": "Ticket without route", "Ticket without Route": "Ticket without route",
"Select a different client": "Select a different client", "Select a different client": "Select a different client",
"Fill all the fields": "Fill all the fields", "Fill all the fields": "Fill all the fields",
"Error while generating PDF": "Error while generating PDF", "Error while generating PDF": "Error while generating PDF",
"Can't invoice to future": "Can't invoice to future", "Can't invoice to future": "Can't invoice to future",
"This ticket is already invoiced": "This ticket is already invoiced", "This ticket is already invoiced": "This ticket is already invoiced",
"Negative basis of tickets: 23": "Negative basis of tickets: 23", "Negative basis of tickets: 23": "Negative basis of tickets: 23",
"Booking completed": "Booking complete", "Booking completed": "Booking complete",
"The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation", "The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets", "You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
"Bank entity must be specified": "Bank entity must be specified", "Bank entity must be specified": "Bank entity must be specified",
"Try again": "Try again", "Try again": "Try again",
"keepPrice": "keepPrice", "keepPrice": "keepPrice",
"Cannot past travels with entries": "Cannot past travels with entries", "Cannot past travels with entries": "Cannot past travels with entries",
"It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}", "It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}",
"Incorrect pin": "Incorrect pin.", "Incorrect pin": "Incorrect pin.",
"The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified", "The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
"Name should be uppercase": "Name should be uppercase", "Name should be uppercase": "Name should be uppercase",
"You cannot update these fields": "You cannot update these fields", "You cannot update these fields": "You cannot update these fields",
"CountryFK cannot be empty": "Country cannot be empty", "CountryFK cannot be empty": "Country cannot be empty",
"You are not allowed to modify the alias": "You are not allowed to modify the alias", "You are not allowed to modify the alias": "You are not allowed to modify the alias",
"You already have the mailAlias": "You already have the mailAlias", "You already have the mailAlias": "You already have the mailAlias",
"This machine is already in use.": "This machine is already in use.", "This machine is already in use.": "This machine is already in use.",
"the plate does not exist": "The plate {{plate}} does not exist", "the plate does not exist": "The plate {{plate}} does not exist",
"We do not have availability for the selected item": "We do not have availability for the selected item", "We do not have availability for the selected item": "We do not have availability for the selected item",
@ -223,6 +223,7 @@
"printerNotExists": "The printer does not exist", "printerNotExists": "The printer does not exist",
"There are not picking tickets": "There are not picking tickets", "There are not picking tickets": "There are not picking tickets",
"ticketCommercial": "The ticket {{ ticket }} for the salesperson {{ salesMan }} is in preparation. (automatically generated message)", "ticketCommercial": "The ticket {{ ticket }} for the salesperson {{ salesMan }} is in preparation. (automatically generated message)",
"This password can only be changed by the user themselves": "This password can only be changed by the user themselves", "This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
"They're not your subordinate": "They're not your subordinate" "They're not your subordinate": "They're not your subordinate",
} "InvoiceIn is already booked": "InvoiceIn is already booked"
}

View File

@ -35,7 +35,7 @@ module.exports = Self => {
path: '/:id/claim-pickup-pdf', path: '/:id/claim-pickup-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.claimPickupPdf = (ctx, id) => Self.printReport(ctx, id, 'claim-pickup-order'); Self.claimPickupPdf = (ctx, id) => Self.printReport(ctx, id, 'claim-pickup-order');

View File

@ -33,7 +33,7 @@ module.exports = Self => {
path: `/:id/downloadFile`, path: `/:id/downloadFile`,
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadFile = async function(ctx, id) { Self.downloadFile = async function(ctx, id) {

View File

@ -46,7 +46,7 @@ module.exports = Self => {
path: '/:id/campaign-metrics-pdf', path: '/:id/campaign-metrics-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'campaign-metrics'); Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'campaign-metrics');

View File

@ -34,7 +34,7 @@ module.exports = Self => {
path: '/:id/entry-order-pdf', path: '/:id/entry-order-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.entryOrderPdf = (ctx, id) => Self.printReport(ctx, id, 'entry-order'); Self.entryOrderPdf = (ctx, id) => Self.printReport(ctx, id, 'entry-order');

View File

@ -32,7 +32,7 @@ module.exports = Self => {
path: '/:id/download', path: '/:id/download',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.download = async function(ctx, id, options) { Self.download = async function(ctx, id, options) {

View File

@ -32,7 +32,7 @@ module.exports = Self => {
path: '/downloadZip', path: '/downloadZip',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadZip = async function(ctx, ids, options) { Self.downloadZip = async function(ctx, ids, options) {

View File

@ -35,7 +35,7 @@ module.exports = Self => {
path: '/:reference/exportation-pdf', path: '/:reference/exportation-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.exportationPdf = (ctx, reference) => Self.printReport(ctx, reference, 'exportation'); Self.exportationPdf = (ctx, reference) => Self.printReport(ctx, reference, 'exportation');

View File

@ -38,7 +38,7 @@ module.exports = Self => {
path: '/:reference/invoice-csv', path: '/:reference/invoice-csv',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.invoiceCsv = async reference => { Self.invoiceCsv = async reference => {

View File

@ -40,7 +40,7 @@ module.exports = Self => {
path: '/negativeBasesCsv', path: '/negativeBasesCsv',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.negativeBasesCsv = async(ctx, options) => { Self.negativeBasesCsv = async(ctx, options) => {

View File

@ -11,7 +11,7 @@ module.exports = Self => {
path: `/download`, path: `/download`,
verb: 'POST', verb: 'POST',
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.download = async() => { Self.download = async() => {

View File

@ -30,7 +30,7 @@ module.exports = Self => {
path: '/:id/cmr', path: '/:id/cmr',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.cmr = (ctx, id) => Self.printReport(ctx, id, 'cmr'); Self.cmr = (ctx, id) => Self.printReport(ctx, id, 'cmr');

View File

@ -30,7 +30,7 @@ module.exports = Self => {
path: '/downloadCmrsZip', path: '/downloadCmrsZip',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadCmrsZip = async function(ctx, ids, options) { Self.downloadCmrsZip = async function(ctx, ids, options) {

View File

@ -30,7 +30,7 @@ module.exports = Self => {
path: '/downloadZip', path: '/downloadZip',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadZip = async function(ctx, id, options) { Self.downloadZip = async function(ctx, id, options) {

View File

@ -35,7 +35,7 @@ module.exports = Self => {
path: '/:id/driver-route-pdf', path: '/:id/driver-route-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });

View File

@ -43,14 +43,15 @@ module.exports = Self => {
st.code ticketStateCode, st.code ticketStateCode,
st.name ticketStateName, st.name ticketStateName,
wh.name warehouseName, wh.name warehouseName,
tob.description ticketObservation, tob.description observationDelivery,
tob2.description observationDropOff,
tob2.id,
a.street, a.street,
a.postalCode, a.postalCode,
a.city, a.city,
am.name agencyModeName, am.name agencyModeName,
u.nickname userNickname, u.nickname userNickname,
vn.ticketTotalVolume(t.id) volume, vn.ticketTotalVolume(t.id) volume,
tob.description,
GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt, GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt,
c.phone clientPhone, c.phone clientPhone,
c.mobile clientMobile, c.mobile clientMobile,
@ -72,6 +73,9 @@ module.exports = Self => {
LEFT JOIN observationType ot ON ot.code = 'delivery' LEFT JOIN observationType ot ON ot.code = 'delivery'
LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id
AND tob.observationTypeFk = ot.id AND tob.observationTypeFk = ot.id
LEFT JOIN observationType ot2 ON ot2.code = 'dropOff'
LEFT JOIN ticketObservation tob2 ON tob2.ticketFk = t.id
AND tob2.observationTypeFk = ot2.id
LEFT JOIN address a ON a.id = t.addressFk LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN account.user u ON u.id = r.workerFk LEFT JOIN account.user u ON u.id = r.workerFk

View File

@ -45,7 +45,7 @@ module.exports = Self => {
path: '/:id/campaign-metrics-pdf', path: '/:id/campaign-metrics-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'supplier-campaign-metrics'); Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'supplier-campaign-metrics');

View File

@ -0,0 +1,42 @@
module.exports = Self => {
Self.remoteMethod('addDropOff', {
description: 'Add a dropOff note in a ticket',
accessType: 'WRITE',
accepts: [{
arg: 'ticketFk',
type: 'number',
required: true,
description: 'ticket ID'
}, {
arg: 'note',
type: 'string',
required: true,
description: 'note text'
}],
http: {
path: `/addDropOff`,
verb: 'post'
}
});
Self.addDropOff = async(ticketFk, note, options) => {
const models = Self.app.models;
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
const observationTypeDropOff = await models.ObservationType.findOne({
where: {code: 'dropOff'}
}, myOptions);
await models.TicketObservation.create({
ticketFk: ticketFk,
observationTypeFk: observationTypeDropOff.id,
description: note
}, myOptions);
};
};

View File

@ -0,0 +1,31 @@
const {models} = require('vn-loopback/server/server');
describe('ticketObservation addDropOff()', () => {
const ticketFk = 5;
const note = 'DropOff note';
const code = 'dropOff';
it('should return a dropOff note', async() => {
const tx = await models.TicketObservation.beginTransaction({});
try {
const options = {transaction: tx};
await models.TicketObservation.addDropOff(
ticketFk, note, options);
const observationTypeDropOff = await models.TicketObservation.find({
where: {
ticketFk,
code
}
}, options);
expect(observationTypeDropOff.length).toEqual(1);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});

View File

@ -38,7 +38,7 @@ module.exports = Self => {
path: '/:id/delivery-note-csv', path: '/:id/delivery-note-csv',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.deliveryNoteCsv = async id => { Self.deliveryNoteCsv = async id => {

View File

@ -42,7 +42,7 @@ module.exports = Self => {
path: '/:id/delivery-note-pdf', path: '/:id/delivery-note-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.deliveryNotePdf = (ctx, id) => Self.printReport(ctx, id, 'delivery-note'); Self.deliveryNotePdf = (ctx, id) => Self.printReport(ctx, id, 'delivery-note');

View File

@ -1,6 +1,7 @@
const UserError = require('vn-loopback/util/user-error'); const UserError = require('vn-loopback/util/user-error');
module.exports = Self => { module.exports = Self => {
require('../methods/ticket-observation/addDropOff')(Self);
Self.rewriteDbError(function(err) { Self.rewriteDbError(function(err) {
if (err.code === 'ER_DUP_ENTRY') if (err.code === 'ER_DUP_ENTRY')
return new UserError(`The observation type can't be repeated`); return new UserError(`The observation type can't be repeated`);

View File

@ -79,7 +79,7 @@ module.exports = Self => {
path: '/extra-community-pdf', path: '/extra-community-pdf',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.extraCommunityPdf = ctx => Self.printReport(ctx, null, 'extra-community'); Self.extraCommunityPdf = ctx => Self.printReport(ctx, null, 'extra-community');

View File

@ -30,7 +30,7 @@ module.exports = Self => {
path: `/:id/downloadFile`, path: `/:id/downloadFile`,
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadFile = async function(ctx, id) { Self.downloadFile = async function(ctx, id) {

View File

@ -99,7 +99,7 @@
{ {
"relation": "user", "relation": "user",
"scope": { "scope": {
"fields": ["email", "name", "nickname", "roleFk"], "fields": ["email", "name", "nickname", "roleFk", "emailVerified"],
"include": [ "include": [
{ {
"relation": "role", "relation": "role",
@ -127,7 +127,7 @@
}, { }, {
"relation": "client", "relation": "client",
"scope": { "scope": {
"fields": [ "fields": [
"id", "id",
"name", "name",
"fi", "fi",

View File

@ -15,7 +15,6 @@ schemas:
- hedera - hedera
- pbx - pbx
- psico - psico
- rfid
- sage - sage
- salix - salix
- srt - srt