Puede acceder al detalle de los albaranes haciendo click sobre el número de Ticket',
- '
Muchas gracias por su confianza
',
- '
');
-
- -- Envío del email
- IF emptyList = 0 THEN
-
- SELECT CONCAT(`e-mail`,',pako@verdnatura.es') INTO MyMailTo
- FROM Clientes
- WHERE Id_Cliente = v_Client_Id AND `e-mail`>'';
-
- IF v_Client_Id = 7818 THEN -- LOEWE
- SET MyMailTo = 'isabel@elisabethblumen.com,emunozca@loewe.es,pako@verdnatura.es';
- END IF;
-
- CALL vn.mail_insert(
- IFNULL(MyMailTo,'pako.natek@gmail.com'),
- 'pako@verdnatura.es',
- 'Resumen de pedidos preparados',
- txt
- );
-
- END IF;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `emailYesterdayPurchasesLauncher` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `emailYesterdayPurchasesLauncher`()
-BEGIN
-
-DECLARE done INT DEFAULT 0;
-DECLARE vMyClientId INT;
-
-DECLARE rs CURSOR FOR
-SELECT Id_Cliente
-FROM Clientes
-WHERE EYPBC != 0;
-
-DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-
-OPEN rs;
-
-FETCH rs INTO vMyClientId;
-
-WHILE NOT done DO
-
- CALL emailYesterdayPurchasesByConsigna(util.yesterday(), vMyClientId);
-
- FETCH rs INTO vMyClientId;
-
-END WHILE;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `embalajes_stocks` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `embalajes_stocks`(IN idPEOPLE INT, IN bolCLIENT BOOLEAN)
-BEGIN
-
-if bolCLIENT then
-
- select m.Id_Article, Article, - cast(sum(m.Cantidad) as decimal) as Saldo
- from Movimientos m
- join Articles a on m.Id_Article = a.Id_Article
- join Tipos tp on tp.tipo_id = a.tipo_id
- join Tickets t using(Id_Ticket)
- join Consignatarios cs using(Id_Consigna)
- where cs.Id_Cliente = idPEOPLE
- and Tipo = 'Contenedores'
- and t.Fecha > '2010-01-01'
- group by m.Id_Article;
-
-else
-
-select Id_Article, Article, sum(Cantidad) as Saldo
-from
-(select Id_Article, Cantidad
-from Compres c
-join Articles a using(Id_Article)
-join Tipos tp using(tipo_id)
-join Entradas e using(Id_Entrada)
-join travel tr on tr.id = travel_id
-where Id_Proveedor = idPEOPLE
-and landing >= '2010-01-01'
-and reino_id = 6
-
-union all
-
-select Id_Article, - Cantidad
-from Movimientos m
-join Articles a using(Id_Article)
-join Tipos tp using(tipo_id)
-join Tickets t using(Id_Ticket)
-join Consignatarios cs using(Id_Consigna)
-join proveedores_clientes pc on pc.Id_Cliente = cs.Id_Cliente
-where Id_Proveedor = idPEOPLE
-and reino_id = 6
-and t.Fecha > '2010-01-01') mov
-
-join Articles a using(Id_Article)
-group by Id_Article;
-
-end if;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `embalajes_stocks_detalle` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `embalajes_stocks_detalle`(IN idPEOPLE INT, IN idARTICLE INT, IN bolCLIENT BOOLEAN)
-BEGIN
-
-
-if bolCLIENT then
-
- select m.Id_Article
- , Article
- , IF(Cantidad < 0, - Cantidad, NULL) as Entrada
- , IF(Cantidad < 0, NULL, Cantidad) as Salida
- , 'T' as Tabla
- , t.Id_Ticket as Registro
- , t.Fecha
- , w.name as Almacen
- , cast(Preu as Decimal(5,2)) Precio
- , c.Cliente as Proveedor
- , abbreviation as Empresa
- from Movimientos m
- join Articles a using(Id_Article)
- join Tickets t using(Id_Ticket)
- join empresa e on e.id = t.empresa_id
- join warehouse w on w.id = t.warehouse_id
- join Consignatarios cs using(Id_Consigna)
- join Clientes c on c.Id_Cliente = cs.Id_Cliente
- where cs.Id_Cliente = idPEOPLE
- and m.Id_Article = idARTICLE
- and t.Fecha > '2010-01-01';
-
-else
-
-select Id_Article, Tabla, Registro, Fecha, Article
-, w.name as Almacen, Entrada, Salida, Proveedor, cast(Precio as Decimal(5,2)) Precio
-
-from
-
-(select Id_Article
- , IF(Cantidad > 0, Cantidad, NULL) as Entrada
- , IF(Cantidad > 0, NULL,- Cantidad) as Salida
- , 'E' as Tabla
- , Id_Entrada as Registro
- , landing as Fecha
- , tr.warehouse_id
- , Costefijo as Precio
-from Compres c
-join Entradas e using(Id_Entrada)
-join travel tr on tr.id = travel_id
-where Id_Proveedor = idPEOPLE
-and Id_Article = idARTICLE
-and landing >= '2010-01-01'
-
-union all
-
-select Id_Article
- , IF(Cantidad < 0, - Cantidad, NULL) as Entrada
- , IF(Cantidad < 0, NULL, Cantidad) as Salida
- , 'T'
- , Id_Ticket
- , Fecha
- , t.warehouse_id
- , Preu
-from Movimientos m
-join Tickets t using(Id_Ticket)
-join Consignatarios cs using(Id_Consigna)
-join proveedores_clientes pc on pc.Id_Cliente = cs.Id_Cliente
-where Id_Proveedor = idPEOPLE
-and Id_Article = idARTICLE
-and t.Fecha > '2010-01-01') mov
-
-join Articles a using(Id_Article)
-join Proveedores p on Id_Proveedor = idPEOPLE
-join warehouse w on w.id = mov.warehouse_id
-;
-
-end if;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `historico_absoluto` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `historico_absoluto`(IN idART INT, IN wh INT, IN datfecha DATETIME)
-BEGIN
-
- DECLARE inv_calculado INT;
- DECLARE inv INT;
- DECLARE today DATETIME;
- DECLARE fecha_inv DATETIME;
-
- SET today = util.VN_CURDATE();
-
- CREATE OR REPLACE TEMPORARY TABLE historico_pasado
- SELECT *
- FROM (
- SELECT TR.landing Fecha,
- C.Cantidad Entrada,
- NULL Salida,
- (TR.received != FALSE) OK,
- P.Proveedor Alias,
- E.Referencia Referencia,
- E.Id_Entrada id,
- TR.delivered F5
- FROM Compres C -- mirar perque no entra en received
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- INNER JOIN Proveedores P USING (Id_Proveedor)
- WHERE TR.landing >= '2001-01-01'
- AND Id_proveedor <> 4
- AND wh IN (TR.warehouse_id , 0)
- AND C.Id_Article = idART
- AND E.Inventario = 0
- AND E.Redada = 0
- UNION ALL
- SELECT TR.shipment Fecha,
- NULL Entrada,
- C.Cantidad Salida,
- TR.delivered OK,
- P.Proveedor Alias,
- E.Referencia Referencia,
- E.Id_Entrada id,
- TR.delivered F5
- FROM Compres C
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- INNER JOIN Proveedores P USING (Id_Proveedor)
- WHERE TR.shipment >= '2001-01-01'
- AND wh = TR.warehouse_id_out
- AND Id_Proveedor <> 4
- AND C.Id_Article = idART
- AND E.Inventario = 0
- AND E.Redada = 0
- UNION ALL
- SELECT T.Fecha Fecha,
- NULL Entrada,
- M.Cantidad Salida,
- (M.OK <> 0 OR T.Etiquetasemitidas <> 0 OR T.Factura IS NOT NULL) OK,
- T.Alias Alias,
- T.Factura Referencia,
- T.Id_Ticket,
- T.PedidoImpreso
- FROM Movimientos M
- INNER JOIN Tickets T USING (Id_Ticket)
- JOIN Clientes C ON C.Id_Cliente = T.Id_Cliente
- WHERE T.Fecha >= '2001-01-01'
- AND M.Id_Article = idART
- AND wh IN (T.warehouse_id , 0)
- ) t1
- ORDER BY Fecha, Entrada DESC, OK DESC;
-
- SELECT sum(Entrada) - sum(Salida) INTO inv_calculado
- FROM historico_pasado
- WHERE Fecha < datfecha;
-
- SELECT p1.*, NULL v_virtual
- FROM(
- SELECT datfecha Fecha,
- inv_calculado Entrada,
- NULL Salida,
- 1 OK,
- 'Inventario calculado' Alias,
- '' Referencia, 0 id,
- 1 F5
- UNION ALL
- SELECT *
- FROM historico_pasado
- WHERE Fecha >= datfecha
- ) p1;
-
- DROP TEMPORARY TABLE historico_pasado;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `historico_multiple` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `historico_multiple`(IN vItemFk INT)
-BEGIN
-
- DECLARE vDateInventory DATETIME;
-
- SELECT Fechainventario INTO vDateInventory FROM tblContadores;
-
- SET @a = 0;
-
- DROP TEMPORARY TABLE IF EXISTS hm1;
-
- CREATE TEMPORARY TABLE hm1
- SELECT DATE(Fecha) as Fecha,
- Entrada,
- Salida,
- OK,
- Referencia,
- Historia.id,
-
- wh,
-
- `name` as wh_name
-
- FROM
-
- ( SELECT TR.landing as Fecha,
- C.Cantidad as Entrada,
- NULL as Salida,
-
- IF(warehouse_id = 44, 1, warehouse_id) as wh,
- (TR.received != FALSE) as OK,
- E.Referencia as Referencia,
- E.Id_Entrada as id
-
-
-
- FROM Compres C
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- WHERE TR.landing >= vDateInventory
- AND C.Id_Article = vItemFk
- AND E.Redada = 0
-
- AND C.Cantidad <> 0
-
- UNION ALL
-
- SELECT TR.shipment as Fecha,
- NULL as Entrada,
- C.Cantidad as Salida,
- warehouse_id_out as wh,
- TR.delivered as OK,
- E.Referencia as Referencia,
- E.Id_Entrada as id
-
- FROM Compres C
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- WHERE TR.shipment >= vDateInventory
- AND C.Id_Article = vItemFk
-
- AND E.Redada = 0
-
- AND C.Cantidad <> 0
-
- UNION ALL
-
- SELECT T.Fecha as Fecha,
- NULL as Entrada,
- M.Cantidad as Salida,
- warehouse_id as wh,
- (M.OK <> 0 OR T.Etiquetasemitidas <> 0 OR T.Factura IS NOT NULL) as OK,
- T.Factura as Referencia,
- T.Id_Ticket as id
-
- FROM Movimientos M
- INNER JOIN Tickets T USING (Id_Ticket)
- WHERE T.Fecha >= vDateInventory
- AND M.Id_Article = vItemFk
-
- ) AS Historia
-
- INNER JOIN warehouse ON warehouse.id = Historia.wh
- ORDER BY Fecha, Entrada DESC, OK DESC;
-
-
- DROP TEMPORARY TABLE IF EXISTS hm2;
- DROP TEMPORARY TABLE IF EXISTS hm3;
- DROP TEMPORARY TABLE IF EXISTS hm4;
- DROP TEMPORARY TABLE IF EXISTS hm5;
- DROP TEMPORARY TABLE IF EXISTS hm6;
- DROP TEMPORARY TABLE IF EXISTS hm7;
- DROP TEMPORARY TABLE IF EXISTS hm8;
- CREATE TEMPORARY TABLE hm2 SELECT * FROM hm1 WHERE wh = 19;
- CREATE TEMPORARY TABLE hm3 SELECT * FROM hm1 WHERE wh = 7;
- CREATE TEMPORARY TABLE hm4 SELECT * FROM hm1 WHERE wh = 60;
- CREATE TEMPORARY TABLE hm5 SELECT * FROM hm1 WHERE wh = 5;
- CREATE TEMPORARY TABLE hm6 SELECT * FROM hm1 WHERE wh = 17;
- CREATE TEMPORARY TABLE hm7 SELECT * FROM hm1 WHERE wh = 37;
- CREATE TEMPORARY TABLE hm8 SELECT * FROM hm1 WHERE wh = 55;
-
- SELECT * FROM
-
- (
-
- SELECT Fecha, Entrada as BOGEntrada, Salida as BOGSalida, OK as BOGOK, Referencia as BOGReferencia, id as BOGid,
-
- NULL AS VNHEntrada, NULL AS VNHSalida, NULL AS VNHOK, NULL AS VNHReferencia, NULL AS VNHid,
-
- NULL AS ALGEntrada, NULL AS ALGSalida, NULL AS ALGOK, NULL AS ALGReferencia, NULL AS ALGid,
-
- NULL AS MADEntrada, NULL AS MADSalida, NULL AS MADOK, NULL AS MADReferencia, NULL AS MADid,
-
- NULL AS MCFEntrada, NULL AS MCFSalida, NULL AS MCFOK, NULL AS MCFReferencia, NULL AS MCFid,
-
- NULL AS VILEntrada, NULL AS VILSalida, NULL AS VILOK, NULL AS VILReferencia, NULL AS VILid,
-
- NULL AS BAREntrada, NULL AS BARSalida, NULL AS BAROK, NULL AS BARReferencia, NULL AS BARid
-
- FROM hm2
-
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- ,Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm3
-
-
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm4
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm5
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm6
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
-
-
- FROM hm7
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
-
- FROM hm8
-
- ) sub
-
- ORDER BY Fecha, BOGEntrada IS NULL, VNHEntrada IS NULL, ALGEntrada IS NULL, MADEntrada IS NULL, MCFEntrada IS NULL, VILEntrada IS NULL, BAREntrada IS NULL;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `ListaTicketsEncajados` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ListaTicketsEncajados`(IN intId_Trabajador int)
-BEGIN
-
-SELECT Agencia,
- Consignatario,
- ti.Id_Ticket,
- ts.userFk Id_Trabajador,
- IFNULL(ncajas,0) AS ncajas,
- IFNULL(nbultos,0) AS nbultos,
- IFNULL(notros,0) AS notros,
- ts.code AS Estado
- FROM Tickets ti
- INNER JOIN Consignatarios ON ti.Id_Consigna = Consignatarios.Id_consigna
- INNER JOIN Agencias ON ti.Id_Agencia = Agencias.Id_Agencia
- LEFT JOIN (SELECT ticketFk,count(*) AS ncajas FROM vn.expedition WHERE packagingFk=94 GROUP BY ticketFk) sub1 ON ti.Id_Ticket=sub1.ticketFk
- LEFT JOIN (SELECT ticketFk,count(*) AS nbultos FROM vn.expedition WHERE packagingFk IS NULL GROUP BY ticketFk) sub2 ON ti.Id_Ticket=sub2.ticketFk
- LEFT JOIN (SELECT ticketFk,count(*) AS notros FROM vn.expedition WHERE packagingFk >0 GROUP BY ticketFk) sub3 ON ti.Id_Ticket=sub3.ticketFk
- INNER JOIN vn.ticketState ts ON ti.Id_ticket = ts.ticketFk
- WHERE ti.Fecha=util.VN_CURDATE() AND
- ts.userFk=intId_Trabajador
- GROUP BY ti.Id_Ticket;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `nest_child_add` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `nest_child_add`(
- vTable VARCHAR(45)
- ,vChild VARCHAR(45)
- ,vFatherId INT
-)
-BEGIN
- DECLARE vMyLeft INT;
-
- SET vTable = util.quoteIdentifier(vTable);
-
- DROP TEMPORARY TABLE IF EXISTS aux;
- CREATE TEMPORARY TABLE aux
- SELECT 0 as lft;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE aux
- SET lft = (SELECT lft
- FROM ', vTable,
- ' WHERE id = ?)')
- USING vFatherId;
-
- SELECT lft INTO vMyLeft FROM aux;
- DROP TEMPORARY TABLE aux;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable, '
- SET rgt = rgt + 2
- WHERE rgt > ?
- ORDER BY rgt DESC')
- USING vMyLeft;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable, '
- SET lft = lft + 2
- WHERE lft > ?
- ORDER BY lft DESC')
- USING vMyLeft;
-
- EXECUTE IMMEDIATE CONCAT(
- 'INSERT INTO ', vTable, ' (name, lft, rgt)
- VALUES(?, ? + 1, ? + 2)')
- USING vChild,
- vMyLeft,
- vMyLeft;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `nest_delete` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `nest_delete`(
- vTable VARCHAR(45)
- ,vNodeId INT
-)
-BEGIN
- DECLARE vMyRight INT;
- DECLARE vMyLeft INT;
- DECLARE vMyWidth INT;
-
- DROP TEMPORARY TABLE IF EXISTS aux;
- CREATE TEMPORARY TABLE aux
- SELECT 0 rgt, 0 lft, 0 wdt;
-
- SET vTable = util.quoteIdentifier(vTable);
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE aux a
- JOIN ', vTable, ' t
- SET a.rgt = t.rgt,
- a.lft = t.lft,
- a.wdt = t.rgt - t.lft + 1
- WHERE t.id = ?')
- USING vNodeId;
-
- SELECT rgt, lft, wdt
- INTO vMyRight, vMyLeft, vMyWidth
- FROM aux;
-
- DROP TEMPORARY TABLE aux;
-
- EXECUTE IMMEDIATE CONCAT(
- 'DELETE FROM ', vTable,
- ' WHERE lft BETWEEN ? AND ?')
- USING vMyLeft, vMyRight;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- ' SET rgt = rgt - ?
- WHERE rgt > ?
- ORDER BY rgt')
- USING vMyWidth,vMyRight;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- ' SET lft = lft - ?
- WHERE lft > ?
- ORDER BY lft')
- USING vMyWidth, vMyRight;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `nest_move` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `nest_move`(
- vTable VARCHAR(45)
- ,idNODE INT
- ,idFATHER INT
-)
-BEGIN
- DECLARE myRight INT;
- DECLARE myLeft INT;
- DECLARE myWidth INT;
- DECLARE fatherRight INT;
- DECLARE fatherLeft INT;
- DECLARE gap INT;
-
- SET vTable = util.quoteIdentifier(vTable);
-
- DROP TEMPORARY TABLE IF EXISTS aux;
- CREATE TEMPORARY TABLE aux
- SELECT 0 as rgt, 0 as lft, 0 as wdt, 0 as frg, 0 as flf;
-
- -- Averiguamos el ancho de la rama
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE aux a
- JOIN ', vTable, ' t
- SET a.wdt = t.rgt - t.lft + 1
- WHERE t.id = ?')
- USING idNODE;
-
- -- Averiguamos la posicion del nuevo padre
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE aux a
- JOIN ', vTable, ' t
- SET a.frg = t.rgt,
- a.flf = t.lft
- WHERE t.id = ?')
- USING idFATHER;
-
- SELECT wdt, frg, flf INTO myWidth, fatherRight, fatherLeft
- FROM aux;
-
- -- 1º Incrementamos los valores de todos los nodos a la derecha del punto de inserción (fatherRight) , para hacer sitio
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- 'SET rgt = rgt + ?
- WHERE rgt >= ?
- ORDER BY rgt DESC')
- USING myWidth,
- fatherRight;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- 'SET lft = lft + ?
- WHERE lft >= ?
- ORDER BY lft DESC')
- USING myWidth,
- fatherRight;
-
- -- Es preciso recalcular los valores del nodo en el caso de que estuviera a la derecha del nuevo padre
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE aux a
- JOIN ', vTable, ' t
- SET a.rgt = t.rgt,
- a.lft = t.lft
- WHERE t.id = ?')
- USING idNODE;
-
- SELECT lft, rgt, frg - lft INTO myLeft, myRight, gap
- FROM aux;
-
- -- 2º Incrementamos el valor de todos los nodos a trasladar hasta alcanzar su nueva posicion
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- 'SET lft = lft + ?
- WHERE lft BETWEEN ? AND ?
- ORDER BY lft DESC')
- USING gap,
- myLeft,
- myRight;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- 'SET rgt = rgt + ?
- WHERE rgt BETWEEN ? AND ?
- ORDER BY rgt DESC')
- USING gap,
- myLeft,
- myRight;
-
- -- 3º Restaremos a todos los nodos resultantes, a la derecha de la posicion arrancada el ancho de la rama escindida
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- 'SET lft = lft - ?
- WHERE lft > ?
- ORDER BY lft')
- USING myWidth,
- myLeft;
-
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE ', vTable,
- 'SET rgt = rgt - ?
- WHERE rgt > ?
- ORDER BY rgt')
- USING myWidth,
- myRight;
-
- DROP TEMPORARY TABLE aux;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `pay` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `pay`(IN datFEC DATE
- , IN idPROV INT
- , IN dblIMPORTE DOUBLE
- , IN idMONEDA INT
- , IN dblDIVISA DOUBLE
- , IN idCAJA INT
- , IN idPAYMET INT
- , IN dblGASTOS DOUBLE
- , IN strCONCEPTO VARCHAR(40)
- , IN idEMP INT)
-BEGIN
-
- -- Registro en la tabla Cajas
- INSERT INTO Cajas ( Concepto
- , Serie
- , Numero
- , Salida
- , Cajafecha
- , Partida
- , Id_Banco
- , Id_Trabajador
- ,empresa_id
- ,conciliado)
-
- SELECT CONCAT('n/pago a ', Proveedor)
- , 'R'
- , idPROV
- , dblIMPORTE
- , datFEC
- , 1
- , idCAJA
- , account.myUser_getId()
- , idEMP
- , 1
- FROM Proveedores
- WHERE Id_Proveedor = idPROV;
-
- -- Registro en la tabla pago
- INSERT INTO pago(fecha
- , dueDated
- , id_proveedor
- , importe
- , id_moneda
- , divisa
- , id_banco
- , pay_met_id
- , g_bancarios
- , concepte
- , empresa_id)
-
- VALUES(datFEC
- , datFEC
- , idPROV
- , dblIMPORTE
- , idMONEDA
- , IF(dblDIVISA = 0, NULL, dblDIVISA)
- , idCAJA
- , idPAYMET
- , dblGASTOS
- , strCONCEPTO
- , idEMP);
-
- SELECT LAST_INSERT_ID() as pago_id;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `preOrdenarRuta` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `preOrdenarRuta`(IN vRutaId INT)
-BEGIN
-/* Usa los valores del ultimo año para adivinar el orden de los tickets en la ruta
- * vRutaId id ruta
- * DEPRECATED use vn.routeGressPriority
-*/
-
-UPDATE Tickets mt
-JOIN (
- SELECT tt.Id_Consigna, round(ifnull(avg(t.Prioridad),0),0) as Prioridad
- from Tickets t
- JOIN Tickets tt on tt.Id_Consigna = t.Id_Consigna
- where t.Fecha > TIMESTAMPADD(YEAR,-1,util.VN_CURDATE())
- AND tt.Id_Ruta = vRutaId
- GROUP BY Id_Consigna
- ) sub ON sub.Id_Consigna = mt.Id_Consigna
- SET mt.Prioridad = sub.Prioridad
- WHERE mt.Id_Ruta = vRutaId;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `prepare_ticket_list` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `prepare_ticket_list`(vStartingDate DATETIME, vEndingDate DATETIME)
-BEGIN
- DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
- CREATE TEMPORARY TABLE tmp.ticket_list
- (PRIMARY KEY (Id_Ticket))
- ENGINE = MEMORY
- SELECT t.Id_Ticket, c.Id_Cliente
- FROM Tickets t
- LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.Id_Ticket
- JOIN Clientes c ON c.Id_Cliente = t.Id_Cliente
- WHERE c.typeFk IN ('normal','handMaking','internalUse')
- AND (
- Fecha BETWEEN util.today() AND vEndingDate
- OR (
- ts.alertLevel < 3
- AND t.Fecha >= vStartingDate
- AND t.Fecha < util.today()
- )
- );
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `raidUpdate` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -86086,58 +85753,6 @@ BEGIN
AND bi
GROUP BY t.year, t.month;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `recibidaIvaInsert` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `recibidaIvaInsert`(IN vId INT)
-BEGIN
-
- DECLARE vRate DOUBLE DEFAULT 1;
- DECLARE vDated DATE;
-
- SELECT MAX(rr.date) INTO vDated
- FROM reference_rate rr
- JOIN recibida r ON r.id = vId
- WHERE rr.date <= r.fecha
- AND rr.moneda_id = r.moneda_id ;
-
- IF vDated THEN
-
- SELECT rate INTO vRate
- FROM reference_rate
- WHERE `date` = vDated;
- END IF;
-
- DELETE FROM recibida_iva WHERE recibida_id = vId;
-
- INSERT INTO recibida_iva(recibida_id, bi, gastos_id, divisa, taxTypeSageFk, transactionTypeSageFk)
- SELECT r.id,
- SUM(Costefijo * Cantidad) / IFNULL(vRate,1) bi,
- 6003000000,
- IF(r.moneda_id = 1,NULL,SUM(Costefijo * Cantidad )) divisa,
- taxTypeSageFk,
- transactionTypeSageFk
- FROM recibida r
- JOIN Entradas e ON e.recibida_id = r.id
- JOIN Proveedores p ON p.Id_Proveedor = e.Id_Proveedor
- JOIN Compres c ON c.Id_Entrada = e.Id_Entrada
- LEFT JOIN reference_rate rr ON rr.moneda_id = r.moneda_id AND rr.date = r.fecha
- WHERE r.id = vId
- HAVING bi IS NOT NULL;
-
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -86299,109 +85914,6 @@ 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 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `unary_leaves` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `unary_leaves`(v_top INT)
-BEGIN
-/**
- * A partir de un nodo devuelve todos sus descendientes.
- *
- * @table tmp.tree Tabla con los ids de los nodos descendientes;
- **/
- DECLARE v_count INT;
- DECLARE v_parent INT;
- DECLARE v_depth INT DEFAULT 0;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.tree;
- CREATE TEMPORARY TABLE tmp.tree
- (INDEX (id))
- ENGINE = MEMORY
- SELECT v_top id, v_parent parent, v_depth depth;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.parent;
- CREATE TEMPORARY TABLE tmp.parent
- ENGINE = MEMORY
- SELECT v_top id;
-
- l: LOOP
-
- SET v_depth = v_depth + 1;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.child;
- CREATE TEMPORARY TABLE tmp.child
- ENGINE = MEMORY
- SELECT c.`id`, c.parent
- FROM `unary` c
- JOIN tmp.parent p ON c.`parent` = p.id;
-
- DROP TEMPORARY TABLE tmp.parent;
- CREATE TEMPORARY TABLE tmp.parent
- ENGINE = MEMORY
- SELECT c.id, c.parent
- FROM tmp.child c
- LEFT JOIN tmp.tree t ON t.id = c.id
- WHERE t.id IS NULL;
-
- INSERT INTO tmp.tree
- SELECT id, parent, v_depth FROM tmp.parent;
-
- SELECT COUNT(*) INTO v_count
- FROM tmp.parent;
-
- IF v_count = 0 THEN
- LEAVE l;
- END IF;
- END LOOP;
-
- DROP TEMPORARY TABLE
- tmp.parent,
- tmp.child;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `unary_tops` */;
-/*!50003 SET @saved_cs_client = @@character_set_client */ ;
-/*!50003 SET @saved_cs_results = @@character_set_results */ ;
-/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb4 */ ;
-/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
-DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `unary_tops`()
-BEGIN
-/**
- * Devuelve todos los nodos que no tienen padre.
- *
- * @table tmp.tree Tabla con los ids de los nodos que no tienen padre;
- **/
-
- DROP TEMPORARY TABLE IF EXISTS tmp.tree;
- CREATE TEMPORARY TABLE tmp.tree
- ENGINE = MEMORY
- SELECT s.`unary_id` AS id, s.name, s.odbc_date, s.type
- FROM `unary_scan` s
- INNER JOIN `unary` u ON s.unary_id = u.id
- WHERE u.parent IS NULL;
-
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
--
-- Current Database: `account`
@@ -86668,24 +86180,6 @@ USE `bi`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
---
--- Final view structure for view `v_clientes_jerarquia`
---
-
-/*!50001 DROP VIEW IF EXISTS `v_clientes_jerarquia`*/;
-/*!50001 SET @saved_cs_client = @@character_set_client */;
-/*!50001 SET @saved_cs_results = @@character_set_results */;
-/*!50001 SET @saved_col_connection = @@collation_connection */;
-/*!50001 SET character_set_client = utf8mb4 */;
-/*!50001 SET character_set_results = utf8mb4 */;
-/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
-/*!50001 CREATE ALGORITHM=UNDEFINED */
-/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `v_clientes_jerarquia` AS select `c`.`id_cliente` AS `Id_Cliente`,`c`.`cliente` AS `Cliente`,`t`.`CodigoTrabajador` AS `Comercial`,`tj`.`CodigoTrabajador` AS `Jefe` from (((`vn2008`.`Clientes` `c` join `vn2008`.`Trabajadores` `t` on(`t`.`Id_Trabajador` = `c`.`Id_Trabajador`)) join `vn2008`.`jerarquia` on(`vn2008`.`jerarquia`.`worker_id` = `c`.`Id_Trabajador`)) join `vn2008`.`Trabajadores` `tj` on(`tj`.`Id_Trabajador` = `vn2008`.`jerarquia`.`boss_id`)) */;
-/*!50001 SET character_set_client = @saved_cs_client */;
-/*!50001 SET character_set_results = @saved_cs_results */;
-/*!50001 SET collation_connection = @saved_col_connection */;
-
--
-- Final view structure for view `v_ventas_contables`
--
@@ -86962,6 +86456,12 @@ USE `edi`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
+--
+-- Current Database: `floranet`
+--
+
+USE `floranet`;
+
--
-- Current Database: `hedera`
--
@@ -87844,24 +87344,6 @@ USE `vn`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
---
--- Final view structure for view `bank`
---
-
-/*!50001 DROP VIEW IF EXISTS `bank`*/;
-/*!50001 SET @saved_cs_client = @@character_set_client */;
-/*!50001 SET @saved_cs_results = @@character_set_results */;
-/*!50001 SET @saved_col_connection = @@collation_connection */;
-/*!50001 SET character_set_client = utf8mb4 */;
-/*!50001 SET character_set_results = utf8mb4 */;
-/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
-/*!50001 CREATE ALGORITHM=UNDEFINED */
-/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `bank` AS select `a`.`id` AS `id`,`a`.`bank` AS `bank`,`a`.`account` AS `account`,`a`.`accountingTypeFk` AS `cash`,`a`.`entityFk` AS `entityFk`,`a`.`isActive` AS `isActive`,`a`.`currencyFk` AS `currencyFk`,`a`.`code` AS `code` from `accounting` `a` */;
-/*!50001 SET character_set_client = @saved_cs_client */;
-/*!50001 SET character_set_results = @saved_cs_results */;
-/*!50001 SET collation_connection = @saved_col_connection */;
-
--
-- Final view structure for view `businessCalendar`
--
@@ -88145,7 +87627,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `exchangeInsuranceOut` AS select `p`.`received` AS `received`,sum(`p`.`divisa`) AS `divisa`,sum(`p`.`divisa`) / sum(`p`.`amount`) AS `rate` from ((`payment` `p` join `bank` `b` on(`b`.`id` = `p`.`bankFk`)) join `accountingType` `at2` on(`at2`.`id` = `b`.`cash`)) where `p`.`currencyFk` = 2 and `at2`.`code` = 'wireTransfer' and `p`.`supplierFk` <> 2213 group by `p`.`received` */;
+/*!50001 VIEW `exchangeInsuranceOut` AS select `p`.`received` AS `received`,sum(`p`.`divisa`) AS `divisa`,sum(`p`.`divisa`) / sum(`p`.`amount`) AS `rate` from ((`payment` `p` join `accounting` `a` on(`a`.`id` = `p`.`bankFk`)) join `accountingType` `at2` on(`at2`.`id` = `a`.`accountingTypeFk`)) where `p`.`currencyFk` = 2 and `at2`.`code` = 'wireTransfer' and `p`.`supplierFk` <> 2213 group by `p`.`received` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89315,7 +88797,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `salesPersonSince` AS select `b`.`workerFk` AS `workerFk`,min(`b`.`started`) AS `started` from ((`business` `b` join `worker` `w` on(`w`.`id` = `b`.`workerFk`)) left join `professionalCategory` `pc` on(`pc`.`id` = `b`.`workerBusinessProfessionalCategoryFk`)) where `pc`.`name` = 'Aux ventas' group by `b`.`workerFk` */;
+/*!50001 VIEW `salesPersonSince` AS select `b`.`workerFk` AS `workerFk`,min(`b`.`started`) AS `started` from ((`business` `b` join `worker` `w` on(`w`.`id` = `b`.`workerFk`)) left join `professionalCategory` `pc` on(`pc`.`id` = `b`.`workerBusinessProfessionalCategoryFk`)) where `pc`.`description` = 'Aux ventas' group by `b`.`workerFk` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89644,60 +89126,6 @@ USE `vn`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
---
--- Final view structure for view `unary`
---
-
-/*!50001 DROP VIEW IF EXISTS `unary`*/;
-/*!50001 SET @saved_cs_client = @@character_set_client */;
-/*!50001 SET @saved_cs_results = @@character_set_results */;
-/*!50001 SET @saved_col_connection = @@collation_connection */;
-/*!50001 SET character_set_client = utf8mb4 */;
-/*!50001 SET character_set_results = utf8mb4 */;
-/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
-/*!50001 CREATE ALGORITHM=UNDEFINED */
-/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `unary` AS select `a`.`id` AS `id`,`a`.`parent` AS `parent` from `vn2008`.`unary` `a` */;
-/*!50001 SET character_set_client = @saved_cs_client */;
-/*!50001 SET character_set_results = @saved_cs_results */;
-/*!50001 SET collation_connection = @saved_col_connection */;
-
---
--- Final view structure for view `unaryScan`
---
-
-/*!50001 DROP VIEW IF EXISTS `unaryScan`*/;
-/*!50001 SET @saved_cs_client = @@character_set_client */;
-/*!50001 SET @saved_cs_results = @@character_set_results */;
-/*!50001 SET @saved_col_connection = @@collation_connection */;
-/*!50001 SET character_set_client = utf8mb4 */;
-/*!50001 SET character_set_results = utf8mb4 */;
-/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
-/*!50001 CREATE ALGORITHM=UNDEFINED */
-/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `unaryScan` AS select `u`.`unary_id` AS `unaryFk`,`u`.`name` AS `name`,`u`.`odbc_date` AS `created`,`u`.`type` AS `type` from `vn2008`.`unary_scan` `u` */;
-/*!50001 SET character_set_client = @saved_cs_client */;
-/*!50001 SET character_set_results = @saved_cs_results */;
-/*!50001 SET collation_connection = @saved_col_connection */;
-
---
--- Final view structure for view `unaryScanLine`
---
-
-/*!50001 DROP VIEW IF EXISTS `unaryScanLine`*/;
-/*!50001 SET @saved_cs_client = @@character_set_client */;
-/*!50001 SET @saved_cs_results = @@character_set_results */;
-/*!50001 SET @saved_col_connection = @@collation_connection */;
-/*!50001 SET character_set_client = utf8mb4 */;
-/*!50001 SET character_set_results = utf8mb4 */;
-/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
-/*!50001 CREATE ALGORITHM=UNDEFINED */
-/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `unaryScanLine` AS select `u`.`id` AS `id`,`u`.`code` AS `code`,`u`.`odbc_date` AS `created`,`u`.`unary_id` AS `unaryScanFk` from `vn2008`.`unary_scan_line` `u` */;
-/*!50001 SET character_set_client = @saved_cs_client */;
-/*!50001 SET character_set_results = @saved_cs_results */;
-/*!50001 SET collation_connection = @saved_col_connection */;
-
--
-- Final view structure for view `workerBusinessDated`
--
@@ -89951,7 +89379,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `Bancos` AS select `b`.`id` AS `Id_Banco`,`b`.`bank` AS `Banco`,`b`.`account` AS `Cuenta`,`b`.`cash` AS `cash`,`b`.`entityFk` AS `entity_id`,`b`.`isActive` AS `activo`,`b`.`currencyFk` AS `currencyFk` from `vn`.`bank` `b` */;
+/*!50001 VIEW `Bancos` AS select `a`.`id` AS `Id_Banco`,`a`.`bank` AS `Banco`,`a`.`account` AS `Cuenta`,`a`.`accountingTypeFk` AS `cash`,`a`.`entityFk` AS `entity_id`,`a`.`isActive` AS `activo`,`a`.`currencyFk` AS `currencyFk` from `vn`.`accounting` `a` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -91427,7 +90855,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `empresa` AS select `c`.`id` AS `id`,`c`.`code` AS `abbreviation`,`c`.`supplierAccountFk` AS `Id_Proveedores_account`,`c`.`workerManagerFk` AS `gerente_id`,`c`.`sage200Company` AS `digito_factura`,`c`.`phytosanitary` AS `phytosanitary`,`c`.`companyCode` AS `CodigoEmpresa`,`c`.`companyGroupFk` AS `empresa_grupo`,`c`.`isDefaulter` AS `morosidad`,`c`.`expired` AS `baja`,`c`.`register` AS `registro`,`c`.`registered` AS `alta`,`c`.`logo` AS `logo`,`c`.`isOfficial` AS `oficial`,`c`.`hasCyc` AS `cyc`,`c`.`rgb` AS `rgb`,`c`.`email` AS `mail`,`c`.`stamp` AS `cuno`,`c`.`created` AS `ODBC_DATE`,`c`.`clientFk` AS `Id_Cliente` from `vn`.`company` `c` */;
+/*!50001 VIEW `empresa` AS select `c`.`id` AS `id`,`c`.`code` AS `abbreviation`,`c`.`supplierAccountFk` AS `Id_Proveedores_account`,`c`.`workerManagerFk` AS `gerente_id`,`c`.`phytosanitary` AS `phytosanitary`,`c`.`companyCode` AS `CodigoEmpresa`,`c`.`companyGroupFk` AS `empresa_grupo`,`c`.`isDefaulter` AS `morosidad`,`c`.`expired` AS `baja`,`c`.`register` AS `registro`,`c`.`registered` AS `alta`,`c`.`logo` AS `logo`,`c`.`isOfficial` AS `oficial`,`c`.`hasCyc` AS `cyc`,`c`.`rgb` AS `rgb`,`c`.`email` AS `mail`,`c`.`stamp` AS `cuno`,`c`.`created` AS `ODBC_DATE`,`c`.`clientFk` AS `Id_Cliente` from `vn`.`company` `c` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -92188,24 +91616,6 @@ USE `vn2008`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
---
--- Final view structure for view `v_jerarquia`
---
-
-/*!50001 DROP VIEW IF EXISTS `v_jerarquia`*/;
-/*!50001 SET @saved_cs_client = @@character_set_client */;
-/*!50001 SET @saved_cs_results = @@character_set_results */;
-/*!50001 SET @saved_col_connection = @@collation_connection */;
-/*!50001 SET character_set_client = utf8mb4 */;
-/*!50001 SET character_set_results = utf8mb4 */;
-/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
-/*!50001 CREATE ALGORITHM=UNDEFINED */
-/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `v_jerarquia` AS select `jerarquia`.`worker_id` AS `Id_Trabajador`,`jerarquia`.`boss_id` AS `boss_id` from `jerarquia` union all select distinct `jerarquia`.`boss_id` AS `Id_Trabajador`,`jerarquia`.`boss_id` AS `boss_id` from `jerarquia` */;
-/*!50001 SET character_set_client = @saved_cs_client */;
-/*!50001 SET character_set_results = @saved_cs_results */;
-/*!50001 SET collation_connection = @saved_col_connection */;
-
--
-- Final view structure for view `versiones`
--
@@ -92251,4 +91661,4 @@ USE `vn2008`;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-03-07 9:31:29
+-- Dump completed on 2024-04-08 7:13:58
diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql
index 41e90a3c79..cdf611d5bd 100644
--- a/db/dump/.dump/triggers.sql
+++ b/db/dump/.dump/triggers.sql
@@ -820,6 +820,12 @@ DELIMITER ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
+--
+-- Current Database: `floranet`
+--
+
+USE `floranet`;
+
--
-- Current Database: `hedera`
--
@@ -2289,17 +2295,26 @@ trig: BEGIN
DECLARE vGroupingMode TINYINT;
DECLARE vGenericFk INT;
DECLARE vGenericInDate BOOL;
+ DECLARE vBuyerFk INT;
IF @isModeInventory THEN
LEAVE trig;
END IF;
+ CALL entry_checkBooked(NEW.entryFk);
IF NEW.printedStickers <> 0 THEN
CALL util.throw('it is not possible to create buy lines with printedstickers other than 0');
END IF;
SET NEW.editorFk = account.myUser_getId();
+ SELECT it.workerFk INTO vBuyerFk
+ FROM item i
+ JOIN itemType it ON it.id = i.typeFk
+ WHERE i.id = NEW.itemFk;
+
+ SET NEW.buyerFk = vBuyerFk;
+
CALL buy_checkGrouping(NEW.`grouping`);
SELECT t.warehouseInFk, t.landed
@@ -2409,11 +2424,13 @@ trig:BEGIN
DECLARE vGenericInDate BOOL;
DECLARE vIsInventory BOOL;
DECLARE vDefaultEntry INT;
+ DECLARE vBuyerFk INT;
IF @isTriggerDisabled THEN
LEAVE trig;
END IF;
+ CALL entry_checkBooked(OLD.entryFk);
SET NEW.editorFk = account.myUser_getId();
SELECT defaultEntry INTO vDefaultEntry
@@ -2467,6 +2484,15 @@ trig:BEGIN
SET NEW.isIgnored = TRUE;
END IF;
+ IF NOT (NEW.itemFk <=> OLD.itemFk) THEN
+ SELECT it.workerFk INTO vBuyerFk
+ FROM item i
+ JOIN itemType it ON it.id = i.typeFk
+ WHERE i.id = NEW.itemFk;
+
+ SET NEW.buyerFk = vBuyerFk;
+ END IF;
+
IF NOT (NEW.itemFk <=> OLD.itemFk) OR
NOT (OLD.entryFk <=> NEW.entryFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
@@ -2557,10 +2583,11 @@ DELIMITER ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
-/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`buy_beforeDelete`
- BEFORE DELETE ON buy
- FOR EACH ROW
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`buy_beforeDelete`
+ BEFORE DELETE ON `buy`
+ FOR EACH ROW
BEGIN
+ CALL entry_checkBooked(OLD.entryFk);
IF OLD.printedStickers <> 0 THEN
CALL util.throw("it is not possible to delete buys with printed labels ");
END IF;
@@ -4629,7 +4656,9 @@ BEGIN
CALL supplier_checkIsActive(NEW.supplierFk);
SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);
-
+ IF NEW.travelFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.travelFk) THEN
+ CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries');
+ END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -4672,15 +4701,24 @@ BEGIN
DECLARE vIsVirtual BOOL;
DECLARE vPrintedCount INT;
DECLARE vHasDistinctWarehouses BOOL;
+
+ IF NEW.isBooked = OLD.isBooked THEN
+ CALL entry_checkBooked(OLD.id);
+ END IF;
SET NEW.editorFk = account.myUser_getId();
- IF !(NEW.travelFk <=> OLD.travelFk) THEN
+ IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
+
+ IF NEW.travelFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.travelFk) THEN
+ CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries');
+ END IF;
+
SELECT COUNT(*) > 0 INTO vIsVirtual
FROM entryVirtual WHERE entryFk = NEW.id;
- SELECT !(o.warehouseInFk <=> n.warehouseInFk)
- OR !(o.warehouseOutFk <=> n.warehouseOutFk)
+ SELECT NOT (o.warehouseInFk <=> n.warehouseInFk)
+ OR NOT (o.warehouseOutFk <=> n.warehouseOutFk)
INTO vHasDistinctWarehouses
FROM travel o, travel n
WHERE o.id = OLD.travelFk
@@ -4709,9 +4747,8 @@ BEGIN
SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
END IF;
- IF NOT (NEW.travelFk <=> OLD.travelFk)
- OR NOT (NEW.currencyFk <=> OLD.currencyFk) THEN
- SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);
+ IF NOT (NEW.travelFk <=> OLD.travelFk) OR NOT (NEW.currencyFk <=> OLD.currencyFk) THEN
+ SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk, NEW.supplierFk);
END IF;
END */;;
DELIMITER ;
@@ -4771,6 +4808,7 @@ DELIMITER ;;
BEFORE DELETE ON `entry`
FOR EACH ROW
BEGIN
+ CALL entry_checkBooked(OLD.id);
DELETE FROM buy WHERE entryFk = OLD.id;
END */;;
DELIMITER ;
@@ -6785,7 +6823,7 @@ DELIMITER ;;
BEFORE INSERT ON `parking`
FOR EACH ROW
BEGIN
-
+ SET NEW.editorFk = account.myUser_getId();
-- SET new.`code` = CONCAT(new.`column`,' - ',new.`row`) ;
END */;;
@@ -6807,7 +6845,7 @@ DELIMITER ;;
BEFORE UPDATE ON `parking`
FOR EACH ROW
BEGIN
-
+ SET NEW.editorFk = account.myUser_getId();
-- SET new.`code` = CONCAT(new.`column`,' - ',new.`row`) ;
END */;;
@@ -6821,11 +6859,37 @@ DELIMITER ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
-/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
-/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `payment_beforeInsert` BEFORE INSERT ON `payment` FOR EACH ROW
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`parking_afterDelete`
+ AFTER DELETE ON `parking`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO parkingLog
+ SET `action` = 'delete',
+ `changedModel` = 'Parking',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`payment_beforeInsert`
+ BEFORE INSERT ON `payment`
+ FOR EACH ROW
BEGIN
DECLARE cuenta_banco,cuenta_proveedor DOUBLE;
DECLARE vNewBookEntry INT;
@@ -6834,21 +6898,21 @@ BEGIN
-- PAK 10/02/15 No se asientan los pagos directamente, salvo en el caso de las cajas de CASH
SELECT (at2.code = 'cash') INTO bolCASH
- FROM vn.bank b
- JOIN vn.accountingType at2 ON at2.id = b.cash
- WHERE b.id = NEW.bankFk;
+ FROM accounting a
+ JOIN accountingType at2 ON at2.id = a.accountingTypeFk
+ WHERE a.id = NEW.bankFk;
IF bolCASH THEN
SELECT account INTO cuenta_banco
- FROM bank
+ FROM accounting
WHERE id = NEW.bankFk;
SELECT account INTO cuenta_proveedor
FROM supplier
WHERE id = NEW.supplierFk;
- CALL vn.ledger_next(vNewBookEntry);
+ CALL ledger_next(vNewBookEntry);
INSERT INTO XDiario ( ASIEN,
FECHA,
@@ -10003,6 +10067,10 @@ BEGIN
CALL travel_checkDates(NEW.shipped, NEW.landed);
CALL travel_checkWarehouseIsFeedStock(NEW.warehouseInFk);
+
+ IF NEW.awbFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.id) THEN
+ CALL util.throw('The AWB is incorrect, there is a different AWB in the associated entries');
+ END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10051,6 +10119,10 @@ BEGIN
CALL util.throw('The travel has entries with booked invoices');
END IF;
END IF;
+
+ IF (NOT(NEW.awbFk <=> OLD.awbFk)) AND NEW.awbFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.id) THEN
+ CALL util.throw('The AWB is incorrect, there is a different AWB in the associated entries');
+ END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10072,7 +10144,7 @@ DELIMITER ;;
BEGIN
CALL stock.log_add('travel', NEW.id, OLD.id);
- IF !(NEW.shipped <=> OLD.shipped) THEN
+ IF NOT(NEW.shipped <=> OLD.shipped) THEN
UPDATE entry
SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
WHERE travelFk = NEW.id;
@@ -10796,6 +10868,7 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10816,6 +10889,7 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10825,11 +10899,11 @@ DELIMITER ;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`zoneIncluded_afterDelete`
AFTER DELETE ON `zoneIncluded`
@@ -10840,6 +10914,7 @@ BEGIN
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10922,4 +10997,4 @@ USE `vn2008`;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-03-07 9:31:50
+-- Dump completed on 2024-04-08 7:14:22
diff --git a/db/dump/fixtures.after.sql b/db/dump/fixtures.after.sql
index d7f3b22e81..cc66c4bf59 100644
--- a/db/dump/fixtures.after.sql
+++ b/db/dump/fixtures.after.sql
@@ -7,8 +7,8 @@ SET foreign_key_checks = 0;
-- XXX: vn-database
-INSERT INTO util.config (environment, mockTime, mockUtcTime, mockEnabled)
- VALUES ('local', '2001-01-01 12:00:00', '2001-01-01 11:00:00', TRUE);
+INSERT INTO util.config (id, environment, mockTime, mockUtcTime, mockEnabled)
+ VALUES (1, 'local', '2001-01-01 12:00:00', '2001-01-01 11:00:00', TRUE);
/* #5483
INSERT INTO vn.entryConfig (defaultEntry, mailToNotify, inventorySupplierFk, maxLockTime, defaultSupplierFk)
VALUES(1, NULL, 1, 300, 1);
@@ -156,16 +156,16 @@ INSERT INTO `vn`.`occupationCode` (`code`, `name`)
('b', 'Representantes de comercio'),
('c', 'Personal de oficios en trabajos de construcción en general, y en instalac.,edificios y obras');
-INSERT INTO `vn2008`.`payroll_employee` (`CodTrabajador`,`nss`,`codpuesto`,`codempresa`,`codcontrato`,`FAntiguedad`,`grupotarifa`,`codcategoria`,`ContratoTemporal`)
+INSERT INTO `vn2008`.`payroll_employee` (`CodTrabajador`,`codempresa`)
VALUES
- (36,'46/10515497-58',6,20,189,'2009-01-02',5,10,0),
- (43,'46/10235353-50',7,20,189,'2009-04-21',5,10,0),
- (76,'46/10250562-30',1,20,189,'2009-09-07',9,5,0),
- (1106,'46/10297768-94',4,20,100,'2021-03-09',7,18,0),
- (1107,'46/1627085-11',15,20,402,'2021-03-15',9,6,1),
- (1108,'46/10446901-41',25,20,502,'2021-03-22',10,29,1),
- (1109,'46/10552113-8',3,20,402,'2021-03-23',9,9,1),
- (1110,'46/10723579-75',3,20,402,'2021-03-23',9,9,1);
+ (36,20),
+ (43,20),
+ (76,20),
+ (1106,20),
+ (1107,20),
+ (1108,20),
+ (1109,20),
+ (1110,20);
INSERT INTO `vn`.`trainingCourseType` (`id`, `name`)
VALUES
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index 91be977cb1..58bf9da54e 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -60,13 +60,13 @@ INSERT INTO `vn`.`ticketConfig` (`id`, `scopeDays`)
VALUES
('1', '6');
-INSERT INTO `vn`.`bionicConfig` (`generalInflationCoeficient`, `minimumDensityVolumetricWeight`, `verdnaturaVolumeBox`, `itemCarryBox`)
+INSERT INTO `vn`.`bionicConfig` (`id`, `generalInflationCoeficient`, `minimumDensityVolumetricWeight`, `verdnaturaVolumeBox`, `itemCarryBox`)
VALUES
- (1.30, 167.00, 138000, 71);
+ (1, 1.30, 167.00, 138000, 71);
-INSERT INTO `vn`.`chatConfig` (`host`, `api`)
+INSERT INTO `vn`.`chatConfig` (`id`, `host`, `api`)
VALUES
- ('https://chat.verdnatura.es', 'https://chat.verdnatura.es/api/v1');
+ (1, 'https://chat.verdnatura.es', 'https://chat.verdnatura.es/api/v1');
INSERT IGNORE INTO `vn`.`greugeConfig`(`id`, `freightPickUpPrice`)
VALUES
@@ -81,7 +81,7 @@ INSERT INTO `account`.`roleConfig`(`id`, `mysqlPassword`, `rolePrefix`, `userPre
CALL `account`.`role_sync`;
INSERT INTO `account`.`user`(`id`,`name`, `nickname`, `role`,`active`,`email`, `lang`, `image`, `password`)
- SELECT id, name, CONCAT(name, 'Nick'), id, 1, CONCAT(name, '@mydomain.com'), 'en', '4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2'
+ SELECT id, LOWER(name), CONCAT(name, 'Nick'), id, 1, CONCAT(name, '@mydomain.com'), 'en', '4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2'
FROM `account`.`role`
ORDER BY id;
@@ -118,18 +118,18 @@ INSERT INTO `hedera`.`tpvConfig`(`id`, `currency`, `terminal`, `transactionType`
INSERT INTO `account`.`user`(`id`,`name`,`nickname`, `password`,`role`,`active`,`email`,`lang`, `image`)
VALUES
- (1101, 'BruceWayne', 'Bruce Wayne', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'BruceWayne@mydomain.com', 'es', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1102, 'PetterParker', 'Petter Parker', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'PetterParker@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1103, 'ClarkKent', 'Clark Kent', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'ClarkKent@mydomain.com', 'fr', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1104, 'TonyStark', 'Tony Stark', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'TonyStark@mydomain.com', 'es', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1105, 'MaxEisenhardt', 'Max Eisenhardt', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'MaxEisenhardt@mydomain.com', 'pt', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1106, 'DavidCharlesHaller', 'David Charles Haller', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'DavidCharlesHaller@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1107, 'HankPym', 'Hank Pym', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'HankPym@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1108, 'CharlesXavier', 'Charles Xavier', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'CharlesXavier@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1109, 'BruceBanner', 'Bruce Banner', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'BruceBanner@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'),
- (1110, 'JessicaJones', 'Jessica Jones', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'JessicaJones@mydomain.com', 'en', NULL),
- (1111, 'Missing', 'Missing', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en', NULL),
- (1112, 'Trash', 'Trash', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en', NULL);
+ (1101, 'brucewayne', 'Bruce Wayne', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'BruceWayne@mydomain.com', 'es','1101'),
+ (1102, 'petterparker', 'Petter Parker', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'PetterParker@mydomain.com', 'en','1102'),
+ (1103, 'clarkkent', 'Clark Kent', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'ClarkKent@mydomain.com', 'fr','1103'),
+ (1104, 'tonystark', 'Tony Stark', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'TonyStark@mydomain.com', 'es','1104'),
+ (1105, 'maxeisenhardt', 'Max Eisenhardt', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'MaxEisenhardt@mydomain.com', 'pt','1105'),
+ (1106, 'davidcharleshaller', 'David Charles Haller', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'DavidCharlesHaller@mydomain.com', 'en','1106'),
+ (1107, 'hankpym', 'Hank Pym', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'HankPym@mydomain.com', 'en','1107'),
+ (1108, 'charlesxavier', 'Charles Xavier', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'CharlesXavier@mydomain.com', 'en','1108'),
+ (1109, 'brucebanner', 'Bruce Banner', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'BruceBanner@mydomain.com', 'en','1109'),
+ (1110, 'jessicajones', 'Jessica Jones', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'JessicaJones@mydomain.com', 'en','1110'),
+ (1111, 'missing', 'Missing', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en','e7723f0b24ff05b32ed09d95196f2f29'),
+ (1112, 'trash', 'Trash', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en','e7723f0b24ff05b32ed09d95196f2f29');
UPDATE account.`user`
SET passExpired = DATE_SUB(util.VN_CURDATE(), INTERVAL 1 YEAR)
@@ -608,7 +608,8 @@ INSERT INTO `vn`.`taxArea` (`code`, `claveOperacionFactura`, `CodigoTransaccion`
('WORLD', 2, 15);
INSERT INTO vn.invoiceOutConfig
- SET parallelism = 8;
+ SET id = 1,
+ parallelism = 8;
INSERT INTO `vn`.`invoiceOutSerial` (`code`, `description`, `isTaxed`, `taxAreaFk`, `isCEE`, `type`)
VALUES
@@ -714,7 +715,7 @@ INSERT INTO `vn`.`zoneClosure` (`zoneFk`, `dated`, `hour`)
(12, util.VN_CURDATE(), '23:59'),
(13, util.VN_CURDATE(), '23:59');
-INSERT INTO `vn`.`zoneConfig` (`scope`) VALUES ('1');
+INSERT INTO `vn`.`zoneConfig` (`id`, `scope`) VALUES (1, '1');
INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`)
VALUES
@@ -759,8 +760,8 @@ INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeF
(29, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(30, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(31, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
- (32, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL);
-
+ (32, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
+ (33, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1102, 'NY roofs', 122, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL);
INSERT INTO `vn`.`ticketObservation`(`id`, `ticketFk`, `observationTypeFk`, `description`)
VALUES
(1, 11, 1, 'ready'),
@@ -983,9 +984,9 @@ INSERT INTO `vn`.`packaging`(`id`, `volume`, `width`, `height`, `depth`, `isPack
('cc', 1640038.00, 56.00, 220.00, 128.00, 1, util.VN_CURDATE(), 15, 90.00),
('pallet 100', 2745600.00, 100.00, 220.00, 120.00, 1, util.VN_CURDATE(), 16, 0.00);
-INSERT INTO `vn`.`packagingConfig`(`upperGap`, `defaultSmallPackageFk`, `defaultBigPackageFk`)
+INSERT INTO `vn`.`packagingConfig`(`id`, `upperGap`, `defaultSmallPackageFk`, `defaultBigPackageFk`)
VALUES
- ('10', 1, 'pallet 100');
+ (1, '10', 1, 'pallet 100');
INSERT INTO `vn`.`expeditionStateType`(`id`, `description`, `code`)
VALUES
@@ -1868,8 +1869,7 @@ INSERT INTO `vn`.`claimEnd`(`id`, `saleFk`, `claimFk`, `workerFk`, `claimDestina
INSERT INTO `vn`.`claimConfig`(`id`, `maxResponsibility`)
VALUES
- (1, 50),
- (2, 30);
+ (1, 50);
INSERT INTO `vn`.`claimRatio`(`clientFk`, `yearSale`, `claimAmount`, `claimingRate`, `priceIncreasing`, `packingRate`)
VALUES
@@ -1880,7 +1880,7 @@ INSERT INTO `vn`.`claimRatio`(`clientFk`, `yearSale`, `claimAmount`, `claimingRa
INSERT INTO `vn`.`claimLog` (`originFk`, userFk, `action`, changedModel, oldInstance, newInstance, changedModelId, `description`)
VALUES
- (1, 18, 'update', 'Claim', '{"hasToPickUp":false}', '{"hasToPickUp":true}', 1, NULL),
+ (1, 18, 'update', 'Claim', '{"pickup":null}', '{"pickup":"agency"}', 1, NULL),
(1, 18, 'update', 'ClaimObservation', '{}', '{"claimFk":1,"text":"Waiting for customer"}', 1, NULL),
(1, 18, 'insert', 'ClaimBeginning', '{}', '{"claimFk":1,"saleFk":1,"quantity":10}', 1, NULL),
(1, 18, 'insert', 'ClaimDms', '{}', '{"claimFk":1,"dmsFk":1}', 1, NULL);
@@ -1980,10 +1980,10 @@ INSERT INTO `pbx`.`sip`(`user_id`, `extension`)
(5, 1102),
(9, 1201);
-INSERT INTO `vn`.`professionalCategory` (`id`, `name`, `level`, `dayBreak`)
+INSERT INTO `vn`.`professionalCategory` (`id`, `description`)
VALUES
- (1, 'employee', NULL, NULL),
- (2, 'florist', NULL, NULL);
+ (1, 'employee'),
+ (2, 'florist');
INSERT INTO `vn`.`calendarType` (`id`, `description`, `hoursWeek`, `isPartial`)
VALUES
@@ -2400,7 +2400,8 @@ INSERT INTO `vn`.`dmsType`(`id`, `name`, `readRoleFk`, `writeRoleFk`, `code`)
(18, 'dua', NULL, NULL, 'dua'),
(19, 'inmovilizado', NULL, NULL, 'fixedAssets'),
(20, 'Reclamación', 1, 1, 'claim'),
- (21, 'Entrada', 1, 1, 'entry');
+ (21, 'Entrada', 1, 1, 'entry'),
+ (22, 'Proveedor', 1, 1, 'supplier');
INSERT INTO `vn`.`dms`(`id`, `dmsTypeFk`, `file`, `contentType`, `workerFk`, `warehouseFk`, `companyFk`, `hardCopyNumber`, `hasFile`, `reference`, `description`, `created`)
VALUES
@@ -2412,7 +2413,8 @@ INSERT INTO `vn`.`dms`(`id`, `dmsTypeFk`, `file`, `contentType`, `workerFk`, `wa
(6, 5, '6.txt', 'text/plain', 5, 1, 442, NULL, TRUE, 'NotExists', 'DoesNotExists', util.VN_CURDATE()),
(7, 20, '7.jpg', 'image/jpeg', 9, 1, 442, NULL, FALSE, '1', 'TICKET ID DEL CLIENTE BRUCE WAYNE ID 1101', util.VN_CURDATE()),
(8, 20, '8.mp4', 'video/mp4', 9, 1, 442, NULL, FALSE, '1', 'TICKET ID DEL CLIENTE BRUCE WAYNE ID 1101', util.VN_CURDATE()),
- (9, 21, '7.jpg', 'image/jpeg', 9, 1, 442, NULL, FALSE, '1', 'ENTRADA ID 1', util.VN_CURDATE());
+ (9, 21, '7.jpg', 'image/jpeg', 9, 1, 442, NULL, FALSE, '1', 'ENTRADA ID 1', util.VN_CURDATE()),
+ (10, 21, '7.jpg', 'image/jpeg', 9, 1, 442, NULL, FALSE, '1', 'ENTRADA DE PRUEBA', util.VN_CURDATE());
INSERT INTO `vn`.`claimDms`(`claimFk`, `dmsFk`)
VALUES
@@ -2504,9 +2506,9 @@ INSERT INTO `hedera`.`imageCollectionSize`(`id`, `collectionFk`,`width`, `height
VALUES
(1, 4, 160, 160);
-INSERT INTO `vn`.`rateConfig`(`rate0`, `rate1`, `rate2`, `rate3`)
+INSERT INTO `vn`.`rateConfig`(`id`, `rate0`, `rate1`, `rate2`, `rate3`)
VALUES
- (36, 31, 25, 21);
+ (1, 36, 31, 25, 21);
INSERT INTO `vn`.`rate`(`dated`, `warehouseFk`, `rate0`, `rate1`, `rate2`, `rate3`)
VALUES
@@ -2697,9 +2699,9 @@ INSERT INTO `bs`.`sale` (`saleFk`, `amount`, `dated`, `typeFk`, `clientFk`)
(4, 33.8, util.VN_CURDATE(), 1, 1101),
(30, 34.4, util.VN_CURDATE(), 1, 1108);
-INSERT INTO `vn`.`docuwareConfig` (`url`)
+INSERT INTO `vn`.`docuwareConfig` (`id`, `url`)
VALUES
- ('http://docuware.url/');
+ (1, 'http://docuware.url/');
INSERT INTO `vn`.`calendarHolidaysName` (`id`, `name`)
VALUES
@@ -2796,12 +2798,13 @@ INSERT INTO `vn`.`packingSite` (`id`, `code`, `hostFk`, `monitorId`)
VALUES
(1, 'h1', 1, '');
-INSERT INTO `vn`.`packingSiteConfig` (`shinobiUrl`, `shinobiToken`, `shinobiGroupKey`, `avgBoxingTime`)
+INSERT INTO `vn`.`packingSiteConfig` (`id`, `shinobiUrl`, `shinobiToken`, `shinobiGroupKey`, `avgBoxingTime`)
VALUES
- ('', 'SHINNOBI_TOKEN', 'GROUP_TOKEN', 6000);
+ (1, '', 'SHINNOBI_TOKEN', 'GROUP_TOKEN', 6000);
INSERT INTO `util`.`notificationConfig`
- SET `cleanDays` = 90;
-
+ SET `id` = 1,
+ `cleanDays` = 90;
+TRUNCATE `util`.`notification`;
INSERT INTO `util`.`notification` (`id`, `name`, `description`)
VALUES
(1, 'print-email', 'notification fixture one'),
@@ -2812,6 +2815,7 @@ INSERT INTO `util`.`notification` (`id`, `name`, `description`)
(6, 'book-entry-deleted', 'accounting entries deleted'),
(7, 'zone-included','An email to notify zoneCollisions');
+TRUNCATE `util`.`notificationAcl`;
INSERT INTO `util`.`notificationAcl` (`notificationFk`, `roleFk`)
VALUES
(1, 9),
@@ -2823,11 +2827,13 @@ INSERT INTO `util`.`notificationAcl` (`notificationFk`, `roleFk`)
(6, 9),
(7, 9);
+TRUNCATE `util`.`notificationQueue`;
INSERT INTO `util`.`notificationQueue` (`id`, `notificationFk`, `params`, `authorFk`, `status`, `created`)
VALUES
(1, 'print-email', '{"id": "1"}', 9, 'pending', util.VN_CURDATE()),
(2, 'print-email', '{"id": "2"}', null, 'pending', util.VN_CURDATE()),
(3, 'print-email', null, null, 'pending', util.VN_CURDATE());
+TRUNCATE `util`.`notificationSubscription`;
INSERT INTO `util`.`notificationSubscription` (`notificationFk`, `userFk`)
VALUES
@@ -2855,7 +2861,7 @@ INSERT INTO `vn`.`collection` (`id`, `created`, `workerFk`, `stateFk`, `itemPack
INSERT INTO `vn`.`itemConfig` (`id`, `isItemTagTriggerDisabled`, `monthToDeactivate`, `wasteRecipients`, `validPriorities`, `defaultPriority`, `defaultTag`, `warehouseFk`)
VALUES
- (0, 0, 24, '', '[1,2,3]', 2, 56, 60);
+ (1, 0, 24, '', '[1,2,3]', 2, 56, 60);
INSERT INTO `vn`.`ticketCollection` (`ticketFk`, `collectionFk`, `created`, `level`, `wagon`, `smartTagFk`, `usedShelves`, `itemCount`, `liters`)
VALUES
@@ -2892,7 +2898,7 @@ INSERT INTO `vn`.`ticketLog` (originFk, userFk, `action`, creationDate, changedM
(1, 18, 'insert', '1999-05-09 10:00:00', 'Ticket', 45, 'Super Man' , NULL, '{"id":45,"clientFk":8608,"warehouseFk":60,"shipped":"2023-05-16T22:00:00.000Z","nickname":"Super Man","addressFk":48637,"isSigned":true,"isLabeled":true,"isPrinted":true,"packages":0,"hour":0,"created":"2023-05-16T11:42:56.000Z","isBlocked":false,"hasPriority":false,"companyFk":442,"agencyModeFk":639,"landed":"2023-05-17T22:00:00.000Z","isBoxed":true,"isDeleted":true,"zoneFk":713,"zonePrice":13,"zoneBonus":0}', NULL);
INSERT INTO `vn`.`osTicketConfig` (`id`, `host`, `user`, `password`, `oldStatus`, `newStatusId`, `day`, `comment`, `hostDb`, `userDb`, `passwordDb`, `portDb`, `responseType`, `fromEmailId`, `replyTo`)
VALUES
- (0, 'http://localhost:56596/scp', 'ostadmin', 'Admin1', '1,6', 3, 60, 'Este CAU se ha cerrado automáticamente. Si el problema persiste responda a este mensaje.', 'localhost', 'osticket', 'osticket', 40003, 'reply', 1, 'all');
+ (1, 'http://localhost:56596/scp', 'ostadmin', 'Admin1', '1,6', 3, 60, 'Este CAU se ha cerrado automáticamente. Si el problema persiste responda a este mensaje.', 'localhost', 'osticket', 'osticket', 40003, 'reply', 1, 'all');
INSERT INTO `vn`.`mdbApp` (`app`, `baselineBranchFk`, `userFk`, `locked`)
VALUES
@@ -2907,7 +2913,8 @@ INSERT INTO `salix`.`url` (`appName`, `environment`, `url`)
VALUES
('lilium', 'development', 'http://localhost:9000/#/'),
('hedera', 'development', 'http://localhost:9090/'),
- ('salix', 'development', 'http://localhost:5000/#!/');
+ ('salix', 'development', 'http://localhost:5000/#!/'),
+ ('docuware', 'development', 'http://docuware');
INSERT INTO `vn`.`report` (`id`, `name`, `paperSizeFk`, `method`)
VALUES
@@ -3217,7 +3224,6 @@ INSERT INTO vn.buy
packing = 20,
`grouping` = 1,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3256,7 +3262,6 @@ INSERT INTO vn.buy
packing = 40,
`grouping` = 5,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3295,7 +3300,6 @@ INSERT INTO vn.buy
packing = 10,
`grouping` = 5,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3342,7 +3346,6 @@ INSERT INTO vn.buy
packing = 20,
`grouping` = 4,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3381,7 +3384,6 @@ INSERT INTO vn.buy
packing = 20,
`grouping` = 1,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3421,7 +3423,6 @@ INSERT INTO vn.buy
packing = 200,
`grouping` = 30,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3461,7 +3462,6 @@ INSERT INTO vn.buy
packing = 500,
`grouping` = 10,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3501,7 +3501,6 @@ INSERT INTO vn.buy
packing = 300,
`grouping` = 50,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3541,7 +3540,6 @@ INSERT INTO vn.buy
packing = 50,
`grouping` = 5,
groupingMode = 1,
- packageFk = 94,
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3582,7 +3580,6 @@ INSERT vn.buy
packing = 5,
`grouping` = 2,
groupingMode = 1,
- packageFk = 94,
price1 = 7,
price2 = 7,
price3 = 7,
@@ -3622,7 +3619,6 @@ INSERT vn.buy
packing = 100,
`grouping` = 5,
groupingMode = 1,
- packageFk = 94,
price1 = 7,
price2 = 7,
price3 = 7,
@@ -3713,8 +3709,8 @@ UPDATE vn.collection
UPDATE vn.sale
SET isPicked =FALSE;
-INSERT INTO vn.machineWorkerConfig(maxHours)
- VALUES(12);
+INSERT INTO vn.machineWorkerConfig(id, maxHours)
+ VALUES(1, 12);
INSERT INTO vn.workerAppTester(workerFk) VALUES(66);
@@ -3736,3 +3732,22 @@ INSERT INTO vn.parkingLog(originFk, userFk, `action`, creationDate, description,
INSERT INTO vn.ticketLog (originFk,userFk,`action`,creationDate,changedModel,newInstance,changedModelId,changedModelValue)
VALUES (18,9,'insert','2001-01-01 11:01:00.000','Ticket','{"isDeleted":true}',45,'Super Man');
+
+INSERT INTO `vn`.`supplierDms`(`supplierFk`, `dmsFk`, `editorFk`)
+ VALUES
+ (1, 10, 9);
+
+INSERT INTO `vn`.`accountReconciliation` (supplierAccountFk,operationDated,valueDated,amount,concept,debitCredit,calculatedCode,created)
+ VALUES
+ (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',19.36,'BEL 1','debit','2','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',30226.43,'BEL 2','debit','1','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',118.81,'RCBO','debit','10','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ','debit','12','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ','debit','12','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',2149.71,'RCBO.AMAZON','debit','122','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',3210.5,'RCBO.VOLVO','debit','121','2023-12-14 08:39:53.000'),
+ (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',6513.7,'RCBO.ENERPLUS','debit','120','2023-12-14 08:39:53.000');
+
+INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk)
+ VALUES
+ (1, 1);
diff --git a/db/routines/account/procedures/user_checkName.sql b/db/routines/account/procedures/user_checkName.sql
index 4f954ad00f..6fab173615 100644
--- a/db/routines/account/procedures/user_checkName.sql
+++ b/db/routines/account/procedures/user_checkName.sql
@@ -7,7 +7,7 @@ BEGIN
* The user name must only contain lowercase letters or, starting with second
* character, numbers or underscores.
*/
- IF vUserName NOT REGEXP '^[a-z0-9_-]*$' THEN
+ IF vUserName NOT REGEXP BINARY '^[a-z0-9_-]+$' THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'INVALID_USER_NAME';
END IF;
diff --git a/db/routines/bi/procedures/greuge_dif_porte_add.sql b/db/routines/bi/procedures/greuge_dif_porte_add.sql
index 02bd9eae40..330ff92b81 100644
--- a/db/routines/bi/procedures/greuge_dif_porte_add.sql
+++ b/db/routines/bi/procedures/greuge_dif_porte_add.sql
@@ -1,8 +1,19 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`greuge_dif_porte_add`()
BEGIN
- DECLARE datSTART DATETIME DEFAULT TIMESTAMPADD(DAY,-60,util.VN_CURDATE()); -- '2019-07-01'
- DECLARE datEND DATETIME DEFAULT TIMESTAMPADD(DAY,-1,util.VN_CURDATE());
+
+/**
+ * Calculates the greuge based on a specific date in the 'grievanceConfig' table
+ */
+
+ DECLARE vDateStarted DATETIME;
+ DECLARE vDateEnded DATETIME DEFAULT (util.VN_CURDATE() - INTERVAL 1 DAY);
+ DECLARE vDaysAgoOffset INT;
+
+ SELECT daysAgoOffset INTO vDaysAgoOffset
+ FROM vn.greugeConfig;
+
+ SET vDateStarted = util.VN_CURDATE() - INTERVAL vDaysAgoOffset DAY;
DROP TEMPORARY TABLE IF EXISTS tmp.dp;
@@ -10,53 +21,53 @@ BEGIN
CREATE TEMPORARY TABLE tmp.dp
(PRIMARY KEY (ticketFk))
ENGINE = MEMORY
- SELECT t.id ticketFk,
- SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) AS teorico,
- 00000.00 as practico,
- 00000.00 as greuge,
- t.clientFk,
- t.shipped
- FROM
- vn.ticket t
- JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk
- LEFT JOIN vn.expedition e ON e.ticketFk = t.id
- JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk
- JOIN vn.zone z ON t.zoneFk = z.id
- WHERE
- t.shipped between datSTART AND datEND
- AND cli.`real`
- AND t.companyFk IN (442 , 567)
- AND z.isVolumetric = FALSE
- GROUP BY t.id;
+ SELECT t.id ticketFk,
+ SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) teorico,
+ 00000.00 practico,
+ 00000.00 greuge,
+ t.clientFk,
+ t.shipped
+ FROM vn.ticket t
+ JOIN vn.client c ON c.id = t.clientFk
+ LEFT JOIN vn.expedition e ON e.ticketFk = t.id
+ JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk
+ JOIN vn.zone z ON t.zoneFk = z.id
+ JOIN vn.company cp ON cp.id = t.companyFk
+ WHERE t.shipped BETWEEN vDateStarted AND vDateEnded
+ AND c.isRelevant
+ AND cp.code IN ('VNL', 'VNH')
+ AND NOT z.isVolumetric
+ GROUP BY t.id;
-- Agencias que cobran por volumen
INSERT INTO tmp.dp
SELECT sv.ticketFk,
- SUM(IFNULL(sv.freight,0)) AS teorico,
- 00000.00 as practico,
- 00000.00 as greuge,
- sv.clientFk,
- sv.shipped
- FROM vn.saleVolume sv
- JOIN vn.zone z ON z.id = sv.zoneFk
- AND sv.shipped BETWEEN datSTART AND datEND
- AND z.isVolumetric != FALSE
- GROUP BY sv.ticketFk;
+ SUM(IFNULL(sv.freight,0)) teorico,
+ 00000.00 practico,
+ 00000.00 greuge,
+ sv.clientFk,
+ sv.shipped
+ FROM vn.saleVolume sv
+ JOIN vn.zone z ON z.id = sv.zoneFk
+ AND sv.shipped BETWEEN vDateStarted AND vDateEnded
+ AND z.isVolumetric != FALSE
+ GROUP BY sv.ticketFk;
DROP TEMPORARY TABLE IF EXISTS tmp.dp_aux;
CREATE TEMPORARY TABLE tmp.dp_aux
(PRIMARY KEY (ticketFk))
ENGINE = MEMORY
- SELECT dp.ticketFk, sum(Cantidad * Valor) as valor
- FROM tmp.dp
- JOIN vn2008.Movimientos m ON m.Id_Ticket = dp.ticketFk
- JOIN vn2008.Movimientos_componentes mc using(Id_Movimiento)
- WHERE mc.Id_Componente = 15
- GROUP BY dp.ticketFk;
+ SELECT dp.ticketFk, SUM(s.quantity * sc.value) valor
+ FROM tmp.dp
+ JOIN vn.sale s ON s.ticketFk = dp.ticketFk
+ JOIN vn.saleComponent sc ON sc.saleFk = s.id
+ JOIN vn.component c ON c.id = sc.componentFk
+ WHERE c.code = 'delivery'
+ GROUP BY dp.ticketFk;
UPDATE tmp.dp
- JOIN tmp.dp_aux USING(ticketFk)
+ JOIN tmp.dp_aux USING(ticketFk)
SET practico = IFNULL(valor,0);
DROP TEMPORARY TABLE tmp.dp_aux;
@@ -64,28 +75,29 @@ BEGIN
CREATE TEMPORARY TABLE tmp.dp_aux
(PRIMARY KEY (ticketFk))
ENGINE = MEMORY
- SELECT dp.ticketFk, sum(g.amount) Importe
+ SELECT dp.ticketFk, SUM(g.amount) Importe
FROM tmp.dp
- JOIN vn.greuge g ON g.ticketFk = dp.ticketFk
- WHERE g.greugeTypeFk = 1 -- dif_porte
- GROUP BY dp.ticketFk;
+ JOIN vn.greuge g ON g.ticketFk = dp.ticketFk
+ JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk
+ WHERE gt.code = 'freightDifference' -- dif_porte
+ GROUP BY dp.ticketFk;
UPDATE tmp.dp
- JOIN tmp.dp_aux USING(ticketFk)
+ JOIN tmp.dp_aux USING(ticketFk)
SET greuge = IFNULL(Importe,0);
INSERT INTO vn.greuge (clientFk,description,amount,shipped,greugeTypeFk,ticketFk)
- SELECT dp.clientFk
- , concat('dif_porte ', dp.ticketFk)
- , round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe
- , date(dp.shipped)
- , 1
- ,dp.ticketFk
+ SELECT dp.clientFk,
+ CONCAT('dif_porte ', dp.ticketFk),
+ ROUND(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) Importe,
+ date(dp.shipped),
+ 1,
+ dp.ticketFk
FROM tmp.dp
- JOIN vn.client c ON c.id = dp.clientFk
+ JOIN vn.client c ON c.id = dp.clientFk
WHERE ABS(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0)) > 1
AND c.isRelevant;
-
+
DROP TEMPORARY TABLE
tmp.dp,
tmp.dp_aux;
diff --git a/db/routines/bs/procedures/ventas_contables_add.sql b/db/routines/bs/procedures/ventas_contables_add.sql
index 12b2738f30..66c012a199 100644
--- a/db/routines/bs/procedures/ventas_contables_add.sql
+++ b/db/routines/bs/procedures/ventas_contables_add.sql
@@ -23,7 +23,7 @@ BEGIN
ENGINE = MEMORY
SELECT Id_Ticket
FROM vn2008.Tickets t
- JOIN vn.invoiceOut io ON io.id = t.Factura
+ JOIN vn.invoiceOut io ON io.`ref` = t.Factura
WHERE year(io.issued) = vYear
AND month(io.issued) = vMonth;
diff --git a/db/routines/floranet/events/clean.sql b/db/routines/floranet/events/clean.sql
new file mode 100644
index 0000000000..4477112fd7
--- /dev/null
+++ b/db/routines/floranet/events/clean.sql
@@ -0,0 +1,22 @@
+DELIMITER $$
+CREATE OR REPLACE
+ DEFINER=`root`@`localhost`
+ EVENT `floranet`.`clean`
+ ON SCHEDULE EVERY 1 DAY
+ STARTS '2024-01-01 23:00:00.000'
+ ON COMPLETION PRESERVE
+ ENABLE
+DO
+BEGIN
+ DELETE
+ FROM `order`
+ WHERE created < CURDATE()
+ AND isPaid = FALSE;
+
+ DELETE c.*
+ FROM catalogue c
+ LEFT JOIN `order` o ON o.catalogueFk = c.id
+ WHERE c.created < CURDATE()
+ AND o.id IS NULL;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/floranet/procedures/catalogue_get.sql b/db/routines/floranet/procedures/catalogue_get.sql
new file mode 100644
index 0000000000..e45fa7ddfd
--- /dev/null
+++ b/db/routines/floranet/procedures/catalogue_get.sql
@@ -0,0 +1,64 @@
+DROP PROCEDURE IF EXISTS floranet.catalogue_get;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.catalogue_get(vLanded DATE, vPostalCode VARCHAR(15))
+READS SQL DATA
+proc:BEGIN
+/**
+ * Returns list, price and all the stuff regarding the floranet items
+ *
+ * @param vLanded Delivery date
+ * @param vPostalCode Delivery address postal code
+ */
+ DECLARE vLastCatalogueFk INT;
+ DECLARE vLockName VARCHAR(20);
+ DECLARE vLockTime INT;
+
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ DO RELEASE_LOCK(vLockName);
+
+ RESIGNAL;
+ END;
+
+ SET vLockName = 'catalogue_get';
+ SET vLockTime = 15;
+
+ IF NOT GET_LOCK(vLockName, vLockTime) THEN
+ LEAVE proc;
+ END IF;
+
+ SELECT MAX(id) INTO vLastCatalogueFk
+ FROM catalogue;
+
+ INSERT INTO catalogue(
+ name,
+ price,
+ itemFk,
+ dated,
+ postalCode,
+ `type`,
+ image,
+ description
+ )
+ SELECT i.name,
+ i.`size`,
+ i.id,
+ vLanded,
+ vPostalCode,
+ it.name,
+ CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image),
+ i.description
+ FROM vn.item i
+ JOIN vn.itemType it ON it.id = i.typeFk
+ WHERE it.code IN ('FNR','FNP');
+
+ SELECT *
+ FROM catalogue
+ WHERE id > IFNULL(vLastCatalogueFk,0);
+
+ DO RELEASE_LOCK(vLockName);
+
+END$$
+DELIMITER ;
diff --git a/db/routines/floranet/procedures/contact_request.sql b/db/routines/floranet/procedures/contact_request.sql
new file mode 100644
index 0000000000..044c22c6ff
--- /dev/null
+++ b/db/routines/floranet/procedures/contact_request.sql
@@ -0,0 +1,20 @@
+DROP PROCEDURE IF EXISTS floranet.contact_request;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost`
+PROCEDURE floranet.contact_request(
+ vName VARCHAR(100),
+ vPhone VARCHAR(15),
+ vEmail VARCHAR(100),
+ vMessage TEXT)
+READS SQL DATA
+BEGIN
+/**
+ * Set actions for contact request.
+ *
+ * @param vPostalCode Delivery address postal code
+ */
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/floranet/procedures/deliveryDate_get.sql b/db/routines/floranet/procedures/deliveryDate_get.sql
new file mode 100644
index 0000000000..29751ebe4a
--- /dev/null
+++ b/db/routines/floranet/procedures/deliveryDate_get.sql
@@ -0,0 +1,29 @@
+DROP PROCEDURE IF EXISTS floranet.deliveryDate_get;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` PROCEDURE `floranet`.`deliveryDate_get`(vPostalCode VARCHAR(15))
+ READS SQL DATA
+BEGIN
+/**
+ * Returns available dates for this postalCode, in the next seven days
+ *
+ * @param vPostalCode Delivery address postal code
+ */
+ DECLARE vCurrentDayOfWeek INT;
+
+ SET vCurrentDayOfWeek = DAYOFWEEK(NOW());
+
+ SELECT DISTINCT nextDay
+ FROM (
+ SELECT CURDATE() + INTERVAL IF(
+ apc.dayOfWeek >= vCurrentDayOfWeek,
+ apc.dayOfWeek - vCurrentDayOfWeek,
+ 7 - apc.dayOfWeek
+ ) DAY nextDay,
+ NOW() + INTERVAL apc.hoursInAdvance - 12 HOUR minDeliveryTime
+ FROM addressPostCode apc
+ WHERE apc.postCode = vPostalCode
+ HAVING nextDay > minDeliveryTime) sub;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/floranet/procedures/order_confirm.sql b/db/routines/floranet/procedures/order_confirm.sql
new file mode 100644
index 0000000000..fed1236634
--- /dev/null
+++ b/db/routines/floranet/procedures/order_confirm.sql
@@ -0,0 +1,25 @@
+DROP PROCEDURE IF EXISTS floranet.order_confirm;
+
+DELIMITER $$
+$$
+
+CREATE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk INT)
+READS SQL DATA
+
+BEGIN
+/** Update order.isPaid field
+ *
+ * @param vCatalogueFk floranet.catalogue.id
+ *
+ * @returns floranet.order.isPaid
+ */
+ UPDATE `order`
+ SET isPaid = TRUE,
+ payed = NOW()
+ WHERE catalogueFk = vCatalogueFk;
+
+ SELECT isPaid
+ FROM `order`
+ WHERE catalogueFk = vCatalogueFk;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/floranet/procedures/order_put.sql b/db/routines/floranet/procedures/order_put.sql
new file mode 100644
index 0000000000..c26cef19a9
--- /dev/null
+++ b/db/routines/floranet/procedures/order_put.sql
@@ -0,0 +1,42 @@
+DROP PROCEDURE IF EXISTS floranet.order_put;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.order_put(vOrder JSON)
+READS SQL DATA
+BEGIN
+/**
+ * Get and process an order
+ *
+ * @param vOrder Data of the order
+ *
+ * Customer data: , ,
+ *
+ * Item data: ,
+ *
+ * Delivery data: , ,
+ *
+ */
+ INSERT IGNORE INTO `order`(
+ catalogueFk,
+ customerName,
+ email,
+ customerPhone,
+ message,
+ deliveryName,
+ address,
+ deliveryPhone
+ )
+ VALUES (JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.catalogueFk')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.customerName')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.email')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.customerPhone')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.message')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.deliveryName')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.address')),
+ JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.deliveryPhone'))
+ );
+
+ SELECT LAST_INSERT_ID() orderFk;
+END$$
+DELIMITER ;
diff --git a/db/routines/floranet/procedures/sliders_get.sql b/db/routines/floranet/procedures/sliders_get.sql
new file mode 100644
index 0000000000..bd791dec74
--- /dev/null
+++ b/db/routines/floranet/procedures/sliders_get.sql
@@ -0,0 +1,20 @@
+DROP PROCEDURE IF EXISTS floranet.sliders_get;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.sliders_get()
+READS SQL DATA
+BEGIN
+/**
+ * Returns list of url for sliders
+ */
+ SELECT
+ CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image) url,
+ i.longName
+ FROM vn.item i
+ JOIN vn.itemType it ON it.id = i.typeFk
+ WHERE it.code IN ('FNR','FNP')
+ LIMIT 3;
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/hedera/procedures/catalog_calcFromMyAddress.sql b/db/routines/hedera/procedures/catalog_calcFromMyAddress.sql
index c9a9db5e06..c9fa54f36c 100644
--- a/db/routines/hedera/procedures/catalog_calcFromMyAddress.sql
+++ b/db/routines/hedera/procedures/catalog_calcFromMyAddress.sql
@@ -32,7 +32,7 @@ BEGIN
WHERE c.available > 0
GROUP BY c.item_id;
- CALL vn.catalog_calculate(vDelivery, vAddress, vAgencyMode);
+ CALL vn.catalog_calculate(vDelivery, vAddress, vAgencyMode, FALSE);
DROP TEMPORARY TABLE tmp.item;
END$$
diff --git a/db/routines/hedera/procedures/item_calcCatalog.sql b/db/routines/hedera/procedures/item_calcCatalog.sql
index 81b3adf5aa..e72c2fd062 100644
--- a/db/routines/hedera/procedures/item_calcCatalog.sql
+++ b/db/routines/hedera/procedures/item_calcCatalog.sql
@@ -16,7 +16,7 @@ BEGIN
ENGINE = MEMORY
SELECT vSelf itemFk;
- CALL vn.catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
+ CALL vn.catalog_calculate(vLanded, vAddressFk, vAgencyModeFk, FALSE);
SELECT l.warehouseFk, w.name warehouse,
p.`grouping`, p.price, p.rate, l.available
diff --git a/db/routines/hedera/procedures/order_calcCatalog.sql b/db/routines/hedera/procedures/order_calcCatalog.sql
index 53ede1b577..239e017886 100644
--- a/db/routines/hedera/procedures/order_calcCatalog.sql
+++ b/db/routines/hedera/procedures/order_calcCatalog.sql
@@ -27,7 +27,7 @@ BEGIN
WHERE orderFk = vSelf
GROUP BY itemFk;
- CALL vn.catalog_calculate(vDate, vAddress, vAgencyMode);
+ CALL vn.catalog_calculate(vDate, vAddress, vAgencyMode, FALSE);
DROP TEMPORARY TABLE tmp.item;
END$$
diff --git a/db/routines/hedera/procedures/order_calcCatalogFull.sql b/db/routines/hedera/procedures/order_calcCatalogFull.sql
index 52d22ba308..41408c5e80 100644
--- a/db/routines/hedera/procedures/order_calcCatalogFull.sql
+++ b/db/routines/hedera/procedures/order_calcCatalogFull.sql
@@ -22,7 +22,7 @@ BEGIN
FROM `order`
WHERE id = vSelf;
- CALL vn.catalog_calculate(vDate, vAddress, vAgencyMode);
+ CALL vn.catalog_calculate(vDate, vAddress, vAgencyMode, FALSE);
IF account.myUser_getName() = 'visitor' THEN
UPDATE tmp.ticketCalculateItem
diff --git a/db/routines/sage/procedures/invoiceIn_add.sql b/db/routines/sage/procedures/invoiceIn_add.sql
index a2690deb09..0898d68100 100644
--- a/db/routines/sage/procedures/invoiceIn_add.sql
+++ b/db/routines/sage/procedures/invoiceIn_add.sql
@@ -3,10 +3,11 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `sage`.`invoiceIn_add`(vI
BEGIN
/**
* Traslada la info de contabilidad relacionada con las facturas recibidas
- *
+ *
* @vInvoiceInFk Factura recibida
* @vXDiarioFk Id tabla XDiario
- */
+ */
+ DECLARE vInvoiceInOriginalFk INT;
DECLARE vDone BOOL DEFAULT FALSE;
DECLARE vBase DOUBLE;
DECLARE vVat DOUBLE;
@@ -23,25 +24,25 @@ BEGIN
DECLARE vInvoiceTypeInformative VARCHAR(1);
DECLARE vIsInformativeExportation BOOL DEFAULT FALSE;
- DECLARE vCursor CURSOR FOR
+ DECLARE vCursor CURSOR FOR
SELECT it.taxableBase,
CAST((( it.taxableBase / 100) * t.PorcentajeIva) AS DECIMAL (10,2)),
t.PorcentajeIva,
it.transactionTypeSageFk,
it.taxTypeSageFk,
tty.isIntracommunity,
- tt.ClaveOperacionDefecto
+ tt.ClaveOperacionDefecto
FROM vn.invoiceIn i
JOIN vn.invoiceInTax it ON it.InvoiceInFk = i.id
JOIN TiposIva t ON t.CodigoIva = it.taxTypeSageFk
JOIN taxType tty ON tty.id = t.CodigoIva
JOIN TiposTransacciones tt ON tt.CodigoTransaccion = it.transactionTypeSageFk
LEFT JOIN vn.dua d ON d.id = vInvoiceInFk
- WHERE i.id = vInvoiceInFk
+ WHERE i.id = vInvoiceInFk
AND d.id IS NULL;
-
+
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
-
+
DELETE FROM movContaIVA
WHERE id = vXDiarioFk;
@@ -64,22 +65,22 @@ BEGIN
vTaxCode,
vIsIntracommunity,
vOperationCode;
-
- IF vDone THEN
+
+ IF vDone THEN
LEAVE l;
END IF;
- SET vTransactionCodeOld = vTransactionCode;
- SET vTaxCodeOld = vTaxCode;
+ SET vTransactionCodeOld = vTransactionCode;
+ SET vTaxCodeOld = vTaxCode;
- IF vOperationCode IS NOT NULL THEN
+ IF vOperationCode IS NOT NULL THEN
UPDATE movContaIVA
SET ClaveOperacionFactura = vOperationCode
WHERE id = vXDiarioFk;
END IF;
-
+
SET vCounter = vCounter + 1;
- CASE vCounter
+ CASE vCounter
WHEN 1 THEN
UPDATE movContaIVA
SET BaseIva1 = vBase,
@@ -115,31 +116,31 @@ BEGIN
WHERE id = vXDiarioFk;
ELSE
SELECT vXDiarioFk INTO vXDiarioFk;
- END CASE;
+ END CASE;
IF vIsIntracommunity THEN
UPDATE movContaIVA
SET Intracomunitaria = TRUE
WHERE id = vXDiarioFk;
END IF;
-
- SET vTransactionCodeOld = vTransactionCode;
- SET vTaxCodeOld = vTaxCode;
-
+
+ SET vTransactionCodeOld = vTransactionCode;
+ SET vTaxCodeOld = vTaxCode;
+
END LOOP;
CLOSE vCursor;
SELECT d.ASIEN AND x.ASIEN IS NULL INTO vIsInformativeExportation
FROM vn.dua d
- LEFT JOIN vn.XDiario x ON x.ASIEN = d.ASIEN
+ LEFT JOIN vn.XDiario x ON x.ASIEN = d.ASIEN
AND x.SERIE = vSerialDua COLLATE utf8mb3_unicode_ci
WHERE d.ASIEN = (
SELECT ASIEN
- FROM vn.XDiario
+ FROM vn.XDiario
WHERE id = vXDiarioFk)
LIMIT 1;
-
+
UPDATE movContaIVA mci
JOIN tmp.invoiceIn ii ON ii.id = vInvoiceInFk
JOIN vn.XDiario x ON x.id = mci.id
@@ -151,13 +152,13 @@ BEGIN
mci.Serie = ii.serial,
mci.Factura = ii.id,
mci.FechaFactura = ii.issued,
- mci.ImporteFactura = IFNULL(mci.BaseIva1, 0) + IFNULL(mci.CuotaIva1, 0) +
- IFNULL(mci.BaseIva2, 0) + IFNULL(mci.CuotaIva2, 0) +
- IFNULL(mci.BaseIva3, 0) + IFNULL(mci.CuotaIva3, 0) +
+ mci.ImporteFactura = IFNULL(mci.BaseIva1, 0) + IFNULL(mci.CuotaIva1, 0) +
+ IFNULL(mci.BaseIva2, 0) + IFNULL(mci.CuotaIva2, 0) +
+ IFNULL(mci.BaseIva3, 0) + IFNULL(mci.CuotaIva3, 0) +
IFNULL(mci.BaseIva4, 0) + IFNULL(mci.CuotaIva4, 0),
- mci.TipoFactura = IF(id.id,
- IF( ii.serial = vSerialDua COLLATE utf8mb3_unicode_ci, vInvoiceTypeReceived, vInvoiceTypeInformative),
- IF(vIsInformativeExportation,vInvoiceTypeInformative, vInvoiceTypeReceived)),
+ mci.TipoFactura = IF(id.id,
+ IF( ii.serial = vSerialDua COLLATE utf8mb3_unicode_ci, vInvoiceTypeReceived, vInvoiceTypeInformative),
+ IF(vIsInformativeExportation,vInvoiceTypeInformative, vInvoiceTypeReceived)),
mci.CodigoCuentaFactura = x.SUBCTA,
mci.CifDni = IF(LEFT(TRIM(s.nif), 2) = n.SiglaNacion, SUBSTRING(TRIM(s.nif), 3), s.nif),
mci.Nombre = s.name,
@@ -185,7 +186,7 @@ BEGIN
JOIN (SELECT SUM(x2.BASEEURO) taxableBase, SUM(x2.EURODEBE) taxBase
FROM vn.XDiario x1
JOIN vn.XDiario x2 ON x1.ASIEN = x2.ASIEN
- WHERE x2.BASEEURO <> 0
+ WHERE x2.BASEEURO <> 0
AND x1.id = vXDiarioFk
)sub
JOIN ClavesOperacion co ON co.Descripcion = 'Arrendamiento de locales de negocio'
@@ -193,10 +194,41 @@ BEGIN
mci.ClaveOperacionFactura = IF( t.Retencion = 'ARRENDAMIENTO Y SUBARRENDAMIENTO', co.ClaveOperacionFactura_, mci.ClaveOperacionFactura),
mci.BaseRetencion = IF (t.Retencion = 'ACTIVIDADES AGRICOLAS O GANADERAS', sub.taxableBase + sub.taxBase, sub.taxableBase),
mci.PorRetencion = t.PorcentajeRetencion,
- mci.ImporteRetencion = iit.taxableBase * - 1
- WHERE mci.id = vXDiarioFk
+ mci.ImporteRetencion = iit.taxableBase * - 1
+ WHERE mci.id = vXDiarioFk
AND e.name = 'Retenciones'
AND id.id IS NULL;
+ SELECT correctedFk INTO vInvoiceInOriginalFk
+ FROM vn.invoiceInCorrection
+ WHERE correctingFk = vInvoiceInFk;
+
+ IF vInvoiceInOriginalFk THEN
+
+ UPDATE movContaIVA mci
+ JOIN vn.invoiceInRefund iir ON iir.invoiceInRefundFk = vInvoiceInFk
+ JOIN (SELECT issued,
+ SUM(sub.taxableBase) taxableBase,
+ SUM(ROUND((sub.taxableBase * sub.PorcentajeIva) / 100 , 2)) vat
+ FROM(SELECT issued,
+ SUM(iit.taxableBase) taxableBase,
+ ti.PorcentajeIva
+ FROM vn.invoiceIn i
+ JOIN vn.invoiceInTax iit ON iit.invoiceInFk = i.id
+ JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk
+ WHERE i.id = vInvoiceInOriginalFk
+ GROUP BY ti.CodigoIva)sub
+ )invoiceInOriginal
+ JOIN ClavesOperacion co ON co.Descripcion = 'Factura rectificativa'
+ SET mci.TipoRectificativa = iir.refundCategoryFk,
+ mci.ClaseAbonoRectificativas = iir.refundType,
+ mci.FechaFacturaOriginal = invoiceInOriginal.issued,
+ mci.FechaOperacion = invoiceInOriginal.issued,
+ mci.BaseImponibleOriginal = invoiceInOriginal.taxableBase,
+ mci.CuotaIvaOriginal = invoiceInOriginal.vat,
+ mci.ClaveOperacionFactura = co.ClaveOperacionFactura_
+ WHERE mci.id = vXDiarioFk;
+
+ END IF;
END$$
-DELIMITER ;
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/events/clientsDisable.sql b/db/routines/vn/events/clientsDisable.sql
index 00cd4ed8bc..238e060ddb 100644
--- a/db/routines/vn/events/clientsDisable.sql
+++ b/db/routines/vn/events/clientsDisable.sql
@@ -7,9 +7,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`clientsDisable`
DO BEGIN
UPDATE account.user u
JOIN client c ON c.id = u.id
- JOIN clientType ct ON ct.id = c.typeFk
SET u.active = FALSE
- WHERE ct.code = 'normal'
+ WHERE c.typeFk = 'normal'
AND u.id NOT IN (
SELECT DISTINCT c.id
FROM client c
diff --git a/db/routines/vn/functions/addressTaxArea.sql b/db/routines/vn/functions/addressTaxArea.sql
index 3586dd4ce4..1d4e9e2f0f 100644
--- a/db/routines/vn/functions/addressTaxArea.sql
+++ b/db/routines/vn/functions/addressTaxArea.sql
@@ -20,6 +20,7 @@ BEGIN
CALL vn.addressTaxArea();
SELECT areaFk INTO vTaxArea FROM tmp.addressTaxArea;
+
DROP TEMPORARY TABLE
tmp.addressCompany,
tmp.addressTaxArea;
diff --git a/db/routines/vn/functions/entry_count b/db/routines/vn/functions/entry_count
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/db/routines/vn/functions/getSpecialPrice.sql b/db/routines/vn/functions/getSpecialPrice.sql
index f3b340cfef..2cc5f2b993 100644
--- a/db/routines/vn/functions/getSpecialPrice.sql
+++ b/db/routines/vn/functions/getSpecialPrice.sql
@@ -8,13 +8,16 @@ BEGIN
SELECT rate3 INTO price
FROM vn.priceFixed
- WHERE itemFk = vItemFk
+ WHERE itemFk = vItemFk
AND util.VN_CURDATE() BETWEEN started AND ended ORDER BY created DESC LIMIT 1;
- SELECT `value` INTO price
+ SELECT `value` INTO price
FROM vn.specialPrice
- WHERE itemFk = vItemFk
- AND clientFk = vClientFk ;
+ WHERE itemFk = vItemFk
+ AND (clientFk = vClientFk OR clientFk IS NULL)
+ AND started <= util.VN_CURDATE()
+ AND (ended >= util.VN_CURDATE() OR ended IS NULL)
+ ORDER BY id DESC LIMIT 1;
RETURN price;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/absoluteInventoryHistory.sql b/db/routines/vn/procedures/absoluteInventoryHistory.sql
new file mode 100644
index 0000000000..627b7c8bec
--- /dev/null
+++ b/db/routines/vn/procedures/absoluteInventoryHistory.sql
@@ -0,0 +1,102 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`absoluteInventoryHistory`(
+ vItemFk INT,
+ vWarehouseFk INT,
+ vDate DATETIME
+)
+BEGIN
+/**
+* Calcula y proporciona un historial de inventario absoluto
+* para un artículo específico en un almacén dado
+* hasta una fecha determinada.
+*
+* @param vItemFk Id de artículo
+* @param vWarehouseFk Id de almacén
+* @param vDate Fecha
+*/
+ DECLARE vCalculatedInventory INT;
+ DECLARE vToday DATETIME DEFAULT util.VN_CURDATE();
+ DECLARE vStartDate DATE DEFAULT '2001-01-01';
+
+ CREATE OR REPLACE TEMPORARY TABLE tHistoricalPast
+ ENGINE = MEMORY
+ SELECT *
+ FROM (
+ SELECT tr.landed `date`,
+ b.quantity input,
+ NULL `output`,
+ tr.isReceived ok,
+ s.name alias,
+ e.invoiceNumber reference,
+ e.id id,
+ tr.isDelivered f5
+ FROM buy b
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN supplier s ON s.id = e.supplierFk
+ WHERE tr.landed >= vStartDate
+ AND s.id <> (SELECT supplierFk FROM inventoryConfig)
+ AND vWarehouseFk IN (tr.warehouseInFk, 0)
+ AND b.itemFk = vItemFk
+ AND NOT e.isExcludedFromAvailable
+ AND NOT e.isRaid
+ UNION ALL
+ SELECT tr.shipped,
+ NULL,
+ b.quantity,
+ tr.isDelivered,
+ s.name,
+ e.invoiceNumber,
+ e.id,
+ tr.isDelivered
+ FROM buy b
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN supplier s ON s.id = e.supplierFk
+ WHERE tr.shipped >= vStartDate
+ AND vWarehouseFk = tr.warehouseOutFk
+ AND s.id <> (SELECT supplierFk FROM inventoryConfig)
+ AND b.itemFk = vItemFk
+ AND NOT e.isExcludedFromAvailable
+ AND NOT e.isRaid
+ UNION ALL
+ SELECT t.shipped,
+ NULL,
+ m.quantity,
+ (m.isPicked OR t.isLabeled OR t.refFk IS NOT NULL),
+ t.nickname,
+ t.refFk,
+ t.id,
+ t.isPrinted
+ FROM sale m
+ JOIN ticket t ON t.id = m.ticketFk
+ JOIN client c ON c.id = t.clientFk
+ WHERE t.shipped >= vStartDate
+ AND m.itemFk = vItemFk
+ AND vWarehouseFk IN (t.warehouseFk, 0)
+ ) t1
+ ORDER BY `date`, input DESC, ok DESC;
+
+ SELECT SUM(input) - SUM(`output`) INTO vCalculatedInventory
+ FROM tHistoricalPast
+ WHERE `date` < vDate;
+
+ SELECT p1.*, NULL v_virtual
+ FROM (
+ SELECT vDate `date`,
+ vCalculatedInventory input,
+ NULL `output`,
+ 1 ok,
+ 'Inventario calculado' alias,
+ '' reference,
+ 0 id,
+ 1 f5
+ UNION ALL
+ SELECT *
+ FROM tHistoricalPast
+ WHERE `date` >= vDate
+ ) p1;
+
+ DROP TEMPORARY TABLE tHistoricalPast;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/addAccountReconciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql
new file mode 100644
index 0000000000..8effbd76ce
--- /dev/null
+++ b/db/routines/vn/procedures/addAccountReconciliation.sql
@@ -0,0 +1,66 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`()
+BEGIN
+/**
+ * Updates duplicate records in the accountReconciliation table,
+ * by assigning them a new identifier and then inserts a new entry in the till table.
+ */
+ UPDATE accountReconciliation ar
+ JOIN (
+ SELECT id,
+ calculatedCode,
+ CONCAT(
+ calculatedCode,
+ '(',
+ ROW_NUMBER() OVER (PARTITION BY calculatedCode ORDER BY id),
+ ')'
+ ) newId
+ FROM accountReconciliation ar
+ WHERE calculatedCode IN (
+ SELECT calculatedCode
+ FROM accountReconciliation
+ GROUP BY calculatedCode
+ HAVING COUNT(*) > 1
+ )
+ ORDER BY calculatedCode, id
+ ) sub2 ON ar.id = sub2.id
+ SET ar.calculatedCode = sub2.newId;
+
+ INSERT INTO till(
+ dated,
+ isAccountable,
+ serie,
+ concept,
+ `in`,
+ `out`,
+ bankFk,
+ companyFk,
+ warehouseFk,
+ supplierAccountFk,
+ calculatedCode,
+ InForeignValue,
+ OutForeignValue,
+ workerFk
+ )
+ SELECT ar.operationDated,
+ TRUE,
+ 'MB',
+ ar.concept,
+ IF(ar.debitCredit = 'credit' AND a.currencyFk = arc.currencyFk, ar.amount, NULL),
+ IF(ar.debitCredit = 'debit' AND a.currencyFk = arc.currencyFk, ar.amount, NULL),
+ a.id,
+ sa.supplierFk,
+ arc.warehouseFk,
+ ar.supplierAccountFk,
+ ar.calculatedCode,
+ IF(ar.debitCredit = 'credit' AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL),
+ IF(ar.debitCredit = 'debit' AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL),
+ account.myUser_getId()
+ FROM accountReconciliation ar
+ JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk
+ JOIN accounting a ON a.id = sa.accountingFk
+ LEFT JOIN till t ON t.calculatedCode = ar.calculatedCode
+ JOIN accountReconciliationConfig arc
+ WHERE t.id IS NULL;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/agencyVolume.sql b/db/routines/vn/procedures/agencyVolume.sql
new file mode 100644
index 0000000000..176b777266
--- /dev/null
+++ b/db/routines/vn/procedures/agencyVolume.sql
@@ -0,0 +1,38 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`()
+BEGIN
+/**
+ * Calculates and presents information on shipment and packaging volumes
+ * for agencies that are not owned for a specific period.
+ */
+ DECLARE vStarted DATETIME DEFAULT util.VN_CURDATE();
+ DECLARE vEnded DATETIME DEFAULT util.dayEnd(util.VN_CURDATE());
+
+ SELECT ag.id agency_id,
+ CONCAT(RPAD(c.country, 16,' _') ,' ',ag.name) Agencia,
+ COUNT(*) expediciones,
+ SUM(t.packages) Bultos,
+ SUM(tpe.boxes) Faltan
+ FROM ticket t
+ JOIN warehouse w ON w.id = t.warehouseFk
+ JOIN country c ON w.countryFk = c.id
+ JOIN address a ON a.id = t.addressFk
+ JOIN agencyMode am ON am.id = t.agencyModeFk
+ JOIN agency ag ON ag.id = am.agencyFk
+ JOIN (
+ SELECT sv.ticketFk,
+ CEIL(1000 * SUM(sv.volume) / vc.standardFlowerBox) boxes
+ FROM ticket t
+ JOIN saleVolume sv ON sv.ticketFk = t.id
+ JOIN volumeConfig vc
+ WHERE t.shipped BETWEEN vStarted AND vEnded
+ AND (t.packages IS NULL OR NOT t.packages)
+ GROUP BY t.id
+ ) tpe ON tpe.ticketFk = t.id
+ WHERE t.shipped BETWEEN vStarted AND vEnded
+ AND NOT ag.isOwn
+ GROUP BY ag.id
+ ORDER BY Agencia;
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/catalog_calcFromItem.sql b/db/routines/vn/procedures/catalog_calcFromItem.sql
index aeeaccb082..497fd107c5 100644
--- a/db/routines/vn/procedures/catalog_calcFromItem.sql
+++ b/db/routines/vn/procedures/catalog_calcFromItem.sql
@@ -20,7 +20,7 @@ BEGIN
ENGINE = MEMORY
SELECT vItemFk itemFk;
- CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
+ CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk, TRUE);
DROP TEMPORARY TABLE tmp.item;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/catalog_calculate.sql b/db/routines/vn/procedures/catalog_calculate.sql
index 6983287707..bb52020df9 100644
--- a/db/routines/vn/procedures/catalog_calculate.sql
+++ b/db/routines/vn/procedures/catalog_calculate.sql
@@ -1,5 +1,9 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`catalog_calculate`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`catalog_calculate`(
+ vLanded DATE,
+ vAddressFk INT,
+ vAgencyModeFk INT,
+ vShowExpiredZones BOOLEAN)
BEGIN
/**
* Calcula los articulos disponibles y sus precios
@@ -25,7 +29,7 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- CALL vn.zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, FALSE);
+ CALL vn.zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, vShowExpiredZones);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot(
diff --git a/db/routines/vn/procedures/catalog_componentCalculate.sql b/db/routines/vn/procedures/catalog_componentCalculate.sql
index 64bb74430b..1af0ff9ebe 100644
--- a/db/routines/vn/procedures/catalog_componentCalculate.sql
+++ b/db/routines/vn/procedures/catalog_componentCalculate.sql
@@ -10,7 +10,7 @@ BEGIN
* Calcula los componentes de los articulos de tmp.ticketLot
*
* @param vZoneFk para calcular el transporte
- * @param vAddressFk Consignatario
+ * @param vAddressFk Consignatario
* @param vShipped dia de salida del pedido
* @param vWarehouseFk warehouse de salida del pedido
* @table tmp.ticketLot (warehouseFk, available, itemFk, buyFk, zoneFk)
@@ -24,7 +24,20 @@ BEGIN
SELECT clientFk INTO vClientFK
FROM address
WHERE id = vAddressFk;
-
+
+ CREATE OR REPLACE TEMPORARY TABLE tSpecialPrice
+ (INDEX (itemFk))
+ ENGINE = MEMORY
+ SELECT * FROM (
+ SELECT *
+ FROM specialPrice
+ WHERE (clientFk = vClientFk OR clientFk IS NULL)
+ AND started <= vShipped
+ AND (ended >= vShipped OR ended IS NULL)
+ ORDER BY (clientFk = vClientFk) DESC, id DESC
+ LIMIT 10000000000000000000) t
+ GROUP BY itemFk;
+
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketComponentCalculate
(PRIMARY KEY (itemFk, warehouseFk))
ENGINE = MEMORY
@@ -36,7 +49,7 @@ BEGIN
IFNULL(pf.packing, GREATEST(b.grouping, b.packing)) packing,
IFNULL(pf.`grouping`, b.`grouping`) `grouping`,
ABS(IFNULL(pf.box, b.groupingMode)) groupingMode,
- tl.buyFk,
+ tl.buyFk,
i.typeFk,
IF(i.hasKgPrice, b.weight / b.packing, NULL) weightGrouping
FROM tmp.ticketLot tl
@@ -44,8 +57,7 @@ BEGIN
JOIN item i ON i.id = tl.itemFk
JOIN itemType it ON it.id = i.typeFk
JOIN itemCategory ic ON ic.id = it.categoryFk
- LEFT JOIN specialPrice sp ON sp.itemFk = i.id
- AND sp.clientFk = vClientFk
+ LEFT JOIN tSpecialPrice sp ON sp.itemFk = i.id
LEFT JOIN (
SELECT * FROM (
SELECT pf.itemFk,
@@ -63,7 +75,7 @@ BEGIN
LIMIT 10000000000000000000
) tpf
GROUP BY tpf.itemFk, tpf.warehouseFk
- ) pf ON pf.itemFk = tl.itemFk
+ ) pf ON pf.itemFk = tl.itemFk
AND pf.warehouseFk = tl.warehouseFk
WHERE b.buyingValue + b.freightValue + b.packageValue + b.comissionValue > 0.01
AND ic.merchandise
@@ -95,10 +107,10 @@ BEGIN
FROM tmp.ticketComponent tc
JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tc.itemFk AND tcc.warehouseFk = tc.warehouseFk
GROUP BY tc.itemFk, warehouseFk;
-
+
-- RECOBRO
INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
- SELECT tcb.warehouseFk, tcb.itemFk, c2.id,
+ SELECT tcb.warehouseFk, tcb.itemFk, c2.id,
ROUND(tcb.base *
LEAST(
MAX(GREATEST(IFNULL(cr.priceIncreasing,0),
@@ -129,29 +141,29 @@ BEGIN
ROUND(base * wm.pricesModifierRate, 3) manaAuto
FROM tmp.ticketComponentBase tcb
JOIN `client` c on c.id = vClientFk
- JOIN workerMana wm ON c.salesPersonFk = wm.workerFk
+ JOIN workerMana wm ON c.salesPersonFk = wm.workerFk
JOIN vn.component c2 ON c2.code = 'autoMana'
WHERE wm.isPricesModifierActivated
HAVING manaAuto <> 0;
-
+
-- Precios especiales
INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
SELECT tcb.warehouseFk,
tcb.itemFk,
c2.id,
GREATEST(
- IFNULL(ROUND(tcb.base * c2.tax, 4), 0),
+ IFNULL(ROUND(tcb.base * c2.tax, 4), 0),
IF(i.hasMinPrice, i.minPrice,0) - tcc.rate3
) cost
FROM tmp.ticketComponentBase tcb
JOIN vn.component c2 ON c2.code = 'lastUnitsDiscount'
- JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tcb.itemFk AND tcc.warehouseFk = tcb.warehouseFk
- LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
+ JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tcb.itemFk AND tcc.warehouseFk = tcb.warehouseFk
+ LEFT JOIN tSpecialPrice sp ON sp.itemFk = tcc.itemFk
JOIN vn.item i ON i.id = tcb.itemFk
WHERE sp.value IS NULL
AND i.supplyResponseFk IS NULL;
- -- Individual
+ -- Individual
INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
SELECT tcb.warehouseFk,
tcb.itemFk,
@@ -162,14 +174,14 @@ BEGIN
JOIN vn.client c ON c.id = vClientFk
JOIN vn.businessType bt ON bt.code = c.businessTypeFk
WHERE bt.code = 'individual';
-
+
-- Venta por paquetes
INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
- SELECT tcc.warehouseFk, tcc.itemFk, c2.id, tcc.rate2 - tcc.rate3
+ SELECT tcc.warehouseFk, tcc.itemFk, c2.id, tcc.rate2 - tcc.rate3
FROM tmp.ticketComponentCalculate tcc
JOIN vn.component c2 ON c2.code = 'salePerPackage'
JOIN buy b ON b.id = tcc.buyFk
- LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
+ LEFT JOIN tSpecialPrice sp ON sp.itemFk = tcc.itemFk
WHERE sp.value IS NULL;
CREATE OR REPLACE TEMPORARY TABLE tmp.`zone` (INDEX (id))
@@ -177,7 +189,7 @@ BEGIN
SELECT vZoneFk id;
CALL zone_getOptionsForShipment(vShipped, TRUE);
-
+
-- Reparto
INSERT INTO tmp.ticketComponent
SELECT tcc.warehouseFK,
@@ -191,7 +203,7 @@ BEGIN
JOIN agencyMode am ON am.id = z.agencyModeFk
JOIN vn.volumeConfig vc
JOIN vn.component c2 ON c2.code = 'delivery'
- LEFT JOIN itemCost ic ON ic.warehouseFk = tcc.warehouseFk
+ LEFT JOIN itemCost ic ON ic.warehouseFk = tcc.warehouseFk
AND ic.itemFk = tcc.itemFk
HAVING cost <> 0;
@@ -208,7 +220,7 @@ BEGIN
sp.value - SUM(tcc.cost) sumCost
FROM tmp.ticketComponentCopy tcc
JOIN component c ON c.id = tcc.componentFk
- JOIN specialPrice sp ON sp.clientFk = vClientFK AND sp.itemFk = tcc.itemFk
+ JOIN tSpecialPrice sp ON sp.itemFk = tcc.itemFk
JOIN vn.component c2 ON c2.code = 'specialPrices'
WHERE c.classRate IS NULL
AND tcc.warehouseFk = vWarehouseFk
@@ -244,9 +256,9 @@ BEGIN
CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) price,
CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) / weightGrouping priceKg
FROM tmp.ticketComponentCalculate tcc
- JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
+ JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
AND tcs.warehouseFk = tcc.warehouseFk
- WHERE IFNULL(tcs.classRate, 1) = 1
+ WHERE IFNULL(tcs.classRate, 1) = 1
AND tcc.groupingMode < 2 AND (tcc.packing > tcc.`grouping` or tcc.groupingMode = 0)
GROUP BY tcs.warehouseFk, tcs.itemFk;
@@ -283,12 +295,13 @@ BEGIN
SELECT * FROM tmp.ticketComponentRate ORDER BY price LIMIT 10000000000000000000
) t
GROUP BY itemFk, warehouseFk, `grouping`;
-
+
DROP TEMPORARY TABLE
tmp.ticketComponentCalculate,
tmp.ticketComponentSum,
tmp.ticketComponentBase,
tmp.ticketComponentRate,
- tmp.ticketComponentCopy;
+ tmp.ticketComponentCopy,
+ tSpecialPrice;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/clean.sql b/db/routines/vn/procedures/clean.sql
index 5ffb03f6d9..ed1569935e 100644
--- a/db/routines/vn/procedures/clean.sql
+++ b/db/routines/vn/procedures/clean.sql
@@ -12,7 +12,7 @@ BEGIN
DECLARE v1Years DATE DEFAULT util.VN_CURDATE() - INTERVAL 1 YEAR;
DECLARE v2Years DATE DEFAULT util.VN_CURDATE() - INTERVAL 2 YEAR;
DECLARE v4Years DATE DEFAULT util.VN_CURDATE() - INTERVAL 4 YEAR;
- DECLARE v5Years DATE DEFAULT util.VN_CURDATE() - INTERVAL 5 YEAR;
+ DECLARE v5Years DATE DEFAULT util.VN_CURDATE() - INTERVAL 5 YEAR;
DECLARE vTrashId VARCHAR(15);
DECLARE vCompanyBlk INT;
@@ -30,8 +30,9 @@ BEGIN
DELETE IGNORE FROM expedition WHERE created < v26Months;
DELETE FROM sms WHERE created < v18Months;
DELETE FROM saleTracking WHERE created < v1Years;
+ DELETE FROM productionError WHERE dated < v1Years;
DELETE FROM ticketTracking WHERE created < v18Months;
- DELETE tobs FROM ticketObservation tobs
+ DELETE tobs FROM ticketObservation tobs
JOIN ticket t ON tobs.ticketFk = t.id
WHERE t.shipped < v5Years;
DELETE sc.* FROM saleCloned sc JOIN sale s ON s.id = sc.saleClonedFk JOIN ticket t ON t.id = s.ticketFk WHERE t.shipped < v1Years;
@@ -113,12 +114,12 @@ BEGIN
FROM travel t
LEFT JOIN entry e ON e.travelFk = t.id
WHERE t.shipped < v3Months AND e.travelFk IS NULL;
-
+
UPDATE dms d
- JOIN dmsType dt ON dt.id = d.dmsTypeFk
- SET d.dmsTypeFk = vTrashId
+ JOIN dmsType dt ON dt.id = d.dmsTypeFk
+ SET d.dmsTypeFk = vTrashId
WHERE created < util.VN_CURDATE() - INTERVAL dt.monthToDelete MONTH;
-
+
-- borrar entradas sin compras
CREATE OR REPLACE TEMPORARY TABLE tEntryToDelete
SELECT e.*
@@ -136,7 +137,7 @@ BEGIN
CREATE OR REPLACE TEMPORARY TABLE tRouteToDelete
SELECT *
FROM route r
- WHERE created < v4Years;
+ WHERE created < v4Years;
UPDATE tRouteToDelete tmp
JOIN dms d ON d.id = tmp.gestdocFk
@@ -180,7 +181,7 @@ BEGIN
DELETE FROM mail WHERE creationDate < v2Months;
DELETE FROM split WHERE dated < v18Months;
DELETE FROM remittance WHERE dated < v18Months;
-
+
CREATE OR REPLACE TEMPORARY TABLE tTicketDelete
SELECT DISTINCT tl.originFk ticketFk
FROM ticketLog tl
@@ -189,11 +190,11 @@ BEGIN
FROM ticket t
JOIN ticketLog tl ON tl.originFk = t.id
LEFT JOIN ticketWeekly tw ON tw.ticketFk = t.id
- WHERE t.shipped BETWEEN '2000-01-01' AND '2000-12-31'
+ WHERE t.shipped BETWEEN '2000-01-01' AND '2000-12-31'
AND t.isDeleted
AND tw.ticketFk IS NULL
GROUP BY t.id
- ) sub ON sub.ids = tl.id
+ ) sub ON sub.ids = tl.id
WHERE tl.creationDate <= v2Months;
DELETE t
FROM ticket t
diff --git a/db/routines/vn/procedures/collection_assign.sql b/db/routines/vn/procedures/collection_assign.sql
index 6d31fbc8f7..49b4eb7bb4 100644
--- a/db/routines/vn/procedures/collection_assign.sql
+++ b/db/routines/vn/procedures/collection_assign.sql
@@ -1,8 +1,8 @@
-DELIMITER $$
+DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_assign`(
vUserFk INT,
OUT vCollectionFk INT
-)
+)
proc:BEGIN
/**
* Comprueba si existen colecciones libres que se ajustan
@@ -15,6 +15,13 @@ proc:BEGIN
DECLARE vHasTooMuchCollections BOOL;
DECLARE vLockTime INT DEFAULT 15;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ DO RELEASE_LOCK('collection_assign');
+
+ RESIGNAL;
+ END;
+
-- Si hay colecciones sin terminar, sale del proceso
CALL collection_get(vUserFk);
@@ -84,5 +91,5 @@ proc:BEGIN
WHERE id = vCollectionFk;
DO RELEASE_LOCK('collection_assign');
-END$$
-DELIMITER ;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/collection_new.sql b/db/routines/vn/procedures/collection_new.sql
index d91c63c249..1292707af0 100644
--- a/db/routines/vn/procedures/collection_new.sql
+++ b/db/routines/vn/procedures/collection_new.sql
@@ -28,6 +28,7 @@ proc:BEGIN
DECLARE vLockName VARCHAR(215);
DECLARE vLockTime INT DEFAULT 15;
DECLARE vFreeWagonFk INT;
+
DECLARE c1 CURSOR FOR
SELECT ticketFk, `lines`, m3
FROM tmp.productionBuffer
@@ -44,13 +45,21 @@ proc:BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ IF vLockName IS NOT NULL THEN
+ DO RELEASE_LOCK(vLockName);
+ END IF;
+
+ RESIGNAL;
+ END;
+
SELECT pc.ticketTrolleyMax * o.numberOfWagons,
pc.hasUniqueCollectionTime,
w.code,
o.warehouseFk,
o.itemPackingTypeFk,
st.code,
- CONCAT('collection_new', o.warehouseFk, ':',o.itemPackingTypeFk),
o.numberOfWagons,
o.trainFk,
o.linesLimit,
@@ -61,7 +70,6 @@ proc:BEGIN
vWarehouseFk,
vItemPackingTypeFk,
vStateFk,
- vLockName,
vWagons,
vTrainFk,
vLinesLimit,
@@ -71,6 +79,12 @@ proc:BEGIN
JOIN state st ON st.`code` = 'ON_PREPARATION'
JOIN operator o ON o.workerFk = vUserFk;
+ SET vLockName = CONCAT_WS('/',
+ 'collection_new',
+ vWarehouseFk,
+ vItemPackingTypeFk
+ );
+
IF NOT GET_LOCK(vLockName, vLockTime) THEN
LEAVE proc;
END IF;
@@ -205,9 +219,11 @@ proc:BEGIN
UPDATE tmp.productionBuffer pb
JOIN (
SELECT SUM(litros) liters,
- @lines:= COUNT(*) + @lines `lines`,
+ @lines:= COUNT(*) + @lines,
+ COUNT(*) `lines`,
MAX(i.`size`) height,
- @volume := SUM(sv.volume) + @volume volume
+ @volume := SUM(sv.volume) + @volume,
+ SUM(sv.volume) volume
FROM saleVolume sv
JOIN sale s ON s.id = sv.saleFk
JOIN item i ON i.id = s.itemFk
@@ -250,13 +266,13 @@ proc:BEGIN
UPDATE tTrain
SET ticketFk = vFirstTicketFk
WHERE wagon = vFreeWagonFk;
-
+
-- Se anulan el resto de carros libres para que sólo uno lleve un pedido excesivo
DELETE tt.*
FROM tTrain tt
LEFT JOIN (
- SELECT DISTINCT wagon
- FROM tTrain
+ SELECT DISTINCT wagon
+ FROM tTrain
WHERE ticketFk IS NOT NULL
) nn ON nn.wagon = tt.wagon
WHERE nn.wagon IS NULL;
@@ -271,7 +287,7 @@ proc:BEGIN
FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
IF vDone THEN
LEAVE read_loop;
- END IF;
+ END IF;
END IF;
END LOOP;
CLOSE c1;
diff --git a/db/routines/vn/procedures/company_getSuppliersDebt.sql b/db/routines/vn/procedures/company_getSuppliersDebt.sql
index f6bfc229d8..f4814abcc4 100644
--- a/db/routines/vn/procedures/company_getSuppliersDebt.sql
+++ b/db/routines/vn/procedures/company_getSuppliersDebt.sql
@@ -7,81 +7,81 @@ BEGIN
* @param vSelf company id
* @param vMonthAgo time interval to be consulted
*/
- DECLARE vStartingDate DATETIME DEFAULT TIMESTAMPADD (MONTH,- vMonthsAgo,util.VN_CURDATE());
- DECLARE vCurrencyEuroFk INT;
- DECLARE vStartDate DATE;
- DECLARE vInvalidBalances DOUBLE;
+ DECLARE vStartingDate DATETIME DEFAULT TIMESTAMPADD (MONTH,- vMonthsAgo,util.VN_CURDATE());
+ DECLARE vCurrencyEuroFk INT;
+ DECLARE vStartDate DATE;
+ DECLARE vInvalidBalances DOUBLE;
- SELECT dated, invalidBalances INTO vStartDate, vInvalidBalances FROM supplierDebtConfig;
- SELECT id INTO vCurrencyEuroFk FROM currency WHERE code = 'EUR';
+ SELECT dated, invalidBalances INTO vStartDate, vInvalidBalances FROM supplierDebtConfig;
+ SELECT id INTO vCurrencyEuroFk FROM currency WHERE code = 'EUR';
- DROP TEMPORARY TABLE IF EXISTS tOpeningBalances;
- CREATE TEMPORARY TABLE tOpeningBalances (
- supplierFk INT NOT NULL,
- companyFk INT NOT NULL,
- openingBalances DOUBLE NOT NULL,
- closingBalances DOUBLE NOT NULL,
- currencyFk INT NOT NULL,
- PRIMARY KEY (supplierFk, companyFk, currencyFk)
- ) ENGINE = MEMORY;
+ DROP TEMPORARY TABLE IF EXISTS tOpeningBalances;
+ CREATE TEMPORARY TABLE tOpeningBalances (
+ supplierFk INT NOT NULL,
+ companyFk INT NOT NULL,
+ openingBalances DOUBLE NOT NULL,
+ closingBalances DOUBLE NOT NULL,
+ currencyFk INT NOT NULL,
+ PRIMARY KEY (supplierFk, companyFk, currencyFk)
+ ) ENGINE = MEMORY;
- -- Calculates the opening and closing balance for each supplier
- INSERT INTO tOpeningBalances
- SELECT supplierFk,
- companyFk,
- SUM(amount * isBeforeStarting) AS openingBalances,
- SUM(amount) closingBalances,
- currencyFk
- FROM (
- SELECT p.supplierFk,
+ -- Calculates the opening and closing balance for each supplier
+ INSERT INTO tOpeningBalances
+ SELECT supplierFk,
+ companyFk,
+ SUM(amount * isBeforeStarting) AS openingBalances,
+ SUM(amount) closingBalances,
+ currencyFk
+ FROM (
+ SELECT p.supplierFk,
p.companyFk,
IF (p.currencyFk = vCurrencyEuroFk, p.amount, p.divisa) AS amount,
p.dueDated < vStartingDate isBeforeStarting,
p.currencyFk
- FROM payment p
- WHERE p.received > vStartDate
- AND p.companyFk = vSelf
- UNION ALL
- SELECT r.supplierFk,
+ FROM payment p
+ WHERE p.received > vStartDate
+ AND p.companyFk = vSelf
+ UNION ALL
+ SELECT r.supplierFk,
r.companyFk,
- IF (r.currencyFk = vCurrencyEuroFk, rv.amount, rv.foreignValue) AS Total,
rv.dueDated < vStartingDate isBeforeStarting,
- r.currencyFk
- FROM invoiceIn r
- INNER JOIN invoiceInDueDay rv ON r.id = rv.invoiceInFk
- WHERE r.issued > vStartDate
- AND r.isBooked
- AND r.companyFk = vSelf
- ) sub GROUP BY companyFk, supplierFk, currencyFk;
+ r.currencyFk
+ FROM invoiceIn r
+ INNER JOIN invoiceInDueDay rv ON r.id = rv.invoiceInFk
+ WHERE r.issued > vStartDate
+ AND r.isBooked
+ AND r.companyFk = vSelf
+ ) sub GROUP BY companyFk, supplierFk, currencyFk;
- DROP TEMPORARY TABLE IF EXISTS tPendingDuedates;
- CREATE TEMPORARY TABLE tPendingDuedates (
- id INT auto_increment,
+ DROP TEMPORARY TABLE IF EXISTS tPendingDuedates;
+ CREATE TEMPORARY TABLE tPendingDuedates (
+ id INT auto_increment,
expirationId INT,
- dated DATE,
- supplierFk INT NOT NULL,
- companyFk INT NOT NULL,
- amount DECIMAL(10, 2) NOT NULL,
- currencyFk INT NOT NULL,
- pending DECIMAL(10, 2) DEFAULT 0,
- balance DECIMAL(10, 2) DEFAULT 0,
- endingBalance DECIMAL(10, 2) DEFAULT 0,
- isPayment BOOLEAN,
- isReconciled BOOLEAN,
- PRIMARY KEY (id),
- INDEX (supplierFk, companyFk, currencyFk)
- ) ENGINE = MEMORY;
+ dated DATE,
+ supplierFk INT NOT NULL,
+ companyFk INT NOT NULL,
+ amount DECIMAL(10, 2) NOT NULL,
+ currencyFk INT NOT NULL,
+ pending DECIMAL(10, 2) DEFAULT 0,
+ balance DECIMAL(10, 2) DEFAULT 0,
+ endingBalance DECIMAL(10, 2) DEFAULT 0,
+ isPayment BOOLEAN,
+ isReconciled BOOLEAN,
+ PRIMARY KEY (id),
+ INDEX (supplierFk, companyFk, currencyFk)
+ ) ENGINE = MEMORY;
- INSERT INTO tPendingDuedates (
- expirationId,
- dated,
- supplierFk,
- companyFk,
- amount,
- currencyFk,
- isPayment,
- isReconciled
- )SELECT p.id,
+ INSERT INTO tPendingDuedates (
+ expirationId,
+ dated,
+ supplierFk,
+ companyFk,
+ amount,
+ currencyFk,
+ isPayment,
+ isReconciled
+ )SELECT p.id,
p.dueDated,
p.supplierFk,
p.companyFk,
@@ -100,80 +100,80 @@ BEGIN
-IF (r.currencyFk = vCurrencyEuroFk, rv.amount, rv.foreignValue),
r.currencyFk,
FALSE isPayment,
- TRUE
- FROM invoiceIn r
+ TRUE
+ FROM invoiceIn r
LEFT JOIN tOpeningBalances si ON r.companyFk = si.companyFk
AND r.supplierFk = si.supplierFk
- AND r.currencyFk = si.currencyFk
+ AND r.currencyFk = si.currencyFk
JOIN invoiceInDueDay rv ON r.id = rv.invoiceInFk
WHERE rv.dueDated >= vStartingDate
AND (si.closingBalances IS NULL OR si.closingBalances <> 0)
AND r.isBooked
AND r.companyFk = vSelf
ORDER BY supplierFk, companyFk, companyFk, dueDated, isPayment DESC, id;
- -- Now, we calculate the outstanding amount for each receipt in descending order
- SET @risk := 0.0;
- SET @supplier := 0.0;
- SET @company := 0.0;
- SET @moneda := 0.0;
- SET @pending := 0.0;
- SET @day := util.VN_CURDATE();
+ -- Now, we calculate the outstanding amount for each receipt in descending order
+ SET @risk := 0.0;
+ SET @supplier := 0.0;
+ SET @company := 0.0;
+ SET @moneda := 0.0;
+ SET @pending := 0.0;
+ SET @day := util.VN_CURDATE();
- UPDATE tPendingDuedates vp
- LEFT JOIN tOpeningBalances si ON vp.companyFk = si.companyFk
- AND vp.supplierFk = si.supplierFk
- AND vp.currencyFk = si.currencyFk
- SET vp.balance = @risk := (
- IF (
- @company <> vp.companyFk
- OR @supplier <> vp.supplierFk
- OR @moneda <> vp.currencyFk,
- IFNULL(si.openingBalances, 0),
- @risk
- ) +
- vp.amount
- ),
- -- if there is a change of company or supplier or currency, the balance is reset
- vp.pending = @pending := IF (
- @company <> vp.companyFk
- OR @supplier <> vp.supplierFk
- OR @moneda <> vp.currencyFk
- OR @day <> vp.dated,
- vp.amount * (NOT vp.isPayment),
- @pending + vp.amount
- ),
- vp.companyFk = @company := vp.companyFk,
- vp.supplierFk = @supplier := vp.supplierFk,
- vp.currencyFk = @moneda := vp.currencyFk,
- vp.dated = @day := vp.dated,
- vp.balance = @risk,
- vp.pending = @pending;
+ UPDATE tPendingDuedates vp
+ LEFT JOIN tOpeningBalances si ON vp.companyFk = si.companyFk
+ AND vp.supplierFk = si.supplierFk
+ AND vp.currencyFk = si.currencyFk
+ SET vp.balance = @risk := (
+ IF (
+ @company <> vp.companyFk
+ OR @supplier <> vp.supplierFk
+ OR @moneda <> vp.currencyFk,
+ IFNULL(si.openingBalances, 0),
+ @risk
+ ) +
+ vp.amount
+ ),
+ -- if there is a change of company or supplier or currency, the balance is reset
+ vp.pending = @pending := IF (
+ @company <> vp.companyFk
+ OR @supplier <> vp.supplierFk
+ OR @moneda <> vp.currencyFk
+ OR @day <> vp.dated,
+ vp.amount * (NOT vp.isPayment),
+ @pending + vp.amount
+ ),
+ vp.companyFk = @company := vp.companyFk,
+ vp.supplierFk = @supplier := vp.supplierFk,
+ vp.currencyFk = @moneda := vp.currencyFk,
+ vp.dated = @day := vp.dated,
+ vp.balance = @risk,
+ vp.pending = @pending;
- CREATE OR REPLACE TEMPORARY TABLE tRowsToDelete ENGINE = MEMORY
- SELECT expirationId,
- dated,
- supplierFk,
- companyFk,
- currencyFk,
- balance
- FROM tPendingDuedates
- WHERE balance < vInvalidBalances
- AND balance > - vInvalidBalances;
-
- DELETE vp.*
- FROM tPendingDuedates vp
- JOIN tRowsToDelete rd ON (
- vp.dated < rd.dated
- OR (vp.dated = rd.dated AND vp.expirationId <= rd.expirationId)
- )
- AND vp.supplierFk = rd.supplierFk
- AND vp.companyFk = rd.companyFk
- AND vp.currencyFk = rd.currencyFk
- WHERE vp.isPayment = FALSE;
+ CREATE OR REPLACE TEMPORARY TABLE tRowsToDelete ENGINE = MEMORY
+ SELECT expirationId,
+ dated,
+ supplierFk,
+ companyFk,
+ currencyFk,
+ balance
+ FROM tPendingDuedates
+ WHERE balance < vInvalidBalances
+ AND balance > - vInvalidBalances;
- SELECT vp.expirationId,
- vp.dated,
- vp.supplierFk,
+ DELETE vp.*
+ FROM tPendingDuedates vp
+ JOIN tRowsToDelete rd ON (
+ vp.dated < rd.dated
+ OR (vp.dated = rd.dated AND vp.expirationId <= rd.expirationId)
+ )
+ AND vp.supplierFk = rd.supplierFk
+ AND vp.companyFk = rd.companyFk
+ AND vp.currencyFk = rd.currencyFk
+ WHERE NOT vp.isPayment;
+
+ SELECT vp.expirationId,
+ vp.dated,
+ vp.supplierFk,
vp.companyFk,
vp.currencyFk,
vp.amount,
@@ -183,15 +183,19 @@ BEGIN
vp.isPayment,
vp.isReconciled,
vp.endingBalance,
- cr.amount clientRiskAmount
- FROM tPendingDuedates vp
- LEFT JOIN supplier s ON s.id = vp.supplierFk
- LEFT JOIN client c ON c.fi = s.nif
- LEFT JOIN clientRisk cr ON cr.clientFk = c.id
- AND cr.companyFk = vp.companyFk;
-
- DROP TEMPORARY TABLE tOpeningBalances;
- DROP TEMPORARY TABLE tPendingDuedates;
- DROP TEMPORARY TABLE tRowsToDelete;
+ cr.amount clientRiskAmount,
+ co.CEE
+ FROM tPendingDuedates vp
+ LEFT JOIN supplier s ON s.id = vp.supplierFk
+ LEFT JOIN client c ON c.fi = s.nif
+ LEFT JOIN clientRisk cr ON cr.clientFk = c.id
+ LEFT JOIN supplierAccount sa ON sa.supplierFk = s.id
+ LEFT JOIN bankEntity be ON be.id = sa.bankEntityFk
+ LEFT JOIN country co ON co.id = be.countryFk
+ AND cr.companyFk = vp.companyFk;
+
+ DROP TEMPORARY TABLE tOpeningBalances;
+ DROP TEMPORARY TABLE tPendingDuedates;
+ DROP TEMPORARY TABLE tRowsToDelete;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/creditInsurance_getRisk.sql b/db/routines/vn/procedures/creditInsurance_getRisk.sql
new file mode 100644
index 0000000000..8028dc5fb6
--- /dev/null
+++ b/db/routines/vn/procedures/creditInsurance_getRisk.sql
@@ -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.client_list
+ (PRIMARY KEY (Id_Cliente))
+ ENGINE = MEMORY
+ SELECT * FROM (
+ SELECT cc.client Id_Cliente, 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 Id_Cliente;
+
+ CALL vn2008.risk_vs_client_list(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,
+ ci.grade,
+ c2.country
+ FROM tmp.client_list ci
+ LEFT JOIN tmp.risk r ON r.Id_Cliente = ci.Id_Cliente
+ JOIN client c ON c.id = ci.Id_Cliente
+ JOIN bs.clientAnnualConsumption cac ON c.id = cac.clientFk
+ JOIN country c2 ON c2.id = c.countryFk
+ GROUP BY c.id;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp.risk;
+ DROP TEMPORARY TABLE IF EXISTS tmp.client_list;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/duaInvoiceInBooking.sql b/db/routines/vn/procedures/duaInvoiceInBooking.sql
index 26580907c5..f95e836b12 100644
--- a/db/routines/vn/procedures/duaInvoiceInBooking.sql
+++ b/db/routines/vn/procedures/duaInvoiceInBooking.sql
@@ -33,6 +33,7 @@ BEGIN
ii.operated = IFNULL(ii.operated,d.operated),
ii.issued = IFNULL(ii.issued,d.issued),
ii.bookEntried = IFNULL(ii.bookEntried,d.bookEntried),
+ e.isBooked = TRUE,
e.isConfirmed = TRUE
WHERE d.id = vDuaFk;
diff --git a/db/routines/vn/procedures/entry_checkBooked.sql b/db/routines/vn/procedures/entry_checkBooked.sql
new file mode 100644
index 0000000000..3ca8c96423
--- /dev/null
+++ b/db/routines/vn/procedures/entry_checkBooked.sql
@@ -0,0 +1,22 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_checkBooked`(
+ vSelf INT
+)
+BEGIN
+/**
+ * Comprueba si una entrada está contabilizada,
+ * y si lo está retorna un throw.
+ *
+ * @param vSelf Id de entrada
+ */
+ DECLARE vIsBooked BOOL;
+
+ SELECT isBooked INTO vIsBooked
+ FROM `entry`
+ WHERE id = vSelf;
+
+ IF vIsBooked AND NOT @isModeInventory THEN
+ CALL util.throw('Entry is already booked');
+ END IF;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/inventoryMake.sql b/db/routines/vn/procedures/inventoryMake.sql
index ed6a7fa436..a40093679f 100644
--- a/db/routines/vn/procedures/inventoryMake.sql
+++ b/db/routines/vn/procedures/inventoryMake.sql
@@ -114,7 +114,7 @@ BEGIN
quantity int(11) DEFAULT '0',
buyingValue decimal(10,4) DEFAULT '0.0000',
freightValue decimal(10,3) DEFAULT '0.000',
- packing int(11) DEFAULT '0',
+ packing int(11) DEFAULT '1',
`grouping` smallint(5) unsigned NOT NULL DEFAULT '1',
groupingMode tinyint(4) NOT NULL DEFAULT 0 ,
comissionValue decimal(10,3) DEFAULT '0.000',
diff --git a/db/routines/vn/procedures/invoiceInTax_recalc.sql b/db/routines/vn/procedures/invoiceInTax_recalc.sql
index 3b5ce52471..4e20b01d36 100644
--- a/db/routines/vn/procedures/invoiceInTax_recalc.sql
+++ b/db/routines/vn/procedures/invoiceInTax_recalc.sql
@@ -10,20 +10,15 @@ BEGIN
* @param vInvoiceInFk Id de factura recibida
*/
DECLARE vRate DOUBLE DEFAULT 1;
- DECLARE vDated DATE;
- DECLARE vExpenseFk INT;
+ DECLARE vExpenseFk VARCHAR(10);
- SELECT MAX(rr.dated) INTO vDated
+ SELECT `value` INTO vRate
FROM referenceRate rr
JOIN invoiceIn ii ON ii.id = vInvoiceInFk
WHERE rr.dated <= ii.issued
- AND rr.currencyFk = ii.currencyFk;
-
- IF vDated THEN
- SELECT `value` INTO vRate
- FROM referenceRate
- WHERE dated = vDated;
- END IF;
+ AND rr.currencyFk = ii.currencyFk
+ ORDER BY dated DESC
+ LIMIT 1;
DELETE FROM invoiceInTax WHERE invoiceInFk = vInvoiceInFk;
diff --git a/db/routines/vn/procedures/invoiceIn_add.sql b/db/routines/vn/procedures/invoiceIn_add.sql
deleted file mode 100644
index 0898d68100..0000000000
--- a/db/routines/vn/procedures/invoiceIn_add.sql
+++ /dev/null
@@ -1,234 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `sage`.`invoiceIn_add`(vInvoiceInFk INT, vXDiarioFk INT)
-BEGIN
-/**
- * Traslada la info de contabilidad relacionada con las facturas recibidas
- *
- * @vInvoiceInFk Factura recibida
- * @vXDiarioFk Id tabla XDiario
- */
- DECLARE vInvoiceInOriginalFk INT;
- DECLARE vDone BOOL DEFAULT FALSE;
- DECLARE vBase DOUBLE;
- DECLARE vVat DOUBLE;
- DECLARE vRate DOUBLE;
- DECLARE vTransactionCode INT;
- DECLARE vCounter INT DEFAULT 0;
- DECLARE vTransactionCodeOld INT;
- DECLARE vTaxCode INT;
- DECLARE vTaxCodeOld INT;
- DECLARE vOperationCode VARCHAR(1);
- DECLARE vIsIntracommunity BOOL DEFAULT FALSE;
- DECLARE vSerialDua VARCHAR(1) DEFAULT 'D';
- DECLARE vInvoiceTypeReceived VARCHAR(1);
- DECLARE vInvoiceTypeInformative VARCHAR(1);
- DECLARE vIsInformativeExportation BOOL DEFAULT FALSE;
-
- DECLARE vCursor CURSOR FOR
- SELECT it.taxableBase,
- CAST((( it.taxableBase / 100) * t.PorcentajeIva) AS DECIMAL (10,2)),
- t.PorcentajeIva,
- it.transactionTypeSageFk,
- it.taxTypeSageFk,
- tty.isIntracommunity,
- tt.ClaveOperacionDefecto
- FROM vn.invoiceIn i
- JOIN vn.invoiceInTax it ON it.InvoiceInFk = i.id
- JOIN TiposIva t ON t.CodigoIva = it.taxTypeSageFk
- JOIN taxType tty ON tty.id = t.CodigoIva
- JOIN TiposTransacciones tt ON tt.CodigoTransaccion = it.transactionTypeSageFk
- LEFT JOIN vn.dua d ON d.id = vInvoiceInFk
- WHERE i.id = vInvoiceInFk
- AND d.id IS NULL;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
-
- DELETE FROM movContaIVA
- WHERE id = vXDiarioFk;
-
- SELECT codeSage INTO vInvoiceTypeReceived
- FROM invoiceType WHERE code ='received';
-
- SELECT codeSage INTO vInvoiceTypeInformative
- FROM invoiceType WHERE code ='informative';
-
- INSERT INTO movContaIVA(id, LibreA1)
- VALUES (vXDiarioFk, vInvoiceInFk);
-
- OPEN vCursor;
-
- l: LOOP
- FETCH vCursor INTO vBase,
- vVat,
- vRate,
- vTransactionCode,
- vTaxCode,
- vIsIntracommunity,
- vOperationCode;
-
- IF vDone THEN
- LEAVE l;
- END IF;
-
- SET vTransactionCodeOld = vTransactionCode;
- SET vTaxCodeOld = vTaxCode;
-
- IF vOperationCode IS NOT NULL THEN
- UPDATE movContaIVA
- SET ClaveOperacionFactura = vOperationCode
- WHERE id = vXDiarioFk;
- END IF;
-
- SET vCounter = vCounter + 1;
- CASE vCounter
- WHEN 1 THEN
- UPDATE movContaIVA
- SET BaseIva1 = vBase,
- PorIva1 = vRate,
- CuotaIva1 = vVat,
- CodigoTransaccion1 = vTransactionCode,
- CodigoIva1 = vTaxCode
- WHERE id = vXDiarioFk;
-
- WHEN 2 THEN
- UPDATE movContaIVA
- SET BaseIva2 = vBase,
- PorIva2 = vRate,
- CuotaIva2 = vVat,
- CodigoTransaccion2 = vTransactionCode,
- CodigoIva2 = vTaxCode
- WHERE id = vXDiarioFk;
- WHEN 3 THEN
- UPDATE movContaIVA
- SET BaseIva3 = vBase,
- PorIva3 = vRate,
- CuotaIva3 = vVat,
- CodigoTransaccion3 = vTransactionCode,
- CodigoIva3 = vTaxCode
- WHERE id = vXDiarioFk;
- WHEN 4 THEN
- UPDATE movContaIVA
- SET BaseIva4 = vBase,
- PorIva4 = vRate,
- CuotaIva4 = vVat,
- CodigoTransaccion4 = vTransactionCode,
- CodigoIva4 = vTaxCode
- WHERE id = vXDiarioFk;
- ELSE
- SELECT vXDiarioFk INTO vXDiarioFk;
- END CASE;
-
- IF vIsIntracommunity THEN
- UPDATE movContaIVA
- SET Intracomunitaria = TRUE
- WHERE id = vXDiarioFk;
- END IF;
-
- SET vTransactionCodeOld = vTransactionCode;
- SET vTaxCodeOld = vTaxCode;
-
- END LOOP;
-
- CLOSE vCursor;
-
- SELECT d.ASIEN AND x.ASIEN IS NULL INTO vIsInformativeExportation
- FROM vn.dua d
- LEFT JOIN vn.XDiario x ON x.ASIEN = d.ASIEN
- AND x.SERIE = vSerialDua COLLATE utf8mb3_unicode_ci
- WHERE d.ASIEN = (
- SELECT ASIEN
- FROM vn.XDiario
- WHERE id = vXDiarioFk)
- LIMIT 1;
-
- UPDATE movContaIVA mci
- JOIN tmp.invoiceIn ii ON ii.id = vInvoiceInFk
- JOIN vn.XDiario x ON x.id = mci.id
- LEFT JOIN tmp.invoiceDua id ON id.id = mci.id
- JOIN vn.supplier s ON s.id = ii.supplierFk
- JOIN Naciones n ON n.countryFk = s.countryFk
- SET mci.CodigoDivisa = ii.currencyFk,
- mci.Año = YEAR(ii.issued),
- mci.Serie = ii.serial,
- mci.Factura = ii.id,
- mci.FechaFactura = ii.issued,
- mci.ImporteFactura = IFNULL(mci.BaseIva1, 0) + IFNULL(mci.CuotaIva1, 0) +
- IFNULL(mci.BaseIva2, 0) + IFNULL(mci.CuotaIva2, 0) +
- IFNULL(mci.BaseIva3, 0) + IFNULL(mci.CuotaIva3, 0) +
- IFNULL(mci.BaseIva4, 0) + IFNULL(mci.CuotaIva4, 0),
- mci.TipoFactura = IF(id.id,
- IF( ii.serial = vSerialDua COLLATE utf8mb3_unicode_ci, vInvoiceTypeReceived, vInvoiceTypeInformative),
- IF(vIsInformativeExportation,vInvoiceTypeInformative, vInvoiceTypeReceived)),
- mci.CodigoCuentaFactura = x.SUBCTA,
- mci.CifDni = IF(LEFT(TRIM(s.nif), 2) = n.SiglaNacion, SUBSTRING(TRIM(s.nif), 3), s.nif),
- mci.Nombre = s.name,
- mci.SiglaNacion = n.SiglaNacion,
- mci.EjercicioFactura = YEAR(ii.issued),
- mci.FechaOperacion = ii.issued,
- mci.MantenerAsiento = TRUE,
- mci.SuFacturaNo = ii.supplierRef,
- mci.IvaDeducible1 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva1, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
- mci.IvaDeducible2 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva2, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
- mci.IvaDeducible3 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva3, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
- mci.IvaDeducible4 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva4, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
- mci.FechaFacturaOriginal = x.FECHA_EX
- WHERE mci.id = vXDiarioFk;
-
- -- RETENCIONES
- UPDATE movContaIVA mci
- JOIN vn.invoiceIn ii ON ii.id = vInvoiceInFk
- JOIN vn.XDiario x ON x.id = mci.id
- JOIN vn.supplier s ON s.id = supplierFk
- JOIN vn.invoiceInTax iit ON iit.invoiceInFk = ii.id
- JOIN vn.expense e ON e.id = iit.expenseFk
- JOIN TiposRetencion t ON t.CodigoRetencion = ii.withholdingSageFk
- LEFT JOIN tmp.invoiceDua id ON id.id = mci.id
- JOIN (SELECT SUM(x2.BASEEURO) taxableBase, SUM(x2.EURODEBE) taxBase
- FROM vn.XDiario x1
- JOIN vn.XDiario x2 ON x1.ASIEN = x2.ASIEN
- WHERE x2.BASEEURO <> 0
- AND x1.id = vXDiarioFk
- )sub
- JOIN ClavesOperacion co ON co.Descripcion = 'Arrendamiento de locales de negocio'
- SET mci.CodigoRetencion = t.CodigoRetencion,
- mci.ClaveOperacionFactura = IF( t.Retencion = 'ARRENDAMIENTO Y SUBARRENDAMIENTO', co.ClaveOperacionFactura_, mci.ClaveOperacionFactura),
- mci.BaseRetencion = IF (t.Retencion = 'ACTIVIDADES AGRICOLAS O GANADERAS', sub.taxableBase + sub.taxBase, sub.taxableBase),
- mci.PorRetencion = t.PorcentajeRetencion,
- mci.ImporteRetencion = iit.taxableBase * - 1
- WHERE mci.id = vXDiarioFk
- AND e.name = 'Retenciones'
- AND id.id IS NULL;
-
- SELECT correctedFk INTO vInvoiceInOriginalFk
- FROM vn.invoiceInCorrection
- WHERE correctingFk = vInvoiceInFk;
-
- IF vInvoiceInOriginalFk THEN
-
- UPDATE movContaIVA mci
- JOIN vn.invoiceInRefund iir ON iir.invoiceInRefundFk = vInvoiceInFk
- JOIN (SELECT issued,
- SUM(sub.taxableBase) taxableBase,
- SUM(ROUND((sub.taxableBase * sub.PorcentajeIva) / 100 , 2)) vat
- FROM(SELECT issued,
- SUM(iit.taxableBase) taxableBase,
- ti.PorcentajeIva
- FROM vn.invoiceIn i
- JOIN vn.invoiceInTax iit ON iit.invoiceInFk = i.id
- JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk
- WHERE i.id = vInvoiceInOriginalFk
- GROUP BY ti.CodigoIva)sub
- )invoiceInOriginal
- JOIN ClavesOperacion co ON co.Descripcion = 'Factura rectificativa'
- SET mci.TipoRectificativa = iir.refundCategoryFk,
- mci.ClaseAbonoRectificativas = iir.refundType,
- mci.FechaFacturaOriginal = invoiceInOriginal.issued,
- mci.FechaOperacion = invoiceInOriginal.issued,
- mci.BaseImponibleOriginal = invoiceInOriginal.taxableBase,
- mci.CuotaIvaOriginal = invoiceInOriginal.vat,
- mci.ClaveOperacionFactura = co.ClaveOperacionFactura_
- WHERE mci.id = vXDiarioFk;
-
- END IF;
-END$$
-DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/invoiceOut_new.sql b/db/routines/vn/procedures/invoiceOut_new.sql
index 8c35ce75ff..1b486df864 100644
--- a/db/routines/vn/procedures/invoiceOut_new.sql
+++ b/db/routines/vn/procedures/invoiceOut_new.sql
@@ -68,16 +68,21 @@ BEGIN
DELETE ti.*
FROM tmp.ticketToInvoice ti
JOIN ticket t ON t.id = ti.id
+ LEFT JOIN address a ON a.id = t.addressFk
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
JOIN supplier su ON su.id = t.companyFk
JOIN client c ON c.id = t.clientFk
- LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id AND itc.countryFk = su.countryFk
+ LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id
+ AND itc.countryFk = su.countryFk
WHERE (YEAR(t.shipped) < 2001 AND t.isDeleted)
OR c.isTaxDataChecked = FALSE
OR t.isDeleted
OR c.hasToInvoice = FALSE
- OR itc.id IS NULL;
+ OR itc.id IS NULL
+ OR a.id IS NULL
+ OR (vTaxArea = 'WORLD'
+ AND (a.customsAgentFk IS NULL OR a.incotermsFk IS NULL));
SELECT SUM(s.quantity * s.price * (100 - s.discount)/100) <> 0
INTO vIsAnySaleToInvoice
diff --git a/db/routines/vn/procedures/itemShelving_add.sql b/db/routines/vn/procedures/itemShelving_add.sql
index 2a4676b500..d4c31f09e5 100644
--- a/db/routines/vn/procedures/itemShelving_add.sql
+++ b/db/routines/vn/procedures/itemShelving_add.sql
@@ -21,7 +21,6 @@ BEGIN
SELECT barcodeToItem(vBarcode) INTO vItemFk;
SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1));
-
SET vQuantity = vQuantity * vPacking;
IF (SELECT COUNT(*) FROM shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN
diff --git a/db/routines/vn/procedures/item_getSimilar.sql b/db/routines/vn/procedures/item_getSimilar.sql
index 0ddfe21b54..f79bed3759 100644
--- a/db/routines/vn/procedures/item_getSimilar.sql
+++ b/db/routines/vn/procedures/item_getSimilar.sql
@@ -21,6 +21,8 @@ BEGIN
CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vDated);
+ -- Añadido temporalmente para ver si ya no sucede el cuelgue de db
+ SET vShowType = TRUE;
WITH itemTags AS (
SELECT i.id,
@@ -58,7 +60,11 @@ BEGIN
(i.value8 <=> its.value8) match8,
a.available,
IFNULL(ip.counter, 0) `counter`,
- IF(b.groupingMode = 1, b.grouping, b.packing) minQuantity,
+ CASE
+ WHEN b.groupingMode = 1 THEN b.grouping
+ WHEN b.groupingMode = 2 THEN b.packing
+ ELSE 1
+ END AS minQuantity,
iss.visible located
FROM vn.item i
JOIN cache.available a ON a.item_id = i.id
@@ -87,6 +93,7 @@ BEGIN
(i.tag7 = its.tag7) DESC,
match7 DESC,
(i.tag8 = its.tag8) DESC,
- match8 DESC;
+ match8 DESC
+ LIMIT 100;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/productionError_add.sql b/db/routines/vn/procedures/productionError_add.sql
index 5e0ce93f0e..e29accac9e 100644
--- a/db/routines/vn/procedures/productionError_add.sql
+++ b/db/routines/vn/procedures/productionError_add.sql
@@ -34,16 +34,22 @@ BEGIN
-- Rellena la tabla tmp.errorsByChecker con fallos de revisores
CREATE OR REPLACE TEMPORARY TABLE tmp.errorsByChecker
ENGINE = MEMORY
- SELECT st.workerFk,
- COUNT(t.id) errors
- FROM saleMistake sm
- JOIN saleTracking st ON sm.saleFk = st.saleFk
- JOIN `state` s2 ON s2.id = st.stateFk
- JOIN sale s ON s.id = sm.saleFk
- JOIN ticket t on t.id = s.ticketFk
- WHERE (t.shipped BETWEEN vDatedFrom AND vDatedTo)
- AND s2.code IN ('OK','PREVIOUS_PREPARATION','PREPARED','CHECKED')
- GROUP BY st.workerFk;
+ WITH rankedWorkers AS (
+ SELECT sm.id,
+ st.workerFk,
+ ROW_NUMBER() OVER(PARTITION BY sm.id ORDER BY s2.`order`) rnk
+ FROM vn.saleMistake sm
+ JOIN vn.saleTracking st ON sm.saleFk = st.saleFk
+ JOIN vn.`state` s2 ON s2.id = st.stateFk
+ JOIN vn.sale s ON s.id = sm.saleFk
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
+ AND s2.code IN ('OK', 'PREVIOUS_PREPARATION', 'PREPARED', 'CHECKED')
+ )
+ SELECT workerFk, COUNT(*) errors
+ FROM rankedWorkers
+ WHERE rnk = 1
+ GROUP BY workerFk;
-- Rellena la tabla tmp.expeditionErrors con fallos de expediciones
CREATE OR REPLACE TEMPORARY TABLE tmp.expeditionErrors
diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql
new file mode 100644
index 0000000000..dbb3b6c14d
--- /dev/null
+++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql
@@ -0,0 +1,286 @@
+DELIMITER $$
+$$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE vn.sale_boxPickingPrint(
+ IN vPrinterFk INT,
+ IN vSaleFk INT,
+ IN vPacking INT,
+ IN vSectorFk INT,
+ IN vUserFk INT,
+ IN vPackagingFk VARCHAR(10),
+ IN vPackingSiteFk INT)
+BEGIN
+/** Splits a line of sale to a different ticket and prints the transport sticker
+ */
+ DECLARE vAgencyModeFk INT;
+ DECLARE vConcept VARCHAR(30);
+ DECLARE vExpeditionFk INT;
+ DECLARE vItemFk INT;
+ DECLARE vItemShelvingFk INT;
+ DECLARE vItemShelvingSaleFk INT;
+ DECLARE vItemShelvingSaleFk_old INT;
+ DECLARE vLastExpeditionTimeStamp DATETIME;
+ DECLARE vMaxPhoneLength INT DEFAULT 11;
+ DECLARE vMaxStreetLength INT DEFAULT 36;
+ DECLARE vNewSaleFk INT;
+ DECLARE vNewTicketFk INT;
+ DECLARE vParkingCode VARCHAR(10);
+ DECLARE vQuantity INT;
+ DECLARE vRemainder INT DEFAULT 0;
+ DECLARE vRemainderSaleFk INT;
+ DECLARE vShelving VARCHAR(10);
+ DECLARE vTicketFk INT;
+
+ SELECT s.quantity,
+ s.quantity MOD vPacking,
+ s.ticketFk,
+ s.itemFk,
+ s.concept
+ INTO vQuantity,
+ vRemainder,
+ vTicketFk,
+ vItemFk,
+ vConcept
+ FROM sale s
+ WHERE s.id = vSaleFk;
+
+ IF vRemainder THEN
+ UPDATE sale SET quantity = quantity - vRemainder WHERE id = vSaleFk;
+
+ INSERT INTO sale(ticketFk, itemFk, quantity, price, discount, concept)
+ SELECT ticketFk, itemFk, vRemainder, price, discount, concept
+ FROM sale
+ WHERE id = vSaleFk;
+
+ SET vRemainderSaleFk = LAST_INSERT_ID();
+
+ INSERT INTO saleComponent(saleFk, componentFk, value)
+ SELECT vRemainderSaleFk, componentFk, value
+ FROM saleComponent
+ WHERE saleFk = vSaleFk;
+ END IF;
+
+w1: WHILE vQuantity >= vPacking DO
+
+ SET vQuantity = vQuantity - vPacking;
+
+ SET vItemShelvingFk = NULL;
+
+ SELECT sub.id
+ INTO vItemShelvingFk
+ FROM productionConfig pc
+ JOIN (
+ SELECT ish.id,
+ ish.visible - IFNULL(SUM(iss.quantity),0) available,
+ p.pickingOrder,
+ ish.created
+ FROM itemShelving ish
+ JOIN shelving sh ON sh.code = ish.shelvingFk
+ JOIN parking p ON p.id = sh.parkingFk
+ LEFT JOIN itemShelvingSale iss
+ ON iss.itemShelvingFk = ish.id
+ AND iss.created >= CURDATE()
+ AND iss.isPicked = FALSE
+ WHERE ish.itemFk = vItemFk
+ AND p.sectorFk = vSectorFk
+ GROUP BY ish.id
+ HAVING available >= vPacking) sub
+ ORDER BY IF(pc.orderMode = 'Location',sub.pickingOrder, sub.created)
+ LIMIT 1;
+
+ IF vItemShelvingFk THEN
+ INSERT INTO itemShelvingSale
+ SET itemShelvingFk = vItemShelvingFk,
+ saleFk = vSaleFk,
+ quantity = vPacking,
+ userFk = vUserFk,
+ isPicked = TRUE;
+
+ SET vItemShelvingSaleFk = LAST_INSERT_ID();
+
+ UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk;
+ ELSE
+ LEAVE w1;
+ END IF;
+
+ SET vNewTicketFk = NULL;
+
+ SELECT MAX(t.id) INTO vNewTicketFk
+ FROM ticket t
+ JOIN ticketLastState tls ON tls.ticketFk = t.id
+ JOIN (SELECT addressFk, clientFk, date(shipped) shipped, warehouseFk
+ FROM ticket
+ WHERE id = vTicketFk) tt
+ ON tt.addressFk = t.addressFk
+ AND tt.clientFk = t.clientFk
+ AND t.shipped BETWEEN tt.shipped AND util.dayend(tt.shipped)
+ AND t.warehouseFk = tt.warehouseFk
+ WHERE tls.name = 'Encajado' ;
+
+ IF ISNULL(vNewTicketFk) THEN
+ INSERT INTO ticket( clientFk,
+ shipped,
+ addressFk,
+ agencyModeFk,
+ nickname,
+ warehouseFk,
+ companyFk,
+ landed,
+ zoneFk,
+ zonePrice,
+ zoneBonus,
+ routeFk,
+ priority,
+ hasPriority,
+ clonedFrom)
+ SELECT clientFk,
+ shipped,
+ addressFk,
+ agencyModeFk,
+ nickname,
+ warehouseFk,
+ companyFk,
+ landed,
+ zoneFk,
+ zonePrice,
+ zoneBonus,
+ routeFk,
+ priority,
+ hasPriority,
+ id
+ FROM ticket
+ WHERE id = vTicketFk;
+
+ SET vNewTicketFk = LAST_INSERT_ID();
+
+ INSERT INTO ticketTracking(ticketFk, stateFk, userFk)
+ SELECT vNewTicketFk, id, vUserFk
+ FROM state
+ WHERE code = 'PACKED';
+ END IF;
+
+ UPDATE sale SET quantity = quantity - vPacking WHERE id = vSaleFk;
+
+ UPDATE itemShelving SET visible = visible - vPacking WHERE id = vItemShelvingFk;
+
+ SET vNewSaleFk = NULL;
+
+ SELECT MAX(id) INTO vNewSaleFk
+ FROM sale
+ WHERE ticketFk = vNewTicketFk
+ AND itemFk = vItemFk;
+
+ IF vNewSaleFk THEN
+ UPDATE sale
+ SET quantity = quantity + vPacking
+ WHERE id = vNewSaleFk;
+
+ SET vItemShelvingSaleFk_old = NULL;
+
+ SELECT MAX(id) INTO vItemShelvingSaleFk_old
+ FROM itemShelvingSale
+ WHERE itemShelvingFk = vItemShelvingFk
+ AND saleFk = vNewSaleFk;
+
+ IF vItemShelvingSaleFk_old THEN
+ UPDATE itemShelvingSale
+ SET quantity = quantity + vPacking
+ WHERE id = vItemShelvingSaleFk_old;
+
+ DELETE FROM itemShelvingSale
+ WHERE id = vItemShelvingSaleFk;
+
+ SET vItemShelvingSaleFk = vItemShelvingSaleFk_old;
+ ELSE
+ UPDATE itemShelvingSale
+ SET saleFk = vNewSaleFk
+ WHERE id = vItemShelvingSaleFk;
+ END IF;
+ ELSE
+ INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price)
+ SELECT vNewTicketFk, itemFk, concept, vPacking, discount, price
+ FROM sale
+ WHERE id = vSaleFk;
+
+ SET vNewSaleFk = LAST_INSERT_ID();
+
+ INSERT INTO saleComponent(saleFk, componentFk, value, isGreuge)
+ SELECT vNewSaleFk, componentFk, value, isGreuge
+ FROM saleComponent
+ WHERE saleFk = vSaleFk;
+
+ UPDATE itemShelvingSale
+ SET saleFk = vNewSaleFk
+ WHERE id = vItemShelvingSaleFk;
+
+ END IF;
+
+ INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk)
+ SELECT vNewSaleFk, TRUE, vUserFk, id
+ FROM state
+ WHERE code = 'PREPARED';
+
+ SELECT agencyModeFk INTO vAgencyModeFk
+ FROM ticket
+ WHERE id = vNewTicketFk;
+
+ INSERT INTO expedition(
+ agencyModeFk,
+ ticketFk,
+ freightItemFk,
+ workerFk,
+ packagingFk,
+ itemPackingTypeFk,
+ hostFk,
+ packingSiteFk,
+ monitorId,
+ started,
+ ended
+ )
+ SELECT vAgencyModeFk,
+ vNewTicketFk,
+ pc.defaultFreightItemFk,
+ vUserFk,
+ vPackagingFk,
+ ps.code,
+ h.code,
+ vPackingSiteFk,
+ ps.monitorId,
+ IFNULL(vLastExpeditionTimeStamp, NOW()),
+ NOW()
+ FROM packingSite ps
+ JOIN host h ON h.id = ps.hostFk
+ JOIN productionConfig pc
+ WHERE ps.id = vPackingSiteFk;
+
+ SET vExpeditionFk = LAST_INSERT_ID();
+
+ SET vLastExpeditionTimeStamp = NOW();
+
+ CALL dipole.expedition_Add(vExpeditionFk,vPrinterFk, TRUE);
+
+ SELECT shelvingFk, p.code
+ INTO vShelving, vParkingCode
+ FROM itemShelving ish
+ JOIN shelving sh ON sh.code = ish.shelvingFk
+ JOIN parking p ON p.id = sh.parkingFk
+ WHERE ish.id = vItemShelvingFk;
+
+ UPDATE dipole.expedition_PrintOut
+ SET isPrinted = FALSE,
+ itemFk = vItemFk,
+ quantity = vPacking,
+ longName = vConcept,
+ shelvingFk = vShelving,
+ parkingCode = vParkingCode,
+ phone = RIGHT(phone,vMaxPhoneLength),
+ street = RIGHT(street, vMAxStreetLength)
+ WHERE expeditionFk = vExpeditionFk;
+
+ DELETE FROM sale
+ WHERE quantity = 0
+ AND id = vSaleFk;
+
+ END WHILE;
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/sale_getBoxPickingList.sql b/db/routines/vn/procedures/sale_getBoxPickingList.sql
index ff0e85259d..7466eb9be7 100644
--- a/db/routines/vn/procedures/sale_getBoxPickingList.sql
+++ b/db/routines/vn/procedures/sale_getBoxPickingList.sql
@@ -46,6 +46,7 @@ BEGIN
JOIN parking p ON p.id = sh.parkingFk
JOIN tmp.productionBuffer pb ON pb.ticketFk = s.ticketFk
JOIN agencyMode am ON am.id = pb.agencyModeFk
+ JOIN agency a ON a .id = am.agencyFk
LEFT JOIN routesMonitor rm ON rm.routeFk = pb.routeFk
LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
LEFT JOIN ticketState ts ON ts.ticketFk = s.ticketFk
@@ -60,6 +61,7 @@ BEGIN
AND ((rm.bufferFk AND rm.isPickingAllowed)
OR am.code = 'REC_ALG')
AND pb.shipped = vDated
+ AND a.isOwn
GROUP BY s.id
ORDER BY etd;
diff --git a/db/routines/vn/procedures/sale_replaceItem.sql b/db/routines/vn/procedures/sale_replaceItem.sql
index aff34d5e94..82c5d1ec29 100644
--- a/db/routines/vn/procedures/sale_replaceItem.sql
+++ b/db/routines/vn/procedures/sale_replaceItem.sql
@@ -77,7 +77,9 @@ BEGIN
vNewItemFk);
SELECT price INTO vNewPrice
- FROM tmp.ticketCalculateItem;
+ FROM tmp.ticketComponentPrice
+ ORDER BY (vQuantity % `grouping`) ASC
+ LIMIT 1;
IF vNewPrice IS NULL THEN
CALL util.throw('price retrieval failed');
@@ -104,7 +106,7 @@ BEGIN
price)
SELECT vTicketFk,
vNewItemFk,
- CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, CONCAT('+ ',i.longName),
+ CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, CONCAT('+ ', i.name),
vFinalPrice
FROM vn.item i
WHERE id = vNewItemFk;
diff --git a/db/routines/vn/procedures/solunionRiskRequest.sql b/db/routines/vn/procedures/solunionRiskRequest.sql
deleted file mode 100644
index b735bea337..0000000000
--- a/db/routines/vn/procedures/solunionRiskRequest.sql
+++ /dev/null
@@ -1,31 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`solunionRiskRequest`()
-BEGIN
-
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list;
- CREATE TEMPORARY TABLE tmp.client_list
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT * FROM (SELECT cc.client Id_Cliente, ci.grade FROM vn.creditClassification cc
- JOIN vn.creditInsurance ci ON cc.id = ci.creditClassification
- WHERE dateEnd IS NULL
- ORDER BY ci.creationDate DESC
- LIMIT 10000000000000000000) t1 GROUP BY Id_Cliente;
-
- CALL vn2008.risk_vs_client_list(util.VN_CURDATE());
-
- SELECT
- c.Id_Cliente, c.Cliente, c.Credito credito_vn, c.creditInsurance solunion, cast(r.risk as DECIMAL(10,0)) riesgo_vivo,
- cast(c.creditInsurance - r.risk as decimal(10,0)) margen_vivo,
- f.Consumo consumo_anual, c.Vencimiento, ci.grade
- FROM
- vn2008.Clientes c
- JOIN tmp.risk r ON r.Id_Cliente = c.Id_Cliente
- JOIN tmp.client_list ci ON c.Id_Cliente = ci.Id_Cliente
- JOIN bi.facturacion_media_anual f ON c.Id_Cliente = f.Id_Cliente
- GROUP BY Id_cliente;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.risk;
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/ticketCalculateFromType.sql b/db/routines/vn/procedures/ticketCalculateFromType.sql
index 106e0aecce..63f4b89419 100644
--- a/db/routines/vn/procedures/ticketCalculateFromType.sql
+++ b/db/routines/vn/procedures/ticketCalculateFromType.sql
@@ -11,7 +11,7 @@ BEGIN
SELECT id itemFk FROM vn.item
WHERE typeFk = vTypeFk;
- CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
+ CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk, FALSE);
DROP TEMPORARY TABLE tmp.item;
DROP TEMPORARY TABLE tmp.ticketLot;
END$$
diff --git a/db/routines/vn/procedures/ticketClon.sql b/db/routines/vn/procedures/ticketClon.sql
index 81328bc111..9144ac7092 100644
--- a/db/routines/vn/procedures/ticketClon.sql
+++ b/db/routines/vn/procedures/ticketClon.sql
@@ -1,55 +1,10 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticketClon`(vTicketFk INT, vNewShipped DATE)
BEGIN
-
- DECLARE done INT DEFAULT FALSE;
- DECLARE vNewTicketFk INT;
- DECLARE vOldSaleFk INT;
- DECLARE vNewSaleFk INT;
-
- DECLARE cur1 CURSOR FOR
- SELECT id
- FROM vn.sale
- WHERE ticketFk = vTicketFk;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-
- SET vNewShipped = IFNULL(vNewShipped, util.VN_CURDATE());
-
- CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
-
- UPDATE vn.ticket
- SET landed = TIMESTAMPADD(DAY, DATEDIFF(vNewShipped, shipped), landed),
- shipped = vNewShipped
- WHERE id = vNewTicketFk;
-
- OPEN cur1;
-
- read_loop: LOOP
-
- FETCH cur1 INTO vOldSaleFk;
-
- IF done THEN
- LEAVE read_loop;
- END IF;
-
- INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed)
- SELECT vNewTicketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed
- FROM vn.sale
- WHERE id = vOldSaleFk;
-
- SELECT max(id) INTO vNewSaleFk
- FROM vn.sale
- WHERE ticketFk = vNewTicketFk;
-
- INSERT INTO vn.saleComponent(saleFk, componentFk, value, isGreuge)
- SELECT vNewSaleFk, componentFk, value, isGreuge
- FROM vn.saleComponent
- WHERE saleFk = vOldSaleFk;
-
- END LOOP;
- CLOSE cur1;
-
+ DECLARE vNewTicketFk INT;
+
+ CALL ticket_cloneAll(vTicketFk, vNewShipped, TRUE, vNewTicketFk);
+
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_cloneAll.sql b/db/routines/vn/procedures/ticket_cloneAll.sql
new file mode 100644
index 0000000000..4b3401ed7a
--- /dev/null
+++ b/db/routines/vn/procedures/ticket_cloneAll.sql
@@ -0,0 +1,55 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_cloneAll`(vTicketFk INT, vNewShipped DATE, vWithWarehouse BOOLEAN, OUT vNewTicketFk INT)
+BEGIN
+
+ DECLARE vDone BOOLEAN DEFAULT FALSE;
+ DECLARE vOldSaleFk INT;
+ DECLARE vNewSaleFk INT;
+
+ DECLARE cur1 CURSOR FOR
+ SELECT id
+ FROM sale
+ WHERE ticketFk = vTicketFk;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ SET vNewShipped = IFNULL(vNewShipped, util.VN_CURDATE());
+
+ CALL ticket_Clone(vTicketFk, vNewTicketFk);
+
+ UPDATE ticket
+ SET landed = TIMESTAMPADD(DAY, DATEDIFF(vNewShipped, shipped), landed),
+ shipped = vNewShipped,
+ warehouseFk = IF(vWithWarehouse, warehouseFk, NULL)
+ WHERE id = vNewTicketFk;
+
+ OPEN cur1;
+
+ read_loop: LOOP
+
+ FETCH cur1 INTO vOldSaleFk;
+
+ IF vDone THEN
+ LEAVE read_loop;
+ END IF;
+
+ INSERT INTO sale(ticketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed)
+ SELECT vNewTicketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed
+ FROM sale
+ WHERE id = vOldSaleFk;
+
+ SELECT max(id) INTO vNewSaleFk
+ FROM sale
+ WHERE ticketFk = vNewTicketFk;
+
+ INSERT INTO saleComponent(saleFk, componentFk, value, isGreuge)
+ SELECT vNewSaleFk, componentFk, value, isGreuge
+ FROM saleComponent
+ WHERE saleFk = vOldSaleFk;
+
+ END LOOP;
+
+ CLOSE cur1;
+
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/zone_getAddresses.sql b/db/routines/vn/procedures/zone_getAddresses.sql
index 1412c7ab35..ce7b0204eb 100644
--- a/db/routines/vn/procedures/zone_getAddresses.sql
+++ b/db/routines/vn/procedures/zone_getAddresses.sql
@@ -28,7 +28,7 @@ BEGIN
SELECT c.id clientFk,
c.name,
c.phone,
- c.mobile,
+ bt.description,
c.salesPersonFk,
u.name username,
aai.invoiced,
@@ -44,10 +44,11 @@ BEGIN
LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
JOIN vn.clientType ct ON ct.code = c.typeFk
+ JOIN vn.businessType bt ON bt.code = c.businessTypeFk
WHERE a.isActive
AND c.isActive
AND ct.code = 'normal'
- AND c.businessTypeFk <> 'worker'
+ AND bt.code <> 'worker'
GROUP BY c.id;
DROP TEMPORARY TABLE tmp.zoneNodes;
diff --git a/db/routines/vn/triggers/buy_beforeDelete.sql b/db/routines/vn/triggers/buy_beforeDelete.sql
index eb7c0ef70f..85f1cf2985 100644
--- a/db/routines/vn/triggers/buy_beforeDelete.sql
+++ b/db/routines/vn/triggers/buy_beforeDelete.sql
@@ -3,6 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`buy_beforeDelete`
BEFORE DELETE ON `buy`
FOR EACH ROW
BEGIN
+ CALL entry_checkBooked(OLD.entryFk);
IF OLD.printedStickers <> 0 THEN
CALL util.throw("it is not possible to delete buys with printed labels ");
END IF;
diff --git a/db/routines/vn/triggers/buy_beforeInsert.sql b/db/routines/vn/triggers/buy_beforeInsert.sql
index c88bef05a2..bc51ac8522 100644
--- a/db/routines/vn/triggers/buy_beforeInsert.sql
+++ b/db/routines/vn/triggers/buy_beforeInsert.sql
@@ -9,17 +9,26 @@ trig: BEGIN
DECLARE vGroupingMode TINYINT;
DECLARE vGenericFk INT;
DECLARE vGenericInDate BOOL;
+ DECLARE vBuyerFk INT;
IF @isModeInventory THEN
LEAVE trig;
END IF;
+ CALL entry_checkBooked(NEW.entryFk);
IF NEW.printedStickers <> 0 THEN
CALL util.throw('it is not possible to create buy lines with printedstickers other than 0');
END IF;
SET NEW.editorFk = account.myUser_getId();
+ SELECT it.workerFk INTO vBuyerFk
+ FROM item i
+ JOIN itemType it ON it.id = i.typeFk
+ WHERE i.id = NEW.itemFk;
+
+ SET NEW.buyerFk = vBuyerFk;
+
CALL buy_checkGrouping(NEW.`grouping`);
SELECT t.warehouseInFk, t.landed
diff --git a/db/routines/vn/triggers/buy_beforeUpdate.sql b/db/routines/vn/triggers/buy_beforeUpdate.sql
index fc03c456f2..2403091c60 100644
--- a/db/routines/vn/triggers/buy_beforeUpdate.sql
+++ b/db/routines/vn/triggers/buy_beforeUpdate.sql
@@ -7,11 +7,13 @@ trig:BEGIN
DECLARE vGenericInDate BOOL;
DECLARE vIsInventory BOOL;
DECLARE vDefaultEntry INT;
+ DECLARE vBuyerFk INT;
IF @isTriggerDisabled THEN
LEAVE trig;
END IF;
+ CALL entry_checkBooked(OLD.entryFk);
SET NEW.editorFk = account.myUser_getId();
SELECT defaultEntry INTO vDefaultEntry
@@ -65,6 +67,15 @@ trig:BEGIN
SET NEW.isIgnored = TRUE;
END IF;
+ IF NOT (NEW.itemFk <=> OLD.itemFk) THEN
+ SELECT it.workerFk INTO vBuyerFk
+ FROM item i
+ JOIN itemType it ON it.id = i.typeFk
+ WHERE i.id = NEW.itemFk;
+
+ SET NEW.buyerFk = vBuyerFk;
+ END IF;
+
IF NOT (NEW.itemFk <=> OLD.itemFk) OR
NOT (OLD.entryFk <=> NEW.entryFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
diff --git a/db/routines/vn/triggers/entry_beforeDelete.sql b/db/routines/vn/triggers/entry_beforeDelete.sql
index 82a3dabd52..1d2c84b9e7 100644
--- a/db/routines/vn/triggers/entry_beforeDelete.sql
+++ b/db/routines/vn/triggers/entry_beforeDelete.sql
@@ -3,6 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_beforeDelete`
BEFORE DELETE ON `entry`
FOR EACH ROW
BEGIN
+ CALL entry_checkBooked(OLD.id);
DELETE FROM buy WHERE entryFk = OLD.id;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/entry_beforeUpdate.sql b/db/routines/vn/triggers/entry_beforeUpdate.sql
index 384feb4580..98ebe1364d 100644
--- a/db/routines/vn/triggers/entry_beforeUpdate.sql
+++ b/db/routines/vn/triggers/entry_beforeUpdate.sql
@@ -6,9 +6,13 @@ BEGIN
DECLARE vIsVirtual BOOL;
DECLARE vPrintedCount INT;
DECLARE vHasDistinctWarehouses BOOL;
+
+ IF NEW.isBooked = OLD.isBooked THEN
+ CALL entry_checkBooked(OLD.id);
+ END IF;
SET NEW.editorFk = account.myUser_getId();
-
+
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
IF NEW.travelFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.travelFk) THEN
diff --git a/db/routines/vn/triggers/travel_afterUpdate.sql b/db/routines/vn/triggers/travel_afterUpdate.sql
index 7752505e38..38cd3ba13d 100644
--- a/db/routines/vn/triggers/travel_afterUpdate.sql
+++ b/db/routines/vn/triggers/travel_afterUpdate.sql
@@ -23,9 +23,5 @@ BEGIN
CALL buy_checkItem();
END IF;
END IF;
-
- IF (NOT(NEW.awbFk <=> OLD.awbFk)) AND NEW.awbFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.id) THEN
- CALL util.throw('The AWB is incorrect, there is a different AWB in the associated entries');
- END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/travel_beforeUpdate.sql b/db/routines/vn/triggers/travel_beforeUpdate.sql
index 7cc198e3cc..5e43c87619 100644
--- a/db/routines/vn/triggers/travel_beforeUpdate.sql
+++ b/db/routines/vn/triggers/travel_beforeUpdate.sql
@@ -32,5 +32,9 @@ BEGIN
CALL util.throw('The travel has entries with booked invoices');
END IF;
END IF;
+
+ IF (NOT(NEW.awbFk <=> OLD.awbFk)) AND NEW.awbFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.id) THEN
+ CALL util.throw('The AWB is incorrect, there is a different AWB in the associated entries');
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/views/salesPersonSince.sql b/db/routines/vn/views/salesPersonSince.sql
index 43c45adc03..4234ecac40 100644
--- a/db/routines/vn/views/salesPersonSince.sql
+++ b/db/routines/vn/views/salesPersonSince.sql
@@ -12,5 +12,5 @@ FROM (
`pc`.`id` = `b`.`workerBusinessProfessionalCategoryFk`
)
)
-WHERE `pc`.`name` = 'Aux ventas'
+WHERE `pc`.`description` = 'Aux ventas'
GROUP BY `b`.`workerFk`
diff --git a/db/routines/vn2008/procedures/account_conciliacion_add.sql b/db/routines/vn2008/procedures/account_conciliacion_add.sql
deleted file mode 100644
index 94ef0b14b6..0000000000
--- a/db/routines/vn2008/procedures/account_conciliacion_add.sql
+++ /dev/null
@@ -1,33 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`account_conciliacion_add`()
-BEGIN
- UPDATE account_conciliacion ac
- JOIN
- (
- SELECT idaccount_conciliacion, @c:= if(@id = id_calculated, @c + 1, 1) contador,
- @id:= id_calculated as id_calculated, concat(id_calculated,'(',@c,')') as new_id
- FROM account_conciliacion
- JOIN
- (
- select id_calculated, count(*) rep, @c:= 0, @id:= concat('-',id_calculated)
- from account_conciliacion
- group by id_calculated
- having rep > 1
- ) sub using(id_calculated)
- ) sub2 using(idaccount_conciliacion)
- SET ac.id_calculated = sub2.new_id;
-
- INSERT INTO Cajas(Cajafecha, Partida, Serie, Concepto, Entrada,
- Salida, Id_Banco,empresa_id, warehouse_id,
- Proveedores_account_id, id_calculated, InForeignValue, OutForeignValue, Id_Trabajador)
- SELECT Fechaoperacion, TRUE, 'MB', ac.Concepto, IF(DebeHaber = 2 AND currencyFk = 1, importe,null),
- IF(DebeHaber = 1 AND currencyFk = 1, importe, null), a.id, sa.supplierFk, 1,
- ac.Id_Proveedores_account, ac.id_calculated, IF(DebeHaber = 2 AND NOT currencyFk = 1, importe, null),
- IF(DebeHaber = 1 AND NOT currencyFk = 1, importe, null), account.myUser_getId()
- FROM account_conciliacion ac
- JOIN vn.supplierAccount sa on sa.id = ac.Id_Proveedores_account
- JOIN vn.accounting a ON a.id = sa.accountingFk
- LEFT JOIN Cajas c on c.id_calculated = ac.id_calculated
- WHERE c.Id_Caja IS NULL;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/add_awb_component.sql b/db/routines/vn2008/procedures/add_awb_component.sql
deleted file mode 100644
index e75290b4bf..0000000000
--- a/db/routines/vn2008/procedures/add_awb_component.sql
+++ /dev/null
@@ -1,61 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`add_awb_component`(IN vAwbFk SMALLINT)
-BEGIN
-
- DECLARE vShipped DATE;
- DECLARE vHasStems BOOLEAN;
-
- SELECT t.shipped, IF(a.stems, TRUE, FALSE)
- INTO vShipped, vHasStems
- FROM vn.travel t
- JOIN vn.awb a ON a.id = t.awbFk
- WHERE awbFk = vAwbFk
- LIMIT 1;
-
- INSERT IGNORE INTO awb_component (awb_id,Id_Proveedor,awb_component_type_id,awb_role_id,awb_unit_id,value,Id_Moneda)
- SELECT id, Id_Proveedor, awb_component_type_id, awb_role_id,awb_unit_id, LEAST(GREATEST(value1, IFNULL(min_value, value1)), IFNULL(max_value, value1)), Id_Moneda
- FROM (
- SELECT a.id,
- IFNULL(act.carguera_id,
- CASE awb_role_id
- WHEN 1 THEN a.carguera_id
- WHEN 2 THEN a.transitario_id
- WHEN 3 THEN f.airline_id
- END
- ) Id_Proveedor,
- act.awb_component_type_id,
- act.awb_role_id,
- act.awb_unit_id,
- value *
- CASE awb_unit_id
- WHEN '1000Tj-20' THEN ((CAST(stems AS SIGNED) - 20000)/1000) + (min_value / value)
- WHEN '1000Tj-10' THEN ((CAST(stems AS SIGNED) - 10000)/1000) + (min_value / value)
- WHEN '100GW' THEN peso/100
- WHEN 'AWB' THEN 1 -- No action
- WHEN 'FB' THEN hb/2
- WHEN 'GW' THEN peso
- WHEN 'TW' THEN GREATEST(peso,volume_weight)
- WHEN 'PN' THEN LEAST(90, value + a.propertyNumber * 10)
- END value1,
- value,
- act.Id_Moneda,
- act.min_value,
- act.max_value
- FROM awb a
- JOIN flight f ON f.flight_id = a.flight_id
- LEFT JOIN awb_component_template act ON
- ((IFNULL(act.carguera_id, a.carguera_id) = a.carguera_id AND awb_role_id = 1)
- OR (IFNULL(act.carguera_id, a.transitario_id) = a.transitario_id AND awb_role_id = 2)
- OR (IFNULL(act.airline_id, f.airline_id) = f.airline_id AND awb_role_id = 3)
- OR (awb_role_id = 4))
- AND IFNULL(act.airport_out, f.airport_out) = f.airport_out
- AND IFNULL(act.airport_in, f.airport_in) = f.airport_in
- AND IFNULL(act.airline_id, f.airline_id) = f.airline_id
- AND INSTR(IFNULL(act.days, WEEKDAY(vShipped) + 1),WEEKDAY(vShipped) + 1)
- JOIN awb_component_type acty ON acty.awb_component_type_id = act.awb_component_type_id
- WHERE a.id = vAwbFk AND Fecha <= vShipped
- AND (vHasStems = TRUE OR acty.hasStems)
- ORDER BY Fecha DESC, act.days DESC LIMIT 10000000000000000000
- ) t;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/agencia_volume.sql b/db/routines/vn2008/procedures/agencia_volume.sql
deleted file mode 100644
index ea631793d3..0000000000
--- a/db/routines/vn2008/procedures/agencia_volume.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`agencia_volume`()
-BEGIN
- DECLARE vStarted DATETIME DEFAULT TIMESTAMP(util.VN_CURDATE());
- DECLARE vEnded DATETIME DEFAULT TIMESTAMP(util.VN_CURDATE(), '23:59:59');
-
- DROP TEMPORARY TABLE IF EXISTS tmp.ticket_PackagingEstimated;
- CREATE TEMPORARY TABLE tmp.ticket_PackagingEstimated
- (
- ticketFk INT PRIMARY KEY
- ,boxes INT DEFAULT 0
- );
-
- INSERT INTO tmp.ticket_PackagingEstimated(ticketFk, boxes)
- SELECT sv.ticketFk, CEIL(1000 * sum(sv.volume) / vc.standardFlowerBox)
- FROM vn.ticket t
- JOIN vn.saleVolume sv ON sv.ticketFk = t.id
- JOIN vn.volumeConfig vc
- WHERE t.shipped BETWEEN vStarted AND vEnded
- AND IFNULL(t.packages,0) = 0
- GROUP BY t.id;
- SELECT * FROM
- (
- SELECT ag.id agency_id,
- CONCAT(RPAD(c.country, 16,' _') ,' ',ag.name) Agencia,
- count(*) expediciones,
- sum(t.packages) Bultos,
- sum(tpe.boxes) Faltan
- FROM vn.ticket t
- JOIN vn.warehouse w ON w.id = t.warehouseFk
- JOIN vn.country c ON w.countryFk = c.id
- JOIN vn.address a ON a.id = t.addressFk
- JOIN vn.agencyMode am ON am.id = t.agencyModeFk
- JOIN vn.agency ag ON ag.id = am.agencyFk
- JOIN tmp.ticket_PackagingEstimated tpe ON tpe.ticketFk = t.id
- WHERE t.shipped BETWEEN vStarted AND vEnded
- AND ag.isOwn = FALSE
- GROUP BY ag.id
- ) sub
- ORDER BY Agencia;
-
- DROP TEMPORARY TABLE tmp.ticket_PackagingEstimated;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/agencyModeImbalance.sql b/db/routines/vn2008/procedures/agencyModeImbalance.sql
deleted file mode 100644
index 89706f0d2b..0000000000
--- a/db/routines/vn2008/procedures/agencyModeImbalance.sql
+++ /dev/null
@@ -1,50 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`agencyModeImbalance`(vStarted DATE, vEnded DATE)
-BEGIN
-/**
- * Devuelve el valor de los precios teorico, practico de las agencias
- * y si ademas es de mrw lo compara con su fichero previamente procesado
- *
- * @param vEktFk Identificador de edi.ekt
- */
- DECLARE vEndedDayEnd DATETIME;
-
- SET vEndedDayEnd = util.dayEnd(vEnded);
-
- SELECT t.id ticketFk,t.addressFk,
- CAST(v.amount AS DECIMAL (10,2)) AS VN,
- CAST(v.amount - e.shipping_charge AS DECIMAL (10,2)) AS Difer,
- CAST(mrwPrice AS DECIMAL (10,2)) mrwPrice,
- CAST(e.shipping_charge - mrwPrice AS DECIMAL (10,2)) mrwDifference,
- CAST(e.shipping_charge AS DECIMAL (10,2)) AS teorico,
- CAST(e.extraCharge AS DECIMAL (10,2)) AS extraCharge,
- t.packages, t.clientFk,
- t.zoneFk, a.provinceFk, mrwCount
- FROM vn.ticket t
- LEFT JOIN
- (SELECT ticketFk, SUM(amount) amount, fc.shipped
- FROM vn.sale_freightComponent fc
- JOIN vn.ticket t ON t.id = fc.ticketFk
- JOIN tmp.agencyMode am ON am.agencyModeFk = t.agencyModeFk
- WHERE fc.shipped BETWEEN vStarted AND vEndedDayEnd
- GROUP BY ticketFk) v ON t.id = v.ticketFk
- LEFT JOIN (SELECT t.id,
- SUM(t.zonePrice) shipping_charge,
- SUM(IFNULL(aex.price,0)) extraCharge
- FROM vn.ticket t
- LEFT JOIN vn.expedition e ON e.ticketFk = t.id
- LEFT JOIN vn.packaging p ON p.id = e.packagingFk
- JOIN tmp.agencyMode amc ON amc.agencyModeFk = t.agencyModeFk
- JOIN vn.agencyMode am ON am.id = amc.agencyModeFk
- LEFT JOIN vn.agencyExtraCharge aex ON p.width+p.depth+p.height BETWEEN aex.sizeMin AND aex.sizeMax AND aex.agencyFk = am.agencyFk
- WHERE t.shipped BETWEEN vStarted AND vEndedDayEnd
- GROUP BY t.id
- ) e ON t.id = e.id
- LEFT JOIN (SELECT ticketFk, SUM(price) mrwPrice, COUNT(*) mrwCount
- FROM vn.mrw
- GROUP BY ticketFk) mrw ON mrw.ticketFk = t.id
- JOIN vn.address a ON a.id = t.addressFk
- JOIN tmp.agencyMode am ON am.agencyModeFk = t.agencyModeFk
- WHERE t.shipped BETWEEN vStarted AND vEndedDayEnd;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/article.sql b/db/routines/vn2008/procedures/article.sql
deleted file mode 100644
index 3c2664c0f4..0000000000
--- a/db/routines/vn2008/procedures/article.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article`()
-BEGIN
-/**
- * Crea la tabla temporal: article_inventory
- */
- DROP TEMPORARY TABLE IF EXISTS article_inventory;
- CREATE TEMPORARY TABLE article_inventory
- (
- `article_id` INT(11) NOT NULL PRIMARY KEY,
- `future` DATETIME
- )
- ENGINE = MEMORY;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/historico_absoluto.sql b/db/routines/vn2008/procedures/historico_absoluto.sql
deleted file mode 100644
index 1a7e1dbfad..0000000000
--- a/db/routines/vn2008/procedures/historico_absoluto.sql
+++ /dev/null
@@ -1,91 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`historico_absoluto`(IN idART INT, IN wh INT, IN datfecha DATETIME)
-BEGIN
-
- DECLARE inv_calculado INT;
- DECLARE inv INT;
- DECLARE today DATETIME;
- DECLARE fecha_inv DATETIME;
-
- SET today = util.VN_CURDATE();
-
- CREATE OR REPLACE TEMPORARY TABLE historico_pasado
- SELECT *
- FROM (
- SELECT TR.landing Fecha,
- C.Cantidad Entrada,
- NULL Salida,
- (TR.received != FALSE) OK,
- P.Proveedor Alias,
- E.Referencia Referencia,
- E.Id_Entrada id,
- TR.delivered F5
- FROM Compres C -- mirar perque no entra en received
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- INNER JOIN Proveedores P USING (Id_Proveedor)
- WHERE TR.landing >= '2001-01-01'
- AND Id_proveedor <> 4
- AND wh IN (TR.warehouse_id , 0)
- AND C.Id_Article = idART
- AND E.Inventario = 0
- AND E.Redada = 0
- UNION ALL
- SELECT TR.shipment Fecha,
- NULL Entrada,
- C.Cantidad Salida,
- TR.delivered OK,
- P.Proveedor Alias,
- E.Referencia Referencia,
- E.Id_Entrada id,
- TR.delivered F5
- FROM Compres C
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- INNER JOIN Proveedores P USING (Id_Proveedor)
- WHERE TR.shipment >= '2001-01-01'
- AND wh = TR.warehouse_id_out
- AND Id_Proveedor <> 4
- AND C.Id_Article = idART
- AND E.Inventario = 0
- AND E.Redada = 0
- UNION ALL
- SELECT T.Fecha Fecha,
- NULL Entrada,
- M.Cantidad Salida,
- (M.OK <> 0 OR T.Etiquetasemitidas <> 0 OR T.Factura IS NOT NULL) OK,
- T.Alias Alias,
- T.Factura Referencia,
- T.Id_Ticket,
- T.PedidoImpreso
- FROM Movimientos M
- INNER JOIN Tickets T USING (Id_Ticket)
- JOIN Clientes C ON C.Id_Cliente = T.Id_Cliente
- WHERE T.Fecha >= '2001-01-01'
- AND M.Id_Article = idART
- AND wh IN (T.warehouse_id , 0)
- ) t1
- ORDER BY Fecha, Entrada DESC, OK DESC;
-
- SELECT sum(Entrada) - sum(Salida) INTO inv_calculado
- FROM historico_pasado
- WHERE Fecha < datfecha;
-
- SELECT p1.*, NULL v_virtual
- FROM(
- SELECT datfecha Fecha,
- inv_calculado Entrada,
- NULL Salida,
- 1 OK,
- 'Inventario calculado' Alias,
- '' Referencia, 0 id,
- 1 F5
- UNION ALL
- SELECT *
- FROM historico_pasado
- WHERE Fecha >= datfecha
- ) p1;
-
- DROP TEMPORARY TABLE historico_pasado;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/historico_multiple.sql b/db/routines/vn2008/procedures/historico_multiple.sql
deleted file mode 100644
index ae4045a341..0000000000
--- a/db/routines/vn2008/procedures/historico_multiple.sql
+++ /dev/null
@@ -1,206 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`historico_multiple`(IN vItemFk INT)
-BEGIN
-
- DECLARE vDateInventory DATETIME;
-
- SELECT Fechainventario INTO vDateInventory FROM tblContadores;
-
- SET @a = 0;
-
- DROP TEMPORARY TABLE IF EXISTS hm1;
-
- CREATE TEMPORARY TABLE hm1
- SELECT DATE(Fecha) as Fecha,
- Entrada,
- Salida,
- OK,
- Referencia,
- Historia.id,
-
- wh,
-
- `name` as wh_name
-
- FROM
-
- ( SELECT TR.landing as Fecha,
- C.Cantidad as Entrada,
- NULL as Salida,
-
- IF(warehouse_id = 44, 1, warehouse_id) as wh,
- (TR.received != FALSE) as OK,
- E.Referencia as Referencia,
- E.Id_Entrada as id
-
-
-
- FROM Compres C
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- WHERE TR.landing >= vDateInventory
- AND C.Id_Article = vItemFk
- AND E.Redada = 0
-
- AND C.Cantidad <> 0
-
- UNION ALL
-
- SELECT TR.shipment as Fecha,
- NULL as Entrada,
- C.Cantidad as Salida,
- warehouse_id_out as wh,
- TR.delivered as OK,
- E.Referencia as Referencia,
- E.Id_Entrada as id
-
- FROM Compres C
- INNER JOIN Entradas E USING (Id_Entrada)
- INNER JOIN travel TR ON TR.id = E.travel_id
- WHERE TR.shipment >= vDateInventory
- AND C.Id_Article = vItemFk
-
- AND E.Redada = 0
-
- AND C.Cantidad <> 0
-
- UNION ALL
-
- SELECT T.Fecha as Fecha,
- NULL as Entrada,
- M.Cantidad as Salida,
- warehouse_id as wh,
- (M.OK <> 0 OR T.Etiquetasemitidas <> 0 OR T.Factura IS NOT NULL) as OK,
- T.Factura as Referencia,
- T.Id_Ticket as id
-
- FROM Movimientos M
- INNER JOIN Tickets T USING (Id_Ticket)
- WHERE T.Fecha >= vDateInventory
- AND M.Id_Article = vItemFk
-
- ) AS Historia
-
- INNER JOIN warehouse ON warehouse.id = Historia.wh
- ORDER BY Fecha, Entrada DESC, OK DESC;
-
-
- DROP TEMPORARY TABLE IF EXISTS hm2;
- DROP TEMPORARY TABLE IF EXISTS hm3;
- DROP TEMPORARY TABLE IF EXISTS hm4;
- DROP TEMPORARY TABLE IF EXISTS hm5;
- DROP TEMPORARY TABLE IF EXISTS hm6;
- DROP TEMPORARY TABLE IF EXISTS hm7;
- DROP TEMPORARY TABLE IF EXISTS hm8;
- CREATE TEMPORARY TABLE hm2 SELECT * FROM hm1 WHERE wh = 19;
- CREATE TEMPORARY TABLE hm3 SELECT * FROM hm1 WHERE wh = 7;
- CREATE TEMPORARY TABLE hm4 SELECT * FROM hm1 WHERE wh = 60;
- CREATE TEMPORARY TABLE hm5 SELECT * FROM hm1 WHERE wh = 5;
- CREATE TEMPORARY TABLE hm6 SELECT * FROM hm1 WHERE wh = 17;
- CREATE TEMPORARY TABLE hm7 SELECT * FROM hm1 WHERE wh = 37;
- CREATE TEMPORARY TABLE hm8 SELECT * FROM hm1 WHERE wh = 55;
-
- SELECT * FROM
-
- (
-
- SELECT Fecha, Entrada as BOGEntrada, Salida as BOGSalida, OK as BOGOK, Referencia as BOGReferencia, id as BOGid,
-
- NULL AS VNHEntrada, NULL AS VNHSalida, NULL AS VNHOK, NULL AS VNHReferencia, NULL AS VNHid,
-
- NULL AS ALGEntrada, NULL AS ALGSalida, NULL AS ALGOK, NULL AS ALGReferencia, NULL AS ALGid,
-
- NULL AS MADEntrada, NULL AS MADSalida, NULL AS MADOK, NULL AS MADReferencia, NULL AS MADid,
-
- NULL AS MCFEntrada, NULL AS MCFSalida, NULL AS MCFOK, NULL AS MCFReferencia, NULL AS MCFid,
-
- NULL AS VILEntrada, NULL AS VILSalida, NULL AS VILOK, NULL AS VILReferencia, NULL AS VILid,
-
- NULL AS BAREntrada, NULL AS BARSalida, NULL AS BAROK, NULL AS BARReferencia, NULL AS BARid
-
- FROM hm2
-
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- ,Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm3
-
-
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm4
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm5
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- FROM hm6
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
- , NULL, NULL, NULL, NULL, NULL
-
-
- FROM hm7
-
- UNION ALL
-
- SELECT Fecha
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , NULL, NULL, NULL, NULL, NULL
- , Entrada, Salida, OK, Referencia, id
-
- FROM hm8
-
- ) sub
-
- ORDER BY Fecha, BOGEntrada IS NULL, VNHEntrada IS NULL, ALGEntrada IS NULL, MADEntrada IS NULL, MCFEntrada IS NULL, VILEntrada IS NULL, BAREntrada IS NULL;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/views/Proveedores.sql b/db/routines/vn2008/views/Proveedores.sql
index 0b7ee89f8e..b5d3d36840 100644
--- a/db/routines/vn2008/views/Proveedores.sql
+++ b/db/routines/vn2008/views/Proveedores.sql
@@ -23,7 +23,7 @@ AS SELECT `s`.`id` AS `Id_Proveedor`,
`s`.`isOfficial` AS `oficial`,
`s`.`workerFk` AS `workerFk`,
`s`.`payDay` AS `pay_day`,
- `s`.`isSerious` AS `serious`,
+ `s`.`isReal` AS `serious`,
`s`.`note` AS `notas`,
`s`.`taxTypeSageFk` AS `taxTypeSageFk`,
`s`.`withholdingSageFk` AS `withholdingSageFk`,
diff --git a/db/routines/vn2008/views/Proveedores_cargueras.sql b/db/routines/vn2008/views/Proveedores_cargueras.sql
new file mode 100644
index 0000000000..c1dc6ad236
--- /dev/null
+++ b/db/routines/vn2008/views/Proveedores_cargueras.sql
@@ -0,0 +1,5 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`Proveedores_cargueras`
+AS SELECT `fs`.`supplierFk` AS `Id_Proveedor`
+FROM `vn`.`supplierFreight` `fs`
diff --git a/db/routines/vn2008/views/Tramos.sql b/db/routines/vn2008/views/Tramos.sql
new file mode 100644
index 0000000000..6919a610b2
--- /dev/null
+++ b/db/routines/vn2008/views/Tramos.sql
@@ -0,0 +1,6 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`Tramos`
+AS SELECT `s`.`id` AS `id`,
+ `s`.`section` AS `Tramo`
+FROM `vn`.`timeSlots` `s`
\ No newline at end of file
diff --git a/db/routines/vn2008/views/empresa.sql b/db/routines/vn2008/views/empresa.sql
index 3b43ee574a..8c80a06e82 100644
--- a/db/routines/vn2008/views/empresa.sql
+++ b/db/routines/vn2008/views/empresa.sql
@@ -5,7 +5,6 @@ AS SELECT `c`.`id` AS `id`,
`c`.`code` AS `abbreviation`,
`c`.`supplierAccountFk` AS `Id_Proveedores_account`,
`c`.`workerManagerFk` AS `gerente_id`,
- `c`.`sage200Company` AS `digito_factura`,
`c`.`phytosanitary` AS `phytosanitary`,
`c`.`companyCode` AS `CodigoEmpresa`,
`c`.`companyGroupFk` AS `empresa_grupo`,
diff --git a/db/routines/vn2008/views/payrollWorker.sql b/db/routines/vn2008/views/payrollWorker.sql
new file mode 100644
index 0000000000..d4ada9aa0b
--- /dev/null
+++ b/db/routines/vn2008/views/payrollWorker.sql
@@ -0,0 +1,6 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_employee`
+AS SELECT `pw`.`workerFkA3` AS `CodTrabajador`,
+ `pw`.`companyFkA3` AS `codempresa`
+FROM `vn`.`payrollWorker` `pw`
diff --git a/db/routines/vn2008/views/payroll_centros.sql b/db/routines/vn2008/views/payroll_centros.sql
new file mode 100644
index 0000000000..b7e162f906
--- /dev/null
+++ b/db/routines/vn2008/views/payroll_centros.sql
@@ -0,0 +1,6 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_centros`
+AS SELECT `pwc`.`workCenterFkA3` AS `cod_centro`,
+ `pwc`.`companyFkA3` AS `codempresa`
+FROM `vn`.`payrollWorkCenter` `pwc`
diff --git a/db/routines/vn2008/views/payroll_conceptos.sql b/db/routines/vn2008/views/payroll_conceptos.sql
new file mode 100644
index 0000000000..a7c6ece5bd
--- /dev/null
+++ b/db/routines/vn2008/views/payroll_conceptos.sql
@@ -0,0 +1,9 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_conceptos`
+AS SELECT `pc`.`id` AS `conceptoid`,
+ `pc`.`name` AS `concepto`,
+ `pc`.`isSalaryAgreed` AS `isSalaryAgreed`,
+ `pc`.`isVariable` AS `isVariable`,
+ `pc`.`isException` AS `isException`
+FROM `vn`.`payrollComponent` `pc`
diff --git a/db/versions/10880-salmonHydrangea/00-firstScript.sql b/db/versions/10880-salmonHydrangea/00-firstScript.sql
new file mode 100644
index 0000000000..934fc20207
--- /dev/null
+++ b/db/versions/10880-salmonHydrangea/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.buy ADD buyerFk int(10) unsigned DEFAULT NULL NULL;
diff --git a/db/versions/10881-greenHydrangea/01-notification.vn.sql b/db/versions/10881-greenHydrangea/01-notification.sql
similarity index 100%
rename from db/versions/10881-greenHydrangea/01-notification.vn.sql
rename to db/versions/10881-greenHydrangea/01-notification.sql
diff --git a/db/versions/10887-floranet/00-schemaAndUser.sql b/db/versions/10887-floranet/00-schemaAndUser.sql
new file mode 100644
index 0000000000..34da92550b
--- /dev/null
+++ b/db/versions/10887-floranet/00-schemaAndUser.sql
@@ -0,0 +1,14 @@
+
+CREATE SCHEMA IF NOT EXISTS `floranet`;
+
+CREATE ROLE IF NOT EXISTS 'floranet' ;
+
+GRANT Create temporary tables ON floranet.* TO 'floranet';
+
+GRANT Execute ON floranet.* TO 'floranet';
+
+GRANT Lock tables ON floranet.* TO 'floranet';
+
+CREATE USER IF NOT EXISTS 'floranet'@'%';
+
+GRANT floranet TO floranet@'%';
\ No newline at end of file
diff --git a/db/versions/10887-floranet/01-tables.sql b/db/versions/10887-floranet/01-tables.sql
new file mode 100644
index 0000000000..b63c81c213
--- /dev/null
+++ b/db/versions/10887-floranet/01-tables.sql
@@ -0,0 +1,61 @@
+CREATE OR REPLACE TABLE floranet.`builder` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `itemFk` int(11) NOT NULL,
+ `elementFk` int(11) NOT NULL,
+ `quantity` int(10) unsigned NOT NULL DEFAULT 1,
+ PRIMARY KEY (`id`),
+ KEY `builder_FK` (`itemFk`),
+ KEY `builder_FK_1` (`elementFk`),
+ CONSTRAINT `builder_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Links handmade products with their elements';
+
+CREATE OR REPLACE TABLE floranet.`element` (
+ `itemFk` int(11) NOT NULL,
+ `typeFk` smallint(5) unsigned DEFAULT NULL,
+ `size` int(11) DEFAULT NULL,
+ `inkFk` char(3) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
+ `originFk` tinyint(2) unsigned DEFAULT NULL,
+ `name` varchar(30) DEFAULT NULL,
+ `quantity` int(11) NOT NULL DEFAULT 1,
+ PRIMARY KEY (`itemFk`),
+ KEY `element_FK` (`itemFk`),
+ KEY `element_FK_1` (`typeFk`),
+ KEY `element_FK_2` (`inkFk`),
+ KEY `element_FK_3` (`originFk`),
+ CONSTRAINT `element_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `element_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `vn`.`itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `element_FK_2` FOREIGN KEY (`inkFk`) REFERENCES `vn`.`ink` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `element_FK_3` FOREIGN KEY (`originFk`) REFERENCES `vn`.`origin` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Filtro para localizar posibles items que coincidan con la descripción';
+
+ALTER TABLE floranet.builder ADD CONSTRAINT `builder_FK_1` FOREIGN KEY (`elementFk`) REFERENCES `element` (`itemFk`) ON UPDATE CASCADE;
+
+CREATE OR REPLACE TABLE floranet.catalogue
+(id INT AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(50),
+ price DECIMAL(10,2) NOT NULL,
+ itemFk INT NOT NULL,
+ dated DATE,
+ postalCode VARCHAR(12),
+ `type` VARCHAR(50),
+ image VARCHAR(255),
+ description TEXT,
+ created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ payed DATETIME,
+ FOREIGN KEY (itemFk) REFERENCES vn.item(id) ON DELETE RESTRICT ON UPDATE CASCADE);
+
+
+CREATE OR REPLACE TABLE floranet.`order`
+(id INT AUTO_INCREMENT PRIMARY KEY,
+ catalogueFk INT UNIQUE,
+ customerName VARCHAR(100),
+ email VARCHAR(100),
+ customerPhone VARCHAR(15),
+ message VARCHAR(255),
+ deliveryName VARCHAR(100),
+ address VARCHAR(200),
+ deliveryPhone VARCHAR(100),
+ isPaid BOOL NOT NULL DEFAULT FALSE,
+ payed DATETIME,
+ created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (catalogueFk) REFERENCES catalogue(id) ON DELETE RESTRICT ON UPDATE CASCADE);
\ No newline at end of file
diff --git a/db/versions/10900-redOak/00-firstScript.sql b/db/versions/10900-redOak/00-firstScript.sql
new file mode 100644
index 0000000000..8609ddc7e1
--- /dev/null
+++ b/db/versions/10900-redOak/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.supplier CHANGE COLUMN isSerious isReal tinyint(1) unsigned NOT NULL DEFAULT 0;
diff --git a/db/versions/10917-aquaPhormium/00-firstScript.sql b/db/versions/10917-aquaPhormium/00-firstScript.sql
new file mode 100644
index 0000000000..436243ba55
--- /dev/null
+++ b/db/versions/10917-aquaPhormium/00-firstScript.sql
@@ -0,0 +1,9 @@
+UPDATE account.user
+SET name = LOWER(name),
+ name = REPLACE(name, ' ', ''),
+ name = REPLACE(name, '.', ''),
+ name = REPLACE(name, 'ñ', 'n'),
+ name = REPLACE(name, '*', ''),
+ name = REPLACE(name, 'ç', 'z'),
+ name = REPLACE(name, 'ã', 'a')
+WHERE NOT active;
diff --git a/db/versions/10930-wheatDendro/00-firstScript.sql b/db/versions/10930-wheatDendro/00-firstScript.sql
new file mode 100644
index 0000000000..167c38f707
--- /dev/null
+++ b/db/versions/10930-wheatDendro/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS vn.flight ADD CONSTRAINT flight_airline_FK FOREIGN KEY (airlineFk)
+ REFERENCES vn.airline(id) ON DELETE CASCADE ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/01-Tramos.sql b/db/versions/10930-wheatDendro/01-Tramos.sql
new file mode 100644
index 0000000000..595aa5dcbe
--- /dev/null
+++ b/db/versions/10930-wheatDendro/01-Tramos.sql
@@ -0,0 +1,5 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS `vn2008`.`Tramos` RENAME `vn`.`timeSlots`;
+
+ALTER TABLE IF EXISTS `vn`.`timeSlots`
+CHANGE COLUMN IF EXISTS `Tramo` `section` time NOT NULL;
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/02-dock.sql b/db/versions/10930-wheatDendro/02-dock.sql
new file mode 100644
index 0000000000..acce9f37cd
--- /dev/null
+++ b/db/versions/10930-wheatDendro/02-dock.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS `vn2008`.`dock` RENAME `vn2008`.`dock__`;
+ALTER TABLE IF EXISTS vn2008.dock__ COMMENT='refs #6371 deprecated 2024-03-05';
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql b/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql
new file mode 100644
index 0000000000..148174215a
--- /dev/null
+++ b/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql
@@ -0,0 +1,5 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS `vn2008`.`Proveedores_cargueras` RENAME `vn`.`supplierFreight`;
+
+ALTER TABLE IF EXISTS `vn`.`supplierFreight`
+CHANGE COLUMN IF EXISTS `Id_Proveedor` `supplierFk` int(10) unsigned NOT NULL;
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/04-payroll_employee.sql b/db/versions/10930-wheatDendro/04-payroll_employee.sql
new file mode 100644
index 0000000000..c346fbf8da
--- /dev/null
+++ b/db/versions/10930-wheatDendro/04-payroll_employee.sql
@@ -0,0 +1,13 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS `vn2008`.`payroll_employee` RENAME `vn`.`payrollWorker`;
+
+ALTER TABLE IF EXISTS `vn`.`payrollWorker`
+CHANGE COLUMN IF EXISTS `CodTrabajador` `workerFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.',
+CHANGE COLUMN IF EXISTS `nss` `nss__` varchar(23) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `codpuesto` `codpuesto__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `codempresa` `companyFkA3` int(10) NOT NULL COMMENT 'Columna que hace referencia a A3.',
+CHANGE COLUMN IF EXISTS `codcontrato` `codcontrato__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `FAntiguedad` `FAntiguedad__` date NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `grupotarifa` `grupotarifa__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `codcategoria` `codcategoria__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `ContratoTemporal` `ContratoTemporal__` tinyint(1) NOT NULL DEFAULT 0 COMMENT '@Deprecated refs #6738 15/03/2024';
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/05-payroll_centros.sql b/db/versions/10930-wheatDendro/05-payroll_centros.sql
new file mode 100644
index 0000000000..4911c87078
--- /dev/null
+++ b/db/versions/10930-wheatDendro/05-payroll_centros.sql
@@ -0,0 +1,13 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS `vn2008`.`payroll_centros` RENAME `vn`.`payrollWorkCenter`;
+
+ALTER TABLE IF EXISTS `vn`.`payrollWorkCenter`
+CHANGE COLUMN IF EXISTS `cod_centro` `workCenterFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.',
+CHANGE COLUMN IF EXISTS `Centro` `Centro__` varchar(255) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `nss_cotizacion` `nss_cotizacion__` varchar(15) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `domicilio` `domicilio__` varchar(255) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `poblacion` `poblacion__` varchar(45) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `cp` `cp__` varchar(5) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `empresa_id` `empresa_id__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
+CHANGE COLUMN IF EXISTS `codempresa` `companyFkA3` int(11) DEFAULT NULL COMMENT 'Columna que hace referencia a A3.';
+;
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/06-payroll_conceptos.sql b/db/versions/10930-wheatDendro/06-payroll_conceptos.sql
new file mode 100644
index 0000000000..1803dc2a3b
--- /dev/null
+++ b/db/versions/10930-wheatDendro/06-payroll_conceptos.sql
@@ -0,0 +1,6 @@
+-- Place your SQL code here
+ALTER TABLE IF EXISTS `vn2008`.`payroll_conceptos` RENAME `vn`.`payrollComponent`;
+
+ALTER TABLE IF EXISTS `vn`.`payrollComponent`
+CHANGE COLUMN IF EXISTS `conceptoid` `id` int(11) NOT NULL,
+CHANGE COLUMN IF EXISTS `concepto` `name` varchar(255) DEFAULT NULL;
\ No newline at end of file
diff --git a/db/versions/10930-wheatDendro/07-Permisos.sql b/db/versions/10930-wheatDendro/07-Permisos.sql
new file mode 100644
index 0000000000..5a3dc1413b
--- /dev/null
+++ b/db/versions/10930-wheatDendro/07-Permisos.sql
@@ -0,0 +1,40 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`Tramos` AS
+SELECT 1;
+
+GRANT SELECT ON TABLE vn2008.Tramos TO `employee`;
+GRANT SELECT ON TABLE vn.timeSlots TO `employee`;
+
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`Proveedores_cargueras` AS
+SELECT 1;
+
+GRANT SELECT ON TABLE vn2008.Proveedores_cargueras TO `buyer`;
+GRANT SELECT ON TABLE vn.supplierFreight TO `buyer`;
+
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_employee` AS
+SELECT 1;
+
+GRANT SELECT,INSERT ON TABLE vn2008.payroll_employee TO `hr`;
+GRANT SELECT,INSERT ON TABLE vn.payrollWorker TO `hr`;
+
+
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_centros` AS
+SELECT 1;
+
+GRANT SELECT ON TABLE vn2008.payroll_centros TO `hr`;
+GRANT SELECT ON TABLE vn.payrollWorkCenter TO `hr`;
+
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_conceptos` AS
+SELECT 1;
+
+GRANT SELECT,UPDATE ON TABLE vn2008.payroll_conceptos TO `hr`;
+GRANT SELECT,UPDATE ON TABLE vn.payrollComponent TO `hr`;
\ No newline at end of file
diff --git a/db/versions/10932-azureEucalyptus/00-firstScript.sql b/db/versions/10932-azureEucalyptus/00-firstScript.sql
new file mode 100644
index 0000000000..399819cc4f
--- /dev/null
+++ b/db/versions/10932-azureEucalyptus/00-firstScript.sql
@@ -0,0 +1,22 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`multipleInventoryHistory`(
+ vItemFk INT)
+BEGIN
+ DECLARE vDateInventory DATETIME;
+ SELECT inventoried INTO vDateInventory FROM config;
+
+END$$
+DELIMITER ;
+
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`absoluteInventoryHistory`(
+ vItemFk INT, vWarehouse INT, vDate DATETIME)
+BEGIN
+ DECLARE vCalculatedInventory INT;
+ SET vCalculatedInventory = 0;
+
+END$$
+DELIMITER ;
+
+GRANT EXECUTE ON PROCEDURE vn.absoluteInventoryHistory TO buyer;
+GRANT EXECUTE ON PROCEDURE vn.multipleInventoryHistory TO buyer;
diff --git a/db/versions/10948-azureSalal/00-addReconciliationConfig.sql b/db/versions/10948-azureSalal/00-addReconciliationConfig.sql
new file mode 100644
index 0000000000..1da6473b4a
--- /dev/null
+++ b/db/versions/10948-azureSalal/00-addReconciliationConfig.sql
@@ -0,0 +1,8 @@
+ CREATE OR REPLACE TABLE `vn`.`accountReconciliationConfig` (
+ `id` INT AUTO_INCREMENT,
+ `currencyFk` TINYINT(3) unsigned,
+ `warehouseFk` SMALLINT(6) unsigned,
+ PRIMARY KEY (`id`),
+ CONSTRAINT `account_fk_currency` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`),
+ CONSTRAINT `account_fk_warehouse` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
\ No newline at end of file
diff --git a/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql b/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql
new file mode 100644
index 0000000000..21743a007d
--- /dev/null
+++ b/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql
@@ -0,0 +1,2 @@
+INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk)
+ VALUES (1, 1);
\ No newline at end of file
diff --git a/db/versions/10948-azureSalal/02-grantPrivileges.sql b/db/versions/10948-azureSalal/02-grantPrivileges.sql
new file mode 100644
index 0000000000..d6853f7592
--- /dev/null
+++ b/db/versions/10948-azureSalal/02-grantPrivileges.sql
@@ -0,0 +1,13 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`()
+BEGIN
+END;
+
+REVOKE EXECUTE ON PROCEDURE `vn2008`.`agencia_volume` FROM `agency`;
+GRANT EXECUTE ON PROCEDURE `vn`.`agencyVolume` TO `agency`;
+
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`()
+BEGIN
+END;
+
+REVOKE EXECUTE ON PROCEDURE `vn2008`.`account_conciliacion_add` FROM `financial`;
+GRANT EXECUTE ON PROCEDURE `vn`.`addAccountReconciliation` TO `financial`;
diff --git a/db/versions/10948-azureSalal/03-modifyColumn.sql b/db/versions/10948-azureSalal/03-modifyColumn.sql
new file mode 100644
index 0000000000..95b7d9c747
--- /dev/null
+++ b/db/versions/10948-azureSalal/03-modifyColumn.sql
@@ -0,0 +1 @@
+ALTER TABLE `vn`.`accountReconciliation` MODIFY debitCredit ENUM('debit', 'credit');
\ No newline at end of file
diff --git a/db/versions/10949-limeLaurel/00-firstScript.sql b/db/versions/10949-limeLaurel/00-firstScript.sql
new file mode 100644
index 0000000000..cc0bcc96b3
--- /dev/null
+++ b/db/versions/10949-limeLaurel/00-firstScript.sql
@@ -0,0 +1,15 @@
+ INSERT INTO util.notification ( name, description)
+ SELECT 'invoice-ticket-closure',
+ 'Tickets not invoiced during the nightly closure ticket process';
+
+ SET @notificationFk =LAST_INSERT_ID();
+
+ INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk)
+ SELECT @notificationFk,id
+ FROM account.role
+ WHERE name ='administrative';
+
+ INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk)
+ SELECT @notificationFk, id
+ FROM account.`user`
+ WHERE `name` = 'admon';
diff --git a/db/versions/10953-redChico/00-account.sql b/db/versions/10953-redChico/00-account.sql
new file mode 100644
index 0000000000..e6944a6861
--- /dev/null
+++ b/db/versions/10953-redChico/00-account.sql
@@ -0,0 +1,23 @@
+-- account.accountConfig
+ALTER TABLE account.accountConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE account.accountConfig ADD CONSTRAINT accountConfig_check CHECK (id = 1);
+
+-- account.ldapConfig
+ALTER TABLE account.ldapConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE account.ldapConfig ADD CONSTRAINT ldapConfig_check CHECK (id = 1);
+
+-- account.mailConfig
+ALTER TABLE account.mailConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE account.mailConfig ADD CONSTRAINT mailConfig_check CHECK (id = 1);
+
+-- account.roleConfig
+ALTER TABLE account.roleConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE account.roleConfig ADD CONSTRAINT roleConfig_check CHECK (id = 1);
+
+-- account.sambaConfig
+ALTER TABLE account.sambaConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE account.sambaConfig ADD CONSTRAINT sambaConfig_check CHECK (id = 1);
+
+-- account.userConfig
+ALTER TABLE account.userConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE account.userConfig ADD CONSTRAINT userConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/01-bs.sql b/db/versions/10953-redChico/01-bs.sql
new file mode 100644
index 0000000000..e451c82055
--- /dev/null
+++ b/db/versions/10953-redChico/01-bs.sql
@@ -0,0 +1,7 @@
+-- bs.nightTaskConfig
+ALTER TABLE bs.nightTaskConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE bs.nightTaskConfig ADD CONSTRAINT nightTaskConfig_check CHECK (id = 1);
+
+-- bs.workerProductivityConfig
+ALTER TABLE bs.workerProductivityConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE bs.workerProductivityConfig ADD CONSTRAINT workerProductivityConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/02-edi.sql b/db/versions/10953-redChico/02-edi.sql
new file mode 100644
index 0000000000..e97cfcec80
--- /dev/null
+++ b/db/versions/10953-redChico/02-edi.sql
@@ -0,0 +1,15 @@
+-- edi.exchangeConfig
+ALTER TABLE edi.exchangeConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE edi.exchangeConfig ADD CONSTRAINT exchangeConfig_check CHECK (id = 1);
+
+-- edi.ftpConfig
+ALTER TABLE edi.ftpConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE edi.ftpConfig ADD CONSTRAINT ftpConfig_check CHECK (id = 1);
+
+-- edi.imapConfig (Tiene más de 1 registro en producción)
+-- ALTER TABLE edi.imapConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+-- ALTER TABLE edi.imapConfig ADD CONSTRAINT imapConfig_check CHECK (id = 1);
+
+-- edi.offerRefreshConfig
+ALTER TABLE edi.offerRefreshConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE edi.offerRefreshConfig ADD CONSTRAINT offerRefreshConfig_check CHECK (id = 1);
\ No newline at end of file
diff --git a/db/versions/10953-redChico/03-hedera.sql b/db/versions/10953-redChico/03-hedera.sql
new file mode 100644
index 0000000000..3c86fb593c
--- /dev/null
+++ b/db/versions/10953-redChico/03-hedera.sql
@@ -0,0 +1,27 @@
+-- hedera.config
+ALTER TABLE hedera.config MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE hedera.config ADD CONSTRAINT config_check CHECK (id = 1);
+
+-- hedera.imageConfig
+ALTER TABLE hedera.imageConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE hedera.imageConfig ADD CONSTRAINT imageConfig_check CHECK (id = 1);
+
+-- hedera.mailConfig
+ALTER TABLE hedera.mailConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE hedera.mailConfig ADD CONSTRAINT mailConfig_check CHECK (id = 1);
+
+-- hedera.orderConfig
+ALTER TABLE hedera.orderConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE hedera.orderConfig ADD CONSTRAINT orderConfig_check CHECK (id = 1);
+
+-- hedera.shelfConfig (Tiene más de 1 registro en producción)
+-- ALTER TABLE hedera.shelfConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+-- ALTER TABLE hedera.shelfConfig ADD CONSTRAINT shelfConfig_check CHECK (id = 1);
+
+-- hedera.tpvConfig
+ALTER TABLE hedera.tpvConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE hedera.tpvConfig ADD CONSTRAINT tpvConfig_check CHECK (id = 1);
+
+-- hedera.tpvImapConfig
+ALTER TABLE hedera.tpvImapConfig MODIFY COLUMN id tinyint(3) unsigned NOT NULL;
+ALTER TABLE hedera.tpvImapConfig ADD CONSTRAINT tpvImapConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/04-pbx.sql b/db/versions/10953-redChico/04-pbx.sql
new file mode 100644
index 0000000000..49f4172c49
--- /dev/null
+++ b/db/versions/10953-redChico/04-pbx.sql
@@ -0,0 +1,15 @@
+-- pbx.config
+ALTER TABLE pbx.config MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE pbx.config ADD CONSTRAINT config_check CHECK (id = 1);
+
+-- pbx.followmeConfig
+ALTER TABLE pbx.followmeConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE pbx.followmeConfig ADD CONSTRAINT followmeConfig_check CHECK (id = 1);
+
+-- pbx.queueConfig (Tiene más de 1 registro en producción)
+-- ALTER TABLE pbx.queueConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+-- ALTER TABLE pbx.queueConfig ADD CONSTRAINT queueConfig_check CHECK (id = 1);
+
+-- pbx.sipConfig
+ALTER TABLE pbx.sipConfig MODIFY COLUMN id mediumint(8) unsigned NOT NULL;
+ALTER TABLE pbx.sipConfig ADD CONSTRAINT sipConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/05-sage.sql b/db/versions/10953-redChico/05-sage.sql
new file mode 100644
index 0000000000..ee60f5f7d2
--- /dev/null
+++ b/db/versions/10953-redChico/05-sage.sql
@@ -0,0 +1,3 @@
+-- sage.config
+ALTER TABLE sage.config MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE sage.config ADD CONSTRAINT config_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/06-salix.sql b/db/versions/10953-redChico/06-salix.sql
new file mode 100644
index 0000000000..d6a248f0d9
--- /dev/null
+++ b/db/versions/10953-redChico/06-salix.sql
@@ -0,0 +1,7 @@
+-- salix.accessTokenConfig
+ALTER TABLE salix.accessTokenConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE salix.accessTokenConfig ADD CONSTRAINT accessTokenConfig_check CHECK (id = 1);
+
+-- salix.printConfig
+ALTER TABLE salix.printConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE salix.printConfig ADD CONSTRAINT printConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/06-srt.sql b/db/versions/10953-redChico/06-srt.sql
new file mode 100644
index 0000000000..53000eee68
--- /dev/null
+++ b/db/versions/10953-redChico/06-srt.sql
@@ -0,0 +1,3 @@
+-- srt.config
+ALTER TABLE srt.config MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE srt.config ADD CONSTRAINT config_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/07-util.sql b/db/versions/10953-redChico/07-util.sql
new file mode 100644
index 0000000000..152dce3d14
--- /dev/null
+++ b/db/versions/10953-redChico/07-util.sql
@@ -0,0 +1,11 @@
+-- util.config
+ALTER TABLE util.config MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE util.config ADD CONSTRAINT config_check CHECK (id = 1);
+
+-- util.notificationConfig
+ALTER TABLE util.notificationConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE util.notificationConfig ADD CONSTRAINT notificationConfig_check CHECK (id = 1);
+
+-- util.versionConfig
+ALTER TABLE util.versionConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE util.versionConfig ADD CONSTRAINT versionConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/08-vn.sql b/db/versions/10953-redChico/08-vn.sql
new file mode 100644
index 0000000000..14bd3b13f2
--- /dev/null
+++ b/db/versions/10953-redChico/08-vn.sql
@@ -0,0 +1,87 @@
+-- vn.accountingConfig
+ALTER TABLE vn.accountingConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.accountingConfig ADD CONSTRAINT accountingConfig_check CHECK (id = 1);
+
+-- vn.auctionConfig
+ALTER TABLE vn.auctionConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.auctionConfig ADD CONSTRAINT auctionConfig_check CHECK (id = 1);
+
+-- vn.autoRadioConfig
+ALTER TABLE vn.autoRadioConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.autoRadioConfig ADD CONSTRAINT autoRadioConfig_check CHECK (id = 1);
+
+-- vn.bankEntityConfig
+ALTER TABLE vn.bankEntityConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.bankEntityConfig ADD CONSTRAINT bankEntityConfig_check CHECK (id = 1);
+
+-- vn.bionicConfig
+ALTER TABLE vn.bionicConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.bionicConfig ADD CONSTRAINT bionicConfig_check CHECK (id = 1);
+
+-- vn.buyConfig
+ALTER TABLE vn.buyConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.buyConfig ADD CONSTRAINT buyConfig_check CHECK (id = 1);
+
+-- vn.chatConfig
+ALTER TABLE vn.chatConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.chatConfig ADD CONSTRAINT chatConfig_check CHECK (id = 1);
+
+-- vn.claimConfig
+ALTER TABLE vn.claimConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.claimConfig ADD CONSTRAINT claimConfig_check CHECK (id = 1);
+
+-- vn.clientConfig
+ALTER TABLE vn.clientConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.clientConfig ADD CONSTRAINT clientConfig_check CHECK (id = 1);
+
+-- vn.comparativeAddConfig
+ALTER TABLE vn.comparativeAddConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.comparativeAddConfig ADD CONSTRAINT comparativeAddConfig_check CHECK (id = 1);
+
+-- vn.comparativeConfig
+ALTER TABLE vn.comparativeConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.comparativeConfig ADD CONSTRAINT comparativeConfig_check CHECK (id = 1);
+
+-- vn.config
+ALTER TABLE vn.config MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.config ADD CONSTRAINT config_check CHECK (id = 1);
+
+-- vn.conveyorConfig (Tiene más de 1 registro en producción)
+-- ALTER TABLE vn.conveyorConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+-- ALTER TABLE vn.conveyorConfig ADD CONSTRAINT conveyorConfig_check CHECK (id = 1);
+
+-- vn.deviceProductionConfig
+ALTER TABLE vn.deviceProductionConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.deviceProductionConfig ADD CONSTRAINT deviceProductionConfig_check CHECK (id = 1);
+
+-- vn.docuwareConfig
+ALTER TABLE vn.docuwareConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.docuwareConfig ADD CONSTRAINT docuwareConfig_check CHECK (id = 1);
+
+-- vn.floramondoConfig
+ALTER TABLE vn.floramondoConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.floramondoConfig ADD CONSTRAINT floramondoConfig_check CHECK (id = 1);
+
+-- vn.franceExpressConfig
+ALTER TABLE vn.franceExpressConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.franceExpressConfig ADD CONSTRAINT franceExpressConfig_check CHECK (id = 1);
+
+-- vn.glsConfig
+ALTER TABLE vn.glsConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.glsConfig ADD CONSTRAINT glsConfig_check CHECK (id = 1);
+
+-- vn.greugeConfig
+ALTER TABLE vn.greugeConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.greugeConfig ADD CONSTRAINT greugeConfig_check CHECK (id = 1);
+
+-- vn.inventoryConfig
+ALTER TABLE vn.inventoryConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.inventoryConfig ADD CONSTRAINT inventoryConfig_check CHECK (id = 1);
+
+-- vn.invoiceInConfig
+ALTER TABLE vn.invoiceInConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.invoiceInConfig ADD CONSTRAINT invoiceInConfig_check CHECK (id = 1);
+
+-- vn.invoiceOutConfig
+ALTER TABLE vn.invoiceOutConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.invoiceOutConfig ADD CONSTRAINT invoiceOutConfig_check CHECK (id = 1);
diff --git a/db/versions/10953-redChico/08-vn2.sql b/db/versions/10953-redChico/08-vn2.sql
new file mode 100644
index 0000000000..42985365eb
--- /dev/null
+++ b/db/versions/10953-redChico/08-vn2.sql
@@ -0,0 +1,91 @@
+-- vn.invoiceOutTaxConfig (Tiene más de 1 registro en producción)
+-- ALTER TABLE vn.invoiceOutTaxConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+-- ALTER TABLE vn.invoiceOutTaxConfig ADD CONSTRAINT invoiceOutTaxConfig_check CHECK (id = 1);
+
+-- vn.itemConfig
+ALTER TABLE vn.itemConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.itemConfig ADD CONSTRAINT itemConfig_check CHECK (id = 1);
+
+-- vn.machineWorkerConfig
+ALTER TABLE vn.machineWorkerConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.machineWorkerConfig ADD CONSTRAINT machineWorkerConfig_check CHECK (id = 1);
+
+-- vn.mdbConfig
+ALTER TABLE vn.mdbConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.mdbConfig ADD CONSTRAINT mdbConfig_check CHECK (id = 1);
+
+-- vn.mrwConfig
+ALTER TABLE vn.mrwConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.mrwConfig ADD CONSTRAINT mrwConfig_check CHECK (id = 1);
+
+-- vn.osTicketConfig
+ALTER TABLE vn.osTicketConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.osTicketConfig ADD CONSTRAINT osTicketConfig_check CHECK (id = 1);
+
+-- vn.packagingConfig
+ALTER TABLE vn.packagingConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.packagingConfig ADD CONSTRAINT packagingConfig_check CHECK (id = 1);
+
+-- vn.packingSiteConfig
+ALTER TABLE vn.packingSiteConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.packingSiteConfig ADD CONSTRAINT packingSiteConfig_check CHECK (id = 1);
+
+-- vn.productionConfig
+ALTER TABLE vn.productionConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.productionConfig ADD CONSTRAINT productionConfig_check CHECK (id = 1);
+
+-- vn.rateConfig
+ALTER TABLE vn.rateConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.rateConfig ADD CONSTRAINT rateConfig_check CHECK (id = 1);
+
+-- vn.routeConfig
+ALTER TABLE vn.routeConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.routeConfig ADD CONSTRAINT routeConfig_check CHECK (id = 1);
+
+-- vn.salespersonConfig
+ALTER TABLE vn.salespersonConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.salespersonConfig ADD CONSTRAINT salespersonConfig_check CHECK (id = 1);
+
+-- vn.sendingConfig
+ALTER TABLE vn.sendingConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.sendingConfig ADD CONSTRAINT sendingConfig_check CHECK (id = 1);
+
+-- vn.smsConfig
+ALTER TABLE vn.smsConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.smsConfig ADD CONSTRAINT smsConfig_check CHECK (id = 1);
+
+-- vn.ticketConfig
+ALTER TABLE vn.ticketConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.ticketConfig ADD CONSTRAINT ticketConfig_check CHECK (id = 1);
+
+-- vn.tillConfig
+ALTER TABLE vn.tillConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.tillConfig ADD CONSTRAINT tillConfig_check CHECK (id = 1);
+
+-- vn.travelConfig
+ALTER TABLE vn.travelConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.travelConfig ADD CONSTRAINT travelConfig_check CHECK (id = 1);
+
+-- vn.viaexpressConfig
+ALTER TABLE vn.viaexpressConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.viaexpressConfig ADD CONSTRAINT viaexpressConfig_check CHECK (id = 1);
+
+-- vn.wagonConfig
+ALTER TABLE vn.wagonConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.wagonConfig ADD CONSTRAINT wagonConfig_check CHECK (id = 1);
+
+-- vn.workerConfig
+ALTER TABLE vn.workerConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.workerConfig ADD CONSTRAINT workerConfig_check CHECK (id = 1);
+
+-- vn.workerTimeControlConfig
+ALTER TABLE vn.workerTimeControlConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.workerTimeControlConfig ADD CONSTRAINT workerTimeControlConfig_check CHECK (id = 1);
+
+-- vn.zipConfig
+ALTER TABLE vn.zipConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.zipConfig ADD CONSTRAINT zipConfig_check CHECK (id = 1);
+
+-- vn.zoneConfig
+ALTER TABLE vn.zoneConfig MODIFY COLUMN id int(10) unsigned NOT NULL;
+ALTER TABLE vn.zoneConfig ADD CONSTRAINT zoneConfig_check CHECK (id = 1);
diff --git a/db/versions/10956-brownBirch/00-firstScript.sql b/db/versions/10956-brownBirch/00-firstScript.sql
new file mode 100644
index 0000000000..bcd15432c9
--- /dev/null
+++ b/db/versions/10956-brownBirch/00-firstScript.sql
@@ -0,0 +1,12 @@
+CREATE TABLE floranet.`addressPostCode` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `addressFk` int(11) NOT NULL,
+ `postCode` varchar(30) NOT NULL,
+ `hoursInAdvance` int(10) unsigned NOT NULL DEFAULT 24,
+ `dayOfWeek` int(10) unsigned NOT NULL,
+ `deliveryCost` decimal(10,2) NOT NULL DEFAULT 0.00,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `addressPostCode_unique` (`postCode`,`addressFk`,`dayOfWeek`),
+ KEY `addressPostCode_address_FK` (`addressFk`),
+ CONSTRAINT `addressPostCode_address_FK` FOREIGN KEY (`addressFk`) REFERENCES `vn`.`address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Client''s address registered for floranet network';
\ No newline at end of file
diff --git a/db/versions/10957-goldenAnthurium/00-aclTicketClone.sql b/db/versions/10957-goldenAnthurium/00-aclTicketClone.sql
new file mode 100644
index 0000000000..6387b77b04
--- /dev/null
+++ b/db/versions/10957-goldenAnthurium/00-aclTicketClone.sql
@@ -0,0 +1,2 @@
+INSERT INTO `salix`.`ACL` (model, property, accessType, permission, principalType, principalId)
+ VALUES('Ticket', 'clone', 'WRITE', 'ALLOW', 'ROLE', 'administrative');
\ No newline at end of file
diff --git a/db/versions/10959-bronzePalmetto/00-firstScript.sql b/db/versions/10959-bronzePalmetto/00-firstScript.sql
new file mode 100644
index 0000000000..323238d2ea
--- /dev/null
+++ b/db/versions/10959-bronzePalmetto/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE util.debug MODIFY COLUMN value text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL;
diff --git a/db/versions/10962-greenOrchid/00-firstScript.sql b/db/versions/10962-greenOrchid/00-firstScript.sql
new file mode 100644
index 0000000000..c34f5d00b8
--- /dev/null
+++ b/db/versions/10962-greenOrchid/00-firstScript.sql
@@ -0,0 +1,7 @@
+-- Place your SQL code here
+USE vn;
+
+INSERT INTO `salix`.`ACL` (model, property, accessType, permission, principalType, principalId)
+ VALUES
+ ('ExpeditionPallet', '*', 'READ', 'ALLOW', 'ROLE', 'production'),
+ ('Ticket', 'addSaleByCode', 'WRITE', 'ALLOW', 'ROLE', 'production');
\ No newline at end of file
diff --git a/db/versions/10964-silverDracena/00-firstScript.sql b/db/versions/10964-silverDracena/00-firstScript.sql
new file mode 100644
index 0000000000..dbc4ba8a0b
--- /dev/null
+++ b/db/versions/10964-silverDracena/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.entry CHANGE isBlocked isBlocked__ tinyint(4) DEFAULT 0 NOT NULL COMMENT '@deprecated 27/03/2024';
diff --git a/db/versions/10967-wheatLilium/00-firstScript.sql b/db/versions/10967-wheatLilium/00-firstScript.sql
new file mode 100644
index 0000000000..40cfe45bdb
--- /dev/null
+++ b/db/versions/10967-wheatLilium/00-firstScript.sql
@@ -0,0 +1,4 @@
+-- Place your SQL code here
+
+INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
+ VALUES('ItemShelving', 'hasItemOlder', 'READ', 'ALLOW', 'ROLE', 'production');
diff --git a/db/versions/10968-salmonBamboo/00-firstScript.sql b/db/versions/10968-salmonBamboo/00-firstScript.sql
new file mode 100644
index 0000000000..b792010717
--- /dev/null
+++ b/db/versions/10968-salmonBamboo/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.professionalCategory DROP COLUMN dayBreak, DROP COLUMN `level`;
+ALTER TABLE vn.professionalCategory
+ CHANGE name description varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL;
diff --git a/db/versions/10969-silverCataractarum/00-aclSupplierDms.sql b/db/versions/10969-silverCataractarum/00-aclSupplierDms.sql
new file mode 100644
index 0000000000..48c7438f13
--- /dev/null
+++ b/db/versions/10969-silverCataractarum/00-aclSupplierDms.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
+ VALUES('SupplierDms', '*', '*', 'ALLOW', 'ROLE', 'employee');
\ No newline at end of file
diff --git a/db/versions/10970-bronzeGerbera/00-specialPrice.sql b/db/versions/10970-bronzeGerbera/00-specialPrice.sql
new file mode 100644
index 0000000000..e2e46fb1fa
--- /dev/null
+++ b/db/versions/10970-bronzeGerbera/00-specialPrice.sql
@@ -0,0 +1,10 @@
+ALTER TABLE vn.specialPrice MODIFY COLUMN clientFk int(11) NULL;
+ALTER TABLE vn.specialPrice ADD started date NOT NULL DEFAULT '2024-01-01';
+ALTER TABLE vn.specialPrice ADD ended date NULL;
+ALTER TABLE vn.specialPrice MODIFY COLUMN itemFk int(11) NOT NULL;
+ALTER TABLE vn.specialPrice MODIFY COLUMN value DECIMAL(10,2) NOT NULL;
+
+
+ALTER TABLE vn.`specialPrice`
+ ADD CONSTRAINT `check_date_range`
+ CHECK (`ended` IS NULL OR `ended` >= `started`);
diff --git a/db/versions/10971-turquoiseRuscus/00-firstScript.sql b/db/versions/10971-turquoiseRuscus/00-firstScript.sql
new file mode 100644
index 0000000000..82a0117c3b
--- /dev/null
+++ b/db/versions/10971-turquoiseRuscus/00-firstScript.sql
@@ -0,0 +1,4 @@
+ALTER TABLE IF EXISTS `vn`.`greugeConfig`
+ ADD COLUMN IF NOT EXISTS `daysAgoOffset` int(11) NOT NULL;
+
+UPDATE vn.greugeConfig SET daysAgoOffset=15;
\ No newline at end of file
diff --git a/db/versions/10973-purpleAsparagus/00-firstScript.sql b/db/versions/10973-purpleAsparagus/00-firstScript.sql
new file mode 100644
index 0000000000..f5b8385295
--- /dev/null
+++ b/db/versions/10973-purpleAsparagus/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.productionConfig ADD defaultFreightItemFk INT UNSIGNED DEFAULT 71 NOT NULL COMMENT 'Default value for expedition table';
diff --git a/db/versions/10975-whiteIvy/00-action.sql b/db/versions/10975-whiteIvy/00-action.sql
new file mode 100644
index 0000000000..3f9cf9d8b9
--- /dev/null
+++ b/db/versions/10975-whiteIvy/00-action.sql
@@ -0,0 +1 @@
+CREATE INDEX expeditionLog_action_IDX USING BTREE ON srt.expeditionLog (`action`);
diff --git a/db/versions/10975-whiteIvy/01-expeditionFk.sql b/db/versions/10975-whiteIvy/01-expeditionFk.sql
new file mode 100644
index 0000000000..ac1e01e6fe
--- /dev/null
+++ b/db/versions/10975-whiteIvy/01-expeditionFk.sql
@@ -0,0 +1 @@
+CREATE INDEX expeditionLog_expeditionFk_IDX USING BTREE ON srt.expeditionLog (expeditionFk);
diff --git a/db/versions/10976-greenCamellia/00-firstScript.sql b/db/versions/10976-greenCamellia/00-firstScript.sql
new file mode 100644
index 0000000000..0fd9440219
--- /dev/null
+++ b/db/versions/10976-greenCamellia/00-firstScript.sql
@@ -0,0 +1,20 @@
+CREATE OR REPLACE TEMPORARY TABLE tmp.claimsWithHasToPickUp
+ SELECT id
+ FROM vn.claim
+ WHERE hasToPickUp;
+
+ALTER TABLE vn.claim CHANGE hasToPickUp pickup ENUM('agency', 'delivery') DEFAULT NULL;
+
+UPDATE vn.claim c
+ JOIN tmp.claimsWithHasToPickUp tmp ON tmp.id = c.id
+ SET c.pickup = 'delivery';
+
+-- Solved bug empty value
+UPDATE vn.claim
+ SET pickup = NULL
+ WHERE pickup = '';
+
+DROP TEMPORARY TABLE tmp.claimsWithHasToPickUp;
+
+INSERT INTO salix.ACL (model,property,accessType,principalId)
+ VALUES ('Application','getEnumValues','*','employee');
\ No newline at end of file
diff --git a/db/versions/10977-wheatFern/00-firstScript.sql b/db/versions/10977-wheatFern/00-firstScript.sql
new file mode 100644
index 0000000000..53c1a4fa60
--- /dev/null
+++ b/db/versions/10977-wheatFern/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.buy DROP COLUMN packageFk;
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index dba430e663..685345273f 100644
--- a/e2e/helpers/selectors.js
+++ b/e2e/helpers/selectors.js
@@ -762,7 +762,6 @@ export default {
claimBasicData: {
claimState: 'vn-claim-basic-data vn-autocomplete[ng-model="$ctrl.claim.claimStateFk"]',
packages: 'vn-input-number[ng-model="$ctrl.claim.packages"]',
- hasToPickUpCheckbox: 'vn-claim-basic-data vn-check[ng-model="$ctrl.claim.hasToPickUp"]',
saveButton: `button[type=submit]`
},
claimDetail: {
@@ -1259,7 +1258,7 @@ export default {
},
supplierBasicData: {
alias: 'vn-supplier-basic-data vn-textfield[ng-model="$ctrl.supplier.nickname"]',
- isSerious: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isSerious"]',
+ isReal: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isReal"]',
isActive: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isActive"]',
isPayMethodChecked: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isPayMethodChecked"]',
notes: 'vn-supplier-basic-data vn-textarea[ng-model="$ctrl.supplier.note"]',
diff --git a/e2e/paths/02-client/01_create_client.spec.js b/e2e/paths/02-client/01_create_client.spec.js
index 744b11a72f..e951ec784b 100644
--- a/e2e/paths/02-client/01_create_client.spec.js
+++ b/e2e/paths/02-client/01_create_client.spec.js
@@ -32,7 +32,7 @@ describe('Client create path', () => {
await page.autocompleteSearch(selectors.createClientView.salesPerson, 'salesPerson');
await page.autocompleteSearch(selectors.createClientView.businessType, 'florist');
await page.write(selectors.createClientView.taxNumber, '74451390E');
- await page.write(selectors.createClientView.userName, 'CaptainMarvel');
+ await page.write(selectors.createClientView.userName, 'captainmarvel');
await page.write(selectors.createClientView.email, 'CarolDanvers@verdnatura.es');
await page.waitToClick(selectors.createClientView.createButton);
const message = await page.waitForSnackbar();
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 c5e132ab7f..8758c3b051 100644
--- a/e2e/paths/02-client/07_edit_web_access.spec.js
+++ b/e2e/paths/02-client/07_edit_web_access.spec.js
@@ -29,7 +29,7 @@ describe('Client web access path', () => {
await page.click($.enableWebAccess);
await page.click($.saveButton);
const enableMessage = await page.waitForSnackbar();
- await page.overwrite($.userName, 'Legion');
+ await page.overwrite($.userName, 'legion');
await page.overwrite($.email, 'legion@marvel.com');
await page.click($.saveButton);
const modifyMessage = await page.waitForSnackbar();
@@ -47,7 +47,7 @@ describe('Client web access path', () => {
expect(modifyMessage.type).toBe('success');
expect(hasAccess).toBe('unchecked');
- expect(userName).toEqual('Legion');
+ expect(userName).toEqual('legion');
expect(email).toEqual('legion@marvel.com');
// expect(logName).toEqual('Legion');
diff --git a/e2e/paths/02-client/09_add_credit.spec.js b/e2e/paths/02-client/09_add_credit.spec.js
index 2365f06355..179265b0f4 100644
--- a/e2e/paths/02-client/09_add_credit.spec.js
+++ b/e2e/paths/02-client/09_add_credit.spec.js
@@ -34,6 +34,6 @@ describe('Client Add credit path', () => {
const result = await page.waitToGetProperty(selectors.clientCredit.firstCreditText, 'innerText');
expect(result).toContain(999);
- expect(result).toContain('salesAssistant');
+ expect(result).toContain('salesassistant');
});
});
diff --git a/e2e/paths/02-client/19_summary.spec.js b/e2e/paths/02-client/19_summary.spec.js
index b3bf43c5c1..dec8d505c1 100644
--- a/e2e/paths/02-client/19_summary.spec.js
+++ b/e2e/paths/02-client/19_summary.spec.js
@@ -61,7 +61,7 @@ describe('Client summary path', () => {
it('should display web access details', async() => {
const result = await page.waitToGetProperty(selectors.clientSummary.userName, 'innerText');
- expect(result).toContain('PetterParker');
+ expect(result).toContain('petterparker');
});
it('should display business data', async() => {
diff --git a/e2e/paths/05-ticket/05_tracking_state.spec.js b/e2e/paths/05-ticket/05_tracking_state.spec.js
index 9ac3732872..5cfc1c9d43 100644
--- a/e2e/paths/05-ticket/05_tracking_state.spec.js
+++ b/e2e/paths/05-ticket/05_tracking_state.spec.js
@@ -59,7 +59,7 @@ describe('Ticket Create new tracking state path', () => {
const result = await page
.waitToGetProperty(selectors.createStateView.worker, 'value');
- expect(result).toEqual('salesPerson');
+ expect(result).toEqual('salesperson');
});
it(`should succesfully create a valid state`, async() => {
diff --git a/e2e/paths/05-ticket/09_weekly.spec.js b/e2e/paths/05-ticket/09_weekly.spec.js
index 74febfd014..20cfa0d13e 100644
--- a/e2e/paths/05-ticket/09_weekly.spec.js
+++ b/e2e/paths/05-ticket/09_weekly.spec.js
@@ -24,7 +24,7 @@ describe('Ticket descriptor path', () => {
it('should go back to the ticket index then search and access a ticket summary', async() => {
await page.accessToSection('ticket.index');
- await page.accessToSearchResult('11');
+ await page.accessToSearchResult('33');
});
it('should add the ticket to thursday turn using the descriptor more menu', async() => {
@@ -33,7 +33,7 @@ describe('Ticket descriptor path', () => {
await page.waitToClick(selectors.ticketDescriptor.thursdayButton);
const message = await page.waitForSnackbar();
- expect(message.text).toContain('Data saved!');
+ expect(message.text).toContain('Current ticket deleted and added to shift');
});
it('should again click on the Tickets button of the top bar menu', async() => {
@@ -43,7 +43,7 @@ describe('Ticket descriptor path', () => {
await page.waitForState('ticket.index');
});
- it('should confirm the ticket 11 was added to thursday', async() => {
+ it('should confirm the ticket 33 was added to thursday', async() => {
await page.accessToSection('ticket.weekly.index');
const result = await page.waitToGetProperty(selectors.ticketsIndex.thirdWeeklyTicket, 'value');
@@ -57,8 +57,8 @@ describe('Ticket descriptor path', () => {
await page.waitForState('ticket.index');
});
- it('should now search for the ticket 11', async() => {
- await page.accessToSearchResult('11');
+ it('should now search for the ticket 33', async() => {
+ await page.accessToSearchResult('33');
await page.waitForState('ticket.card.summary');
});
@@ -68,7 +68,7 @@ describe('Ticket descriptor path', () => {
await page.waitToClick(selectors.ticketDescriptor.saturdayButton);
const message = await page.waitForSnackbar();
- expect(message.text).toContain('Data saved!');
+ expect(message.text).toContain('Current ticket deleted and added to shift');
});
it('should click on the Tickets button of the top bar menu once again', async() => {
@@ -78,7 +78,7 @@ describe('Ticket descriptor path', () => {
await page.waitForState('ticket.index');
});
- it('should confirm the ticket 11 was added on saturday', async() => {
+ it('should confirm the ticket 33 was added on saturday', async() => {
await page.accessToSection('ticket.weekly.index');
await page.waitForTimeout(5000);
@@ -87,14 +87,14 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual('Saturday');
});
- it('should now search for the weekly ticket 11', async() => {
- await page.doSearch('11');
+ it('should now search for the weekly ticket 33', async() => {
+ await page.doSearch('33');
const nResults = await page.countElement(selectors.ticketsIndex.searchWeeklyResult);
expect(nResults).toEqual(2);
});
- it('should delete the weekly ticket 11', async() => {
+ it('should delete the weekly ticket 33', async() => {
await page.waitToClick(selectors.ticketsIndex.firstWeeklyTicketDeleteIcon);
await page.waitToClick(selectors.ticketsIndex.acceptDeleteTurn);
const message = await page.waitForSnackbar();
diff --git a/e2e/paths/06-claim/01_basic_data.spec.js b/e2e/paths/06-claim/01_basic_data.spec.js
index 2df95bd4a4..33c68183f5 100644
--- a/e2e/paths/06-claim/01_basic_data.spec.js
+++ b/e2e/paths/06-claim/01_basic_data.spec.js
@@ -34,15 +34,6 @@ describe('Claim edit basic data path', () => {
await page.waitForState('claim.card.detail');
});
- it('should check the "Pick up" checkbox', async() => {
- await page.reloadSection('claim.card.basicData');
- await page.waitToClick(selectors.claimBasicData.hasToPickUpCheckbox);
- await page.waitToClick(selectors.claimBasicData.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
it('should confirm the claim state was edited', async() => {
await page.reloadSection('claim.card.basicData');
await page.waitForSelector(selectors.claimBasicData.claimState);
@@ -51,12 +42,6 @@ describe('Claim edit basic data path', () => {
expect(result).toEqual('Resuelto');
});
- it('should confirm the "is paid with mana" and "Pick up" checkbox are checked', async() => {
- const hasToPickUpCheckbox = await page.checkboxState(selectors.claimBasicData.hasToPickUpCheckbox);
-
- expect(hasToPickUpCheckbox).toBe('checked');
- });
-
it('should confirm the claim packages was edited', async() => {
const result = await page
.waitToGetProperty(selectors.claimBasicData.packages, 'value');
diff --git a/e2e/paths/13-supplier/02_basic_data.spec.js b/e2e/paths/13-supplier/02_basic_data.spec.js
index 79a9898caa..710ebd8df5 100644
--- a/e2e/paths/13-supplier/02_basic_data.spec.js
+++ b/e2e/paths/13-supplier/02_basic_data.spec.js
@@ -20,7 +20,7 @@ describe('Supplier basic data path', () => {
it('should edit the basic data', async() => {
await page.clearInput(selectors.supplierBasicData.alias);
await page.write(selectors.supplierBasicData.alias, 'Plants Nick SL');
- await page.waitToClick(selectors.supplierBasicData.isSerious);
+ await page.waitToClick(selectors.supplierBasicData.isReal);
await page.waitToClick(selectors.supplierBasicData.isActive);
await page.waitToClick(selectors.supplierBasicData.isPayMethodChecked);
await page.write(selectors.supplierBasicData.notes, 'Some notes');
@@ -41,8 +41,8 @@ describe('Supplier basic data path', () => {
expect(result).toEqual('Plants Nick SL');
});
- it('should check the isSerious checkbox is now checked', async() => {
- const result = await page.checkboxState(selectors.supplierBasicData.isSerious);
+ it('should check the isReal checkbox is now checked', async() => {
+ const result = await page.checkboxState(selectors.supplierBasicData.isReal);
expect(result).toBe('checked');
});
diff --git a/e2e/paths/14-account/01_create_and_basic_data.spec.js b/e2e/paths/14-account/01_create_and_basic_data.spec.js
index e38d1aeecf..e2c069d800 100644
--- a/e2e/paths/14-account/01_create_and_basic_data.spec.js
+++ b/e2e/paths/14-account/01_create_and_basic_data.spec.js
@@ -21,7 +21,7 @@ describe('Account create and basic data path', () => {
});
it('should fill the form and then save it by clicking the create button', async() => {
- await page.write(selectors.accountIndex.newName, 'Remy');
+ await page.write(selectors.accountIndex.newName, 'remy');
await page.write(selectors.accountIndex.newNickname, 'Gambit');
await page.write(selectors.accountIndex.newEmail, 'RemyEtienneLeBeau@verdnatura.es');
await page.autocompleteSearch(selectors.accountIndex.newRole, 'Trainee');
@@ -39,7 +39,7 @@ describe('Account create and basic data path', () => {
it('should check the name is as expected', async() => {
const result = await page.waitToGetProperty(selectors.accountBasicData.name, 'value');
- expect(result).toEqual('Remy');
+ expect(result).toEqual('remy');
});
it('should check the nickname is as expected', async() => {
diff --git a/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js b/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js
index dd35dd740e..840fb8afee 100644
--- a/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js
+++ b/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js
@@ -8,7 +8,7 @@ describe('Account Alias create and basic data path', () => {
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
- await page.loginAndModule('developer', 'account');
+ await page.loginAndModule('itManagement', 'account');
await page.accessToSection('account.alias');
});
diff --git a/e2e/paths/14-account/05_connections.spec.js b/e2e/paths/14-account/05_connections.spec.js
index 89b2861013..49d5f612d2 100644
--- a/e2e/paths/14-account/05_connections.spec.js
+++ b/e2e/paths/14-account/05_connections.spec.js
@@ -22,12 +22,4 @@ describe('Account Connections path', () => {
expect(firstResult).toContain(account);
});
-
- it('should kill this connection and then get redirected to the login page', async() => {
- await page.waitToClick(selectors.accountConnections.deleteFirstConnection);
- await page.waitToClick(selectors.globalItems.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Your session has expired, please login again');
- });
});
diff --git a/front/core/components/link-phone/index.html b/front/core/components/link-phone/index.html
index 2789ab75ca..58724b0a1e 100644
--- a/front/core/components/link-phone/index.html
+++ b/front/core/components/link-phone/index.html
@@ -5,7 +5,6 @@
flat
round
icon="phone"
- title="MicroSIP"
ng-click="$event.stopPropagation();"
>
diff --git a/front/core/components/searchbar/style.scss b/front/core/components/searchbar/style.scss
index eab9c126b1..b8dff9474c 100644
--- a/front/core/components/searchbar/style.scss
+++ b/front/core/components/searchbar/style.scss
@@ -61,10 +61,10 @@ vn-searchbar {
}
vn-icon[icon="info"] {
- position: absolute;
+ position: absolute;
top: 2px;
right: 2px
}
}
}
-}
\ No newline at end of file
+}
diff --git a/front/core/services/auth.js b/front/core/services/auth.js
index 753bc3fba4..d77966aca5 100644
--- a/front/core/services/auth.js
+++ b/front/core/services/auth.js
@@ -86,7 +86,8 @@ export default class Auth {
return this.$http.get('VnUsers/ShareToken', {
headers: {Authorization: json.data.token}
}).then(({data}) => {
- this.vnToken.set(json.data.token, data.multimediaToken.id, now, json.data.ttl, remember);
+ // Usar data.multimediaToken.id cuando el resto de sistemas lo tengan completado
+ this.vnToken.set(json.data.token, json.data.token, now, json.data.ttl, remember);
this.loadAcls().then(() => {
let continueHash = this.$state.params.continue;
if (continueHash)
diff --git a/front/core/services/file.js b/front/core/services/file.js
index 25ace44706..dfd2ebc839 100644
--- a/front/core/services/file.js
+++ b/front/core/services/file.js
@@ -14,7 +14,7 @@ class File {
*/
getPath(dmsUrl) {
const serializedParams = this.$httpParamSerializer({
- access_token: this.vnToken.token
+ access_token: this.vnToken.tokenMultimedia
});
return `${dmsUrl}?${serializedParams}`;
diff --git a/front/core/services/report.js b/front/core/services/report.js
index d6eb28ea49..e3579dd5a6 100644
--- a/front/core/services/report.js
+++ b/front/core/services/report.js
@@ -15,7 +15,7 @@ class Report {
*/
show(path, params) {
params = Object.assign({
- access_token: this.vnToken.token
+ access_token: this.vnToken.tokenMultimedia
}, params);
const serializedParams = this.$httpParamSerializer(params);
const query = serializedParams ? `?${serializedParams}` : '';
diff --git a/front/core/services/token.js b/front/core/services/token.js
index 125de6b9aa..028ebd8415 100644
--- a/front/core/services/token.js
+++ b/front/core/services/token.js
@@ -59,7 +59,8 @@ export default class Token {
getStorage(storage) {
this.token = storage.getItem('vnToken');
- this.tokenMultimedia = storage.getItem('vnTokenMultimedia');
+ // Cambio realizado temporalmente
+ this.tokenMultimedia = this.token; // storage.getItem('vnTokenMultimedia');
if (!this.token) return;
const created = storage.getItem('vnTokenCreated');
this.created = created && new Date(created);
diff --git a/loopback/common/methods/application/getEnumValues.js b/loopback/common/methods/application/getEnumValues.js
new file mode 100644
index 0000000000..5e36e60be6
--- /dev/null
+++ b/loopback/common/methods/application/getEnumValues.js
@@ -0,0 +1,56 @@
+const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
+const UserError = require('vn-loopback/util/user-error');
+
+module.exports = Self => {
+ Self.remoteMethod('getEnumValues', {
+ description: 'Return enum values of column',
+ accessType: 'EXECUTE',
+ accepts: [
+ {
+ arg: 'schema',
+ type: 'string',
+ description: 'The schema of db',
+ required: true,
+ },
+ {
+ arg: 'table',
+ type: 'string',
+ description: 'The table of schema',
+ required: true,
+ },
+ {
+ arg: 'column',
+ type: 'string',
+ description: 'The column of table',
+ required: true,
+ },
+ ],
+ returns: {
+ type: 'any',
+ root: true
+ },
+ http: {
+ path: `/get-enum-values`,
+ verb: 'GET'
+ }
+ });
+
+ Self.getEnumValues = async(schema, table, column) => {
+ const stmt = new ParameterizedSQL(`
+ SELECT COLUMN_TYPE
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = ?
+ AND TABLE_NAME = ?
+ AND COLUMN_NAME = ?
+ AND DATA_TYPE = 'enum';`,
+ [schema, table, column]);
+
+ const conn = Self.dataSource.connector;
+ const [result] = await conn.executeStmt(stmt);
+
+ if (!result) throw new UserError(`No results found`);
+
+ const regex = /'([^']*)'/g;
+ return result.COLUMN_TYPE.match(regex).map(match => match.slice(1, -1));
+ };
+};
diff --git a/loopback/common/methods/application/spec/getEnumValues.spec.js b/loopback/common/methods/application/spec/getEnumValues.spec.js
new file mode 100644
index 0000000000..edb2e76f7d
--- /dev/null
+++ b/loopback/common/methods/application/spec/getEnumValues.spec.js
@@ -0,0 +1,35 @@
+const models = require('vn-loopback/server/server').models;
+
+describe('Application getEnumValues()', () => {
+ let tx;
+
+ beforeEach(async() => {
+ tx = await models.Application.beginTransaction({});
+ const options = {transaction: tx};
+
+ await models.Application.rawSql(`
+ CREATE TABLE tableWithEnum (
+ direction enum('in', 'out', 'middle'),
+ PRIMARY KEY (direction)
+ ) ENGINE=InnoDB;
+ `, null, options);
+ });
+
+ it('should return three if is ok', async() => {
+ try {
+ const options = {transaction: tx};
+ const response = await models.Application.getEnumValues(
+ 'vn',
+ 'tableWithEnum',
+ 'direction',
+ options
+ );
+
+ expect(response.length).toEqual(3);
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+});
diff --git a/loopback/common/models/application.js b/loopback/common/models/application.js
index ac8ae78f0d..6bdc2c13a2 100644
--- a/loopback/common/models/application.js
+++ b/loopback/common/models/application.js
@@ -5,4 +5,5 @@ module.exports = function(Self) {
require('../methods/application/execute')(Self);
require('../methods/application/executeProc')(Self);
require('../methods/application/executeFunc')(Self);
+ require('../methods/application/getEnumValues')(Self);
};
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index 31b954a32b..a0e60550f8 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -68,7 +68,7 @@
"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}}})",
"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",
+ "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}}*",
"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",
@@ -89,6 +89,8 @@
"landed": "Landed",
"addressFk": "Address",
"companyFk": "Company",
+ "agency": "Agency",
+ "delivery": "Delivery",
"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 nif cannot be empty": "The nif cannot be empty",
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index 7730d4a8cf..8b02f30483 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -1,352 +1,356 @@
{
- "Phone format is invalid": "El formato del teléfono no es correcto",
- "You are not allowed to change the credit": "No tienes privilegios para modificar el crédito",
- "Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia",
- "The default consignee can not be unchecked": "No se puede desmarcar el consignatario predeterminado",
- "Unable to default a disabled consignee": "No se puede poner predeterminado un consignatario desactivado",
- "Can't be blank": "No puede estar en blanco",
- "Invalid TIN": "NIF/CIF inválido",
- "TIN must be unique": "El NIF/CIF debe ser único",
- "A client with that Web User name already exists": "Ya existe un cliente con ese Usuario Web",
- "Is invalid": "Es inválido",
- "Quantity cannot be zero": "La cantidad no puede ser cero",
- "Enter an integer different to zero": "Introduce un entero distinto de cero",
- "Package cannot be blank": "El embalaje no puede estar en blanco",
- "The company name must be unique": "La razón social debe ser única",
- "Invalid email": "Correo electrónico inválido",
- "The IBAN does not have the correct format": "El IBAN no tiene el formato correcto",
- "That payment method requires an IBAN": "El método de pago seleccionado requiere un IBAN",
- "That payment method requires a BIC": "El método de pago seleccionado requiere un BIC",
- "State cannot be blank": "El estado no puede estar en blanco",
- "Worker cannot be blank": "El trabajador no puede estar en blanco",
- "Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado",
- "can't be blank": "El campo no puede estar vacío",
- "Observation type must be unique": "El tipo de observación no puede repetirse",
- "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 similar to the last one": "El grade debe ser similar al último",
- "Only manager can change the credit": "Solo el gerente puede cambiar el credito de este cliente",
- "Name cannot be blank": "El nombre no puede estar en blanco",
- "Phone cannot be blank": "El teléfono no puede estar en blanco",
- "Period cannot be blank": "El periodo no puede estar en blanco",
- "Choose a company": "Selecciona una empresa",
- "Se debe rellenar el campo de texto": "Se debe rellenar el campo de texto",
- "Description should have maximum of 45 characters": "La descripción debe tener maximo 45 caracteres",
- "Cannot be blank": "El campo no puede estar en blanco",
- "The grade must be an integer greater than or equal to zero": "El grade debe ser un entero mayor o igual a cero",
- "Sample type cannot be blank": "El tipo de plantilla no puede quedar en blanco",
- "Description cannot be blank": "Se debe rellenar el campo de texto",
- "The price of the item changed": "El precio del artículo cambió",
- "The value should not be greater than 100%": "El valor no debe de ser mayor de 100%",
- "The value should be a number": "El valor debe ser un numero",
- "This order is not editable": "Esta orden no se puede modificar",
- "You can't create an order for a frozen client": "No puedes crear una orden para un cliente congelado",
- "You can't create an order for a client that has a debt": "No puedes crear una orden para un cliente con deuda",
- "is not a valid date": "No es una fecha valida",
- "Barcode must be unique": "El código de barras debe ser único",
- "The warehouse can't be repeated": "El almacén no puede repetirse",
- "The tag or priority can't be repeated for an item": "El tag o prioridad no puede repetirse para un item",
- "The observation type can't be repeated": "El tipo de observación no puede repetirse",
- "A claim with that sale already exists": "Ya existe una reclamación para esta línea",
- "You don't have enough privileges to change that field": "No tienes permisos para cambiar ese campo",
- "Warehouse cannot be blank": "El almacén no puede quedar en blanco",
- "Agency cannot be blank": "La agencia no puede quedar en blanco",
- "Not enough privileges to edit a client with verified data": "No tienes permisos para hacer cambios en un cliente con datos comprobados",
- "This address doesn't exist": "Este consignatario no existe",
- "You must delete the claim id %d first": "Antes debes borrar la reclamación %d",
- "You don't have enough privileges": "No tienes suficientes permisos",
- "Cannot check Equalization Tax in this NIF/CIF": "No se puede marcar RE en este NIF/CIF",
- "You can't make changes on the basic data of an confirmed order or with rows": "No puedes cambiar los datos básicos de una orden con artículos",
- "INVALID_USER_NAME": "El nombre de usuario solo debe contener letras minúsculas o, a partir del segundo carácter, números o subguiones, no está permitido el uso de la letra ñ",
- "You can't create a ticket for a frozen client": "No puedes crear un ticket para un cliente congelado",
- "You can't create a ticket for an inactive client": "No puedes crear un ticket para un cliente inactivo",
- "Tag value cannot be blank": "El valor del tag no puede quedar en blanco",
- "ORDER_EMPTY": "Cesta vacía",
- "You don't have enough privileges to do that": "No tienes permisos para cambiar esto",
- "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT",
- "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido",
- "Street cannot be empty": "Dirección no puede estar en blanco",
- "City cannot be empty": "Ciudad no puede estar en blanco",
- "Code cannot be blank": "Código no puede estar en blanco",
- "You cannot remove this department": "No puedes eliminar este departamento",
- "The extension must be unique": "La extensión debe ser unica",
- "The secret can't be blank": "La contraseña no puede estar en blanco",
- "We weren't able to send this SMS": "No hemos podido enviar el SMS",
- "This client can't be invoiced": "Este cliente no puede ser facturado",
- "You must provide the correction information to generate a corrective invoice": "Debes informar la información de corrección para generar una factura rectificativa",
- "This ticket can't be invoiced": "Este ticket no puede ser facturado",
- "You cannot add or modify services to an invoiced ticket": "No puedes añadir o modificar servicios a un ticket facturado",
- "This ticket can not be modified": "Este ticket no puede ser modificado",
- "The introduced hour already exists": "Esta hora ya ha sido introducida",
- "INFINITE_LOOP": "Existe una dependencia entre dos Jefes",
- "The sales of the receiver ticket can't be modified": "Las lineas del ticket al que envias no pueden ser modificadas",
- "NO_AGENCY_AVAILABLE": "No hay una zona de reparto disponible con estos parámetros",
- "ERROR_PAST_SHIPMENT": "No puedes seleccionar una fecha de envío en pasado",
- "The current ticket can't be modified": "El ticket actual no puede ser modificado",
- "The current claim can't be modified": "La reclamación actual no puede ser modificada",
- "The sales of this ticket can't be modified": "Las lineas de este ticket no pueden ser modificadas",
- "The sales do not exists": "La(s) línea(s) seleccionada(s) no existe(n)",
- "Please select at least one sale": "Por favor selecciona al menos una linea",
- "All sales must belong to the same ticket": "Todas las lineas deben pertenecer al mismo ticket",
- "NO_ZONE_FOR_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada",
- "This item doesn't exists": "El artículo no existe",
- "NOT_ZONE_WITH_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada",
- "Extension format is invalid": "El formato de la extensión es inválido",
- "Invalid parameters to create a new ticket": "Parámetros inválidos para crear un nuevo ticket",
- "This item is not available": "Este artículo no está disponible",
- "This postcode already exists": "Este código postal ya existe",
- "Concept cannot be blank": "El concepto no puede quedar en blanco",
- "File doesn't exists": "El archivo no existe",
- "You don't have privileges to change the zone": "No tienes permisos para cambiar la zona o para esos parámetros hay más de una opción de envío, hable con las agencias",
- "This ticket is already on weekly tickets": "Este ticket ya está en tickets programados",
- "Ticket id cannot be blank": "El id de ticket no puede quedar en blanco",
- "Weekday cannot be blank": "El día de la semana no puede quedar en blanco",
- "You can't delete a confirmed order": "No puedes borrar un pedido confirmado",
- "The social name has an invalid format": "El nombre fiscal tiene un formato incorrecto",
- "Invalid quantity": "Cantidad invalida",
- "This postal code is not valid": "Este código postal no es válido",
- "is invalid": "es inválido",
- "The postcode doesn't exist. Please enter a correct one": "El código postal no existe. Por favor, introduce uno correcto",
- "The department name can't be repeated": "El nombre del departamento no puede repetirse",
- "This phone already exists": "Este teléfono ya existe",
- "You cannot move a parent to its own sons": "No puedes mover un elemento padre a uno de sus hijos",
- "You can't create a claim for a removed ticket": "No puedes crear una reclamación para un ticket eliminado",
- "You cannot delete a ticket that part of it is being prepared": "No puedes eliminar un ticket en el que una parte que está siendo preparada",
- "You must delete all the buy requests first": "Debes eliminar todas las peticiones de compra primero",
- "You should specify a date": "Debes especificar una fecha",
- "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fin",
- "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fin",
- "You should mark at least one week day": "Debes marcar al menos un día de la semana",
- "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío",
- "Customs agent is required for a non UEE member": "El agente de aduanas es requerido para los clientes extracomunitarios",
- "Incoterms is required for a non UEE member": "El incoterms es requerido para los clientes extracomunitarios",
- "Deleted sales from ticket": "He eliminado las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
- "Added sale to ticket": "He añadido la siguiente linea al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
- "Changed sale discount": "He cambiado el descuento de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Created claim": "He creado la reclamación [{{claimId}}]({{{claimUrl}}}) de las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Changed sale price": "He cambiado el precio de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* del ticket [{{ticketId}}]({{{ticketUrl}}})",
- "Changed sale quantity": "He cambiado la cantidad de [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* del ticket [{{ticketId}}]({{{ticketUrl}}})",
- "State": "Estado",
- "regular": "normal",
- "reserved": "reservado",
- "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})",
- "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}",
- "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*",
- "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})",
- "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})",
- "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}",
- "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*",
- "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*",
- "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}",
- "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto",
- "Distance must be lesser than 4000": "La distancia debe ser inferior a 4000",
- "This ticket is deleted": "Este ticket está eliminado",
- "Unable to clone this travel": "No ha sido posible clonar este travel",
- "This thermograph id already exists": "La id del termógrafo ya existe",
- "Choose a date range or days forward": "Selecciona un rango de fechas o días en adelante",
- "ORDER_ALREADY_CONFIRMED": "ORDEN YA CONFIRMADA",
- "Invalid password": "Invalid password",
- "Password does not meet requirements": "La contraseña no cumple los requisitos",
- "Role already assigned": "Rol ya asignado",
- "Invalid role name": "Nombre de rol no válido",
- "Role name must be written in camelCase": "El nombre del rol debe escribirse en camelCase",
- "Email already exists": "El correo ya existe",
- "User already exists": "El/La usuario/a ya existe",
- "Absence change notification on the labour calendar": "Notificación de cambio de ausencia en el calendario laboral",
- "Record of hours week": "Registro de horas semana {{week}} año {{year}} ",
- "Created absence": "El empleado {{author}} ha añadido una ausencia de tipo '{{absenceType}}' a {{employee}} para el día {{dated}}.",
- "Deleted absence": "El empleado {{author}} ha eliminado una ausencia de tipo '{{absenceType}}' a {{employee}} del día {{dated}}.",
- "I have deleted the ticket id": "He eliminado el ticket id [{{id}}]({{{url}}})",
- "I have restored the ticket id": "He restaurado el ticket id [{{id}}]({{{url}}})",
- "You can only restore a ticket within the first hour after deletion": "Únicamente puedes restaurar el ticket dentro de la primera hora después de su eliminación",
- "Changed this data from the ticket": "He cambiado estos datos del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "agencyModeFk": "Agencia",
- "clientFk": "Cliente",
- "zoneFk": "Zona",
- "warehouseFk": "Almacén",
- "shipped": "F. envío",
- "landed": "F. entrega",
- "addressFk": "Consignatario",
- "companyFk": "Empresa",
- "The social name cannot be empty": "La razón social no puede quedar en blanco",
- "The nif cannot be empty": "El NIF no puede quedar en blanco",
- "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados",
- "ASSIGN_ZONE_FIRST": "Asigna una zona primero",
- "Amount cannot be zero": "El importe no puede ser cero",
- "Company has to be official": "Empresa inválida",
- "You can not select this payment method without a registered bankery account": "No se puede utilizar este método de pago si no has registrado una cuenta bancaria",
- "Action not allowed on the test environment": "Esta acción no está permitida en el entorno de pruebas",
- "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta",
- "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*",
- "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}*",
- "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío",
- "This BIC already exist.": "Este BIC ya existe.",
- "That item doesn't exists": "Ese artículo no existe",
- "There's a new urgent ticket:": "Hay un nuevo ticket urgente:",
- "Invalid account": "Cuenta inválida",
- "Compensation account is empty": "La cuenta para compensar está vacia",
- "This genus already exist": "Este genus ya existe",
- "This specie already exist": "Esta especie ya existe",
- "Client assignment has changed": "He cambiado el comercial ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})",
- "None": "Ninguno",
- "The contract was not active during the selected date": "El contrato no estaba activo durante la fecha seleccionada",
- "Cannot add more than one '1/2 day vacation'": "No puedes añadir más de un 'Vacaciones 1/2 dia'",
- "This document already exists on this ticket": "Este documento ya existe en el ticket",
- "Some of the selected tickets are not billable": "Algunos de los tickets seleccionados no son facturables",
- "You can't invoice tickets from multiple clients": "No puedes facturar tickets de multiples clientes",
- "nickname": "nickname",
- "INACTIVE_PROVIDER": "Proveedor inactivo",
- "This client is not invoiceable": "Este cliente no es facturable",
- "serial non editable": "Esta serie no permite asignar la referencia",
- "Max shipped required": "La fecha límite es requerida",
- "Can't invoice to future": "No se puede facturar a futuro",
- "Can't invoice to past": "No se puede facturar a pasado",
- "This ticket is already invoiced": "Este ticket ya está facturado",
- "A ticket with an amount of zero can't be invoiced": "No se puede facturar un ticket con importe cero",
- "A ticket with a negative base can't be invoiced": "No se puede facturar un ticket con una base negativa",
- "Global invoicing failed": "[Facturación global] No se han podido facturar algunos clientes",
- "Wasn't able to invoice the following clients": "No se han podido facturar los siguientes clientes",
- "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio",
- "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito",
- "You can't change the credit set to zero from a financialBoss": "No puedes cambiar el cŕedito establecido a cero por un jefe de finanzas",
- "Amounts do not match": "Las cantidades no coinciden",
- "The PDF document does not exist": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'",
- "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos",
- "You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días",
- "The worker has hours recorded that day": "El trabajador tiene horas fichadas ese día",
- "The worker has a marked absence that day": "El trabajador tiene marcada una ausencia ese día",
- "You can not modify is pay method checked": "No se puede modificar el campo método de pago validado",
- "The account size must be exactly 10 characters": "El tamaño de la cuenta debe ser exactamente de 10 caracteres",
- "Can't transfer claimed sales": "No puedes transferir lineas reclamadas",
- "You don't have privileges to create refund": "No tienes permisos para crear un abono",
- "The item is required": "El artículo es requerido",
- "The agency is already assigned to another autonomous": "La agencia ya está asignada a otro autónomo",
- "date in the future": "Fecha en el futuro",
- "reference duplicated": "Referencia duplicada",
- "This ticket is already a refund": "Este ticket ya es un abono",
- "isWithoutNegatives": "Sin negativos",
- "routeFk": "routeFk",
- "Can't change the password of another worker": "No se puede cambiar la contraseña de otro trabajador",
- "No hay un contrato en vigor": "No hay un contrato en vigor",
- "No se permite fichar a futuro": "No se permite fichar a futuro",
- "No está permitido trabajar": "No está permitido trabajar",
- "Fichadas impares": "Fichadas impares",
- "Descanso diario 12h.": "Descanso diario 12h.",
- "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.",
- "Dirección incorrecta": "Dirección incorrecta",
- "Modifiable user details only by an administrator": "Detalles de usuario modificables solo por un administrador",
- "Modifiable password only via recovery or by an administrator": "Contraseña modificable solo a través de la recuperación o por un administrador",
- "Not enough privileges to edit a client": "No tienes suficientes privilegios para editar un cliente",
- "This route does not exists": "Esta ruta no existe",
- "Claim pickup order sent": "Reclamación Orden de recogida enviada [{{claimId}}]({{{claimUrl}}}) al cliente *{{clientName}}*",
- "You don't have grant privilege": "No tienes privilegios para dar privilegios",
- "You don't own the role and you can't assign it to another user": "No eres el propietario del rol y no puedes asignarlo a otro usuario",
- "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionado con [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
- "Already has this status": "Ya tiene este estado",
- "There aren't records for this week": "No existen registros para esta semana",
- "Empty data source": "Origen de datos vacio",
- "App locked": "Aplicación bloqueada por el usuario {{userId}}",
- "Email verify": "Correo de verificación",
- "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
- "Receipt's bank was not found": "No se encontró el banco del recibo",
- "This receipt was not compensated": "Este recibo no ha sido compensado",
- "Client's email was not found": "No se encontró el email del cliente",
- "Negative basis": "Base negativa",
- "This worker code already exists": "Este codigo de trabajador ya existe",
- "This personal mail already exists": "Este correo personal ya existe",
- "This worker already exists": "Este trabajador ya existe",
- "App name does not exist": "El nombre de aplicación no es válido",
- "Try again": "Vuelve a intentarlo",
- "Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9",
- "Failed to upload delivery note": "Error al subir albarán {{id}}",
- "The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe",
- "It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar",
- "It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo",
- "It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas",
- "A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.",
- "There is no assigned email for this client": "No hay correo asignado para este cliente",
- "Exists an invoice with a future date": "Existe una factura con fecha posterior",
- "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite",
- "Warehouse inventory not set": "El almacén inventario no está establecido",
- "This locker has already been assigned": "Esta taquilla ya ha sido asignada",
- "Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº %d",
- "Not exist this branch": "La rama no existe",
- "This ticket cannot be signed because it has not been boxed": "Este ticket no puede firmarse porque no ha sido encajado",
- "Collection does not exist": "La colección no existe",
- "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo",
- "Insert a date range": "Inserte un rango de fechas",
- "Added observation": "{{user}} añadió esta observacion: {{text}}",
- "Comment added to client": "Observación añadida al cliente {{clientFk}}",
- "Invalid auth code": "Código de verificación incorrecto",
- "Invalid or expired verification code": "Código de verificación incorrecto o expirado",
- "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",
- "Pass expired": "La contraseña ha caducado, cambiela desde Salix",
- "Invalid NIF for VIES": "Invalid NIF for VIES",
- "Ticket does not exist": "Este ticket no existe",
- "Ticket is already signed": "Este ticket ya ha sido firmado",
- "Authentication failed": "Autenticación fallida",
- "You can't use the same password": "No puedes usar la misma contraseña",
- "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono",
- "Fecha fuera de rango": "Fecha fuera de rango",
- "Error while generating PDF": "Error al generar PDF",
- "Error when sending mail to client": "Error al enviar el correo al cliente",
- "Mail not sent": "Se ha producido un fallo al enviar la factura al cliente [{{clientId}}]({{{clientUrl}}}), por favor revisa la dirección de correo electrónico",
- "The renew period has not been exceeded": "El periodo de renovación no ha sido superado",
- "Valid priorities": "Prioridades válidas: %d",
- "hasAnyNegativeBase": "Base negativa para los tickets: {{ticketsIds}}",
- "hasAnyPositiveBase": "Base positivas para los tickets: {{ticketsIds}}",
- "You cannot assign an alias that you are not assigned to": "No puede asignar un alias que no tenga asignado",
- "This ticket cannot be left empty.": "Este ticket no se puede dejar vacío. %s",
- "The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias",
- "You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado",
- "This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado",
- "You don't have enough privileges.": "No tienes suficientes permisos.",
- "This ticket is locked": "Este ticket está bloqueado.",
- "This ticket is not editable.": "Este ticket no es editable.",
- "The ticket doesn't exist.": "No existe el ticket.",
- "Social name should be uppercase": "La razón social debe ir en mayúscula",
- "Street should be uppercase": "La dirección fiscal debe ir en mayúscula",
- "Ticket without Route": "Ticket sin ruta",
- "Select a different client": "Seleccione un cliente distinto",
- "Fill all the fields": "Rellene todos los campos",
- "The response is not a PDF": "La respuesta no es un PDF",
- "Booking completed": "Reserva completada",
- "The ticket is in preparation": "El ticket [{{ticketId}}]({{{ticketUrl}}}) del comercial {{salesPersonId}} está en preparación",
- "The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada",
- "User disabled": "Usuario desactivado",
- "The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
- "quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima",
- "Cannot past travels with entries": "No se pueden pasar envíos con entradas",
- "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}",
- "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada",
- "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada",
- "Field are invalid": "El campo '{{tag}}' no es válido",
- "Incorrect pin": "Pin incorrecto.",
- "You already have the mailAlias": "Ya tienes este alias de correo",
- "The alias cant be modified": "Este alias de correo no puede ser modificado",
- "No tickets to invoice": "No hay tickets para facturar",
- "this warehouse has not dms": "El Almacén no acepta documentos",
- "This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado",
- "Name should be uppercase": "El nombre debe ir en mayúscula",
- "Bank entity must be specified": "La entidad bancaria es obligatoria",
- "An email is necessary": "Es necesario un email",
- "You cannot update these fields": "No puedes actualizar estos campos",
- "CountryFK cannot be empty": "El país no puede estar vacío",
- "Cmr file does not exist": "El archivo del cmr no existe",
- "You are not allowed to modify the alias": "No estás autorizado a modificar el alias",
- "The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas",
- "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario",
- "They're not your subordinate": "No es tu subordinado/a."
-}
+ "Phone format is invalid": "El formato del teléfono no es correcto",
+ "You are not allowed to change the credit": "No tienes privilegios para modificar el crédito",
+ "Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia",
+ "The default consignee can not be unchecked": "No se puede desmarcar el consignatario predeterminado",
+ "Unable to default a disabled consignee": "No se puede poner predeterminado un consignatario desactivado",
+ "Can't be blank": "No puede estar en blanco",
+ "Invalid TIN": "NIF/CIF inválido",
+ "TIN must be unique": "El NIF/CIF debe ser único",
+ "A client with that Web User name already exists": "Ya existe un cliente con ese Usuario Web",
+ "Is invalid": "Es inválido",
+ "Quantity cannot be zero": "La cantidad no puede ser cero",
+ "Enter an integer different to zero": "Introduce un entero distinto de cero",
+ "Package cannot be blank": "El embalaje no puede estar en blanco",
+ "The company name must be unique": "La razón social debe ser única",
+ "Invalid email": "Correo electrónico inválido",
+ "The IBAN does not have the correct format": "El IBAN no tiene el formato correcto",
+ "That payment method requires an IBAN": "El método de pago seleccionado requiere un IBAN",
+ "That payment method requires a BIC": "El método de pago seleccionado requiere un BIC",
+ "State cannot be blank": "El estado no puede estar en blanco",
+ "Worker cannot be blank": "El trabajador no puede estar en blanco",
+ "Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado",
+ "can't be blank": "El campo no puede estar vacío",
+ "Observation type must be unique": "El tipo de observación no puede repetirse",
+ "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 similar to the last one": "El grade debe ser similar al último",
+ "Only manager can change the credit": "Solo el gerente puede cambiar el credito de este cliente",
+ "Name cannot be blank": "El nombre no puede estar en blanco",
+ "Phone cannot be blank": "El teléfono no puede estar en blanco",
+ "Period cannot be blank": "El periodo no puede estar en blanco",
+ "Choose a company": "Selecciona una empresa",
+ "Se debe rellenar el campo de texto": "Se debe rellenar el campo de texto",
+ "Description should have maximum of 45 characters": "La descripción debe tener maximo 45 caracteres",
+ "Cannot be blank": "El campo no puede estar en blanco",
+ "The grade must be an integer greater than or equal to zero": "El grade debe ser un entero mayor o igual a cero",
+ "Sample type cannot be blank": "El tipo de plantilla no puede quedar en blanco",
+ "Description cannot be blank": "Se debe rellenar el campo de texto",
+ "The price of the item changed": "El precio del artículo cambió",
+ "The value should not be greater than 100%": "El valor no debe de ser mayor de 100%",
+ "The value should be a number": "El valor debe ser un numero",
+ "This order is not editable": "Esta orden no se puede modificar",
+ "You can't create an order for a frozen client": "No puedes crear una orden para un cliente congelado",
+ "You can't create an order for a client that has a debt": "No puedes crear una orden para un cliente con deuda",
+ "is not a valid date": "No es una fecha valida",
+ "Barcode must be unique": "El código de barras debe ser único",
+ "The warehouse can't be repeated": "El almacén no puede repetirse",
+ "The tag or priority can't be repeated for an item": "El tag o prioridad no puede repetirse para un item",
+ "The observation type can't be repeated": "El tipo de observación no puede repetirse",
+ "A claim with that sale already exists": "Ya existe una reclamación para esta línea",
+ "You don't have enough privileges to change that field": "No tienes permisos para cambiar ese campo",
+ "Warehouse cannot be blank": "El almacén no puede quedar en blanco",
+ "Agency cannot be blank": "La agencia no puede quedar en blanco",
+ "Not enough privileges to edit a client with verified data": "No tienes permisos para hacer cambios en un cliente con datos comprobados",
+ "This address doesn't exist": "Este consignatario no existe",
+ "You must delete the claim id %d first": "Antes debes borrar la reclamación %d",
+ "You don't have enough privileges": "No tienes suficientes permisos",
+ "Cannot check Equalization Tax in this NIF/CIF": "No se puede marcar RE en este NIF/CIF",
+ "You can't make changes on the basic data of an confirmed order or with rows": "No puedes cambiar los datos básicos de una orden con artículos",
+ "INVALID_USER_NAME": "El nombre de usuario solo debe contener letras minúsculas o, a partir del segundo carácter, números o subguiones, no está permitido el uso de la letra ñ",
+ "You can't create a ticket for a frozen client": "No puedes crear un ticket para un cliente congelado",
+ "You can't create a ticket for an inactive client": "No puedes crear un ticket para un cliente inactivo",
+ "Tag value cannot be blank": "El valor del tag no puede quedar en blanco",
+ "ORDER_EMPTY": "Cesta vacía",
+ "You don't have enough privileges to do that": "No tienes permisos para cambiar esto",
+ "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT",
+ "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido",
+ "Street cannot be empty": "Dirección no puede estar en blanco",
+ "City cannot be empty": "Ciudad no puede estar en blanco",
+ "Code cannot be blank": "Código no puede estar en blanco",
+ "You cannot remove this department": "No puedes eliminar este departamento",
+ "The extension must be unique": "La extensión debe ser unica",
+ "The secret can't be blank": "La contraseña no puede estar en blanco",
+ "We weren't able to send this SMS": "No hemos podido enviar el SMS",
+ "This client can't be invoiced": "Este cliente no puede ser facturado",
+ "You must provide the correction information to generate a corrective invoice": "Debes informar la información de corrección para generar una factura rectificativa",
+ "This ticket can't be invoiced": "Este ticket no puede ser facturado",
+ "You cannot add or modify services to an invoiced ticket": "No puedes añadir o modificar servicios a un ticket facturado",
+ "This ticket can not be modified": "Este ticket no puede ser modificado",
+ "The introduced hour already exists": "Esta hora ya ha sido introducida",
+ "INFINITE_LOOP": "Existe una dependencia entre dos Jefes",
+ "The sales of the receiver ticket can't be modified": "Las lineas del ticket al que envias no pueden ser modificadas",
+ "NO_AGENCY_AVAILABLE": "No hay una zona de reparto disponible con estos parámetros",
+ "ERROR_PAST_SHIPMENT": "No puedes seleccionar una fecha de envío en pasado",
+ "The current ticket can't be modified": "El ticket actual no puede ser modificado",
+ "The current claim can't be modified": "La reclamación actual no puede ser modificada",
+ "The sales of this ticket can't be modified": "Las lineas de este ticket no pueden ser modificadas",
+ "The sales do not exists": "La(s) línea(s) seleccionada(s) no existe(n)",
+ "Please select at least one sale": "Por favor selecciona al menos una linea",
+ "All sales must belong to the same ticket": "Todas las lineas deben pertenecer al mismo ticket",
+ "NO_ZONE_FOR_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada",
+ "This item doesn't exists": "El artículo no existe",
+ "NOT_ZONE_WITH_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada",
+ "Extension format is invalid": "El formato de la extensión es inválido",
+ "Invalid parameters to create a new ticket": "Parámetros inválidos para crear un nuevo ticket",
+ "This item is not available": "Este artículo no está disponible",
+ "This postcode already exists": "Este código postal ya existe",
+ "Concept cannot be blank": "El concepto no puede quedar en blanco",
+ "File doesn't exists": "El archivo no existe",
+ "You don't have privileges to change the zone": "No tienes permisos para cambiar la zona o para esos parámetros hay más de una opción de envío, hable con las agencias",
+ "This ticket is already on weekly tickets": "Este ticket ya está en tickets programados",
+ "Ticket id cannot be blank": "El id de ticket no puede quedar en blanco",
+ "Weekday cannot be blank": "El día de la semana no puede quedar en blanco",
+ "You can't delete a confirmed order": "No puedes borrar un pedido confirmado",
+ "The social name has an invalid format": "El nombre fiscal tiene un formato incorrecto",
+ "Invalid quantity": "Cantidad invalida",
+ "This postal code is not valid": "Este código postal no es válido",
+ "is invalid": "es inválido",
+ "The postcode doesn't exist. Please enter a correct one": "El código postal no existe. Por favor, introduce uno correcto",
+ "The department name can't be repeated": "El nombre del departamento no puede repetirse",
+ "This phone already exists": "Este teléfono ya existe",
+ "You cannot move a parent to its own sons": "No puedes mover un elemento padre a uno de sus hijos",
+ "You can't create a claim for a removed ticket": "No puedes crear una reclamación para un ticket eliminado",
+ "You cannot delete a ticket that part of it is being prepared": "No puedes eliminar un ticket en el que una parte que está siendo preparada",
+ "You must delete all the buy requests first": "Debes eliminar todas las peticiones de compra primero",
+ "You should specify a date": "Debes especificar una fecha",
+ "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fin",
+ "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fin",
+ "You should mark at least one week day": "Debes marcar al menos un día de la semana",
+ "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío",
+ "Customs agent is required for a non UEE member": "El agente de aduanas es requerido para los clientes extracomunitarios",
+ "Incoterms is required for a non UEE member": "El incoterms es requerido para los clientes extracomunitarios",
+ "Deleted sales from ticket": "He eliminado las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
+ "Added sale to ticket": "He añadido la siguiente linea al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
+ "Changed sale discount": "He cambiado el descuento de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Created claim": "He creado la reclamación [{{claimId}}]({{{claimUrl}}}) de las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Changed sale price": "He cambiado el precio de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* del ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale quantity": "He cambiado la cantidad de [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* del ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "State": "Estado",
+ "regular": "normal",
+ "reserved": "reservado",
+ "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})",
+ "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}",
+ "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*",
+ "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})",
+ "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})",
+ "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}",
+ "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*, con el tipo de recogida *{{claimPickup}}*",
+ "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*",
+ "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}",
+ "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto",
+ "Distance must be lesser than 4000": "La distancia debe ser inferior a 4000",
+ "This ticket is deleted": "Este ticket está eliminado",
+ "Unable to clone this travel": "No ha sido posible clonar este travel",
+ "This thermograph id already exists": "La id del termógrafo ya existe",
+ "Choose a date range or days forward": "Selecciona un rango de fechas o días en adelante",
+ "ORDER_ALREADY_CONFIRMED": "ORDEN YA CONFIRMADA",
+ "Invalid password": "Invalid password",
+ "Password does not meet requirements": "La contraseña no cumple los requisitos",
+ "Role already assigned": "Rol ya asignado",
+ "Invalid role name": "Nombre de rol no válido",
+ "Role name must be written in camelCase": "El nombre del rol debe escribirse en camelCase",
+ "Email already exists": "El correo ya existe",
+ "User already exists": "El/La usuario/a ya existe",
+ "Absence change notification on the labour calendar": "Notificación de cambio de ausencia en el calendario laboral",
+ "Record of hours week": "Registro de horas semana {{week}} año {{year}} ",
+ "Created absence": "El empleado {{author}} ha añadido una ausencia de tipo '{{absenceType}}' a {{employee}} para el día {{dated}}.",
+ "Deleted absence": "El empleado {{author}} ha eliminado una ausencia de tipo '{{absenceType}}' a {{employee}} del día {{dated}}.",
+ "I have deleted the ticket id": "He eliminado el ticket id [{{id}}]({{{url}}})",
+ "I have restored the ticket id": "He restaurado el ticket id [{{id}}]({{{url}}})",
+ "You can only restore a ticket within the first hour after deletion": "Únicamente puedes restaurar el ticket dentro de la primera hora después de su eliminación",
+ "Changed this data from the ticket": "He cambiado estos datos del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "agencyModeFk": "Agencia",
+ "clientFk": "Cliente",
+ "zoneFk": "Zona",
+ "warehouseFk": "Almacén",
+ "shipped": "F. envío",
+ "landed": "F. entrega",
+ "addressFk": "Consignatario",
+ "companyFk": "Empresa",
+ "agency": "Agencia",
+ "delivery": "Reparto",
+ "The social name cannot be empty": "La razón social no puede quedar en blanco",
+ "The nif cannot be empty": "El NIF no puede quedar en blanco",
+ "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados",
+ "ASSIGN_ZONE_FIRST": "Asigna una zona primero",
+ "Amount cannot be zero": "El importe no puede ser cero",
+ "Company has to be official": "Empresa inválida",
+ "You can not select this payment method without a registered bankery account": "No se puede utilizar este método de pago si no has registrado una cuenta bancaria",
+ "Action not allowed on the test environment": "Esta acción no está permitida en el entorno de pruebas",
+ "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta",
+ "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*",
+ "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}*",
+ "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío",
+ "This BIC already exist.": "Este BIC ya existe.",
+ "That item doesn't exists": "Ese artículo no existe",
+ "There's a new urgent ticket:": "Hay un nuevo ticket urgente:",
+ "Invalid account": "Cuenta inválida",
+ "Compensation account is empty": "La cuenta para compensar está vacia",
+ "This genus already exist": "Este genus ya existe",
+ "This specie already exist": "Esta especie ya existe",
+ "Client assignment has changed": "He cambiado el comercial ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})",
+ "None": "Ninguno",
+ "The contract was not active during the selected date": "El contrato no estaba activo durante la fecha seleccionada",
+ "Cannot add more than one '1/2 day vacation'": "No puedes añadir más de un 'Vacaciones 1/2 dia'",
+ "This document already exists on this ticket": "Este documento ya existe en el ticket",
+ "Some of the selected tickets are not billable": "Algunos de los tickets seleccionados no son facturables",
+ "You can't invoice tickets from multiple clients": "No puedes facturar tickets de multiples clientes",
+ "nickname": "nickname",
+ "INACTIVE_PROVIDER": "Proveedor inactivo",
+ "This client is not invoiceable": "Este cliente no es facturable",
+ "serial non editable": "Esta serie no permite asignar la referencia",
+ "Max shipped required": "La fecha límite es requerida",
+ "Can't invoice to future": "No se puede facturar a futuro",
+ "Can't invoice to past": "No se puede facturar a pasado",
+ "This ticket is already invoiced": "Este ticket ya está facturado",
+ "A ticket with an amount of zero can't be invoiced": "No se puede facturar un ticket con importe cero",
+ "A ticket with a negative base can't be invoiced": "No se puede facturar un ticket con una base negativa",
+ "Global invoicing failed": "[Facturación global] No se han podido facturar algunos clientes",
+ "Wasn't able to invoice the following clients": "No se han podido facturar los siguientes clientes",
+ "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio",
+ "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito",
+ "You can't change the credit set to zero from a financialBoss": "No puedes cambiar el cŕedito establecido a cero por un jefe de finanzas",
+ "Amounts do not match": "Las cantidades no coinciden",
+ "The PDF document does not exist": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'",
+ "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos",
+ "You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días",
+ "The worker has hours recorded that day": "El trabajador tiene horas fichadas ese día",
+ "The worker has a marked absence that day": "El trabajador tiene marcada una ausencia ese día",
+ "You can not modify is pay method checked": "No se puede modificar el campo método de pago validado",
+ "The account size must be exactly 10 characters": "El tamaño de la cuenta debe ser exactamente de 10 caracteres",
+ "Can't transfer claimed sales": "No puedes transferir lineas reclamadas",
+ "You don't have privileges to create refund": "No tienes permisos para crear un abono",
+ "The item is required": "El artículo es requerido",
+ "The agency is already assigned to another autonomous": "La agencia ya está asignada a otro autónomo",
+ "date in the future": "Fecha en el futuro",
+ "reference duplicated": "Referencia duplicada",
+ "This ticket is already a refund": "Este ticket ya es un abono",
+ "isWithoutNegatives": "Sin negativos",
+ "routeFk": "routeFk",
+ "Can't change the password of another worker": "No se puede cambiar la contraseña de otro trabajador",
+ "No hay un contrato en vigor": "No hay un contrato en vigor",
+ "No se permite fichar a futuro": "No se permite fichar a futuro",
+ "No está permitido trabajar": "No está permitido trabajar",
+ "Fichadas impares": "Fichadas impares",
+ "Descanso diario 12h.": "Descanso diario 12h.",
+ "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.",
+ "Dirección incorrecta": "Dirección incorrecta",
+ "Modifiable user details only by an administrator": "Detalles de usuario modificables solo por un administrador",
+ "Modifiable password only via recovery or by an administrator": "Contraseña modificable solo a través de la recuperación o por un administrador",
+ "Not enough privileges to edit a client": "No tienes suficientes privilegios para editar un cliente",
+ "This route does not exists": "Esta ruta no existe",
+ "Claim pickup order sent": "Reclamación Orden de recogida enviada [{{claimId}}]({{{claimUrl}}}) al cliente *{{clientName}}*",
+ "You don't have grant privilege": "No tienes privilegios para dar privilegios",
+ "You don't own the role and you can't assign it to another user": "No eres el propietario del rol y no puedes asignarlo a otro usuario",
+ "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionado con [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
+ "Already has this status": "Ya tiene este estado",
+ "There aren't records for this week": "No existen registros para esta semana",
+ "Empty data source": "Origen de datos vacio",
+ "App locked": "Aplicación bloqueada por el usuario {{userId}}",
+ "Email verify": "Correo de verificación",
+ "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
+ "Receipt's bank was not found": "No se encontró el banco del recibo",
+ "This receipt was not compensated": "Este recibo no ha sido compensado",
+ "Client's email was not found": "No se encontró el email del cliente",
+ "Negative basis": "Base negativa",
+ "This worker code already exists": "Este codigo de trabajador ya existe",
+ "This personal mail already exists": "Este correo personal ya existe",
+ "This worker already exists": "Este trabajador ya existe",
+ "App name does not exist": "El nombre de aplicación no es válido",
+ "Try again": "Vuelve a intentarlo",
+ "Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9",
+ "Failed to upload delivery note": "Error al subir albarán {{id}}",
+ "The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe",
+ "It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar",
+ "It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo",
+ "It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas",
+ "A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.",
+ "There is no assigned email for this client": "No hay correo asignado para este cliente",
+ "Exists an invoice with a future date": "Existe una factura con fecha posterior",
+ "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite",
+ "Warehouse inventory not set": "El almacén inventario no está establecido",
+ "This locker has already been assigned": "Esta taquilla ya ha sido asignada",
+ "Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº %d",
+ "Not exist this branch": "La rama no existe",
+ "This ticket cannot be signed because it has not been boxed": "Este ticket no puede firmarse porque no ha sido encajado",
+ "Collection does not exist": "La colección no existe",
+ "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo",
+ "Insert a date range": "Inserte un rango de fechas",
+ "Added observation": "{{user}} añadió esta observacion: {{text}}",
+ "Comment added to client": "Observación añadida al cliente {{clientFk}}",
+ "Invalid auth code": "Código de verificación incorrecto",
+ "Invalid or expired verification code": "Código de verificación incorrecto o expirado",
+ "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",
+ "Pass expired": "La contraseña ha caducado, cambiela desde Salix",
+ "Invalid NIF for VIES": "Invalid NIF for VIES",
+ "Ticket does not exist": "Este ticket no existe",
+ "Ticket is already signed": "Este ticket ya ha sido firmado",
+ "Authentication failed": "Autenticación fallida",
+ "You can't use the same password": "No puedes usar la misma contraseña",
+ "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono",
+ "Fecha fuera de rango": "Fecha fuera de rango",
+ "Error while generating PDF": "Error al generar PDF",
+ "Error when sending mail to client": "Error al enviar el correo al cliente",
+ "Mail not sent": "Se ha producido un fallo al enviar la factura al cliente [{{clientId}}]({{{clientUrl}}}), por favor revisa la dirección de correo electrónico",
+ "The renew period has not been exceeded": "El periodo de renovación no ha sido superado",
+ "Valid priorities": "Prioridades válidas: %d",
+ "hasAnyNegativeBase": "Base negativa para los tickets: {{ticketsIds}}",
+ "hasAnyPositiveBase": "Base positivas para los tickets: {{ticketsIds}}",
+ "You cannot assign an alias that you are not assigned to": "No puede asignar un alias que no tenga asignado",
+ "This ticket cannot be left empty.": "Este ticket no se puede dejar vacío. %s",
+ "The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias",
+ "You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado",
+ "This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado",
+ "You don't have enough privileges.": "No tienes suficientes permisos.",
+ "This ticket is locked": "Este ticket está bloqueado.",
+ "This ticket is not editable.": "Este ticket no es editable.",
+ "The ticket doesn't exist.": "No existe el ticket.",
+ "Social name should be uppercase": "La razón social debe ir en mayúscula",
+ "Street should be uppercase": "La dirección fiscal debe ir en mayúscula",
+ "Ticket without Route": "Ticket sin ruta",
+ "Select a different client": "Seleccione un cliente distinto",
+ "Fill all the fields": "Rellene todos los campos",
+ "The response is not a PDF": "La respuesta no es un PDF",
+ "Booking completed": "Reserva completada",
+ "The ticket is in preparation": "El ticket [{{ticketId}}]({{{ticketUrl}}}) del comercial {{salesPersonId}} está en preparación",
+ "The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada",
+ "User disabled": "Usuario desactivado",
+ "The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
+ "quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima",
+ "Cannot past travels with entries": "No se pueden pasar envíos con entradas",
+ "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}",
+ "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada",
+ "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada",
+ "Field are invalid": "El campo '{{tag}}' no es válido",
+ "Incorrect pin": "Pin incorrecto.",
+ "You already have the mailAlias": "Ya tienes este alias de correo",
+ "The alias cant be modified": "Este alias de correo no puede ser modificado",
+ "No tickets to invoice": "No hay tickets para facturar",
+ "this warehouse has not dms": "El Almacén no acepta documentos",
+ "This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado",
+ "Name should be uppercase": "El nombre debe ir en mayúscula",
+ "Bank entity must be specified": "La entidad bancaria es obligatoria",
+ "An email is necessary": "Es necesario un email",
+ "You cannot update these fields": "No puedes actualizar estos campos",
+ "CountryFK cannot be empty": "El país no puede estar vacío",
+ "Cmr file does not exist": "El archivo del cmr no existe",
+ "You are not allowed to modify the alias": "No estás autorizado a modificar el alias",
+ "The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas",
+ "The line could not be marked": "La linea no puede ser marcada",
+ "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario",
+ "They're not your subordinate": "No es tu subordinado/a.",
+ "No results found": "No se han encontrado resultados"
+}
\ No newline at end of file
diff --git a/loopback/server/datasources.json b/loopback/server/datasources.json
index 608479b4b2..341d5d578d 100644
--- a/loopback/server/datasources.json
+++ b/loopback/server/datasources.json
@@ -117,6 +117,21 @@
"video/mp4"
]
},
+ "supplierStorage": {
+ "name": "supplierStorage",
+ "connector": "loopback-component-storage",
+ "provider": "filesystem",
+ "root": "./storage/dms",
+ "maxFileSize": "31457280",
+ "allowedContentTypes": [
+ "image/png",
+ "image/jpeg",
+ "image/jpg",
+ "image/webp",
+ "video/mp4",
+ "application/pdf"
+ ]
+ },
"accessStorage": {
"name": "accessStorage",
"connector": "loopback-component-storage",
diff --git a/modules/account/back/models/mail-alias-account.json b/modules/account/back/models/mail-alias-account.json
index 416c2acd88..54e986ef74 100644
--- a/modules/account/back/models/mail-alias-account.json
+++ b/modules/account/back/models/mail-alias-account.json
@@ -23,5 +23,20 @@
"model": "VnUser",
"foreignKey": "account"
}
- }
+ },
+ "acls": [
+ {
+ "property": "create",
+ "accessType": "WRITE",
+ "principalType": "ROLE",
+ "principalId": "$authenticated",
+ "permission": "ALLOW"
+ }, {
+ "property": "deleteById",
+ "accessType": "WRITE",
+ "principalType": "ROLE",
+ "principalId": "$authenticated",
+ "permission": "ALLOW"
+ }
+ ]
}
diff --git a/modules/claim/back/locale/claim/en.yml b/modules/claim/back/locale/claim/en.yml
index 7c3ee7555e..75416938a1 100644
--- a/modules/claim/back/locale/claim/en.yml
+++ b/modules/claim/back/locale/claim/en.yml
@@ -6,7 +6,6 @@ columns:
isChargedToMana: charged to mana
created: created
responsibility: responsibility
- hasToPickUp: has to pickUp
ticketFk: ticket
claimStateFk: claim state
workerFk: worker
diff --git a/modules/claim/back/locale/claim/es.yml b/modules/claim/back/locale/claim/es.yml
index 27fd76ceb1..e61c6a3963 100644
--- a/modules/claim/back/locale/claim/es.yml
+++ b/modules/claim/back/locale/claim/es.yml
@@ -6,7 +6,6 @@ columns:
isChargedToMana: cargado al maná
created: creado
responsibility: responsabilidad
- hasToPickUp: es recogida
ticketFk: ticket
claimStateFk: estado reclamación
workerFk: trabajador
diff --git a/modules/claim/back/methods/claim/claimPickupPdf.js b/modules/claim/back/methods/claim/claimPickupPdf.js
index 4927efa0f9..390be33b90 100644
--- a/modules/claim/back/methods/claim/claimPickupPdf.js
+++ b/modules/claim/back/methods/claim/claimPickupPdf.js
@@ -34,7 +34,8 @@ module.exports = Self => {
http: {
path: '/:id/claim-pickup-pdf',
verb: 'GET'
- }
+ },
+ //accessScopes: ['read:multimedia']
});
Self.claimPickupPdf = (ctx, id) => Self.printReport(ctx, id, 'claim-pickup-order');
diff --git a/modules/claim/back/methods/claim/downloadFile.js b/modules/claim/back/methods/claim/downloadFile.js
index 61784f39e7..7e49708f51 100644
--- a/modules/claim/back/methods/claim/downloadFile.js
+++ b/modules/claim/back/methods/claim/downloadFile.js
@@ -33,7 +33,7 @@ module.exports = Self => {
path: `/:id/downloadFile`,
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ //accessScopes: ['read:multimedia']
});
Self.downloadFile = async function(ctx, id) {
diff --git a/modules/claim/back/methods/claim/specs/log.spec.js b/modules/claim/back/methods/claim/specs/log.spec.js
index 0ae534f1e6..cef91b873a 100644
--- a/modules/claim/back/methods/claim/specs/log.spec.js
+++ b/modules/claim/back/methods/claim/specs/log.spec.js
@@ -11,7 +11,7 @@ describe('claim log()', () => {
model: 'Claim',
action: 'update',
changes: [
- {property: 'hasToPickUp', before: false, after: true}
+ {property: 'pickup', before: null, after: 'agency'}
]
};
diff --git a/modules/claim/back/methods/claim/specs/updateClaim.spec.js b/modules/claim/back/methods/claim/specs/updateClaim.spec.js
index bd77ae406d..b7725e7f82 100644
--- a/modules/claim/back/methods/claim/specs/updateClaim.spec.js
+++ b/modules/claim/back/methods/claim/specs/updateClaim.spec.js
@@ -86,7 +86,7 @@ describe('Update Claim', () => {
args: {
observation: 'valid observation',
claimStateFk: pendingState,
- hasToPickUp: false
+ pickup: null
}
};
ctx.req.__ = i18n.__;
@@ -124,7 +124,7 @@ describe('Update Claim', () => {
args: {
observation: 'valid observation',
claimStateFk: canceledState,
- hasToPickUp: false
+ pickup: null
}
};
ctx.req.__ = i18n.__;
@@ -163,7 +163,7 @@ describe('Update Claim', () => {
claimStateFk: 3,
workerFk: 5,
observation: 'another valid observation',
- hasToPickUp: true
+ pickup: 'agency'
}
};
ctx.req.__ = i18n.__;
diff --git a/modules/claim/back/methods/claim/updateClaim.js b/modules/claim/back/methods/claim/updateClaim.js
index 68fff7846e..a206d7f3e2 100644
--- a/modules/claim/back/methods/claim/updateClaim.js
+++ b/modules/claim/back/methods/claim/updateClaim.js
@@ -27,8 +27,8 @@ module.exports = Self => {
type: 'string'
},
{
- arg: 'hasToPickUp',
- type: 'boolean'
+ arg: 'pickup',
+ type: 'any'
},
{
arg: 'packages',
@@ -72,9 +72,7 @@ module.exports = Self => {
// Get sales person from claim client
const salesPerson = claim.client().salesPersonUser();
- let changedHasToPickUp = false;
- if (args.hasToPickUp)
- changedHasToPickUp = true;
+ const changedPickup = args.pickup != claim.pickup;
// Validate when claimState has been changed
if (args.claimStateFk) {
@@ -82,23 +80,23 @@ module.exports = Self => {
const canEditNewState = await models.ClaimState.isEditable(ctx, args.claimStateFk, myOptions);
const canEditState = await models.ACL.checkAccessAcl(ctx, 'Claim', 'editState', 'WRITE');
- if (!canEditOldState || !canEditNewState || changedHasToPickUp && !canEditState)
+ if (!canEditOldState || !canEditNewState || changedPickup && !canEditState)
throw new UserError(`You don't have enough privileges to change that field`);
}
delete args.ctx;
const updatedClaim = await claim.updateAttributes(args, myOptions);
- // When hasToPickUp has been changed
- if (salesPerson && changedHasToPickUp && updatedClaim.hasToPickUp)
+ // When pickup has been changed
+ if (salesPerson && changedPickup && updatedClaim.pickup)
await notifyPickUp(ctx, salesPerson.id, claim);
// When claimState has been changed
if (args.claimStateFk) {
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
- await notifyStateChange(ctx, salesPerson.id, claim, newState.code);
+ await notifyStateChange(ctx, salesPerson.id, claim, newState.description);
if (newState.code == 'canceled')
- await notifyStateChange(ctx, claim.workerFk, claim, newState.code);
+ await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
}
if (tx) await tx.commit();
@@ -132,7 +130,8 @@ module.exports = Self => {
const message = $t('Claim will be picked', {
claimId: claim.id,
clientName: claim.client().name,
- claimUrl: `${url}claim/${claim.id}/summary`
+ claimUrl: `${url}claim/${claim.id}/summary`,
+ claimPickup: $t(claim.pickup)
});
await models.Chat.sendCheckingPresence(ctx, workerId, message);
}
diff --git a/modules/claim/back/models/claim.json b/modules/claim/back/models/claim.json
index 1fbbb00b1b..1fc88df1c5 100644
--- a/modules/claim/back/models/claim.json
+++ b/modules/claim/back/models/claim.json
@@ -31,8 +31,8 @@
"responsibility": {
"type": "number"
},
- "hasToPickUp": {
- "type": "boolean"
+ "pickup": {
+ "type": "string"
},
"ticketFk": {
"type": "number"
diff --git a/modules/claim/front/action/index.spec.js b/modules/claim/front/action/index.spec.js
index 458d5e8319..e773511bf2 100644
--- a/modules/claim/front/action/index.spec.js
+++ b/modules/claim/front/action/index.spec.js
@@ -85,7 +85,7 @@ describe('claim', () => {
it('should perform a patch query and show a success message', () => {
jest.spyOn(controller.vnApp, 'showSuccess');
- const data = {hasToPickUp: true};
+ const data = {pickup: 'agency'};
$httpBackend.expect('PATCH', `Claims/1/updateClaimAction`, data).respond({});
controller.save(data);
$httpBackend.flush();
diff --git a/modules/claim/front/basic-data/index.html b/modules/claim/front/basic-data/index.html
index 10aa7623ae..45bc1823d5 100644
--- a/modules/claim/front/basic-data/index.html
+++ b/modules/claim/front/basic-data/index.html
@@ -49,13 +49,6 @@
label="Packages received"
ng-model="$ctrl.claim.packages">
-
-
diff --git a/modules/claim/front/summary/index.html b/modules/claim/front/summary/index.html
index 3115cb4514..b5225e6f4b 100644
--- a/modules/claim/front/summary/index.html
+++ b/modules/claim/front/summary/index.html
@@ -49,13 +49,6 @@
label="Attended by"
value="{{$ctrl.summary.claim.worker.user.nickname}}">
-
-
diff --git a/print/templates/reports/credit-request/locale/es.yml b/print/templates/reports/credit-request/locale/es.yml
index cd6f92dc50..5a48cfa502 100644
--- a/print/templates/reports/credit-request/locale/es.yml
+++ b/print/templates/reports/credit-request/locale/es.yml
@@ -3,10 +3,11 @@ fields:
title: Solicitud de crédito
date: Fecha
companyName: Nombre de la empresa
+ importCredit: Importe del crédito solicitado
businessType: Tipo de negocio
antiquity: Antigüedad
surface: Superficie (m²)
- numberOfEmployees: Número de empleados
+ numberOfEmployees: Nº empleados
owner: Contacto propietario o Administrador
phone: Teléfono
payer: Contacto responsable de pagos
@@ -15,4 +16,5 @@ fields:
forecastedPurchases: Previsión de compras a Verdnatura
personFilling: Persona que rellena el formulario
companyInfo: Información general sobre la empresa
- economicInfo: Información económica
\ No newline at end of file
+ economicInfo: Información económica
+ previousSellsVolume: Volumen de ventas del año anterior
diff --git a/print/templates/reports/driver-route/assets/css/style.css b/print/templates/reports/driver-route/assets/css/style.css
index a3bcae7894..02d6778cef 100644
--- a/print/templates/reports/driver-route/assets/css/style.css
+++ b/print/templates/reports/driver-route/assets/css/style.css
@@ -1,3 +1,9 @@
+td{
+ overflow: hidden;
+ max-width: 100px;
+ text-overflow: ellipsis;
+}
+
h1 {
text-align: center;
}
diff --git a/print/templates/reports/driver-route/sql/routes.sql b/print/templates/reports/driver-route/sql/routes.sql
index 79bede5b24..9d2dd5c13f 100644
--- a/print/templates/reports/driver-route/sql/routes.sql
+++ b/print/templates/reports/driver-route/sql/routes.sql
@@ -1,19 +1,18 @@
-SELECT
- r.id,
- r.m3,
- r.created,
- r.time,
- u.nickName userNickName,
- v.tradeMark vehicleTradeMark,
- v.model vehicleModel,
- v.numberPlate plateNumber,
- IFNULL(s.name, am.name) AS agencyName
-FROM route r
- LEFT JOIN vehicle v ON v.id = r.vehicleFk
- LEFT JOIN worker w ON w.id = r.workerFk
- LEFT JOIN account.user u ON u.id = w.id
- LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
- LEFT JOIN agency a ON a.id = am.agencyFk
- LEFT JOIN supplierAgencyTerm sa ON sa.agencyFk = a.id
- LEFT JOIN supplier s ON s.id = sa.supplierFk
-WHERE r.id IN(?)
+SELECT r.id,
+ r.m3,
+ r.created,
+ r.time,
+ u.nickName userNickName,
+ v.tradeMark vehicleTradeMark,
+ v.model vehicleModel,
+ v.numberPlate plateNumber,
+ IFNULL(s.name, am.name) agencyName
+ FROM route r
+ LEFT JOIN vehicle v ON v.id = r.vehicleFk
+ LEFT JOIN worker w ON w.id = r.workerFk
+ LEFT JOIN account.user u ON u.id = w.id
+ LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
+ LEFT JOIN agency a ON a.id = am.agencyFk
+ LEFT JOIN supplierAgencyTerm sa ON sa.agencyFk = a.id
+ LEFT JOIN supplier s ON s.id = sa.supplierFk
+ WHERE r.id IN(?)
diff --git a/print/templates/reports/driver-route/sql/tickets.sql b/print/templates/reports/driver-route/sql/tickets.sql
index 9d548c2b31..1ffb4d6231 100644
--- a/print/templates/reports/driver-route/sql/tickets.sql
+++ b/print/templates/reports/driver-route/sql/tickets.sql
@@ -1,43 +1,42 @@
-SELECT
- t.nickname addressName,
- t.packages,
- t.priority,
- t.id,
- t.clientFk,
- t.companyFk,
- t.routeFk,
- if(a.phone, a.phone, c.phone) AS phone,
- if(a.mobile, a.mobile, c.mobile) AS mobile,
- wh.name warehouseName,
- a.city,
- a.street,
- a.postalCode,
- LPAD(a.id, 5, '0') AS addressFk,
- p.name province,
- 0 AS import,
- am.name ticketAgency,
- tob.description,
- u.nickName salesPersonName,
- ipkg.itemPackingTypes
-FROM route r
- JOIN ticket t ON t.routeFk = r.id
- LEFT JOIN address a ON a.id = t.addressFk
- LEFT JOIN client c ON c.id = t.clientFk
- LEFT JOIN worker w ON w.id = client_getSalesPerson(t.clientFk, CURDATE())
- LEFT JOIN account.user u ON u.id = w.id
- LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id AND tob.observationTypeFk = 3
- LEFT JOIN province p ON a.provinceFk = p.id
- LEFT JOIN warehouse wh ON wh.id = t.warehouseFk
- LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
- LEFT JOIN (
- SELECT t.id AS ticketFk,
- GROUP_CONCAT(DISTINCT(i.itemPackingTypeFk)) AS itemPackingTypes
- FROM route r
- JOIN ticket t ON t.routeFk = r.id
- JOIN sale s ON s.ticketFk = t.id
- JOIN item i ON i.id = s.itemFk
- WHERE r.id IN (?)
- GROUP BY t.id
- ) ipkg ON ipkg.ticketFk = t.id
-WHERE r.id IN (?)
-ORDER BY t.priority, t.id;
\ No newline at end of file
+SELECT t.nickname addressName,
+ t.packages,
+ t.priority,
+ t.id,
+ t.clientFk,
+ t.companyFk,
+ t.routeFk,
+ if(a.phone, a.phone, c.phone) phone,
+ if(a.mobile, a.mobile, c.mobile) mobile,
+ wh.name warehouseName,
+ a.city,
+ a.street,
+ a.postalCode,
+ LPAD(a.id, 5, '0') addressFk,
+ p.name province,
+ 0 import,
+ am.name ticketAgency,
+ tob.description,
+ u.nickName salesPersonName,
+ ipkg.itemPackingTypes
+ FROM route r
+ JOIN ticket t ON t.routeFk = r.id
+ LEFT JOIN address a ON a.id = t.addressFk
+ LEFT JOIN client c ON c.id = t.clientFk
+ LEFT JOIN worker w ON w.id = client_getSalesPerson(t.clientFk, CURDATE())
+ LEFT JOIN account.user u ON u.id = w.id
+ LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id AND tob.observationTypeFk = 3
+ LEFT JOIN province p ON a.provinceFk = p.id
+ LEFT JOIN warehouse wh ON wh.id = t.warehouseFk
+ LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
+ LEFT JOIN (
+ SELECT t.id AS ticketFk,
+ GROUP_CONCAT(DISTINCT(i.itemPackingTypeFk)) AS itemPackingTypes
+ FROM route r
+ JOIN ticket t ON t.routeFk = r.id
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
+ WHERE r.id IN (?)
+ GROUP BY t.id
+ ) ipkg ON ipkg.ticketFk = t.id
+ WHERE r.id IN (?)
+ ORDER BY t.priority, t.id;
\ No newline at end of file
diff --git a/storage/image/user/1600x1600/1101.png b/storage/image/user/1600x1600/1101.png
new file mode 100644
index 0000000000..aaf3ed5666
Binary files /dev/null and b/storage/image/user/1600x1600/1101.png differ
diff --git a/storage/image/user/1600x1600/1102.png b/storage/image/user/1600x1600/1102.png
new file mode 100644
index 0000000000..ca4c4c8a88
Binary files /dev/null and b/storage/image/user/1600x1600/1102.png differ
diff --git a/storage/image/user/1600x1600/1103.png b/storage/image/user/1600x1600/1103.png
new file mode 100644
index 0000000000..55ef28000b
Binary files /dev/null and b/storage/image/user/1600x1600/1103.png differ
diff --git a/storage/image/user/1600x1600/1104.png b/storage/image/user/1600x1600/1104.png
new file mode 100644
index 0000000000..f57535ac5e
Binary files /dev/null and b/storage/image/user/1600x1600/1104.png differ
diff --git a/storage/image/user/1600x1600/1105.png b/storage/image/user/1600x1600/1105.png
new file mode 100644
index 0000000000..3aa33f8ea6
Binary files /dev/null and b/storage/image/user/1600x1600/1105.png differ
diff --git a/storage/image/user/1600x1600/1106.png b/storage/image/user/1600x1600/1106.png
new file mode 100644
index 0000000000..121d2d94f1
Binary files /dev/null and b/storage/image/user/1600x1600/1106.png differ
diff --git a/storage/image/user/1600x1600/1107.png b/storage/image/user/1600x1600/1107.png
new file mode 100644
index 0000000000..5a04e30270
Binary files /dev/null and b/storage/image/user/1600x1600/1107.png differ
diff --git a/storage/image/user/1600x1600/1108.png b/storage/image/user/1600x1600/1108.png
new file mode 100644
index 0000000000..d704ef3216
Binary files /dev/null and b/storage/image/user/1600x1600/1108.png differ
diff --git a/storage/image/user/1600x1600/1109.png b/storage/image/user/1600x1600/1109.png
new file mode 100644
index 0000000000..5c0fdd3e76
Binary files /dev/null and b/storage/image/user/1600x1600/1109.png differ
diff --git a/storage/image/user/1600x1600/1110.png b/storage/image/user/1600x1600/1110.png
new file mode 100644
index 0000000000..ea40691bf0
Binary files /dev/null and b/storage/image/user/1600x1600/1110.png differ
diff --git a/storage/image/user/1600x1600/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png b/storage/image/user/1600x1600/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png
index 52f0fb9d14..e090bc2eb4 100644
Binary files a/storage/image/user/1600x1600/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png and b/storage/image/user/1600x1600/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png differ
diff --git a/storage/image/user/160x160/1101.png b/storage/image/user/160x160/1101.png
new file mode 100644
index 0000000000..e4b2cf3d5d
Binary files /dev/null and b/storage/image/user/160x160/1101.png differ
diff --git a/storage/image/user/160x160/1102.png b/storage/image/user/160x160/1102.png
new file mode 100644
index 0000000000..220b7b5721
Binary files /dev/null and b/storage/image/user/160x160/1102.png differ
diff --git a/storage/image/user/160x160/1103.png b/storage/image/user/160x160/1103.png
new file mode 100644
index 0000000000..a35e5f700b
Binary files /dev/null and b/storage/image/user/160x160/1103.png differ
diff --git a/storage/image/user/160x160/1104.png b/storage/image/user/160x160/1104.png
new file mode 100644
index 0000000000..66997bab1d
Binary files /dev/null and b/storage/image/user/160x160/1104.png differ
diff --git a/storage/image/user/160x160/1105.png b/storage/image/user/160x160/1105.png
new file mode 100644
index 0000000000..71d2f32b4b
Binary files /dev/null and b/storage/image/user/160x160/1105.png differ
diff --git a/storage/image/user/160x160/1106.png b/storage/image/user/160x160/1106.png
new file mode 100644
index 0000000000..5da9516b1a
Binary files /dev/null and b/storage/image/user/160x160/1106.png differ
diff --git a/storage/image/user/160x160/1107.png b/storage/image/user/160x160/1107.png
new file mode 100644
index 0000000000..a6ce498cf1
Binary files /dev/null and b/storage/image/user/160x160/1107.png differ
diff --git a/storage/image/user/160x160/1108.png b/storage/image/user/160x160/1108.png
new file mode 100644
index 0000000000..dac0d6f936
Binary files /dev/null and b/storage/image/user/160x160/1108.png differ
diff --git a/storage/image/user/160x160/1109.png b/storage/image/user/160x160/1109.png
new file mode 100644
index 0000000000..4399644860
Binary files /dev/null and b/storage/image/user/160x160/1109.png differ
diff --git a/storage/image/user/160x160/1110.png b/storage/image/user/160x160/1110.png
new file mode 100644
index 0000000000..aa49d3d30b
Binary files /dev/null and b/storage/image/user/160x160/1110.png differ
diff --git a/storage/image/user/160x160/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png b/storage/image/user/160x160/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png
index 07f21ecd19..e090bc2eb4 100644
Binary files a/storage/image/user/160x160/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png and b/storage/image/user/160x160/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png differ
diff --git a/storage/image/user/520x520/1101.png b/storage/image/user/520x520/1101.png
new file mode 100644
index 0000000000..664be96f2f
Binary files /dev/null and b/storage/image/user/520x520/1101.png differ
diff --git a/storage/image/user/520x520/1102.png b/storage/image/user/520x520/1102.png
new file mode 100644
index 0000000000..11f7d4e89e
Binary files /dev/null and b/storage/image/user/520x520/1102.png differ
diff --git a/storage/image/user/520x520/1103.png b/storage/image/user/520x520/1103.png
new file mode 100644
index 0000000000..28825c3ea3
Binary files /dev/null and b/storage/image/user/520x520/1103.png differ
diff --git a/storage/image/user/520x520/1104.png b/storage/image/user/520x520/1104.png
new file mode 100644
index 0000000000..11ddc971db
Binary files /dev/null and b/storage/image/user/520x520/1104.png differ
diff --git a/storage/image/user/520x520/1105.png b/storage/image/user/520x520/1105.png
new file mode 100644
index 0000000000..2c32427d4b
Binary files /dev/null and b/storage/image/user/520x520/1105.png differ
diff --git a/storage/image/user/520x520/1106.png b/storage/image/user/520x520/1106.png
new file mode 100644
index 0000000000..fd58c993da
Binary files /dev/null and b/storage/image/user/520x520/1106.png differ
diff --git a/storage/image/user/520x520/1107.png b/storage/image/user/520x520/1107.png
new file mode 100644
index 0000000000..10e4ee6ce9
Binary files /dev/null and b/storage/image/user/520x520/1107.png differ
diff --git a/storage/image/user/520x520/1108.png b/storage/image/user/520x520/1108.png
new file mode 100644
index 0000000000..8a90da8d30
Binary files /dev/null and b/storage/image/user/520x520/1108.png differ
diff --git a/storage/image/user/520x520/1109.png b/storage/image/user/520x520/1109.png
new file mode 100644
index 0000000000..35d419273a
Binary files /dev/null and b/storage/image/user/520x520/1109.png differ
diff --git a/storage/image/user/520x520/1110.png b/storage/image/user/520x520/1110.png
new file mode 100644
index 0000000000..0824380a9e
Binary files /dev/null and b/storage/image/user/520x520/1110.png differ
diff --git a/storage/image/user/520x520/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png b/storage/image/user/520x520/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png
index 52f0fb9d14..e090bc2eb4 100644
Binary files a/storage/image/user/520x520/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png and b/storage/image/user/520x520/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png differ
diff --git a/storage/image/user/full/1101.png b/storage/image/user/full/1101.png
new file mode 100644
index 0000000000..72000f7c5d
Binary files /dev/null and b/storage/image/user/full/1101.png differ
diff --git a/storage/image/user/full/1102.png b/storage/image/user/full/1102.png
new file mode 100644
index 0000000000..81aa86a9fd
Binary files /dev/null and b/storage/image/user/full/1102.png differ
diff --git a/storage/image/user/full/1103.png b/storage/image/user/full/1103.png
new file mode 100644
index 0000000000..b0a72c2867
Binary files /dev/null and b/storage/image/user/full/1103.png differ
diff --git a/storage/image/user/full/1104.png b/storage/image/user/full/1104.png
new file mode 100644
index 0000000000..9c9f64587e
Binary files /dev/null and b/storage/image/user/full/1104.png differ
diff --git a/storage/image/user/full/1105.png b/storage/image/user/full/1105.png
new file mode 100644
index 0000000000..5a353c2dcb
Binary files /dev/null and b/storage/image/user/full/1105.png differ
diff --git a/storage/image/user/full/1106.png b/storage/image/user/full/1106.png
new file mode 100644
index 0000000000..9b6d746ace
Binary files /dev/null and b/storage/image/user/full/1106.png differ
diff --git a/storage/image/user/full/1107.png b/storage/image/user/full/1107.png
new file mode 100644
index 0000000000..182c8af6b1
Binary files /dev/null and b/storage/image/user/full/1107.png differ
diff --git a/storage/image/user/full/1108.png b/storage/image/user/full/1108.png
new file mode 100644
index 0000000000..2bf1fbdb3f
Binary files /dev/null and b/storage/image/user/full/1108.png differ
diff --git a/storage/image/user/full/1109.png b/storage/image/user/full/1109.png
new file mode 100644
index 0000000000..78b94095fc
Binary files /dev/null and b/storage/image/user/full/1109.png differ
diff --git a/storage/image/user/full/1110.png b/storage/image/user/full/1110.png
new file mode 100644
index 0000000000..5b0350d362
Binary files /dev/null and b/storage/image/user/full/1110.png differ
diff --git a/storage/image/user/full/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png b/storage/image/user/full/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png
index 52f0fb9d14..e090bc2eb4 100644
Binary files a/storage/image/user/full/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png and b/storage/image/user/full/4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd.png differ