') td
- FROM tmp.zoneNodes zn
- JOIN zone z ON z.id = zn.zoneFk
- JOIN geoCollision gc ON gc.agencyModeFk = z.agencyModeFk AND zn.geoFk = gc.geoFk
- JOIN warehouse w ON w.id = gc.warehouseFk) sub;
-
- DROP TEMPORARY TABLE
- geoCollision,
+
+ -- Recojo los datos de la zona que ha dado conflicto
+ SELECT JSON_ARRAYAGG(
+ JSON_OBJECT(
+ 'zoneFk', zoneFk,
+ 'zn', JSON_OBJECT('name', zn.name),
+ 'z', JSON_OBJECT('name', z.name,'price', z.price),
+ 'w', JSON_OBJECT('name', w.name)
+ )
+ ) FROM tmp.zoneNodes zn
+ JOIN zone z ON z.id = zn.zoneFk
+ JOIN geoCollision gc ON gc.agencyModeFk = z.agencyModeFk AND zn.geoFk = gc.geoFk
+ JOIN warehouse w ON w.id = gc.warehouseFk
+ INTO json_data;
+
+ -- Creo un registro de la notificacion 'zone-included' para reportar via email
+ SELECT util.notification_send(
+ 'zone-included',
+ JSON_OBJECT('zoneCollisions',json_data),
+ account.myUser_getId()
+ );
+
+ DROP TEMPORARY TABLE
+ geoCollision,
tmp.zone,
tmp.zoneNodes;
END ;;
@@ -80494,18 +81921,16 @@ SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
--
--- Table structure for table `Proveedores_cargueras`
+-- Temporary table structure for view `Proveedores_cargueras`
--
DROP TABLE IF EXISTS `Proveedores_cargueras`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `Proveedores_cargueras` (
- `Id_Proveedor` int(10) unsigned NOT NULL,
- PRIMARY KEY (`Id_Proveedor`),
- CONSTRAINT `Proveedores_cargueras_supplierFk` FOREIGN KEY (`Id_Proveedor`) REFERENCES `vn`.`supplier` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Tabla de espcializacion para señalar las compañias que prestan servicio de transitario';
-/*!40101 SET character_set_client = @saved_cs_client */;
+/*!50001 DROP VIEW IF EXISTS `Proveedores_cargueras`*/;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+/*!50001 CREATE VIEW `Proveedores_cargueras` AS SELECT
+ 1 AS `Id_Proveedor` */;
+SET character_set_client = @saved_cs_client;
--
-- Table structure for table `Proveedores_comunicados__`
@@ -80891,19 +82316,17 @@ SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
--
--- Table structure for table `Tramos`
+-- Temporary table structure for view `Tramos`
--
DROP TABLE IF EXISTS `Tramos`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `Tramos` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `Tramo` time NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `Tramo` (`Tramo`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
+/*!50001 DROP VIEW IF EXISTS `Tramos`*/;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+/*!50001 CREATE VIEW `Tramos` AS SELECT
+ 1 AS `id`,
+ 1 AS `Tramo` */;
+SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `V_edi_item_track`
@@ -81973,20 +83396,20 @@ SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
--
--- Table structure for table `dock`
+-- Table structure for table `dock__`
--
-DROP TABLE IF EXISTS `dock`;
+DROP TABLE IF EXISTS `dock__`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `dock` (
+CREATE TABLE `dock__` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(5) NOT NULL,
`xPos` int(11) DEFAULT NULL,
`yPos` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code_UNIQUE` (`code`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #6371 deprecated 2024-03-05';
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -82131,7 +83554,6 @@ SET character_set_client = utf8;
1 AS `abbreviation`,
1 AS `Id_Proveedores_account`,
1 AS `gerente_id`,
- 1 AS `digito_factura`,
1 AS `phytosanitary`,
1 AS `CodigoEmpresa`,
1 AS `empresa_grupo`,
@@ -82320,7 +83742,8 @@ DROP TABLE IF EXISTS `gastos_resumen`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `gastos_resumen` AS SELECT
- 1 AS `Id_Gasto`,
+ 1 AS `id`,
+ 1 AS `Id_Gasto`,
1 AS `year`,
1 AS `month`,
1 AS `importe`,
@@ -82646,7 +84069,7 @@ CREATE TABLE `payroll_basess__` (
KEY `payroll_basess_1_idx` (`id_tipobasess`),
KEY `payroll_basess_2_idx` (`empresa_id`),
CONSTRAINT `payroll_basess_1` FOREIGN KEY (`id_tipobasess`) REFERENCES `payroll_tipobasess__` (`id_payroll_tipobasess`) ON DELETE NO ACTION ON UPDATE CASCADE,
- CONSTRAINT `payroll_basess_2` FOREIGN KEY (`empresa_id`) REFERENCES `payroll_centros` (`empresa_id`) ON UPDATE CASCADE
+ CONSTRAINT `payroll_basess_2` FOREIGN KEY (`empresa_id`) REFERENCES `vn`.`payrollWorkCenter` (`empresa_id__`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #6372 @deprecated 2023-12-13;';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -82681,42 +84104,33 @@ SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
--
--- Table structure for table `payroll_centros`
+-- Temporary table structure for view `payroll_centros`
--
DROP TABLE IF EXISTS `payroll_centros`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `payroll_centros` (
- `cod_centro` int(11) NOT NULL,
- `Centro` varchar(255) NOT NULL,
- `nss_cotizacion` varchar(15) NOT NULL,
- `domicilio` varchar(255) NOT NULL,
- `poblacion` varchar(45) NOT NULL,
- `cp` varchar(5) NOT NULL,
- `empresa_id` int(10) NOT NULL,
- `codempresa` int(11) DEFAULT NULL,
- PRIMARY KEY (`cod_centro`,`empresa_id`),
- KEY `payroll_centros_ix1` (`empresa_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
+/*!50001 DROP VIEW IF EXISTS `payroll_centros`*/;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+/*!50001 CREATE VIEW `payroll_centros` AS SELECT
+ 1 AS `cod_centro`,
+ 1 AS `codempresa` */;
+SET character_set_client = @saved_cs_client;
--
--- Table structure for table `payroll_conceptos`
+-- Temporary table structure for view `payroll_conceptos`
--
DROP TABLE IF EXISTS `payroll_conceptos`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `payroll_conceptos` (
- `conceptoid` int(11) NOT NULL,
- `concepto` varchar(255) DEFAULT NULL,
- `isSalaryAgreed` tinyint(1) NOT NULL DEFAULT 0,
- `isVariable` tinyint(1) NOT NULL,
- `isException` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Excepciones a tener en cuenta al importar conceptos en el proceso de importación de ficheros A3.',
- PRIMARY KEY (`conceptoid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
+/*!50001 DROP VIEW IF EXISTS `payroll_conceptos`*/;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+/*!50001 CREATE VIEW `payroll_conceptos` AS SELECT
+ 1 AS `conceptoid`,
+ 1 AS `concepto`,
+ 1 AS `isSalaryAgreed`,
+ 1 AS `isVariable`,
+ 1 AS `isException` */;
+SET character_set_client = @saved_cs_client;
--
-- Table structure for table `payroll_datos__`
@@ -82738,7 +84152,7 @@ CREATE TABLE `payroll_datos__` (
`TributaIRPF` tinyint(4) NOT NULL,
PRIMARY KEY (`codtrabajador`,`codempresa`,`conceptoid`,`Fecha`),
KEY `fgkey_payrolldatos_1_idx` (`conceptoid`),
- CONSTRAINT `fgkey_payrolldatos_1` FOREIGN KEY (`conceptoid`) REFERENCES `payroll_conceptos` (`conceptoid`) ON UPDATE CASCADE
+ CONSTRAINT `fgkey_payrolldatos_1` FOREIGN KEY (`conceptoid`) REFERENCES `vn`.`payrollComponent` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #6372 @deprecated 2023-11-28;';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -82762,29 +84176,18 @@ CREATE TABLE `payroll_embargos__` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `payroll_employee`
+-- Temporary table structure for view `payroll_employee`
--
DROP TABLE IF EXISTS `payroll_employee`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `payroll_employee` (
- `CodTrabajador` int(11) NOT NULL,
- `nss` varchar(23) NOT NULL,
- `codpuesto` int(10) NOT NULL,
- `codempresa` int(10) NOT NULL,
- `codcontrato` int(10) NOT NULL,
- `FAntiguedad` date NOT NULL,
- `grupotarifa` int(10) NOT NULL,
- `codcategoria` int(10) NOT NULL,
- `ContratoTemporal` tinyint(1) NOT NULL DEFAULT 0,
- `workerFk` int(11) unsigned DEFAULT NULL,
- PRIMARY KEY (`CodTrabajador`,`codempresa`),
- KEY `sajvgfh_idx` (`codpuesto`),
- KEY `payroll_employee_workerFk_idx` (`workerFk`),
- CONSTRAINT `payroll_employee_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
+/*!50001 DROP VIEW IF EXISTS `payroll_employee`*/;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+/*!50001 CREATE VIEW `payroll_employee` AS SELECT
+ 1 AS `CodTrabajador`,
+ 1 AS `codempresa`,
+ 1 AS `workerFk` */;
+SET character_set_client = @saved_cs_client;
--
-- Table structure for table `payroll_tipobasess__`
@@ -84040,301 +85443,12 @@ CREATE TABLE `zones__` (
--
-- Dumping events for database 'vn2008'
--
-/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
-/*!50106 DROP EVENT IF EXISTS `raidUpdate` */;
-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 @saved_sql_mode = @@sql_mode */ ;;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;;
-/*!50003 SET @saved_time_zone = @@time_zone */ ;;
-/*!50003 SET time_zone = 'SYSTEM' */ ;;
-/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `raidUpdate` ON SCHEDULE EVERY 1 DAY STARTS '2017-12-29 00:05:00' ON COMPLETION PRESERVE ENABLE DO CALL raidUpdate */ ;;
-/*!50003 SET time_zone = @saved_time_zone */ ;;
-/*!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 */ ;;
-DELIMITER ;
-/*!50106 SET TIME_ZONE= @save_time_zone */ ;
--
-- Dumping routines for database 'vn2008'
--
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `account_conciliacion_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 `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 ;
-/*!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 `add_awb_component` */;
-/*!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 `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 ;
-/*!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 `agencia_volume` */;
-/*!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 `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 ;
-/*!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 `agencyModeImbalance` */;
-/*!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 `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 ;
-/*!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 `article` */;
-/*!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 `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 ;
-/*!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 `article_multiple_buy` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -84403,7 +85517,7 @@ proc: BEGIN
-- Calcula algunos parámetros necesarios
SET vDatedFrom = TIMESTAMP(vDated, '00:00:00');
SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59');
- SELECT FechaInventario INTO vDatedInventory FROM tblContadores;
+ SELECT inventoried INTO vDatedInventory FROM vn.config;
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
FROM hedera.orderConfig;
@@ -84776,575 +85890,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 `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 `raidUpdate` */;
-/*!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 `raidUpdate`()
-BEGIN
-
- UPDATE Entradas e
- JOIN Entradas_Auto ea USING (Id_Entrada)
- JOIN travel t ON t.id = e.travel_id
- JOIN (
- SELECT *
- FROM (
- SELECT id, landing, warehouse_id, warehouse_id_out
- FROM travel
- JOIN (
- SELECT warehouse_id, warehouse_id_out
- FROM Entradas_Auto ea
- JOIN Entradas e USING(Id_Entrada)
- JOIN travel t ON t.id = e.travel_id
- GROUP BY warehouse_id, warehouse_id_out
- ) t USING (warehouse_id, warehouse_id_out)
- WHERE shipment > util.VN_CURDATE() AND delivered = FALSE
- ORDER BY landing
- LIMIT 10000000000000000000
- ) t
- GROUP BY warehouse_id, warehouse_id_out
- ) t USING (warehouse_id, warehouse_id_out)
- SET e.travel_id = t.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 `rateView` */;
-/*!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 `rateView`()
-BEGIN
-
- SELECT
- t.year as año,
- t.month as mes,
- pagos.dolares,
- pagos.cambioPractico,
- CAST(sum(divisa) / sum(bi) as DECIMAL(5,4)) as cambioTeorico,
- pagos.cambioOficial
- FROM recibida r
- JOIN time t ON t.date = r.fecha
- JOIN recibida_iva ri ON r.id = ri.recibida_id
- JOIN
- (
- SELECT
- t.year as Año,
- t.month as Mes,
- cast(sum(divisa) as DECIMAL(10,2)) as dolares,
- cast(sum(divisa) / sum(importe) as DECIMAL(5,4)) as cambioPractico,
- cast(rr.rate * 0.998 as DECIMAL(5,4)) as cambioOficial
- FROM pago p
- JOIN time t ON t.date = p.fecha
- JOIN reference_rate rr ON rr.date = p.fecha AND moneda_id = 2
- WHERE divisa
- AND fecha >= '2015-01-11'
- GROUP BY t.year, t.month
- ) pagos ON t.year = pagos.Año AND t.month = pagos.Mes
- WHERE moneda_id = 2
- AND fecha >= '2015-01-01'
- AND divisa
- 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 `recobro_credito` */;
-/*!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 `recobro_credito`()
-BEGIN
- DECLARE EXIT HANDLER FOR SQLSTATE '45000'
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
- START TRANSACTION;
- UPDATE vn.`client` c
- JOIN vn.payMethod pm ON pm.id = c.payMethodFk
- SET credit = 0
- WHERE pm.`code` = 'card';
-
- DROP TEMPORARY TABLE IF EXISTS clientes_credit;
- CREATE TEMPORARY TABLE clientes_credit
- SELECT Id_Cliente, if (Credito > Recobro ,Credito - Recobro,0) AS newCredit
- FROM (
- SELECT r.Id_Cliente, r.amount AS Recobro,
- timestampadd(DAY, period, UltimaFecha) AS Deadline, sub2.amount AS Credito
- FROM vn2008.recovery r
- JOIN (
- SELECT Id_Cliente, amount , odbc_date AS UltimaFecha
- FROM (
- SELECT * FROM credit
- ORDER BY odbc_date DESC
- LIMIT 10000000000000000000
- ) sub
- GROUP BY Id_Cliente
- ) sub2 USING(Id_Cliente)
- WHERE dend IS NULL or dend >= util.VN_CURDATE()
- GROUP BY Id_Cliente
- HAVING Deadline <= util.VN_CURDATE()
- ) sub3
- WHERE Credito > 0;
-
- UPDATE Clientes
- JOIN clientes_credit USING(Id_Cliente)
- SET Clientes.Credito = newCredit;
-
- DROP TEMPORARY TABLE clientes_credit;
- COMMIT;
-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 `risk_vs_client_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 `risk_vs_client_list`(maxRiskDate DATE)
-BEGIN
-/**
- * Calcula el riesgo para los clientes activos de la tabla temporal tmp.client_list
- *
- * @deprecated usar vn.client_getDebt
- * @param maxRiskDate Fecha maxima de los registros
- * @return table tmp.risk
- */
- DECLARE startingDate DATETIME DEFAULT TIMESTAMPADD(DAY, - DAYOFMONTH(util.VN_CURDATE()) - 60, util.VN_CURDATE());
- DECLARE endingDate DATETIME;
- DECLARE MAX_RISK_ALLOWED INT DEFAULT 200;
-
- SET maxRiskDate = IFNULL(maxRiskDate, util.VN_CURDATE());
- SET endingDate = TIMESTAMP(maxRiskDate, '23:59:59');
-
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list_2;
- CREATE TEMPORARY TABLE tmp.client_list_2
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT *
- FROM tmp.client_list;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list_3;
- CREATE TEMPORARY TABLE tmp.client_list_3
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT *
- FROM tmp.client_list;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.tickets_sin_facturar;
- CREATE TEMPORARY TABLE tmp.tickets_sin_facturar
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT t.Id_Cliente, floor(IF(cl.isVies, 1, 1.1) * sum(Cantidad * Preu * (100 - Descuento) / 100)) as total
- FROM Movimientos m
- JOIN Tickets t on m.Id_Ticket = t.Id_Ticket
- JOIN tmp.client_list c on c.Id_Cliente = t.Id_Cliente
- JOIN vn.client cl ON cl.id = t.Id_Cliente
- WHERE Factura IS NULL
- AND Fecha BETWEEN startingDate AND endingDate
- GROUP BY t.Id_Cliente;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.risk;
- CREATE TEMPORARY TABLE tmp.risk
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT Id_Cliente, SUM(amount) risk, sum(saldo) saldo
- FROM Clientes c
- JOIN (
- SELECT clientFk, SUM(amount) amount,SUM(amount) saldo
- FROM vn.clientRisk
- JOIN tmp.client_list on Id_Cliente = clientFk
- GROUP BY clientFk
- UNION ALL
- SELECT Id_Cliente, SUM(Entregado),SUM(Entregado)
- FROM Recibos
- JOIN tmp.client_list_2 using(Id_Cliente)
- WHERE Fechacobro > endingDate
- GROUP BY Id_Cliente
- UNION ALL
- SELECT Id_Cliente, total,0
- FROM tmp.tickets_sin_facturar
- UNION ALL
- SELECT t.clientFk, CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2)), CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2))
- FROM hedera.tpvTransaction t
- JOIN tmp.client_list_3 on Id_Cliente = t.clientFk
- WHERE t.receiptFk IS NULL
- AND t.status = 'ok'
- GROUP BY t.clientFk
- ) t ON c.Id_Cliente = t.clientFk
- WHERE c.activo != FALSE
- GROUP BY c.Id_Cliente;
-
- DELETE r.*
- FROM tmp.risk r
- JOIN vn2008.Clientes c on c.Id_Cliente = r.Id_Cliente
- JOIN vn2008.pay_met pm on pm.id = c.pay_met_id
- WHERE IFNULL(r.saldo,0) < 10
- AND r.risk <= MAX_RISK_ALLOWED
- AND pm.`name` = 'TARJETA';
-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`
@@ -85624,7 +86169,7 @@ USE `bi`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `v_ventas_contables` AS select `time`.`year` AS `year`,`time`.`month` AS `month`,cast(sum(`m`.`Cantidad` * `m`.`Preu` * (100 - `m`.`Descuento`) / 100) as decimal(10,0)) AS `importe` from (((`vn2008`.`Tickets` `t` join `bi`.`f_tvc` on(`t`.`Id_Ticket` = `bi`.`f_tvc`.`Id_Ticket`)) join `vn2008`.`Movimientos` `m` on(`t`.`Id_Ticket` = `m`.`Id_Ticket`)) join `vn2008`.`time` on(`time`.`date` = cast(`t`.`Fecha` as date))) where `t`.`Fecha` >= '2014-01-01' group by `time`.`year`,`time`.`month` */;
+/*!50001 VIEW `v_ventas_contables` AS select `time`.`year` AS `year`,`time`.`month` AS `month`,cast(sum(`m`.`Cantidad` * `m`.`Preu` * (100 - `m`.`Descuento`) / 100) as decimal(10,0)) AS `importe` from (((`vn`.`ticket` `t` join `bi`.`f_tvc` on(`t`.`id` = `bi`.`f_tvc`.`Id_Ticket`)) join `vn2008`.`Movimientos` `m` on(`t`.`id` = `m`.`Id_Ticket`)) join `vn2008`.`time` on(`time`.`date` = cast(`t`.`shipped` as date))) where `t`.`shipped` >= '2014-01-01' group by `time`.`year`,`time`.`month` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -85887,6 +86432,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`
--
@@ -86379,12 +86930,6 @@ USE `psico`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
---
--- Current Database: `rfid`
---
-
-USE `rfid`;
-
--
-- Current Database: `sage`
--
@@ -87952,7 +88497,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `payrollCenter` AS select `b`.`cod_centro` AS `codCenter`,`b`.`Centro` AS `name`,`b`.`nss_cotizacion` AS `nss`,`b`.`domicilio` AS `street`,`b`.`poblacion` AS `city`,`b`.`cp` AS `postcode`,`b`.`empresa_id` AS `companyFk`,`b`.`codempresa` AS `companyCode` from `vn2008`.`payroll_centros` `b` */;
+/*!50001 VIEW `payrollCenter` AS select `b`.`workCenterFkA3` AS `codCenter`,`b`.`companyFkA3` AS `companyCode` from `payrollWorkCenter` `b` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -88222,7 +88767,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 */;
@@ -88366,7 +88911,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `ticketMRW` AS select `Tickets`.`Id_Agencia` AS `id_Agencia`,`Tickets`.`empresa_id` AS `empresa_id`,`Consignatarios`.`consignatario` AS `Consignatario`,`Consignatarios`.`domicilio` AS `DOMICILIO`,`Consignatarios`.`poblacion` AS `POBLACION`,`Consignatarios`.`codPostal` AS `CODPOSTAL`,`Consignatarios`.`telefono` AS `telefono`,ifnull(ifnull(ifnull(ifnull(`Consignatarios`.`movil`,`Clientes`.`movil`),`Consignatarios`.`telefono`),`Clientes`.`telefono`),0) AS `movil`,`Clientes`.`if` AS `IF`,`Tickets`.`Id_Ticket` AS `Id_Ticket`,`Tickets`.`warehouse_id` AS `warehouse_id`,`Consignatarios`.`id_consigna` AS `Id_Consigna`,`Paises`.`Codigo` AS `CodigoPais`,`Tickets`.`Fecha` AS `Fecha`,`province`.`province_id` AS `province_id`,`Tickets`.`landing` AS `landing` from ((((`vn2008`.`Clientes` join `vn2008`.`Consignatarios` on(`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`)) join `vn2008`.`Tickets` on(`Consignatarios`.`id_consigna` = `Tickets`.`Id_Consigna`)) join `vn2008`.`province` on(`Consignatarios`.`province_id` = `province`.`province_id`)) join `vn2008`.`Paises` on(`province`.`Paises_Id` = `Paises`.`Id`)) */;
+/*!50001 VIEW `ticketMRW` AS select `vn`.`ticket`.`agencyModeFk` AS `id_Agencia`,`vn`.`ticket`.`companyFk` AS `empresa_id`,`Consignatarios`.`consignatario` AS `Consignatario`,`Consignatarios`.`domicilio` AS `DOMICILIO`,`Consignatarios`.`poblacion` AS `POBLACION`,`Consignatarios`.`codPostal` AS `CODPOSTAL`,`Consignatarios`.`telefono` AS `telefono`,ifnull(ifnull(ifnull(ifnull(`Consignatarios`.`movil`,`Clientes`.`movil`),`Consignatarios`.`telefono`),`Clientes`.`telefono`),0) AS `movil`,`Clientes`.`if` AS `IF`,`vn`.`ticket`.`id` AS `Id_Ticket`,`vn`.`ticket`.`warehouseFk` AS `warehouse_id`,`Consignatarios`.`id_consigna` AS `Id_Consigna`,`Paises`.`Codigo` AS `CodigoPais`,`vn`.`ticket`.`shipped` AS `Fecha`,`province`.`province_id` AS `province_id`,`vn`.`ticket`.`landed` AS `landing` from ((((`vn2008`.`Clientes` join `vn2008`.`Consignatarios` on(`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`)) join `vn`.`ticket` on(`Consignatarios`.`id_consigna` = `vn`.`ticket`.`addressFk`)) join `vn2008`.`province` on(`Consignatarios`.`province_id` = `province`.`province_id`)) join `vn2008`.`Paises` on(`province`.`Paises_Id` = `Paises`.`Id`)) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89218,7 +89763,25 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `Proveedores` AS select `s`.`id` AS `Id_Proveedor`,`s`.`name` AS `Proveedor`,`s`.`account` AS `cuenta`,`s`.`countryFk` AS `pais_id`,`s`.`nif` AS `NIF`,`s`.`isFarmer` AS `Agricola`,`s`.`phone` AS `Telefono`,`s`.`retAccount` AS `cuentaret`,`s`.`commission` AS `ComisionProveedor`,`s`.`created` AS `odbc_time`,`s`.`postcodeFk` AS `postcode_id`,`s`.`isActive` AS `active`,`s`.`street` AS `Domicilio`,`s`.`city` AS `Localidad`,`s`.`provinceFk` AS `province_id`,`s`.`postCode` AS `codpos`,`s`.`payMethodFk` AS `pay_met_id`,`s`.`payDemFk` AS `pay_dem_id`,`s`.`nickname` AS `Alias`,`s`.`isOfficial` AS `oficial`,`s`.`workerFk` AS `workerFk`,`s`.`payDay` AS `pay_day`,`s`.`isSerious` AS `serious`,`s`.`note` AS `notas`,`s`.`taxTypeSageFk` AS `taxTypeSageFk`,`s`.`withholdingSageFk` AS `withholdingSageFk`,`s`.`isTrucker` AS `isTrucker`,`s`.`transactionTypeSageFk` AS `transactionTypeSageFk`,`s`.`supplierActivityFk` AS `supplierActivityFk`,`s`.`healthRegister` AS `healthRegister`,`s`.`isPayMethodChecked` AS `isPayMethodChecked` from `vn`.`supplier` `s` */;
+/*!50001 VIEW `Proveedores` AS select `s`.`id` AS `Id_Proveedor`,`s`.`name` AS `Proveedor`,`s`.`account` AS `cuenta`,`s`.`countryFk` AS `pais_id`,`s`.`nif` AS `NIF`,`s`.`isFarmer` AS `Agricola`,`s`.`phone` AS `Telefono`,`s`.`retAccount` AS `cuentaret`,`s`.`commission` AS `ComisionProveedor`,`s`.`created` AS `odbc_time`,`s`.`postcodeFk` AS `postcode_id`,`s`.`isActive` AS `active`,`s`.`street` AS `Domicilio`,`s`.`city` AS `Localidad`,`s`.`provinceFk` AS `province_id`,`s`.`postCode` AS `codpos`,`s`.`payMethodFk` AS `pay_met_id`,`s`.`payDemFk` AS `pay_dem_id`,`s`.`nickname` AS `Alias`,`s`.`isOfficial` AS `oficial`,`s`.`workerFk` AS `workerFk`,`s`.`payDay` AS `pay_day`,`s`.`isReal` AS `serious`,`s`.`note` AS `notas`,`s`.`taxTypeSageFk` AS `taxTypeSageFk`,`s`.`withholdingSageFk` AS `withholdingSageFk`,`s`.`isTrucker` AS `isTrucker`,`s`.`transactionTypeSageFk` AS `transactionTypeSageFk`,`s`.`supplierActivityFk` AS `supplierActivityFk`,`s`.`healthRegister` AS `healthRegister`,`s`.`isPayMethodChecked` AS `isPayMethodChecked` from `vn`.`supplier` `s` */;
+/*!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 `Proveedores_cargueras`
+--
+
+/*!50001 DROP VIEW IF EXISTS `Proveedores_cargueras`*/;
+/*!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 `Proveedores_cargueras` AS select `fs`.`supplierFk` AS `Id_Proveedor` from `vn`.`supplierFreight` `fs` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89457,6 +90020,24 @@ USE `vn2008`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
+--
+-- Final view structure for view `Tramos`
+--
+
+/*!50001 DROP VIEW IF EXISTS `Tramos`*/;
+/*!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 `Tramos` AS select `s`.`id` AS `id`,`s`.`section` AS `Tramo` from `vn`.`timeSlots` `s` */;
+/*!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_edi_item_track`
--
@@ -90280,7 +90861,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 */;
@@ -90370,7 +90951,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `gastos_resumen` AS select `es`.`expenseFk` AS `Id_Gasto`,`es`.`year` AS `year`,`es`.`month` AS `month`,`es`.`amount` AS `importe`,`es`.`companyFk` AS `empresa_id` from `vn`.`expenseManual` `es` */;
+/*!50001 VIEW `gastos_resumen` AS select `es`.`id` AS `id`,`es`.`expenseFk` AS `Id_Gasto`,`es`.`year` AS `year`,`es`.`month` AS `month`,`es`.`amount` AS `importe`,`es`.`companyFk` AS `empresa_id` from `vn`.`expenseManual` `es` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -90573,6 +91154,60 @@ USE `vn2008`;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
+--
+-- Final view structure for view `payroll_centros`
+--
+
+/*!50001 DROP VIEW IF EXISTS `payroll_centros`*/;
+/*!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 `payroll_centros` AS select `pwc`.`workCenterFkA3` AS `cod_centro`,`pwc`.`companyFkA3` AS `codempresa` from `vn`.`payrollWorkCenter` `pwc` */;
+/*!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 `payroll_conceptos`
+--
+
+/*!50001 DROP VIEW IF EXISTS `payroll_conceptos`*/;
+/*!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 `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` */;
+/*!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 `payroll_employee`
+--
+
+/*!50001 DROP VIEW IF EXISTS `payroll_employee`*/;
+/*!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 `payroll_employee` AS select `pw`.`workerFkA3` AS `CodTrabajador`,`pw`.`companyFkA3` AS `codempresa`,`pw`.`workerFk` AS `workerFk` from `vn`.`payrollWorker` `pw` */;
+/*!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 `plantpassport`
--
@@ -91086,4 +91721,4 @@ USE `vn2008`;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-03-26 6:55:36
+-- Dump completed on 2024-05-07 5:48:20
diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql
index 515a09a23..ad4eb24a5 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`
--
@@ -989,27 +995,19 @@ 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 `hedera`.`order_afterUpdate`
- AFTER UPDATE ON `order`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('order', NEW.id, OLD.id);
-
- IF !(OLD.address_id <=> NEW.address_id)
- OR !(OLD.company_id <=> NEW.company_id)
- OR !(OLD.customer_id <=> NEW.customer_id) THEN
- CALL order_requestRecalc(NEW.id);
- END IF;
-
- IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
- -- Fallo que se actualiza no se sabe como tickets en este cliente
- CALL vn.mail_insert(
- 'jgallego@verdnatura.es',
- 'noreply@verdnatura.es',
- 'Actualizada order al address 2850',
- CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
- );
- END IF;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `hedera`.`order_afterUpdate`
+ AFTER UPDATE ON `order`
+ FOR EACH ROW
+BEGIN
+ IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
+ -- Fallo que se actualiza no se sabe como tickets en este cliente
+ CALL vn.mail_insert(
+ 'jgallego@verdnatura.es',
+ 'noreply@verdnatura.es',
+ 'Actualizada order al address 2850',
+ CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
+ );
+ END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -1065,70 +1063,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_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 `hedera`.`orderRow_afterInsert`
- AFTER INSERT ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NEW.id, NULL);
- CALL order_requestRecalc(NEW.orderFk);
-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 `hedera`.`orderRow_afterUpdate`
- AFTER UPDATE ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NEW.id, OLD.id);
- CALL order_requestRecalc(OLD.orderFk);
- CALL order_requestRecalc(NEW.orderFk);
-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 `hedera`.`orderRow_afterDelete`
- AFTER DELETE ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NULL, OLD.id);
- CALL order_requestRecalc(OLD.orderFk);
-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: `pbx`
@@ -1392,12 +1326,6 @@ DELIMITER ;
USE `psico`;
---
--- Current Database: `rfid`
---
-
-USE `rfid`;
-
--
-- Current Database: `sage`
--
@@ -1513,12 +1441,12 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
-
- CALL visible_log(
+
+ CALL visible_log(
NEW.isPicked,
- NEW.warehouseFk,
- NEW.itemFk,
- NEW.quantity
+ NEW.warehouseFk,
+ NEW.itemFk,
+ NEW.quantity
);
END */;;
DELIMITER ;
@@ -1548,11 +1476,11 @@ BEGIN
DELETE FROM inboundPick
WHERE inboundFk = OLD.id;
- CALL visible_log(
+ CALL visible_log(
OLD.isPicked,
- OLD.warehouseFk,
- OLD.itemFk,
- -OLD.quantity
+ OLD.warehouseFk,
+ OLD.itemFk,
+ -OLD.quantity
);
END */;;
DELIMITER ;
@@ -1575,12 +1503,12 @@ DELIMITER ;;
BEGIN
SET NEW.lack = NEW.quantity;
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
-
- CALL visible_log(
+
+ CALL visible_log(
NEW.isPicked,
- NEW.warehouseFk,
- NEW.itemFk,
- -NEW.quantity
+ NEW.warehouseFk,
+ NEW.itemFk,
+ -NEW.quantity
);
END */;;
DELIMITER ;
@@ -1610,11 +1538,11 @@ BEGIN
DELETE FROM inboundPick
WHERE outboundFk = OLD.id;
- CALL visible_log(
+ CALL visible_log(
OLD.isPicked,
- OLD.warehouseFk,
- OLD.itemFk,
- OLD.quantity
+ OLD.warehouseFk,
+ OLD.itemFk,
+ OLD.quantity
);
END */;;
DELIMITER ;
@@ -1739,15 +1667,15 @@ DELIMITER ;;
BEFORE INSERT ON `accountReconciliation`
FOR EACH ROW
- SET NEW.calculatedCode = REPLACE(
- REPLACE(
- REPLACE(
- REPLACE(
- CONCAT(NEW.supplierAccountFk,NEW.operationDated,NEW.amount,NEW.concept,NEW.debitCredit)
- ,' ','')
- ,":",'')
- ,'-','')
- ,'.','') */;;
+ SET NEW.calculatedCode = REGEXP_REPLACE(
+ CONCAT(NEW.supplierAccountFk,
+ NEW.operationDated,
+ NEW.amount,
+ NEW.concept,
+ CAST(NEW.debitCredit AS UNSIGNED)
+ ),
+ '[ :\\-.]', ''
+ ) */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
@@ -1861,37 +1789,33 @@ DELIMITER ;;
BEGIN
-- Recargos de equivalencia distintos implican facturacion por consignatario
IF NEW.isEqualizated != OLD.isEqualizated THEN
- IF
+ IF
(SELECT COUNT(*) FROM
(
SELECT DISTINCT (isEqualizated = FALSE) as Equ
- FROM address
+ FROM address
WHERE clientFk = NEW.clientFk
) t1
) > 1
- THEN
- UPDATE client
+ THEN
+ UPDATE client
SET hasToInvoiceByAddress = TRUE
WHERE id = NEW.clientFk;
END IF;
END IF;
+
IF NEW.isDefaultAddress AND NEW.isActive = FALSE THEN
CALL util.throw ('Cannot desactivate the default address');
END IF;
- IF NOT (NEW.isEqualizated <=> OLD.isEqualizated) THEN
- INSERT IGNORE INTO ticketRecalc (ticketFk)
- SELECT id FROM ticket t
- WHERE t.addressFk = NEW.id
- AND t.refFk IS NULL;
- END IF;
-
- IF (NEW.clientFk <> OLD.clientFk OR NEW.isActive <> OLD.isActive OR NOT (NEW.provinceFk <=> OLD.provinceFk))
- AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
- UPDATE client
+ IF (NEW.clientFk <> OLD.clientFk
+ OR NEW.isActive <> OLD.isActive
+ OR NOT (NEW.provinceFk <=> OLD.provinceFk))
+ AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
+ UPDATE client
SET hasToInvoiceByAddress = TRUE
WHERE id = NEW.clientFk;
- END IF;
+ END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -2286,20 +2210,29 @@ trig: BEGIN
DECLARE vWarehouse INT;
DECLARE vLanding DATE;
DECLARE vGrouping INT;
- DECLARE vGroupingMode TINYINT;
+ DECLARE vGroupingMode VARCHAR(255);
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
@@ -2383,8 +2316,6 @@ trig: BEGIN
LEAVE trig;
END IF;
- CALL stock.log_add('buy', NEW.id, NULL);
-
CALL buy_afterUpsert(NEW.id);
END */;;
DELIMITER ;
@@ -2409,11 +2340,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 +2400,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
@@ -2482,11 +2424,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`.`buy_afterUpdate`
AFTER UPDATE ON `buy`
@@ -2501,14 +2443,6 @@ trig: BEGIN
LEAVE trig;
END IF;
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.entryFk <=> OLD.entryFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.created <=> OLD.created) THEN
- CALL stock.log_add('buy', NEW.id, OLD.id);
- END IF;
-
CALL buy_afterUpsert(NEW.id);
SELECT w.isBuyerToBeEmailed, t.landed
@@ -2557,10 +2491,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;
@@ -2583,20 +2518,15 @@ DELIMITER ;;
AFTER DELETE ON `buy`
FOR EACH ROW
trig: BEGIN
- DECLARE vValues VARCHAR(255);
-
IF @isModeInventory OR @isTriggerDisabled THEN
LEAVE trig;
END IF;
- CALL stock.log_add('buy', NULL, OLD.id);
-
INSERT INTO entryLog
SET `action` = 'delete',
`changedModel` = 'Buy',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -3275,20 +3205,13 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
IF !(NEW.defaultAddressFk <=> OLD.defaultAddressFk) THEN
- UPDATE `address` SET isDefaultAddress = 0
+ UPDATE `address` SET isDefaultAddress = FALSE
WHERE clientFk = NEW.id;
-
- UPDATE `address` SET isDefaultAddress = 1
- WHERE id = NEW.defaultAddressFk;
+
+ UPDATE `address` SET isDefaultAddress = TRUE
+ WHERE id = NEW.defaultAddressFk;
END IF;
- IF NOT (NEW.provinceFk <=> OLD.provinceFk) OR NOT (NEW.isVies <=> OLD.isVies) THEN
- INSERT IGNORE INTO ticketRecalc (ticketFk)
- SELECT id FROM ticket t
- WHERE t.clientFk = NEW.id
- AND t.refFk IS NULL;
- END IF;
-
IF NOT NEW.isActive THEN
UPDATE account.`user`
SET active = FALSE
@@ -4647,26 +4570,6 @@ 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`.`entry_afterInsert`
- AFTER INSERT ON `entry`
- FOR EACH ROW
-BEGIN
- CALL travel_requestRecalc(NEW.travelFk);
-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`.`entry_beforeUpdate`
BEFORE UPDATE ON `entry`
FOR EACH ROW
@@ -4674,9 +4577,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
@@ -4738,24 +4645,12 @@ DELIMITER ;;
AFTER UPDATE ON `entry`
FOR EACH ROW
BEGIN
- IF NOT(NEW.id <=> OLD.id)
- OR NOT(NEW.travelFk <=> OLD.travelFk)
- OR NOT(NEW.isRaid <=> OLD.isRaid) THEN
- CALL stock.log_add('entry', NEW.id, OLD.id);
- END IF;
-
- IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
- CALL travel_requestRecalc(OLD.travelFk);
- CALL travel_requestRecalc(NEW.travelFk);
- END IF;
-
-
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
FROM buy b
WHERE b.entryFk = NEW.id;
-
+
CALL buy_checkItem();
END IF;
END */;;
@@ -4777,6 +4672,7 @@ DELIMITER ;;
BEFORE DELETE ON `entry`
FOR EACH ROW
BEGIN
+ CALL entry_checkBooked(OLD.id);
DELETE FROM buy WHERE entryFk = OLD.id;
END */;;
DELIMITER ;
@@ -4802,8 +4698,6 @@ BEGIN
`changedModel` = 'Entry',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
- CALL travel_requestRecalc(OLD.travelFk);
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -5401,6 +5295,10 @@ DELIMITER ;;
BEGIN
DECLARE vWithholdingSageFk INT;
+ IF NEW.isBooked = OLD.isBooked THEN
+ CALL invoiceIn_checkBooked(OLD.id);
+ END IF;
+
IF NOT (NEW.supplierRef <=> OLD.supplierRef) AND NOT util.checkPrintableChars(NEW.supplierRef) THEN
CALL util.throw('The invoiceIn reference contains invalid characters');
END IF;
@@ -5443,7 +5341,6 @@ DELIMITER ;;
AFTER UPDATE ON `invoiceIn`
FOR EACH ROW
BEGIN
-
IF NEW.issued != OLD.issued
OR NEW.currencyFk != OLD.currencyFk THEN
@@ -5478,6 +5375,26 @@ 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`.`invoiceIn_beforeDelete`
+ BEFORE DELETE ON `invoiceIn`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.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_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`.`invoiceIn_afterDelete`
AFTER DELETE ON `invoiceIn`
FOR EACH ROW
@@ -5502,12 +5419,74 @@ 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`.`invoiceInCorrection_beforeInsert`
+ BEFORE INSERT ON `invoiceInCorrection`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(NEW.correctingFk);
+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`.`invoiceInCorrection_beforeUpdate`
+ BEFORE UPDATE ON `invoiceInCorrection`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.correctingFk);
+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`.`invoiceInCorrection_beforeDelete`
+ BEFORE DELETE ON `invoiceInCorrection`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.correctingFk);
+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`.`invoiceInDueDay_beforeInsert`
BEFORE INSERT ON `invoiceInDueDay`
FOR EACH ROW
BEGIN
DECLARE vIsNotified BOOLEAN;
+ CALL invoiceIn_checkBooked(NEW.invoiceInFk);
+
SET NEW.editorFk = account.myUser_getId();
SELECT isNotified INTO vIsNotified
@@ -5550,6 +5529,7 @@ DELIMITER ;;
BEGIN
DECLARE vIsNotified BOOLEAN;
+ CALL invoiceIn_checkBooked(OLD.invoiceInFk);
SET NEW.editorFk = account.myUser_getId();
SELECT isNotified INTO vIsNotified
@@ -5586,6 +5566,26 @@ 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`.`invoiceInDueDay_beforeDelete`
+ BEFORE DELETE ON `invoiceInDueDay`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.invoiceInFk);
+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`.`invoiceInDueDay_afterDelete`
AFTER DELETE ON `invoiceInDueDay`
FOR EACH ROW
@@ -5610,6 +5610,66 @@ 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`.`invoiceInIntrastat_beforeInsert`
+ BEFORE INSERT ON `invoiceInIntrastat`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(NEW.invoiceInFk);
+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`.`invoiceInIntrastat_beforeUpdate`
+ BEFORE UPDATE ON `invoiceInIntrastat`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.invoiceInFk);
+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`.`invoiceInIntrastat_beforeDelete`
+ BEFORE DELETE ON `invoiceInIntrastat`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.invoiceInFk);
+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`.`invoiceInTax_beforeInsert`
BEFORE INSERT ON `invoiceInTax`
FOR EACH ROW
@@ -5635,6 +5695,8 @@ DELIMITER ;;
BEFORE UPDATE ON `invoiceInTax`
FOR EACH ROW
BEGIN
+ CALL invoiceIn_checkBooked(OLD.invoiceInFk);
+
IF NOT (NEW.invoiceInFk <=> OLD.invoiceInFk) THEN
CALL invoiceInTax_afterUpsert(NEW.invoiceInFk);
END IF;
@@ -5655,6 +5717,26 @@ 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`.`invoiceInTax_beforeDelete`
+ BEFORE DELETE ON `invoiceInTax`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.invoiceInFk);
+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`.`invoiceInTax_afterDelete`
AFTER DELETE ON `invoiceInTax`
FOR EACH ROW
@@ -7795,11 +7877,7 @@ BEGIN
CALL util.throw('Cannot insert a service item into a ticket');
END IF;
- CALL stock.log_add('sale', NEW.id, NULL);
- CALL ticket_requestRecalc(NEW.ticketFk);
-
IF NEW.quantity > 0 THEN
-
UPDATE vn.collection c
JOIN vn.ticketCollection tc ON tc.collectionFk = c.id
AND tc.ticketFk = NEW.ticketFk
@@ -7875,24 +7953,6 @@ BEGIN
DECLARE vIsToSendMail BOOL;
DECLARE vUserRole VARCHAR(255);
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.created <=> OLD.created)
- OR !(NEW.isPicked <=> OLD.isPicked) THEN
- CALL stock.log_add('sale', NEW.id, OLD.id);
- END IF;
-
- IF !(NEW.price <=> OLD.price)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.discount <=> OLD.discount) THEN
- CALL ticket_requestRecalc(NEW.ticketFk);
- CALL ticket_requestRecalc(OLD.ticketFk);
- END IF;
-
IF !(OLD.ticketFk <=> NEW.ticketFk) THEN
UPDATE ticketRequest SET ticketFk = NEW.ticketFk
WHERE saleFk = NEW.id;
@@ -8014,9 +8074,6 @@ BEGIN
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
- CALL stock.log_add('sale', NULL, OLD.id);
- CALL ticket_requestRecalc(OLD.ticketFk);
-
SELECT account.myUser_getName() INTO vUserRole;
SELECT account.user_getMysqlRole(vUserRole) INTO vUserRole;
@@ -9045,25 +9102,11 @@ DELIMITER ;;
AFTER UPDATE ON `ticket`
FOR EACH ROW
BEGIN
-
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.warehouseFk <=> OLD.warehouseFk)
- OR !(NEW.shipped <=> OLD.shipped) THEN
- CALL stock.log_add('ticket', NEW.id, OLD.id);
- END IF;
-
- IF !(NEW.clientFk <=> OLD.clientFk)
- OR !(NEW.addressFk <=> OLD.addressFk)
- OR !(NEW.companyFk <=> OLD.companyFk) THEN
- CALL ticket_requestRecalc(NEW.id);
- END IF;
-
IF NEW.routeFk <> OLD.routeFk THEN
- UPDATE expedition
+ UPDATE expedition
SET hasNewRoute = TRUE
WHERE ticketFk = NEW.id;
END IF;
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -9334,8 +9377,6 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
- SET NEW.workerFk = account.myUser_getId();
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -9591,28 +9632,6 @@ 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`.`ticketService_afterInsert`
- AFTER INSERT ON `ticketService`
- FOR EACH ROW
-BEGIN
-
- CALL ticket_requestRecalc(NEW.ticketFk);
-
-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`.`ticketService_beforeUpdate`
BEFORE UPDATE ON `ticketService`
FOR EACH ROW
@@ -9633,31 +9652,6 @@ 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`.`ticketService_afterUpdate`
- AFTER UPDATE ON `ticketService`
- FOR EACH ROW
-BEGIN
- IF !(NEW.price <=> OLD.price)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.quantity <=> OLD.quantity) THEN
- CALL ticket_requestRecalc(NEW.ticketFk);
- CALL ticket_requestRecalc(OLD.ticketFk);
- 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_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`.`ticketService_afterDelete`
AFTER DELETE ON `ticketService`
FOR EACH ROW
@@ -9667,9 +9661,6 @@ BEGIN
`changedModel` = 'TicketService',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
- CALL ticket_requestRecalc(OLD.ticketFk);
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10087,6 +10078,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 */ ;
@@ -10106,10 +10101,8 @@ DELIMITER ;;
AFTER UPDATE ON `travel`
FOR EACH ROW
BEGIN
- CALL stock.log_add('travel', NEW.id, OLD.id);
-
IF NOT(NEW.shipped <=> OLD.shipped) THEN
- UPDATE entry
+ UPDATE entry
SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
WHERE travelFk = NEW.id;
END IF;
@@ -10118,18 +10111,14 @@ BEGIN
IF (SELECT hasWeightVolumetric FROM agencyMode WHERE id = NEW.agencyModeFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
- FROM entry e
+ FROM entry e
JOIN buy b ON b.entryFk = e.id
JOIN item i ON i.id = b.itemFk
WHERE e.travelFk = NEW.id;
-
+
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 ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10836,6 +10825,7 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10856,6 +10846,7 @@ DELIMITER ;;
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10865,11 +10856,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`
@@ -10880,6 +10871,7 @@ BEGIN
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -10962,4 +10954,4 @@ USE `vn2008`;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-03-26 6:55:58
+-- Dump completed on 2024-05-07 5:48:41
diff --git a/db/dump/fixtures.after.sql b/db/dump/fixtures.after.sql
index af5509cfe..fd940d8a6 100644
--- a/db/dump/fixtures.after.sql
+++ b/db/dump/fixtures.after.sql
@@ -9,6 +9,10 @@ SET foreign_key_checks = 0;
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);
+
+INSERT INTO util.binlogQueue (code,logName, `position`)
+ VALUES ('mylogger', 'bin.000001', 4);
+
/* #5483
INSERT INTO vn.entryConfig (defaultEntry, mailToNotify, inventorySupplierFk, maxLockTime, defaultSupplierFk)
VALUES(1, NULL, 1, 300, 1);
@@ -113,9 +117,6 @@ INSERT INTO vn.ticket (clientFk, warehouseFk, shipped, nickname, refFk, addressF
(100, 4, '2022-07-12 00:00:00', 'root', NULL, 195, NULL, NULL, 0, 0, 0, 0, NULL, 0, '2022-07-12 16:18:58', 1, NULL, 4, NULL, 1, 567, 1, '2022-07-12', 0, 0, 6, NULL, NULL, NULL, NULL, NULL),
(100, 5, '2022-07-12 00:00:00', 'root', NULL, 195, NULL, NULL, 0, 0, 0, 0, NULL, 0, '2022-07-12 16:18:58', 1, NULL, 5, NULL, 1, 567, 1, '2022-07-12', 0, 0, 1, NULL, NULL, NULL, NULL, NULL);
*/
-INSERT INTO vn.sector (description,warehouseFk) VALUES
- ('Sector One',1);
-
INSERT INTO vn.saleGroup (userFk,parkingFk,sectorFk) VALUES
(100,1,1);
@@ -145,7 +146,7 @@ INSERT INTO `vn`.`businessReasonEnd` (`id`, `reason`)
('2', 'No supera PP empresa'),
('3', 'Despido');
-INSERT INTO `vn2008`.`payroll_categorias` (`codcategoria`, `descripcion`, `Tarifa`)
+INSERT INTO `vn`.`payrollCategories` (`id`, `description`, `rate`)
VALUES
('11', 'INFORMATICA', '2'),
('12', 'AUX INFORMATICA', '7');
@@ -156,16 +157,6 @@ 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`)
- 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);
INSERT INTO `vn`.`trainingCourseType` (`id`, `name`)
VALUES
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index 1dad68b2c..348c1fd06 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -11,7 +11,6 @@ CREATE ROLE 'salix';
GRANT 'salix' TO 'root'@'%';
SET DEFAULT ROLE 'salix' FOR 'root'@'%';
-CREATE SCHEMA IF NOT EXISTS `vn2008`;
CREATE SCHEMA IF NOT EXISTS `tmp`;
UPDATE `util`.`config`
@@ -81,7 +80,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 +117,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','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');
+ (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)
@@ -160,7 +159,8 @@ INSERT INTO `vn`.`currency`(`id`, `code`, `name`, `ratio`)
(1, 'EUR', 'Euro', 1),
(2, 'USD', 'Dollar USA', 1.4),
(3, 'GBP', 'Libra', 1),
- (4, 'JPY', 'Yen Japones', 1);
+ (4, 'JPY', 'Yen Japones', 1),
+ (5, 'CNY', 'Yuan Chino', 1.2);
INSERT INTO `vn`.`country`(`id`, `country`, `isUeeMember`, `code`, `currencyFk`, `ibanLength`, `continentFk`, `hasDailyInvoice`, `CEE`)
VALUES
@@ -198,7 +198,7 @@ INSERT INTO `vn`.`printer` (`id`, `name`, `path`, `isLabeler`, `sectorFk`, `ipAd
(2, 'printer2', 'path2', 1, 1 , NULL),
(4, 'printer4', 'path4', 0, NULL, '10.1.10.4');
-UPDATE `vn`.`sector` SET mainPrinterFk = 1 WHERE id = 1;
+UPDATE `vn`.`sector` SET `backupPrinterFk` = 1 WHERE id = 1;
INSERT INTO `vn`.`worker`(`id`, `code`, `firstName`, `lastName`,`bossFk`, `phone`)
@@ -371,20 +371,20 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`)
(4, 'GCN Channel'),
(5, 'The Newspaper');
-INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`, `businessTypeFk`,`typeFk`)
+INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`businessTypeFk`,`typeFk`)
VALUES
- (1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
- (1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
- (1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
- (1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
- (1105, 'Max Eisenhardt', '251628698', 'MAGNETO', 'Rogue', 'UNKNOWN WHEREABOUTS', 'Gotham', 46460, 1111111111, 222222222, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 300, 8, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
- (1106, 'DavidCharlesHaller', '53136686Q', 'LEGION', 'Charles Xavier', 'CITY OF NEW YORK, NEW YORK, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 19, 0, 1, 'florist','normal'),
- (1107, 'Hank Pym', '09854837G', 'ANT MAN', 'Hawk', 'ANTHILL, SAN FRANCISCO, CALIFORNIA', 'Gotham', 46460, 1111111111, 222222222, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 19, 0, 1, 'florist','normal'),
- (1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 19, 0, 1, 'florist','normal'),
- (1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 9, 0, 1, 'florist','normal'),
- (1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, NULL, 0, 1, 'florist','normal'),
- (1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','loses'),
- (1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','loses');
+ (1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
+ (1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
+ (1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
+ (1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
+ (1105, 'Max Eisenhardt', '251628698', 'MAGNETO', 'Rogue', 'UNKNOWN WHEREABOUTS', 'Gotham', 46460, 1111111111, 222222222, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 300, 8, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 18, 0, 'florist','normal'),
+ (1106, 'DavidCharlesHaller', '53136686Q', 'LEGION', 'Charles Xavier', 'CITY OF NEW YORK, NEW YORK, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 19, 0, 'florist','normal'),
+ (1107, 'Hank Pym', '09854837G', 'ANT MAN', 'Hawk', 'ANTHILL, SAN FRANCISCO, CALIFORNIA', 'Gotham', 46460, 1111111111, 222222222, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 19, 0, 'florist','normal'),
+ (1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 19, 0, 'florist','normal'),
+ (1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 9, 0, 'florist','normal'),
+ (1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, NULL, 0, 'florist','normal'),
+ (1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 'others','loses'),
+ (1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 'others','loses');
INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`)
SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), UPPER(CONCAT(name, 'Social')), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'GOTHAM', 46460, 1, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, util.VN_CURDATE(), 1
@@ -527,7 +527,8 @@ INSERT INTO `vn`.`observationType`(`id`,`description`, `code`)
(4, 'SalesPerson', 'salesPerson'),
(5, 'Administrative', 'administrative'),
(6, 'Weight', 'weight'),
- (7, 'InvoiceOut', 'invoiceOut');
+ (7, 'InvoiceOut', 'invoiceOut'),
+ (8, 'DropOff', 'dropOff');
INSERT INTO `vn`.`addressObservation`(`id`,`addressFk`,`observationTypeFk`,`description`)
VALUES
@@ -1492,21 +1493,21 @@ INSERT INTO `bs`.`waste`(`buyer`, `year`, `week`, `family`, `itemFk`, `itemTypeF
INSERT INTO `vn`.`buy`(`id`,`entryFk`,`itemFk`,`buyingValue`,`quantity`,`packagingFk`,`stickers`,`freightValue`,`packageValue`,`comissionValue`,`packing`,`grouping`,`groupingMode`,`location`,`price1`,`price2`,`price3`, `printedStickers`,`isChecked`,`isIgnored`,`weight`, `created`)
VALUES
- (1, 1, 1, 50, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 2 MONTH),
- (2, 2, 1, 50, 100, 4, 1, 1.500, 1.500, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 1 MONTH),
- (3, 3, 1, 50, 100, 4, 1, 1.500, 1.500, 0.000, 1, 1, 0, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE()),
- (4, 2, 2, 5, 450, 3, 1, 1.000, 1.000, 0.000, 10, 10, 0, NULL, 0.00, 7.30, 7.00, 0, 1, 0, 2.5, util.VN_CURDATE()),
- (5, 3, 3, 55, 500, 5, 1, 1.000, 1.000, 0.000, 1, 1, 0, NULL, 0.00, 78.3, 75.6, 0, 1, 0, 2.5, util.VN_CURDATE()),
- (6, 4, 8, 50, 1000, 4, 1, 1.000, 1.000, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 2.5, util.VN_CURDATE()),
- (7, 4, 9, 20, 1000, 3, 1, 0.500, 0.500, 0.000, 10, 10, 1, NULL, 0.00, 30.50, 29.00, 0, 1, 0, 2.5, util.VN_CURDATE()),
- (8, 4, 4, 1.25, 1000, 3, 1, 0.500, 0.500, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0, 1, 0, 2.5, util.VN_CURDATE()),
- (9, 4, 4, 1.25, 1000, 3, 1, 0.500, 0.500, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
- (10, 5, 1, 50, 10, 4, 1, 2.500, 2.500, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 4, util.VN_CURDATE()),
- (11, 5, 4, 1.25, 10, 3, 1, 2.500, 2.500, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
- (12, 6, 4, 1.25, 0, 3, 1, 2.500, 2.500, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
- (13, 7, 1, 50, 0, 3, 1, 2.000, 2.000, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 4, util.VN_CURDATE()),
- (14, 7, 2, 5, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 1, NULL, 0.00, 7.30, 7.00, 0, 1, 0, 4, util.VN_CURDATE()),
- (15, 7, 4, 1.25, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE());
+ (1, 1, 1, 50, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 2 MONTH),
+ (2, 2, 1, 50, 100, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 1 MONTH),
+ (3, 3, 1, 50, 100, 4, 1, 1.500, 1.500, 0.000, 1, 1, NULL, NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE()),
+ (4, 2, 2, 5, 450, 3, 1, 1.000, 1.000, 0.000, 10, 10, NULL, NULL, 0.00, 7.30, 7.00, 0, 1, 0, 2.5, util.VN_CURDATE()),
+ (5, 3, 3, 55, 500, 5, 1, 1.000, 1.000, 0.000, 1, 1, NULL, NULL, 0.00, 78.3, 75.6, 0, 1, 0, 2.5, util.VN_CURDATE()),
+ (6, 4, 8, 50, 1000, 4, 1, 1.000, 1.000, 0.000, 1, 1, 'grouping', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 2.5, util.VN_CURDATE()),
+ (7, 4, 9, 20, 1000, 3, 1, 0.500, 0.500, 0.000, 10, 10, 'packing', NULL, 0.00, 30.50, 29.00, 0, 1, 0, 2.5, util.VN_CURDATE()),
+ (8, 4, 4, 1.25, 1000, 3, 1, 0.500, 0.500, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 2.5, util.VN_CURDATE()),
+ (9, 4, 4, 1.25, 1000, 3, 1, 0.500, 0.500, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
+ (10, 5, 1, 50, 10, 4, 1, 2.500, 2.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 4, util.VN_CURDATE()),
+ (11, 5, 4, 1.25, 10, 3, 1, 2.500, 2.500, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
+ (12, 6, 4, 1.25, 0, 3, 1, 2.500, 2.500, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
+ (13, 7, 1, 50, 0, 3, 1, 2.000, 2.000, 0.000, 1, 1, 'packing', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 4, util.VN_CURDATE()),
+ (14, 7, 2, 5, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 'grouping', NULL, 0.00, 7.30, 7.00, 0, 1, 0, 4, util.VN_CURDATE()),
+ (15, 7, 4, 1.25, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE());
INSERT INTO `hedera`.`order`(`id`, `date_send`, `customer_id`, `delivery_method_id`, `agency_id`, `address_id`, `company_id`, `note`, `source_app`, `confirmed`,`total`, `date_make`, `first_row_stamp`, `confirm_date`)
VALUES
@@ -1827,9 +1828,9 @@ INSERT INTO `vn`.`claimState`(`id`, `code`, `description`, `roleFk`, `priority`,
INSERT INTO `vn`.`claim`(`id`, `ticketCreated`, `claimStateFk`, `clientFk`, `workerFk`, `responsibility`, `isChargedToMana`, `created`, `packages`, `ticketFk`)
VALUES
- (1, util.VN_CURDATE(), 1, 1101, 18, 3, 0, util.VN_CURDATE(), 0, 11),
+ (1, util.VN_CURDATE(), 1, 1101, 19, 3, 0, util.VN_CURDATE(), 0, 11),
(2, util.VN_CURDATE(), 4, 1101, 18, 3, 0, util.VN_CURDATE(), 1, 16),
- (3, util.VN_CURDATE(), 3, 1101, 18, 1, 1, util.VN_CURDATE(), 5, 7),
+ (3, util.VN_CURDATE(), 3, 1101, 19, 1, 1, util.VN_CURDATE(), 5, 7),
(4, util.VN_CURDATE(), 3, 1104, 18, 5, 0, util.VN_CURDATE(), 10, 8);
INSERT INTO `vn`.`claimObservation` (`claimFk`, `workerFk`, `text`, `created`)
@@ -1880,7 +1881,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);
@@ -1973,6 +1974,15 @@ INSERT INTO `vn`.`ticketService`(`id`, `description`, `quantity`, `price`, `taxC
(4, 'Documentos', 1, 2.00, 1, 9, 1),
(5, 'Documentos', 1, 2.00, 1, 8, 1);
+INSERT INTO `pbx`.`config` (id,defaultPrefix)
+ VALUES (1,'0034');
+
+INSERT INTO `pbx`.`prefix` (country, prefix)
+ VALUES
+ ('es', '0034'),
+ ('fr', '0033'),
+ ('pt', '00351');
+
INSERT INTO `pbx`.`sip`(`user_id`, `extension`)
VALUES
(1, 1010),
@@ -2542,17 +2552,17 @@ INSERT INTO `vn`.`duaEntry` (`duaFk`, `entryFk`, `value`, `customsValue`, `euroV
REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issued`, `created`, `supplierRef`, `isBooked`, `companyFk`, `docFk`)
VALUES
(1, 1001, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1234, 0, 442, 1),
- (2, 1002, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1235, 1, 442, 1),
+ (2, 1002, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1235, 0, 442, 1),
(3, 1003, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1236, 0, 442, 1),
(4, 1004, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1237, 0, 442, 1),
- (5, 1005, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1238, 1, 442, 1),
+ (5, 1005, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1238, 0, 442, 1),
(6, 1006, 'R', 2, util.VN_CURDATE(), util.VN_CURDATE(), 1239, 0, 442, 1),
- (7, 1007, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1240, 1, 442, 1),
- (8, 1008, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1241, 1, 442, 1),
- (9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 1, 442, 1),
- (10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 1, 442, 1);
+ (7, 1007, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1240, 0, 442, 1),
+ (8, 1008, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1241, 0, 442, 1),
+ (9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 0, 442, 1),
+ (10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 0, 442, 1);
-INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageWithholdingFk`, `daysAgo`)
+INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageFarmerWithholdingFk`, `daysAgo`)
VALUES
(1, -2, '2% retention', 2, 45);
@@ -2605,13 +2615,33 @@ INSERT INTO `vn`.`invoiceInIntrastat` (`invoiceInFk`, `net`, `intrastatFk`, `amo
(2, 13.20, 5080000, 15.00, 580, 5),
(2, 16.10, 6021010, 25.00, 80, 5);
-INSERT INTO `vn`.`ticketRecalc`(`ticketFk`)
- SELECT t.id
- FROM vn.ticket t
- LEFT JOIN vn.ticketRecalc tr ON tr.ticketFk = t.id
- WHERE tr.ticketFk IS NULL;
+UPDATE `vn`.`invoiceIn`
+ SET isBooked = TRUE
+ WHERE id IN (5, 7, 8, 9, 10);
-CALL `vn`.`ticket_doRecalc`();
+DELIMITER $$
+CREATE PROCEDURE `tmp`.`ticket_recalc`()
+BEGIN
+ DECLARE vDone BOOL;
+ DECLARE vTicketFk INT;
+
+ DECLARE cTickets CURSOR FOR SELECT id FROM vn.ticket;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND
+ SET vDone = TRUE;
+
+ OPEN cTickets;
+ myLoop: LOOP
+ SET vDone = FALSE;
+ FETCH cTickets INTO vTicketFk;
+ IF vDone THEN LEAVE myLoop; END IF;
+ CALL vn.ticket_recalc(vTicketFk, NULL);
+ END LOOP;
+ CLOSE cTickets;
+END$$
+DELIMITER ;
+
+CALL tmp.ticket_recalc;
+DROP PROCEDURE tmp.ticket_recalc;
UPDATE `vn`.`ticket`
SET refFk = 'T1111111'
@@ -2813,7 +2843,8 @@ INSERT INTO `util`.`notification` (`id`, `name`, `description`)
(4, 'supplier-pay-method-update', 'A supplier pay method has been updated'),
(5, 'modified-entry', 'An entry has been modified'),
(6, 'book-entry-deleted', 'accounting entries deleted'),
- (7, 'zone-included','An email to notify zoneCollisions');
+ (7, 'zone-included','An email to notify zoneCollisions'),
+ (8, 'backup-printer-selected','A backup printer has been selected');
TRUNCATE `util`.`notificationAcl`;
INSERT INTO `util`.`notificationAcl` (`notificationFk`, `roleFk`)
@@ -2825,7 +2856,8 @@ INSERT INTO `util`.`notificationAcl` (`notificationFk`, `roleFk`)
(4, 1),
(5, 9),
(6, 9),
- (7, 9);
+ (7, 9),
+ (8, 66);
TRUNCATE `util`.`notificationQueue`;
INSERT INTO `util`.`notificationQueue` (`id`, `notificationFk`, `params`, `authorFk`, `status`, `created`)
@@ -2845,15 +2877,16 @@ INSERT INTO `util`.`notificationSubscription` (`notificationFk`, `userFk`)
(1, 9),
(1, 3),
(6, 9),
- (7, 9);
+ (7, 9),
+ (8, 66);
INSERT INTO `vn`.`routeConfig` (`id`, `defaultWorkCenterFk`)
VALUES
(1, 9);
-INSERT INTO `vn`.`productionConfig` (`isPreviousPreparationRequired`, `ticketPrintedMax`, `ticketTrolleyMax`, `rookieDays`, `notBuyingMonths`, `id`, `isZoneClosedByExpeditionActivated`, `maxNotReadyCollections`, `minTicketsToCloseZone`, `movingTicketDelRoute`, `defaultZone`, `defautlAgencyMode`, `hasUniqueCollectionTime`, `maxCollectionWithoutUser`, `pendingCollectionsOrder`, `pendingCollectionsAge`)
+INSERT INTO `vn`.`productionConfig` (`isPreviousPreparationRequired`, `ticketPrintedMax`, `ticketTrolleyMax`, `rookieDays`, `notBuyingMonths`, `id`, `isZoneClosedByExpeditionActivated`, `maxNotReadyCollections`, `minTicketsToCloseZone`, `movingTicketDelRoute`, `defaultZone`, `defautlAgencyMode`, `hasUniqueCollectionTime`, `maxCollectionWithoutUser`, `pendingCollectionsOrder`, `pendingCollectionsAge`, `backupPrinterNotificationDelay`)
VALUES
- (0, 8, 80, 0, 0, 1, 0, 15, 25, -1, 697, 1328, 0, 1, 8, 6);
+ (0, 8, 80, 0, 0, 1, 0, 15, 25, -1, 697, 1328, 0, 1, 8, 6, 3600);
INSERT INTO `vn`.`collection` (`id`, `created`, `workerFk`, `stateFk`, `itemPackingTypeFk`, `saleTotalCount`, `salePickedCount`, `trainFk`, `sectorFk`, `wagons`)
VALUES
@@ -2913,7 +2946,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
@@ -3222,8 +3256,7 @@ INSERT INTO vn.buy
stickers = 1,
packing = 20,
`grouping` = 1,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3261,8 +3294,7 @@ INSERT INTO vn.buy
stickers = 1,
packing = 40,
`grouping` = 5,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3300,8 +3332,7 @@ INSERT INTO vn.buy
stickers = 2,
packing = 10,
`grouping` = 5,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3347,8 +3378,7 @@ INSERT INTO vn.buy
stickers = 1,
packing = 20,
`grouping` = 4,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3386,8 +3416,7 @@ INSERT INTO vn.buy
stickers = 1,
packing = 20,
`grouping` = 1,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3426,8 +3455,7 @@ INSERT INTO vn.buy
stickers = 1,
packing = 200,
`grouping` = 30,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3466,8 +3494,7 @@ INSERT INTO vn.buy
stickers = 1,
packing = 500,
`grouping` = 10,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3506,8 +3533,7 @@ INSERT INTO vn.buy
stickers = 2,
packing = 300,
`grouping` = 50,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3546,8 +3572,7 @@ INSERT INTO vn.buy
stickers = 2,
packing = 50,
`grouping` = 5,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 1,
price2 = 1,
price3 = 1,
@@ -3587,8 +3612,7 @@ INSERT vn.buy
stickers = 1,
packing = 5,
`grouping` = 2,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 7,
price2 = 7,
price3 = 7,
@@ -3627,8 +3651,7 @@ INSERT vn.buy
stickers = 1,
packing = 100,
`grouping` = 5,
- groupingMode = 1,
- packageFk = 94,
+ groupingMode = 'packing',
price1 = 7,
price2 = 7,
price3 = 7,
@@ -3744,5 +3767,26 @@ INSERT INTO vn.ticketLog (originFk,userFk,`action`,creationDate,changedModel,new
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);
+
+
+INSERT INTO vn.workerTeam(id, team, workerFk)
VALUES
- (1, 10, 9);
\ No newline at end of file
+ (8, 1, 19);
+
+INSERT INTO vn.workCenter (id, name, payrollCenterFk, counter, warehouseFk, street, geoFk, deliveryManAdjustment)
+ VALUES(100, 'workCenterOne', 1, NULL, 1, 'gotham', NULL, NULL);
\ No newline at end of file
diff --git a/db/routines/account/procedures/user_checkName.sql b/db/routines/account/procedures/user_checkName.sql
index 4f954ad00..6fab17361 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_Evolution_Add.sql b/db/routines/bi/procedures/Greuge_Evolution_Add.sql
index 1d4bf4355..6480155cb 100644
--- a/db/routines/bi/procedures/Greuge_Evolution_Add.sql
+++ b/db/routines/bi/procedures/Greuge_Evolution_Add.sql
@@ -91,15 +91,15 @@ BEGIN
-- Recobro
UPDATE bi.Greuge_Evolution ge
JOIN (
- SELECT cs.Id_Cliente, sum(Valor * Cantidad) as Importe
- FROM vn2008.Tickets t
- JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna
- JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket
- JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
- WHERE t.Fecha >= datFEC
- AND t.Fecha < datFEC_TOMORROW
- AND mc.Id_Componente = 17 -- Recobro
- GROUP BY cs.Id_Cliente
+ SELECT a.clientFk Id_Cliente, sum(sc.value * s.quantity) as Importe
+ FROM vn.ticket t
+ JOIN vn.address a on a.id = t.addressFk
+ JOIN vn.sale s on s.ticketFk = t.id
+ JOIN vn.saleComponent sc on sc.saleFk = s.id
+ WHERE t.shipped >= datFEC
+ AND t.shipped < datFEC_TOMORROW
+ AND sc.componentFk = 17 -- Recobro
+ GROUP BY a.clientFk
) sub using(Id_Cliente)
SET Recobro = Importe
WHERE ge.Fecha = datFEC;
diff --git a/db/routines/bi/procedures/analisis_ventas_evolution_add.sql b/db/routines/bi/procedures/analisis_ventas_evolution_add.sql
index fca749681..7c2cc5678 100644
--- a/db/routines/bi/procedures/analisis_ventas_evolution_add.sql
+++ b/db/routines/bi/procedures/analisis_ventas_evolution_add.sql
@@ -24,7 +24,7 @@ BEGIN
WHERE Periodo < vMaxPeriod;
SELECT MIN(period) INTO vCurrentPeriod
- FROM vn2008.time
+ FROM vn.time
WHERE period > vPreviousPeriod;
SET vYear = FLOOR(vCurrentPeriod / 100);
@@ -66,7 +66,7 @@ BEGIN
WHERE periodo < vMaxPeriod;
SELECT MIN(period) INTO vCurrentPeriod
- FROM vn2008.time
+ FROM vn.time
WHERE period > vPreviousPeriod;
SET vYear = FLOOR(vCurrentPeriod / 100);
@@ -108,7 +108,7 @@ BEGIN
WHERE periodo < vMaxPeriod;
SELECT MIN(period) INTO vCurrentPeriod
- FROM vn2008.time
+ FROM vn.time
WHERE period > vPreviousPeriod;
SET vYear = FLOOR(vCurrentPeriod / 100);
@@ -156,7 +156,7 @@ BEGIN
WHERE periodo < vMaxPeriod;
SELECT MIN(period) INTO vCurrentPeriod
- FROM vn2008.time
+ FROM vn.time
WHERE period > vPreviousPeriod;
SET vYear = FLOOR(vCurrentPeriod / 100);
@@ -198,7 +198,7 @@ BEGIN
WHERE periodo < vMaxPeriod;
SELECT MIN(period) INTO vCurrentPeriod
- FROM vn2008.time
+ FROM vn.time
WHERE period > vPreviousPeriod;
SET vYear = FLOOR(vCurrentPeriod / 100);
diff --git a/db/routines/bi/procedures/analisis_ventas_update.sql b/db/routines/bi/procedures/analisis_ventas_update.sql
index 6d357275a..ef3e165a0 100644
--- a/db/routines/bi/procedures/analisis_ventas_update.sql
+++ b/db/routines/bi/procedures/analisis_ventas_update.sql
@@ -1,5 +1,5 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
BEGIN
DECLARE vLastMonth DATE;
@@ -10,44 +10,44 @@ BEGIN
OR (Año = YEAR(vLastMonth) AND Mes >= MONTH(vLastMonth));
INSERT INTO analisis_ventas (
- Familia,
- Reino,
- Comercial,
- Comprador,
- Provincia,
- almacen,
- Año,
- Mes,
- Semana,
- Vista,
- Importe
- )
+ Familia,
+ Reino,
+ Comercial,
+ Comprador,
+ Provincia,
+ almacen,
+ Año,
+ Mes,
+ Semana,
+ Vista,
+ Importe
+ )
SELECT
- tp.Tipo AS Familia,
- r.reino AS Reino,
- tr.CodigoTrabajador AS Comercial,
- tr2.CodigoTrabajador AS Comprador,
- p.name AS Provincia,
- w.name AS almacen,
- tm.year AS Año,
- tm.month AS Mes,
- tm.week AS Semana,
- dm.description AS Vista,
- bt.importe AS Importe
+ it.name,
+ ic.name,
+ w.code,
+ w2.code,
+ p.name,
+ wa.name,
+ tm.year,
+ tm.month,
+ tm.week,
+ dm.description,
+ bt.importe
FROM bs.ventas bt
- LEFT JOIN vn2008.Tipos tp ON tp.tipo_id = bt.tipo_id
- LEFT JOIN vn2008.reinos r ON r.id = tp.reino_id
- LEFT JOIN vn2008.Clientes c on c.Id_Cliente = bt.Id_Cliente
- LEFT JOIN vn2008.Trabajadores tr ON tr.Id_Trabajador = c.Id_Trabajador
- LEFT JOIN vn2008.Trabajadores tr2 ON tr2.Id_Trabajador = tp.Id_Trabajador
- JOIN vn2008.time tm ON tm.date = bt.fecha
- JOIN vn2008.Movimientos m ON m.Id_Movimiento = bt.Id_Movimiento
- LEFT JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia
- LEFT JOIN vn.deliveryMethod dm ON dm.id = a.Vista
- LEFT JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna
- LEFT JOIN vn2008.province p ON p.province_id = cs.province_id
- LEFT JOIN vn.warehouse w ON w.id = t.warehouse_id
- WHERE bt.fecha >= vLastMonth AND r.mercancia;
-END$$
-DELIMITER ;
+ LEFT JOIN vn.itemType it ON it.id = bt.tipo_id
+ LEFT JOIN vn.itemCategory ic ON ic.id = it.categoryFk
+ LEFT JOIN vn.client c on c.id = bt.Id_Cliente
+ LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
+ LEFT JOIN vn.worker w2 ON w2.id = it.workerFk
+ JOIN vn.time tm ON tm.dated = bt.fecha
+ JOIN vn.sale s ON s.id = bt.Id_Movimiento
+ LEFT JOIN vn.ticket t ON t.id = s.ticketFk
+ JOIN vn.agencyMode am ON am.id = t.agencyModeFk
+ LEFT JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk
+ LEFT JOIN vn.address a ON a.id = t.addressFk
+ LEFT JOIN vn.province p ON p.id = a.provinceFk
+ LEFT JOIN vn.warehouse wa ON wa.id = t.warehouseFk
+ WHERE bt.fecha >= vLastMonth AND ic.merchandise;
+END$$
+DELIMITER ;
diff --git a/db/routines/bi/procedures/claim_ratio_routine.sql b/db/routines/bi/procedures/claim_ratio_routine.sql
index 10cb717cf..ae87e15a2 100644
--- a/db/routines/bi/procedures/claim_ratio_routine.sql
+++ b/db/routines/bi/procedures/claim_ratio_routine.sql
@@ -13,64 +13,63 @@ BEGIN
INSERT INTO vn.greuge(shipped, clientFk, description,
amount, greugeTypeFk, ticketFk)
- SELECT cm.Fecha
- , cm.Id_Cliente
- , concat('Claim ',cm.id,' : ', m.Concepte)
- ,round( -1 * ((sensib -1)/4) * Cantidad *
- Preu * (100 - Descuento) / 100, 2) AS Reclamaciones
+ SELECT c.ticketCreated
+ , c.clientFk
+ , concat('Claim ', c.id,' : ', s.concept)
+ ,round( -1 * ((c.responsibility -1)/4) * s.quantity *
+ s.price * (100 - s.discount) / 100, 2)
, 4
- , m.Id_Ticket
- FROM vn2008.Movimientos m
- JOIN vn2008.cl_act ca USING(Id_Movimiento)
- JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id
- WHERE ca.cl_sol_id NOT IN (1,5)
- AND ca.greuge = 0
- AND cm.cl_est_id = 3;
+ , s.ticketFk
+ FROM vn.sale s
+ JOIN vn.claimEnd ce ON ce.saleFk = s.id
+ JOIN vn.claim c ON c.id = ce.claimFk
+ WHERE ce.claimDestinationFk NOT IN (1,5)
+ AND NOT ce.isGreuge
+ AND c.claimStateFk = 3;
-- Reclamaciones que pasan a Maná
INSERT INTO vn.greuge(shipped, clientFk, description,
amount, greugeTypeFk, ticketFk)
- SELECT cm.Fecha
- , cm.Id_Cliente
- , concat('Claim_mana ',cm.id,' : ', m.Concepte)
- ,round( ((sensib -1)/4) * Cantidad * Preu * (100 - Descuento) / 100, 2)
- AS Reclamaciones
+ SELECT c.ticketCreated
+ , c.clientFk
+ , concat('Claim_mana ',c.id,' : ', s.concept)
+ ,round( ((c.responsibility -1)/4) * s.quantity * s.price * (100 - s.discount) / 100, 2)
,3
- ,m.Id_Ticket
- FROM vn2008.Movimientos m
- JOIN vn2008.cl_act ca USING(Id_Movimiento)
- JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id
- WHERE ca.cl_sol_id NOT IN (1,5)
- AND ca.greuge = 0
- AND cm.cl_est_id = 3
- AND cm.mana;
+ ,s.ticketFk
+ FROM vn.sale s
+ JOIN vn.claimEnd ce ON ce.saleFk = s.id
+ JOIN vn.claim c ON c.id = ce.claimFk
+ WHERE ce.claimDestinationFk NOT IN (1,5)
+ AND NOT ce.isGreuge
+ AND c.claimStateFk = 3
+ AND c.isChargedToMana;
-- Marcamos para no repetir
- UPDATE vn2008.cl_act ca
- JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id
- SET greuge = 1
- WHERE ca.cl_sol_id NOT IN (1,5)
- AND ca.greuge = 0
- AND cm.cl_est_id = 3;
+ UPDATE vn.claimEnd ce
+ JOIN vn.claim c ON c.id = ce.claimFk
+ SET c.isChargedToMana = TRUE
+ WHERE ce.claimDestinationFk NOT IN (1,5)
+ AND NOT ce.isGreuge
+ AND c.claimStateFk = 3;
-- Recobros
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list
(PRIMARY KEY (Id_Ticket))
- SELECT DISTINCT t.Id_Ticket
- FROM vn2008.Movimientos_componentes mc
- JOIN vn2008.Movimientos m ON mc.Id_Movimiento = m.Id_Movimiento
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Tickets_state ts ON ts.Id_Ticket = t.Id_Ticket
- JOIN vn.ticketTracking tt ON tt.id = ts.inter_id
- JOIN vn2008.state s ON s.id = tt.stateFk
- WHERE mc.Id_Componente = 17
- AND mc.greuge = 0
- AND t.Fecha >= '2016-10-01'
- AND t.Fecha < util.VN_CURDATE()
- AND s.alert_level >= 3;
+ SELECT DISTINCT t.id Id_Ticket
+ FROM vn.saleComponent sc
+ JOIN vn.sale s ON sc.saleFk = s.id
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ JOIN vn.ticketLastState ts ON ts.ticketFk = t.id
+ JOIN vn.ticketTracking tt ON tt.id = ts.ticketTrackingFk
+ JOIN vn.state st ON st.id = tt.stateFk
+ WHERE sc.componentFk = 17
+ AND sc.isGreuge = 0
+ AND t.shipped >= '2016-10-01'
+ AND t.shipped < util.VN_CURDATE()
+ AND st.alertLevel >= 3;
DELETE g.*
FROM vn.greuge g
@@ -79,25 +78,25 @@ BEGIN
INSERT INTO vn.greuge(clientFk, description, amount,shipped,
greugeTypeFk, ticketFk)
- SELECT Id_Cliente
- ,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2)
- AS dif
- ,date(t.Fecha)
+ SELECT t.clientFk
+ ,concat('recobro ', s.ticketFk), - round(SUM(sc.value*s.quantity),2)
+ AS dif,
+ date(t.shipped)
, 2
,tt.Id_Ticket
- FROM vn2008.Movimientos m
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket
- JOIN vn2008.Movimientos_componentes mc
- ON mc.Id_Movimiento = m.Id_Movimiento AND mc.Id_Componente = 17
- GROUP BY t.Id_Ticket
+ FROM vn.sale s
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.id
+ JOIN vn.saleComponent sc
+ ON sc.saleFk = s.id AND sc.componentFk = 17
+ GROUP BY t.id
HAVING ABS(dif) > 1;
- UPDATE vn2008.Movimientos_componentes mc
- JOIN vn2008.Movimientos m ON m.Id_Movimiento = mc.Id_Movimiento
- JOIN tmp.ticket_list tt ON tt.Id_Ticket = m.Id_Ticket
- SET greuge = 1
- WHERE Id_Componente = 17;
+ UPDATE vn.saleComponent sc
+ JOIN vn.sale s ON s.id = sc.saleFk
+ JOIN tmp.ticket_list tt ON tt.Id_Ticket = s.ticketFk
+ SET sc.isGreuge = 1
+ WHERE sc.componentFk = 17;
/*
* Recalculamos la ratio de las reclamaciones, que luego
@@ -105,26 +104,25 @@ BEGIN
*/
REPLACE bi.claims_ratio(Id_Cliente, Consumo, Reclamaciones, Ratio, recobro)
- SELECT Id_Cliente, 0,0,0,0
- FROM vn2008.Clientes;
+ SELECT id, 0,0,0,0
+ FROM vn.client;
REPLACE bi.claims_ratio(Id_Cliente, Consumo, Reclamaciones, Ratio, recobro)
SELECT fm.Id_Cliente, 12 * fm.Consumo, Reclamaciones,
- round(Reclamaciones / (12*fm.Consumo),4) AS Ratio, 0
+ round(Reclamaciones / (12*fm.Consumo),4), 0
FROM bi.facturacion_media_anual fm
LEFT JOIN(
- SELECT cm.Id_Cliente, round(sum(-1 * ((sensib -1)/4) *
- Cantidad * Preu * (100 - Descuento) / 100))
+ SELECT c.clientFk, round(sum(-1 * ((c.responsibility -1)/4) *
+ s.quantity * s.price * (100 - s.discount) / 100))
AS Reclamaciones
- FROM vn2008.Movimientos m
- JOIN vn2008.cl_act ca
- ON ca.Id_Movimiento = m.Id_Movimiento
- JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id
- WHERE ca.cl_sol_id NOT IN (1,5)
- AND cm.cl_est_id = 3
- AND cm.Fecha >= TIMESTAMPADD(YEAR, -1, util.VN_CURDATE())
- GROUP BY cm.Id_Cliente
- ) claims ON claims.Id_Cliente = fm.Id_Cliente;
+ FROM vn.sale s
+ JOIN vn.claimEnd ce ON ce.saleFk = s.id
+ JOIN vn.claim c ON c.id = ce.claimFk
+ WHERE ce.claimDestinationFk NOT IN (1,5)
+ AND c.claimStateFk = 3
+ AND c.ticketCreated >= TIMESTAMPADD(YEAR, -1, util.VN_CURDATE())
+ GROUP BY c.clientFk
+ ) claims ON claims.clientFk = fm.Id_Cliente;
-- Calculamos el porcentaje del recobro para añadirlo al precio de venta
@@ -153,7 +151,7 @@ BEGIN
-- CLIENTE 5523, VERDECORA
UPDATE bi.claims_ratio SET recobro = GREATEST(0.12, recobro) WHERE Id_Cliente = 5523;
- -- CLIENTE 15979, SERVEIS VETERINARIS
+ -- CLIENTE 15979, SERVEIS VETERINARIS
UPDATE bi.claims_ratio SET recobro = GREATEST(0.05, recobro) WHERE Id_Cliente = 15979;
-- CLIENTE 5189 i 8942, son de CSR i son el mateix client
diff --git a/db/routines/bi/procedures/clean_launcher.sql b/db/routines/bi/procedures/clean_launcher.sql
deleted file mode 100644
index 9eea34584..000000000
--- a/db/routines/bi/procedures/clean_launcher.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`clean_launcher`()
-BEGIN
-/**
- * Borra registros de las principales tablas (excepto de "ticket").
- */
- CALL vn2008.clean(0);
-END$$
-DELIMITER ;
diff --git a/db/routines/bi/procedures/comparativa_add.sql b/db/routines/bi/procedures/comparativa_add.sql
deleted file mode 100644
index 4297c8aff..000000000
--- a/db/routines/bi/procedures/comparativa_add.sql
+++ /dev/null
@@ -1,32 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`comparativa_add`()
-BEGIN
- DECLARE lastCOMP INT; # Se trata de una variable para almacenar el ultimo valor del Periodo
- DECLARE vMaxPeriod INT;
- DECLARE vMaxWeek INT;
-
- SELECT t.period, t.`week` INTO vMaxPeriod, vMaxWeek
- FROM vn.`time` t
- WHERE t.dated = util.VN_CURDATE();
-
- SELECT MAX(Periodo) INTO lastCOMP FROM vn2008.Comparativa;
- -- Fijaremos las ventas con más de un mes de antiguedad en la tabla Comparativa
-
- IF lastCOMP < vMaxPeriod - 3 AND vMaxWeek > 3 THEN
-
- REPLACE vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
- SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe)
- FROM bs.ventas v
- JOIN vn2008.time tm ON tm.date = v.fecha
- JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
- JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
- JOIN vn2008.reinos r ON r.id = tp.reino_id
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- WHERE tm.period BETWEEN lastCOMP AND vMaxPeriod - 3
- AND t.Id_Cliente NOT IN(400,200)
- AND t.warehouse_id NOT IN (0,13)
- GROUP BY m.Id_Article, Periodo, t.warehouse_id;
-
- END IF;
-END$$
-DELIMITER ;
diff --git a/db/routines/bi/procedures/comparativa_add_manual.sql b/db/routines/bi/procedures/comparativa_add_manual.sql
deleted file mode 100644
index 281e15b23..000000000
--- a/db/routines/bi/procedures/comparativa_add_manual.sql
+++ /dev/null
@@ -1,40 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`comparativa_add_manual`(IN vStarted DATE, IN vEnded DATE)
-BEGIN
-/**
- * Recalcula la tabla Comparativa para dos valores dados
- *
- * @param vStarted fecha desde
- * @param vEnded fecha hasta
- */
-
- DECLARE periodStart INT;
- DECLARE periodEnd INT;
-
- -- Seleccionamos la fecha minima/maxima del periodo que vamos a consultar
-
- SELECT t.period INTO periodStart
- FROM vn.`time` t
- WHERE t.dated = vStarted;
-
- SELECT t.period INTO periodEnd
- FROM vn.`time` t
- WHERE t.dated = vEnded;
-
- DELETE FROM vn2008.Comparativa
- WHERE Periodo BETWEEN periodStart AND periodEnd;
-
- INSERT INTO vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
- SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe)
- FROM bs.ventas v
- JOIN vn2008.time tm ON tm.date = v.fecha
- JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
- JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
- JOIN vn2008.reinos r ON r.id = tp.reino_id
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- WHERE tm.period BETWEEN periodStart AND periodEnd
- AND t.Id_Cliente NOT IN(400,200)
- AND t.warehouse_id NOT IN (0,13)
- GROUP BY m.Id_Article, Periodo, t.warehouse_id;
-END$$
-DELIMITER ;
diff --git a/db/routines/bi/procedures/defaultersFromDate.sql b/db/routines/bi/procedures/defaultersFromDate.sql
index 267c90dab..bfe133750 100644
--- a/db/routines/bi/procedures/defaultersFromDate.sql
+++ b/db/routines/bi/procedures/defaultersFromDate.sql
@@ -2,7 +2,7 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`defaultersFromDate`(IN vDate DATE)
BEGIN
- SELECT t1.*, c.Cliente, w.code AS workerCode, c.pay_met_id,c.Vencimiento
+ SELECT t1.*, c.name Cliente, w.code workerCode, c.payMethodFk pay_met_id, c.dueDay Vencimiento
FROM (
-- Filtramos aquellos clientes cuyo saldo se ha incrementado de ayer a hoy
select * from(
@@ -18,7 +18,7 @@ BEGIN
having today.amount > 0 and difference <> 0
) newDefaulters
- )t1 left join vn2008.Clientes c ON t1.client = c.Id_Cliente
- left join vn.worker w ON w.id = c.Id_Trabajador;
+ )t1 left join vn.client c ON c.id = t1.client
+ left join vn.worker w ON w.id = c.salesPersonFk;
END$$
DELIMITER ;
diff --git a/db/routines/bi/procedures/defaulting.sql b/db/routines/bi/procedures/defaulting.sql
index e8ba5e682..d20232b8b 100644
--- a/db/routines/bi/procedures/defaulting.sql
+++ b/db/routines/bi/procedures/defaulting.sql
@@ -2,21 +2,22 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`defaulting`(IN `vDate` DATE)
BEGIN
DECLARE vDone BOOLEAN;
- DECLARE vClient INT;
- DECLARE vAmount INT;
- DECLARE vDued DATE;
- DECLARE vAmountInvoice DECIMAL(10,2);
- DECLARE vGraceDays INT;
+ DECLARE vClient INT;
+ DECLARE vAmount INT;
+ DECLARE vDued DATE;
+ DECLARE vAmountInvoice DECIMAL(10,2);
+ DECLARE vGraceDays INT;
DECLARE defaulters CURSOR FOR
- SELECT client, amount, graceDays FROM bi.defaulters d
- JOIN vn2008.Clientes c ON c.Id_Cliente = d.client
- JOIN vn2008.pay_met pm ON pm.id = c.pay_met_id
- WHERE hasChanged AND date = vDate;
-
+ SELECT d.client, d.amount, pm.graceDays
+ FROM bi.defaulters d
+ JOIN vn.client c ON c.id = d.client
+ JOIN vn.payMethod pm ON pm.id = c.payMethodFk
+ WHERE hasChanged AND date = vDate;
+
DECLARE invoices CURSOR FOR
SELECT dued Vencimiento, amount importe FROM vn.invoiceOut
WHERE issued >= '2016-01-01' AND clientFk = vClient ORDER BY issued DESC;
-
+
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DELETE FROM bi.defaulters WHERE date = vDate;
@@ -26,7 +27,7 @@ BEGIN
FROM vn.`client` c
LEFT JOIN bi.customerRiskOverdue cro ON c.id = cro.customer_id
GROUP BY c.id;
-
+
-- marcamos si ha cambiado y heredamos la fecha defaulterSince
UPDATE bi.defaulters d
LEFT JOIN (
@@ -35,16 +36,16 @@ BEGIN
WHERE date <= TIMESTAMPADD(DAY,-1, vDate)
ORDER BY date DESC
LIMIT 10000000000000000000) t GROUP BY client
- ) yesterday using(client)
+ ) yesterday using(client)
SET d.hasChanged = (IFNULL(d.amount,0) <> IFNULL(yesterday.amount,0)),
d.defaulterSince = yesterday.defaulterSince,
- d.frozened = yesterday.frozened
+ d.frozened = yesterday.frozened
WHERE d.date = vDate ;
-
- OPEN defaulters;
+
+ OPEN defaulters;
defaulters: LOOP
SET vDone = FALSE;
- SET vAmount = 0;
+ SET vAmount = 0;
FETCH defaulters INTO vClient,vAmount, vGraceDays;
IF vDone THEN
LEAVE defaulters;
@@ -60,7 +61,7 @@ BEGIN
IF TIMESTAMPADD(DAY, vGraceDays, vDued) <= vDate THEN
SET vAmount = vAmount - vAmountInvoice;
IF vAmount <= 0 THEN
-
+
UPDATE defaulters SET defaulterSince = vDued
WHERE client = vClient and date = vDate;
@@ -73,20 +74,20 @@ BEGIN
END LOOP;
CLOSE defaulters;
- DELETE FROM defaulters
+ DELETE FROM defaulters
WHERE amount = 0
AND hasChanged = FALSE
- AND `date` = vDate;
-
- UPDATE defaulters d
+ AND `date` = vDate;
+
+ UPDATE defaulters d
JOIN vn.config ON TRUE
SET d.frozened = NULL
WHERE `date` = vDate
AND d.amount <= config.defaultersMaxAmount;
-
- CALL vn.clientFreeze();
-
- -- actualizamos defaulting
+
+ CALL vn.clientFreeze();
+
+ -- actualizamos defaulting
DELETE FROM bi.defaulting WHERE date = vDate;
INSERT INTO bi.defaulting(date, amount)
diff --git a/db/routines/bi/procedures/greuge_dif_porte_add.sql b/db/routines/bi/procedures/greuge_dif_porte_add.sql
index 02bd9eae4..330ff92b8 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/bi/views/last_Id_Cubo.sql b/db/routines/bi/views/last_Id_Cubo.sql
deleted file mode 100644
index 758b524fd..000000000
--- a/db/routines/bi/views/last_Id_Cubo.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bi`.`last_Id_Cubo`
-AS SELECT `C`.`Id_Compra` AS `Id_Compra`,
- `C`.`Id_Article` AS `Id_Article`,
- `tr`.`warehouse_id` AS `warehouse_id`,
- `C`.`Id_Cubo` AS `Id_Cubo`,
- `C`.`Packing` AS `Packing`
-FROM (
- (
- `vn2008`.`Compres` `C`
- JOIN `vn2008`.`Entradas` `E` ON(`C`.`Id_Entrada` = `E`.`Id_Entrada`)
- )
- JOIN `vn2008`.`travel` `tr` ON(`E`.`travel_id` = `tr`.`id`)
- )
-WHERE `C`.`Id_Cubo` IS NOT NULL
- AND `C`.`Id_Cubo` <> '--'
- AND `tr`.`landing` > `util`.`VN_CURDATE`() - INTERVAL 18 MONTH
-ORDER BY `C`.`Id_Compra` DESC
diff --git a/db/routines/bi/views/v_ventas_contables.sql b/db/routines/bi/views/v_ventas_contables.sql
deleted file mode 100644
index 373fcdd3f..000000000
--- a/db/routines/bi/views/v_ventas_contables.sql
+++ /dev/null
@@ -1,23 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bi`.`v_ventas_contables`
-AS SELECT `time`.`year` AS `year`,
- `time`.`month` AS `month`,
- cast(
- sum(
- `m`.`Cantidad` * `m`.`Preu` * (100 - `m`.`Descuento`) / 100
- ) AS decimal(10, 0)
- ) AS `importe`
-FROM (
- (
- (
- `vn2008`.`Tickets` `t`
- JOIN `bi`.`f_tvc` ON(`t`.`Id_Ticket` = `bi`.`f_tvc`.`Id_Ticket`)
- )
- JOIN `vn2008`.`Movimientos` `m` ON(`t`.`Id_Ticket` = `m`.`Id_Ticket`)
- )
- JOIN `vn2008`.`time` ON(`time`.`date` = cast(`t`.`Fecha` AS date))
- )
-WHERE `t`.`Fecha` >= '2014-01-01'
-GROUP BY `time`.`year`,
- `time`.`month`
diff --git a/db/routines/bs/procedures/bancos_evolution_add.sql b/db/routines/bs/procedures/bancos_evolution_add.sql
deleted file mode 100644
index f0a3b3709..000000000
--- a/db/routines/bs/procedures/bancos_evolution_add.sql
+++ /dev/null
@@ -1,112 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`bancos_evolution_add`(vStartingDate DATE)
-BEGIN
-/**
- * Inserta en la tabla bancos_evolution los saldos acumulados de cada banco
- *
- * @param vStartingDate Fecha desde la cual se recalculan la tabla bs.bancos_evolution
- */
- DECLARE vCurrentDate DATE;
- DECLARE vMaxDate DATE DEFAULT TIMESTAMPADD(MONTH, 7, util.VN_CURDATE());
- IF IFNULL(vStartingDate,0) < TIMESTAMPADD(YEAR, -5, util.VN_CURDATE()) THEN
- CALL util.throw('invalid date');
- END IF;
- DELETE FROM bs.bancos_evolution WHERE Fecha >= vStartingDate;
-
- SET vCurrentDate = vStartingDate;
-
- INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo)
- SELECT vCurrentDate, Id_Banco, deuda
- FROM bs.bancos_evolution
- WHERE Fecha = TIMESTAMPADD(DAY,-1,vCurrentDate);
-
- WHILE vCurrentDate < vMaxDate DO
--- insertar solo el dia de ayer
- INSERT INTO bs.bancos_evolution(Fecha ,Id_Banco, saldo)
- SELECT vCurrentDate, Id_Banco, SUM(saldo)
- FROM (
- SELECT Id_Banco ,saldo
- FROM bs.bancos_evolution
- WHERE Fecha = TIMESTAMPADD(DAY,-1,vCurrentDate) -- los saldos acumulados del dia anterior
- UNION ALL
-
- SELECT c.Id_Banco, IFNULL(SUM(Entrada),0) - IFNULL(SUM(Salida),0) as saldo
- FROM vn2008.Cajas c
- JOIN vn2008.Bancos b using(Id_Banco) -- saldos de las cajas
- JOIN vn.accountingType at2 ON at2.id = b.cash
- WHERE at2.code IN ('wireTransfer','fundingLine')
- AND Cajafecha = vCurrentDate
- AND (Serie = 'MB' OR at2.code = 'fundingLine')
- GROUP BY Id_Banco
- )sub
- GROUP BY Id_Banco
- ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo);
-
- SET vCurrentDate = TIMESTAMPADD(DAY,1,vCurrentDate);
-
- END WHILE;
-
- -- Ahora actualizamos la quilla
- UPDATE bs.bancos_evolution be
- JOIN
- (
- SELECT bp.Id_Banco, - sum(bp.importe) as quilla, t.dated
- FROM vn.time t
- JOIN vn2008.Bancos_poliza bp ON t.dated between apertura AND IFNULL(cierre, t.dated)
- WHERE t.dated BETWEEN vStartingDate AND vMaxDate
- GROUP BY Id_Banco, t.dated
- ) sub ON be.Id_Banco = sub.Id_Banco AND sub.dated = be.Fecha
- SET be.quilla = sub.quilla;
-
- -- pagos futuros no concilidados
- INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo)
- SELECT t.dated, p.id_banco, - importe
- FROM vn.time t
- join vn2008.pago p ON p.fecha <= t.dated
- WHERE t.dated BETWEEN util.VN_CURDATE() AND vMaxDate
- AND p.fecha BETWEEN util.VN_CURDATE() AND vMaxDate
- AND NOT conciliado
- ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo);
-
- -- cobros futuros
- INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo)
- SELECT t.dated, r.Id_Banco, SUM(Entregado)
- FROM vn.time t
- JOIN vn2008.Recibos r ON r.Fechacobro <= t.dated
- WHERE r.Fechacobro > util.VN_CURDATE() AND r.Fechacobro <= vMaxDate
- AND t.dated BETWEEN util.VN_CURDATE() AND vMaxDate
- GROUP BY t.dated, r.Id_Banco
- ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo);
-
- -- saldos de la tabla prevision
- INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo)
- SELECT t.dated, sp.Id_Banco, SUM(Importe)
- FROM vn.time t
- JOIN vn2008.Saldos_Prevision sp ON sp.Fecha <= t.dated
- JOIN vn2008.Bancos b ON sp.Id_Banco = b.Id_Banco
- JOIN vn.accountingType at2 ON at2.id = b.cash
- WHERE at2.code IN ('wireTransfer','fundingLine')
- AND t.dated BETWEEN vStartingDate AND vMaxDate
- GROUP BY t.dated, sp.Id_Banco
- ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo);
-
- -- Utilizamos el saldo_auxiliar para calcular lo dispuesto en las polizas
- UPDATE bs.bancos_evolution be
- SET saldo_aux = saldo
- WHERE Fecha >= vStartingDate;
-
- -- Deuda
- UPDATE bs.bancos_evolution be
- JOIN vn2008.Bancos b using(Id_Banco)
- JOIN vn.accountingType at2 ON at2.id = b.cash
- SET be.deuda = IF(at2.code = 'fundingLine', be.saldo_aux, 0)
- , be.saldo = IF(at2.code = 'fundingLine', 0, be.saldo_aux)
- WHERE Fecha >= vStartingDate;
-
- -- Liquidez
- update bs.bancos_evolution set liquidez = saldo - quilla + deuda WHERE Fecha >= vStartingDate;
- -- Disponibilidad
- update bs.bancos_evolution set `disponibilidad ajena` = - quilla + deuda WHERE Fecha >= vStartingDate;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/bs/procedures/comercialesCompleto.sql b/db/routines/bs/procedures/comercialesCompleto.sql
deleted file mode 100644
index 101173740..000000000
--- a/db/routines/bs/procedures/comercialesCompleto.sql
+++ /dev/null
@@ -1,111 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`comercialesCompleto`(IN vWorker INT, vDate DATE)
-BEGIN
- DECLARE vAYearAgoStarted DATE DEFAULT DATE_FORMAT(TIMESTAMPADD(YEAR, - 1, vDate), '%Y-%m-01');
- DECLARE vAYearAgoEnded DATE DEFAULT TIMESTAMPADD(YEAR, - 1, LAST_DAY(vDate));
-
- CALL vn.worker_GetHierarchy(vWorker);
-
- INSERT IGNORE INTO tmp.workerHierarchyList (workerFk)
- SELECT wd2.workerFk
- FROM vn.workerDepartment wd2
- WHERE wd2.workerFk = vWorker;
-
- -- Falta que en algunos casos solo tenga en cuenta los tipos afectados.
- SELECT
- c.Id_Cliente id_cliente,
- c.Cliente cliente,
- cr.recobro * 100 tarifa,
- c.Telefono telefono,
- c.movil,
- c.POBLACION poblacion,
- p.`name` provincia,
- ROUND(f.futur, 2) futur,
- c.Credito credito,
- pm.`name` forma_pago,
- ROUND(c365 / 12, 2) consumo_medio365,
- ROUND(c365, 2) consumo365,
- ROUND(CmLy.peso, 2) peso_mes_año_pasado,
- ROUND(CmLy.peso * 1.19, 2) objetivo,
- tr.CodigoTrabajador,
- ROUND(mes_actual.consumo, 2) consumoMes,
- ROUND(IFNULL(mes_actual.consumo, 0) - IFNULL(CmLy.peso * 1.19, 0), 2) como_lo_llevo,
- DATE(LastTicket) ultimo_ticket,
- dead.muerto,
- g.Greuge,
- cr.recobro
- FROM
- vn2008.Clientes c
- LEFT JOIN
- (SELECT g.clientFk Id_Cliente, CAST( SUM(g.amount) as DECIMAL(12,2)) AS Greuge
- FROM vn.greuge g
- JOIN vn.`client` c ON c.id = g.clientFk
- LEFT JOIN vn.worker w ON c.salesPersonFk = w.id
- WHERE (c.salesPersonFk = vWorker OR w.bossFk = vWorker)
- GROUP BY Id_Cliente
- ) g ON g.Id_Cliente = c.Id_Cliente
- LEFT JOIN
- vn2008.province p ON p.province_id = c.province_id
- JOIN
- vn2008.pay_met pm ON pm.id = c.pay_met_id
- LEFT JOIN
- vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
- LEFT JOIN
- bi.claims_ratio cr on cr.Id_Cliente = c.Id_Cliente
- LEFT JOIN
- (SELECT v.Id_Cliente, SUM(importe) c365 -- optimizat de 6s /5.3s/ 4.7s a 0.3/0.4/0.3
- FROM bs.ventas v
- JOIN vn2008.Clientes c ON c.Id_Cliente = v.Id_Cliente
- WHERE v.fecha BETWEEN TIMESTAMPADD(YEAR, - 1, vDate) AND vDate
- GROUP BY v.Id_Cliente) c365 ON c365.Id_Cliente = c.Id_Cliente
- LEFT JOIN
- (SELECT
- Id_Cliente, SUM(importe) consumo
- FROM
- bs.ventas v
- INNER JOIN vn2008.Clientes c USING (Id_Cliente)
- LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
- WHERE
- (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- AND (v.fecha BETWEEN TIMESTAMPADD(DAY, - DAY(vDate) + 1, vDate) AND TIMESTAMPADD(DAY, - 1, vDate))
- GROUP BY Id_Cliente) mes_actual ON mes_actual.Id_Cliente = c.Id_Cliente
- LEFT JOIN
- (SELECT t.Id_Cliente, SUM(m.preu * m.Cantidad * (1 - m.Descuento / 100)) futur
- FROM vn2008.Tickets t
- JOIN vn2008.Clientes c ON c.Id_Cliente = t.Id_Cliente
- JOIN vn2008.Movimientos m ON m.Id_Ticket = t.Id_Ticket
- LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
- WHERE
- (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- AND t.Fecha BETWEEN vDate AND util.dayEnd(LAST_DAY(vDate))
- GROUP BY Id_Cliente) f ON c.Id_Cliente = f.Id_Cliente
- LEFT JOIN
- (SELECT MAX(t.Fecha) LastTicket, c.Id_Cliente
- FROM vn2008.Tickets t
- JOIN vn2008.Clientes c ON c.Id_cliente = t.Id_Cliente
- LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
- WHERE
- (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- GROUP BY t.Id_Cliente) LastTicket ON LastTicket.Id_Cliente = c.Id_Cliente
- LEFT JOIN
- (
- SELECT SUM(importe) peso, c.Id_Cliente
- FROM bs.ventas v
- JOIN vn2008.Clientes c ON c.Id_Cliente = v.Id_Cliente
- LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
- WHERE fecha BETWEEN vAYearAgoStarted and vAYearAgoEnded
- AND (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- GROUP BY c.Id_Cliente) CmLy ON CmLy.Id_Cliente = c.Id_Cliente
- LEFT JOIN
- (SELECT c.Id_Cliente,
- IF(MAX(io.issued) < DATE_FORMAT(TIMESTAMPADD(MONTH, - 1, vDate), '%Y- %m-01'), TRUE, FALSE) muerto
- FROM vn.invoiceOut io
- JOIN vn2008.Clientes c ON c.Id_cliente = io.clientFk
- LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
- WHERE (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- GROUP BY Id_Cliente) dead ON dead.Id_Cliente = c.Id_Cliente
- JOIN tmp.workerHierarchyList s ON s.workerFk = c.Id_Trabajador;
-
- DROP TEMPORARY TABLE tmp.workerHierarchyList;
-END$$
-DELIMITER ;
diff --git a/db/routines/bs/procedures/indicatorsUpdate.sql b/db/routines/bs/procedures/indicatorsUpdate.sql
index b2a3ee8b3..d66e52a61 100644
--- a/db/routines/bs/procedures/indicatorsUpdate.sql
+++ b/db/routines/bs/procedures/indicatorsUpdate.sql
@@ -15,10 +15,10 @@ BEGIN
SET lastYearSales =
(SELECT SUM(importe + recargo)
FROM ventas v
- JOIN vn2008.empresa e ON e.id = v.empresa_id
- JOIN vn2008.empresa_grupo eg ON eg.empresa_grupo_id = e.empresa_grupo
+ JOIN vn.company c ON c.id = v.empresa_id
+ JOIN vn.companyGroup cg ON cg.id = c.companyGroupFk
WHERE fecha BETWEEN oneYearBefore AND vDated
- AND eg.grupo = 'Verdnatura'
+ AND cg.code = 'Verdnatura'
)
WHERE updated = vDated;
diff --git a/db/routines/bs/procedures/manaCustomerUpdate.sql b/db/routines/bs/procedures/manaCustomerUpdate.sql
index 2038f976a..e9ba70423 100644
--- a/db/routines/bs/procedures/manaCustomerUpdate.sql
+++ b/db/routines/bs/procedures/manaCustomerUpdate.sql
@@ -5,97 +5,90 @@ BEGIN
DECLARE vFromDated DATE;
DECLARE vForDeleteDated DATE;
DECLARE vManaId INT;
- DECLARE vManaAutoId INT;
- DECLARE vClaimManaId INT;
- DECLARE vManaBankId INT;
- DECLARE vManaGreugeTypeId INT;
- DECLARE vManaFromDays INT;
- DECLARE vManaToDays INT;
+ DECLARE vManaAutoId INT;
+ DECLARE vClaimManaId INT;
+ DECLARE vManaBankId INT;
+ DECLARE vManaGreugeTypeId INT;
+ DECLARE vManaFromDays INT;
+ DECLARE vManaToDays INT;
- SELECT id INTO vManaId
- FROM vn.component WHERE code = 'mana';
+ SELECT id INTO vManaId
+ FROM vn.component WHERE code = 'mana';
- SELECT id INTO vManaAutoId
+ SELECT id INTO vManaAutoId
FROM vn.component WHERE code = 'autoMana';
SELECT id INTO vClaimManaId
FROM vn.component WHERE code = 'manaClaim';
- SELECT id INTO vManaBankId
+ SELECT id INTO vManaBankId
FROM vn.accounting WHERE code = 'mana';
- SELECT id INTO vManaGreugeTypeId
+ SELECT id INTO vManaGreugeTypeId
FROM vn.greugeType WHERE code = 'mana';
- SELECT manaFromDays, manaToDays
- INTO vManaFromDays, vManaToDays
- FROM vn.salespersonConfig;
+ SELECT manaFromDays, manaToDays
+ INTO vManaFromDays, vManaToDays
+ FROM vn.salespersonConfig;
- SELECT MAX(dated)
- INTO vFromDated
- FROM vn.clientManaCache;
+ SELECT MAX(dated) INTO vFromDated
+ FROM vn.clientManaCache;
- DELETE
- FROM vn.clientManaCache
- WHERE dated = vFromDated;
-
- SELECT MAX(dated)
- INTO vFromDated
- FROM vn.clientManaCache;
-
- IF ISNULL(vFromDated) THEN
- SELECT manaDateFrom
- INTO vFromDated
- FROM vn.salespersonConfig;
- END IF;
+ DELETE FROM vn.clientManaCache
+ WHERE dated = vFromDated;
+
+ SELECT MAX(dated) INTO vFromDated
+ FROM vn.clientManaCache;
+
+ IF vFromDated IS NULL THEN
+ SELECT manaDateFrom
+ INTO vFromDated
+ FROM vn.salespersonConfig;
+ END IF;
- WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO
- SELECT
- vFromDated + INTERVAL vManaToDays DAY,
- vFromDated - INTERVAL vManaFromDays DAY
- INTO
- vToDated,
- vForDeleteDated;
-
- DELETE FROM vn.clientManaCache
- WHERE dated <= vForDeleteDated;
+ WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO
+ SELECT vFromDated + INTERVAL vManaToDays DAY,
+ vFromDated - INTERVAL vManaFromDays DAY
+ INTO vToDated,
+ vForDeleteDated;
+
+ DELETE FROM vn.clientManaCache
+ WHERE dated <= vForDeleteDated;
- INSERT INTO vn.clientManaCache(clientFk, mana, dated)
- SELECT
- Id_Cliente,
- SUM(mana),
- vToDated
- FROM
- (
- SELECT cs.Id_Cliente, Cantidad * Valor as mana
- FROM vn2008.Tickets t
- JOIN vn2008.Consignatarios cs using(Id_Consigna)
- JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket
- JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
- WHERE Id_Componente IN (vManaAutoId, vManaId, vClaimManaId)
- AND t.Fecha > vFromDated
- AND date(t.Fecha) <= vToDated
- UNION ALL
- SELECT r.Id_Cliente, - Entregado
- FROM vn2008.Recibos r
- WHERE Id_Banco = vManaBankId
- AND Fechacobro > vFromDated
- AND Fechacobro <= vToDated
- UNION ALL
- SELECT clientFk, amount
- FROM vn.greuge
- WHERE greugeTypeFk = vManaGreugeTypeId
- AND shipped > vFromDated
- AND shipped <= vToDated
- UNION ALL
- SELECT clientFk, mana
- FROM vn.clientManaCache
- WHERE dated = vFromDated
- ) sub
- GROUP BY Id_Cliente
- HAVING Id_Cliente;
+ INSERT INTO vn.clientManaCache(clientFk, mana, dated)
+ SELECT Id_Cliente,
+ SUM(mana),
+ vToDated
+ FROM (
+ SELECT a.clientFk Id_Cliente, s.quantity * sc.value mana
+ FROM vn.ticket t
+ JOIN vn.address a ON a.id = t.addressFk
+ JOIN vn.sale s ON s.ticketFk = t.id
+ JOIN vn.saleComponent sc ON sc.saleFk = s.id
+ WHERE sc.componentFk IN (vManaAutoId, vManaId, vClaimManaId)
+ AND t.shipped > vFromDated
+ AND DATE(t.shipped) <= vToDated
+ UNION ALL
+ SELECT clientFk, - amountPaid
+ FROM vn.receipt
+ WHERE bankFk = vManaBankId
+ AND payed > vFromDated
+ AND payed <= vToDated
+ UNION ALL
+ SELECT clientFk, amount
+ FROM vn.greuge
+ WHERE greugeTypeFk = vManaGreugeTypeId
+ AND shipped > vFromDated
+ AND shipped <= vToDated
+ UNION ALL
+ SELECT clientFk, mana
+ FROM vn.clientManaCache
+ WHERE dated = vFromDated
+ ) sub
+ GROUP BY Id_Cliente
+ HAVING Id_Cliente;
- SET vFromDated = vToDated;
- END WHILE;
+ SET vFromDated = vToDated;
+ END WHILE;
END$$
DELIMITER ;
diff --git a/db/routines/bs/procedures/sale_add.sql b/db/routines/bs/procedures/sale_add.sql
new file mode 100644
index 000000000..64beb4776
--- /dev/null
+++ b/db/routines/bs/procedures/sale_add.sql
@@ -0,0 +1,72 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sale_add`(
+ IN vStarted DATE,
+ IN vEnded DATE)
+BEGIN
+/**
+ * Añade las ventas que se realizaron entre 2 fechas a la tabla bs.sale
+ *
+ * @param vStarted Fecha de inicio
+ * @param vEnded Fecha de fin
+ *
+ */
+ DECLARE vLoopDate DATE;
+ DECLARE vLoopDateTime DATETIME;
+
+ IF vStarted < (util.VN_CURDATE() - INTERVAL 5 YEAR) OR vStarted > vEnded THEN
+ CALL util.throw('Wrong date');
+ END IF;
+
+ SET vLoopDate = vStarted;
+
+ DELETE FROM sale
+ WHERE dated BETWEEN vStarted AND vEnded;
+
+ WHILE vLoopDate <= vEnded DO
+ SET vLoopDateTime = util.dayEnd(vLoopDate);
+
+ REPLACE sale(
+ saleFk,
+ amount,
+ surcharge,
+ dated,
+ typeFk,
+ clientFk,
+ companyFk,
+ margin
+ )WITH calculatedSales AS(
+ SELECT s.id saleFk,
+ SUM(IF(ct.isBase, s.quantity * sc.value, 0)) amount,
+ SUM(IF(ct.isBase, 0, s.quantity * sc.value)) surcharge,
+ s.total pvp,
+ DATE(t.shipped) dated,
+ i.typeFk,
+ t.clientFk,
+ t.companyFk,
+ SUM(IF(ct.isMargin, s.quantity * sc.value, 0 )) marginComponents
+ FROM vn.ticket t
+ STRAIGHT_JOIN vn.sale s ON s.ticketFk = t.id
+ JOIN vn.item i ON i.id = s.itemFk
+ JOIN vn.itemType it ON it.id = i.typeFk
+ JOIN vn.itemCategory ic ON ic.id = it.categoryFk
+ JOIN vn.saleComponent sc ON sc.saleFk = s.id
+ JOIN vn.component c ON c.id = sc.componentFk
+ JOIN vn.componentType ct ON ct.id = c.typeFk
+ WHERE t.shipped BETWEEN vLoopDate AND vLoopDateTime
+ AND s.quantity <> 0
+ AND ic.merchandise
+ GROUP BY s.id
+ )SELECT saleFk,
+ amount,
+ surcharge,
+ dated,
+ typeFk,
+ clientFk,
+ companyFk,
+ marginComponents + amount + surcharge - pvp
+ FROM calculatedSales;
+
+ SET vLoopDate = vLoopDate + INTERVAL 1 DAY;
+ END WHILE;
+END$$
+DELIMITER ;
diff --git a/db/routines/bs/procedures/ventas_add_launcher.sql b/db/routines/bs/procedures/sales_addLauncher.sql
similarity index 56%
rename from db/routines/bs/procedures/ventas_add_launcher.sql
rename to db/routines/bs/procedures/sales_addLauncher.sql
index 0d9e89a89..38cb5e219 100644
--- a/db/routines/bs/procedures/ventas_add_launcher.sql
+++ b/db/routines/bs/procedures/sales_addLauncher.sql
@@ -1,13 +1,12 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_add_launcher`()
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sales_addLauncher`()
BEGIN
/**
* Añade las ventas a la tabla bs.sale que se realizaron desde hace un mes hasta hoy
*
*/
-
DECLARE vCurDate DATE DEFAULT util.VN_CURDATE();
- CALL ventas_add(vCurDate - INTERVAL 1 MONTH, vCurDate);
-
+
+ CALL sale_add(vCurDate - INTERVAL 1 MONTH, vCurDate);
END$$
DELIMITER ;
diff --git a/db/routines/bs/procedures/ventas_add.sql b/db/routines/bs/procedures/ventas_add.sql
deleted file mode 100644
index fcb00e092..000000000
--- a/db/routines/bs/procedures/ventas_add.sql
+++ /dev/null
@@ -1,78 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_add`(
- IN vStarted DATETIME,
- IN vEnded DATETIME)
-BEGIN
-/**
-* Añade las ventas que se realizaron entre
-* vStarted y vEnded
-*
-* @param vStarted Fecha de inicio
-* @param vEnded Fecha de finalizacion
-*
-**/
- DECLARE vStartingDate DATETIME;
- DECLARE vEndingDate DATETIME;
-
- IF vStarted < TIMESTAMPADD(YEAR,-5,util.VN_CURDATE())
- OR vEnded < TIMESTAMPADD(YEAR,-5,util.VN_CURDATE()) THEN
- CALL util.throw('fechaDemasiadoAntigua');
- END IF;
-
- SET vEnded = util.dayEnd(vEnded);
- SET vStartingDate = vStarted ;
- SET vEndingDate = util.dayEnd(vStartingDate);
-
- DELETE
- FROM sale
- WHERE dated BETWEEN vStartingDate AND vEnded;
-
- WHILE vEndingDate <= vEnded DO
-
- REPLACE ventas(Id_Movimiento, importe, recargo, fecha, tipo_id, Id_Cliente, empresa_id)
- SELECT saleFk,
- SUM(IF(ct.isBase, s.quantity * sc.value, 0)) importe,
- SUM(IF(ct.isBase, 0, s.quantity * sc.value)) recargo,
- vStartingDate,
- i.typeFk,
- a.clientFk,
- t.companyFk
- FROM vn.saleComponent sc
- JOIN vn.component c ON c.id = sc.componentFk
- JOIN vn.componentType ct ON ct.id = c.typeFk
- JOIN vn.sale s ON s.id = sc.saleFk
- JOIN vn.item i ON i.id = s.itemFk
- JOIN vn.itemType it ON it.id = i.typeFk
- JOIN vn.itemCategory ic ON ic.id = it.categoryFk
- JOIN vn.ticket t ON t.id = s.ticketFk
- JOIN vn.address a ON a.id = t.addressFk
- JOIN vn.client cl ON cl.id = a.clientFk
- WHERE t.shipped BETWEEN vStartingDate AND vEndingDate
- AND s.quantity <> 0
- AND s.discount <> 100
- AND ic.merchandise
- GROUP BY sc.saleFk
- HAVING IFNULL(importe,0) <> 0 OR IFNULL(recargo,0) <> 0;
-
- UPDATE sale s
- JOIN (
- SELECT s.id,
- SUM(s.quantity * sc.value ) margen,
- s.quantity * s.price * (100 - s.discount ) / 100 pvp
- FROM vn.sale s
- JOIN vn.ticket t ON t.id = s.ticketFk
- JOIN vn.saleComponent sc ON sc.saleFk = s.id
- JOIN vn.component c ON c.id = sc.componentFk
- JOIN vn.componentType ct ON ct.id = c.typeFk
- WHERE t.shipped BETWEEN vStartingDate AND vEndingDate
- AND ct.isMargin = TRUE
- GROUP BY s.id) sub ON sub.id = s.saleFk
- SET s.margin = sub.margen + s.amount + s.surcharge - sub.pvp;
-
- SET vStartingDate = TIMESTAMPADD(DAY,1, vStartingDate);
- SET vEndingDate = util.dayEnd(vStartingDate);
-
- END WHILE;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/bs/procedures/ventas_contables_add.sql b/db/routines/bs/procedures/ventas_contables_add.sql
index 66c012a19..72b0c0fee 100644
--- a/db/routines/bs/procedures/ventas_contables_add.sql
+++ b/db/routines/bs/procedures/ventas_contables_add.sql
@@ -19,11 +19,11 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list
- (PRIMARY KEY (Id_Ticket))
+ (PRIMARY KEY (id))
ENGINE = MEMORY
- SELECT Id_Ticket
- FROM vn2008.Tickets t
- JOIN vn.invoiceOut io ON io.`ref` = t.Factura
+ SELECT t.id
+ FROM vn.ticket t
+ JOIN vn.invoiceOut io ON io.`ref` = t.refFk
WHERE year(io.issued) = vYear
AND month(io.issued) = vMonth;
@@ -38,35 +38,35 @@ BEGIN
SELECT vYear
, vMonth
- , round(sum(Cantidad * Preu * (100 - m.Descuento)/100))
+ , round(sum(s.quantity * s.price * (100 - s.discount)/100))
, IF(
- e.empresa_grupo = e2.empresa_grupo
+ co.companyGroupFk = co2.companyGroupFk
,1
- ,IF(e2.empresa_grupo,2,0)
+ ,IF(co2.companyGroupFk,2,0)
) as grupo
- , tp.reino_id
- , a.tipo_id
- , t.empresa_id
- , a.expenseFk
- + IF(e.empresa_grupo = e2.empresa_grupo
+ , it.categoryFk
+ , i.typeFk
+ , t.companyFk
+ , i.expenseFk
+ + IF(co.companyGroupFk = co2.companyGroupFk
,1
- ,IF(e2.empresa_grupo,2,0)
+ ,IF(co2.companyGroupFk,2,0)
) * 100000
- + tp.reino_id * 1000 as Gasto
- FROM vn2008.Movimientos m
- JOIN vn2008.Tickets t on t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna
- JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente
- JOIN tmp.ticket_list tt on tt.Id_Ticket = t.Id_Ticket
- JOIN vn2008.Articles a on m.Id_Article = a.Id_Article
- JOIN vn2008.empresa e on e.id = t.empresa_id
- LEFT JOIN vn2008.empresa e2 on e2.Id_Cliente = c.Id_Cliente
- JOIN vn2008.Tipos tp on tp.tipo_id = a.tipo_id
- WHERE Cantidad <> 0
- AND Preu <> 0
- AND m.Descuento <> 100
- AND a.tipo_id != TIPO_PATRIMONIAL
- GROUP BY grupo, reino_id, tipo_id, empresa_id, Gasto;
+ + it.categoryFk * 1000 as Gasto
+ FROM vn.sale s
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ JOIN vn.address a on a.id = t.addressFk
+ JOIN vn.client c on c.id = a.clientFk
+ JOIN tmp.ticket_list tt on tt.id = t.id
+ JOIN vn.item i on s.itemFk = i.id
+ JOIN vn.company co on co.id = t.companyFk
+ LEFT JOIN vn.company co2 on co2.clientFk = c.id
+ JOIN vn.itemType it on it.id = i.typeFk
+ WHERE s.quantity <> 0
+ AND s.price <> 0
+ AND s.discount <> 100
+ AND i.typeFk <> TIPO_PATRIMONIAL
+ GROUP BY grupo, it.categoryFk, i.typeFk, t.companyFk, Gasto;
INSERT INTO bs.ventas_contables(year
, month
@@ -92,7 +92,7 @@ BEGIN
JOIN vn.ticket t ON ts.ticketFk = t.id
JOIN vn.address a on a.id = t.addressFk
JOIN vn.client cl on cl.id = a.clientFk
- JOIN tmp.ticket_list tt on tt.Id_Ticket = t.id
+ JOIN tmp.ticket_list tt on tt.id = t.id
JOIN vn.company c on c.id = t.companyFk
LEFT JOIN vn.company c2 on c2.clientFk = cl.id
GROUP BY grupo, t.companyFk ;
diff --git a/db/routines/bs/procedures/ventas_contables_por_cliente.sql b/db/routines/bs/procedures/ventas_contables_por_cliente.sql
deleted file mode 100644
index 931653e6e..000000000
--- a/db/routines/bs/procedures/ventas_contables_por_cliente.sql
+++ /dev/null
@@ -1,47 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_contables_por_cliente`(IN vYear INT, IN vMonth INT)
-BEGIN
-
- /**
- * Muestra las ventas (€) de cada cliente
- * dependiendo del año
- */
-
- DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
-
- CREATE TEMPORARY TABLE tmp.ticket_list
- (PRIMARY KEY (Id_Ticket))
- SELECT Id_Ticket
- FROM vn2008.Tickets t
- JOIN vn.invoiceOut io ON io.id = t.Factura
- WHERE year(io.issued) = vYear
- AND month(io.issued) = vMonth;
-
- SELECT vYear Año,
- vMonth Mes,
- t.Id_Cliente,
- round(sum(Cantidad * Preu * (100 - m.Descuento)/100)) Venta,
- IF(e.empresa_grupo = e2.empresa_grupo,
- 1,
- IF(e2.empresa_grupo,2,0))
- AS grupo,
- t.empresa_id empresa
- FROM vn2008.Movimientos m
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna
- JOIN vn2008.Clientes c ON c.Id_Cliente = cs.Id_Cliente
- JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket
- JOIN vn2008.Articles a ON m.Id_Article = a.Id_Article
- JOIN vn2008.empresa e ON e.id = t.empresa_id
- LEFT JOIN vn2008.empresa e2 ON e2.Id_Cliente = c.Id_Cliente
- JOIN vn2008.Tipos tp ON tp.tipo_id = a.tipo_id
- WHERE Cantidad <> 0
- AND Preu <> 0
- AND m.Descuento <> 100
- AND a.tipo_id != 188
- GROUP BY t.Id_Cliente, grupo,t.empresa_id;
-
- DROP TEMPORARY TABLE tmp.ticket_list;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/bs/procedures/vivosMuertos.sql b/db/routines/bs/procedures/vivosMuertos.sql
deleted file mode 100644
index c07570603..000000000
--- a/db/routines/bs/procedures/vivosMuertos.sql
+++ /dev/null
@@ -1,63 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`vivosMuertos`()
-BEGIN
-
- /**
- * Devuelve el número de clientes nuevos y muertos,
- * dependiendo de la fecha actual.
- *
- * @param @datSTART Fecha de inicio a buscar
- * @param @datEND Fecha de finalización a buscar
- */
-
- SET @datSTART = TIMESTAMPADD(YEAR,-2,util.VN_CURDATE());
- SET @datEND = TIMESTAMPADD(DAY,-DAY(util.VN_CURDATE()),util.VN_CURDATE());
-
- DROP TEMPORARY TABLE IF EXISTS tmp.VivosMuertos;
-
- CREATE TEMPORARY TABLE tmp.VivosMuertos
- SELECT c.Id_Cliente, tm.yearMonth, f.Compra, 0 as Nuevo, 0 as Muerto
- FROM vn2008.Clientes c
- JOIN
- (SELECT DISTINCT yearMonth
- FROM vn2008.time
- WHERE date BETWEEN @datSTART
- AND @datEND ) tm
- LEFT JOIN
- (SELECT DISTINCT tm.yearMonth, io.clientFk Id_Cliente , 1 as Compra
- FROM vn.invoiceOut io
- JOIN vn2008.time tm ON tm.date = io.issued
- WHERE io.issued BETWEEN @datSTART
- AND @datEND) f ON f.yearMonth = tm.yearMonth
- AND f.Id_Cliente = c.Id_Cliente;
-
- UPDATE tmp.VivosMuertos vm
- JOIN
- (SELECT MIN(tm.yearMonth) firstMonth, io.clientFk Id_Cliente
- FROM vn.invoiceOut io
- JOIN vn2008.time tm ON tm.date = io.issued
- WHERE io.issued BETWEEN @datSTART AND @datEND
- GROUP BY io.clientFk) fm ON fm.firstMonth = vm.yearMonth
- AND fm.Id_Cliente = vm.Id_Cliente
-
- SET Nuevo = 1;
-
- SELECT max(yearMonth) INTO @lastYearMonth FROM tmp.VivosMuertos;
-
- UPDATE tmp.VivosMuertos vm
- JOIN (
- SELECT MAX(tm.yearMonth) firstMonth, io.clientFk Id_Cliente
- FROM vn.invoiceOut io
- JOIN vn2008.time tm ON tm.date = io.issued
- WHERE io.issued BETWEEN @datSTART AND @datEND
- GROUP BY io.clientFk) fm ON fm.firstMonth = vm.yearMonth
- AND fm.Id_Cliente = vm.Id_Cliente
-
- SET Muerto = 1
-
- WHERE yearMonth < @lastYearMonth;
-
- SELECT * FROM tmp.VivosMuertos;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/bs/views/VentasPorCliente.sql b/db/routines/bs/views/VentasPorCliente.sql
deleted file mode 100644
index 579d3b955..000000000
--- a/db/routines/bs/views/VentasPorCliente.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bs`.`VentasPorCliente`
-AS SELECT `v`.`Id_Cliente` AS `Id_Cliente`,
- round(sum(`v`.`importe`), 0) AS `VentaBasica`,
- `t`.`year` AS `year`,
- `t`.`month` AS `month`
-FROM (
- `vn2008`.`time` `t`
- JOIN `bs`.`ventas` `v` ON(`v`.`fecha` = `t`.`date`)
- )
-GROUP BY `v`.`Id_Cliente`,
- `t`.`year`,
- `t`.`month`
diff --git a/db/routines/bs/views/bajasLaborales.sql b/db/routines/bs/views/bajasLaborales.sql
deleted file mode 100644
index 31f870d06..000000000
--- a/db/routines/bs/views/bajasLaborales.sql
+++ /dev/null
@@ -1,31 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bs`.`bajasLaborales`
-AS SELECT `w`.`firstName` AS `firstname`,
- `w`.`lastName` AS `name`,
- `b`.`id` AS `businessFk`,
- max(`c`.`dated`) AS `lastDate`,
- max(IFNULL(`b`.`ended`, `util`.`VN_CURDATE`())) AS `endContract`,
- `at`.`name` AS `type`,
- cast(COUNT(0) AS decimal(10, 0)) AS `dias`,
- `w`.`id` AS `userFk`
-FROM (
- (
- (
- `vn`.`calendar` `c`
- JOIN `vn`.`business` `b` ON(`b`.`id` = `c`.`businessFk`)
- )
- JOIN `vn`.`worker` `w` ON(`w`.`id` = `b`.`workerFk`)
- )
- JOIN `vn`.`absenceType` `at` ON(`at`.`id` = `c`.`dayOffTypeFk`)
- )
-WHERE `c`.`dated` >= `util`.`VN_CURDATE`() + INTERVAL -1 year
- AND `at`.`name` NOT IN (
- 'Vacaciones',
- 'Vacaciones 1/2 día',
- 'Compensar',
- 'Festivo'
- )
-GROUP BY `w`.`id`,
- `at`.`id`
-HAVING `endContract` >= `util`.`VN_CURDATE`()
diff --git a/db/routines/bs/views/horasSilla.sql b/db/routines/bs/views/horasSilla.sql
deleted file mode 100644
index 973108e8a..000000000
--- a/db/routines/bs/views/horasSilla.sql
+++ /dev/null
@@ -1,27 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bs`.`horasSilla`
-AS SELECT `wj`.`dated` AS `Fecha`,
- `d`.`name` AS `Departamento`,
- cast(sum(`wj`.`total`) AS decimal(10, 2)) AS `Horas`,
- cast(
- sum(
- (`wj`.`total` + `wj`.`lunch`) * `wj`.`priceOrdinaryHour`
- ) AS decimal(10, 2)
- ) AS `Salarios`
-FROM (
- (
- `vn`.`workerJourney` `wj`
- JOIN `vn`.`business` `b` ON(`b`.`id` = `wj`.`businessFk`)
- )
- JOIN `vn`.`department` `d` ON(`d`.`id` = `b`.`departmentFk`)
- )
-WHERE `d`.`name` IN (
- 'CAMARA',
- 'ENCAJADO',
- 'PALETIZADORES',
- 'PRODUCCION',
- 'SACADORES'
- )
-GROUP BY `wj`.`dated`,
- `d`.`name`
diff --git a/db/routines/bs/views/s1_ticketDetail.sql b/db/routines/bs/views/s1_ticketDetail.sql
deleted file mode 100644
index 77fbcdcd9..000000000
--- a/db/routines/bs/views/s1_ticketDetail.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bs`.`s1_ticketDetail`
-AS SELECT `s`.`ticketFk` AS `ticketFk`,
- cast(
- sum(`s`.`price` * `s`.`quantity`) AS decimal(10, 2)
- ) AS `ticketAmount`,
- COUNT(`s`.`id`) AS `ticketLines`,
- cast(sum(`sv`.`volume`) AS decimal(10, 2)) AS `ticketM3`,
- cast(`t`.`shipped` AS date) AS `shipped`
-FROM (
- (
- `vn`.`ticket` `t`
- JOIN `vn`.`sale` `s` ON(`s`.`ticketFk` = `t`.`id`)
- )
- JOIN `vn`.`saleVolume` `sv` ON(`sv`.`saleFk` = `s`.`id`)
- )
-WHERE `t`.`shipped` BETWEEN '2021-09-01' AND '2021-10-31 23:59'
-GROUP BY `s`.`ticketFk`
diff --git a/db/routines/bs/views/s21_saleDetail.sql b/db/routines/bs/views/s21_saleDetail.sql
deleted file mode 100644
index 778994bfb..000000000
--- a/db/routines/bs/views/s21_saleDetail.sql
+++ /dev/null
@@ -1,42 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `bs`.`s21_saleDetail`
-AS SELECT dayofmonth(`t`.`shipped`) AS `dia`,
- year(`t`.`shipped`) AS `año`,
- MONTH(`t`.`shipped`) AS `mes`,
- `s`.`concept` AS `concepto`,
- `s`.`quantity` AS `unidades`,
- `s`.`price` AS `precio`,
- `s`.`quantity` * `s`.`price` AS `venta`,
- `it`.`name` AS `familia`,
- `w`.`code` AS `comprador`,
- `s`.`itemFk` AS `itemFk`,
- `s`.`ticketFk` AS `ticketFk`,
- `sv`.`volume` AS `volume`
-FROM (
- (
- (
- (
- (
- (
- `vn`.`sale` `s`
- JOIN `vn`.`item` `i` ON(`i`.`id` = `s`.`itemFk`)
- )
- JOIN `vn`.`itemType` `it` ON(`it`.`id` = `i`.`typeFk`)
- )
- JOIN `vn`.`worker` `w` ON(`w`.`id` = `it`.`workerFk`)
- )
- JOIN `vn`.`ticket` `t` ON(`t`.`id` = `s`.`ticketFk`)
- )
- JOIN `vn`.`client` `c` ON(`c`.`id` = `t`.`clientFk`)
- )
- JOIN `vn`.`saleVolume` `sv` ON(`sv`.`saleFk` = `s`.`id`)
- )
-WHERE (
- `t`.`shipped` BETWEEN '2020-10-21' AND '2020-10-28'
- OR `t`.`shipped` BETWEEN '2019-10-21' AND '2019-10-28'
- OR `t`.`shipped` BETWEEN '2021-09-1' AND '2021-10-28'
- )
- AND `t`.`warehouseFk` IN (1, 60)
- AND `c`.`isRelevant` <> 0
- AND `s`.`quantity` > 0
diff --git a/db/routines/cache/procedures/prod_graphic_refresh.sql b/db/routines/cache/procedures/prod_graphic_refresh.sql
deleted file mode 100644
index edeeba436..000000000
--- a/db/routines/cache/procedures/prod_graphic_refresh.sql
+++ /dev/null
@@ -1,36 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `cache`.`prod_graphic_refresh`(v_refresh BOOL, wh_id INT)
-proc: BEGIN
- DECLARE datEQ DATETIME;
- DECLARE timDIF TIME;
- DECLARE v_calc INT;
-
- CALL cache_calc_start (v_calc, v_refresh, 'prod_graphic', wh_id);
-
- IF !v_refresh
- THEN
- LEAVE proc;
- END IF;
-
- CALL vn2008.production_control_source(wh_id, 0);
-
- DELETE FROM prod_graphic_source;
-
- INSERT INTO prod_graphic_source (warehouse_id, graphCategory, m3, hora, `order`, Agencia)
- SELECT
- wh_id,
- st.graphCategory,
- CAST(SUM(m3) AS DECIMAL(10,0)) as m3,
- pb.Hora,
- pb.state_order,
- pb.Agencia
- FROM tmp.production_buffer pb
- JOIN vn.state st ON st.id = pb.state
- WHERE Fecha = util.VN_CURDATE()
- GROUP BY wh_id, graphCategory
- ;
-
-
- CALL cache_calc_end (v_calc);
-END$$
-DELIMITER ;
diff --git a/db/routines/edi/procedures/ekt_load.sql b/db/routines/edi/procedures/ekt_load.sql
index ccdcd1999..190b09a86 100644
--- a/db/routines/edi/procedures/ekt_load.sql
+++ b/db/routines/edi/procedures/ekt_load.sql
@@ -14,7 +14,6 @@ proc:BEGIN
DECLARE vPackage INT;
DECLARE vPutOrderFk INT;
DECLARE vIsLot BOOLEAN;
- DECLARE vForceToPacking INT DEFAULT 2;
DECLARE vEntryFk INT;
DECLARE vHasToChangePackagingFk BOOLEAN;
DECLARE vIsFloramondoDirect BOOLEAN;
@@ -71,16 +70,16 @@ proc:BEGIN
ELSE
- INSERT IGNORE INTO vn2008.Cubos (Id_Cubo, X, Y, Z)
+ INSERT IGNORE INTO vn.packaging (id, width, depth, height)
SELECT bucket_id, ROUND(x_size/10), ROUND(y_size/10), ROUND(z_size/10)
FROM bucket WHERE bucket_id = vPackage;
IF ROW_COUNT() > 0
THEN
- INSERT INTO vn2008.mail SET
+ INSERT INTO vn.mail SET
`subject` = 'Cubo añadido',
- `text` = CONCAT('Se ha añadido el cubo: ', vPackage),
- `to` = 'ekt@verdnatura.es';
+ `body` = CONCAT('Se ha añadido el cubo: ', vPackage),
+ `receiver` = 'ekt@verdnatura.es';
END IF;
END IF;
@@ -147,10 +146,10 @@ proc:BEGIN
(@t := IF(i.stems, i.stems, 1)) * e.pri / IFNULL(i.stemMultiplier, 1) buyingValue,
IFNULL(vItem, vDefaultEntry) itemFk,
e.qty stickers,
- @pac := IFNULL(i.stemMultiplier, 1) * e.pac / @t packing,
+ @pac := GREATEST(1, IFNULL(i.stemMultiplier, 1) * e.pac / @t) packing,
IFNULL(b.`grouping`, e.pac),
@pac * e.qty,
- vForceToPacking,
+ 'packing',
IF(vHasToChangePackagingFk OR b.packagingFk IS NULL, vPackage, b.packagingFk),
(IFNULL(i.weightByPiece, 0) * @pac) / 1000
FROM ekt e
diff --git a/db/routines/edi/procedures/floramondo_offerRefresh.sql b/db/routines/edi/procedures/floramondo_offerRefresh.sql
index 26e09ebaf..18d3f8b7e 100644
--- a/db/routines/edi/procedures/floramondo_offerRefresh.sql
+++ b/db/routines/edi/procedures/floramondo_offerRefresh.sql
@@ -1,5 +1,5 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `edi`.`floramondo_offerRefresh`()
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `edi`.`floramondo_offerRefresh`()
proc: BEGIN
DECLARE vLanded DATETIME;
DECLARE vDone INT DEFAULT FALSE;
@@ -417,7 +417,7 @@ proc: BEGIN
o.NumberOfUnits etiquetas,
o.NumberOfItemsPerCask packing,
GREATEST(1, IFNULL(o.MinimumQuantity,0)) * o.NumberOfItemsPerCask `grouping`,
- 2, -- Obliga al Packing
+ 'packing',
o.embalageCode,
o.diId
FROM edi.offer o
@@ -518,5 +518,5 @@ proc: BEGIN
fieldValue = TIMEDIFF(util.VN_NOW(), vStartingTime);
DO RELEASE_LOCK('edi.floramondo_offerRefresh');
-END$$
-DELIMITER ;
+END$$
+DELIMITER ;
diff --git a/db/routines/floranet/procedures/catalogue_findById.sql b/db/routines/floranet/procedures/catalogue_findById.sql
new file mode 100644
index 000000000..aca6ca4d6
--- /dev/null
+++ b/db/routines/floranet/procedures/catalogue_findById.sql
@@ -0,0 +1,13 @@
+DELIMITER $$
+$$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE floranet.catalogue_findById(vSelf INT)
+READS SQL DATA
+BEGIN
+/**
+ * Returns one recordset from catalogue
+ *
+ * @param vCatalogueFk Identifier de floranet.catalogue
+ */
+ SELECT * FROM catalogue WHERE id = vSelf;
+END$$
+DELIMITER ;
diff --git a/db/routines/floranet/procedures/catalogue_get.sql b/db/routines/floranet/procedures/catalogue_get.sql
index b6ec61522..32624f383 100644
--- a/db/routines/floranet/procedures/catalogue_get.sql
+++ b/db/routines/floranet/procedures/catalogue_get.sql
@@ -4,18 +4,30 @@ DELIMITER $$
$$
CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.catalogue_get(vLanded DATE, vPostalCode VARCHAR(15))
READS SQL DATA
-BEGIN
+proc:BEGIN
/**
- * Returns list, price and all the stuff regarding the floranet items
+ * 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;
- START TRANSACTION;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ DO RELEASE_LOCK(vLockName);
- SELECT * FROM catalogue FOR UPDATE;
+ 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;
@@ -46,7 +58,7 @@ BEGIN
FROM catalogue
WHERE id > IFNULL(vLastCatalogueFk,0);
- COMMIT;
+ DO RELEASE_LOCK(vLockName);
END$$
DELIMITER ;
diff --git a/db/routines/floranet/procedures/contact_request.sql b/db/routines/floranet/procedures/contact_request.sql
index 044c22c6f..2ca25b87d 100644
--- a/db/routines/floranet/procedures/contact_request.sql
+++ b/db/routines/floranet/procedures/contact_request.sql
@@ -11,7 +11,7 @@ PROCEDURE floranet.contact_request(
READS SQL DATA
BEGIN
/**
- * Set actions for contact request.
+ * Set actions for contact request
*
* @param vPostalCode Delivery address postal code
*/
diff --git a/db/routines/floranet/procedures/deliveryDate_get.sql b/db/routines/floranet/procedures/deliveryDate_get.sql
index 29751ebe4..75e9d6257 100644
--- a/db/routines/floranet/procedures/deliveryDate_get.sql
+++ b/db/routines/floranet/procedures/deliveryDate_get.sql
@@ -6,7 +6,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `floranet`.`deliveryDate_get`(vPosta
READS SQL DATA
BEGIN
/**
- * Returns available dates for this postalCode, in the next seven days
+ * Returns available dates for this postalCode, in the next seven days.
*
* @param vPostalCode Delivery address postal code
*/
diff --git a/db/routines/floranet/procedures/order_confirm.sql b/db/routines/floranet/procedures/order_confirm.sql
index fed123663..b6aec033d 100644
--- a/db/routines/floranet/procedures/order_confirm.sql
+++ b/db/routines/floranet/procedures/order_confirm.sql
@@ -7,7 +7,7 @@ CREATE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk I
READS SQL DATA
BEGIN
-/** Update order.isPaid field
+/** Update order.isPaid field.
*
* @param vCatalogueFk floranet.catalogue.id
*
diff --git a/db/routines/floranet/procedures/order_put.sql b/db/routines/floranet/procedures/order_put.sql
index c26cef19a..979588f8f 100644
--- a/db/routines/floranet/procedures/order_put.sql
+++ b/db/routines/floranet/procedures/order_put.sql
@@ -1,41 +1,21 @@
-DROP PROCEDURE IF EXISTS floranet.order_put;
-
DELIMITER $$
-$$
-CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.order_put(vOrder JSON)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE floranet.order_put(vJsonData JSON)
READS SQL DATA
BEGIN
/**
- * Get and process an order
+ * Get and process an order.
*
- * @param vOrder Data of the order
- *
- * Customer data: , ,
- *
- * Item data: ,
- *
- * Delivery data: , ,
- *
+ * @param vJsonData The order data in json format
*/
- 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'))
- );
+ INSERT INTO `order`
+ SET catalogueFk = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.products[0].id')),
+ customerName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerName')),
+ email = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.email')),
+ customerPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerPhone')),
+ message= JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.message')),
+ deliveryName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryName')),
+ address = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.address')),
+ deliveryPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryPhone'));
SELECT LAST_INSERT_ID() orderFk;
END$$
diff --git a/db/routines/floranet/procedures/sliders_get.sql b/db/routines/floranet/procedures/sliders_get.sql
index 2f77b8534..0e4aa297a 100644
--- a/db/routines/floranet/procedures/sliders_get.sql
+++ b/db/routines/floranet/procedures/sliders_get.sql
@@ -6,14 +6,15 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.sliders_get()
READS SQL DATA
BEGIN
/**
- * Returns list of url for sliders
+ * 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');
+ WHERE it.code IN ('FNR','FNP')
+ LIMIT 3;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/hedera/events/order_doRecalc.sql b/db/routines/hedera/events/order_doRecalc.sql
deleted file mode 100644
index d355e1a55..000000000
--- a/db/routines/hedera/events/order_doRecalc.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `hedera`.`order_doRecalc`
- ON SCHEDULE EVERY 10 SECOND
- STARTS '2019-08-29 14:18:04.000'
- ON COMPLETION PRESERVE
- ENABLE
-DO CALL order_doRecalc$$
-DELIMITER ;
diff --git a/db/routines/hedera/procedures/order_doRecalc.sql b/db/routines/hedera/procedures/order_doRecalc.sql
deleted file mode 100644
index 4c0ee0499..000000000
--- a/db/routines/hedera/procedures/order_doRecalc.sql
+++ /dev/null
@@ -1,53 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_doRecalc`()
-proc: BEGIN
-/**
- * Recalculates modified orders.
- */
- DECLARE vDone BOOL;
- DECLARE vOrderFk INT;
-
- DECLARE cCur CURSOR FOR
- SELECT DISTINCT orderFk FROM tOrder;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
-
- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('hedera.order_doRecalc');
- ROLLBACK;
- RESIGNAL;
- END;
-
- IF !GET_LOCK('hedera.order_doRecalc', 0) THEN
- LEAVE proc;
- END IF;
-
- DROP TEMPORARY TABLE IF EXISTS tOrder;
- CREATE TEMPORARY TABLE tOrder
- ENGINE = MEMORY
- SELECT id, orderFk FROM orderRecalc;
-
- OPEN cCur;
-
- myLoop: LOOP
- SET vDone = FALSE;
- FETCH cCur INTO vOrderFk;
-
- IF vDone THEN
- LEAVE myLoop;
- END IF;
-
- CALL order_recalc(vOrderFk);
- END LOOP;
-
- CLOSE cCur;
-
- DELETE o FROM orderRecalc o JOIN tOrder t ON t.id = o.id;
-
- DROP TEMPORARY TABLE tOrder;
-
- DO RELEASE_LOCK('hedera.order_doRecalc');
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/procedures/order_requestRecalc.sql b/db/routines/hedera/procedures/order_requestRecalc.sql
deleted file mode 100644
index 4bcb1010e..000000000
--- a/db/routines/hedera/procedures/order_requestRecalc.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_requestRecalc`(vSelf INT)
-proc: BEGIN
-/**
- * Adds a request to recalculate the order total.
- *
- * @param vSelf The order identifier
- */
- IF vSelf IS NULL THEN
- LEAVE proc;
- END IF;
-
- INSERT INTO orderRecalc SET orderFk = vSelf;
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/orderRow_afterDelete.sql b/db/routines/hedera/triggers/orderRow_afterDelete.sql
deleted file mode 100644
index 10b5ae9e3..000000000
--- a/db/routines/hedera/triggers/orderRow_afterDelete.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterDelete`
- AFTER DELETE ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NULL, OLD.id);
- CALL order_requestRecalc(OLD.orderFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/orderRow_afterInsert.sql b/db/routines/hedera/triggers/orderRow_afterInsert.sql
deleted file mode 100644
index 7e8d5f341..000000000
--- a/db/routines/hedera/triggers/orderRow_afterInsert.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterInsert`
- AFTER INSERT ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NEW.id, NULL);
- CALL order_requestRecalc(NEW.orderFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/orderRow_afterUpdate.sql b/db/routines/hedera/triggers/orderRow_afterUpdate.sql
deleted file mode 100644
index 33f4ae84e..000000000
--- a/db/routines/hedera/triggers/orderRow_afterUpdate.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterUpdate`
- AFTER UPDATE ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NEW.id, OLD.id);
- CALL order_requestRecalc(OLD.orderFk);
- CALL order_requestRecalc(NEW.orderFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/order_afterUpdate.sql b/db/routines/hedera/triggers/order_afterUpdate.sql
index a4549549a..25f51b3f0 100644
--- a/db/routines/hedera/triggers/order_afterUpdate.sql
+++ b/db/routines/hedera/triggers/order_afterUpdate.sql
@@ -2,23 +2,15 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`order_afterUpdate`
AFTER UPDATE ON `order`
FOR EACH ROW
-BEGIN
- CALL stock.log_add('order', NEW.id, OLD.id);
-
- IF !(OLD.address_id <=> NEW.address_id)
- OR !(OLD.company_id <=> NEW.company_id)
- OR !(OLD.customer_id <=> NEW.customer_id) THEN
- CALL order_requestRecalc(NEW.id);
- END IF;
-
- IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
- -- Fallo que se actualiza no se sabe como tickets en este cliente
- CALL vn.mail_insert(
- 'jgallego@verdnatura.es',
- 'noreply@verdnatura.es',
- 'Actualizada order al address 2850',
- CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
- );
- END IF;
+BEGIN
+ IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
+ -- Fallo que se actualiza no se sabe como tickets en este cliente
+ CALL vn.mail_insert(
+ 'jgallego@verdnatura.es',
+ 'noreply@verdnatura.es',
+ 'Actualizada order al address 2850',
+ CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
+ );
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/sage/procedures/clientSupplier_add.sql b/db/routines/sage/procedures/clientSupplier_add.sql
index 7a0aec6e2..70f3ef3d0 100644
--- a/db/routines/sage/procedures/clientSupplier_add.sql
+++ b/db/routines/sage/procedures/clientSupplier_add.sql
@@ -53,7 +53,7 @@ BEGIN
IFNULL(c.street, ''),
c.accountingAccount,
@fi := IF(cu.code = LEFT(TRIM(c.fi), 2) AND c.isVies, MID(TRIM(c.fi), 3, LENGTH(TRIM(c.fi))-1), TRIM(c.fi)),
- IF(c.isVies, CONCAT(cu.code, @fi ), TRIM(c.fi)),
+ IF(c.isVies, CONCAT(IFNULL(cu.viesCode,cu.code), @fi ), TRIM(c.fi)),
IFNULL(c.postcode, ''),
IFNULL(c.city, ''),
IFNULL(pr.CodigoProvincia, ''),
@@ -91,7 +91,7 @@ BEGIN
IFNULL(s.street, ''),
s.account,
@nif := IF(co.code = LEFT(TRIM(s.nif), 2), MID(TRIM(s.nif), 3, LENGTH(TRIM(s.nif))-1), TRIM(s.nif)),
- IF(s.isVies, CONCAT(co.code, @nif), TRIM(s.nif)),
+ IF(s.isVies, CONCAT(IFNULL(co.viesCode,co.code), @nif), TRIM(s.nif)),
IFNULL(s.postCode,''),
IFNULL(s.city, ''),
IFNULL(pr.CodigoProvincia, ''),
diff --git a/db/routines/sage/procedures/importErrorNotification.sql b/db/routines/sage/procedures/importErrorNotification.sql
index b070097f4..75b0cffc8 100644
--- a/db/routines/sage/procedures/importErrorNotification.sql
+++ b/db/routines/sage/procedures/importErrorNotification.sql
@@ -43,7 +43,7 @@ BEGIN
WHERE sub.amountTaxableBase<>sub2.amountTaxableBase
AND sub.amountTaxableBase/2 <> sub2.amountTaxableBase
UNION ALL
- SELECT CONCAT('- Factura Duplicada: ', mc.Asiento)
+ SELECT CONCAT('- Factura Duplicada: ', accountingEntryFk)
FROM accountingEntryError
)sub;
diff --git a/db/routines/stock/procedures/inbound_addPick.sql b/db/routines/stock/procedures/inbound_addPick.sql
index d867b5641..41b93a986 100644
--- a/db/routines/stock/procedures/inbound_addPick.sql
+++ b/db/routines/stock/procedures/inbound_addPick.sql
@@ -1,8 +1,8 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_addPick`(
vSelf INT,
- vOutboundFk INT,
- vQuantity INT
+ vOutboundFk INT,
+ vQuantity INT
)
BEGIN
INSERT INTO inboundPick
diff --git a/db/routines/stock/procedures/inbound_removePick.sql b/db/routines/stock/procedures/inbound_removePick.sql
index e125ee8a7..e183e1171 100644
--- a/db/routines/stock/procedures/inbound_removePick.sql
+++ b/db/routines/stock/procedures/inbound_removePick.sql
@@ -1,9 +1,9 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_removePick`(
vSelf INT,
- vOutboundFk INT,
- vQuantity INT,
- vTotalQuantity INT
+ vOutboundFk INT,
+ vQuantity INT,
+ vTotalQuantity INT
)
BEGIN
IF vQuantity < vTotalQuantity THEN
diff --git a/db/routines/stock/procedures/inbound_requestQuantity.sql b/db/routines/stock/procedures/inbound_requestQuantity.sql
index 5d814ce2c..1cbc1908b 100644
--- a/db/routines/stock/procedures/inbound_requestQuantity.sql
+++ b/db/routines/stock/procedures/inbound_requestQuantity.sql
@@ -1,9 +1,9 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_requestQuantity`(
vSelf INT,
- vRequested INT,
- vDated DATETIME,
- OUT vSupplied INT)
+ vRequested INT,
+ vDated DATETIME,
+ OUT vSupplied INT)
BEGIN
/**
* Disassociates inbound picks after the given date until the
@@ -29,7 +29,7 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
-
+
SET vSupplied = 0;
OPEN vPicks;
@@ -45,7 +45,7 @@ BEGIN
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
SET vSupplied = vSupplied + vPickGranted;
CALL inbound_removePick(vSelf, vOutboundFk, vPickGranted, vPickQuantity);
-
+
UPDATE outbound
SET isSync = FALSE,
lack = lack + vPickGranted
diff --git a/db/routines/stock/procedures/inbound_sync.sql b/db/routines/stock/procedures/inbound_sync.sql
index fc672d920..77d3e42f7 100644
--- a/db/routines/stock/procedures/inbound_sync.sql
+++ b/db/routines/stock/procedures/inbound_sync.sql
@@ -23,7 +23,7 @@ BEGIN
SELECT id, lack, lack < quantity
FROM outbound
WHERE warehouseFk = vWarehouse
- AND itemFk = vItem
+ AND itemFk = vItem
AND dated >= vDated
AND (vExpired IS NULL OR dated < vExpired)
ORDER BY dated, created;
@@ -51,8 +51,8 @@ BEGIN
END IF;
SET vSupplied = LEAST(vAvailable, vLack);
-
- IF vSupplied > 0 THEN
+
+ IF vSupplied > 0 THEN
SET vAvailable = vAvailable - vSupplied;
UPDATE outbound
SET lack = lack - vSupplied
@@ -64,8 +64,8 @@ BEGIN
SET vSupplied = vSupplied + vSuppliedFromRequest;
SET vAvailable = vAvailable - vSuppliedFromRequest;
END IF;
-
- IF vSupplied > 0 THEN
+
+ IF vSupplied > 0 THEN
CALL inbound_addPick(vSelf, vOutboundFk, vSupplied);
END IF;
diff --git a/db/routines/stock/procedures/log_add.sql b/db/routines/stock/procedures/log_add.sql
deleted file mode 100644
index 2b75c7f72..000000000
--- a/db/routines/stock/procedures/log_add.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_add`(IN `vTableName` VARCHAR(255), IN `vNewId` VARCHAR(255), IN `vOldId` VARCHAR(255))
-proc: BEGIN
- -- XXX: Disabled while testing
- LEAVE proc;
-
- IF vOldId IS NOT NULL AND !(vOldId <=> vNewId) THEN
- INSERT IGNORE INTO `log` SET
- tableName = vTableName,
- tableId = vOldId,
- operation = 'delete';
- END IF;
-
- IF vNewId IS NOT NULL THEN
- INSERT IGNORE INTO `log` SET
- tableName = vTableName,
- tableId = vNewId,
- operation = 'insert';
- END IF;
-END$$
-DELIMITER ;
diff --git a/db/routines/stock/procedures/log_refreshAll.sql b/db/routines/stock/procedures/log_refreshAll.sql
index eab91f8e9..3eaad07f2 100644
--- a/db/routines/stock/procedures/log_refreshAll.sql
+++ b/db/routines/stock/procedures/log_refreshAll.sql
@@ -10,7 +10,7 @@ BEGIN
DO RELEASE_LOCK('stock.log_sync');
RESIGNAL;
END;
-
+
IF !GET_LOCK('stock.log_sync', 30) THEN
CALL util.throw('Lock timeout exceeded');
END IF;
diff --git a/db/routines/stock/procedures/log_refreshBuy.sql b/db/routines/stock/procedures/log_refreshBuy.sql
index 62fa73435..488c00a28 100644
--- a/db/routines/stock/procedures/log_refreshBuy.sql
+++ b/db/routines/stock/procedures/log_refreshBuy.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshBuy`(
- `vTableName` VARCHAR(255),
- `vTableId` INT)
+ `vTableName` VARCHAR(255),
+ `vTableId` INT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tValues;
CREATE TEMPORARY TABLE tValues
@@ -11,7 +11,7 @@ BEGIN
e.id entryFk,
t.id travelFk,
b.itemFk,
- e.isRaid,
+ e.isRaid,
ADDTIME(t.shipped,
IFNULL(t.shipmentHour, '00:00:00')) shipped,
t.warehouseOutFk,
@@ -24,7 +24,7 @@ BEGIN
ABS(b.quantity) quantity,
b.created,
b.quantity > 0 isIn,
- t.shipped < vn.getInventoryDate() lessThanInventory
+ t.shipped < vn.getInventoryDate() lessThanInventory
FROM vn.buy b
JOIN vn.entry e ON e.id = b.entryFk
JOIN vn.travel t ON t.id = e.travelFk
@@ -52,7 +52,7 @@ BEGIN
quantity,
IF(isIn, isReceived, isDelivered) AND !isRaid
FROM tValues
- WHERE isIn OR !lessThanInventory;
+ WHERE isIn OR !lessThanInventory;
REPLACE INTO outbound (
tableName, tableId, warehouseFk, dated,
@@ -67,7 +67,7 @@ BEGIN
quantity,
IF(isIn, isDelivered, isReceived) AND !isRaid
FROM tValues
- WHERE !isIn OR !lessThanInventory;
+ WHERE !isIn OR !lessThanInventory;
DROP TEMPORARY TABLE tValues;
END$$
diff --git a/db/routines/stock/procedures/log_refreshOrder.sql b/db/routines/stock/procedures/log_refreshOrder.sql
index 49225ddf0..ce5b31cc8 100644
--- a/db/routines/stock/procedures/log_refreshOrder.sql
+++ b/db/routines/stock/procedures/log_refreshOrder.sql
@@ -1,13 +1,13 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshOrder`(
- `vTableName` VARCHAR(255),
- `vTableId` INT)
+ `vTableName` VARCHAR(255),
+ `vTableId` INT)
BEGIN
DECLARE vExpireTime INT DEFAULT 20;
DECLARE vExpired DATETIME DEFAULT TIMESTAMPADD(MINUTE, -vExpireTime, util.VN_NOW());
DROP TEMPORARY TABLE IF EXISTS tValues;
- CREATE TEMPORARY TABLE tValues
+ CREATE TEMPORARY TABLE tValues
ENGINE = MEMORY
SELECT
r.id rowFk,
@@ -23,24 +23,24 @@ BEGIN
OR (vTableName = 'order' AND o.id = vTableId)
OR (vTableName = 'orderRow' AND r.id = vTableId)
)
- AND !o.confirmed
- AND r.shipment >= vn.getInventoryDate()
+ AND !o.confirmed
+ AND r.shipment >= vn.getInventoryDate()
AND r.created >= vExpired
AND r.amount != 0;
REPLACE INTO outbound (
tableName, tableId, warehouseFk, dated,
- itemFk, created, expired, quantity
+ itemFk, created, expired, quantity
)
- SELECT 'orderRow',
+ SELECT 'orderRow',
rowFk,
warehouseFk,
shipped,
itemFk,
created,
- TIMESTAMPADD(MINUTE, vExpireTime, created),
+ TIMESTAMPADD(MINUTE, vExpireTime, created),
quantity
- FROM tValues;
+ FROM tValues;
DROP TEMPORARY TABLE tValues;
END$$
diff --git a/db/routines/stock/procedures/log_refreshSale.sql b/db/routines/stock/procedures/log_refreshSale.sql
index 0499fc711..983616dca 100644
--- a/db/routines/stock/procedures/log_refreshSale.sql
+++ b/db/routines/stock/procedures/log_refreshSale.sql
@@ -1,10 +1,10 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshSale`(
- `vTableName` VARCHAR(255),
- `vTableId` INT)
+ `vTableName` VARCHAR(255),
+ `vTableId` INT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tValues;
- CREATE TEMPORARY TABLE tValues
+ CREATE TEMPORARY TABLE tValues
ENGINE = MEMORY
SELECT
m.id saleFk,
@@ -14,7 +14,7 @@ BEGIN
t.shipped,
ABS(m.quantity) quantity,
m.created,
- TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
+ TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
m.quantity < 0 isIn,
m.isPicked OR s.alertLevel > 1 isPicked
FROM vn.sale m
@@ -32,33 +32,33 @@ BEGIN
REPLACE INTO inbound (
tableName, tableId, warehouseFk, dated,
- itemFk, expired, quantity, isPicked
+ itemFk, expired, quantity, isPicked
)
- SELECT 'sale',
+ SELECT 'sale',
saleFk,
warehouseFk,
shipped,
itemFk,
- expired,
+ expired,
quantity,
- isPicked
- FROM tValues
- WHERE isIn;
+ isPicked
+ FROM tValues
+ WHERE isIn;
REPLACE INTO outbound (
tableName, tableId, warehouseFk, dated,
- itemFk, created, quantity, isPicked
+ itemFk, created, quantity, isPicked
)
- SELECT 'sale',
+ SELECT 'sale',
saleFk,
warehouseFk,
shipped,
itemFk,
created,
quantity,
- isPicked
- FROM tValues
- WHERE !isIn;
+ isPicked
+ FROM tValues
+ WHERE !isIn;
DROP TEMPORARY TABLE tValues;
END$$
diff --git a/db/routines/stock/procedures/outbound_sync.sql b/db/routines/stock/procedures/outbound_sync.sql
index c79bde45f..0de352176 100644
--- a/db/routines/stock/procedures/outbound_sync.sql
+++ b/db/routines/stock/procedures/outbound_sync.sql
@@ -7,7 +7,7 @@ BEGIN
* @param vSelf The outbound reference
*/
DECLARE vDated DATETIME;
- DECLARE vItem INT;
+ DECLARE vItem INT;
DECLARE vWarehouse INT;
DECLARE vLack INT;
DECLARE vSupplied INT;
@@ -21,7 +21,7 @@ BEGIN
SELECT id, available, available < quantity
FROM inbound
WHERE warehouseFk = vWarehouse
- AND itemFk = vItem
+ AND itemFk = vItem
AND dated <= vDated
AND (expired IS NULL OR expired > vDated)
ORDER BY dated;
diff --git a/db/routines/stock/procedures/visible_log.sql b/db/routines/stock/procedures/visible_log.sql
index 2867f1186..cc88d3205 100644
--- a/db/routines/stock/procedures/visible_log.sql
+++ b/db/routines/stock/procedures/visible_log.sql
@@ -1,16 +1,16 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`visible_log`(
vIsPicked BOOL,
- vWarehouseFk INT,
- vItemFk INT,
- vQuantity INT
+ vWarehouseFk INT,
+ vItemFk INT,
+ vQuantity INT
)
proc: BEGIN
IF !vIsPicked THEN
LEAVE proc;
END IF;
- INSERT INTO visible
+ INSERT INTO visible
SET itemFk = vItemFk,
warehouseFk = vWarehouseFk,
quantity = vQuantity
diff --git a/db/routines/stock/triggers/inbound_afterDelete.sql b/db/routines/stock/triggers/inbound_afterDelete.sql
index b485299b0..451dcc599 100644
--- a/db/routines/stock/triggers/inbound_afterDelete.sql
+++ b/db/routines/stock/triggers/inbound_afterDelete.sql
@@ -12,11 +12,11 @@ BEGIN
DELETE FROM inboundPick
WHERE inboundFk = OLD.id;
- CALL visible_log(
+ CALL visible_log(
OLD.isPicked,
- OLD.warehouseFk,
- OLD.itemFk,
- -OLD.quantity
+ OLD.warehouseFk,
+ OLD.itemFk,
+ -OLD.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/stock/triggers/inbound_beforeInsert.sql b/db/routines/stock/triggers/inbound_beforeInsert.sql
index 8aabb0682..723cb3222 100644
--- a/db/routines/stock/triggers/inbound_beforeInsert.sql
+++ b/db/routines/stock/triggers/inbound_beforeInsert.sql
@@ -4,12 +4,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `stock`.`inbound_beforeInse
FOR EACH ROW
BEGIN
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
-
- CALL visible_log(
+
+ CALL visible_log(
NEW.isPicked,
- NEW.warehouseFk,
- NEW.itemFk,
- NEW.quantity
+ NEW.warehouseFk,
+ NEW.itemFk,
+ NEW.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/stock/triggers/outbound_afterDelete.sql b/db/routines/stock/triggers/outbound_afterDelete.sql
index dce0aed7a..e7d756871 100644
--- a/db/routines/stock/triggers/outbound_afterDelete.sql
+++ b/db/routines/stock/triggers/outbound_afterDelete.sql
@@ -12,11 +12,11 @@ BEGIN
DELETE FROM inboundPick
WHERE outboundFk = OLD.id;
- CALL visible_log(
+ CALL visible_log(
OLD.isPicked,
- OLD.warehouseFk,
- OLD.itemFk,
- OLD.quantity
+ OLD.warehouseFk,
+ OLD.itemFk,
+ OLD.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/stock/triggers/outbound_beforeInsert.sql b/db/routines/stock/triggers/outbound_beforeInsert.sql
index e41edae43..86546413e 100644
--- a/db/routines/stock/triggers/outbound_beforeInsert.sql
+++ b/db/routines/stock/triggers/outbound_beforeInsert.sql
@@ -5,12 +5,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `stock`.`outbound_beforeIns
BEGIN
SET NEW.lack = NEW.quantity;
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
-
- CALL visible_log(
+
+ CALL visible_log(
NEW.isPicked,
- NEW.warehouseFk,
- NEW.itemFk,
- -NEW.quantity
+ NEW.warehouseFk,
+ NEW.itemFk,
+ -NEW.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/util/functions/binlogQueue_getDelay.sql b/db/routines/util/functions/binlogQueue_getDelay.sql
new file mode 100644
index 000000000..d6cf49377
--- /dev/null
+++ b/db/routines/util/functions/binlogQueue_getDelay.sql
@@ -0,0 +1,46 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `util`.`binlogQueue_getDelay`(vCode VARCHAR(255))
+ RETURNS BIGINT
+ READS SQL DATA
+ NOT DETERMINISTIC
+BEGIN
+/**
+ * Returns the difference between the current position of the binary log and
+ * the passed queue.
+ *
+ * @param vCode The queue code
+ * @return The difference in MB
+ */
+ DECLARE vCurLogName VARCHAR(255);
+ DECLARE vCurPosition BIGINT;
+ DECLARE vQueueLogName VARCHAR(255);
+ DECLARE vQueuePosition BIGINT;
+ DECLARE vDelay BIGINT;
+
+ SELECT VARIABLE_VALUE INTO vCurLogName
+ FROM information_schema.GLOBAL_STATUS
+ WHERE VARIABLE_NAME = 'BINLOG_SNAPSHOT_FILE';
+
+ SELECT VARIABLE_VALUE INTO vCurPosition
+ FROM information_schema.GLOBAL_STATUS
+ WHERE VARIABLE_NAME = 'BINLOG_SNAPSHOT_POSITION';
+
+ SELECT logName, `position`
+ INTO vQueueLogName, vQueuePosition
+ FROM binlogQueue
+ WHERE code = vCode;
+
+ IF vQueuePosition IS NULL THEN
+ RETURN NULL;
+ END IF;
+
+ SET vDelay =
+ vCurPosition - CAST(vQueuePosition AS SIGNED) +
+ @@max_binlog_size * (
+ CAST(REGEXP_SUBSTR(vCurLogName, '[0-9]+') AS SIGNED) -
+ CAST(REGEXP_SUBSTR(vQueueLogName, '[0-9]+') AS SIGNED)
+ );
+
+ RETURN ROUND(vDelay / POW(1024, 2));
+END$$
+DELIMITER ;
diff --git a/db/routines/util/procedures/connection_kill.sql b/db/routines/util/procedures/connection_kill.sql
new file mode 100644
index 000000000..b38509d1b
--- /dev/null
+++ b/db/routines/util/procedures/connection_kill.sql
@@ -0,0 +1,13 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`connection_kill`(
+ vConnectionId BIGINT
+)
+BEGIN
+/**
+ * Kill a connection
+ *
+ * @param vConnectionId
+ */
+ KILL vConnectionId;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/util/procedures/slowLog_prune.sql b/db/routines/util/procedures/slowLog_prune.sql
index 7294be2f6..d676ae3d9 100644
--- a/db/routines/util/procedures/slowLog_prune.sql
+++ b/db/routines/util/procedures/slowLog_prune.sql
@@ -6,16 +6,24 @@ BEGIN
*/
DECLARE vSlowQueryLog INT DEFAULT @@slow_query_log;
DECLARE vSqlLogBin INT DEFAULT @@SESSION.sql_log_bin;
+ DECLARE vLogExists BOOL;
SET sql_log_bin = OFF;
SET GLOBAL slow_query_log = OFF;
- RENAME TABLE `mysql`.`slow_log` TO `mysql`.`slow_log_temp`;
+ SELECT COUNT(*) > 0 INTO vLogExists
+ FROM information_schema.TABLES
+ WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'slow_log';
- DELETE FROM `mysql`.`slow_log_temp`
+ IF vLogExists THEN
+ DROP TEMPORARY TABLE IF EXISTS mysql.slow_log_temp;
+ RENAME TABLE mysql.slow_log TO mysql.slow_log_temp;
+ END IF;
+
+ DELETE FROM mysql.slow_log_temp
WHERE start_time < TIMESTAMPADD(WEEK, -1, util.VN_NOW());
- RENAME TABLE `mysql`.`slow_log_temp` TO `mysql`.`slow_log`;
+ RENAME TABLE mysql.slow_log_temp TO mysql.slow_log;
SET GLOBAL slow_query_log = vSlowQueryLog;
SET sql_log_bin = vSqlLogBin;
diff --git a/db/routines/vn/events/clientsDisable.sql b/db/routines/vn/events/clientsDisable.sql
index 00cd4ed8b..238e060dd 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/vn2008/events/raidUpdate.sql b/db/routines/vn/events/raidUpdate.sql
similarity index 65%
rename from db/routines/vn2008/events/raidUpdate.sql
rename to db/routines/vn/events/raidUpdate.sql
index aacfd6dcd..619dadb48 100644
--- a/db/routines/vn2008/events/raidUpdate.sql
+++ b/db/routines/vn/events/raidUpdate.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn2008`.`raidUpdate`
+CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`raidUpdate`
ON SCHEDULE EVERY 1 DAY
STARTS '2017-12-29 00:05:00.000'
ON COMPLETION PRESERVE
diff --git a/db/routines/vn/events/ticket_doRecalc.sql b/db/routines/vn/events/ticket_doRecalc.sql
deleted file mode 100644
index 9209c5715..000000000
--- a/db/routines/vn/events/ticket_doRecalc.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`ticket_doRecalc`
- ON SCHEDULE EVERY 10 SECOND
- STARTS '2022-01-28 09:29:18.000'
- ON COMPLETION PRESERVE
- ENABLE
-DO CALL ticket_doRecalc$$
-DELIMITER ;
diff --git a/db/routines/vn/events/travel_doRecalc.sql b/db/routines/vn/events/travel_doRecalc.sql
deleted file mode 100644
index a08ecc068..000000000
--- a/db/routines/vn/events/travel_doRecalc.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`travel_doRecalc`
- ON SCHEDULE EVERY 15 SECOND
- STARTS '2019-05-17 10:52:29.000'
- ON COMPLETION PRESERVE
- ENABLE
-DO CALL travel_doRecalc$$
-DELIMITER ;
diff --git a/db/routines/vn/functions/getAlert3StateTest.sql b/db/routines/vn/functions/getAlert3StateTest.sql
deleted file mode 100644
index 6a14d80d4..000000000
--- a/db/routines/vn/functions/getAlert3StateTest.sql
+++ /dev/null
@@ -1,40 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`getAlert3StateTest`(vTicket INT)
- RETURNS varchar(45) CHARSET latin1 COLLATE latin1_swedish_ci
- NOT DETERMINISTIC
- READS SQL DATA
-BEGIN
- DECLARE vDeliveryType INTEGER DEFAULT 0;
- DECLARE isWaitingForPickUp BOOLEAN DEFAULT FALSE;
- DECLARE vCode VARCHAR(45);
-
- SELECT
- a.Vista
- INTO vDeliveryType
- FROM vn2008.Tickets t
- JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia
- WHERE Id_Ticket = vTicket;
-
- CASE vDeliveryType
- WHEN 1 THEN -- AGENCIAS
- SET vCode = 'DELIVERED';
-
- WHEN 2 THEN -- REPARTO
- SET vCode = 'ON_DELIVERY';
-
- ELSE -- MERCADO, OTROS
- SELECT t.warehouse_id <> w.warehouse_id INTO isWaitingForPickUp
- FROM vn2008.Tickets t
- LEFT JOIN vn2008.warehouse_pickup w
- ON w.agency_id = t.Id_Agencia AND w.warehouse_id = t.warehouse_id
- WHERE t.Id_Ticket = vTicket;
-
- IF isWaitingForPickUp THEN
- SET vCode = 'WAITING_FOR_PICKUP';
- ELSE
- SET vCode = 'DELIVERED';
- END IF;
- END CASE;
- RETURN vCode;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/functions/ticketPositionInPath.sql b/db/routines/vn/functions/ticketPositionInPath.sql
index 9bd2c110e..5e75d868d 100644
--- a/db/routines/vn/functions/ticketPositionInPath.sql
+++ b/db/routines/vn/functions/ticketPositionInPath.sql
@@ -26,12 +26,12 @@ SELECT t.routeFk, t.warehouseFk, IFNULL(ts.productionOrder,0)
LEFT JOIN ticketState ts on ts.ticketFk = t.id
WHERE t.id = vTicketId;
-SELECT (ag.`name` = 'VN_VALENCIA')
+SELECT (a.`name` = 'VN_VALENCIA')
INTO vIsValenciaPath
- FROM vn2008.Rutas r
- JOIN vn2008.Agencias a on a.Id_Agencia = r.Id_Agencia
- JOIN vn2008.agency ag on ag.agency_id = a.agency_id
- WHERE r.Id_Ruta = vMyPath;
+ FROM `route` r
+ JOIN agencyMode am on am.id = r.agencyModeFk
+ JOIN agency a on a.id = am.agencyFk
+ WHERE r.id = vMyPath;
IF vIsValenciaPath THEN -- Rutas Valencia
diff --git a/db/routines/vn/functions/ticketSplitCounter.sql b/db/routines/vn/functions/ticketSplitCounter.sql
index a04c4f8a9..e82c079ae 100644
--- a/db/routines/vn/functions/ticketSplitCounter.sql
+++ b/db/routines/vn/functions/ticketSplitCounter.sql
@@ -9,9 +9,9 @@ BEGIN
SELECT CONCAT(printedStickers,'/',Total, IF(printedStickers = Total ,' LS','')) INTO vSplitCounter
FROM
(
- SELECT count(l.Id_Movimiento) as printedStickers, COUNT(*) as Total
- FROM vn.sale s
- LEFT JOIN vn2008.movement_label l ON l.Id_Movimiento = s.id
+ SELECT count(sl.saleFk) as printedStickers, COUNT(*) as Total
+ FROM sale s
+ LEFT JOIN saleLabel sl ON sl.saleFk = s.id
WHERE ticketFk = vTicketFk
) sub;
diff --git a/db/routines/vn/procedures/addAccountReconciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql
new file mode 100644
index 000000000..8effbd76c
--- /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 000000000..176b77726
--- /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/available_traslate.sql b/db/routines/vn/procedures/available_traslate.sql
new file mode 100644
index 000000000..d33a8e10e
--- /dev/null
+++ b/db/routines/vn/procedures/available_traslate.sql
@@ -0,0 +1,138 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`available_traslate`(
+ vWarehouseLanding INT,
+ vDated DATE,
+ vWarehouseShipment INT)
+proc: BEGIN
+/**
+ * Calcular la disponibilidad dependiendo del almacen
+ * de origen y destino según la fecha.
+ *
+ * @param vWarehouseLanding Almacén de llegada
+ * @param vDated Fecha del calculo para la disponibilidad de articulos
+ * @param vWarehouseShipment Almacén de destino
+ */
+ DECLARE vDatedFrom DATE;
+ DECLARE vDatedTo DATETIME;
+ DECLARE vDatedReserve DATETIME;
+ DECLARE vDatedInventory DATE;
+
+ IF vDated < util.VN_CURDATE() THEN
+ LEAVE proc;
+ END IF;
+
+ CALL item_getStock (vWarehouseLanding, vDated, NULL);
+
+ -- Calcula algunos parámetros necesarios.
+ SET vDatedFrom = vDated;
+ SET vDatedTo = util.dayEnd (vDated + INTERVAL 4 DAY);
+ SELECT inventoried INTO vDatedInventory FROM config;
+ SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
+ FROM hedera.orderConfig;
+
+ -- Calcula el ultimo dia de vida para cada producto.
+ CREATE OR REPLACE TEMPORARY TABLE tItemRange
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT c.itemFk, MAX(t.landed) dated
+ FROM buy c
+ JOIN entry e ON c.entryFk = e.id
+ JOIN travel t ON t.id = e.travelFk
+ JOIN warehouse w ON w.id = t.warehouseInFk
+ WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
+ AND t.warehouseInFk = vWarehouseLanding
+ AND NOT e.isExcludedFromAvailable
+ AND NOT e.isRaid
+ GROUP BY c.itemFk;
+
+ -- Tabla con el ultimo dia de last_buy para cada producto
+ -- que hace un replace de la anterior.
+ CALL buyUltimate(vWarehouseShipment, util.VN_CURDATE());
+
+ INSERT INTO tItemRange
+ SELECT t.itemFk, tr.landed
+ FROM tmp.buyUltimate t
+ JOIN buy b ON b.id = t.buyFk
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ LEFT JOIN tItemRange i ON t.itemFk = i.itemFk
+ WHERE t.warehouseFk = vWarehouseShipment
+ AND NOT e.isRaid
+ ON DUPLICATE KEY UPDATE tItemRange.dated = GREATEST(tItemRange.dated,
+ tr.landed);
+
+ CREATE OR REPLACE TEMPORARY TABLE tItemRangeLive
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT ir.itemFk, util.dayEnd(ir.dated + INTERVAL it.life DAY) dated
+ FROM tItemRange ir
+ JOIN item i ON i.id = ir.itemFk
+ JOIN itemType it ON it.id = i.typeFk
+ HAVING dated >= vDatedFrom OR dated IS NULL;
+
+ -- Calcula el ATP.
+ CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
+ (INDEX (itemFk,warehouseFk))
+ ENGINE = MEMORY
+ SELECT i.itemFk,
+ vWarehouseLanding warehouseFk,
+ i.shipped dated,
+ i.quantity
+ FROM itemTicketOut i
+ JOIN tItemRangeLive ir ON ir.itemFK = i.itemFk
+ WHERE i.shipped >= vDatedFrom
+ AND (ir.dated IS NULL OR i.shipped <= ir.dated)
+ AND i.warehouseFk = vWarehouseLanding
+ UNION ALL
+ SELECT b.itemFk,
+ vWarehouseLanding,
+ t.landed,
+ b.quantity
+ FROM buy b
+ JOIN entry e ON b.entryFk = e.id
+ JOIN travel t ON t.id = e.travelFk
+ JOIN tItemRangeLive ir ON ir.itemFk = b.itemFk
+ WHERE NOT e.isExcludedFromAvailable
+ AND b.quantity <> 0
+ AND NOT e.isRaid
+ AND t.warehouseInFk = vWarehouseLanding
+ AND t.landed >= vDatedFrom
+ AND (ir.dated IS NULL OR t.landed <= ir.dated)
+ UNION ALL
+ SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
+ FROM itemEntryOut i
+ JOIN tItemRangeLive ir ON ir.itemFk = i.itemFk
+ WHERE i.shipped >= vDatedFrom
+ AND (ir.dated IS NULL OR i.shipped <= ir.dated)
+ AND i.warehouseOutFk = vWarehouseLanding
+ UNION ALL
+ SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
+ FROM hedera.order_row r
+ JOIN hedera.`order` o ON o.id = r.order_id
+ JOIN tItemRangeLive ir ON ir.itemFk = r.item_id
+ WHERE r.shipment >= vDatedFrom
+ AND (ir.dated IS NULL OR r.shipment <= ir.dated)
+ AND r.warehouse_id = vWarehouseLanding
+ AND r.created >= vDatedReserve
+ AND NOT o.confirmed;
+
+ CALL item_getAtp(vDated);
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.availableTraslate
+ (PRIMARY KEY (item_id))
+ ENGINE = MEMORY
+ SELECT t.item_id, SUM(stock) available
+ FROM (
+ SELECT ti.itemFk item_id, stock
+ FROM tmp.itemList ti
+ JOIN tItemRange ir ON ir.itemFk = ti.itemFk
+ UNION ALL
+ SELECT itemFk, quantity
+ FROM tmp.itemAtp
+ ) t
+ GROUP BY t.item_id
+ HAVING available <> 0;
+
+ DROP TEMPORARY TABLE tmp.itemList, tItemRange, tItemRangeLive;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/balance_create.sql b/db/routines/vn/procedures/balance_create.sql
new file mode 100644
index 000000000..366707e58
--- /dev/null
+++ b/db/routines/vn/procedures/balance_create.sql
@@ -0,0 +1,218 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`balance_create`(
+ vStartingMonth INT,
+ vEndingMonth INT,
+ vCompany INT,
+ vIsConsolidated BOOLEAN,
+ vInterGroupSalesIncluded BOOLEAN
+)
+BEGIN
+/**
+ * Crea un balance financiero para una empresa durante
+ * un período de tiempo determinado.
+ *
+ * @param vStartingMonth Mes de inicio del período
+ * @param vEndingMonth Mes de finalización del período
+ * @param vCompany Identificador de la empresa
+ * @param vIsConsolidated Indica si se trata de un balance consolidado
+ * @param vInterGroupSalesIncluded Indica si se incluyen las ventas del grupo
+ */
+ DECLARE intGAP INT DEFAULT 7;
+ DECLARE vYears INT DEFAULT 2;
+ DECLARE vYear TEXT;
+ DECLARE vOneYearAgo TEXT;
+ DECLARE vTwoYearsAgo TEXT;
+ DECLARE vQuery TEXT;
+ DECLARE vConsolidatedGroup INT;
+ DECLARE vStartingDate DATE DEFAULT '2020-01-01';
+ DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
+ DECLARE vStartingYear INT DEFAULT vCurYear - 2;
+ DECLARE vTable TEXT;
+
+ SET vTable = util.quoteIdentifier('balanceNestTree');
+ SET vYear = util.quoteIdentifier(vCurYear);
+ SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
+ SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
+
+ -- Solicitamos la tabla tmp.nest, como base para el balance.
+ DROP TEMPORARY TABLE IF EXISTS tmp.nest;
+
+ EXECUTE IMMEDIATE CONCAT(
+ 'CREATE TEMPORARY TABLE tmp.nest
+ SELECT node.id
+ ,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1),
+ node.name) name,
+ node.lft,
+ node.rgt,
+ COUNT(parent.id) - 1 depth,
+ CAST((node.rgt - node.lft - 1) / 2 AS DECIMAL) sons
+ FROM ', vTable, ' node,
+ ', vTable, ' parent
+ WHERE node.lft BETWEEN parent.lft AND parent.rgt
+ GROUP BY node.id
+ ORDER BY node.lft')
+ USING intGAP;
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.balance
+ SELECT * FROM tmp.nest;
+
+ SELECT companyGroupFk INTO vConsolidatedGroup
+ FROM company
+ WHERE id = vCompany;
+
+ CREATE OR REPLACE TEMPORARY TABLE tCompanyReceiving
+ SELECT id companyFk
+ FROM company
+ WHERE id = vCompany
+ OR companyGroupFk = IF(vIsConsolidated, vConsolidatedGroup, NULL);
+
+ CREATE OR REPLACE TEMPORARY TABLE tCompanyIssuing
+ SELECT id companyFk
+ FROM supplier p;
+
+ IF NOT vInterGroupSalesIncluded THEN
+
+ DELETE ci
+ FROM tCompanyIssuing ci
+ JOIN company e on e.id = ci.companyFk
+ WHERE e.companyGroupFk = vConsolidatedGroup;
+
+ END IF;
+
+ -- Se calculan las facturas que intervienen,
+ -- para luego poder servir el desglose desde aqui.
+ CREATE OR REPLACE TEMPORARY TABLE tmp.balanceDetail
+ SELECT cr.companyFk receivingId,
+ ci.companyFk issuingId,
+ YEAR(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `year`,
+ MONTH(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `month`,
+ expenseFk,
+ SUM(taxableBase) amount
+ FROM invoiceIn r
+ JOIN invoiceInTax ri on ri.invoiceInFk = r.id
+ JOIN tCompanyReceiving cr on cr.companyFk = r.companyFk
+ JOIN tCompanyIssuing ci ON ci.companyFk = r.supplierFk
+ WHERE COALESCE(r.bookEntried, r.booked, r.issued) >= vStartingDate
+ AND r.isBooked
+ GROUP BY expenseFk, `year`, `month`, ci.companyFk, cr.companyFk;
+
+ INSERT INTO tmp.balanceDetail(
+ receivingId,
+ issuingId,
+ `year`,
+ `month`,
+ expenseFk,
+ amount)
+ SELECT em.companyFk,
+ em.companyFk,
+ `year`,
+ `month`,
+ expenseFk,
+ SUM(em.amount)
+ FROM expenseManual em
+ JOIN tCompanyReceiving er ON er.companyFk = em.companyFk
+ WHERE `year` >= vStartingYear
+ AND `month` BETWEEN vStartingMonth AND vEndingMonth
+ GROUP BY expenseFk, `year`, `month`, em.companyFk;
+
+ DELETE FROM tmp.balanceDetail
+ WHERE `month` < vStartingMonth
+ OR `month` > vEndingMonth;
+
+ -- Ahora el balance
+ EXECUTE IMMEDIATE CONCAT(
+ 'ALTER TABLE tmp.balance
+ ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
+ ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
+ ADD COLUMN ', vYear,' INT(10) NULL ,
+ ADD COLUMN expenseFk VARCHAR(10) NULL,
+ ADD COLUMN expenseName VARCHAR(45) NULL');
+
+ -- Añadimos los gastos, para facilitar el formulario
+ UPDATE tmp.balance b
+ JOIN balanceNestTree bnt on bnt.id = b.id
+ JOIN expense e ON e.id = bnt.expenseFk COLLATE utf8_general_ci
+ SET b.expenseFk = e.id COLLATE utf8_general_ci,
+ b.expenseName = e.name COLLATE utf8_general_ci ;
+
+ -- Rellenamos los valores de primer nivel, los que corresponden
+ -- a los gastos simples.
+ WHILE vYears >= 0 DO
+ SET vQuery = CONCAT(
+ 'UPDATE tmp.balance b
+ JOIN (
+ SELECT expenseFk, SUM(amount) amount
+ FROM tmp.balanceDetail
+ WHERE year = ?
+ GROUP BY expenseFk
+ ) sub on sub.expenseFk = b.expenseFk COLLATE utf8_general_ci
+ SET ', util.quoteIdentifier(vCurYear - vYears), ' = - amount');
+
+ EXECUTE IMMEDIATE vQuery
+ USING vCurYear - vYears;
+
+ SET vYears = vYears - 1;
+ END WHILE;
+
+ -- Añadimos las ventas.
+ EXECUTE IMMEDIATE CONCAT(
+ 'UPDATE tmp.balance b
+ JOIN (
+ SELECT SUM(IF(year = ?, venta, 0)) y2,
+ SUM(IF(year = ?, venta, 0)) y1,
+ SUM(IF(year = ?, venta, 0)) y0,
+ c.Gasto
+ FROM bs.ventas_contables c
+ JOIN tCompanyReceiving cr ON cr.companyFk = c.empresa_id
+ WHERE month BETWEEN ? AND ?
+ GROUP BY c.Gasto
+ ) sub ON sub.gasto = b.expenseFk COLLATE utf8_general_ci
+ SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
+ b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
+ b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
+ USING vCurYear-2,
+ vCurYear-1,
+ vCurYear,
+ vStartingMonth,
+ vEndingMonth;
+
+ -- Ventas intra grupo.
+ IF NOT vInterGroupSalesIncluded THEN
+
+ SELECT lft, rgt INTO @groupLft, @groupRgt
+ FROM tmp.balance b
+ WHERE TRIM(b.`name`) = 'Grupo';
+
+ DELETE
+ FROM tmp.balance
+ WHERE lft BETWEEN @groupLft AND @groupRgt;
+
+ END IF;
+
+ -- Rellenamos el valor de los padres con la suma de los hijos.
+ CREATE OR REPLACE TEMPORARY TABLE tmp.balance_aux
+ SELECT * FROM tmp.balance;
+
+ EXECUTE IMMEDIATE
+ CONCAT('UPDATE tmp.balance b
+ JOIN (
+ SELECT b1.id,
+ b1.name,
+ SUM(b2.', vYear,') thisYear,
+ SUM(b2.', vOneYearAgo,') oneYearAgo,
+ SUM(b2.', vTwoYearsAgo,') twoYearsAgo
+ FROM tmp.nest b1
+ JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
+ GROUP BY b1.id
+ )sub ON sub.id = b.id
+ SET b.', vYear, ' = thisYear,
+ b.', vOneYearAgo, ' = oneYearAgo,
+ b.', vTwoYearsAgo, ' = twoYearsAgo');
+
+ SELECT *, CONCAT('',IFNULL(expenseFk,'')) newgasto
+ FROM tmp.balance;
+
+ DROP TEMPORARY TABLE IF EXISTS tCompanyReceiving, tCompanyIssuing;
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/buy_chekItem.sql b/db/routines/vn/procedures/buy_chekItem.sql
index 0a0f00345..e8cf05fed 100644
--- a/db/routines/vn/procedures/buy_chekItem.sql
+++ b/db/routines/vn/procedures/buy_chekItem.sql
@@ -19,10 +19,10 @@ BEGIN
AND a.hasWeightVolumetric
LIMIT 1;
- DROP TEMPORARY TABLE IF EXISTS tmp.buysToCheck;
+ DROP TEMPORARY TABLE tmp.buysToCheck;
- IF hasVolumetricAgency THEN
- CALL util.throw('Some purchase line has an item without size or weight per stem in the volumetric agency.');
+ IF hasVolumetricAgency THEN
+ CALL util.throw('Item lacks size/weight in purchase line at agency');
END IF;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/buy_recalcPricesByBuy.sql b/db/routines/vn/procedures/buy_recalcPricesByBuy.sql
index b963bae14..4fff4d313 100644
--- a/db/routines/vn/procedures/buy_recalcPricesByBuy.sql
+++ b/db/routines/vn/procedures/buy_recalcPricesByBuy.sql
@@ -1,11 +1,13 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_recalcPricesByBuy`(IN vBuyFk INT(11))
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_recalcPricesByBuy`(
+ vBuyFk INT(11)
+)
BEGIN
/**
* Recalcula los precios de una compra
*
* @param vBuyFk
- */
+ */
DROP TEMPORARY TABLE IF EXISTS tmp.buyRecalc;
CREATE TEMPORARY TABLE tmp.buyRecalc
diff --git a/db/routines/vn/procedures/buy_recalcPricesByEntry.sql b/db/routines/vn/procedures/buy_recalcPricesByEntry.sql
index db0fc0690..8d70d3626 100644
--- a/db/routines/vn/procedures/buy_recalcPricesByEntry.sql
+++ b/db/routines/vn/procedures/buy_recalcPricesByEntry.sql
@@ -1,11 +1,13 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_recalcPricesByEntry`(IN vEntryFk INT(11))
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_recalcPricesByEntry`(
+ vEntryFk INT(11)
+)
BEGIN
/**
* Recalcula los precios de una entrada
*
* @param vEntryFk
- */
+ */
DROP TEMPORARY TABLE IF EXISTS tmp.buyRecalc;
CREATE TEMPORARY TABLE tmp.buyRecalc
diff --git a/db/routines/vn/procedures/catalog_componentCalculate.sql b/db/routines/vn/procedures/catalog_componentCalculate.sql
index 1af0ff9eb..92fe233c5 100644
--- a/db/routines/vn/procedures/catalog_componentCalculate.sql
+++ b/db/routines/vn/procedures/catalog_componentCalculate.sql
@@ -48,7 +48,7 @@ BEGIN
IF(i.hasMinPrice, GREATEST(i.minPrice,IFNULL(pf.rate3, b.price3)),IFNULL(pf.rate3, b.price3)) rate3,
IFNULL(pf.packing, GREATEST(b.grouping, b.packing)) packing,
IFNULL(pf.`grouping`, b.`grouping`) `grouping`,
- ABS(IFNULL(pf.box, b.groupingMode)) groupingMode,
+ b.groupingMode groupingMode,
tl.buyFk,
i.typeFk,
IF(i.hasKgPrice, b.weight / b.packing, NULL) weightGrouping
@@ -252,14 +252,15 @@ BEGIN
SELECT tcc.warehouseFk,
tcc.itemFk,
1 rate,
- IF(tcc.groupingMode = 1, tcc.`grouping`, 1) `grouping`,
+ IF(tcc.groupingMode = 'grouping', tcc.`grouping`, 1) `grouping`,
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
AND tcs.warehouseFk = tcc.warehouseFk
WHERE IFNULL(tcs.classRate, 1) = 1
- AND tcc.groupingMode < 2 AND (tcc.packing > tcc.`grouping` or tcc.groupingMode = 0)
+ AND (tcc.groupingMode = 'grouping' OR tcc.groupingMode IS NULL)
+ AND (tcc.packing > tcc.`grouping` OR tcc.groupingMode IS NULL)
GROUP BY tcs.warehouseFk, tcs.itemFk;
INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, `grouping`, price, priceKg)
diff --git a/db/routines/vn/procedures/clean.sql b/db/routines/vn/procedures/clean.sql
index ed1569935..36ef85834 100644
--- a/db/routines/vn/procedures/clean.sql
+++ b/db/routines/vn/procedures/clean.sql
@@ -131,7 +131,8 @@ BEGIN
DELETE e
FROM entry e
- JOIN tEntryToDelete tmp ON tmp.id = e.id;
+ JOIN tEntryToDelete tmp ON tmp.id = e.id
+ WHERE NOT e.isBooked;
-- borrar de route registros menores a 4 años
CREATE OR REPLACE TEMPORARY TABLE tRouteToDelete
diff --git a/db/routines/vn/procedures/client_getDebt.sql b/db/routines/vn/procedures/client_getDebt.sql
index ad7b5b7d2..3eaace4e9 100644
--- a/db/routines/vn/procedures/client_getDebt.sql
+++ b/db/routines/vn/procedures/client_getDebt.sql
@@ -17,15 +17,15 @@ BEGIN
SET vEnded = util.dayEnd(IFNULL(vDate, util.VN_CURDATE()));
- CREATE OR REPLACE TEMPORARY TABLE tClientRisk
+ CREATE OR REPLACE TEMPORARY TABLE tClientRisk
ENGINE = MEMORY
- SELECT cr.clientFk, SUM(cr.amount) amount
+ SELECT cr.clientFk, SUM(cr.amount) amount
FROM clientRisk cr
JOIN tmp.clientGetDebt c ON c.clientFk = cr.clientFk
GROUP BY cr.clientFk;
INSERT INTO tClientRisk
- SELECT c.clientFk, SUM(r.amountPaid)
+ SELECT c.clientFk, SUM(r.amountPaid)
FROM receipt r
JOIN tmp.clientGetDebt c ON c.clientFk = r.clientFk
WHERE r.payed > vEnded
diff --git a/db/routines/vn/procedures/client_getRisk.sql b/db/routines/vn/procedures/client_getRisk.sql
new file mode 100644
index 000000000..7fbade303
--- /dev/null
+++ b/db/routines/vn/procedures/client_getRisk.sql
@@ -0,0 +1,35 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_getRisk`(
+ vDate DATE
+)
+BEGIN
+/**
+ * Retorna el riesgo de los clientes activos.
+ *
+ * @param vDate Fecha a calcular
+ */
+ CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt
+ (PRIMARY KEY (clientFk))
+ ENGINE = MEMORY
+ SELECT id clientFk
+ FROM client
+ WHERE isActive;
+
+ CALL client_getDebt(vDate);
+
+ SELECT c.socialName,
+ r.clientFk,
+ c.credit,
+ CAST(r.risk AS DECIMAL (10,2)) risk,
+ CAST(c.credit - r.risk AS DECIMAL (10,2)) difference,
+ co.country
+ FROM client c
+ JOIN tmp.risk r ON r.clientFk = c.id
+ JOIN country co ON co.id = c.countryFk
+ GROUP BY c.id;
+
+ DROP TEMPORARY TABLE
+ tmp.risk,
+ tmp.clientGetDebt;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/collectionPlacement_get.sql b/db/routines/vn/procedures/collectionPlacement_get.sql
index 3641ba705..3fb3339e7 100644
--- a/db/routines/vn/procedures/collectionPlacement_get.sql
+++ b/db/routines/vn/procedures/collectionPlacement_get.sql
@@ -40,8 +40,8 @@ BEGIN
ENGINE = MEMORY
SELECT b.itemFk,
CASE b.groupingMode
- WHEN 0 THEN 1
- WHEN 2 THEN b.packing
+ WHEN NULL THEN 1
+ WHEN 'packing' THEN b.packing
ELSE b.`grouping`
END `grouping`
FROM buy b
diff --git a/db/routines/vn/procedures/collection_addItem.sql b/db/routines/vn/procedures/collection_addItem.sql
index c19d88684..b5bc91c67 100644
--- a/db/routines/vn/procedures/collection_addItem.sql
+++ b/db/routines/vn/procedures/collection_addItem.sql
@@ -52,6 +52,10 @@ BEGIN
SELECT LAST_INSERT_ID() INTO vSaleFk;
+ UPDATE sale
+ SET originalQuantity = 0
+ WHERE id = vSaleFk;
+
CALL sale_calculateComponent(vSaleFk, NULL);
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/collection_assign.sql b/db/routines/vn/procedures/collection_assign.sql
index 6d31fbc8f..196764c42 100644
--- a/db/routines/vn/procedures/collection_assign.sql
+++ b/db/routines/vn/procedures/collection_assign.sql
@@ -1,9 +1,9 @@
-DELIMITER $$
+DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_assign`(
vUserFk INT,
OUT vCollectionFk INT
-)
-proc:BEGIN
+)
+BEGIN
/**
* Comprueba si existen colecciones libres que se ajustan
* al perfil del usuario y le asigna la más antigua.
@@ -13,25 +13,46 @@ proc:BEGIN
* @param vCollectionFk Id de colección
*/
DECLARE vHasTooMuchCollections BOOL;
- DECLARE vLockTime INT DEFAULT 15;
+ DECLARE vItemPackingTypeFk VARCHAR(1);
+ DECLARE vWarehouseFk INT;
+ DECLARE vLockName VARCHAR(215);
+ DECLARE vLockTime INT DEFAULT 30;
+
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ IF vLockName IS NOT NULL THEN
+ DO RELEASE_LOCK(vLockName);
+ END IF;
+
+ RESIGNAL;
+ END;
-- Si hay colecciones sin terminar, sale del proceso
CALL collection_get(vUserFk);
- SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0
- INTO vHasTooMuchCollections
- FROM tCollection
- JOIN productionConfig pc ;
+ SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0 INTO vHasTooMuchCollections
+ FROM productionConfig pc
+ LEFT JOIN tCollection ON TRUE;
DROP TEMPORARY TABLE tCollection;
IF vHasTooMuchCollections THEN
CALL util.throw('Hay colecciones pendientes');
- LEAVE proc;
END IF;
- IF NOT GET_LOCK('collection_assign',vLockTime) THEN
- LEAVE proc;
+ SELECT warehouseFk, itemPackingTypeFk
+ INTO vWarehouseFk, vItemPackingTypeFk
+ FROM operator
+ WHERE workerFk = vUserFk;
+
+ SET vLockName = CONCAT_WS('/',
+ vLockName,
+ vWarehouseFk,
+ vItemPackingTypeFk
+ );
+
+ IF NOT GET_LOCK(vLockName, vLockTime) THEN
+ CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
END IF;
-- Se eliminan las colecciones sin asignar que estan obsoletas
@@ -83,6 +104,6 @@ proc:BEGIN
SET workerFk = vUserFk
WHERE id = vCollectionFk;
- DO RELEASE_LOCK('collection_assign');
-END$$
-DELIMITER ;
+ DO RELEASE_LOCK(vLockName);
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/collection_new.sql b/db/routines/vn/procedures/collection_new.sql
index 82196585d..8a1eff4a1 100644
--- a/db/routines/vn/procedures/collection_new.sql
+++ b/db/routines/vn/procedures/collection_new.sql
@@ -1,6 +1,6 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_new`(vUserFk INT, OUT vCollectionFk INT)
-proc:BEGIN
+BEGIN
/**
* Genera colecciones de tickets sin asignar trabajador.
*
@@ -26,7 +26,7 @@ proc:BEGIN
DECLARE vHasUniqueCollectionTime BOOL;
DECLARE vDone INT DEFAULT FALSE;
DECLARE vLockName VARCHAR(215);
- DECLARE vLockTime INT DEFAULT 15;
+ DECLARE vLockTime INT DEFAULT 30;
DECLARE vFreeWagonFk INT;
DECLARE c1 CURSOR FOR
@@ -63,7 +63,8 @@ proc:BEGIN
o.numberOfWagons,
o.trainFk,
o.linesLimit,
- o.volumeLimit
+ o.volumeLimit,
+ pc.collection_new_lockname
INTO vMaxTickets,
vHasUniqueCollectionTime,
vWorkerCode,
@@ -73,20 +74,21 @@ proc:BEGIN
vWagons,
vTrainFk,
vLinesLimit,
- vVolumeLimit
+ vVolumeLimit,
+ vLockName
FROM productionConfig pc
JOIN worker w ON w.id = vUserFk
JOIN state st ON st.`code` = 'ON_PREPARATION'
JOIN operator o ON o.workerFk = vUserFk;
SET vLockName = CONCAT_WS('/',
- 'collection_new',
+ vLockName,
vWarehouseFk,
vItemPackingTypeFk
);
IF NOT GET_LOCK(vLockName, vLockTime) THEN
- LEAVE proc;
+ CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
END IF;
-- Se prepara el tren, con tantos vagones como sea necesario.
@@ -219,9 +221,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
diff --git a/db/routines/vn/procedures/company_getSuppliersDebt.sql b/db/routines/vn/procedures/company_getSuppliersDebt.sql
index f4814abcc..83043f337 100644
--- a/db/routines/vn/procedures/company_getSuppliersDebt.sql
+++ b/db/routines/vn/procedures/company_getSuppliersDebt.sql
@@ -7,195 +7,196 @@ 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,
- 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,
- 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;
+ -- 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,
+ 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;
- 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;
+ 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;
- INSERT INTO tPendingDuedates (
- expirationId,
- dated,
- supplierFk,
- companyFk,
- amount,
- currencyFk,
- isPayment,
- isReconciled
- )SELECT p.id,
- p.dueDated,
- p.supplierFk,
- p.companyFk,
- IF (p.currencyFk = vCurrencyEuroFk, p.amount, p.divisa),
- p.currencyFk,
- TRUE isPayment,
- p.isConciliated
- FROM payment p
- WHERE p.dueDated >= vStartingDate
- AND p.companyFk = vSelf
- UNION ALL
- SELECT r.id,
- rv.dueDated,
- r.supplierFk,
- r.companyFk,
- -IF (r.currencyFk = vCurrencyEuroFk, rv.amount, rv.foreignValue),
- r.currencyFk,
- FALSE isPayment,
- TRUE
- FROM invoiceIn r
- LEFT JOIN tOpeningBalances si ON r.companyFk = si.companyFk
- AND r.supplierFk = si.supplierFk
- 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();
+ INSERT INTO tPendingDuedates (
+ expirationId,
+ dated,
+ supplierFk,
+ companyFk,
+ amount,
+ currencyFk,
+ isPayment,
+ isReconciled
+ )SELECT p.id,
+ p.dueDated,
+ p.supplierFk,
+ p.companyFk,
+ IF (p.currencyFk = vCurrencyEuroFk, p.amount, p.divisa),
+ p.currencyFk,
+ TRUE isPayment,
+ p.isConciliated
+ FROM payment p
+ WHERE p.dueDated >= vStartingDate
+ AND p.companyFk = vSelf
+ UNION ALL
+ SELECT r.id,
+ rv.dueDated,
+ r.supplierFk,
+ r.companyFk,
+ -IF (r.currencyFk = vCurrencyEuroFk, rv.amount, rv.foreignValue),
+ r.currencyFk,
+ FALSE isPayment,
+ TRUE
+ FROM invoiceIn r
+ LEFT JOIN tOpeningBalances si ON r.companyFk = si.companyFk
+ AND r.supplierFk = si.supplierFk
+ 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();
- 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;
+ 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 NOT vp.isPayment;
+ 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,
- vp.pending,
- vp.balance,
- s.payMethodFk,
- vp.isPayment,
- vp.isReconciled,
- vp.endingBalance,
- 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;
+ SELECT vp.expirationId,
+ vp.dated,
+ vp.supplierFk,
+ vp.companyFk,
+ vp.currencyFk,
+ vp.amount,
+ vp.pending,
+ vp.balance,
+ s.payMethodFk,
+ vp.isPayment,
+ vp.isReconciled,
+ vp.endingBalance,
+ 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
+ AND cr.companyFk = vp.companyFk
+ 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
+ GROUP BY vp.id;
- DROP TEMPORARY TABLE tOpeningBalances;
- DROP TEMPORARY TABLE tPendingDuedates;
- DROP TEMPORARY TABLE tRowsToDelete;
+ 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
index 8028dc5fb..8ddb9d721 100644
--- a/db/routines/vn/procedures/creditInsurance_getRisk.sql
+++ b/db/routines/vn/procedures/creditInsurance_getRisk.sql
@@ -2,41 +2,41 @@ 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;
+* Devuelve el riesgo de los clientes que estan asegurados
+*/
+ CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt
+ (PRIMARY KEY (clientFk))
+ ENGINE = MEMORY
+ SELECT * FROM (
+ SELECT cc.client clientFk, ci.grade
+ FROM creditClassification cc
+ JOIN creditInsurance ci ON cc.id = ci.creditClassification
+ WHERE dateEnd IS NULL
+ ORDER BY ci.creationDate DESC
+ LIMIT 10000000000000000000) t1
+ GROUP BY clientFk;
- CALL vn2008.risk_vs_client_list(util.VN_CURDATE());
+ CALL client_getDebt(util.VN_CURDATE());
- SELECT
- c.id,
- c.name,
- c.credit clientCredit,
- c.creditInsurance solunion,
- CAST(r.risk AS DECIMAL(10,0)) risk,
- CAST(c.creditInsurance - r.risk AS DECIMAL(10,0)) riskAlive,
- cac.invoiced billedAnnually,
- c.dueDay,
- 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;
+ SELECT c.id,
+ c.name,
+ c.credit clientCredit,
+ c.creditInsurance solunion,
+ CAST(r.risk AS DECIMAL(10,0)) risk,
+ CAST(c.creditInsurance - r.risk AS DECIMAL(10,0)) riskAlive,
+ cac.invoiced billedAnnually,
+ c.dueDay,
+ cgd.grade,
+ c2.country
+ FROM tmp.clientGetDebt cgd
+ LEFT JOIN tmp.risk r ON r.clientFk = cgd.clientFk
+ JOIN client c ON c.id = cgd.clientFk
+ JOIN bs.clientAnnualConsumption cac ON c.id = cac.clientFk
+ JOIN country c2 ON c2.id = c.countryFk
+ GROUP BY c.id;
- DROP TEMPORARY TABLE IF EXISTS tmp.risk;
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list;
+ DROP TEMPORARY TABLE
+ tmp.risk,
+ tmp.clientGetDebt;
END$$
-DELIMITER ;
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/creditRecovery.sql b/db/routines/vn/procedures/creditRecovery.sql
new file mode 100644
index 000000000..687d652dd
--- /dev/null
+++ b/db/routines/vn/procedures/creditRecovery.sql
@@ -0,0 +1,54 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditRecovery`()
+BEGIN
+/**
+ * Actualiza el crédito de los clientes
+ */
+
+ DECLARE EXIT HANDLER FOR SQLSTATE '45000'
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ START TRANSACTION;
+
+ UPDATE `client` c
+ JOIN payMethod pm ON pm.id = c.payMethodFk
+ SET c.credit = 0
+ WHERE pm.`code` = 'card';
+
+ DROP TEMPORARY TABLE IF EXISTS tCreditClients;
+ CREATE TEMPORARY TABLE tCreditClients
+ SELECT clientFk, IF(credit > recovery, credit - recovery, 0) newCredit
+ FROM (
+ SELECT r.clientFk,
+ r.amount recovery,
+ (sub2.created + INTERVAL r.period DAY) deadLine,
+ sub2.amount credit
+ FROM recovery r
+ JOIN (
+ SELECT clientFk, amount, created
+ FROM (
+ SELECT clientFk, amount, created
+ FROM clientCredit
+ ORDER BY created DESC
+ LIMIT 10000000000000000000
+ ) sub
+ GROUP BY clientFk
+ ) sub2 ON sub2.clientFk = r.clientFk
+ WHERE r.finished IS NULL OR r.finished >= util.VN_CURDATE()
+ GROUP BY r.clientFk
+ HAVING deadLine <= util.VN_CURDATE()
+ ) sub3
+ WHERE credit > 0;
+
+ UPDATE client c
+ JOIN tCreditClients cc ON cc.clientFk = c.id
+ SET c.credit = newCredit;
+
+ DROP TEMPORARY TABLE tCreditClients;
+ COMMIT;
+
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/duaInvoiceInBooking.sql b/db/routines/vn/procedures/duaInvoiceInBooking.sql
index 26580907c..981f3026d 100644
--- a/db/routines/vn/procedures/duaInvoiceInBooking.sql
+++ b/db/routines/vn/procedures/duaInvoiceInBooking.sql
@@ -28,11 +28,11 @@ BEGIN
JOIN entry e ON e.invoiceInFk = ii.id
JOIN duaEntry de ON de.entryFk = e.id
JOIN dua d ON d.id = de.duaFk
- SET ii.isBooked = TRUE,
- ii.booked = IFNULL(ii.booked,d.booked),
- ii.operated = IFNULL(ii.operated,d.operated),
- ii.issued = IFNULL(ii.issued,d.issued),
- ii.bookEntried = IFNULL(ii.bookEntried,d.bookEntried),
+ SET ii.booked = IFNULL(ii.booked, d.booked),
+ 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;
@@ -70,5 +70,9 @@ BEGIN
SET ASIEN = vASIEN
WHERE id = vDuaFk;
+ UPDATE invoiceIn ii
+ JOIN duaInvoiceIn dii ON dii.invoiceInFk = ii.id
+ SET ii.isBooked = TRUE
+ WHERE dii.duaFk = vDuaFk;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/entry_checkBooked.sql b/db/routines/vn/procedures/entry_checkBooked.sql
index 50990cd43..7ee1fee22 100644
--- a/db/routines/vn/procedures/entry_checkBooked.sql
+++ b/db/routines/vn/procedures/entry_checkBooked.sql
@@ -15,7 +15,7 @@ BEGIN
FROM `entry`
WHERE id = vSelf;
- IF vIsBooked THEN
+ IF vIsBooked AND NOT IFNULL(@isModeInventory, FALSE) THEN
CALL util.throw('Entry is already booked');
END IF;
END$$
diff --git a/db/routines/vn/procedures/entry_getTransfer.sql b/db/routines/vn/procedures/entry_getTransfer.sql
index b82f273ae..165c87dc7 100644
--- a/db/routines/vn/procedures/entry_getTransfer.sql
+++ b/db/routines/vn/procedures/entry_getTransfer.sql
@@ -68,19 +68,19 @@ BEGIN
AND v.`visible`
ON DUPLICATE KEY UPDATE visibleLanding = v.`visible`;
- CALL vn2008.availableTraslate(vWarehouseOut, vDateShipped, NULL);
+ CALL available_traslate(vWarehouseOut, vDateShipped, NULL);
INSERT INTO tItem(itemFk, available)
SELECT a.item_id, a.available
- FROM vn2008.availableTraslate a
+ FROM tmp.availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE available = a.available;
- CALL vn2008.availableTraslate(vWarehouseIn, vDateLanded, vWarehouseOut);
+ CALL available_traslate(vWarehouseIn, vDateLanded, vWarehouseOut);
INSERT INTO tItem(itemFk, availableLanding)
SELECT a.item_id, a.available
- FROM vn2008.availableTraslate a
+ FROM tmp.availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE availableLanding = a.available;
ELSE
diff --git a/db/routines/vn/procedures/entry_recalc.sql b/db/routines/vn/procedures/entry_recalc.sql
index 2410d380d..b426a9b5b 100644
--- a/db/routines/vn/procedures/entry_recalc.sql
+++ b/db/routines/vn/procedures/entry_recalc.sql
@@ -26,7 +26,7 @@ BEGIN
LEAVE l;
END IF;
- CALL vn2008.buy_tarifas_entry(vEntryFk);
+ CALL buy_recalcPricesByEntry(vEntryFk);
END LOOP;
CLOSE vCur;
diff --git a/db/routines/vn/procedures/entry_updateComission.sql b/db/routines/vn/procedures/entry_updateComission.sql
index 1bef79bd3..ceed20d78 100644
--- a/db/routines/vn/procedures/entry_updateComission.sql
+++ b/db/routines/vn/procedures/entry_updateComission.sql
@@ -9,6 +9,14 @@ BEGIN
DECLARE vCurrencyName VARCHAR(25);
DECLARE vComission INT;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ START TRANSACTION;
+
CREATE OR REPLACE TEMPORARY TABLE tmp.recalcEntryCommision
SELECT e.id
FROM vn.entry e
@@ -28,12 +36,15 @@ BEGIN
WHERE id = vCurrency;
CALL entry_recalc();
+
+ COMMIT;
+
SELECT util.notification_send(
'entry-update-comission',
JSON_OBJECT('currencyName', vCurrencyName, 'referenceCurrent', vComission),
NULL
);
- DROP TEMPORARY TABLE tmp.recalcEntryCommision;
+ DROP TEMPORARY TABLE tmp.recalcEntryCommision;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/fv_pca.sql b/db/routines/vn/procedures/fv_pca.sql
deleted file mode 100644
index b8e7343ef..000000000
--- a/db/routines/vn/procedures/fv_pca.sql
+++ /dev/null
@@ -1,101 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`fv_pca`()
-BEGIN
-
-DECLARE done INT DEFAULT FALSE;
-
-DECLARE vTicketFk INT;
-DECLARE vSaleFk INT;
-DECLARE vClonTicket INT DEFAULT 0;
-
-DECLARE cur1 CURSOR FOR
-SELECT s.ticketFk, s.id
- FROM vn.sale s
- JOIN vn.ticket t ON t.id = s.ticketFk
- JOIN vn.item i ON i.id = s.itemFk
- JOIN vn.itemType it ON it.id = i.typeFk
- WHERE t.shipped BETWEEN '2020-10-18' AND '2020-10-31'
- AND it.code IN ('ANT','ANS','ORQ','TRO')
- and t.warehouseFk = 1;
-
-DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-
-OPEN cur1;
-
-FETCH cur1 INTO vTicketFk, vSaleFk;
-
- WHILE done = 0 DO
-
- SELECT t.id INTO vClonTicket
- FROM vn.ticket t
- JOIN (SELECT addressFk, shipped FROM vn.ticket WHERE id = vTicketFk) sub USING(addressFk, shipped)
- WHERE t.warehouseFk = 44
- LIMIT 1;
-
- SELECT vTicketFk, vClonTicket;
-
- IF vClonTicket = 0 THEN
-
- INSERT INTO ticket (
- clientFk,
- shipped,
- addressFk,
- agencyModeFk,
- nickname,
- warehouseFk,
- companyFk,
- landed,
- zoneFk,
- zonePrice,
- zoneBonus,
- routeFk
- )
- SELECT
- clientFk,
- shipped,
- addressFk,
- agencyModeFk,
- nickname,
- 44,
- companyFk,
- landed,
- zoneFk,
- zonePrice,
- zoneBonus,
- routeFk
-
- FROM ticket
- WHERE id = vTicketFk;
-
- SET vClonTicket = LAST_INSERT_ID();
-
- SELECT 'lstID', vClonTicket;
- /*
- INSERT INTO ticketObservation(ticketFk, observationTypeFk, description)
- SELECT vTicketFk, ao.observationTypeFk, ao.description
- FROM addressObservation ao
- JOIN ticket t ON t.addressFk = ao.addressFk
- WHERE t.id = vClonTicket;
-*/
- INSERT INTO ticketLog
- SET originFk = vTicketFk, userFk = account.myUser_getId(), `action` = 'insert',
- description = CONCAT('Ha creado el ticket:', ' ', vClonTicket, ' clonando el ', vTicketFk);
-
- END IF;
-
- UPDATE vn.sale
- SET ticketFk = vClonTicket
- WHERE id = vSaleFk;
-
- SET vClonTicket = 0;
-
- SET done = 0;
- FETCH cur1 INTO vTicketFk, vSaleFk;
-
- END WHILE;
-
- CLOSE cur1;
-
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/inventoryMake.sql b/db/routines/vn/procedures/inventoryMake.sql
index ed6a7fa43..30bea6690 100644
--- a/db/routines/vn/procedures/inventoryMake.sql
+++ b/db/routines/vn/procedures/inventoryMake.sql
@@ -21,7 +21,7 @@ BEGIN
SELECT id
FROM warehouse
WHERE isInventory;
-
+
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
@@ -38,18 +38,18 @@ BEGIN
INTO vMaxRecentInventories,
vWarehouseOutFkInventory,
vAgencyModeFkInventory
- FROM inventoryConfig
+ FROM inventoryConfig
LIMIT 1;
- IF vDateLastInventory IS NULL
+ IF vDateLastInventory IS NULL
OR vInventorySupplierFk IS NULL
- OR vMaxRecentInventories IS NULL
- OR vInventoryDate IS NULL
+ OR vMaxRecentInventories IS NULL
+ OR vInventoryDate IS NULL
OR vWarehouseOutFkInventory IS NULL
OR vAgencyModeFkInventory IS NULL THEN
CALL util.throw('Some config parameters are not set');
END IF;
-
+
START TRANSACTION;
OPEN cWarehouses;
@@ -77,7 +77,7 @@ BEGIN
LIMIT 1;
IF vTravelFk IS NULL THEN
- INSERT INTO travel
+ INSERT INTO travel
SET warehouseOutFk = vWarehouseOutFkInventory,
warehouseInFk = vWarehouseFk,
shipped = vInventoryDate,
@@ -94,15 +94,16 @@ BEGIN
SELECT id INTO vEntryFk
FROM entry
WHERE supplierFk = vInventorySupplierFk
- AND travelFk = vTravelFk;
+ AND travelFk = vTravelFk
+ AND typeFk = 'inventory';
IF vEntryFk IS NULL THEN
- INSERT INTO entry
+ INSERT INTO entry
SET supplierFk = vInventorySupplierFk,
isConfirmed = TRUE,
isOrdered = TRUE,
- travelFk = vTravelFk;
-
+ travelFk = vTravelFk,
+ typeFk = 'inventory';
SELECT LAST_INSERT_ID() INTO vEntryFk;
ELSE
DELETE FROM buy WHERE entryFk = vEntryFk;
@@ -114,9 +115,9 @@ 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 ,
+ groupingMode enum('grouping', 'packing') DEFAULT NULL,
comissionValue decimal(10,3) DEFAULT '0.000',
packageValue decimal(10,3) DEFAULT '0.000',
packageFk varchar(10) COLLATE utf8_unicode_ci DEFAULT '--',
@@ -224,17 +225,15 @@ BEGIN
JOIN tInventory i2 ON i2.itemFk = i.id
SET i.lastUsed = NOW()
WHERE i2.quantity;
-
+
DROP TEMPORARY TABLE tInventory;
END LOOP;
-
+
CLOSE cWarehouses;
UPDATE config SET inventoried = vInventoryDate;
- SET @isModeInventory := FALSE;
-
CREATE OR REPLACE TEMPORARY TABLE tEntryToDelete
(INDEX(entryId)) ENGINE = MEMORY
SELECT e.id entryId,
@@ -254,7 +253,7 @@ BEGIN
WHERE e.supplierFk = vInventorySupplierFk
AND t.shipped IN (sub.shipped);
- DELETE e
+ DELETE e
FROM `entry` e
JOIN tEntryToDelete tmp ON tmp.entryId = e.id;
@@ -262,6 +261,8 @@ BEGIN
FROM travel t
JOIN tEntryToDelete tmp ON tmp.travelId = t.id;
+ SET @isModeInventory := FALSE;
+
DROP TEMPORARY TABLE IF EXISTS tEntryToDelete;
COMMIT;
diff --git a/db/routines/vn/procedures/invoiceFromAddress.sql b/db/routines/vn/procedures/invoiceFromAddress.sql
index bde7afd8c..2879460ce 100644
--- a/db/routines/vn/procedures/invoiceFromAddress.sql
+++ b/db/routines/vn/procedures/invoiceFromAddress.sql
@@ -8,12 +8,15 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
- CREATE TEMPORARY TABLE `tmp.``ticketToInvoice`
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`))
- ENGINE = MEMORY
- SELECT Id_Ticket id FROM vn2008.Tickets WHERE (Fecha BETWEEN vMinDateTicket
- AND vMaxTicketDate) AND Id_Consigna = vAddress
- AND Factura IS NULL AND empresa_id = vCompany;
+ ENGINE = MEMORY
+ SELECT id
+ FROM ticket
+ WHERE (shipped BETWEEN vMinDateTicket AND vMaxTicketDate)
+ AND addressFk = vAddress
+ AND refFk IS NULL
+ AND companyFk = vCompany;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql b/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql
index 5a53b7543..b64996a66 100644
--- a/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql
+++ b/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql
@@ -4,16 +4,7 @@ BEGIN
DECLARE vRate DOUBLE DEFAULT 1;
DECLARE vDated DATE;
DECLARE vExpenseFk VARCHAR(10);
- DECLARE vIsBooked BOOLEAN DEFAULT FALSE;
- SELECT isBooked INTO vIsBooked
- FROM invoiceIn ii
- WHERE id = vInvoiceInFk;
-
- IF vIsBooked THEN
- CALL util.throw('A booked invoice cannot be modified');
- END IF;
-
SELECT MAX(rr.dated) INTO vDated
FROM referenceRate rr
JOIN invoiceIn ii ON ii.id = vInvoiceInFk
diff --git a/db/routines/vn/procedures/invoiceIn_checkBooked.sql b/db/routines/vn/procedures/invoiceIn_checkBooked.sql
new file mode 100644
index 000000000..862870eb4
--- /dev/null
+++ b/db/routines/vn/procedures/invoiceIn_checkBooked.sql
@@ -0,0 +1,22 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceIn_checkBooked`(
+ vSelf INT
+)
+BEGIN
+/**
+ * Comprueba si una factura recibida está contabilizada,
+ * y si lo está retorna un throw.
+ *
+ * @param vSelf Id invoiceIn
+ */
+ DECLARE vIsBooked BOOL;
+
+ SELECT isBooked INTO vIsBooked
+ FROM invoiceIn
+ WHERE id = vSelf;
+
+ IF vIsBooked THEN
+ CALL util.throw('InvoiceIn is already booked');
+ END IF;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/invoiceOut_new.sql b/db/routines/vn/procedures/invoiceOut_new.sql
index 8c35ce75f..1b486df86 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/itemShelvingProblem.sql b/db/routines/vn/procedures/itemShelvingProblem.sql
index 01d9d6b5a..aed7572ee 100644
--- a/db/routines/vn/procedures/itemShelvingProblem.sql
+++ b/db/routines/vn/procedures/itemShelvingProblem.sql
@@ -20,17 +20,17 @@ BEGIN
GREATEST(0,iss.visible - IFNULL(sub3.transit,0)) as Altillo,
s.id as saleFk,
IFNULL(sub3.transit,0) transit,
- v.visible, s.isPicked, s.reserved, t.shipped, tst.productionOrder, mm.Id_Movimiento
- FROM vn.ticket t
- JOIN vn.ticketState tst ON tst.ticketFk = t.id
- JOIN vn.sale s ON s.ticketFk = t.id
- JOIN vn.item i ON i.id = s.itemFk
+ v.visible, s.isPicked, s.reserved, t.shipped, tst.productionOrder, st.saleFk
+ FROM ticket t
+ JOIN ticketState tst ON tst.ticketFk = t.id
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
JOIN cache.visible v ON s.itemFk = v.item_id AND v.calc_id = vVisibleCache
- LEFT JOIN vn2008.Movimientos_mark mm ON mm.Id_Movimiento = s.id AND mm.stateFk = 26
- JOIN vn.itemShelvingStock iss ON iss.itemFk = v.item_id
+ LEFT JOIN saleTracking st ON st.saleFk = s.id AND st.stateFk = 26
+ JOIN itemShelvingStock iss ON iss.itemFk = v.item_id
LEFT JOIN
(SELECT itemFk, sum(saldo) as transit
- FROM vn.itemPlacementSupplyList
+ FROM itemPlacementSupplyList
WHERE saldo > 0
AND sectorFk = vSectorFk
GROUP BY itemFk) sub3 ON sub3.itemFk = i.id
@@ -42,7 +42,7 @@ BEGIN
AND tst.isPreviousPreparable = TRUE
AND t.warehouseFk = vWarehouseFk
AND iss.sectorFk = vSectorFk
- AND mm.Id_Movimiento IS NULL
+ AND st.saleFk IS NULL
ORDER BY itemFk;
END$$
diff --git a/db/routines/vn/procedures/itemShelving_add.sql b/db/routines/vn/procedures/itemShelving_add.sql
index 2a4676b50..0dc7f3098 100644
--- a/db/routines/vn/procedures/itemShelving_add.sql
+++ b/db/routines/vn/procedures/itemShelving_add.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT)
BEGIN
-
+
/**
* Añade registro o lo actualiza si ya existe.
@@ -13,35 +13,24 @@ BEGIN
* @param vGrouping el grouping del producto en itemShelving, NULL para coger el de la ultima compra
* @param vPacking el packing del producto, NULL para coger el de la ultima compra
* @param vWarehouseFk indica el sector
- *
+ *
**/
DECLARE vItemFk INT;
SELECT barcodeToItem(vBarcode) INTO vItemFk;
-
- SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1));
+ 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
-
- INSERT IGNORE INTO parking(code) VALUES(vShelvingFk);
- INSERT INTO shelving(code, parkingFk)
- SELECT vShelvingFk, id
- FROM parking
- WHERE `code` = vShelvingFk COLLATE utf8_unicode_ci;
-
- END IF;
-
- IF (SELECT COUNT(*) FROM itemShelving
- WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
- AND itemFk = vItemFk
+ IF (SELECT COUNT(*) FROM itemShelving
+ WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
+ AND itemFk = vItemFk
AND packing = vPacking) = 1 THEN
UPDATE itemShelving
SET visible = visible+vQuantity
- WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking;
+ WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking;
ELSE
CALL cache.last_buy_refresh(FALSE);
diff --git a/db/routines/vn/procedures/itemShelving_addList.sql b/db/routines/vn/procedures/itemShelving_addList.sql
index c07dd985c..130007de5 100644
--- a/db/routines/vn/procedures/itemShelving_addList.sql
+++ b/db/routines/vn/procedures/itemShelving_addList.sql
@@ -39,7 +39,7 @@ BEGIN
UPDATE vn.itemShelving
SET isChecked = vIsChecked
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
- AND itemFk = vItemFk;
+ AND itemFk = vItemFk AND isChecked IS NULL;
SET vCounter = vCounter + 1;
END WHILE;
diff --git a/db/routines/vn/procedures/itemTrash.sql b/db/routines/vn/procedures/itemTrash.sql
deleted file mode 100644
index bbb30b78a..000000000
--- a/db/routines/vn/procedures/itemTrash.sql
+++ /dev/null
@@ -1,56 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemTrash`(
- vItemFk INT,
- vWarehouseFk INT,
- vQuantity INT,
- vIsTrash BOOLEAN)
-BEGIN
- DECLARE vTicketFk INT;
- DECLARE vClientFk INT;
- DECLARE vCompanyVnlFk INT DEFAULT 442;
- DECLARE vCalc INT;
-
- SELECT barcodeToItem(vItemFk) INTO vItemFk;
-
- SELECT IF(vIsTrash, 200, 400) INTO vClientFk;
-
- SELECT t.id INTO vTicketFk
- FROM ticket t
- JOIN address a ON a.id=t.addressFk
- WHERE t.warehouseFk = vWarehouseFk
- AND t.clientFk = vClientFk
- AND DATE(t.shipped) = util.VN_CURDATE()
- AND a.isDefaultAddress
- LIMIT 1;
-
- CALL cache.visible_refresh(vCalc, TRUE, vWarehouseFk);
-
- IF vTicketFk IS NULL THEN
- CALL ticket_add(
- vClientFk,
- util.VN_CURDATE(),
- vWarehouseFk,
- vCompanyVnlFk,
- NULL,
- NULL,
- NULL,
- util.VN_CURDATE(),
- account.myUser_getId(),
- FALSE,
- vTicketFk);
- END IF;
-
- INSERT INTO sale(ticketFk, itemFk, concept, quantity)
- SELECT vTicketFk,
- vItemFk,
- CONCAT(longName,' ',worker_getCode(), ' ', LEFT(CAST(util.VN_NOW() AS TIME),5)),
- vQuantity
- FROM item
- WHERE id = vItemFk;
-
- UPDATE cache.visible
- SET visible = visible - vQuantity
- WHERE calc_id = vCalc
- AND item_id = vItemFk;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/item_cleanFloramondo.sql b/db/routines/vn/procedures/item_cleanFloramondo.sql
index cae06ee54..080c61b5b 100644
--- a/db/routines/vn/procedures/item_cleanFloramondo.sql
+++ b/db/routines/vn/procedures/item_cleanFloramondo.sql
@@ -101,9 +101,6 @@ BEGIN
DELETE FROM itemCost
WHERE itemFk = vItemOld;
- DELETE FROM vn2008.rec_translator
- WHERE Id_Article = vItemOld;
-
DELETE FROM bs.waste
WHERE itemFk = vItemOld;
diff --git a/db/routines/vn/procedures/item_getBalance.sql b/db/routines/vn/procedures/item_getBalance.sql
index 95596d3bc..a4942af6f 100644
--- a/db/routines/vn/procedures/item_getBalance.sql
+++ b/db/routines/vn/procedures/item_getBalance.sql
@@ -9,7 +9,7 @@ BEGIN
* @vItemFk item a buscar
* @vWarehouseFk almacen donde buscar
* @vDate Si la fecha es null, muestra el histórico desde el inventario.
- * Si la fecha no es null, muestra histórico desde la fecha pasada.
+ * Si la fecha no es null, muestra histórico desde la fecha de vDate.
*/
DECLARE vDateInventory DATETIME;
@@ -40,145 +40,183 @@ BEGIN
inventorySupplierFk INT(10)
);
- INSERT INTO tItemDiary
- SELECT tr.landed shipped,
- b.quantity `in`,
- NULL `out`,
- st.alertLevel ,
- st.name stateName,
- s.name `name`,
- e.invoiceNumber reference,
- e.id origin,
- s.id clientFk,
- IF(st.`code` = 'DELIVERED', TRUE, FALSE) isPicked,
- FALSE isTicket,
- b.id lineFk,
- NULL `order`,
- NULL clientType,
- NULL claimFk,
- ec.inventorySupplierFk
- 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
- JOIN state st ON st.`code` = IF( tr.landed < util.VN_CURDATE()
- OR (util.VN_CURDATE() AND tr.isReceived),
- 'DELIVERED',
- 'FREE')
- JOIN entryConfig ec
- WHERE tr.landed >= vDateInventory
- AND vWarehouseFk = tr.warehouseInFk
- AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
- AND b.itemFk = vItemFk
- AND e.isExcludedFromAvailable = FALSE
- AND e.isRaid = FALSE
- UNION ALL
- SELECT tr.shipped,
- NULL,
- b.quantity,
- st.alertLevel,
- st.name,
- s.name,
- e.invoiceNumber,
- e.id,
- s.id,
- IF(st.`code` = 'DELIVERED' , TRUE, FALSE),
- FALSE,
- b.id,
- NULL,
- NULL,
- NULL,
- ec.inventorySupplierFk
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel tr ON tr.id = e.travelFk
- JOIN warehouse w ON w.id = tr.warehouseOutFk
- JOIN supplier s ON s.id = e.supplierFk
- JOIN state st ON st.`code` = IF(tr.shipped < util.VN_CURDATE()
+ INSERT INTO tItemDiary
+ WITH entriesIn AS (
+ SELECT tr.landed shipped,
+ b.quantity `in`,
+ NULL `out`,
+ st.alertLevel ,
+ st.name stateName,
+ s.name `name`,
+ e.invoiceNumber reference,
+ e.id origin,
+ s.id clientFk,
+ IF(st.`code` = 'DELIVERED', TRUE, FALSE) isPicked,
+ FALSE isTicket,
+ b.id lineFk,
+ NULL `order`,
+ NULL clientType,
+ NULL claimFk,
+ ec.inventorySupplierFk
+ FROM vn.buy b
+ JOIN vn.entry e ON e.id = b.entryFk
+ JOIN vn.travel tr ON tr.id = e.travelFk
+ JOIN vn.supplier s ON s.id = e.supplierFk
+ JOIN vn.state st ON st.`code` = IF( tr.landed < util.VN_CURDATE()
+ OR (util.VN_CURDATE() AND tr.isReceived),
+ 'DELIVERED',
+ 'FREE')
+ JOIN vn.entryConfig ec
+ WHERE tr.landed >= vDateInventory
+ AND vWarehouseFk = tr.warehouseInFk
+ AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
+ AND b.itemFk = vItemFk
+ AND NOT e.isExcludedFromAvailable
+ AND NOT e.isRaid
+ ), entriesOut AS (
+ SELECT tr.shipped,
+ NULL,
+ b.quantity,
+ st.alertLevel,
+ st.name stateName,
+ s.name ,
+ e.invoiceNumber,
+ e.id entryFk,
+ s.id supplierFk,
+ IF(st.`code` = 'DELIVERED' , TRUE, FALSE),
+ FALSE isTicket,
+ b.id,
+ NULL `order`,
+ NULL clientType,
+ NULL claimFk,
+ ec.inventorySupplierFk
+ FROM vn.buy b
+ JOIN vn.entry e ON e.id = b.entryFk
+ JOIN vn.travel tr ON tr.id = e.travelFk
+ JOIN vn.warehouse w ON w.id = tr.warehouseOutFk
+ JOIN vn.supplier s ON s.id = e.supplierFk
+ JOIN vn.state st ON st.`code` = IF(tr.shipped < util.VN_CURDATE()
OR (tr.shipped = util.VN_CURDATE() AND tr.isReceived),
- 'DELIVERED',
- 'FREE')
- JOIN entryConfig ec
- WHERE tr.shipped >= vDateInventory
- AND vWarehouseFk = tr.warehouseOutFk
- AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
- AND b.itemFk = vItemFk
- AND e.isExcludedFromAvailable = FALSE
- AND w.isFeedStock = FALSE
- AND e.isRaid = FALSE
- UNION ALL
- SELECT DATE(t.shipped),
- NULL,
- s.quantity,
- st2.alertLevel,
- st2.name,
- t.nickname,
- t.refFk,
- t.id,
- t.clientFk,
- stk.id,
- TRUE,
- s.id,
- st.`order`,
- c.typeFk,
- cb.claimFk,
- NULL
- FROM sale s
- JOIN ticket t ON t.id = s.ticketFk
- LEFT JOIN ticketState ts ON ts.ticketFk = t.id
- LEFT JOIN state st ON st.`code` = ts.`code`
- JOIN client c ON c.id = t.clientFk
- JOIN state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
- 'DELIVERED',
- IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
- 'FREE',
- IFNULL(ts.code, 'FREE')))
- LEFT JOIN state stPrep ON stPrep.`code` = 'PREPARED'
- LEFT JOIN saleTracking stk ON stk.saleFk = s.id
- AND stk.stateFk = stPrep.id
- LEFT JOIN claimBeginning cb ON s.id = cb.saleFk
- WHERE t.shipped >= vDateInventory
- AND s.itemFk = vItemFk
- AND vWarehouseFk =t.warehouseFk
- ORDER BY shipped,
- (inventorySupplierFk = clientFk) DESC,
- alertLevel DESC,
- isTicket,
- `order` DESC,
- isPicked DESC,
- `in` DESC,
- `out` DESC;
+ 'DELIVERED',
+ 'FREE')
+ JOIN vn.entryConfig ec
+ WHERE tr.shipped >= vDateInventory
+ AND vWarehouseFk = tr.warehouseOutFk
+ AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
+ AND b.itemFk = vItemFk
+ AND NOT e.isExcludedFromAvailable
+ AND NOT w.isFeedStock
+ AND NOT e.isRaid
+ ), sales AS (
+ SELECT DATE(t.shipped) shipped,
+ s.quantity,
+ st2.alertLevel,
+ st2.name,
+ t.nickname,
+ t.refFk,
+ t.id ticketFk,
+ t.clientFk,
+ s.id saleFk,
+ st.`order`,
+ c.typeFk,
+ cb.claimFk
+ FROM vn.sale s
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
+ LEFT JOIN vn.state st ON st.`code` = ts.`code`
+ JOIN vn.client c ON c.id = t.clientFk
+ JOIN vn.state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
+ 'DELIVERED',
+ IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
+ 'FREE',
+ IFNULL(ts.code, 'FREE')))
+ LEFT JOIN vn.claimBeginning cb ON s.id = cb.saleFk
+ WHERE t.shipped >= vDateInventory
+ AND s.itemFk = vItemFk
+ AND vWarehouseFk = t.warehouseFk
+ ),sale AS (
+ SELECT s.shipped,
+ NULL `in`,
+ s.quantity,
+ s.alertLevel,
+ s.name,
+ s.nickname,
+ s.refFk,
+ s.ticketFk,
+ s.clientFk,
+ IF(stk.saleFk, TRUE, NULL),
+ TRUE,
+ s.saleFk,
+ s.`order`,
+ s.typeFk,
+ s.claimFk,
+ NULL
+ FROM sales s
+ LEFT JOIN vn.state stPrep ON stPrep.`code` = 'PREPARED'
+ LEFT JOIN vn.saleTracking stk ON stk.saleFk = s.saleFk
+ AND stk.stateFk = stPrep.id
+ GROUP BY s.saleFk
+ ) SELECT shipped,
+ `in`,
+ `out`,
+ alertLevel,
+ stateName,
+ `name`,
+ reference,
+ origin,
+ clientFk,
+ isPicked,
+ isTicket,
+ lineFk,
+ `order`,
+ clientType,
+ claimFk,
+ inventorySupplierFk
+ FROM entriesIn
+ UNION ALL
+ SELECT * FROM entriesOut
+ UNION ALL
+ SELECT * FROM sale
+ ORDER BY shipped,
+ (inventorySupplierFk = clientFk) DESC,
+ alertLevel DESC,
+ isTicket,
+ `order` DESC,
+ isPicked DESC,
+ `in` DESC,
+ `out` DESC;
IF vDate IS NULL THEN
-
+
SET @a := 0;
SET @currentLineFk := 0;
SET @shipped := '';
- SELECT DATE(@shipped:= shipped) shipped,
- alertLevel,
- stateName,
- origin,
- reference,
- clientFk,
- name,
- `in` invalue,
- `out`,
- @a := @a + IFNULL(`in`, 0) - IFNULL(`out`, 0) balance,
+ SELECT DATE(@shipped:= t.shipped) shipped,
+ t.alertLevel,
+ t.stateName,
+ t.origin,
+ t.reference,
+ t.clientFk,
+ t.name,
+ t.`in` invalue,
+ t.`out`,
+ @a := @a + IFNULL(t.`in`, 0) - IFNULL(t.`out`, 0) balance,
@currentLineFk := IF (@shipped < util.VN_CURDATE()
- OR (@shipped = util.VN_CURDATE() AND (isPicked OR a.`code` >= 'ON_PREPARATION')),
- lineFk,
+ OR (@shipped = util.VN_CURDATE() AND (t.isPicked OR a.`code` >= 'ON_PREPARATION')),
+ t.lineFk,
@currentLineFk) lastPreparedLineFk,
- isTicket,
- lineFk,
- isPicked,
- clientType,
- claimFk
- FROM tItemDiary
- LEFT JOIN alertLevel a ON a.id = tItemDiary.alertLevel;
+ t.isTicket,
+ t.lineFk,
+ t.isPicked,
+ t.clientType,
+ t.claimFk,
+ t.`order`
+ FROM tItemDiary t
+ LEFT JOIN alertLevel a ON a.id = t.alertLevel;
ELSE
- SELECT SUM(`in`) - SUM(`out`) INTO @a
+ SELECT IFNULL(SUM(IFNULL(`in`, 0)) - SUM(IFNULL(`out`, 0)), 0) INTO @a
FROM tItemDiary
WHERE shipped < vDate;
@@ -197,7 +235,8 @@ BEGIN
0 lineFk,
0 isPicked,
0 clientType,
- 0 claimFk
+ 0 claimFk,
+ NULL `order`
UNION ALL
SELECT shipped,
alertlevel,
@@ -213,11 +252,12 @@ BEGIN
lineFk,
isPicked,
clientType,
- claimFk
+ claimFk,
+ `order`
FROM tItemDiary
WHERE shipped >= vDate;
END IF;
-
+
DROP TEMPORARY TABLE tItemDiary;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/item_getSimilar.sql b/db/routines/vn/procedures/item_getSimilar.sql
index a61898756..b0f3ca40e 100644
--- a/db/routines/vn/procedures/item_getSimilar.sql
+++ b/db/routines/vn/procedures/item_getSimilar.sql
@@ -21,9 +21,6 @@ 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,
typeFk,
@@ -60,8 +57,13 @@ BEGIN
(i.value8 <=> its.value8) match8,
a.available,
IFNULL(ip.counter, 0) `counter`,
- IF(b.groupingMode = 1, b.grouping, b.packing) minQuantity,
- iss.visible located
+ CASE
+ WHEN b.groupingMode = 'grouping' THEN b.grouping
+ WHEN b.groupingMode = 'packing' THEN b.packing
+ ELSE 1
+ END AS minQuantity,
+ iss.visible located,
+ b.price2
FROM vn.item i
JOIN cache.available a ON a.item_id = i.id
AND a.calc_id = vCalcFk
@@ -77,7 +79,7 @@ BEGIN
AND iss.warehouseFk = vWarehouseFk
JOIN itemTags its
WHERE a.available > 0
- AND IF(vShowType, i.typeFk = its.typeFk, TRUE)
+ AND (i.typeFk = its.typeFk OR NOT vShowType)
AND i.id <> vSelf
ORDER BY `counter` DESC,
(t.name = its.name) DESC,
diff --git a/db/routines/vn/procedures/item_setVisibleDiscard.sql b/db/routines/vn/procedures/item_setVisibleDiscard.sql
index 1cc2a8871..0a6c54971 100644
--- a/db/routines/vn/procedures/item_setVisibleDiscard.sql
+++ b/db/routines/vn/procedures/item_setVisibleDiscard.sql
@@ -13,6 +13,7 @@ BEGIN
* @param vQuantity a dar de alta/baja
* @param vAddressFk id address
*/
+
DECLARE vTicketFk INT;
DECLARE vClientFk INT;
DECLARE vDefaultCompanyFk INT;
@@ -23,17 +24,17 @@ BEGIN
SELECT DEFAULT(companyFk) INTO vDefaultCompanyFk
FROM vn.ticket LIMIT 1;
-
- IF vAddressFk IS NULL THEN
+
+ IF vAddressFk IS NULL THEN
SELECT pc.shortageAddressFk INTO vAddressShortage
FROM productionConfig pc ;
- ELSE
+ ELSE
SET vAddressShortage = vAddressFk;
END IF;
SELECT a.clientFk INTO vClientFk
FROM address a
- WHERE a.id = vAddressFk;
+ WHERE a.id = vAddressShortage;
SELECT t.id INTO vTicketFk
FROM ticket t
@@ -65,7 +66,7 @@ BEGIN
INSERT INTO sale(ticketFk, itemFk, concept, quantity)
SELECT vTicketFk,
vItemFk,
- CONCAT(longName,' ', worker_getCode(), ' ', LEFT(CAST(util.VN_NOW() AS TIME),5)),
+ name,
vQuantity
FROM item
WHERE id = vItemFk;
diff --git a/db/routines/vn/procedures/packingListPrinted.sql b/db/routines/vn/procedures/packingListPrinted.sql
deleted file mode 100644
index 473ead5be..000000000
--- a/db/routines/vn/procedures/packingListPrinted.sql
+++ /dev/null
@@ -1,13 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`packingListPrinted`(ticketFk INT)
-BEGIN
-
- UPDATE vn2008.Movimientos_mark mm
- JOIN vn2008.Movimientos m ON m.Id_Movimiento = mm.Id_Movimiento
- SET mm.valor = 2 -- Impreso
- WHERE mm.valor = 1 -- Listo para imprimir
- AND mm.stateFk = 9 -- Encajando
- AND m.Id_Ticket = ticketFk;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/packingListSwitch.sql b/db/routines/vn/procedures/packingListSwitch.sql
index 65384827c..0883a7b6d 100644
--- a/db/routines/vn/procedures/packingListSwitch.sql
+++ b/db/routines/vn/procedures/packingListSwitch.sql
@@ -5,14 +5,14 @@ BEGIN
DECLARE valueFk INT;
DECLARE encajando INT DEFAULT 9;
- SELECT valor INTO valueFk
- FROM vn2008.Movimientos_mark
- WHERE Id_Movimiento = saleFk
+ SELECT isChecked INTO valueFk
+ FROM saleTracking
+ WHERE saleFk = saleFk
AND stateFk = encajando;
SET valueFk = (IFNULL(valueFk,0) + 1) MOD 3;
- REPLACE vn2008.Movimientos_mark(Id_Movimiento, valor, Id_Trabajador, stateFk)
+ REPLACE saleTracking(saleFk, isChecked, workerFk, stateFk)
VALUES(saleFk,valueFk,account.myUser_getId(),encajando);
diff --git a/db/routines/vn/procedures/raidUpdate.sql b/db/routines/vn/procedures/raidUpdate.sql
new file mode 100644
index 000000000..703c14e5c
--- /dev/null
+++ b/db/routines/vn/procedures/raidUpdate.sql
@@ -0,0 +1,31 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`raidUpdate`()
+BEGIN
+/**
+ * Actualiza el travel de las entradas de redadas
+ */
+ UPDATE entry e
+ JOIN entryVirtual ev ON ev.entryFk = e.id
+ JOIN travel t ON t.id = e.travelFk
+ JOIN (
+ SELECT *
+ FROM (
+ SELECT t.id, t.landed, tt.warehouseInFk, tt.warehouseOutFk
+ FROM travel t
+ JOIN (
+ SELECT t.warehouseInFk, t.warehouseOutFk
+ FROM entryVirtual ev
+ JOIN entry e ON e.id = ev.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ GROUP BY t.warehouseInFk, t.warehouseOutFk
+ ) tt ON t.warehouseInFk = tt.warehouseInFk AND t.warehouseOutFk = tt.warehouseOutFk
+ WHERE shipped > util.VN_CURDATE() AND NOT isDelivered
+ ORDER BY t.landed
+ LIMIT 10000000000000000000
+ ) t
+ GROUP BY t.warehouseInFk, t.warehouseOutFk
+ ) tt ON t.warehouseInFk = tt.warehouseInFk AND t.warehouseOutFk = tt.warehouseOutFk
+ SET e.travelFk = t.id;
+
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/rateView.sql b/db/routines/vn/procedures/rateView.sql
new file mode 100644
index 000000000..d840aa9d5
--- /dev/null
+++ b/db/routines/vn/procedures/rateView.sql
@@ -0,0 +1,38 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`rateView`()
+BEGIN
+/**
+ * Muestra información sobre tasas de cambio de Dolares
+ */
+ SELECT
+ t.year año,
+ t.month mes,
+ pay.dollars dolares,
+ pay.changePractical cambioPractico,
+ CAST(SUM(iit.foreignValue ) / SUM(iit.taxableBase) AS DECIMAL(5,4))cambioTeorico,
+ pay.changeOfficial cambioOficial
+ FROM invoiceIn ii
+ JOIN time t ON t.dated = ii.issued
+ JOIN invoiceInTax iit ON ii.id = iit.invoiceInFk
+ JOIN
+ ( SELECT
+ t.year,
+ t.month,
+ CAST(SUM(p.divisa) AS DECIMAL(10,2)) dollars,
+ CAST(SUM(p.divisa) / SUM(p.amount) AS DECIMAL(5,4)) changePractical,
+ CAST(rr.value * 0.998 AS DECIMAL(5,4)) changeOfficial
+ FROM payment p
+ JOIN time t ON t.dated = p.received
+ JOIN referenceRate rr ON rr.dated = p.received
+ JOIN currency c ON c.id = rr.currencyFk
+ WHERE p.divisa
+ AND c.code = 'USD'
+ GROUP BY t.year, t.month
+ ) pay ON t.year = pay.year AND t.month = pay.month
+ JOIN currency c ON c.id = ii.currencyFk
+ WHERE c.code = 'USD'
+ AND iit.foreignValue
+ AND iit.taxableBase
+ GROUP BY t.year, t.month;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/recipe_Cook.sql b/db/routines/vn/procedures/recipe_Cook.sql
deleted file mode 100644
index 9371ef820..000000000
--- a/db/routines/vn/procedures/recipe_Cook.sql
+++ /dev/null
@@ -1,74 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`recipe_Cook`(vItemFk INT, vBunchesQuantity INT, vDate DATE)
-BEGIN
-
- DECLARE vCalc INT;
- DECLARE vWarehouseFk INT DEFAULT 1; -- Silla FV
-
- SET @element := '';
- SET @counter := 0;
-
- CALL cache.available_refresh(vCalc, FALSE, vWarehouseFk, vDate);
-
- DROP TEMPORARY TABLE IF EXISTS tmp.recipeCook;
-
- CREATE TEMPORARY TABLE tmp.recipeCook
- SELECT *,
- @counter := IF(@element = element COLLATE utf8_general_ci , @counter + 1, 1) as counter,
- @element := element COLLATE utf8_general_ci
- FROM
- (
- SELECT i.id itemFk,
- CONCAT(i.longName, ' (ref: ',i.id,')') longName,
- i.size,
- i.inkFk,
- a.available,
- r.element,
- vBunchesQuantity * r.quantity as quantity,
- r.itemFk as bunchItemFk,
- IFNULL((i.inkFk = r.inkFk ) ,0)
- + IFNULL((i.size = r.size) ,0)
- + IFNULL((i.name LIKE CONCAT('%',r.name,'%')) ,0)
- + IFNULL((i.longName LIKE CONCAT('%',r.longName,'%')),0)
- + IFNULL((i.typeFk = r.typeFk),0) as matches,
- i.typeFk,
- rl.previousSelected
- FROM vn.recipe r
- JOIN vn.item i ON (IFNULL(i.name LIKE CONCAT('%',r.name,'%'), 0)
- OR IFNULL(i.longName LIKE CONCAT('%',r.longName,'%'),0))
- OR i.typeFk <=> r.typeFk
- JOIN cache.available a ON a.item_id = i.id AND a.calc_id = vCalc
- LEFT JOIN (SELECT recipe_ItemFk, element as log_element, selected_ItemFk, count(*) as previousSelected
- FROM vn.recipe_log
- GROUP BY recipe_ItemFk, element, selected_ItemFk) rl ON rl.recipe_ItemFk = r.itemFk
- AND rl.log_element = r.element
- AND rl.selected_ItemFk = i.id
- WHERE r.itemFk = vItemFk
- AND a.available > vBunchesQuantity * r.quantity
- UNION ALL
- SELECT 100 itemFk,
- CONCAT('? ',r.element,' ',IFNULL(r.size,''),' ',IFNULL(r.inkFk,'')) as longName,
- NULL,
- NULL,
- 0,
- r.element,
- vBunchesQuantity * r.quantity as quantity,
- r.itemFk as bunchItemFk,
- -1 as matches,
- r.typeFk,
- NULL
- FROM vn.recipe r
- WHERE r.itemFk = vItemFk
- GROUP BY r.element
- ) sub
-
- ORDER BY element, matches DESC, previousSelected DESC;
-
- SELECT *
- FROM tmp.recipeCook
- WHERE counter < 6
- OR itemFk = 100
- ;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/riskAllClients.sql b/db/routines/vn/procedures/riskAllClients.sql
deleted file mode 100644
index 66c0a0dd5..000000000
--- a/db/routines/vn/procedures/riskAllClients.sql
+++ /dev/null
@@ -1,29 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`riskAllClients`(maxRiskDate DATE)
-BEGIN
-
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list;
- CREATE TEMPORARY TABLE tmp.client_list
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT id Id_Cliente, null grade FROM vn.client;
-
- CALL vn2008.risk_vs_client_list(maxRiskDate);
-
- SELECT
- c.RazonSocial,
- c.Id_Cliente,
- c.Credito,
- CAST(r.risk as DECIMAL (10,2)) risk,
- CAST(c.Credito - r.risk as DECIMAL (10,2)) Diferencia,
- c.Id_Pais
- 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
- GROUP BY c.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/boxPicking_print.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql
similarity index 95%
rename from db/routines/vn/procedures/boxPicking_print.sql
rename to db/routines/vn/procedures/sale_boxPickingPrint.sql
index 5eea4ee1e..dbb3b6c14 100644
--- a/db/routines/vn/procedures/boxPicking_print.sql
+++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql
@@ -1,12 +1,12 @@
DELIMITER $$
$$
-CREATE OR REPLACE PROCEDURE vn.sale_boxPickingPrint(
+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 INT,
+ IN vPackagingFk VARCHAR(10),
IN vPackingSiteFk INT)
BEGIN
/** Splits a line of sale to a different ticket and prints the transport sticker
@@ -61,6 +61,8 @@ BEGIN
w1: WHILE vQuantity >= vPacking DO
+ SET vQuantity = vQuantity - vPacking;
+
SET vItemShelvingFk = NULL;
SELECT sub.id
@@ -191,7 +193,7 @@ w1: WHILE vQuantity >= vPacking DO
ELSE
UPDATE itemShelvingSale
SET saleFk = vNewSaleFk
- WHERE id = vItemShelvingSaleFk;
+ WHERE id = vItemShelvingSaleFk;
END IF;
ELSE
INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price)
@@ -209,6 +211,7 @@ w1: WHILE vQuantity >= vPacking DO
UPDATE itemShelvingSale
SET saleFk = vNewSaleFk
WHERE id = vItemShelvingSaleFk;
+
END IF;
INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk)
@@ -235,7 +238,7 @@ w1: WHILE vQuantity >= vPacking DO
)
SELECT vAgencyModeFk,
vNewTicketFk,
- i.id,
+ pc.defaultFreightItemFk,
vUserFk,
vPackagingFk,
ps.code,
@@ -246,9 +249,8 @@ w1: WHILE vQuantity >= vPacking DO
NOW()
FROM packingSite ps
JOIN host h ON h.id = ps.hostFk
- JOIN item i ON i.name = 'Shipping cost'
- WHERE ps.id = vPackingSiteFk
- LIMIT 1;
+ JOIN productionConfig pc
+ WHERE ps.id = vPackingSiteFk;
SET vExpeditionFk = LAST_INSERT_ID();
@@ -277,6 +279,7 @@ w1: WHILE vQuantity >= vPacking DO
DELETE FROM sale
WHERE quantity = 0
AND id = vSaleFk;
+
END WHILE;
END$$
diff --git a/db/routines/vn/procedures/sale_getProblems.sql b/db/routines/vn/procedures/sale_getProblems.sql
index bf02e2401..c17eefbf9 100644
--- a/db/routines/vn/procedures/sale_getProblems.sql
+++ b/db/routines/vn/procedures/sale_getProblems.sql
@@ -34,7 +34,7 @@ BEGIN
ticketFk INT(11),
saleFk INT(11),
isFreezed INTEGER(1) DEFAULT 0,
- risk DECIMAL(10,2) DEFAULT 0,
+ risk DECIMAL(10,1) DEFAULT 0,
hasHighRisk TINYINT(1) DEFAULT 0,
hasTicketRequest INTEGER(1) DEFAULT 0,
itemShortage VARCHAR(255),
diff --git a/db/routines/vn/procedures/sale_replaceItem.sql b/db/routines/vn/procedures/sale_replaceItem.sql
index 82c5d1ec2..a4aefc088 100644
--- a/db/routines/vn/procedures/sale_replaceItem.sql
+++ b/db/routines/vn/procedures/sale_replaceItem.sql
@@ -13,7 +13,7 @@ BEGIN
DECLARE vWarehouseFk SMALLINT;
DECLARE vDate DATE;
DECLARE vGrouping INT;
- DECLARE vGroupingModeFk INT;
+ DECLARE vGroupingMode VARCHAR(255);
DECLARE vPacking INT;
DECLARE vRoundQuantity INT DEFAULT 1;
DECLARE vLanded DATE;
@@ -23,8 +23,6 @@ BEGIN
DECLARE vOldPrice DECIMAL(10,2);
DECLARE vOption VARCHAR(255);
DECLARE vNewSaleFk INT;
- DECLARE vForceToGrouping INT DEFAULT 1;
- DECLARE vForceToPacking INT DEFAULT 2;
DECLARE vFinalPrice DECIMAL(10,2);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
@@ -58,15 +56,15 @@ BEGIN
CALL buyUltimate(vWarehouseFk, vDate);
SELECT `grouping`, groupingMode, packing
- INTO vGrouping,vGroupingModeFk,vPacking
+ INTO vGrouping,vGroupingMode,vPacking
FROM buy b
JOIN tmp.buyUltimate tmp ON b.id = tmp.buyFk
WHERE tmp.itemFk = vNewItemFk AND tmp.WarehouseFk = vWarehouseFk;
- IF vGroupingModeFk = vForceToPacking AND vPacking > 0 THEN
+ IF vGroupingMode = 'packing' AND vPacking > 0 THEN
SET vRoundQuantity = vPacking;
END IF;
- IF vGroupingModeFk = vForceToGrouping AND vGrouping > 0 THEN
+ IF vGroupingMode = 'grouping' AND vGrouping > 0 THEN
SET vRoundQuantity = vGrouping;
END IF;
@@ -96,7 +94,8 @@ BEGIN
START TRANSACTION;
UPDATE sale
- SET quantity = quantity - vQuantity
+ SET originalQuantity = quantity - vQuantity,
+ quantity = quantity - vQuantity
WHERE id = vSaleFk;
INSERT INTO vn.sale(ticketFk,
@@ -106,7 +105,8 @@ BEGIN
price)
SELECT vTicketFk,
vNewItemFk,
- CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, CONCAT('+ ', i.name),
+ CEIL(vQuantity / vRoundQuantity) * vRoundQuantity,
+ CONCAT('+ ', i.name),
vFinalPrice
FROM vn.item i
WHERE id = vNewItemFk;
diff --git a/db/routines/vn/procedures/ticketCalculateClon.sql b/db/routines/vn/procedures/ticketCalculateClon.sql
index 7ded84f45..a56491590 100644
--- a/db/routines/vn/procedures/ticketCalculateClon.sql
+++ b/db/routines/vn/procedures/ticketCalculateClon.sql
@@ -29,7 +29,7 @@ BEGIN
FROM sale
WHERE ticketFk = vTicketNew AND price > 0;
- CALL sale_recalcComponent('imbalance');
+ CALL sale_recalcComponent('buyerDiscount');
DROP TEMPORARY TABLE IF EXISTS tmp.recalculateSales;
diff --git a/db/routines/vn/procedures/ticketRequest_Add.sql b/db/routines/vn/procedures/ticketRequest_Add.sql
deleted file mode 100644
index 5ba347fef..000000000
--- a/db/routines/vn/procedures/ticketRequest_Add.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticketRequest_Add`(vDescription VARCHAR(255), vQuantity INT, vPrice DOUBLE, vTicketFk INT, vBuyerCode VARCHAR(3))
-BEGIN
-
- INSERT INTO vn.ticketRequest(description,
- quantity,
- price,
- ticketFk,
- buyerCode,
- requesterFk)
- VALUES(vDescription,
- vQuantity,
- vPrice,
- vTicketFk,
- vBuyerCode,
- vn.getUser());
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_canAdvance.sql b/db/routines/vn/procedures/ticket_canAdvance.sql
index 8852a3010..d1ca7b5e2 100644
--- a/db/routines/vn/procedures/ticket_canAdvance.sql
+++ b/db/routines/vn/procedures/ticket_canAdvance.sql
@@ -8,38 +8,14 @@ BEGIN
* @param vDateToAdvance Fecha a cuando se quiere adelantar.
* @param vWarehouseFk Almacén
*/
- DECLARE vDateInventory DATE;
- SELECT inventoried INTO vDateInventory FROM config;
-
- CREATE OR REPLACE TEMPORARY TABLE tmp.stock
- (itemFk INT PRIMARY KEY,
- amount INT)
- ENGINE = MEMORY;
-
- INSERT INTO tmp.stock(itemFk, amount)
- SELECT itemFk, SUM(quantity) amount FROM
- (
- SELECT itemFk, quantity
- FROM itemTicketOut
- WHERE shipped >= vDateInventory
- AND shipped < vDateFuture
- AND warehouseFk = vWarehouseFk
- UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryIn
- WHERE landed >= vDateInventory
- AND landed <= vDateToAdvance
- AND isVirtualStock = FALSE
- AND warehouseInFk = vWarehouseFk
- UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryOut
- WHERE shipped >= vDateInventory
- AND shipped < vDateFuture
- AND warehouseOutFk = vWarehouseFk
- ) t
- GROUP BY itemFk HAVING amount != 0;
+ CALL item_getStock(vWarehouseFk, vDateToAdvance, NULL);
+ CALL item_getMinacum(
+ vWarehouseFk,
+ vDateToAdvance,
+ DATEDIFF(DATE_SUB(vDateFuture, INTERVAL 1 DAY), vDateToAdvance),
+ NULL
+ );
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id))
@@ -87,7 +63,7 @@ BEGIN
count(s.id) futureLines,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
- SUM((s.quantity <= IFNULL(st.amount,0))) hasStock,
+ SUM(s.quantity <= (IFNULL(il.stock,0) + IFNULL(im.amount, 0))) hasStock,
z.id futureZoneFk,
z.name futureZoneName,
st.classColor,
@@ -107,7 +83,9 @@ BEGIN
JOIN agencyMode am ON t.agencyModeFk = am.id
JOIN zone z ON t.zoneFk = z.id
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
- LEFT JOIN tmp.stock st ON st.itemFk = i.id
+ LEFT JOIN tmp.itemMinacum im ON im.itemFk = i.id
+ AND im.warehouseFk = vWarehouseFk
+ LEFT JOIN tmp.itemList il ON il.itemFk = i.id
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
AND t.warehouseFk = vWarehouseFk
GROUP BY t.id
@@ -146,6 +124,8 @@ BEGIN
) dest ON dest.addressFk = origin.addressFk
WHERE origin.hasStock;
- DROP TEMPORARY TABLE tmp.stock;
+ DROP TEMPORARY TABLE IF EXISTS
+ tmp.itemList,
+ tmp.itemMinacum;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_close.sql b/db/routines/vn/procedures/ticket_close.sql
index 91e0979cd..47d748ddf 100644
--- a/db/routines/vn/procedures/ticket_close.sql
+++ b/db/routines/vn/procedures/ticket_close.sql
@@ -63,7 +63,7 @@ BEGIN
INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity)
(SELECT vCurTicketFk, p.id, COUNT(*)
FROM expedition e
- JOIN packaging p ON p.itemFk = e.freightItemFk
+ JOIN packaging p ON p.id = e.packagingFk
WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable
AND vWithPackage
GROUP BY p.itemFk);
diff --git a/db/routines/vn/procedures/ticket_doCmr.sql b/db/routines/vn/procedures/ticket_doCmr.sql
index 5789d09de..2da8464b4 100644
--- a/db/routines/vn/procedures/ticket_doCmr.sql
+++ b/db/routines/vn/procedures/ticket_doCmr.sql
@@ -1,5 +1,5 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doCmr`(vSelf INT)
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doCmr`(vSelf INT)
BEGIN
/**
* Crea u actualiza la información del CMR asociado con
@@ -7,7 +7,7 @@ BEGIN
*
* @param vSelf El id del ticket
*/
- DECLARE vCmrFk, vPreviousCmrFk, vCurrentCmrFk INT;
+ DECLARE vCmrFk INT;
SELECT cmrFk INTO vCmrFk
FROM ticket
WHERE id = vSelf;
@@ -29,7 +29,6 @@ BEGIN
JOIN province p ON p.id = a.provinceFk
JOIN country co ON co.id = p.countryFk
JOIN agencyMode am ON am.id = t.agencyModeFk
- JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
JOIN warehouse w ON w.id = t.warehouseFk
JOIN company com ON com.id = t.companyFk
JOIN client c2 ON c2.id = com.clientFk
@@ -38,17 +37,13 @@ BEGIN
LEFT JOIN route r ON r.id = t.routeFk
LEFT JOIN worker wo ON wo.id = r.workerFk
LEFT JOIN vehicle v ON v.id = r.vehicleFk
- WHERE t.shipped BETWEEN util.yesterday() AND util.dayEnd(util.VN_CURDATE())
- AND al.code IN ('PACKED', 'DELIVERED')
+ WHERE al.code IN ('PACKED', 'DELIVERED')
AND co.code <> 'ES'
AND am.name <> 'ABONO'
AND w.code = 'ALG'
- AND dm.code = 'DELIVERY'
AND t.id = vSelf
GROUP BY t.id;
- START TRANSACTION;
-
IF vCmrFk THEN
UPDATE cmr c
JOIN tTicket t
@@ -60,9 +55,7 @@ BEGIN
c.supplierFk = t.supplierFk,
c.ead = t.landed
WHERE id = vCmrFk;
- ELSE
- SELECT MAX(id) INTO vPreviousCmrFk FROM cmr;
-
+ ELSE
INSERT INTO cmr (
senderInstruccions,
truckPlate,
@@ -73,17 +66,14 @@ BEGIN
ead
)
SELECT * FROM tTicket;
-
- SELECT MAX(id) INTO vCurrentCmrFk FROM cmr;
- IF vPreviousCmrFk <> vCurrentCmrFk THEN
+ IF (SELECT EXISTS(SELECT * FROM tTicket)) THEN
UPDATE ticket
- SET cmrFk = vCurrentCmrFk
+ SET cmrFk = LAST_INSERT_ID()
WHERE id = vSelf;
END IF;
END IF;
- COMMIT;
DROP TEMPORARY TABLE tTicket;
-END$$
-DELIMITER ;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_doRecalc.sql b/db/routines/vn/procedures/ticket_doRecalc.sql
deleted file mode 100644
index 1dd2a05cb..000000000
--- a/db/routines/vn/procedures/ticket_doRecalc.sql
+++ /dev/null
@@ -1,53 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doRecalc`()
-proc: BEGIN
-/**
- * Recalculates modified ticket.
- */
- DECLARE vDone BOOL;
- DECLARE vTicketFk INT;
-
- DECLARE cCur CURSOR FOR
- SELECT DISTINCT ticketFk FROM tTicket;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
-
- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('vn.ticket_doRecalc');
- ROLLBACK;
- RESIGNAL;
- END;
-
- IF !GET_LOCK('vn.ticket_doRecalc', 0) THEN
- LEAVE proc;
- END IF;
-
- DROP TEMPORARY TABLE IF EXISTS tTicket;
- CREATE TEMPORARY TABLE tTicket
- ENGINE = MEMORY
- SELECT id, ticketFk FROM ticketRecalc;
-
- OPEN cCur;
-
- myLoop: LOOP
- SET vDone = FALSE;
- FETCH cCur INTO vTicketFk;
-
- IF vDone THEN
- LEAVE myLoop;
- END IF;
-
- CALL ticket_recalc(vTicketFk, NULL);
- END LOOP;
-
- CLOSE cCur;
-
- DELETE tr FROM ticketRecalc tr JOIN tTicket t ON tr.id = t.id;
-
- DROP TEMPORARY TABLE tTicket;
-
- DO RELEASE_LOCK('vn.ticket_doRecalc');
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_getMovable.sql b/db/routines/vn/procedures/ticket_getMovable.sql
index eee165538..512151bd4 100644
--- a/db/routines/vn/procedures/ticket_getMovable.sql
+++ b/db/routines/vn/procedures/ticket_getMovable.sql
@@ -21,7 +21,7 @@ BEGIN
WHERE t.id = vTicketFk;
-- Añadimos un dia más para calcular el stock hasta vNewShipped inclusive
- CALL item_getStock(vWarehouseFk, DATE_ADD(vNewShipped, INTERVAL 1 DAY), NULL);
+ CALL item_getStock(vWarehouseFk, vNewShipped, NULL);
CALL item_getMinacum(
vWarehouseFk,
vNewShipped,
@@ -38,7 +38,7 @@ BEGIN
s.discount,
i.image,
i.subName,
- il.stock + IFNULL(im.amount, 0) AS movable
+ IFNULL(il.stock,0) + IFNULL(im.amount, 0) AS movable
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
@@ -48,8 +48,8 @@ BEGIN
WHERE t.id = vTicketFk;
DROP TEMPORARY TABLE IF EXISTS
- tmp.itemList,
- tmp.itemMinacum;
+ tmp.itemList,
+ tmp.itemMinacum;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_recalcByScope.sql b/db/routines/vn/procedures/ticket_recalcByScope.sql
new file mode 100644
index 000000000..41105fe23
--- /dev/null
+++ b/db/routines/vn/procedures/ticket_recalcByScope.sql
@@ -0,0 +1,40 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_recalcByScope`(
+ vScope VARCHAR(255),
+ vId INT
+)
+BEGIN
+/**
+ * Recalculates tickets in an scope.
+ *
+ * @param vScope The scope name
+ * @param vId The scope id
+ */
+ DECLARE vDone BOOL;
+ DECLARE vTicketFk INT;
+
+ DECLARE cTickets CURSOR FOR
+ SELECT id FROM ticket
+ WHERE refFk IS NULL
+ AND ((vScope = 'client' AND clientFk = vId)
+ OR (vScope = 'address' AND addressFk = vId));
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND
+ SET vDone = TRUE;
+
+ OPEN cTickets;
+
+ myLoop: LOOP
+ SET vDone = FALSE;
+ FETCH cTickets INTO vTicketFk;
+
+ IF vDone THEN
+ LEAVE myLoop;
+ END IF;
+
+ CALL ticket_recalc(vTicketFk, NULL);
+ END LOOP;
+
+ CLOSE cTickets;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_requestRecalc.sql b/db/routines/vn/procedures/ticket_requestRecalc.sql
deleted file mode 100644
index 6636e4c0f..000000000
--- a/db/routines/vn/procedures/ticket_requestRecalc.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_requestRecalc`(vSelf INT)
-proc: BEGIN
-/**
- * Adds a request to recalculate the ticket total.
- *
- * @param vSelf The ticket identifier
- */
- IF vSelf IS NULL THEN
- LEAVE proc;
- END IF;
-
- INSERT INTO ticketRecalc SET ticketFk = vSelf;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/travel_doRecalc.sql b/db/routines/vn/procedures/travel_doRecalc.sql
deleted file mode 100644
index 5d877174c..000000000
--- a/db/routines/vn/procedures/travel_doRecalc.sql
+++ /dev/null
@@ -1,34 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_doRecalc`()
-proc: BEGIN
-/**
-* Recounts the number of entries of changed travels.
-*/
- DECLARE vTravelFk INT;
-
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('vn.ticket_doRecalc');
- END;
-
- IF !GET_LOCK('vn.travel_doRecalc', 0) THEN
- LEAVE proc;
- END IF;
-
- CREATE OR REPLACE TEMPORARY TABLE tTravel
- ENGINE = MEMORY
- SELECT travelFk FROM travelRecalc;
-
- UPDATE travel t
- JOIN tTravel tt ON tt.travelFk = t.id
- SET t.totalEntries = (
- SELECT COUNT(e.id)
- FROM entry e
- WHERE e.travelFk = t.id
- );
-
- DELETE tr FROM travelRecalc tr JOIN tTravel t ON tr.travelFk = t.travelFk;
- DROP TEMPORARY TABLE tTravel;
- DO RELEASE_LOCK('vn.travel_doRecalc');
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/travel_recalc.sql b/db/routines/vn/procedures/travel_recalc.sql
new file mode 100644
index 000000000..46d1cdc4f
--- /dev/null
+++ b/db/routines/vn/procedures/travel_recalc.sql
@@ -0,0 +1,17 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_recalc`(vSelf INT)
+proc: BEGIN
+/**
+ * Updates the number of entries assigned to the travel.
+ *
+ * @param vSelf The travel id
+ */
+ UPDATE travel
+ SET totalEntries = (
+ SELECT COUNT(id)
+ FROM entry
+ WHERE travelFk = vSelf
+ )
+ WHERE id = vSelf;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/travel_requestRecalc.sql b/db/routines/vn/procedures/travel_requestRecalc.sql
deleted file mode 100644
index 5797f2397..000000000
--- a/db/routines/vn/procedures/travel_requestRecalc.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_requestRecalc`(vSelf INT)
-proc: BEGIN
-/**
- * Adds a request to recount the number of entries for the travel.
- *
- * @param vSelf The travel reference
- */
- IF vSelf IS NULL THEN
- LEAVE proc;
- END IF;
-
- INSERT IGNORE INTO travelRecalc SET travelFk = vSelf;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/workerTimeControl_clockIn.sql b/db/routines/vn/procedures/workerTimeControl_clockIn.sql
index e58528487..a1ce53bc2 100644
--- a/db/routines/vn/procedures/workerTimeControl_clockIn.sql
+++ b/db/routines/vn/procedures/workerTimeControl_clockIn.sql
@@ -121,15 +121,17 @@ BEGIN
CALL util.throw(vErrorCode);
END IF;
+
-- DIRECCION CORRECTA
CALL workerTimeControl_direction(vWorkerFk, vTimed);
IF (SELECT
- IF(IF(option1 IN ('inMiddle', 'outMiddle'),
+ IF((IF(option1 IN ('inMiddle', 'outMiddle'),
'middle',
option1) <> vDirection
AND IF(option2 IN ('inMiddle', 'outMiddle'),
'middle',
- IFNULL(option2, '')) <> vDirection,
+ IFNULL(option2, '')) <> vDirection)
+ OR (option1 IS NULL AND option2 IS NULL),
TRUE ,
FALSE)
FROM tmp.workerTimeControlDirection
@@ -137,12 +139,17 @@ BEGIN
SET vIsError = TRUE;
END IF;
- DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
+
IF vIsError THEN
SET vErrorCode = 'WRONG_DIRECTION';
+ IF(SELECT option1 IS NULL AND option2 IS NULL
+ FROM tmp.workerTimeControlDirection) THEN
+
+ SET vErrorCode = 'DAY_MAX_TIME';
+ END IF;
CALL util.throw(vErrorCode);
END IF;
-
+ DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
-- FICHADAS IMPARES
SELECT timed INTO vLastIn
FROM workerTimeControl
diff --git a/db/routines/vn/procedures/workerTimeControl_direction.sql b/db/routines/vn/procedures/workerTimeControl_direction.sql
index ce44b9703..f7a68e1e4 100644
--- a/db/routines/vn/procedures/workerTimeControl_direction.sql
+++ b/db/routines/vn/procedures/workerTimeControl_direction.sql
@@ -26,7 +26,7 @@ BEGIN
FROM workerTimeControl
WHERE userFk = vWorkerFk
AND direction = 'middle'
- AND timed BETWEEN vLastIn AND util.VN_NOW();
+ AND timed BETWEEN vLastIn AND vTimed;
DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlDirection;
CREATE TEMPORARY TABLE tmp.workerTimeControlDirection
diff --git a/db/routines/vn/procedures/zone_getAddresses.sql b/db/routines/vn/procedures/zone_getAddresses.sql
index 1412c7ab3..ce7b0204e 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/accountReconciliation_beforeInsert.sql b/db/routines/vn/triggers/accountReconciliation_beforeInsert.sql
index c586dc57e..4fedd62b8 100644
--- a/db/routines/vn/triggers/accountReconciliation_beforeInsert.sql
+++ b/db/routines/vn/triggers/accountReconciliation_beforeInsert.sql
@@ -3,13 +3,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`accountReconciliation
BEFORE INSERT ON `accountReconciliation`
FOR EACH ROW
- SET NEW.calculatedCode = REPLACE(
- REPLACE(
- REPLACE(
- REPLACE(
- CONCAT(NEW.supplierAccountFk,NEW.operationDated,NEW.amount,NEW.concept,NEW.debitCredit)
- ,' ','')
- ,":",'')
- ,'-','')
- ,'.','')$$
-DELIMITER ;
+ SET NEW.calculatedCode = REGEXP_REPLACE(
+ CONCAT(NEW.supplierAccountFk,
+ NEW.operationDated,
+ NEW.amount,
+ NEW.concept,
+ CAST(NEW.debitCredit AS UNSIGNED)
+ ),
+ '[ :\\-.]', ''
+ )$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/triggers/address_afterUpdate.sql b/db/routines/vn/triggers/address_afterUpdate.sql
index 6160aa2a5..ab5e03882 100644
--- a/db/routines/vn/triggers/address_afterUpdate.sql
+++ b/db/routines/vn/triggers/address_afterUpdate.sql
@@ -5,36 +5,32 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`address_afterUpdate`
BEGIN
-- Recargos de equivalencia distintos implican facturacion por consignatario
IF NEW.isEqualizated != OLD.isEqualizated THEN
- IF
+ IF
(SELECT COUNT(*) FROM
(
SELECT DISTINCT (isEqualizated = FALSE) as Equ
- FROM address
+ FROM address
WHERE clientFk = NEW.clientFk
) t1
) > 1
- THEN
- UPDATE client
+ THEN
+ UPDATE client
SET hasToInvoiceByAddress = TRUE
WHERE id = NEW.clientFk;
END IF;
END IF;
+
IF NEW.isDefaultAddress AND NEW.isActive = FALSE THEN
CALL util.throw ('Cannot desactivate the default address');
END IF;
- IF NOT (NEW.isEqualizated <=> OLD.isEqualizated) THEN
- INSERT IGNORE INTO ticketRecalc (ticketFk)
- SELECT id FROM ticket t
- WHERE t.addressFk = NEW.id
- AND t.refFk IS NULL;
- END IF;
-
- IF (NEW.clientFk <> OLD.clientFk OR NEW.isActive <> OLD.isActive OR NOT (NEW.provinceFk <=> OLD.provinceFk))
- AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
- UPDATE client
+ IF (NEW.clientFk <> OLD.clientFk
+ OR NEW.isActive <> OLD.isActive
+ OR NOT (NEW.provinceFk <=> OLD.provinceFk))
+ AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
+ UPDATE client
SET hasToInvoiceByAddress = TRUE
WHERE id = NEW.clientFk;
- END IF;
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/agency_beforeInsert.sql b/db/routines/vn/triggers/agency_beforeInsert.sql
new file mode 100644
index 000000000..8ff3958e1
--- /dev/null
+++ b/db/routines/vn/triggers/agency_beforeInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`agency_beforeInsert`
+ BEFORE INSERT ON `agency`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/buy_afterDelete.sql b/db/routines/vn/triggers/buy_afterDelete.sql
index 2fcb0852d..5daaefa33 100644
--- a/db/routines/vn/triggers/buy_afterDelete.sql
+++ b/db/routines/vn/triggers/buy_afterDelete.sql
@@ -3,19 +3,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`buy_afterDelete`
AFTER DELETE ON `buy`
FOR EACH ROW
trig: BEGIN
- DECLARE vValues VARCHAR(255);
-
IF @isModeInventory OR @isTriggerDisabled THEN
LEAVE trig;
END IF;
- CALL stock.log_add('buy', NULL, OLD.id);
-
INSERT INTO entryLog
SET `action` = 'delete',
`changedModel` = 'Buy',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/buy_afterInsert.sql b/db/routines/vn/triggers/buy_afterInsert.sql
index 25682f1bb..b39842d35 100644
--- a/db/routines/vn/triggers/buy_afterInsert.sql
+++ b/db/routines/vn/triggers/buy_afterInsert.sql
@@ -7,8 +7,6 @@ trig: BEGIN
LEAVE trig;
END IF;
- CALL stock.log_add('buy', NEW.id, NULL);
-
CALL buy_afterUpsert(NEW.id);
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/buy_afterUpdate.sql b/db/routines/vn/triggers/buy_afterUpdate.sql
index 9866f5bb8..fc7ca152d 100644
--- a/db/routines/vn/triggers/buy_afterUpdate.sql
+++ b/db/routines/vn/triggers/buy_afterUpdate.sql
@@ -12,14 +12,6 @@ trig: BEGIN
LEAVE trig;
END IF;
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.entryFk <=> OLD.entryFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.created <=> OLD.created) THEN
- CALL stock.log_add('buy', NEW.id, OLD.id);
- END IF;
-
CALL buy_afterUpsert(NEW.id);
SELECT w.isBuyerToBeEmailed, t.landed
diff --git a/db/routines/vn/triggers/buy_beforeInsert.sql b/db/routines/vn/triggers/buy_beforeInsert.sql
index bc51ac852..6ad72916b 100644
--- a/db/routines/vn/triggers/buy_beforeInsert.sql
+++ b/db/routines/vn/triggers/buy_beforeInsert.sql
@@ -6,7 +6,7 @@ trig: BEGIN
DECLARE vWarehouse INT;
DECLARE vLanding DATE;
DECLARE vGrouping INT;
- DECLARE vGroupingMode TINYINT;
+ DECLARE vGroupingMode VARCHAR(255);
DECLARE vGenericFk INT;
DECLARE vGenericInDate BOOL;
DECLARE vBuyerFk INT;
diff --git a/db/routines/vn/triggers/client_afterUpdate.sql b/db/routines/vn/triggers/client_afterUpdate.sql
index 481b00007..8bca36d63 100644
--- a/db/routines/vn/triggers/client_afterUpdate.sql
+++ b/db/routines/vn/triggers/client_afterUpdate.sql
@@ -4,20 +4,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`client_afterUpdate`
FOR EACH ROW
BEGIN
IF !(NEW.defaultAddressFk <=> OLD.defaultAddressFk) THEN
- UPDATE `address` SET isDefaultAddress = 0
+ UPDATE `address` SET isDefaultAddress = FALSE
WHERE clientFk = NEW.id;
-
- UPDATE `address` SET isDefaultAddress = 1
- WHERE id = NEW.defaultAddressFk;
+
+ UPDATE `address` SET isDefaultAddress = TRUE
+ WHERE id = NEW.defaultAddressFk;
END IF;
- IF NOT (NEW.provinceFk <=> OLD.provinceFk) OR NOT (NEW.isVies <=> OLD.isVies) THEN
- INSERT IGNORE INTO ticketRecalc (ticketFk)
- SELECT id FROM ticket t
- WHERE t.clientFk = NEW.id
- AND t.refFk IS NULL;
- END IF;
-
IF NOT NEW.isActive THEN
UPDATE account.`user`
SET active = FALSE
diff --git a/db/routines/vn/triggers/entry_afterDelete.sql b/db/routines/vn/triggers/entry_afterDelete.sql
index 5c246651d..c723930fa 100644
--- a/db/routines/vn/triggers/entry_afterDelete.sql
+++ b/db/routines/vn/triggers/entry_afterDelete.sql
@@ -8,7 +8,5 @@ BEGIN
`changedModel` = 'Entry',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
- CALL travel_requestRecalc(OLD.travelFk);
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/entry_afterInsert.sql b/db/routines/vn/triggers/entry_afterInsert.sql
deleted file mode 100644
index 79563c17f..000000000
--- a/db/routines/vn/triggers/entry_afterInsert.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_afterInsert`
- AFTER INSERT ON `entry`
- FOR EACH ROW
-BEGIN
- CALL travel_requestRecalc(NEW.travelFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/triggers/entry_afterUpdate.sql b/db/routines/vn/triggers/entry_afterUpdate.sql
index 60adc0003..47d61ed30 100644
--- a/db/routines/vn/triggers/entry_afterUpdate.sql
+++ b/db/routines/vn/triggers/entry_afterUpdate.sql
@@ -3,24 +3,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_afterUpdate`
AFTER UPDATE ON `entry`
FOR EACH ROW
BEGIN
- IF NOT(NEW.id <=> OLD.id)
- OR NOT(NEW.travelFk <=> OLD.travelFk)
- OR NOT(NEW.isRaid <=> OLD.isRaid) THEN
- CALL stock.log_add('entry', NEW.id, OLD.id);
- END IF;
-
- IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
- CALL travel_requestRecalc(OLD.travelFk);
- CALL travel_requestRecalc(NEW.travelFk);
- END IF;
-
-
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
FROM buy b
WHERE b.entryFk = NEW.id;
-
+
CALL buy_checkItem();
END IF;
END$$
diff --git a/db/routines/vn/triggers/entry_beforeUpdate.sql b/db/routines/vn/triggers/entry_beforeUpdate.sql
index 98ebe1364..d56db5e01 100644
--- a/db/routines/vn/triggers/entry_beforeUpdate.sql
+++ b/db/routines/vn/triggers/entry_beforeUpdate.sql
@@ -6,9 +6,19 @@ BEGIN
DECLARE vIsVirtual BOOL;
DECLARE vPrintedCount INT;
DECLARE vHasDistinctWarehouses BOOL;
+ DECLARE vTotalBuy INT;
IF NEW.isBooked = OLD.isBooked THEN
CALL entry_checkBooked(OLD.id);
+ ELSE
+ IF NEW.isBooked THEN
+ SELECT COUNT(*) INTO vTotalBuy
+ FROM buy
+ WHERE entryFk = NEW.id;
+ IF NOT vTotalBuy THEN
+ CALL util.throw('Entry must have lines to be marked booked');
+ END IF;
+ END IF;
END IF;
SET NEW.editorFk = account.myUser_getId();
@@ -16,7 +26,7 @@ BEGIN
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');
+ CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries');
END IF;
SELECT COUNT(*) > 0 INTO vIsVirtual
diff --git a/db/routines/vn/triggers/invoiceIn_afterUpdate.sql b/db/routines/vn/triggers/invoiceIn_afterUpdate.sql
index b1308393c..1a9105c9e 100644
--- a/db/routines/vn/triggers/invoiceIn_afterUpdate.sql
+++ b/db/routines/vn/triggers/invoiceIn_afterUpdate.sql
@@ -3,7 +3,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceIn_afterUpdate
AFTER UPDATE ON `invoiceIn`
FOR EACH ROW
BEGIN
-
IF NEW.issued != OLD.issued
OR NEW.currencyFk != OLD.currencyFk THEN
diff --git a/db/routines/vn/triggers/invoiceIn_beforeDelete.sql b/db/routines/vn/triggers/invoiceIn_beforeDelete.sql
new file mode 100644
index 000000000..2ffff923a
--- /dev/null
+++ b/db/routines/vn/triggers/invoiceIn_beforeDelete.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceIn_beforeDelete`
+ BEFORE DELETE ON `invoiceIn`
+ FOR EACH ROW
+BEGIN
+ CALL invoiceIn_checkBooked(OLD.id);
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/sale_afterDelete.sql b/db/routines/vn/triggers/sale_afterDelete.sql
index fab1c52cd..6365208b2 100644
--- a/db/routines/vn/triggers/sale_afterDelete.sql
+++ b/db/routines/vn/triggers/sale_afterDelete.sql
@@ -12,9 +12,6 @@ BEGIN
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
- CALL stock.log_add('sale', NULL, OLD.id);
- CALL ticket_requestRecalc(OLD.ticketFk);
-
SELECT account.myUser_getName() INTO vUserRole;
SELECT account.user_getMysqlRole(vUserRole) INTO vUserRole;
diff --git a/db/routines/vn/triggers/sale_afterInsert.sql b/db/routines/vn/triggers/sale_afterInsert.sql
index d4c2d60f5..b5b28257f 100644
--- a/db/routines/vn/triggers/sale_afterInsert.sql
+++ b/db/routines/vn/triggers/sale_afterInsert.sql
@@ -7,11 +7,7 @@ BEGIN
CALL util.throw('Cannot insert a service item into a ticket');
END IF;
- CALL stock.log_add('sale', NEW.id, NULL);
- CALL ticket_requestRecalc(NEW.ticketFk);
-
IF NEW.quantity > 0 THEN
-
UPDATE vn.collection c
JOIN vn.ticketCollection tc ON tc.collectionFk = c.id
AND tc.ticketFk = NEW.ticketFk
diff --git a/db/routines/vn/triggers/sale_afterUpdate.sql b/db/routines/vn/triggers/sale_afterUpdate.sql
index 0d21f08d7..3f59c9188 100644
--- a/db/routines/vn/triggers/sale_afterUpdate.sql
+++ b/db/routines/vn/triggers/sale_afterUpdate.sql
@@ -6,24 +6,6 @@ BEGIN
DECLARE vIsToSendMail BOOL;
DECLARE vUserRole VARCHAR(255);
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.created <=> OLD.created)
- OR !(NEW.isPicked <=> OLD.isPicked) THEN
- CALL stock.log_add('sale', NEW.id, OLD.id);
- END IF;
-
- IF !(NEW.price <=> OLD.price)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.discount <=> OLD.discount) THEN
- CALL ticket_requestRecalc(NEW.ticketFk);
- CALL ticket_requestRecalc(OLD.ticketFk);
- END IF;
-
IF !(OLD.ticketFk <=> NEW.ticketFk) THEN
UPDATE ticketRequest SET ticketFk = NEW.ticketFk
WHERE saleFk = NEW.id;
diff --git a/db/routines/vn/triggers/solunionCAP_afterInsert.sql b/db/routines/vn/triggers/solunionCAP_afterInsert.sql
index 8524689a7..0d6e510ad 100644
--- a/db/routines/vn/triggers/solunionCAP_afterInsert.sql
+++ b/db/routines/vn/triggers/solunionCAP_afterInsert.sql
@@ -3,8 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`solunionCAP_afterInse
AFTER INSERT ON `solunionCAP`
FOR EACH ROW
BEGIN
- UPDATE vn2008.Clientes c
- JOIN creditClassification cc ON c.Id_Cliente = cc.client
+ UPDATE client c
+ JOIN creditClassification cc ON cc.client = c.id
JOIN creditInsurance ci ON ci.creditClassification = cc.id
SET creditInsurance = ci.credit * 2 WHERE ci.id = NEW.creditInsurance;
END$$
diff --git a/db/routines/vn/triggers/solunionCAP_afterUpdate.sql b/db/routines/vn/triggers/solunionCAP_afterUpdate.sql
index 688241515..40ff57f35 100644
--- a/db/routines/vn/triggers/solunionCAP_afterUpdate.sql
+++ b/db/routines/vn/triggers/solunionCAP_afterUpdate.sql
@@ -4,13 +4,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`solunionCAP_afterUpda
FOR EACH ROW
BEGIN
IF NEW.dateLeaving IS NOT NULL THEN
- UPDATE vn2008.Clientes c
- JOIN creditClassification cc ON c.Id_Cliente = cc.client
+ UPDATE client c
+ JOIN creditClassification cc ON cc.client = c.id
JOIN creditInsurance ci ON ci.creditClassification = cc.id
SET creditInsurance = ci.credit WHERE ci.id = OLD.creditInsurance;
ELSE
- UPDATE vn2008.Clientes c
- JOIN creditClassification cc ON c.Id_Cliente = cc.client
+ UPDATE client c
+ JOIN creditClassification cc ON cc.client = c.id
JOIN creditInsurance ci ON ci.creditClassification = cc.id
SET creditInsurance = ci.credit * 2 WHERE ci.id = OLD.creditInsurance;
END IF;
diff --git a/db/routines/vn/triggers/solunionCAP_beforeDelete.sql b/db/routines/vn/triggers/solunionCAP_beforeDelete.sql
index 85d65a949..29c4298fd 100644
--- a/db/routines/vn/triggers/solunionCAP_beforeDelete.sql
+++ b/db/routines/vn/triggers/solunionCAP_beforeDelete.sql
@@ -3,8 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`solunionCAP_beforeDel
BEFORE DELETE ON `solunionCAP`
FOR EACH ROW
BEGIN
- UPDATE vn2008.Clientes c
- JOIN creditClassification cc ON c.Id_Cliente = cc.client
+ UPDATE client c
+ JOIN creditClassification cc ON cc.client = c.id
JOIN creditInsurance ci ON ci.creditClassification = cc.id
SET creditInsurance = ci.credit WHERE ci.id = OLD.creditInsurance;
END$$
diff --git a/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql b/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql
index a58955e0d..f47a7ae35 100644
--- a/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql
+++ b/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql
@@ -4,7 +4,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketPackaging_befor
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
- SET NEW.workerFk = account.myUser_getId();
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketRequest_beforeInsert.sql b/db/routines/vn/triggers/ticketRequest_beforeInsert.sql
index d17459912..00e659abc 100644
--- a/db/routines/vn/triggers/ticketRequest_beforeInsert.sql
+++ b/db/routines/vn/triggers/ticketRequest_beforeInsert.sql
@@ -14,7 +14,7 @@ BEGIN
END IF;
IF NEW.attenderFk IS NULL THEN
- SET NEW.attenderFk = (SELECT w.id FROM worker w WHERE w.code = NEW.buyerCode);
+ SET NEW.attenderFk = (SELECT defaultAttenderFk FROM ticketConfig LIMIT 1);
END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql b/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql
index e5e9c307e..954df8ed3 100644
--- a/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql
+++ b/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql
@@ -12,9 +12,5 @@ BEGIN
IF NEW.salesPersonCode <> OLD.salesPersonCode THEN
SET NEW.requesterFk = (SELECT w.id FROM worker w WHERE w.code = NEW.salesPersonCode);
END IF;
-
- IF NEW.buyerCode <> OLD.buyerCode THEN
- SET NEW.attenderFk = (SELECT w.id FROM worker w WHERE w.code = NEW.buyerCode);
- END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketService_afterDelete.sql b/db/routines/vn/triggers/ticketService_afterDelete.sql
index 11d5aaf24..ca2675ce8 100644
--- a/db/routines/vn/triggers/ticketService_afterDelete.sql
+++ b/db/routines/vn/triggers/ticketService_afterDelete.sql
@@ -8,8 +8,5 @@ BEGIN
`changedModel` = 'TicketService',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
- CALL ticket_requestRecalc(OLD.ticketFk);
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketService_afterInsert.sql b/db/routines/vn/triggers/ticketService_afterInsert.sql
deleted file mode 100644
index b9142ff72..000000000
--- a/db/routines/vn/triggers/ticketService_afterInsert.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketService_afterInsert`
- AFTER INSERT ON `ticketService`
- FOR EACH ROW
-BEGIN
-
- CALL ticket_requestRecalc(NEW.ticketFk);
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketService_afterUpdate.sql b/db/routines/vn/triggers/ticketService_afterUpdate.sql
deleted file mode 100644
index ecc9e9a5a..000000000
--- a/db/routines/vn/triggers/ticketService_afterUpdate.sql
+++ /dev/null
@@ -1,13 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketService_afterUpdate`
- AFTER UPDATE ON `ticketService`
- FOR EACH ROW
-BEGIN
- IF !(NEW.price <=> OLD.price)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.quantity <=> OLD.quantity) THEN
- CALL ticket_requestRecalc(NEW.ticketFk);
- CALL ticket_requestRecalc(OLD.ticketFk);
- END IF;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/triggers/ticket_afterUpdate.sql b/db/routines/vn/triggers/ticket_afterUpdate.sql
index df939c9d1..0ce13e0a5 100644
--- a/db/routines/vn/triggers/ticket_afterUpdate.sql
+++ b/db/routines/vn/triggers/ticket_afterUpdate.sql
@@ -3,24 +3,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticket_afterUpdate`
AFTER UPDATE ON `ticket`
FOR EACH ROW
BEGIN
-
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.warehouseFk <=> OLD.warehouseFk)
- OR !(NEW.shipped <=> OLD.shipped) THEN
- CALL stock.log_add('ticket', NEW.id, OLD.id);
- END IF;
-
- IF !(NEW.clientFk <=> OLD.clientFk)
- OR !(NEW.addressFk <=> OLD.addressFk)
- OR !(NEW.companyFk <=> OLD.companyFk) THEN
- CALL ticket_requestRecalc(NEW.id);
- END IF;
-
IF NEW.routeFk <> OLD.routeFk THEN
- UPDATE expedition
+ UPDATE expedition
SET hasNewRoute = TRUE
WHERE ticketFk = NEW.id;
+
+ CALL ticket_doCmr(NEW.id);
END IF;
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/travel_afterUpdate.sql b/db/routines/vn/triggers/travel_afterUpdate.sql
index 38cd3ba13..7cfe865f3 100644
--- a/db/routines/vn/triggers/travel_afterUpdate.sql
+++ b/db/routines/vn/triggers/travel_afterUpdate.sql
@@ -3,10 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`travel_afterUpdate`
AFTER UPDATE ON `travel`
FOR EACH ROW
BEGIN
- CALL stock.log_add('travel', NEW.id, OLD.id);
-
IF NOT(NEW.shipped <=> OLD.shipped) THEN
- UPDATE entry
+ UPDATE entry
SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
WHERE travelFk = NEW.id;
END IF;
@@ -15,11 +13,11 @@ BEGIN
IF (SELECT hasWeightVolumetric FROM agencyMode WHERE id = NEW.agencyModeFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
- FROM entry e
+ FROM entry e
JOIN buy b ON b.entryFk = e.id
JOIN item i ON i.id = b.itemFk
WHERE e.travelFk = NEW.id;
-
+
CALL buy_checkItem();
END IF;
END IF;
diff --git a/db/routines/vn/views/especialPrice.sql b/db/routines/vn/views/especialPrice.sql
index 08b9b434a..79d3e1384 100644
--- a/db/routines/vn/views/especialPrice.sql
+++ b/db/routines/vn/views/especialPrice.sql
@@ -1,8 +1,8 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`especialPrice`
-AS SELECT `p`.`Id_PrecioEspecial` AS `id`,
- `p`.`Id_Cliente` AS `clientFk`,
- `p`.`Id_Article` AS `itemFk`,
- `p`.`PrecioEspecial` AS `value`
-FROM `vn2008`.`PreciosEspeciales` `p`
+AS SELECT `sp`.`id` AS `id`,
+ `sp`.`clientFk` AS `clientFk`,
+ `sp`.`itemFk` AS `itemFk`,
+ `sp`.`value` AS `value`
+FROM `vn`.`specialPrice` `sp`
diff --git a/db/routines/vn/views/exchangeInsurance.sql b/db/routines/vn/views/exchangeInsurance.sql
deleted file mode 100644
index 5df3c2f1d..000000000
--- a/db/routines/vn/views/exchangeInsurance.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn`.`exchangeInsurance`
-AS SELECT `vn2008`.`pago_sdc`.`pago_sdc_id` AS `id`,
- `vn2008`.`pago_sdc`.`importe` AS `amount`,
- `vn2008`.`pago_sdc`.`fecha` AS `dated`,
- `vn2008`.`pago_sdc`.`vencimiento` AS `finished`,
- `vn2008`.`pago_sdc`.`entity_id` AS `entityFk`,
- `vn2008`.`pago_sdc`.`ref` AS `ref`,
- `vn2008`.`pago_sdc`.`rate` AS `rate`,
- `vn2008`.`pago_sdc`.`empresa_id` AS `companyFk`,
- `vn2008`.`pago_sdc`.`financialProductTypefk` AS `financialProductTypefk`,
- `vn2008`.`pago_sdc`.`upperBarrier` AS `upperBarrier`,
- `vn2008`.`pago_sdc`.`lowerBarrier` AS `lowerBarrier`,
- `vn2008`.`pago_sdc`.`strike` AS `strike`
-FROM `vn2008`.`pago_sdc`
diff --git a/db/routines/vn/views/paymentExchangeInsurance.sql b/db/routines/vn/views/paymentExchangeInsurance.sql
index 7128144ea..f3e07eaaf 100644
--- a/db/routines/vn/views/paymentExchangeInsurance.sql
+++ b/db/routines/vn/views/paymentExchangeInsurance.sql
@@ -1,16 +1,16 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`paymentExchangeInsurance`
-AS SELECT `p`.`pago_sdc_id` AS `id`,
- `p`.`importe` AS `amount`,
- `p`.`fecha` AS `created`,
- `p`.`vencimiento` AS `dueDay`,
- `p`.`entity_id` AS `entityFk`,
- `p`.`ref` AS `ref`,
- `p`.`rate` AS `rate`,
- `p`.`empresa_id` AS `companyFk`,
- `p`.`financialProductTypefk` AS `financialProductTypefk`,
- `p`.`upperBarrier` AS `upperBarrier`,
- `p`.`lowerBarrier` AS `lowerBarrier`,
- `p`.`strike` AS `strike`
-FROM `vn2008`.`pago_sdc` `p`
+AS SELECT `ei`.`id` AS `pago_sdc_id`,
+ `ei`.`amount` AS `importe`,
+ `ei`.`dated` AS `fecha`,
+ `ei`.`dueDated` AS `vencimiento`,
+ `ei`.`entityFk` AS `entity_id`,
+ `ei`.`ref` AS `ref`,
+ `ei`.`rate` AS `rate`,
+ `ei`.`companyFk` AS `empresa_id`,
+ `ei`.`financialProductTypefk` AS `financialProductTypefk`,
+ `ei`.`upperBarrier` AS `upperBarrier`,
+ `ei`.`lowerBarrier` AS `lowerBarrier`,
+ `ei`.`strike` AS `strike`
+FROM `vn`.`exchangeInsurance` `ei`
diff --git a/db/routines/vn/views/payrollCenter.sql b/db/routines/vn/views/payrollCenter.sql
index fc6635483..dfe7e4728 100644
--- a/db/routines/vn/views/payrollCenter.sql
+++ b/db/routines/vn/views/payrollCenter.sql
@@ -1,12 +1,7 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`payrollCenter`
-AS SELECT `b`.`cod_centro` AS `codCenter`,
- `b`.`Centro` AS `name`,
- `b`.`nss_cotizacion` AS `nss`,
- `b`.`domicilio` AS `street`,
- `b`.`poblacion` AS `city`,
- `b`.`cp` AS `postcode`,
- `b`.`empresa_id` AS `companyFk`,
- `b`.`codempresa` AS `companyCode`
-FROM `vn2008`.`payroll_centros` `b`
+AS SELECT `b`.`workCenterFkA3` AS `codCenter`,
+ `b`.`companyFkA3` AS `companyCode`
+FROM `vn`.`payrollWorkCenter` `b`
+
diff --git a/db/routines/vn/views/promissoryNote.sql b/db/routines/vn/views/promissoryNote.sql
deleted file mode 100644
index a9f047285..000000000
--- a/db/routines/vn/views/promissoryNote.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn`.`promissoryNote`
-AS SELECT `p`.`Id_Pagare` AS `id`,
- `p`.`Concepto` AS `Concept`,
- `p`.`pago_id` AS `paymentFk`
-FROM `vn2008`.`Pagares` `p`
diff --git a/db/routines/vn/views/saleLabel.sql b/db/routines/vn/views/saleLabel.sql
deleted file mode 100644
index 4feae9294..000000000
--- a/db/routines/vn/views/saleLabel.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn`.`saleLabel`
-AS SELECT `ml`.`Id_movimiento` AS `saleFk`,
- `ml`.`label` AS `label`,
- `ml`.`stem` AS `stem`,
- `ml`.`created` AS `created`
-FROM `vn2008`.`movement_label` `ml`
diff --git a/db/routines/vn/views/ticketMRW.sql b/db/routines/vn/views/ticketMRW.sql
deleted file mode 100644
index d612c8742..000000000
--- a/db/routines/vn/views/ticketMRW.sql
+++ /dev/null
@@ -1,47 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn`.`ticketMRW`
-AS SELECT `Tickets`.`Id_Agencia` AS `id_Agencia`,
- `Tickets`.`empresa_id` AS `empresa_id`,
- `Consignatarios`.`consignatario` AS `Consignatario`,
- `Consignatarios`.`domicilio` AS `DOMICILIO`,
- `Consignatarios`.`poblacion` AS `POBLACION`,
- `Consignatarios`.`codPostal` AS `CODPOSTAL`,
- `Consignatarios`.`telefono` AS `telefono`,
- IFNULL(
- IFNULL(
- IFNULL(
- IFNULL(`Consignatarios`.`movil`, `Clientes`.`movil`),
- `Consignatarios`.`telefono`
- ),
- `Clientes`.`telefono`
- ),
- 0
- ) AS `movil`,
- `Clientes`.`if` AS `IF`,
- `Tickets`.`Id_Ticket` AS `Id_Ticket`,
- `Tickets`.`warehouse_id` AS `warehouse_id`,
- `Consignatarios`.`id_consigna` AS `Id_Consigna`,
- `Paises`.`Codigo` AS `CodigoPais`,
- `Tickets`.`Fecha` AS `Fecha`,
- `province`.`province_id` AS `province_id`,
- `Tickets`.`landing` AS `landing`
-FROM (
- (
- (
- (
- `vn2008`.`Clientes`
- JOIN `vn2008`.`Consignatarios` ON(
- `Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`
- )
- )
- JOIN `vn2008`.`Tickets` ON(
- `Consignatarios`.`id_consigna` = `Tickets`.`Id_Consigna`
- )
- )
- JOIN `vn2008`.`province` ON(
- `Consignatarios`.`province_id` = `province`.`province_id`
- )
- )
- JOIN `vn2008`.`Paises` ON(`province`.`Paises_Id` = `Paises`.`Id`)
- )
diff --git a/db/routines/vn/views/ticketToPrepare.sql b/db/routines/vn/views/ticketToPrepare.sql
deleted file mode 100644
index 98302b60d..000000000
--- a/db/routines/vn/views/ticketToPrepare.sql
+++ /dev/null
@@ -1,58 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn`.`ticketToPrepare`
-AS SELECT `m`.`Id_Ticket` AS `Id_Ticket`,
- `mk`.`Id_Movimiento` AS `Id_Movimiento`,
- `mk`.`Id_Movimiento_mark` AS `Id_Movimiento_mark`,
- `mk`.`Id_Trabajador` AS `Id_Trabjador`,
- `m`.`Id_Article` AS `Id_Article`,
- `m`.`Concepte` AS `Concepte`,
- `art`.`subName` AS `subName`,
- `mk`.`original_quantity` - IFNULL(`is`.`quantity`, 0) AS `Cantidad`,
- `mk`.`original_quantity` AS `original_quantity`,
- IF(
- HOUR(`t`.`shipped`),
- HOUR(`t`.`shipped`),
- HOUR(`z`.`hour`)
- ) AS `Hora`,
- HOUR(`t`.`shipped`) AS `Departure`,
- MINUTE(`t`.`shipped`) AS `Minuto`,
- `am`.`agencyFk` AS `agency_id`,
- `t`.`warehouseFk` AS `warehouse_id`,
- `a`.`provinceFk` AS `province_id`,
- `is`.`quantity` AS `picked`,
- `t`.`zoneFk` AS `zoneFk`,
- `p`.`sectorFk` AS `sectorFk`
-FROM (
- (
- (
- (
- (
- (
- (
- (
- (
- (
- `vn2008`.`Movimientos_mark` `mk`
- JOIN `vn2008`.`Movimientos` `m` ON(`m`.`Id_Movimiento` = `mk`.`Id_Movimiento`)
- )
- JOIN `vn`.`ticket` `t` ON(`m`.`Id_Ticket` = `t`.`id`)
- )
- JOIN `vn`.`agencyMode` `am` ON(`am`.`id` = `t`.`agencyModeFk`)
- )
- JOIN `vn`.`address` `a` ON(`a`.`id` = `t`.`addressFk`)
- )
- LEFT JOIN `vn`.`itemShelvingSale` `is` ON(`is`.`saleFk` = `mk`.`Id_Movimiento`)
- )
- LEFT JOIN `vn`.`itemShelving` `ish` ON(`ish`.`id` = `is`.`itemShelvingFk`)
- )
- LEFT JOIN `vn`.`shelving` `sh` ON(`sh`.`code` = `ish`.`shelvingFk`)
- )
- LEFT JOIN `vn`.`parking` `p` ON(`p`.`id` = `sh`.`parkingFk`)
- )
- LEFT JOIN `vn2008`.`Articles` `art` ON(`art`.`Id_Article` = `m`.`Id_Article`)
- )
- LEFT JOIN `vn`.`zone` `z` ON(`z`.`id` = `t`.`zoneFk`)
- )
-WHERE `mk`.`stateFk` = 26
- AND `mk`.`valor` <> 1
diff --git a/db/routines/vn/views/ticketeToPreparePrepared.sql b/db/routines/vn/views/ticketeToPreparePrepared.sql
deleted file mode 100644
index 76e840816..000000000
--- a/db/routines/vn/views/ticketeToPreparePrepared.sql
+++ /dev/null
@@ -1,47 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn`.`ticketeToPreparePrepared`
-AS SELECT `m`.`Id_Ticket` AS `Id_Ticket`,
- `mk`.`Id_Movimiento` AS `Id_Movimiento`,
- `mk`.`Id_Movimiento_mark` AS `Id_Movimiento_mark`,
- `mk`.`Id_Trabajador` AS `Id_Trabjador`,
- `m`.`Id_Article` AS `Id_Article`,
- `m`.`Concepte` AS `Concepte`,
- `art`.`subName` AS `subName`,
- `mk`.`original_quantity` - IFNULL(`is`.`quantity`, 0) AS `Cantidad`,
- `mk`.`original_quantity` AS `original_quantity`,
- HOUR(`t`.`shipped`) AS `Hora`,
- HOUR(`t`.`shipped`) AS `Departure`,
- MINUTE(`t`.`shipped`) AS `Minuto`,
- `am`.`agencyFk` AS `agency_id`,
- `t`.`warehouseFk` AS `warehouse_id`,
- `a`.`provinceFk` AS `province_id`,
- `is`.`quantity` AS `picked`,
- `t`.`CodigoTrabajador` AS `trabajador`,
- `is`.`sectorFk` AS `sectorFk`
-FROM (
- (
- (
- (
- (
- (
- (
- (
- `vn2008`.`Movimientos_mark` `mk`
- JOIN `vn`.`state` `st` ON(`st`.`id` = `mk`.`stateFk`)
- )
- JOIN `vn2008`.`Movimientos` `m` ON(`m`.`Id_Movimiento` = `mk`.`Id_Movimiento`)
- )
- JOIN `vn`.`ticket` `t` ON(`m`.`Id_Ticket` = `t`.`id`)
- )
- JOIN `vn`.`agencyMode` `am` ON(`am`.`id` = `t`.`agencyModeFk`)
- )
- JOIN `vn`.`address` `a` ON(`a`.`id` = `t`.`addressFk`)
- )
- LEFT JOIN `vn`.`itemShelvingSaleSum` `is` ON(`is`.`saleFk` = `mk`.`Id_Movimiento`)
- )
- JOIN `vn2008`.`Articles` `art` ON(`art`.`Id_Article` = `m`.`Id_Article`)
- )
- LEFT JOIN `vn2008`.`Trabajadores` `t` ON(`t`.`Id_Trabajador` = `mk`.`Id_Trabajador`)
- )
-WHERE `st`.`code` LIKE 'PREVIOUS_PREPARATION'
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 94ef0b14b..000000000
--- 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/agencia_volume.sql b/db/routines/vn2008/procedures/agencia_volume.sql
deleted file mode 100644
index ea631793d..000000000
--- 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/article.sql b/db/routines/vn2008/procedures/article.sql
deleted file mode 100644
index 3c2664c0f..000000000
--- 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/article_multiple_buy.sql b/db/routines/vn2008/procedures/article_multiple_buy.sql
deleted file mode 100644
index 5b0d402c5..000000000
--- a/db/routines/vn2008/procedures/article_multiple_buy.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article_multiple_buy`(v_date DATETIME, wh INT)
-BEGIN
- CALL vn.item_multipleBuy(v_date, wh);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/article_multiple_buy_date.sql b/db/routines/vn2008/procedures/article_multiple_buy_date.sql
deleted file mode 100644
index 7b197cb01..000000000
--- a/db/routines/vn2008/procedures/article_multiple_buy_date.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article_multiple_buy_date`(
- IN vDated DATETIME,
- IN vWarehouseFk TINYINT(3)
-)
-BEGIN
- CALL vn.item_multipleBuyByDate(vDated, vWarehouseFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/availableTraslate.sql b/db/routines/vn2008/procedures/availableTraslate.sql
deleted file mode 100644
index a3d2c8bea..000000000
--- a/db/routines/vn2008/procedures/availableTraslate.sql
+++ /dev/null
@@ -1,126 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`availableTraslate`(
- vWarehouseLanding INT,
- vDated DATE,
- vWarehouseShipment INT)
-proc: BEGIN
- DECLARE vDatedFrom DATE;
- DECLARE vDatedTo DATETIME;
- DECLARE vDatedReserve DATETIME;
- DECLARE vDatedInventory DATE;
-
- IF vDated < util.VN_CURDATE() THEN
- LEAVE proc;
- END IF;
-
- CALL vn.item_getStock (vWarehouseLanding, vDated, NULL);
-
- -- Calcula algunos parámetros necesarios
- SET vDatedFrom = TIMESTAMP(vDated, '00:00:00');
- SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59');
- SELECT FechaInventario INTO vDatedInventory FROM tblContadores;
- SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
- FROM hedera.orderConfig;
-
- -- Calcula el ultimo dia de vida para cada producto
- DROP TEMPORARY TABLE IF EXISTS itemRange;
- CREATE TEMPORARY TABLE itemRange
- (PRIMARY KEY (itemFk))
- ENGINE = MEMORY
- SELECT c.itemFk, MAX(t.landed) dated
- FROM vn.buy c
- JOIN vn.entry e ON c.entryFk = e.id
- JOIN vn.travel t ON t.id = e.travelFk
- JOIN vn.warehouse w ON w.id = t.warehouseInFk
- WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
- AND t.warehouseInFk = vWarehouseLanding
- AND NOT e.isExcludedFromAvailable
- AND NOT e.isRaid
- GROUP BY c.itemFk;
-
- -- Tabla con el ultimo dia de last_buy para cada producto que hace un replace de la anterior
- CALL vn.buyUltimate(vWarehouseShipment, util.VN_CURDATE());
-
- INSERT INTO itemRange
- SELECT t.itemFk, tr.landed
- FROM tmp.buyUltimate t
- JOIN vn.buy b ON b.id = t.buyFk
- JOIN vn.entry e ON e.id = b.entryFk
- JOIN vn.travel tr ON tr.id = e.travelFk
- LEFT JOIN itemRange i ON t.itemFk = i.itemFk
- WHERE t.warehouseFk = vWarehouseShipment
- AND NOT e.isRaid
- ON DUPLICATE KEY UPDATE itemRange.dated = GREATEST(itemRange.dated, tr.landed);
-
- DROP TEMPORARY TABLE IF EXISTS itemRangeLive;
- CREATE TEMPORARY TABLE itemRangeLive
- (PRIMARY KEY (itemFk))
- ENGINE = MEMORY
- SELECT ir.itemFk, TIMESTAMP(TIMESTAMPADD(DAY, it.life, ir.dated), '23:59:59') dated
- FROM itemRange ir
- JOIN vn.item i ON i.id = ir.itemFk
- JOIN vn.itemType it ON it.id = i.typeFk
- HAVING dated >= vDatedFrom OR dated IS NULL;
-
- -- Calcula el ATP
- DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
- CREATE TEMPORARY TABLE tmp.itemCalc
- (INDEX (itemFk,warehouseFk))
- ENGINE = MEMORY
- SELECT i.itemFk, vWarehouseLanding warehouseFk, i.shipped dated, i.quantity
- FROM vn.itemTicketOut i
- JOIN itemRangeLive ir ON ir.itemFK = i.itemFk
- WHERE i.shipped >= vDatedFrom
- AND (ir.dated IS NULL OR i.shipped <= ir.dated)
- AND i.warehouseFk = vWarehouseLanding
- UNION ALL
- SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity
- FROM vn.buy b
- JOIN vn.entry e ON b.entryFk = e.id
- JOIN vn.travel t ON t.id = e.travelFk
- JOIN itemRangeLive ir ON ir.itemFk = b.itemFk
- WHERE NOT e.isExcludedFromAvailable
- AND b.quantity <> 0
- AND NOT e.isRaid
- AND t.warehouseInFk = vWarehouseLanding
- AND t.landed >= vDatedFrom
- AND (ir.dated IS NULL OR t.landed <= ir.dated)
- UNION ALL
- SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
- FROM vn.itemEntryOut i
- JOIN itemRangeLive ir ON ir.itemFk = i.itemFk
- WHERE i.shipped >= vDatedFrom
- AND (ir.dated IS NULL OR i.shipped <= ir.dated)
- AND i.warehouseOutFk = vWarehouseLanding
- UNION ALL
- SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
- FROM hedera.order_row r
- JOIN hedera.`order` o ON o.id = r.order_id
- JOIN itemRangeLive ir ON ir.itemFk = r.item_id
- WHERE r.shipment >= vDatedFrom
- AND (ir.dated IS NULL OR r.shipment <= ir.dated)
- AND r.warehouse_id = vWarehouseLanding
- AND r.created >= vDatedReserve
- AND NOT o.confirmed;
-
- CALL vn.item_getAtp(vDated);
-
- DROP TEMPORARY TABLE IF EXISTS availableTraslate;
- CREATE TEMPORARY TABLE availableTraslate
- (PRIMARY KEY (item_id))
- ENGINE = MEMORY
- SELECT t.item_id, SUM(stock) available
- FROM (
- SELECT ti.itemFk item_id, stock
- FROM tmp.itemList ti
- JOIN itemRange ir ON ir.itemFk = ti.itemFk
- UNION ALL
- SELECT itemFk, quantity
- FROM tmp.itemAtp
- ) t
- GROUP BY t.item_id
- HAVING available <> 0;
-
- DROP TEMPORARY TABLE tmp.itemList, itemRange, itemRangeLive;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/balance_create.sql b/db/routines/vn2008/procedures/balance_create.sql
deleted file mode 100644
index 2acd26834..000000000
--- a/db/routines/vn2008/procedures/balance_create.sql
+++ /dev/null
@@ -1,207 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`balance_create`(
- IN vStartingMonth INT,
- IN vEndingMonth INT,
- IN vCompany INT,
- IN vIsConsolidated BOOLEAN,
- IN vInterGroupSalesIncluded BOOLEAN)
-BEGIN
- DECLARE intGAP INT DEFAULT 7;
- DECLARE vYears INT DEFAULT 2;
- DECLARE vYear TEXT;
- DECLARE vOneYearAgo TEXT;
- DECLARE vTwoYearsAgo TEXT;
- DECLARE vQuery TEXT;
- DECLARE vConsolidatedGroup INT;
- DECLARE vStartingDate DATE DEFAULT '2020-01-01';
- DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
- DECLARE vStartingYear INT DEFAULT vCurYear - 2;
- DECLARE vTable TEXT;
-
- SET vTable = util.quoteIdentifier('balance_nest_tree');
- SET vYear = util.quoteIdentifier(vCurYear);
- SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
- SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
-
- -- Solicitamos la tabla tmp.nest, como base para el balance
- DROP TEMPORARY TABLE IF EXISTS tmp.nest;
-
- EXECUTE IMMEDIATE CONCAT(
- 'CREATE TEMPORARY TABLE tmp.nest
- SELECT node.id
- ,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1), node.name) AS name
- ,node.lft
- ,node.rgt
- ,COUNT(parent.id) - 1 as depth
- ,cast((node.rgt - node.lft - 1) / 2 as DECIMAL) as sons
- FROM ', vTable, ' AS node,
- ', vTable, ' AS parent
- WHERE node.lft BETWEEN parent.lft AND parent.rgt
- GROUP BY node.id
- ORDER BY node.lft')
- USING intGAP;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.balance;
- CREATE TEMPORARY TABLE tmp.balance
- SELECT * FROM tmp.nest;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.empresas_receptoras;
- DROP TEMPORARY TABLE IF EXISTS tmp.empresas_emisoras;
-
- SELECT empresa_grupo INTO vConsolidatedGroup
- FROM empresa
- WHERE id = vCompany;
-
- CREATE TEMPORARY TABLE tmp.empresas_receptoras
- SELECT id as empresa_id
- FROM vn2008.empresa
- WHERE id = vCompany
- OR empresa_grupo = IF(vIsConsolidated, vConsolidatedGroup, NULL);
-
- CREATE TEMPORARY TABLE tmp.empresas_emisoras
- SELECT Id_Proveedor as empresa_id FROM vn2008.Proveedores p;
-
- IF vInterGroupSalesIncluded = FALSE THEN
-
- DELETE ee.*
- FROM tmp.empresas_emisoras ee
- JOIN vn2008.empresa e on e.id = ee.empresa_id
- WHERE e.empresa_grupo = vConsolidatedGroup;
-
- END IF;
-
- -- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
- DROP TEMPORARY TABLE IF EXISTS tmp.balance_desglose;
- CREATE TEMPORARY TABLE tmp.balance_desglose
- SELECT er.empresa_id receptora_id,
- ee.empresa_id emisora_id,
- year(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `year`,
- month(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `month`,
- gastos_id Id_Gasto,
- SUM(bi) importe
- FROM recibida r
- JOIN recibida_iva ri on ri.recibida_id = r.id
- JOIN tmp.empresas_receptoras er on er.empresa_id = r.empresa_id
- JOIN tmp.empresas_emisoras ee ON ee.empresa_id = r.proveedor_id
- WHERE IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha)) >= vStartingDate
- AND r.contabilizada
- GROUP BY Id_Gasto, year, month, emisora_id, receptora_id;
-
- INSERT INTO tmp.balance_desglose(
- receptora_id,
- emisora_id,
- year,
- month,
- Id_Gasto,
- importe)
- SELECT gr.empresa_id,
- gr.empresa_id,
- year,
- month,
- Id_Gasto,
- SUM(importe)
- FROM gastos_resumen gr
- JOIN tmp.empresas_receptoras er on gr.empresa_id = er.empresa_id
- WHERE year >= vStartingYear
- AND month BETWEEN vStartingMonth AND vEndingMonth
- GROUP BY Id_Gasto, year, month, gr.empresa_id;
-
- DELETE FROM tmp.balance_desglose
- WHERE month < vStartingMonth
- OR month > vEndingMonth;
-
- -- Ahora el balance
- EXECUTE IMMEDIATE CONCAT(
- 'ALTER TABLE tmp.balance
- ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
- ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
- ADD COLUMN ', vYear,' INT(10) NULL ,
- ADD COLUMN Id_Gasto VARCHAR(10) NULL,
- ADD COLUMN Gasto VARCHAR(45) NULL');
-
- -- Añadimos los gastos, para facilitar el formulario
- UPDATE tmp.balance b
- JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id
- JOIN (SELECT id Id_Gasto, name Gasto
- FROM vn.expense
- GROUP BY id) g ON g.Id_Gasto = bnt.Id_Gasto COLLATE utf8_general_ci
- SET b.Id_Gasto = g.Id_Gasto COLLATE utf8_general_ci
- , b.Gasto = g.Gasto COLLATE utf8_general_ci ;
-
- -- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
- WHILE vYears >= 0 DO
- SET vQuery = CONCAT(
- 'UPDATE tmp.balance b
- JOIN
- (SELECT Id_Gasto, SUM(Importe) as Importe
- FROM tmp.balance_desglose
- WHERE year = ?
- GROUP BY Id_Gasto
- ) sub on sub.Id_Gasto = b.Id_Gasto COLLATE utf8_general_ci
- SET ', util.quoteIdentifier(vCurYear - vYears), ' = - Importe');
-
- EXECUTE IMMEDIATE vQuery
- USING vCurYear - vYears;
-
- SET vYears = vYears - 1;
- END WHILE;
-
- -- Añadimos las ventas
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE tmp.balance b
- JOIN (
- SELECT SUM(IF(year = ?, venta, 0)) y2,
- SUM(IF(year = ?, venta, 0)) y1,
- SUM(IF(year = ?, venta, 0)) y0,
- c.Gasto
- FROM bs.ventas_contables c
- JOIN tmp.empresas_receptoras er on er.empresa_id = c.empresa_id
- WHERE month BETWEEN ? AND ?
- GROUP BY c.Gasto
- ) sub ON sub.Gasto = b.Id_Gasto COLLATE utf8_general_ci
- SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
- b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
- b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
- USING vCurYear-2,
- vCurYear-1,
- vCurYear,
- vStartingMonth,
- vEndingMonth;
-
- -- Ventas intra grupo
- IF NOT vInterGroupSalesIncluded THEN
-
- SELECT lft, rgt INTO @grupoLft, @grupoRgt
- FROM tmp.balance b
- WHERE TRIM(b.`name`) = 'Grupo';
-
- DELETE
- FROM tmp.balance
- WHERE lft BETWEEN @grupoLft AND @grupoRgt;
-
- END IF;
-
- -- Rellenamos el valor de los padres con la suma de los hijos
- DROP TEMPORARY TABLE IF EXISTS tmp.balance_aux;
- CREATE TEMPORARY TABLE tmp.balance_aux
- SELECT * FROM tmp.balance;
-
- EXECUTE IMMEDIATE
- CONCAT('UPDATE tmp.balance b
- JOIN (
- SELECT b1.id,
- b1.name,
- SUM(b2.', vYear,') thisYear,
- SUM(b2.', vOneYearAgo,') oneYearAgo,
- SUM(b2.', vTwoYearsAgo,') twoYearsAgo
- FROM tmp.nest b1
- JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
- GROUP BY b1.id)sub ON sub.id = b.id
- SET b.', vYear, ' = thisYear,
- b.', vOneYearAgo, ' = oneYearAgo,
- b.', vTwoYearsAgo, ' = twoYearsAgo');
-
- SELECT *, CONCAT('',ifnull(Id_Gasto,'')) newgasto
- FROM tmp.balance;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/buy_tarifas.sql b/db/routines/vn2008/procedures/buy_tarifas.sql
deleted file mode 100644
index c6e8dff90..000000000
--- a/db/routines/vn2008/procedures/buy_tarifas.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`buy_tarifas`(vBuyFk INT)
-BEGIN
- CALL vn.buy_recalcPricesByBuy(vBuyFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/buy_tarifas_entry.sql b/db/routines/vn2008/procedures/buy_tarifas_entry.sql
deleted file mode 100644
index 3fc0739e0..000000000
--- a/db/routines/vn2008/procedures/buy_tarifas_entry.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`buy_tarifas_entry`(IN vEntryFk INT(11))
-BEGIN
-/**
- * Recalcula los precios de una entrada
- *
- * @param vEntryFk
- */
- CALL vn.buy_recalcPricesByEntry(vEntryFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/raidUpdate.sql b/db/routines/vn2008/procedures/raidUpdate.sql
deleted file mode 100644
index 9746f3cf9..000000000
--- a/db/routines/vn2008/procedures/raidUpdate.sql
+++ /dev/null
@@ -1,28 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`raidUpdate`()
-BEGIN
-
- UPDATE Entradas e
- JOIN Entradas_Auto ea USING (Id_Entrada)
- JOIN travel t ON t.id = e.travel_id
- JOIN (
- SELECT *
- FROM (
- SELECT id, landing, warehouse_id, warehouse_id_out
- FROM travel
- JOIN (
- SELECT warehouse_id, warehouse_id_out
- FROM Entradas_Auto ea
- JOIN Entradas e USING(Id_Entrada)
- JOIN travel t ON t.id = e.travel_id
- GROUP BY warehouse_id, warehouse_id_out
- ) t USING (warehouse_id, warehouse_id_out)
- WHERE shipment > util.VN_CURDATE() AND delivered = FALSE
- ORDER BY landing
- LIMIT 10000000000000000000
- ) t
- GROUP BY warehouse_id, warehouse_id_out
- ) t USING (warehouse_id, warehouse_id_out)
- SET e.travel_id = t.id;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/rateView.sql b/db/routines/vn2008/procedures/rateView.sql
deleted file mode 100644
index 91e317be6..000000000
--- a/db/routines/vn2008/procedures/rateView.sql
+++ /dev/null
@@ -1,37 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`rateView`()
-BEGIN
-
- SELECT
- t.year as año,
- t.month as mes,
- pagos.dolares,
- pagos.cambioPractico,
- CAST(sum(divisa) / sum(bi) as DECIMAL(5,4)) as cambioTeorico,
- pagos.cambioOficial
- FROM recibida r
- JOIN time t ON t.date = r.fecha
- JOIN recibida_iva ri ON r.id = ri.recibida_id
- JOIN
- (
- SELECT
- t.year as Año,
- t.month as Mes,
- cast(sum(divisa) as DECIMAL(10,2)) as dolares,
- cast(sum(divisa) / sum(importe) as DECIMAL(5,4)) as cambioPractico,
- cast(rr.rate * 0.998 as DECIMAL(5,4)) as cambioOficial
- FROM pago p
- JOIN time t ON t.date = p.fecha
- JOIN reference_rate rr ON rr.date = p.fecha AND moneda_id = 2
- WHERE divisa
- AND fecha >= '2015-01-11'
- GROUP BY t.year, t.month
- ) pagos ON t.year = pagos.Año AND t.month = pagos.Mes
- WHERE moneda_id = 2
- AND fecha >= '2015-01-01'
- AND divisa
- AND bi
- GROUP BY t.year, t.month;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/recobro_credito.sql b/db/routines/vn2008/procedures/recobro_credito.sql
deleted file mode 100644
index 3657f2b9b..000000000
--- a/db/routines/vn2008/procedures/recobro_credito.sql
+++ /dev/null
@@ -1,45 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`recobro_credito`()
-BEGIN
- DECLARE EXIT HANDLER FOR SQLSTATE '45000'
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
- START TRANSACTION;
- UPDATE vn.`client` c
- JOIN vn.payMethod pm ON pm.id = c.payMethodFk
- SET credit = 0
- WHERE pm.`code` = 'card';
-
- DROP TEMPORARY TABLE IF EXISTS clientes_credit;
- CREATE TEMPORARY TABLE clientes_credit
- SELECT Id_Cliente, if (Credito > Recobro ,Credito - Recobro,0) AS newCredit
- FROM (
- SELECT r.Id_Cliente, r.amount AS Recobro,
- timestampadd(DAY, period, UltimaFecha) AS Deadline, sub2.amount AS Credito
- FROM vn2008.recovery r
- JOIN (
- SELECT Id_Cliente, amount , odbc_date AS UltimaFecha
- FROM (
- SELECT * FROM credit
- ORDER BY odbc_date DESC
- LIMIT 10000000000000000000
- ) sub
- GROUP BY Id_Cliente
- ) sub2 USING(Id_Cliente)
- WHERE dend IS NULL or dend >= util.VN_CURDATE()
- GROUP BY Id_Cliente
- HAVING Deadline <= util.VN_CURDATE()
- ) sub3
- WHERE Credito > 0;
-
- UPDATE Clientes
- JOIN clientes_credit USING(Id_Cliente)
- SET Clientes.Credito = newCredit;
-
- DROP TEMPORARY TABLE clientes_credit;
- COMMIT;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/risk_vs_client_list.sql b/db/routines/vn2008/procedures/risk_vs_client_list.sql
deleted file mode 100644
index 92f94eb9f..000000000
--- a/db/routines/vn2008/procedures/risk_vs_client_list.sql
+++ /dev/null
@@ -1,84 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`risk_vs_client_list`(maxRiskDate DATE)
-BEGIN
-/**
- * Calcula el riesgo para los clientes activos de la tabla temporal tmp.client_list
- *
- * @deprecated usar vn.client_getDebt
- * @param maxRiskDate Fecha maxima de los registros
- * @return table tmp.risk
- */
- DECLARE startingDate DATETIME DEFAULT TIMESTAMPADD(DAY, - DAYOFMONTH(util.VN_CURDATE()) - 60, util.VN_CURDATE());
- DECLARE endingDate DATETIME;
- DECLARE MAX_RISK_ALLOWED INT DEFAULT 200;
-
- SET maxRiskDate = IFNULL(maxRiskDate, util.VN_CURDATE());
- SET endingDate = TIMESTAMP(maxRiskDate, '23:59:59');
-
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list_2;
- CREATE TEMPORARY TABLE tmp.client_list_2
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT *
- FROM tmp.client_list;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.client_list_3;
- CREATE TEMPORARY TABLE tmp.client_list_3
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT *
- FROM tmp.client_list;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.tickets_sin_facturar;
- CREATE TEMPORARY TABLE tmp.tickets_sin_facturar
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT t.Id_Cliente, floor(IF(cl.isVies, 1, 1.1) * sum(Cantidad * Preu * (100 - Descuento) / 100)) as total
- FROM Movimientos m
- JOIN Tickets t on m.Id_Ticket = t.Id_Ticket
- JOIN tmp.client_list c on c.Id_Cliente = t.Id_Cliente
- JOIN vn.client cl ON cl.id = t.Id_Cliente
- WHERE Factura IS NULL
- AND Fecha BETWEEN startingDate AND endingDate
- GROUP BY t.Id_Cliente;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.risk;
- CREATE TEMPORARY TABLE tmp.risk
- (PRIMARY KEY (Id_Cliente))
- ENGINE = MEMORY
- SELECT Id_Cliente, SUM(amount) risk, sum(saldo) saldo
- FROM Clientes c
- JOIN (
- SELECT clientFk, SUM(amount) amount,SUM(amount) saldo
- FROM vn.clientRisk
- JOIN tmp.client_list on Id_Cliente = clientFk
- GROUP BY clientFk
- UNION ALL
- SELECT Id_Cliente, SUM(Entregado),SUM(Entregado)
- FROM Recibos
- JOIN tmp.client_list_2 using(Id_Cliente)
- WHERE Fechacobro > endingDate
- GROUP BY Id_Cliente
- UNION ALL
- SELECT Id_Cliente, total,0
- FROM tmp.tickets_sin_facturar
- UNION ALL
- SELECT t.clientFk, CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2)), CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2))
- FROM hedera.tpvTransaction t
- JOIN tmp.client_list_3 on Id_Cliente = t.clientFk
- WHERE t.receiptFk IS NULL
- AND t.status = 'ok'
- GROUP BY t.clientFk
- ) t ON c.Id_Cliente = t.clientFk
- WHERE c.activo != FALSE
- GROUP BY c.Id_Cliente;
-
- DELETE r.*
- FROM tmp.risk r
- JOIN vn2008.Clientes c on c.Id_Cliente = r.Id_Cliente
- JOIN vn2008.pay_met pm on pm.id = c.pay_met_id
- WHERE IFNULL(r.saldo,0) < 10
- AND r.risk <= MAX_RISK_ALLOWED
- AND pm.`name` = 'TARJETA';
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/views/Clientes.sql b/db/routines/vn2008/views/Clientes.sql
index a696cb6e0..153d875bc 100644
--- a/db/routines/vn2008/views/Clientes.sql
+++ b/db/routines/vn2008/views/Clientes.sql
@@ -42,7 +42,6 @@ AS SELECT `c`.`id` AS `id_cliente`,
`c`.`hasInvoiceSimplified` AS `hasInvoiceSimplified`,
`c`.`salesPersonFk` AS `Id_Trabajador`,
`c`.`isVies` AS `vies`,
- `c`.`eypbc` AS `EYPBC`,
`c`.`bankEntityFk` AS `bankEntityFk`,
`c`.`typeFk` AS `typeFk`
FROM `vn`.`client` `c`
diff --git a/db/routines/vn2008/views/Proveedores.sql b/db/routines/vn2008/views/Proveedores.sql
index 0b7ee89f8..203d4295f 100644
--- a/db/routines/vn2008/views/Proveedores.sql
+++ b/db/routines/vn2008/views/Proveedores.sql
@@ -6,7 +6,6 @@ AS SELECT `s`.`id` AS `Id_Proveedor`,
`s`.`account` AS `cuenta`,
`s`.`countryFk` AS `pais_id`,
`s`.`nif` AS `NIF`,
- `s`.`isFarmer` AS `Agricola`,
`s`.`phone` AS `Telefono`,
`s`.`retAccount` AS `cuentaret`,
`s`.`commission` AS `ComisionProveedor`,
@@ -23,7 +22,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 000000000..c1dc6ad23
--- /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 000000000..6919a610b
--- /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/gastos_resumen.sql b/db/routines/vn2008/views/gastos_resumen.sql
index 02231bcbf..d40d6d229 100644
--- a/db/routines/vn2008/views/gastos_resumen.sql
+++ b/db/routines/vn2008/views/gastos_resumen.sql
@@ -2,6 +2,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`gastos_resumen`
AS SELECT
+ `es`.`id` AS `id`,
`es`.`expenseFk` AS `Id_Gasto`,
`es`.`year` AS `year`,
`es`.`month` AS `month`,
diff --git a/db/routines/vn2008/views/payrollWorker.sql b/db/routines/vn2008/views/payrollWorker.sql
new file mode 100644
index 000000000..6199e98b8
--- /dev/null
+++ b/db/routines/vn2008/views/payrollWorker.sql
@@ -0,0 +1,9 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost`
+ SQL SECURITY DEFINER
+ VIEW `vn2008`.`payroll_employee` AS
+SELECT
+ `pw`.`workerFkA3` AS `CodTrabajador`,
+ `pw`.`companyFkA3` AS `codempresa`,
+ `pw`.`workerFk` AS `workerFk`
+FROM
+ `vn`.`payrollWorker` `pw`;
\ No newline at end of file
diff --git a/db/routines/vn2008/views/payroll_centros.sql b/db/routines/vn2008/views/payroll_centros.sql
new file mode 100644
index 000000000..b7e162f90
--- /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 000000000..a7c6ece5b
--- /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/10859-pinkGerbera/00-firstScript.sql b/db/versions/10859-pinkGerbera/00-firstScript.sql
new file mode 100644
index 000000000..723ddda5e
--- /dev/null
+++ b/db/versions/10859-pinkGerbera/00-firstScript.sql
@@ -0,0 +1,5 @@
+CREATE OR REPLACE PROCEDURE `vn`.`balance_create`() BEGIN END;
+
+GRANT EXECUTE ON PROCEDURE vn.balance_create TO `financialBoss`, `hrBoss`;
+GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `buyer`, `claimManager`, `employee`;
+GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `buyer`, `entryEditor`, `claimManager`, `employee`;
\ No newline at end of file
diff --git a/db/versions/10895-pinkArborvitae/00-firstScript.sql b/db/versions/10895-pinkArborvitae/00-firstScript.sql
new file mode 100644
index 000000000..2387fda08
--- /dev/null
+++ b/db/versions/10895-pinkArborvitae/00-firstScript.sql
@@ -0,0 +1,11 @@
+ALTER TABLE `vn`.`packingSite` DROP FOREIGN KEY IF EXISTS `packingSite_FK_4`;
+ALTER TABLE `vn`.`arcRead` DROP FOREIGN KEY IF EXISTS `worker_printer_FK`;
+ALTER TABLE `vn`.`host` DROP FOREIGN KEY IF EXISTS `configHost_FK`;
+ALTER TABLE `vn`.`operator` DROP FOREIGN KEY IF EXISTS `operator_FK_5`;
+ALTER TABLE `vn`.`packingSite` DROP FOREIGN KEY IF EXISTS `packingSite_FK_1`;
+ALTER TABLE `vn`.`printQueue` DROP FOREIGN KEY IF EXISTS `printQueue_printerFk`;
+ALTER TABLE `vn`.`sector` DROP FOREIGN KEY IF EXISTS `sector_FK_1`;
+ALTER TABLE `vn`.`worker` DROP FOREIGN KEY IF EXISTS `worker_FK`;
+ALTER TABLE dipole.printer DROP FOREIGN KEY IF EXISTS printer_FK;
+ALTER TABLE dipole.expedition_PrintOut DROP FOREIGN KEY IF EXISTS expedition_PrintOut_FK;
+
diff --git a/db/versions/10895-pinkArborvitae/01-secondScript.sql b/db/versions/10895-pinkArborvitae/01-secondScript.sql
new file mode 100644
index 000000000..03f1aeccb
--- /dev/null
+++ b/db/versions/10895-pinkArborvitae/01-secondScript.sql
@@ -0,0 +1,28 @@
+ALTER TABLE `vn`.`printer` MODIFY COLUMN IF EXISTS `id` int unsigned auto_increment NOT NULL;
+
+ALTER TABLE `vn`.`arcRead` MODIFY COLUMN IF EXISTS `printerFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`arcRead` ADD CONSTRAINT `arcRead_FK` FOREIGN KEY IF NOT EXISTS (printerFk) REFERENCES vn.printer(id) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `vn`.`host` MODIFY COLUMN IF EXISTS `printerFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`host` ADD CONSTRAINT `host_FK` FOREIGN KEY IF NOT EXISTS (printerFk) REFERENCES vn.printer(id) ON DELETE RESTRICT ON UPDATE CASCADE;
+
+ALTER TABLE `vn`.`operator` MODIFY COLUMN IF EXISTS `labelerFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`operator` ADD CONSTRAINT `operator_FK_4` FOREIGN KEY IF NOT EXISTS (labelerFk) REFERENCES vn.printer(id) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `vn`.`packingSite` MODIFY COLUMN IF EXISTS `printerFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`packingSite` ADD CONSTRAINT `packingSite_FK_1` FOREIGN KEY IF NOT EXISTS (printerFk) REFERENCES vn.printer(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
+
+ALTER TABLE `vn`.`packingSite` MODIFY COLUMN IF EXISTS `printerRfidFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`packingSite` ADD CONSTRAINT `packingSite_FK_4` FOREIGN KEY IF NOT EXISTS(printerRfidFk) REFERENCES vn.printer(id) ON DELETE RESTRICT ON UPDATE CASCADE;
+
+ALTER TABLE `vn`.`printQueue` MODIFY COLUMN IF EXISTS `printerFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`printQueue` ADD CONSTRAINT `printQueue_FK` FOREIGN KEY IF NOT EXISTS (printerFk) REFERENCES vn.printer(id) ON DELETE RESTRICT ON UPDATE CASCADE;
+
+ALTER TABLE `vn`.`sector` MODIFY COLUMN IF EXISTS `mainPrinterFk` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `vn`.`sector` ADD CONSTRAINT `sector_FK` FOREIGN KEY IF NOT EXISTS (mainPrinterFk) REFERENCES vn.printer(id) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `dipole`.`printer` MODIFY COLUMN IF EXISTS `id` int unsigned DEFAULT NULL NULL;
+ALTER TABLE `dipole`.`printer` ADD CONSTRAINT `vnPrinter_FK` FOREIGN KEY IF NOT EXISTS (id) REFERENCES vn.printer(id) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `dipole`.`expedition_PrintOut` MODIFY COLUMN IF EXISTS `printerFk` int unsigned DEFAULT 0 NOT NULL;
+ALTER TABLE `dipole`.`expedition_PrintOut` ADD CONSTRAINT `expedition_PrintOut_FK` FOREIGN KEY IF NOT EXISTS (printerFk) REFERENCES printer(id) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/db/versions/10895-pinkArborvitae/02-thirdScript.sql b/db/versions/10895-pinkArborvitae/02-thirdScript.sql
new file mode 100644
index 000000000..142ec06b1
--- /dev/null
+++ b/db/versions/10895-pinkArborvitae/02-thirdScript.sql
@@ -0,0 +1,17 @@
+
+ALTER TABLE `vn`.`productionConfig` ADD IF NOT EXISTS backupPrinterNotificationDelay int unsigned NULL
+ COMMENT 'Minimum seconds Interval to Prevent Spam from Same-Type Notifications';
+
+ALTER TABLE vn.sector DROP FOREIGN KEY IF EXISTS sector_FK;
+
+ALTER TABLE `vn`.`sector` CHANGE IF EXISTS `mainPrinterFk` `backupPrinterFk` int unsigned DEFAULT NULL NULL;
+
+ALTER TABLE `util`.`notificationSubscription` DROP FOREIGN KEY IF EXISTS `notificationSubscription_ibfk_1`;
+ALTER TABLE `util`.`notificationQueue` DROP FOREIGN KEY IF EXISTS `nnotificationQueue_ibfk_1`;
+ALTER TABLE `util`.`notificationAcl` DROP FOREIGN KEY IF EXISTS `notificationAcl_ibfk_1`;
+
+ALTER TABLE `util`.`notification` MODIFY COLUMN IF EXISTS `id` int(11) auto_increment NOT NULL;
+
+ALTER TABLE `util`.`notificationSubscription` ADD CONSTRAINT `notificationSubscription_Fk` FOREIGN KEY IF NOT EXISTS (`notificationFk`) REFERENCES `util`.`notification`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `util`.`notificationQueue` ADD CONSTRAINT `notificationQueue_Fk` FOREIGN KEY IF NOT EXISTS (`notificationFk`) REFERENCES `util`.`notification`(`name`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `util`.`notificationAcl` ADD CONSTRAINT `notificationAcl_Fk` FOREIGN KEY IF NOT EXISTS (`notificationFk`) REFERENCES `util`.`notification`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/db/versions/10895-pinkArborvitae/03-insertBackUpNotification.vn.sql b/db/versions/10895-pinkArborvitae/03-insertBackUpNotification.vn.sql
new file mode 100644
index 000000000..9dc3c0f60
--- /dev/null
+++ b/db/versions/10895-pinkArborvitae/03-insertBackUpNotification.vn.sql
@@ -0,0 +1,12 @@
+INSERT IGNORE INTO util.notification (name, description)
+ VALUES ('backup-printer-selected','A backup printer has been selected');
+
+INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk)
+ SELECT id, 10435
+ FROM util.notification
+ WHERE name = 'backup-printer-selected';
+
+INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk)
+ SELECT id, 66
+ FROM util.notification
+ WHERE name = 'backup-printer-selected';
\ 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 000000000..8609ddc7e
--- /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 000000000..436243ba5
--- /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 000000000..167c38f70
--- /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 000000000..595aa5dcb
--- /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 000000000..acce9f37c
--- /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 000000000..148174215
--- /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 000000000..c346fbf8d
--- /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 000000000..4911c8707
--- /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 000000000..1803dc2a3
--- /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 000000000..5a3dc1413
--- /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/10944-tealLaurel/00-firstScript.sql b/db/versions/10944-tealLaurel/00-firstScript.sql
new file mode 100644
index 000000000..2d61cde90
--- /dev/null
+++ b/db/versions/10944-tealLaurel/00-firstScript.sql
@@ -0,0 +1,8 @@
+REVOKE UPDATE ON vn.entry FROM entryEditor;
+GRANT UPDATE ON vn.entry TO administrative;
+GRANT UPDATE (id, supplierFk, dated, invoiceNumber, isExcludedFromAvailable,
+ isConfirmed, isOrdered, isRaid,commission, created, evaNotes, travelFk,
+ currencyFk,companyFk, gestDocFk, invoiceInFk, loadPriority,
+ kop, sub, pro, auction, invoiceAmount, buyerFk, typeFk, reference,
+ observationEditorFk, clonedFrom, editorFk, lockerUserFk, locked
+) ON vn.entry TO entryEditor;
diff --git a/db/versions/10948-azureSalal/00-addReconciliationConfig.sql b/db/versions/10948-azureSalal/00-addReconciliationConfig.sql
new file mode 100644
index 000000000..1da6473b4
--- /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 000000000..21743a007
--- /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 000000000..d6853f759
--- /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 000000000..95b7d9c74
--- /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 000000000..cc0bcc96b
--- /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/10950-greenArborvitae/00-firstScript.sql b/db/versions/10950-greenArborvitae/00-firstScript.sql
new file mode 100644
index 000000000..e8d4e31f2
--- /dev/null
+++ b/db/versions/10950-greenArborvitae/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.packaging
+MODIFY COLUMN volume decimal(10,2) CHECK (volume >= COALESCE(width, 1) * COALESCE(depth, 1) * COALESCE(height, 1));
diff --git a/db/versions/10967-wheatLilium/00-firstScript.sql b/db/versions/10967-wheatLilium/00-firstScript.sql
new file mode 100644
index 000000000..40cfe45bd
--- /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/10971-turquoiseRuscus/00-firstScript.sql b/db/versions/10971-turquoiseRuscus/00-firstScript.sql
new file mode 100644
index 000000000..82a0117c3
--- /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 000000000..f5b838529
--- /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 000000000..3f9cf9d8b
--- /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 000000000..ac1e01e6f
--- /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 000000000..0fd944021
--- /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 000000000..53c1a4fa6
--- /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/db/versions/10984-navyDendro/00-firstScript.sql b/db/versions/10984-navyDendro/00-firstScript.sql
new file mode 100644
index 000000000..c08462d75
--- /dev/null
+++ b/db/versions/10984-navyDendro/00-firstScript.sql
@@ -0,0 +1,4 @@
+-- Place your SQL code here
+UPDATE bs.nightTask SET `schema`='vn' WHERE `procedure`='raidUpdate';
+
+UPDATE bs.nightTask SET `schema`='vn',`procedure`='creditRecovery' WHERE `procedure` ='recobro_credito';
\ No newline at end of file
diff --git a/db/versions/10987-tealMonstera/00-firstScript.vn.sql b/db/versions/10987-tealMonstera/00-firstScript.vn.sql
new file mode 100644
index 000000000..d24ddd5de
--- /dev/null
+++ b/db/versions/10987-tealMonstera/00-firstScript.vn.sql
@@ -0,0 +1,4 @@
+-- Place your SQL code here
+
+USE vn;
+INSERT INTO vn.observationType (description,code) VALUES ('Entrega','dropOff');
\ No newline at end of file
diff --git a/db/versions/10988-blackIvy/00-pbx_prefix.sql b/db/versions/10988-blackIvy/00-pbx_prefix.sql
new file mode 100644
index 000000000..3ce9f5808
--- /dev/null
+++ b/db/versions/10988-blackIvy/00-pbx_prefix.sql
@@ -0,0 +1,35 @@
+CREATE TABLE IF NOT EXISTS pbx.prefix (
+ country CHAR(2) NOT NULL COMMENT 'Country code',
+ prefix varchar(100) NOT NULL COMMENT 'Country prefix',
+ CONSTRAINT prefix_pk PRIMARY KEY (country)
+)
+ENGINE=InnoDB
+DEFAULT CHARSET=utf8mb3
+COLLATE=utf8mb3_unicode_ci;
+
+ALTER TABLE pbx.config
+ CHANGE countryPrefix defaultPrefix varchar(20)
+ CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL NULL;
+
+ALTER TABLE pbx.config DROP COLUMN IF EXISTS sundayFestive;
+
+CREATE TABLE IF NOT EXISTS pbx.holiday (
+ id INT UNSIGNED auto_increment NOT NULL,
+ country CHAR(2) NOT NULL,
+ `day` DATE NOT NULL,
+ CONSTRAINT holiday_pk PRIMARY KEY (id)
+)
+ENGINE=InnoDB
+DEFAULT CHARSET=utf8mb3
+COLLATE=utf8mb3_unicode_ci;
+CREATE UNIQUE INDEX holiday_country_IDX USING BTREE ON pbx.holiday (country,`day`);
+
+ALTER TABLE pbx.schedule
+ CHANGE timeStart startTime time NOT NULL,
+ CHANGE timeEnd endTime time NOT NULL,
+ DROP FOREIGN KEY schedule_ibfk_1,
+ DROP COLUMN queue,
+ ADD country CHAR(2) NOT NULL,
+ CHANGE weekDay weekDays set('mon','tue','wed','thu','fri','sat','sun') NOT NULL
+ COMMENT '0 = Monday, 6 = Sunday';
+
diff --git a/db/versions/10988-blackIvy/01-pbx_prefix.vn.sql b/db/versions/10988-blackIvy/01-pbx_prefix.vn.sql
new file mode 100644
index 000000000..37a17309c
--- /dev/null
+++ b/db/versions/10988-blackIvy/01-pbx_prefix.vn.sql
@@ -0,0 +1,13 @@
+INSERT INTO pbx.prefix (country,prefix)
+ VALUES ('es','0034');
+INSERT INTO pbx.prefix (country,prefix)
+ VALUES ('fr','0033');
+INSERT INTO pbx.prefix (country,prefix)
+ VALUES ('pt','00351');
+
+INSERT INTO pbx.schedule (weekDays,startTime,endTime,country)
+ VALUES ('mon,tue,wed,thu,fri,sat,sun','00:00','24:00','es');
+INSERT INTO pbx.schedule (weekDays,startTime,endTime,country)
+ VALUES ('mon,tue,wed,thu,fri,sat,sun','00:00','24:00','fr');
+INSERT INTO pbx.schedule (weekDays,startTime,endTime,country)
+ VALUES ('mon,tue,wed,thu,fri,sat,sun','00:00','24:00','pt');
diff --git a/db/versions/10990-yellowPalmetto/00-firstScript.sql b/db/versions/10990-yellowPalmetto/00-firstScript.sql
new file mode 100644
index 000000000..56b1541fb
--- /dev/null
+++ b/db/versions/10990-yellowPalmetto/00-firstScript.sql
@@ -0,0 +1,11 @@
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_getRisk`()
+BEGIN
+END;
+
+GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financial;
+
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
+BEGIN
+END;
+
+GRANT EXECUTE ON PROCEDURE vn.creditInsurance_getRisk TO financial;
diff --git a/db/versions/10991-greenAsparagus/00-firstScript.sql b/db/versions/10991-greenAsparagus/00-firstScript.sql
new file mode 100644
index 000000000..9cfc9e19d
--- /dev/null
+++ b/db/versions/10991-greenAsparagus/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.productionConfig MODIFY COLUMN id INT(10) UNSIGNED FIRST;
+ALTER TABLE vn.productionConfig ADD scannableCodeType enum('qr','barcode') DEFAULT 'barcode' NOT NULL;
diff --git a/db/versions/10992-goldenIvy/00-acl.sql b/db/versions/10992-goldenIvy/00-acl.sql
new file mode 100644
index 000000000..1d1c3ce91
--- /dev/null
+++ b/db/versions/10992-goldenIvy/00-acl.sql
@@ -0,0 +1,2 @@
+INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
+ VALUES ('InvoiceIn', 'exchangeRateUpdate', '*', 'ALLOW', 'ROLE', 'employee');
diff --git a/db/versions/10992-goldenIvy/00-referenceRate.sql b/db/versions/10992-goldenIvy/00-referenceRate.sql
new file mode 100644
index 000000000..db53f328f
--- /dev/null
+++ b/db/versions/10992-goldenIvy/00-referenceRate.sql
@@ -0,0 +1,4 @@
+ALTER TABLE vn.referenceRate DROP INDEX `PRIMARY`;
+ALTER TABLE vn.referenceRate ADD id INT auto_increment PRIMARY KEY;
+ALTER TABLE vn.referenceRate CHANGE id id int(11) auto_increment NOT NULL FIRST;
+CREATE UNIQUE INDEX referenceRate_currencyFk_IDX USING BTREE ON vn.referenceRate (currencyFk,dated);
diff --git a/db/versions/10994-wheatLaurel/00-modifyAcls.sql b/db/versions/10994-wheatLaurel/00-modifyAcls.sql
new file mode 100644
index 000000000..905f67aba
--- /dev/null
+++ b/db/versions/10994-wheatLaurel/00-modifyAcls.sql
@@ -0,0 +1,4 @@
+UPDATE salix.ACL SET principalId = "hr" WHERE property IN ('find','findById','findOne') AND model = "Worker";
+
+INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
+ VALUES ('Worker', '__get__summary', 'READ', 'ALLOW', 'ROLE', 'employee');
\ No newline at end of file
diff --git a/db/versions/10995-navyErica/01-agencyLogCreate.sql b/db/versions/10995-navyErica/01-agencyLogCreate.sql
new file mode 100644
index 000000000..0b8a1ed87
--- /dev/null
+++ b/db/versions/10995-navyErica/01-agencyLogCreate.sql
@@ -0,0 +1,24 @@
+-- vn.agencyLog definition
+ALTER TABLE vn.agency ADD IF NOT EXISTS editorFk int(10) unsigned DEFAULT NULL NULL;
+
+ALTER TABLE vn.agency ADD CONSTRAINT agency_user_FK FOREIGN KEY (editorFk) REFERENCES `account`.`user`(id);
+
+CREATE TABLE IF NOT EXISTS `vn`.`agencyLog` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `originFk` smallint(5) unsigned DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
+ `action` set('insert','update','delete','select') NOT NULL,
+ `creationDate` timestamp NULL DEFAULT current_timestamp(),
+ `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `changedModel` enum('agency','agencyMode') NOT NULL DEFAULT 'agency',
+ `oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
+ `newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
+ `changedModelId` int(11) NOT NULL,
+ `changedModelValue` varchar(45) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `logAgencyUserFk` (`userFk`),
+ KEY `agencyLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
+ KEY `agencyLog_originFk` (`originFk`,`creationDate`),
+ CONSTRAINT `agencyOriginFk` FOREIGN KEY (`originFk`) REFERENCES `agency` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `agencyUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
\ No newline at end of file
diff --git a/db/versions/10995-navyErica/02-agencyWorkCenterCreate.sql b/db/versions/10995-navyErica/02-agencyWorkCenterCreate.sql
new file mode 100644
index 000000000..179fbc63c
--- /dev/null
+++ b/db/versions/10995-navyErica/02-agencyWorkCenterCreate.sql
@@ -0,0 +1,18 @@
+CREATE TABLE IF NOT EXISTS `vn`.`agencyWorkCenter` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `agencyFk` smallint(5) unsigned NOT NULL,
+ `workCenterFk` int(11) NOT NULL,
+ `editorFk` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `agencyWorkCenter_unique` (`agencyFk`,`workCenterFk`),
+ KEY `agencyWorkCenter_workCenter_FK` (`workCenterFk`),
+ KEY `agencyWorkCenter_user_FK` (`editorFk`),
+ CONSTRAINT `agencyWorkCenter_agency_FK` FOREIGN KEY (`agencyFk`) REFERENCES `agency` (`id`) ON DELETE CASCADE,
+ CONSTRAINT `agencyWorkCenter_user_FK` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `agencyWorkCenter_workCenter_FK` FOREIGN KEY (`workCenterFk`) REFERENCES `workCenter` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #4988';
+
+INSERT INTO vn.agencyWorkCenter (agencyFk, workCenterFk)
+ SELECT id, workCenterFk
+ FROM vn.agency
+ WHERE workCenterFk IS NOT NULL;
diff --git a/db/versions/10995-navyErica/03-tableAcl.sql b/db/versions/10995-navyErica/03-tableAcl.sql
new file mode 100644
index 000000000..f3fc4d336
--- /dev/null
+++ b/db/versions/10995-navyErica/03-tableAcl.sql
@@ -0,0 +1,19 @@
+-- Place your SQL code here
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('AgencyLog','*','READ','ALLOW','ROLE','employee');
+
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('AgencyWorkCenter','*','READ','ALLOW','ROLE','employee');
+
+INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
+ VALUES('AgencyMode', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
+
+INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
+ VALUES('Agency', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
+
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('Agency','*','WRITE','ALLOW','ROLE','deliveryAssistant');
+
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('AgencyWorkCenter','*','WRITE','ALLOW','ROLE','deliveryAssistant');
+
diff --git a/db/versions/10996-pinkPhormium/00-dropOrderRecalc.sql b/db/versions/10996-pinkPhormium/00-dropOrderRecalc.sql
new file mode 100644
index 000000000..13216936b
--- /dev/null
+++ b/db/versions/10996-pinkPhormium/00-dropOrderRecalc.sql
@@ -0,0 +1 @@
+DROP TABLE hedera.orderRecalc;
diff --git a/db/versions/10996-pinkPhormium/01-dropTicketRecalc.sql b/db/versions/10996-pinkPhormium/01-dropTicketRecalc.sql
new file mode 100644
index 000000000..e7c765e91
--- /dev/null
+++ b/db/versions/10996-pinkPhormium/01-dropTicketRecalc.sql
@@ -0,0 +1 @@
+DROP TABLE vn.ticketRecalc;
diff --git a/db/versions/10996-pinkPhormium/02-dropTravelRecalc.sql b/db/versions/10996-pinkPhormium/02-dropTravelRecalc.sql
new file mode 100644
index 000000000..49b26f83f
--- /dev/null
+++ b/db/versions/10996-pinkPhormium/02-dropTravelRecalc.sql
@@ -0,0 +1 @@
+DROP TABLE vn.travelRecalc;
diff --git a/db/versions/10997-crimsonCyca/00-groupingMode.sql b/db/versions/10997-crimsonCyca/00-groupingMode.sql
new file mode 100644
index 000000000..dd4896cc1
--- /dev/null
+++ b/db/versions/10997-crimsonCyca/00-groupingMode.sql
@@ -0,0 +1,16 @@
+START TRANSACTION;
+
+SET @isTriggerDisabled = TRUE;
+
+ALTER TABLE vn.buy ADD groupingMode2 enum('grouping', 'packing') DEFAULT NULL NULL;
+ALTER TABLE vn.buy CHANGE groupingMode2 groupingMode2 enum('grouping', 'packing') DEFAULT NULL NULL AFTER groupingMode;
+
+UPDATE vn.buy SET groupingMode2 = 'packing' WHERE groupingMode = 2;
+UPDATE vn.buy SET groupingMode2 = 'grouping' WHERE groupingMode = 1;
+
+ALTER TABLE vn.buy DROP COLUMN groupingMode;
+ALTER TABLE vn.buy CHANGE groupingMode2 groupingMode enum('grouping','packing') CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL;
+
+SET @isTriggerDisabled = FALSE;
+
+COMMIT;
\ No newline at end of file
diff --git a/db/versions/11001-blackPalmetto/00-firstScript.sql b/db/versions/11001-blackPalmetto/00-firstScript.sql
new file mode 100644
index 000000000..e69de29bb
diff --git a/db/versions/11002-limeCarnation/00-firstScript.sql b/db/versions/11002-limeCarnation/00-firstScript.sql
new file mode 100644
index 000000000..b1a49a309
--- /dev/null
+++ b/db/versions/11002-limeCarnation/00-firstScript.sql
@@ -0,0 +1,7 @@
+-- Place your SQL code here
+ALTER TABLE `vn`.`ticketRequest`
+ CHANGE IF EXISTS `buyerCode` `buyerCode__` varchar(3) NOT NULL COMMENT '@deprecated 2024-04-23 refs #6731 field not used';
+
+ALTER TABLE `vn`.`ticketConfig` ADD COLUMN IF NOT EXISTS `defaultAttenderFk` int unsigned;
+
+ALTER TABLE vn.ticketConfig ADD CONSTRAINT ticketConfig_worker_FK FOREIGN KEY (defaultAttenderFk) REFERENCES vn.worker(id);
diff --git a/db/versions/11003-greenRoebelini/00-firstScript.sql b/db/versions/11003-greenRoebelini/00-firstScript.sql
new file mode 100644
index 000000000..97c5f355f
--- /dev/null
+++ b/db/versions/11003-greenRoebelini/00-firstScript.sql
@@ -0,0 +1 @@
+DROP SCHEMA IF EXISTS rfid;
diff --git a/db/versions/11006-chocolateCataractarum/00-firstScript.sql b/db/versions/11006-chocolateCataractarum/00-firstScript.sql
new file mode 100644
index 000000000..8cc86a78f
--- /dev/null
+++ b/db/versions/11006-chocolateCataractarum/00-firstScript.sql
@@ -0,0 +1,6 @@
+ALTER TABLE vn.country
+ ADD IF NOT EXISTS viesCode varchar(2) DEFAULT NULL NULL AFTER code;
+
+UPDATE IGNORE vn.country
+ SET viesCode = 'FR'
+ WHERE code = 'MC'; -- Mónaco
\ No newline at end of file
diff --git a/db/versions/11007-greenRose/00-firstScript.sql b/db/versions/11007-greenRose/00-firstScript.sql
new file mode 100644
index 000000000..154a75532
--- /dev/null
+++ b/db/versions/11007-greenRose/00-firstScript.sql
@@ -0,0 +1,16 @@
+CREATE OR REPLACE TABLE `vn`.`farmingDeliveryNote` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `farmingFk` int(10) unsigned NOT NULL,
+ `deliveryNoteFk` int(11) NOT NULL,
+ `amount` decimal(10,2) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `farmingDeliveryNoteFk_FK` (`deliveryNoteFk`),
+ KEY `farmingDeliveryNoteFk_FK_1` (`farmingFk`),
+ CONSTRAINT `farmingDeliveryNoteFk_FK` FOREIGN KEY (`deliveryNoteFk`) REFERENCES `deliveryNote` (`id`),
+ CONSTRAINT `farmingDeliveryNoteFk_FK_1` FOREIGN KEY (`farmingFk`) REFERENCES `farming` (`id`)
+);
+
+INSERT IGNORE INTO `vn`.`farmingDeliveryNote` (farmingFk, deliveryNoteFk, amount)
+ SELECT farmingFk, id, amount
+ FROM vn.deliveryNote dn
+ WHERE farmingFk;
\ No newline at end of file
diff --git a/db/versions/11008-orangeCarnation/00-alter.sql b/db/versions/11008-orangeCarnation/00-alter.sql
new file mode 100644
index 000000000..951e2d916
--- /dev/null
+++ b/db/versions/11008-orangeCarnation/00-alter.sql
@@ -0,0 +1,7 @@
+ALTER TABLE vn.parking
+ADD CONSTRAINT chkParkingCodeFormat CHECK (CHAR_LENGTH(code) > 4 AND code LIKE '%-%');
+
+ALTER TABLE vn.parking MODIFY COLUMN sectorFk int(11) NOT NULL;
+
+ALTER TABLE vn.shelving
+ADD CONSTRAINT chkShelvingCodeFormat CHECK (CHAR_LENGTH(code) <= 4 AND code NOT LIKE '%-%');
diff --git a/db/versions/11012-silverRuscus/00-firstScript.sql b/db/versions/11012-silverRuscus/00-firstScript.sql
new file mode 100644
index 000000000..161960f6b
--- /dev/null
+++ b/db/versions/11012-silverRuscus/00-firstScript.sql
@@ -0,0 +1,5 @@
+DROP TABLE cache.prod_graphic_source;
+RENAME TABLE vn2008.unary TO vn2008.unary__;
+ALTER TABLE vn2008.unary__ COMMENT='refs #7258 @deprecated 2023-12-13';
+RENAME TABLE vn2008.jerarquia TO vn2008.jerarquia__;
+ALTER TABLE vn2008.jerarquia__ COMMENT='refs #7258 @deprecated 2023-12-13';
diff --git a/db/versions/11014-orangePalmetto/00-firstScript.sql b/db/versions/11014-orangePalmetto/00-firstScript.sql
new file mode 100644
index 000000000..fe85c7ec6
--- /dev/null
+++ b/db/versions/11014-orangePalmetto/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.claimBeginning MODIFY COLUMN quantity double DEFAULT 0 NULL;
diff --git a/db/versions/11016-pinkAralia/00-firstScript.sql b/db/versions/11016-pinkAralia/00-firstScript.sql
new file mode 100644
index 000000000..de090013d
--- /dev/null
+++ b/db/versions/11016-pinkAralia/00-firstScript.sql
@@ -0,0 +1,5 @@
+-- Place your SQL code here
+ALTER TABLE vn.productionConfig ADD collectionNewLockname varchar(100)
+ DEFAULT 'collection_new' NOT NULL COMMENT 'Lockname value for proc vn.collection_new';
+ALTER TABLE vn.productionConfig ADD collectionAssignLockname varchar(100)
+ DEFAULT 'collection_assign' NULL COMMENT 'Lockname value for proc vn.collection_new';
diff --git a/db/versions/11018-crimsonBamboo/00-firstScript.sql b/db/versions/11018-crimsonBamboo/00-firstScript.sql
new file mode 100644
index 000000000..1d0c8f0bd
--- /dev/null
+++ b/db/versions/11018-crimsonBamboo/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.productionConfig ADD collection_new_lockname varchar(100) DEFAULT 'collection_new' NOT NULL COMMENT 'Lockname value for proc vn.collection_new';
+ALTER TABLE vn.productionConfig ADD collection_assign_lockname varchar(100) DEFAULT 'collection_assign' NULL COMMENT 'Lockname value for proc vn.collection_new';
diff --git a/db/versions/11021-bronzeErica/00-firstScript.sql b/db/versions/11021-bronzeErica/00-firstScript.sql
new file mode 100644
index 000000000..6f6b68d49
--- /dev/null
+++ b/db/versions/11021-bronzeErica/00-firstScript.sql
@@ -0,0 +1,13 @@
+
+ ALTER TABLE vn.productionConfig
+ DROP COLUMN IF EXISTS collectionNewLockname,
+ DROP COLUMN IF EXISTS collectionAssignLockname;
+
+ DELIMITER $$
+ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`connection_kill`()
+ BEGIN
+
+ END$$
+ DELIMITER ;
+
+ GRANT EXECUTE ON PROCEDURE util.connection_kill TO 'developer';
\ No newline at end of file
diff --git a/db/versions/11026-brownAralia/00-entryAlter.sql b/db/versions/11026-brownAralia/00-entryAlter.sql
new file mode 100644
index 000000000..26b3f727e
--- /dev/null
+++ b/db/versions/11026-brownAralia/00-entryAlter.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.entryType ADD isInformal TINYINT DEFAULT 0 NOT NULL;
diff --git a/db/versions/11026-brownAralia/01-entryUpdate.sql b/db/versions/11026-brownAralia/01-entryUpdate.sql
new file mode 100644
index 000000000..5454db45f
--- /dev/null
+++ b/db/versions/11026-brownAralia/01-entryUpdate.sql
@@ -0,0 +1,3 @@
+UPDATE vn.entryType
+ SET description='Interna', code='internal'
+ WHERE code='supplies'
diff --git a/db/versions/11026-brownAralia/02-entryInternal.sql b/db/versions/11026-brownAralia/02-entryInternal.sql
new file mode 100644
index 000000000..77f0133e5
--- /dev/null
+++ b/db/versions/11026-brownAralia/02-entryInternal.sql
@@ -0,0 +1,3 @@
+UPDATE vn.entryType
+ SET isInformal = TRUE
+ WHERE code IN ('inventory', 'life', 'regularization', 'internal')
diff --git a/db/versions/11029-tealAnthurium/00-firstScript.sql b/db/versions/11029-tealAnthurium/00-firstScript.sql
new file mode 100644
index 000000000..b54e7a3b5
--- /dev/null
+++ b/db/versions/11029-tealAnthurium/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.productionConfig ADD defaultSectorFk INT UNSIGNED DEFAULT 37 NOT NULL COMMENT 'Default sector';
diff --git a/db/versions/11030-salmonCyca/00-firstScript.sql b/db/versions/11030-salmonCyca/00-firstScript.sql
new file mode 100644
index 000000000..72ccc9ae2
--- /dev/null
+++ b/db/versions/11030-salmonCyca/00-firstScript.sql
@@ -0,0 +1,10 @@
+-- Place your SQL code here
+ALTER TABLE vn.absenceType ADD isFestiveEligible BOOL DEFAULT 1 NOT NULL COMMENT 'Para marcar un tipo de absence';
+
+UPDATE vn.absenceType
+SET isFestiveEligible = 0
+WHERE code = 'holiday';
+
+UPDATE vn.absenceType
+ SET isFestiveEligible=0
+ WHERE code = 'halfHoliday';
diff --git a/db/versions/11031-aquaPalmetto/00-firstScript.sql b/db/versions/11031-aquaPalmetto/00-firstScript.sql
new file mode 100644
index 000000000..5ef37e8f0
--- /dev/null
+++ b/db/versions/11031-aquaPalmetto/00-firstScript.sql
@@ -0,0 +1,4 @@
+
+UPDATE bs.nightTask
+ SET `procedure` = 'sales_addLauncher'
+ WHERE `procedure` = 'ventas_add_launcher';
\ No newline at end of file
diff --git a/db/versions/11033-aquaPaniculata/00-rollbackAcls.sql b/db/versions/11033-aquaPaniculata/00-rollbackAcls.sql
new file mode 100644
index 000000000..a01efe3fb
--- /dev/null
+++ b/db/versions/11033-aquaPaniculata/00-rollbackAcls.sql
@@ -0,0 +1,9 @@
+DELETE FROM salix.ACL
+ WHERE model = 'Worker'
+ AND property = '__get__summary'
+ AND principalId = 'employee';
+
+UPDATE salix.ACL SET principalId = 'employee'
+ WHERE model = 'Worker'
+ AND property IN ('find','findById','findOne')
+ AND principalId = 'hr';
diff --git a/db/versions/11034-purpleHydrangea/00-firstScript.sql b/db/versions/11034-purpleHydrangea/00-firstScript.sql
new file mode 100644
index 000000000..c8c2cc7f9
--- /dev/null
+++ b/db/versions/11034-purpleHydrangea/00-firstScript.sql
@@ -0,0 +1,5 @@
+-- Place your SQL code here
+ALTER TABLE vn.packaging
+MODIFY COLUMN height decimal(10,2) DEFAULT NULL NULL,
+MODIFY COLUMN `depth` decimal(10,2) DEFAULT NULL NULL,
+MODIFY COLUMN width decimal(10,2) DEFAULT NULL NULL;
diff --git a/db/versions/11037-redPhormium/00-firstScript.sql b/db/versions/11037-redPhormium/00-firstScript.sql
new file mode 100644
index 000000000..fd09d31d9
--- /dev/null
+++ b/db/versions/11037-redPhormium/00-firstScript.sql
@@ -0,0 +1 @@
+REVOKE UPDATE (`size`, longName, name) ON vn.item FROM buyer;
diff --git a/db/versions/11044-blueOrchid/00-firstScript.sql b/db/versions/11044-blueOrchid/00-firstScript.sql
new file mode 100644
index 000000000..29162820c
--- /dev/null
+++ b/db/versions/11044-blueOrchid/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.invoiceInConfig CHANGE sageWithholdingFk sageFarmerWithholdingFk smallint(6) NOT NULL;
+ALTER TABLE vn.supplier CHANGE isFarmer isFarmer__ tinyint(1) DEFAULT 0 NOT NULL COMMENT 'refs #7345 @deprecated 2024-05-10 - Utilizar withholdingSageFk';
+ALTER TABLE vn.supplier MODIFY COLUMN isFarmer__ tinyint(1) DEFAULT 0 NOT NULL COMMENT 'refs #7345 @deprecated 2024-05-10 - Utilizar withholdingSageFk';
diff --git a/db/versions/11046-maroonCamellia/00-firstScript.sql b/db/versions/11046-maroonCamellia/00-firstScript.sql
new file mode 100644
index 000000000..5e7faad35
--- /dev/null
+++ b/db/versions/11046-maroonCamellia/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.item
+MODIFY nonRecycledPlastic DECIMAL(10,2) DEFAULT NULL NULL,
+MODIFY recycledPlastic DECIMAL(10,2) DEFAULT NULL NULL;
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index dba430e66..685345273 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 744b11a72..e951ec784 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 c5e132ab7..8758c3b05 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 2365f0635..179265b0f 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 b3bf43c5c..dec8d505c 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 9ac373287..5cfc1c9d4 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 20cfa0d13..1caf91f9c 100644
--- a/e2e/paths/05-ticket/09_weekly.spec.js
+++ b/e2e/paths/05-ticket/09_weekly.spec.js
@@ -8,7 +8,7 @@ describe('Ticket descriptor path', () => {
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
- await page.loginAndModule('buyer', 'ticket');
+ await page.loginAndModule('buyerBoss', 'ticket');
await page.accessToSection('ticket.weekly.index');
});
diff --git a/e2e/paths/06-claim/01_basic_data.spec.js b/e2e/paths/06-claim/01_basic_data.spec.js
index 2df95bd4a..33c68183f 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/09-invoice-out/03_manualInvoice.spec.js b/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
index dfaa55ef9..a1856f1b1 100644
--- a/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
+++ b/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
@@ -40,7 +40,7 @@ describe('InvoiceOut manual invoice path', () => {
await page.waitToClick(selectors.invoiceOutIndex.createInvoice);
await page.waitForSelector(selectors.invoiceOutIndex.manualInvoiceForm);
- await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceClient, 'Max Eisenhardt');
+ await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceClient, 'Petter Parker');
await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceSerial, 'Global nacional');
await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceTaxArea, 'national');
await page.waitToClick(selectors.invoiceOutIndex.saveInvoice);
diff --git a/e2e/paths/12-entry/05_basicData.spec.js b/e2e/paths/12-entry/05_basicData.spec.js
index 15282820e..f1f14f8da 100644
--- a/e2e/paths/12-entry/05_basicData.spec.js
+++ b/e2e/paths/12-entry/05_basicData.spec.js
@@ -76,6 +76,6 @@ describe('Entry basic data path', () => {
expect(confirmed).toBe('checked');
expect(inventory).toBe('checked');
expect(raid).toBe('checked');
- expect(booked).toBe('checked');
+ expect(booked).toBe('unchecked');
});
});
diff --git a/e2e/paths/13-supplier/02_basic_data.spec.js b/e2e/paths/13-supplier/02_basic_data.spec.js
index 79a9898ca..710ebd8df 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 e38d1aeec..e2c069d80 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 dd35dd740..840fb8afe 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/front/core/components/link-phone/index.html b/front/core/components/link-phone/index.html
index 2789ab75c..58724b0a1 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 eab9c126b..b8dff9474 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/token.js b/front/core/services/token.js
index 125de6b9a..6858bcae9 100644
--- a/front/core/services/token.js
+++ b/front/core/services/token.js
@@ -1,5 +1,6 @@
import ngModule from '../module';
-
+const TOKEN_MULTIMEDIA = 'vnTokenMultimedia';
+const TOKEN = 'vnToken';
/**
* Saves and loads the token for the current logged in user.
*
@@ -58,8 +59,8 @@ export default class Token {
}
getStorage(storage) {
- this.token = storage.getItem('vnToken');
- this.tokenMultimedia = storage.getItem('vnTokenMultimedia');
+ this.token = storage.getItem(TOKEN);
+ this.tokenMultimedia = storage.getItem(TOKEN_MULTIMEDIA);
if (!this.token) return;
const created = storage.getItem('vnTokenCreated');
this.created = created && new Date(created);
@@ -67,15 +68,15 @@ export default class Token {
}
setStorage(storage, token, tokenMultimedia, created, ttl) {
- storage.setItem('vnTokenMultimedia', tokenMultimedia);
- storage.setItem('vnToken', token);
+ storage.setItem(TOKEN_MULTIMEDIA, tokenMultimedia);
+ storage.setItem(TOKEN, token);
storage.setItem('vnTokenCreated', created.toJSON());
storage.setItem('vnTokenTtl', ttl);
}
removeStorage(storage) {
- storage.removeItem('vnToken');
- storage.removeItem('vnTokenMultimedia');
+ storage.removeItem(TOKEN);
+ storage.removeItem(TOKEN_MULTIMEDIA);
storage.removeItem('vnTokenCreated');
storage.removeItem('vnTokenTtl');
}
@@ -96,9 +97,9 @@ export default class Token {
this.checking = true;
const renewPeriod = Math.min(this.ttl, this.renewPeriod) * 1000;
const maxDate = this.created.getTime() + renewPeriod;
- const now = new Date();
+ const now = new Date().getTime();
- if (now.getTime() <= maxDate) {
+ if (now <= maxDate) {
this.checking = false;
return;
}
@@ -106,7 +107,17 @@ export default class Token {
this.$http.post('VnUsers/renewToken')
.then(res => {
const token = res.data;
- this.set(token.id, now, token.ttl, this.remember);
+ const tokenMultimedia =
+ localStorage.getItem(TOKEN_MULTIMEDIA)
+ ?? sessionStorage.getItem(TOKEN_MULTIMEDIA);
+
+ return this.$http.post('VnUsers/renewToken', null, {
+ headers: {Authorization: tokenMultimedia}
+ })
+ .then(({data}) => {
+ const tokenMultimedia = data;
+ this.set(token.id, tokenMultimedia.id, new Date(), token.ttl, this.remember);
+ });
})
.finally(() => {
this.checking = false;
@@ -119,4 +130,4 @@ export default class Token {
}
Token.$inject = ['vnInterceptor', '$http', '$rootScope'];
-ngModule.service('vnToken', Token);
+ngModule.service(TOKEN, Token);
diff --git a/front/salix/components/change-password/index.js b/front/salix/components/change-password/index.js
index 7e30bf54e..93241b781 100644
--- a/front/salix/components/change-password/index.js
+++ b/front/salix/components/change-password/index.js
@@ -1,5 +1,5 @@
import ngModule from '../../module';
-const UserError = require('vn-loopback/util/user-error');
+import UserError from 'core/lib/user-error';
export default class Controller {
constructor($scope, $element, $http, vnApp, $translate, $state, $location) {
diff --git a/front/salix/components/reset-password/index.js b/front/salix/components/reset-password/index.js
index c0a10cc52..b49eab841 100644
--- a/front/salix/components/reset-password/index.js
+++ b/front/salix/components/reset-password/index.js
@@ -1,5 +1,5 @@
import ngModule from '../../module';
-const UserError = require('vn-loopback/util/user-error');
+import UserError from 'core/lib/user-error';
export default class Controller {
constructor($scope, $element, $http, vnApp, $translate, $state, $location) {
diff --git a/gulpfile.js b/gulpfile.js
index aa2b65bc1..045d3ac41 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -6,6 +6,7 @@ const log = require('fancy-log');
const Myt = require('@verdnatura/myt/myt');
const Run = require('@verdnatura/myt/myt-run');
const Start = require('@verdnatura/myt/myt-start');
+const watchDatabaseChanges = require('./db/dbWatcher');
// Configuration
@@ -245,6 +246,7 @@ routes.description = 'Merges all module routes file into one file';
function watch(done) {
gulp.watch(routeFiles, gulp.series(routes));
gulp.watch(localeFiles, gulp.series(locales));
+ watchDatabaseChanges();
done();
}
watch.description = `Watches for changes in routes and locale files`;
diff --git a/loopback/common/methods/application/getEnumValues.js b/loopback/common/methods/application/getEnumValues.js
new file mode 100644
index 000000000..5e36e60be
--- /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 000000000..edb2e76f7
--- /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 ac8ae78f0..6bdc2c13a 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 31b954a32..ca76eae42 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -1,215 +1,217 @@
{
- "State cannot be blank": "State cannot be blank",
- "Cannot be blank": "Cannot be blank",
- "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
- "The grade must be an integer greater than or equal to zero": "The grade must be an integer greater than or equal to zero",
- "Invalid email": "Invalid email",
- "Name cannot be blank": "Name cannot be blank",
- "Phone cannot be blank": "Phone cannot be blank",
- "Description should have maximum of 45 characters": "Description should have maximum of 45 characters",
- "Period cannot be blank": "Period cannot be blank",
- "Sample type cannot be blank": "Sample type cannot be blank",
- "That payment method requires an IBAN": "That payment method requires an IBAN",
- "That payment method requires a BIC": "That payment method requires a BIC",
- "The default consignee can not be unchecked": "The default consignee can not be unchecked",
- "Enter an integer different to zero": "Enter an integer different to zero",
- "Package cannot be blank": "Package cannot be blank",
- "The price of the item changed": "The price of the item changed",
- "The sales of this ticket can't be modified": "The sales of this ticket can't be modified",
- "Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
- "You can't create an order for a frozen client": "You can't create an order for a frozen client",
- "This address doesn't exist": "This address doesn't exist",
- "Warehouse cannot be blank": "Warehouse cannot be blank",
- "Agency cannot be blank": "Agency cannot be blank",
- "The IBAN does not have the correct format": "The IBAN does not have the correct format",
- "You can't make changes on the basic data of an confirmed order or with rows": "You can't make changes on the basic data of an confirmed order or with rows",
- "You can't create a ticket for an inactive client": "You can't create a ticket for an inactive client",
- "Worker cannot be blank": "Worker cannot be blank",
- "You must delete the claim id %d first": "You must delete the claim id %d first",
- "You don't have enough privileges": "You don't have enough privileges",
- "Tag value cannot be blank": "Tag value cannot be blank",
- "A client with that Web User name already exists": "A client with that Web User name already exists",
- "The warehouse can't be repeated": "The warehouse can't be repeated",
- "Barcode must be unique": "Barcode must be unique",
- "You don't have enough privileges to do that": "You don't have enough privileges to do that",
- "You can't create a ticket for a frozen client": "You can't create a ticket for a frozen client",
- "can't be blank": "can't be blank",
- "Street cannot be empty": "Street cannot be empty",
- "City cannot be empty": "City cannot be empty",
- "EXTENSION_INVALID_FORMAT": "Invalid extension",
- "The secret can't be blank": "The secret can't be blank",
- "Invalid TIN": "Invalid Tax number",
- "This ticket can't be invoiced": "This ticket can't be invoiced",
- "The value should be a number": "The value should be a number",
- "The current ticket can't be modified": "The current ticket can't be modified",
- "Extension format is invalid": "Extension format is invalid",
- "NO_ZONE_FOR_THIS_PARAMETERS": "NO_ZONE_FOR_THIS_PARAMETERS",
- "This client can't be invoiced": "This client can't be invoiced",
- "You must provide the correction information to generate a corrective invoice": "You must provide the correction information to generate a corrective invoice",
- "The introduced hour already exists": "The introduced hour already exists",
- "Invalid parameters to create a new ticket": "Invalid parameters to create a new ticket",
- "Concept cannot be blank": "Concept cannot be blank",
- "Ticket id cannot be blank": "Ticket id cannot be blank",
- "Weekday cannot be blank": "Weekday cannot be blank",
- "This ticket can not be modified": "This ticket can not be modified",
- "You can't delete a confirmed order": "You can't delete a confirmed order",
- "Value has an invalid format": "Value has an invalid format",
- "The postcode doesn't exist. Please enter a correct one": "The postcode doesn't exist. Please enter a correct one",
- "Swift / BIC can't be empty": "Swift / BIC can't be empty",
- "Deleted sales from ticket": "I have deleted the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
- "Added sale to ticket": "I have added the following line to the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
- "Changed sale discount": "I have changed the following lines discounts from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Created claim": "I have created the claim [{{claimId}}]({{{claimUrl}}}) for the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Changed sale price": "I have changed the price of [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) from {{oldPrice}}€ ➔ *{{newPrice}}€* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
- "Changed sale quantity": "I have changed the quantity of [{{itemId}} {{concept}}]({{{itemUrl}}}) from {{oldQuantity}} ➔ *{{newQuantity}}* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
- "Changed sale reserved state": "I have changed the following lines reserved state from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Bought units from buy request": "Bought {{quantity}} units of [{{itemId}} {{concept}}]({{{urlItem}}}) for the ticket id [{{ticketId}}]({{{url}}})",
- "MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} ({{clientId}})]({{{url}}}) to *{{credit}} €*",
- "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 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",
- "Client checked as validated despite of duplication": "Client checked as validated despite of duplication from client id {{clientId}}",
- "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
- "NOT_ZONE_WITH_THIS_PARAMETERS": "There's no zone available for this day",
- "Created absence": "The worker {{author}} has added an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
- "Deleted absence": "The worker {{author}} has deleted an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
- "I have deleted the ticket id": "I have deleted the ticket id [{{id}}]({{{url}}})",
- "I have restored the ticket id": "I have restored the ticket id [{{id}}]({{{url}}})",
- "Changed this data from the ticket": "I have changed the data from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "The grade must be similar to the last one": "The grade must be similar to the last one",
- "agencyModeFk": "Agency",
- "clientFk": "Client",
- "zoneFk": "Zone",
- "warehouseFk": "Warehouse",
- "shipped": "Shipped",
- "landed": "Landed",
- "addressFk": "Address",
- "companyFk": "Company",
- "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",
- "Amount cannot be zero": "Amount cannot be zero",
- "Company has to be official": "Company has to be official",
- "Unable to clone this travel": "Unable to clone this travel",
- "The observation type can't be repeated": "The observation type can't be repeated",
- "New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*",
- "New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*",
- "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
- "Swift / BIC cannot be empty": "Swift / BIC cannot be empty",
- "Role name must be written in camelCase": "Role name must be written in camelCase",
- "Client assignment has changed": "I did change the salesperson ~*\"<{{previousWorkerName}}>\"*~ by *\"<{{currentWorkerName}}>\"* from the client [{{clientName}} ({{clientId}})]({{{url}}})",
- "None": "None",
- "error densidad = 0": "error densidad = 0",
- "This document already exists on this ticket": "This document already exists on this ticket",
- "serial non editable": "This serial doesn't allow to set a reference",
- "nickname": "nickname",
- "State": "State",
- "regular": "regular",
- "reserved": "reserved",
- "Global invoicing failed": "[Global invoicing] Wasn't able to invoice some of the clients",
- "A ticket with a negative base can't be invoiced": "A ticket with a negative base can't be invoiced",
- "This client is not invoiceable": "This client is not invoiceable",
- "INACTIVE_PROVIDER": "Inactive provider",
- "reference duplicated": "reference duplicated",
- "The PDF document does not exist": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option",
- "This item is not available": "This item is not available",
- "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}",
- "The type of business must be filled in basic data": "The type of business must be filled in basic data",
- "The worker has hours recorded that day": "The worker has hours recorded that day",
- "isWithoutNegatives": "isWithoutNegatives",
- "routeFk": "routeFk",
- "Not enough privileges to edit a client with verified data": "Not enough privileges to edit a client with verified data",
- "Can't change the password of another worker": "Can't change the password of another worker",
- "No hay un contrato en vigor": "There is no existing contract",
- "No está permitido trabajar": "Not allowed to work",
- "Dirección incorrecta": "Wrong direction",
- "No se permite fichar a futuro": "It is not allowed to sign in the future",
- "Descanso diario 12h.": "Daily rest 12h.",
- "Fichadas impares": "Odd signs",
- "Descanso diario 9h.": "Daily rest 9h.",
- "Descanso semanal 36h. / 72h.": "Weekly rest 36h. / 72h.",
- "Verify email": "Verify email",
- "Click on the following link to verify this email. If you haven't requested this email, just ignore it": "Click on the following link to verify this email. If you haven't requested this email, just ignore it",
- "Password does not meet requirements": "Password does not meet requirements",
- "You don't have privileges to change the zone": "You don't have privileges to change the zone or for these parameters there are more than one shipping options, talk to agencies",
- "Not enough privileges to edit a client": "Not enough privileges to edit a client",
- "Claim pickup order sent": "Claim pickup order sent [{{claimId}}]({{{claimUrl}}}) to client *{{clientName}}*",
- "You don't have grant privilege": "You don't have grant privilege",
- "You don't own the role and you can't assign it to another user": "You don't own the role and you can't assign it to another user",
- "Email verify": "Email verify",
- "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) merged with [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
- "App locked": "App locked by user {{userId}}",
- "The sales of the receiver ticket can't be modified": "The sales of the receiver ticket can't be modified",
- "Receipt's bank was not found": "Receipt's bank was not found",
- "This receipt was not compensated": "This receipt was not compensated",
- "Client's email was not found": "Client's email was not found",
- "Tickets with associated refunds": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº %d",
- "It is not possible to modify tracked sales": "It is not possible to modify tracked sales",
- "It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo",
- "It is not possible to modify cloned sales": "It is not possible to modify cloned sales",
- "Warehouse inventory not set": "Almacén inventario no está establecido",
- "Component cost not set": "Componente coste no está estabecido",
- "Description cannot be blank": "Description cannot be blank",
- "company": "Company",
- "country": "Country",
- "clientId": "Id client",
- "clientSocialName": "Client",
- "amount": "Amount",
- "taxableBase": "Taxable base",
- "ticketFk": "Id ticket",
- "isActive": "Active",
- "hasToInvoice": "Invoice",
- "isTaxDataChecked": "Data checked",
- "comercialId": "Id Comercial",
- "comercialName": "Comercial",
- "Added observation": "Added observation",
- "Comment added to client": "Comment added to client",
- "This ticket is already a refund": "This ticket is already a refund",
- "A claim with that sale already exists": "A claim with that sale already exists",
- "Pass expired": "The password has expired, change it from Salix",
- "Can't transfer claimed sales": "Can't transfer claimed sales",
- "Invalid quantity": "Invalid quantity",
- "Failed to upload delivery note": "Error to upload delivery note {{id}}",
- "Mail not sent": "There has been an error sending the invoice to the client [{{clientId}}]({{{clientUrl}}}), please check the email address",
- "The renew period has not been exceeded": "The renew period has not been exceeded",
- "You can not use the same password": "You can not use the same password",
- "Valid priorities": "Valid priorities: %d",
- "hasAnyNegativeBase": "Negative basis of tickets: {{ticketsIds}}",
- "hasAnyPositiveBase": "Positive basis of tickets: {{ticketsIds}}",
- "This ticket cannot be left empty.": "This ticket cannot be left empty. %s",
- "Social name should be uppercase": "Social name should be uppercase",
- "Street should be uppercase": "Street should be uppercase",
- "You don't have enough privileges.": "You don't have enough privileges.",
- "This ticket is locked": "This ticket is locked",
- "This ticket is not editable.": "This ticket is not editable.",
- "The ticket doesn't exist.": "The ticket doesn't exist.",
- "The sales do not exists": "The sales do not exists",
- "Ticket without Route": "Ticket without route",
- "Select a different client": "Select a different client",
- "Fill all the fields": "Fill all the fields",
- "Error while generating PDF": "Error while generating PDF",
- "Can't invoice to future": "Can't invoice to future",
- "This ticket is already invoiced": "This ticket is already invoiced",
- "Negative basis of tickets: 23": "Negative basis of tickets: 23",
- "Booking completed": "Booking complete",
- "The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
- "You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
- "Bank entity must be specified": "Bank entity must be specified",
- "Try again": "Try again",
- "keepPrice": "keepPrice",
- "Cannot past travels with entries": "Cannot past travels with entries",
- "It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}",
- "Incorrect pin": "Incorrect pin.",
- "The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
- "Name should be uppercase": "Name should be uppercase",
- "You cannot update these fields": "You cannot update these fields",
- "CountryFK cannot be empty": "Country cannot be empty",
- "You are not allowed to modify the alias": "You are not allowed to modify the alias",
- "You already have the mailAlias": "You already have the mailAlias",
+ "State cannot be blank": "State cannot be blank",
+ "Cannot be blank": "Cannot be blank",
+ "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
+ "The grade must be an integer greater than or equal to zero": "The grade must be an integer greater than or equal to zero",
+ "Invalid email": "Invalid email",
+ "Name cannot be blank": "Name cannot be blank",
+ "Phone cannot be blank": "Phone cannot be blank",
+ "Description should have maximum of 45 characters": "Description should have maximum of 45 characters",
+ "Period cannot be blank": "Period cannot be blank",
+ "Sample type cannot be blank": "Sample type cannot be blank",
+ "That payment method requires an IBAN": "That payment method requires an IBAN",
+ "That payment method requires a BIC": "That payment method requires a BIC",
+ "The default consignee can not be unchecked": "The default consignee can not be unchecked",
+ "Enter an integer different to zero": "Enter an integer different to zero",
+ "Package cannot be blank": "Package cannot be blank",
+ "The price of the item changed": "The price of the item changed",
+ "The sales of this ticket can't be modified": "The sales of this ticket can't be modified",
+ "Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
+ "You can't create an order for a frozen client": "You can't create an order for a frozen client",
+ "This address doesn't exist": "This address doesn't exist",
+ "Warehouse cannot be blank": "Warehouse cannot be blank",
+ "Agency cannot be blank": "Agency cannot be blank",
+ "The IBAN does not have the correct format": "The IBAN does not have the correct format",
+ "You can't make changes on the basic data of an confirmed order or with rows": "You can't make changes on the basic data of an confirmed order or with rows",
+ "You can't create a ticket for an inactive client": "You can't create a ticket for an inactive client",
+ "Worker cannot be blank": "Worker cannot be blank",
+ "You must delete the claim id %d first": "You must delete the claim id %d first",
+ "You don't have enough privileges": "You don't have enough privileges",
+ "Tag value cannot be blank": "Tag value cannot be blank",
+ "A client with that Web User name already exists": "A client with that Web User name already exists",
+ "The warehouse can't be repeated": "The warehouse can't be repeated",
+ "Barcode must be unique": "Barcode must be unique",
+ "You don't have enough privileges to do that": "You don't have enough privileges to do that",
+ "You can't create a ticket for a frozen client": "You can't create a ticket for a frozen client",
+ "can't be blank": "can't be blank",
+ "Street cannot be empty": "Street cannot be empty",
+ "City cannot be empty": "City cannot be empty",
+ "EXTENSION_INVALID_FORMAT": "Invalid extension",
+ "The secret can't be blank": "The secret can't be blank",
+ "Invalid TIN": "Invalid Tax number",
+ "This ticket can't be invoiced": "This ticket can't be invoiced",
+ "The value should be a number": "The value should be a number",
+ "The current ticket can't be modified": "The current ticket can't be modified",
+ "Extension format is invalid": "Extension format is invalid",
+ "NO_ZONE_FOR_THIS_PARAMETERS": "NO_ZONE_FOR_THIS_PARAMETERS",
+ "This client can't be invoiced": "This client can't be invoiced",
+ "You must provide the correction information to generate a corrective invoice": "You must provide the correction information to generate a corrective invoice",
+ "The introduced hour already exists": "The introduced hour already exists",
+ "Invalid parameters to create a new ticket": "Invalid parameters to create a new ticket",
+ "Concept cannot be blank": "Concept cannot be blank",
+ "Ticket id cannot be blank": "Ticket id cannot be blank",
+ "Weekday cannot be blank": "Weekday cannot be blank",
+ "This ticket can not be modified": "This ticket can not be modified",
+ "You can't delete a confirmed order": "You can't delete a confirmed order",
+ "Value has an invalid format": "Value has an invalid format",
+ "The postcode doesn't exist. Please enter a correct one": "The postcode doesn't exist. Please enter a correct one",
+ "Swift / BIC can't be empty": "Swift / BIC can't be empty",
+ "Deleted sales from ticket": "I have deleted the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
+ "Added sale to ticket": "I have added the following line to the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
+ "Changed sale discount": "I have changed the following lines discounts from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Created claim": "I have created the claim [{{claimId}}]({{{claimUrl}}}) for the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Changed sale price": "I have changed the price of [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) from {{oldPrice}}€ ➔ *{{newPrice}}€* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale quantity": "I have changed the quantity of [{{itemId}} {{concept}}]({{{itemUrl}}}) from {{oldQuantity}} ➔ *{{newQuantity}}* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale reserved state": "I have changed the following lines reserved state from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Bought units from buy request": "Bought {{quantity}} units of [{{itemId}} {{concept}}]({{{urlItem}}}) for the ticket id [{{ticketId}}]({{{url}}})",
+ "MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} ({{clientId}})]({{{url}}}) to *{{credit}} €*",
+ "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, 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",
+ "Client checked as validated despite of duplication": "Client checked as validated despite of duplication from client id {{clientId}}",
+ "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
+ "NOT_ZONE_WITH_THIS_PARAMETERS": "There's no zone available for this day",
+ "Created absence": "The worker {{author}} has added an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
+ "Deleted absence": "The worker {{author}} has deleted an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
+ "I have deleted the ticket id": "I have deleted the ticket id [{{id}}]({{{url}}})",
+ "I have restored the ticket id": "I have restored the ticket id [{{id}}]({{{url}}})",
+ "Changed this data from the ticket": "I have changed the data from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "The grade must be similar to the last one": "The grade must be similar to the last one",
+ "agencyModeFk": "Agency",
+ "clientFk": "Client",
+ "zoneFk": "Zone",
+ "warehouseFk": "Warehouse",
+ "shipped": "Shipped",
+ "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",
+ "Amount cannot be zero": "Amount cannot be zero",
+ "Company has to be official": "Company has to be official",
+ "Unable to clone this travel": "Unable to clone this travel",
+ "The observation type can't be repeated": "The observation type can't be repeated",
+ "New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*",
+ "New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*",
+ "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
+ "Swift / BIC cannot be empty": "Swift / BIC cannot be empty",
+ "Role name must be written in camelCase": "Role name must be written in camelCase",
+ "Client assignment has changed": "I did change the salesperson ~*\"<{{previousWorkerName}}>\"*~ by *\"<{{currentWorkerName}}>\"* from the client [{{clientName}} ({{clientId}})]({{{url}}})",
+ "None": "None",
+ "error densidad = 0": "error densidad = 0",
+ "This document already exists on this ticket": "This document already exists on this ticket",
+ "serial non editable": "This serial doesn't allow to set a reference",
+ "nickname": "nickname",
+ "State": "State",
+ "regular": "regular",
+ "reserved": "reserved",
+ "Global invoicing failed": "[Global invoicing] Wasn't able to invoice some of the clients",
+ "A ticket with a negative base can't be invoiced": "A ticket with a negative base can't be invoiced",
+ "This client is not invoiceable": "This client is not invoiceable",
+ "INACTIVE_PROVIDER": "Inactive provider",
+ "reference duplicated": "reference duplicated",
+ "The PDF document does not exist": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option",
+ "This item is not available": "This item is not available",
+ "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}",
+ "The type of business must be filled in basic data": "The type of business must be filled in basic data",
+ "The worker has hours recorded that day": "The worker has hours recorded that day",
+ "isWithoutNegatives": "isWithoutNegatives",
+ "routeFk": "routeFk",
+ "Not enough privileges to edit a client with verified data": "Not enough privileges to edit a client with verified data",
+ "Can't change the password of another worker": "Can't change the password of another worker",
+ "No hay un contrato en vigor": "There is no existing contract",
+ "No está permitido trabajar": "Not allowed to work",
+ "Dirección incorrecta": "Wrong direction",
+ "No se permite fichar a futuro": "It is not allowed to sign in the future",
+ "Descanso diario 12h.": "Daily rest 12h.",
+ "Fichadas impares": "Odd signs",
+ "Descanso diario 9h.": "Daily rest 9h.",
+ "Descanso semanal 36h. / 72h.": "Weekly rest 36h. / 72h.",
+ "Verify email": "Verify email",
+ "Click on the following link to verify this email. If you haven't requested this email, just ignore it": "Click on the following link to verify this email. If you haven't requested this email, just ignore it",
+ "Password does not meet requirements": "Password does not meet requirements",
+ "You don't have privileges to change the zone": "You don't have privileges to change the zone or for these parameters there are more than one shipping options, talk to agencies",
+ "Not enough privileges to edit a client": "Not enough privileges to edit a client",
+ "Claim pickup order sent": "Claim pickup order sent [{{claimId}}]({{{claimUrl}}}) to client *{{clientName}}*",
+ "You don't have grant privilege": "You don't have grant privilege",
+ "You don't own the role and you can't assign it to another user": "You don't own the role and you can't assign it to another user",
+ "Email verify": "Email verify",
+ "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) merged with [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
+ "App locked": "App locked by user {{userId}}",
+ "The sales of the receiver ticket can't be modified": "The sales of the receiver ticket can't be modified",
+ "Receipt's bank was not found": "Receipt's bank was not found",
+ "This receipt was not compensated": "This receipt was not compensated",
+ "Client's email was not found": "Client's email was not found",
+ "Tickets with associated refunds": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº %d",
+ "It is not possible to modify tracked sales": "It is not possible to modify tracked sales",
+ "It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo",
+ "It is not possible to modify cloned sales": "It is not possible to modify cloned sales",
+ "Warehouse inventory not set": "Almacén inventario no está establecido",
+ "Component cost not set": "Componente coste no está estabecido",
+ "Description cannot be blank": "Description cannot be blank",
+ "company": "Company",
+ "country": "Country",
+ "clientId": "Id client",
+ "clientSocialName": "Client",
+ "amount": "Amount",
+ "taxableBase": "Taxable base",
+ "ticketFk": "Id ticket",
+ "isActive": "Active",
+ "hasToInvoice": "Invoice",
+ "isTaxDataChecked": "Data checked",
+ "comercialId": "Id Comercial",
+ "comercialName": "Comercial",
+ "Added observation": "Added observation",
+ "Comment added to client": "Comment added to client",
+ "This ticket is already a refund": "This ticket is already a refund",
+ "A claim with that sale already exists": "A claim with that sale already exists",
+ "Pass expired": "The password has expired, change it from Salix",
+ "Can't transfer claimed sales": "Can't transfer claimed sales",
+ "Invalid quantity": "Invalid quantity",
+ "Failed to upload delivery note": "Error to upload delivery note {{id}}",
+ "Mail not sent": "There has been an error sending the invoice to the client [{{clientId}}]({{{clientUrl}}}), please check the email address",
+ "The renew period has not been exceeded": "The renew period has not been exceeded",
+ "You can not use the same password": "You can not use the same password",
+ "Valid priorities": "Valid priorities: %d",
+ "hasAnyNegativeBase": "Negative basis of tickets: {{ticketsIds}}",
+ "hasAnyPositiveBase": "Positive basis of tickets: {{ticketsIds}}",
+ "This ticket cannot be left empty.": "This ticket cannot be left empty. %s",
+ "Social name should be uppercase": "Social name should be uppercase",
+ "Street should be uppercase": "Street should be uppercase",
+ "You don't have enough privileges.": "You don't have enough privileges.",
+ "This ticket is locked": "This ticket is locked",
+ "This ticket is not editable.": "This ticket is not editable.",
+ "The ticket doesn't exist.": "The ticket doesn't exist.",
+ "The sales do not exists": "The sales do not exists",
+ "Ticket without Route": "Ticket without route",
+ "Select a different client": "Select a different client",
+ "Fill all the fields": "Fill all the fields",
+ "Error while generating PDF": "Error while generating PDF",
+ "Can't invoice to future": "Can't invoice to future",
+ "This ticket is already invoiced": "This ticket is already invoiced",
+ "Negative basis of tickets: 23": "Negative basis of tickets: 23",
+ "Booking completed": "Booking complete",
+ "The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
+ "You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
+ "Bank entity must be specified": "Bank entity must be specified",
+ "Try again": "Try again",
+ "keepPrice": "keepPrice",
+ "Cannot past travels with entries": "Cannot past travels with entries",
+ "It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}",
+ "Incorrect pin": "Incorrect pin.",
+ "The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
+ "Name should be uppercase": "Name should be uppercase",
+ "You cannot update these fields": "You cannot update these fields",
+ "CountryFK cannot be empty": "Country cannot be empty",
+ "You are not allowed to modify the alias": "You are not allowed to modify the alias",
+ "You already have the mailAlias": "You already have the mailAlias",
"This machine is already in use.": "This machine is already in use.",
"the plate does not exist": "The plate {{plate}} does not exist",
"We do not have availability for the selected item": "We do not have availability for the selected item",
@@ -222,5 +224,6 @@
"There are not picking tickets": "There are not picking tickets",
"ticketCommercial": "The ticket {{ ticket }} for the salesperson {{ salesMan }} is in preparation. (automatically generated message)",
"This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
- "They're not your subordinate": "They're not your subordinate"
+ "They're not your subordinate": "They're not your subordinate",
+ "InvoiceIn is already booked": "InvoiceIn is already booked"
}
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index 6e20bdd08..f1c57455e 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -1,353 +1,360 @@
{
- "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",
- "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."
+ "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}} {{defaulterId}} ({{{defaulterUrl}}})",
+ "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",
+ "InvoiceIn is already booked": "La factura recibida está contabilizada",
+ "This workCenter is already assigned to this agency": "Este centro de trabajo ya está asignado a esta agencia",
+ "Select ticket or client": "Elija un ticket o un client",
+ "It was not able to create the invoice": "No se pudo crear la factura"
}
diff --git a/loopback/locale/fr.json b/loopback/locale/fr.json
new file mode 100644
index 000000000..44f5e35d3
--- /dev/null
+++ b/loopback/locale/fr.json
@@ -0,0 +1,360 @@
+{
+ "Phone format is invalid": "O formato do telefone é inválido",
+ "You are not allowed to change the credit": "Você não tem permissão para alterar o crédito",
+ "Unable to mark the equivalence surcharge": "Não é possível marcar a sobretaxa de equivalência",
+ "The default consignee can not be unchecked": "Não é possível desmarcar o destinatário padrão",
+ "Unable to default a disabled consignee": "Não é possível definir um destinatário desativado como padrão",
+ "Can't be blank": "Não pode ficar em branco",
+ "Invalid TIN": "NIF/CIF inválido",
+ "TIN must be unique": "O NIF/CIF deve ser único",
+ "A client with that Web User name already exists": "Já existe um cliente com esse nome de usuário da web",
+ "Is invalid": "É inválido",
+ "Quantity cannot be zero": "A quantidade não pode ser zero",
+ "Enter an integer different to zero": "Digite um inteiro diferente de zero",
+ "Package cannot be blank": "A embalagem não pode ficar em branco",
+ "The company name must be unique": "O nome da empresa deve ser único",
+ "Invalid email": "E-mail inválido",
+ "The IBAN does not have the correct format": "O IBAN não tem o formato correto",
+ "That payment method requires an IBAN": "Este método de pagamento requer um IBAN",
+ "That payment method requires a BIC": "Este método de pagamento requer um BIC",
+ "State cannot be blank": "O estado não pode ficar em branco",
+ "Worker cannot be blank": "O trabalhador não pode ficar em branco",
+ "Cannot change the payment method if no salesperson": "Não é possível alterar o método de pagamento se não houver vendedor",
+ "can't be blank": "Não pode ficar em branco",
+ "Observation type must be unique": "O tipo de observação deve ser único",
+ "The credit must be an integer greater than or equal to zero": "O crédito deve ser um inteiro maior ou igual a zero",
+ "The grade must be similar to the last one": "A nota deve ser semelhante à última",
+ "Only manager can change the credit": "Apenas o gerente pode alterar o crédito deste cliente",
+ "Name cannot be blank": "O nome não pode ficar em branco",
+ "Phone cannot be blank": "O telefone não pode ficar em branco",
+ "Period cannot be blank": "O período não pode ficar em branco",
+ "Choose a company": "Escolha uma empresa",
+ "Se debe rellenar el campo de texto": "O campo de texto deve ser preenchido",
+ "Description should have maximum of 45 characters": "A descrição deve ter no máximo 45 caracteres",
+ "Cannot be blank": "Não pode ficar em branco",
+ "The grade must be an integer greater than or equal to zero": "A nota deve ser um inteiro maior ou igual a zero",
+ "Sample type cannot be blank": "O tipo de amostra não pode ficar em branco",
+ "Description cannot be blank": "A descrição não pode ficar em branco",
+ "The price of the item changed": "O preço do item mudou",
+ "The value should not be greater than 100%": "O valor não deve ser maior que 100%",
+ "The value should be a number": "O valor deve ser um número",
+ "This order is not editable": "Esta ordem não é editável",
+ "You can't create an order for a frozen client": "Você não pode criar uma ordem para um cliente congelado",
+ "You can't create an order for a client that has a debt": "Você não pode criar uma ordem para um cliente que tem uma dívida",
+ "is not a valid date": "não é uma data válida",
+ "Barcode must be unique": "O código de barras deve ser único",
+ "The warehouse can't be repeated": "O armazém não pode ser repetido",
+ "The tag or priority can't be repeated for an item": "A tag ou prioridade não podem ser repetidas para um item",
+ "The observation type can't be repeated": "O tipo de observação não pode ser repetido",
+ "A claim with that sale already exists": "Já existe uma reclamação com essa venda",
+ "You don't have enough privileges to change that field": "Você não tem privilégios suficientes para alterar esse campo",
+ "Warehouse cannot be blank": "O armazém não pode ficar em branco",
+ "Agency cannot be blank": "A agência não pode ficar em branco",
+ "Not enough privileges to edit a client with verified data": "Não há privilégios suficientes para editar um cliente com dados verificados",
+ "This address doesn't exist": "Este endereço não existe",
+ "You must delete the claim id %d first": "Você deve excluir primeiro a reclamação %d",
+ "You don't have enough privileges": "Você não tem privilégios suficientes",
+ "Cannot check Equalization Tax in this NIF/CIF": "Não é possível verificar o Imposto de Equalização neste NIF/CIF",
+ "You can't make changes on the basic data of an confirmed order or with rows": "Você não pode fazer alterações nos dados básicos de um pedido confirmado ou com linhas",
+ "INVALID_USER_NAME": "Le nom d'utilisateur ne doit contenir que des lettres minuscules ou, à partir du deuxième caractère, des chiffres ou des tirets bas, l'utilisation de la lettre ñ n'est pas autorisée",
+ "You can't create a ticket for a frozen client": "Vous ne pouvez pas créer un ticket pour un client gelé",
+ "You can't create a ticket for an inactive client": "Vous ne pouvez pas créer un ticket pour un client inactif",
+ "Tag value cannot be blank": "La valeur du tag ne peut pas être vide",
+ "ORDER_EMPTY": "Panier vide",
+ "You don't have enough privileges to do that": "Vous n'avez pas les privilèges nécessaires pour faire cela",
+ "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "LE CONSIGNATAIRE NE PEUT PAS ÊTRE DÉSACTIVÉ",
+ "Error. El NIF/CIF está repetido": "Erreur. Le NIF/CIF est répété",
+ "Street cannot be empty": "L'adresse ne peut pas être vide",
+ "City cannot be empty": "La ville ne peut pas être vide",
+ "Code cannot be blank": "Le code ne peut pas être vide",
+ "You cannot remove this department": "Vous ne pouvez pas supprimer ce département",
+ "The extension must be unique": "L'extension doit être unique",
+ "The secret can't be blank": "Le mot de passe ne peut pas être vide",
+ "We weren't able to send this SMS": "Nous n'avons pas pu envoyer ce SMS",
+ "This client can't be invoiced": "Ce client ne peut pas être facturé",
+ "You must provide the correction information to generate a corrective invoice": "Vous devez fournir les informations de correction pour générer une facture corrective",
+ "This ticket can't be invoiced": "Ce ticket ne peut pas être facturé",
+ "You cannot add or modify services to an invoiced ticket": "Vous ne pouvez pas ajouter ou modifier des services à un ticket facturé",
+ "This ticket can not be modified": "Ce ticket ne peut pas être modifié",
+ "The introduced hour already exists": "Cette heure a déjà été introduite",
+ "INFINITE_LOOP": "Il existe une dépendance entre deux chefs",
+ "The sales of the receiver ticket can't be modified": "Les lignes du ticket auquel vous envoyez ne peuvent pas être modifiées",
+ "NO_AGENCY_AVAILABLE": "Il n'y a pas de zone de livraison disponible avec ces paramètres",
+ "ERROR_PAST_SHIPMENT": "Vous ne pouvez pas sélectionner une date d'envoi dans le passé",
+ "The current ticket can't be modified": "Le ticket actuel ne peut pas être modifié",
+ "The current claim can't be modified": "La réclamation actuelle ne peut pas être modifiée",
+ "The sales of this ticket can't be modified": "Les lignes de ce ticket ne peuvent pas être modifiées",
+ "The sales do not exists": "Les lignes sélectionnées n'existent pas",
+ "Please select at least one sale": "Veuillez sélectionner au moins une ligne",
+ "All sales must belong to the same ticket": "Toutes les lignes doivent appartenir au même ticket",
+ "NO_ZONE_FOR_THIS_PARAMETERS": "Il n'y a pas de zone configurée pour ce jour",
+ "This item doesn't exists": "Cet article n'existe pas",
+ "NOT_ZONE_WITH_THIS_PARAMETERS": "Il n'y a pas de zone configurée pour ce jour",
+ "Extension format is invalid": "Le format de l'extension est invalide",
+ "Invalid parameters to create a new ticket": "Paramètres invalides pour créer un nouveau ticket",
+ "This item is not available": "Cet article n'est pas disponible",
+ "This postcode already exists": "Ce code postal existe déjà",
+ "Concept cannot be blank": "Le concept ne peut pas être vide",
+ "File doesn't exists": "Le fichier n'existe pas",
+ "You don't have privileges to change the zone": "Vous n'avez pas les privilèges pour changer la zone ou pour ces paramètres, il y a plus d'une option de livraison, parlez avec les agences",
+ "This ticket is already on weekly tickets": "Ce ticket est déjà sur les tickets hebdomadaires",
+ "Ticket id cannot be blank": "L'id du ticket ne peut pas être vide",
+ "Weekday cannot be blank": "Le jour de la semaine ne peut pas être vide",
+ "You can't delete a confirmed order": "Vous ne pouvez pas supprimer une commande confirmée",
+ "The social name has an invalid format": "Le nom fiscal a un format incorrect",
+ "Invalid quantity": "Quantité invalide",
+ "This postal code is not valid": "Ce code postal n'est pas valide",
+ "is invalid": "est invalide",
+ "The postcode doesn't exist. Please enter a correct one": "Le code postal n'existe pas. Veuillez entrer un code correct",
+ "The department name can't be repeated": "Le nom du département ne peut pas être répété",
+ "This phone already exists": "Ce téléphone existe déjà",
+ "You cannot move a parent to its own sons": "Vous ne pouvez pas déplacer un élément parent à un de ses fils",
+ "You can't create a claim for a removed ticket": "Vous ne pouvez pas créer une réclamation pour un ticket supprimé",
+ "You cannot delete a ticket that part of it is being prepared": "Vous ne pouvez pas supprimer un ticket dont une partie est en préparation",
+ "You must delete all the buy requests first": "Vous devez supprimer toutes les demandes d'achat en premier",
+ "You should specify a date": "Vous devez spécifier une date",
+ "You should specify at least a start or end date": "Vous devez spécifier au moins une date de début ou de fin",
+ "Start date should be lower than end date": "La date de début doit être inférieure à la date de fin",
+ "You should mark at least one week day": "Vous devez marquer au moins un jour de la semaine",
+ "Swift / BIC can't be empty": "Swift / BIC ne peut pas être vide",
+ "Customs agent is required for a non UEE member": "Un agent des douanes est requis pour les clients non membres de l'UEE",
+ "Incoterms is required for a non UEE member": "Les incoterms sont requis pour les clients non membres de l'UEE",
+ "Deleted sales from ticket": "J'ai supprimé les lignes suivantes du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
+ "Added sale to ticket": "J'ai ajouté la ligne suivante au ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
+ "Changed sale discount": "J'ai changé le rabais des lignes suivantes du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Created claim": "J'ai créé la réclamation [{{claimId}}]({{{claimUrl}}}) des lignes suivantes du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Changed sale price": "J'ai changé le prix de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* du ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale quantity": "J'ai changé la quantité de {{itemId}} {{concept}} de {{oldQuantity}} ➔ {{newQuantity}} du ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "State": "État",
+ "regular": "normal",
+ "reserved": "réservé",
+ "Changed sale reserved state": "J'ai changé l'état réservé des lignes suivantes du ticket[{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Bought units from buy request": "{{quantity}} unités ont été achetées de [{{itemId}} {{concept}}]({{{urlItem}}}) pour le ticket id [{{ticketId}}]({{{url}}})",
+ "Deny buy request": "La demande d'achat pour le ticket id {{ticketId}} a été rejetée. Raison : {{observation}}",
+ "MESSAGE_INSURANCE_CHANGE": "J'ai changé le crédit assuré du client [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*",
+ "Changed client paymethod": "J'ai changé la méthode de paiement du client [{{clientName}} ({{clientId}})]({{{url}}})",
+ "Sent units from ticket": "Envoi *{{quantity}}* unités de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenant du ticket id [{{ticketId}}]({{{ticketUrl}}})",
+ "Change quantity": "{{concept}} change de {{oldQuantity}} à {{newQuantity}}",
+ "Claim will be picked": "Le produit de la réclamation [({{claimId}})]({{{claimUrl}}}) du client *{{clientName}}*, avec le type de ramassage *{{claimPickup}}* sera récupéré",
+ "Claim state has changed to": "L'état de la réclamation [({{claimId}})]({{{claimUrl}}}) du client *{{clientName}}* a été changé à *{{newState}}*",
+ "Client checked as validated despite of duplication": "Le client a été vérifié malgré l'existence du client id {{clientId}}",
+ "ORDER_ROW_UNAVAILABLE": "Il n'y a pas de disponibilité pour ce produit",
+ "Distance must be lesser than 4000": "La distance doit être inférieure à 4000",
+ "This ticket is deleted": "Ce ticket est supprimé",
+ "Unable to clone this travel": "Il n'a pas été possible de cloner ce voyage",
+ "This thermograph id already exists": "L'id du thermographe existe déjà",
+ "Choose a date range or days forward": "Sélectionnez une plage de dates ou des jours à venir",
+ "ORDER_ALREADY_CONFIRMED": "COMMANDE DÉJÀ CONFIRMÉE",
+ "Invalid password": "Mot de passe invalide",
+ "Password does not meet requirements": "Le mot de passe ne répond pas aux exigences",
+ "Role already assigned": "Rôle déjà attribué",
+ "Invalid role name": "Nom de rôle invalide",
+ "Role name must be written in camelCase": "Le nom du rôle doit être écrit en camelCase",
+ "Email already exists": "L'email existe déjà",
+ "User already exists": "L'utilisateur existe déjà",
+ "Absence change notification on the labour calendar": "Notification de changement d'absence sur le calendrier de travail",
+ "Record of hours week": "Enregistrement des heures semaine {{week}} année {{year}}",
+ "Created absence": "L'employé {{author}} a ajouté une absence de type '{{absenceType}}' à {{employee}} pour le jour {{dated}}.",
+ "Deleted absence": "L'employé {{author}} a supprimé une absence de type '{{absenceType}}' à {{employee}} du jour {{dated}}.",
+ "I have deleted the ticket id": "J'ai supprimé le ticket id [{{id}}]({{{url}}})",
+ "I have restored the ticket id": "J'ai restauré le ticket id [{{id}}]({{{url}}})",
+ "You can only restore a ticket within the first hour after deletion": "Vous pouvez uniquement restaurer un ticket dans la première heure après sa suppression",
+ "Changed this data from the ticket": "J'ai modifié ces données du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "agencyModeFk": "Agence",
+ "clientFk": "Client",
+ "zoneFk": "Zone",
+ "warehouseFk": "Entrepôt",
+ "shipped": "Date d'envoi",
+ "landed": "Date de livraison",
+ "addressFk": "Consignataire",
+ "companyFk": "Entreprise",
+ "agency": "Agence",
+ "delivery": "Livraison",
+ "The social name cannot be empty": "La raison sociale ne peut pas être vide",
+ "The nif cannot be empty": "Le NIF ne peut pas être vide",
+ "You need to fill sage information before you check verified data": "Vous devez remplir les informations de sage avant de vérifier les données",
+ "ASSIGN_ZONE_FIRST": "Assignez une zone d'abord",
+ "Amount cannot be zero": "Le montant ne peut pas être zéro",
+ "Company has to be official": "L'entreprise doit être officielle",
+ "You can not select this payment method without a registered bankery account": "Vous ne pouvez pas utiliser cette méthode de paiement sans avoir enregistré un compte bancaire",
+ "Action not allowed on the test environment": "Cette action n'est pas autorisée dans l'environnement de test",
+ "The selected ticket is not suitable for this route": "Le ticket sélectionné n'est pas adapté à cet itinéraire",
+ "New ticket request has been created with price": "Une nouvelle demande de ticket '{{description}}' a été créée pour le jour {{shipped}}, avec une quantité de {{quantity}} et un prix de {{price}} €",
+ "New ticket request has been created": "Une nouvelle demande de ticket '{{description}}' a été créée pour le jour {{shipped}}, avec une quantité de {{quantity}}",
+ "Swift / BIC cannot be empty": "Swift / BIC ne peut pas être vide",
+ "This BIC already exist.": "Ce BIC existe déjà.",
+ "That item doesn't exists": "Cet article n'existe pas",
+ "There's a new urgent ticket:": "Il y a un nouveau ticket urgent :",
+ "Invalid account": "Compte invalide",
+ "Compensation account is empty": "Le compte de compensation est vide",
+ "This genus already exist": "Ce genre existe déjà",
+ "This specie already exist": "Cette espèce existe déjà",
+ "Client assignment has changed": "J'ai changé le commercial ~*\"<{{previousWorkerName}}>\"*~ pour *\"<{{currentWorkerName}}>\"* du client [{{clientName}} ({{clientId}})]({{{url}}})",
+ "None": "Aucun",
+ "The contract was not active during the selected date": "Le contrat n'était pas actif pendant la date sélectionnée",
+ "Cannot add more than one '1/2 day vacation'": "Vous ne pouvez pas ajouter plus d'un 'Vacances 1/2 jour'",
+ "This document already exists on this ticket": "Ce document existe déjà dans ce ticket",
+ "Some of the selected tickets are not billable": "Certains des tickets sélectionnés ne sont pas facturables",
+ "You can't invoice tickets from multiple clients": "Vous ne pouvez pas facturer des tickets de plusieurs clients",
+ "nickname": "surnom",
+ "INACTIVE_PROVIDER": "Fournisseur inactif",
+ "This client is not invoiceable": "Ce client n'est pas facturable",
+ "serial non editable": "Cette série ne permet pas d'assigner la référence",
+ "Max shipped required": "La date limite est requise",
+ "Can't invoice to future": "Vous ne pouvez pas facturer pour l'avenir",
+ "Can't invoice to past": "Vous ne pouvez pas facturer pour le passé",
+ "This ticket is already invoiced": "Ce ticket est déjà facturé",
+ "A ticket with an amount of zero can't be invoiced": "Un ticket avec un montant de zéro ne peut pas être facturé",
+ "A ticket with a negative base can't be invoiced": "Un ticket avec une base négative ne peut pas être facturé",
+ "Global invoicing failed": "[Facturation globale] Certains clients n'ont pas pu être facturés",
+ "Wasn't able to invoice the following clients": "Les clients suivants n'ont pas pu être facturés",
+ "Can't verify data unless the client has a business type": "Vous ne pouvez pas vérifier les données d'un client qui n'a pas de type d'entreprise",
+ "You don't have enough privileges to set this credit amount": "Vous n'avez pas suffisamment de privilèges pour établir ce montant de crédit",
+ "You can't change the credit set to zero from a financialBoss": "Vous ne pouvez pas modifier le crédit établi à zéro par un chef financier",
+ "Amounts do not match": "Les montants ne correspondent pas",
+ "The PDF document does not exist": "Le document PDF n'existe pas. Essayez de le régénérer depuis l'option 'Regénérer PDF facture'",
+ "The type of business must be filled in basic data": "Le type d'entreprise doit être rempli dans les données de base",
+ "You can't create a claim from a ticket delivered more than seven days ago": "Vous ne pouvez pas créer une réclamation pour un ticket livré il y a plus de sept jours",
+ "The worker has hours recorded that day": "Le travailleur a des heures enregistrées ce jour-là",
+ "The worker has a marked absence that day": "Le travailleur a une absence marquée ce jour-là",
+ "You can not modify is pay method checked": "Vous ne pouvez pas modifier le champ méthode de paiement validé",
+ "The account size must be exactly 10 characters": "La taille du compte doit être exactement de 10 caractères",
+ "Can't transfer claimed sales": "Vous ne pouvez pas transférer des lignes réclamées",
+ "You don't have privileges to create refund": "Vous n'avez pas les privilèges pour créer un abonnement",
+ "The item is required": "L'article est requis",
+ "The agency is already assigned to another autonomous": "L'agence est déjà assignée à un autre autonome",
+ "date in the future": "Date dans le futur",
+ "reference duplicated": "Référence dupliquée",
+ "This ticket is already a refund": "Ce ticket est déjà un abonnement",
+ "isWithoutNegatives": "Sans négatifs",
+ "routeFk": "routeFk",
+ "Can't change the password of another worker": "Vous ne pouvez pas changer le mot de passe d'un autre travailleur",
+ "No hay un contrato en vigor": "Il n'y a pas de contrat en vigueur",
+ "No se permite fichar a futuro": "Il n'est pas permis de pointer pour l'avenir",
+ "No está permitido trabajar": "Il n'est pas permis de travailler",
+ "Fichadas impares": "Pointages impairs",
+ "Descanso diario 12h.": "Repos quotidien de 12h.",
+ "Descanso semanal 36h. / 72h.": "Repos hebdomadaire de 36h / 72h.",
+ "Dirección incorrecta": "Adresse incorrecte",
+ "Modifiable user details only by an administrator": "Détails de l'utilisateur modifiables uniquement par un administrateur",
+ "Modifiable password only via recovery or by an administrator": "Mot de passe modifiable uniquement via la récupération ou par un administrateur",
+ "Not enough privileges to edit a client": "Vous n'avez pas suffisamment de privilèges pour éditer un client",
+ "This route does not exists": "Cette route n'existe pas",
+ "Claim pickup order sent": "Ordre de ramassage de la réclamation envoyé [{{claimId}}]({{{claimUrl}}}) au client *{{clientName}}*",
+ "You don't have grant privilege": "Vous n'avez pas le privilège de donner des privilèges",
+ "You don't own the role and you can't assign it to another user": "Vous n'êtes pas le propriétaire du rôle et vous ne pouvez pas l'assigner à un autre utilisateur",
+ "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionné avec [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
+ "Already has this status": "A déjà cet état",
+ "There aren't records for this week": "Il n'y a pas d'enregistrements pour cette semaine",
+ "Empty data source": "Source de données vide",
+ "App locked": "Application verrouillée par l'utilisateur {{userId}}",
+ "Email verify": "Vérification de courriel",
+ "Landing cannot be lesser than shipment": "L'arrivée ne peut pas être inférieure à l'expédition",
+ "Receipt's bank was not found": "La banque du reçu n'a pas été trouvée",
+ "This receipt was not compensated": "Ce reçu n'a pas été compensé",
+ "Client's email was not found": "L'email du client n'a pas été trouvé",
+ "Negative basis": "Base négative",
+ "This worker code already exists": "Ce code de travailleur existe déjà",
+ "This personal mail already exists": "Ce courriel personnel existe déjà",
+ "This worker already exists": "Ce travailleur existe déjà",
+ "App name does not exist": "Le nom de l'application n'est pas valide",
+ "Try again": "Réessayez",
+ "Aplicación bloqueada por el usuario 9": "Application bloquée par l'utilisateur 9",
+ "Failed to upload delivery note": "Échec du téléchargement du bon de livraison {{id}}",
+ "The DOCUWARE PDF document does not exists": "Le document PDF Docuware n'existe pas",
+ "It is not possible to modify tracked sales": "Il n'est pas possible de modifier des lignes de commande qui ont commencé à être préparées",
+ "It is not possible to modify sales that their articles are from Floramondo": "Il n'est pas possible de modifier des lignes de commande dont les articles proviennent de Floramondo",
+ "It is not possible to modify cloned sales": "Il n'est pas possible de modifier des lignes de commande clonées",
+ "A supplier with the same name already exists. Change the country.": "Un fournisseur avec le même nom existe déjà. Changez le pays.",
+ "There is no assigned email for this client": "Il n'y a pas d'email assigné pour ce client",
+ "Exists an invoice with a future date": "Il existe une facture avec une date future",
+ "Invoice date can't be less than max date": "La date de la facture ne peut pas être inférieure à la date limite",
+ "Warehouse inventory not set": "L'inventaire de l'entrepôt n'est pas établi",
+ "This locker has already been assigned": "Ce casier a déjà été assigné",
+ "Tickets with associated refunds": "Vous ne pouvez pas supprimer des tickets avec des remboursements associés. Ce ticket est associé au remboursement Nº %d",
+ "Not exist this branch": "La branche n'existe pas",
+ "This ticket cannot be signed because it has not been boxed": "Ce ticket ne peut pas être signé car il n'a pas été emballé",
+ "Collection does not exist": "La collection n'existe pas",
+ "Cannot obtain exclusive lock": "Impossible d'obtenir un verrou exclusif",
+ "Insert a date range": "Insérez une plage de dates",
+ "Added observation": "{{user}} a ajouté cette observation : {{text}}",
+ "Comment added to client": "Observation ajoutée au client {{clientFk}}",
+ "Invalid auth code": "Code de vérification incorrect",
+ "Invalid or expired verification code": "Code de vérification incorrect ou expiré",
+ "Cannot create a new claimBeginning from a different ticket": "Vous ne pouvez pas créer une ligne de réclamation d'un ticket différent de l'origine",
+ "company": "Compagnie",
+ "country": "Pays",
+ "clientId": "Id client",
+ "clientSocialName": "Client",
+ "amount": "Montant",
+ "taxableBase": "Base",
+ "ticketFk": "Id ticket",
+ "isActive": "Actif",
+ "hasToInvoice": "Facturer",
+ "isTaxDataChecked": "Données vérifiées",
+ "comercialId": "Id commercial",
+ "comercialName": "Commercial",
+ "Pass expired": "Le mot de passe a expiré, changez-le depuis Salix",
+ "Invalid NIF for VIES": "NIF invalide pour VIES",
+ "Ticket does not exist": "Ce ticket n'existe pas",
+ "Ticket is already signed": "Ce ticket a déjà été signé",
+ "Authentication failed": "Échec de l'authentification",
+ "You can't use the same password": "Vous ne pouvez pas utiliser le même mot de passe",
+ "You can only add negative amounts in refund tickets": "Vous ne pouvez ajouter que des montants négatifs dans les tickets de remboursement",
+ "Fecha fuera de rango": "Date hors plage",
+ "Error while generating PDF": "Erreur lors de la génération du PDF",
+ "Error when sending mail to client": "Erreur lors de l'envoi du courrier au client",
+ "Mail not sent": "Une erreur est survenue lors de l'envoi de la facture au client [{{clientId}}]({{{clientUrl}}}), veuillez vérifier l'adresse électronique",
+ "The renew period has not been exceeded": "La période de renouvellement n'a pas été dépassée",
+ "Valid priorities": "Priorités valides : %d",
+ "hasAnyNegativeBase": "Base négative pour les tickets : {{ticketsIds}}",
+ "hasAnyPositiveBase": "Base positives pour les tickets : {{ticketsIds}}",
+ "You cannot assign an alias that you are not assigned to": "Vous ne pouvez pas attribuer un alias que vous n'avez pas reçu",
+ "This ticket cannot be left empty.": "Ce ticket ne peut pas être laissé vide. %s",
+ "The company has not informed the supplier account for bank transfers": "L'entreprise n'a pas informé le compte du fournisseur pour les transferts bancaires",
+ "You cannot assign/remove an alias that you are not assigned to": "Vous ne pouvez pas attribuer/supprimer un alias que vous n'avez pas reçu",
+ "This invoice has a linked vehicle.": "Cette facture a un véhicule lié",
+ "You don't have enough privileges.": "Vous n'avez pas suffisamment de privilèges.",
+ "This ticket is locked": "Ce ticket est bloqué.",
+ "This ticket is not editable.": "Ce ticket n'est pas modifiable.",
+ "The ticket doesn't exist.": "Le ticket n'existe pas.",
+ "Social name should be uppercase": "La raison sociale doit être en majuscules",
+ "Street should be uppercase": "L'adresse fiscale doit être en majuscules",
+ "Ticket without Route": "Ticket sans itinéraire",
+ "Select a different client": "Sélectionnez un client différent",
+ "Fill all the fields": "Remplissez tous les champs",
+ "The response is not a PDF": "La réponse n'est pas un PDF",
+ "Booking completed": "Réservation terminée",
+ "The ticket is in preparation": "Le ticket [{{ticketId}}]({{{ticketUrl}}}) du commercial {{salesPersonId}} est en préparation",
+ "The notification subscription of this worker cant be modified": "L'abonnement à la notification de ce travailleur ne peut pas être modifié",
+ "User disabled": "Utilisateur désactivé",
+ "The amount cannot be less than the minimum": "La quantité ne peut pas être inférieure à la quantité minimale",
+ "quantityLessThanMin": "La quantité ne peut pas être inférieure à la quantité minimale",
+ "Cannot past travels with entries": "Vous ne pouvez pas passer des envois avec des entrées",
+ "It was not able to remove the next expeditions:": "Il n'a pas été possible de supprimer les expéditions suivantes : {{expeditions}}",
+ "This claim has been updated": "La réclamation avec l'Id : {{claimId}}, a été mise à jour",
+ "This user does not have an assigned tablet": "Cet utilisateur n'a pas de tablette assignée",
+ "Field are invalid": "Le champ '{{tag}}' n'est pas valide",
+ "Incorrect pin": "Pin incorrect.",
+ "You already have the mailAlias": "Vous avez déjà cet alias de courrier",
+ "The alias cant be modified": "Cet alias de courrier ne peut pas être modifié",
+ "No tickets to invoice": "Pas de tickets à facturer",
+ "this warehouse has not dms": "L'entrepôt n'accepte pas les documents",
+ "This ticket already has a cmr saved": "Ce ticket a déjà un cmr enregistré",
+ "Name should be uppercase": "Le nom doit être en majuscules",
+ "Bank entity must be specified": "L'entité bancaire doit être spécifiée",
+ "An email is necessary": "Un email est nécessaire",
+ "You cannot update these fields": "Vous ne pouvez pas mettre à jour ces champs",
+ "CountryFK cannot be empty": "Le pays ne peut pas être vide",
+ "Cmr file does not exist": "Le fichier cmr n'existe pas",
+ "You are not allowed to modify the alias": "Vous n'êtes pas autorisé à modifier l'alias",
+ "The address of the customer must have information about Incoterms and Customs Agent": "L'adresse du client doit contenir des informations sur les Incoterms et l'agent des douanes",
+ "The line could not be marked": "La ligne ne peut pas être marquée",
+ "This password can only be changed by the user themselves": "Ce mot de passe ne peut être modifié que par l'utilisateur lui-même",
+ "They're not your subordinate": "Ce n'est pas votre subordonné.",
+ "No results found": "Aucun résultat trouvé",
+ "InvoiceIn is already booked": "La facture reçue est déjà comptabilisée",
+ "This workCenter is already assigned to this agency": "Ce centre de travail est déjà assigné à cette agence",
+ "Select ticket or client": "Choisissez un ticket ou un client",
+ "It was not able to create the invoice": "Il n'a pas été possible de créer la facture"
+}
\ No newline at end of file
diff --git a/loopback/locale/pt.json b/loopback/locale/pt.json
new file mode 100644
index 000000000..b11eeefc6
--- /dev/null
+++ b/loopback/locale/pt.json
@@ -0,0 +1,360 @@
+{
+ "Phone format is invalid": "O formato do telefone não é válido",
+ "You are not allowed to change the credit": "Você não tem permissão para alterar o crédito",
+ "Unable to mark the equivalence surcharge": "Não é possível marcar a sobretaxa de equivalência",
+ "The default consignee can not be unchecked": "Não é possível desmarcar o destinatário padrão",
+ "Unable to default a disabled consignee": "Não é possível definir como padrão um destinatário desativado",
+ "Can't be blank": "Não pode estar em branco",
+ "Invalid TIN": "NIF/CIF inválido",
+ "TIN must be unique": "O NIF/CIF deve ser único",
+ "A client with that Web User name already exists": "Já existe um cliente com esse nome de usuário da web",
+ "Is invalid": "É inválido",
+ "Quantity cannot be zero": "A quantidade não pode ser zero",
+ "Enter an integer different to zero": "Digite um inteiro diferente de zero",
+ "Package cannot be blank": "A embalagem não pode estar em branco",
+ "The company name must be unique": "O nome da empresa deve ser único",
+ "Invalid email": "Email inválido",
+ "The IBAN does not have the correct format": "O IBAN não tem o formato correto",
+ "That payment method requires an IBAN": "Esse método de pagamento requer um IBAN",
+ "That payment method requires a BIC": "Esse método de pagamento requer um BIC",
+ "State cannot be blank": "O estado não pode estar em branco",
+ "Worker cannot be blank": "O trabalhador não pode estar em branco",
+ "Cannot change the payment method if no salesperson": "Não é possível alterar o método de pagamento se não houver vendedor",
+ "can't be blank": "não pode estar em branco",
+ "Observation type must be unique": "O tipo de observação deve ser único",
+ "The credit must be an integer greater than or equal to zero": "O crédito deve ser um número inteiro maior ou igual a zero",
+ "The grade must be similar to the last one": "A nota deve ser semelhante à última",
+ "Only manager can change the credit": "Apenas o gerente pode alterar o crédito deste cliente",
+ "Name cannot be blank": "O nome não pode estar em branco",
+ "Phone cannot be blank": "O telefone não pode estar em branco",
+ "Period cannot be blank": "O período não pode estar em branco",
+ "Choose a company": "Escolha uma empresa",
+ "Se debe rellenar el campo de texto": "Você deve preencher o campo de texto",
+ "Description should have maximum of 45 characters": "A descrição deve ter no máximo 45 caracteres",
+ "Cannot be blank": "Não pode estar em branco",
+ "The grade must be an integer greater than or equal to zero": "A nota deve ser um número inteiro maior ou igual a zero",
+ "Sample type cannot be blank": "O tipo de amostra não pode estar em branco",
+ "Description cannot be blank": "A descrição não pode estar em branco",
+ "The price of the item changed": "O preço do item mudou",
+ "The value should not be greater than 100%": "O valor não deve ser maior que 100%",
+ "The value should be a number": "O valor deve ser um número",
+ "This order is not editable": "Esta ordem não é editável",
+ "You can't create an order for a frozen client": "Você não pode criar um pedido para um cliente congelado",
+ "You can't create an order for a client that has a debt": "Você não pode criar um pedido para um cliente com dívida",
+ "is not a valid date": "não é uma data válida",
+ "Barcode must be unique": "O código de barras deve ser único",
+ "The warehouse can't be repeated": "O armazém não pode ser repetido",
+ "The tag or priority can't be repeated for an item": "A tag ou prioridade não pode ser repetida para um item",
+ "The observation type can't be repeated": "O tipo de observação não pode ser repetido",
+ "A claim with that sale already exists": "Já existe uma reclamação com essa venda",
+ "You don't have enough privileges to change that field": "Você não tem privilégios suficientes para alterar esse campo",
+ "Warehouse cannot be blank": "O armazém não pode estar em branco",
+ "Agency cannot be blank": "A agência não pode estar em branco",
+ "Not enough privileges to edit a client with verified data": "Não há privilégios suficientes para editar um cliente com dados verificados",
+ "This address doesn't exist": "Este endereço não existe",
+ "You must delete the claim id %d first": "Você deve excluir a reclamação %d primeiro",
+ "You don't have enough privileges": "Você não tem privilégios suficientes",
+ "Cannot check Equalization Tax in this NIF/CIF": "Não é possível verificar o Imposto de Equalização neste NIF/CIF",
+ "You can't make changes on the basic data of an confirmed order or with rows": "Você não pode fazer alterações nos dados básicos de um pedido confirmado ou com linhas",
+ "INVALID_USER_NAME": "O nome de usuário só pode conter letras minúsculas ou, a partir do segundo caractere, números ou sublinhados, o uso da letra ñ não é permitido",
+ "You can't create a ticket for a frozen client": "Você não pode criar um ticket para um cliente congelado",
+ "You can't create a ticket for an inactive client": "Você não pode criar um ticket para um cliente inativo",
+ "Tag value cannot be blank": "O valor da tag não pode estar em branco",
+ "ORDER_EMPTY": "Cesta vazia",
+ "You don't have enough privileges to do that": "Você não tem privilégios suficientes para fazer isso",
+ "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NÃO É POSSÍVEL DESATIVAR O CONSIGNATÁRIO",
+ "Error. El NIF/CIF está repetido": "Erro. O NIF/CIF está repetido",
+ "Street cannot be empty": "A rua não pode estar vazia",
+ "City cannot be empty": "A cidade não pode estar vazia",
+ "Code cannot be blank": "O código não pode estar em branco",
+ "You cannot remove this department": "Você não pode remover este departamento",
+ "The extension must be unique": "A extensão deve ser única",
+ "The secret can't be blank": "O segredo não pode estar em branco",
+ "We weren't able to send this SMS": "Não conseguimos enviar este SMS",
+ "This client can't be invoiced": "Este cliente não pode ser faturado",
+ "You must provide the correction information to generate a corrective invoice": "Você deve fornecer as informações de correção para gerar uma fatura corretiva",
+ "This ticket can't be invoiced": "Este ticket não pode ser faturado",
+ "You cannot add or modify services to an invoiced ticket": "Você não pode adicionar ou modificar serviços a um ticket faturado",
+ "This ticket can not be modified": "Este ticket não pode ser modificado",
+ "The introduced hour already exists": "A hora introduzida já existe",
+ "INFINITE_LOOP": "Loop infinito",
+ "The sales of the receiver ticket can't be modified": "As vendas do ticket receptor não podem ser modificadas",
+ "NO_AGENCY_AVAILABLE": "Nenhuma agência disponível",
+ "ERROR_PAST_SHIPMENT": "Erro. Data de envio no passado",
+ "The current ticket can't be modified": "O ticket atual não pode ser modificado",
+ "The current claim can't be modified": "A reclamação atual não pode ser modificada",
+ "The sales of this ticket can't be modified": "As vendas deste ticket não podem ser modificadas",
+ "The sales do not exists": "As vendas não existem",
+ "Please select at least one sale": "Por favor, selecione pelo menos uma venda",
+ "All sales must belong to the same ticket": "Todas as vendas devem pertencer ao mesmo ticket",
+ "NO_ZONE_FOR_THIS_PARAMETERS": "Nenhuma zona para estes parâmetros",
+ "This item doesn't exists": "Este item não existe",
+ "NOT_ZONE_WITH_THIS_PARAMETERS": "Nenhuma zona para estes parâmetros",
+ "Extension format is invalid": "O formato da extensão é inválido",
+ "Invalid parameters to create a new ticket": "Parâmetros inválidos para criar um novo ticket",
+ "This item is not available": "Este item não está disponível",
+ "This postcode already exists": "Este código postal já existe",
+ "Concept cannot be blank": "O conceito não pode estar em branco",
+ "File doesn't exists": "O arquivo não existe",
+ "You don't have privileges to change the zone": "Você não tem privilégios para alterar a zona",
+ "This ticket is already on weekly tickets": "Este ticket já está em tickets semanais",
+ "Ticket id cannot be blank": "O id do ticket não pode ficar em branco",
+ "Weekday cannot be blank": "O dia da semana não pode ficar em branco",
+ "You can't delete a confirmed order": "Você não pode excluir um pedido confirmado",
+ "The social name has an invalid format": "O nome social tem um formato inválido",
+ "Invalid quantity": "Quantidade inválida",
+ "This postal code is not valid": "Este código postal não é válido",
+ "is invalid": "é inválido",
+ "The postcode doesn't exist. Please enter a correct one": "O código postal não existe. Por favor, insira um correto",
+ "The department name can't be repeated": "O nome do departamento não pode ser repetido",
+ "This phone already exists": "Este telefone já existe",
+ "You cannot move a parent to its own sons": "Você não pode mover um pai para seus próprios filhos",
+ "You can't create a claim for a removed ticket": "Você não pode criar uma reclamação para um ticket removido",
+ "You cannot delete a ticket that part of it is being prepared": "Você não pode excluir um ticket que parte dele está sendo preparada",
+ "You must delete all the buy requests first": "Você deve excluir todas as solicitações de compra primeiro",
+ "You should specify a date": "Você deve especificar uma data",
+ "You should specify at least a start or end date": "Você deve especificar pelo menos uma data de início ou fim",
+ "Start date should be lower than end date": "A data de início deve ser anterior à data de término",
+ "You should mark at least one week day": "Você deve marcar pelo menos um dia da semana",
+ "Swift / BIC can't be empty": "Swift / BIC não pode ficar vazio",
+ "Customs agent is required for a non UEE member": "O agente alfandegário é necessário para um cliente não UEE",
+ "Incoterms is required for a non UEE member": "Incoterms são necessários para um cliente não UEE",
+ "Deleted sales from ticket": "Vendas excluídas do ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
+ "Added sale to ticket": "Venda adicionada ao ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
+ "Changed sale discount": "Desconto da venda alterado no ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Created claim": "Reclamação criada [{{claimId}}]({{{claimUrl}}}) no ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Changed sale price": "Preço da venda alterado para [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* no ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale quantity": "Quantidade da venda alterada para [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* no ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "State": "Estado",
+ "regular": "normal",
+ "reserved": "reservado",
+ "Changed sale reserved state": "Estado de reserva da venda alterado no ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Bought units from buy request": "Unidades compradas da solicitação de compra [{{itemId}} {{concept}}]({{{urlItem}}}) para o ticket id [{{ticketId}}]({{{url}}})",
+ "Deny buy request": "Solicitação de compra negada para o ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}",
+ "MESSAGE_INSURANCE_CHANGE": "Crédito segurado do cliente [{{clientName}} ({{clientId}})]({{{url}}}) alterado para *{{credit}} €*",
+ "Changed client paymethod": "Forma de pagamento do cliente [{{clientName}} ({{clientId}}) alterada",
+ "Sent units from ticket": "*{{quantity}}* Unidades enviadas de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})",
+ "Change quantity": "{{concept}} mudou de {{oldQuantity}} para {{newQuantity}}",
+ "Claim will be picked": "Reclamação será recolhida [({{claimId}})]({{{claimUrl}}}) do cliente *{{clientName}}*, com tipo de coleta *{{claimPickup}}*",
+ "Claim state has changed to": "Estado da reclamação alterado para {{newState}} ({{claimId}}) do cliente {{clientName}}",
+ "Client checked as validated despite of duplication": "Cliente verificado apesar da duplicação do id {{clientId}}",
+ "ORDER_ROW_UNAVAILABLE": "Esta linha de pedido não está disponível",
+ "Distance must be lesser than 4000": "A distância deve ser menor que 4000",
+ "This ticket is deleted": "Este ticket foi excluído",
+ "Unable to clone this travel": "Não foi possível clonar esta viagem",
+ "This thermograph id already exists": "Esta id de termógrafo já existe",
+ "Choose a date range or days forward": "Escolha um intervalo de datas ou dias adiante",
+ "ORDER_ALREADY_CONFIRMED": "PEDIDO JÁ CONFIRMADO",
+ "Invalid password": "Senha inválida",
+ "Password does not meet requirements": "Senha não atende aos requisitos",
+ "Role already assigned": "Função já atribuída",
+ "Invalid role name": "Nome da função inválido",
+ "Role name must be written in camelCase": "O nome da função deve ser escrito em camelCase",
+ "Email already exists": "O e-mail já existe",
+ "User already exists": "O usuário já existe",
+ "Absence change notification on the labour calendar": "Notificação de mudança de ausência no calendário trabalhista",
+ "Record of hours week": "Registro de horas semana {{week}} ano {{year}} ",
+ "Created absence": "O funcionário {{author}} adicionou uma ausência do tipo '{{absenceType}}' para {{employee}} no dia {{dated}}.",
+ "Deleted absence": "O funcionário {{author}} excluiu uma ausência do tipo '{{absenceType}}' de {{employee}} no dia {{dated}}.",
+ "I have deleted the ticket id": "Eu excluí o id do ticket [{{id}}]({{{url}}})",
+ "I have restored the ticket id": "Eu restaurei o id do ticket [{{id}}]({{{url}}})",
+ "You can only restore a ticket within the first hour after deletion": "Você só pode restaurar um ticket dentro da primeira hora após a exclusão",
+ "Changed this data from the ticket": "Estes dados do ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "agencyModeFk": "Agência",
+ "clientFk": "Cliente",
+ "zoneFk": "Zona",
+ "warehouseFk": "Armazém",
+ "shipped": "Enviado",
+ "landed": "Entregue",
+ "addressFk": "Destinatário",
+ "companyFk": "Empresa",
+ "agency": "Agência",
+ "delivery": "Entrega",
+ "The social name cannot be empty": "O nome social não pode estar vazio",
+ "The nif cannot be empty": "O NIF não pode estar vazio",
+ "You need to fill sage information before you check verified data": "Você precisa preencher as informações do sage antes de verificar os dados verificados",
+ "ASSIGN_ZONE_FIRST": "Atribua uma zona primeiro",
+ "Amount cannot be zero": "O valor não pode ser zero",
+ "Company has to be official": "A empresa deve ser oficial",
+ "You can not select this payment method without a registered bankery account": "Você não pode selecionar este método de pagamento sem uma conta bancária registrada",
+ "Action not allowed on the test environment": "Ação não permitida no ambiente de teste",
+ "The selected ticket is not suitable for this route": "O ticket selecionado não é adequado para esta rota",
+ "New ticket request has been created with price": "Nova solicitação de ticket criada para o dia {{shipped}}, com uma quantidade de {{quantity}} e um preço de {{price}} €",
+ "New ticket request has been created": "Nova solicitação de ticket criada para o dia {{shipped}}, com uma quantidade de {{quantity}}",
+ "Swift / BIC cannot be empty": "Swift / BIC não pode ficar vazio",
+ "This BIC already exist.": "Este BIC já existe.",
+ "That item doesn't exists": "Esse item não existe",
+ "There's a new urgent ticket:": "Há um novo ticket urgente:",
+ "Invalid account": "Conta inválida",
+ "Compensation account is empty": "A conta de compensação está vazia",
+ "This genus already exist": "Este gênero já existe",
+ "This specie already exist": "Esta espécie já existe",
+ "Client assignment has changed": "A atribuição do cliente foi alterada de ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})",
+ "None": "Nenhum",
+ "The contract was not active during the selected date": "O contrato não estava ativo durante a data selecionada",
+ "Cannot add more than one '1/2 day vacation'": "Não é possível adicionar mais de um 'meio dia de férias'",
+ "This document already exists on this ticket": "Este documento já existe neste ticket",
+ "Some of the selected tickets are not billable": "Alguns dos tickets selecionados não são faturáveis",
+ "You can't invoice tickets from multiple clients": "Você não pode faturar tickets de múltiplos clientes",
+ "nickname": "apelido",
+ "INACTIVE_PROVIDER": "Fornecedor inativo",
+ "This client is not invoiceable": "Este cliente não é faturável",
+ "serial non editable": "Este série não é editável",
+ "Max shipped required": "A data limite é requerida",
+ "Can't invoice to future": "Não é possível faturar para o futuro",
+ "Can't invoice to past": "Não é possível faturar para o passado",
+ "This ticket is already invoiced": "Este ticket já está faturado",
+ "A ticket with an amount of zero can't be invoiced": "Um ticket com um valor zero não pode ser faturado",
+ "A ticket with a negative base can't be invoiced": "Um ticket com uma base negativa não pode ser faturado",
+ "Global invoicing failed": "[Faturamento global] Não foi possível faturar alguns clientes",
+ "Wasn't able to invoice the following clients": "Não foi possível faturar os seguintes clientes",
+ "Can't verify data unless the client has a business type": "Não é possível verificar os dados a menos que o cliente tenha um tipo de negócio",
+ "You don't have enough privileges to set this credit amount": "Você não tem privilégios suficientes para definir este valor de crédito",
+ "You can't change the credit set to zero from a financialBoss": "Você não pode alterar o crédito definido como zero de um financeiro chefe",
+ "Amounts do not match": "Os valores não correspondem",
+ "The PDF document does not exist": "O documento PDF não existe. Tente regenerá-lo na opção 'Regenerar PDF da fatura'",
+ "The type of business must be filled in basic data": "O tipo de negócio deve ser preenchido nos dados básicos",
+ "You can't create a claim from a ticket delivered more than seven days ago": "Você não pode criar uma reclamação de um ticket entregue há mais de sete dias",
+ "The worker has hours recorded that day": "O trabalhador tem horas registradas nesse dia",
+ "The worker has a marked absence that day": "O trabalhador tem uma ausência marcada nesse dia",
+ "You can not modify is pay method checked": "Você não pode modificar o método de pagamento verificado",
+ "The account size must be exactly 10 characters": "O tamanho da conta deve ser exatamente de 10 caracteres",
+ "Can't transfer claimed sales": "Não é possível transferir vendas reclamadas",
+ "You don't have privileges to create refund": "Você não tem privilégios para criar um reembolso",
+ "The item is required": "O item é necessário",
+ "The agency is already assigned to another autonomous": "A agência já está atribuída a outro autônomo",
+ "date in the future": "Data no futuro",
+ "reference duplicated": "Referência duplicada",
+ "This ticket is already a refund": "Este ticket já é um reembolso",
+ "isWithoutNegatives": "Sem negativos",
+ "routeFk": "routeFk",
+ "Can't change the password of another worker": "Não é possível alterar a senha de outro trabalhador",
+ "No hay un contrato en vigor": "Não há um contrato em vigor",
+ "No se permite fichar a futuro": "Não é permitido marcar o ponto no futuro",
+ "No está permitido trabajar": "Não está permitido trabalhar",
+ "Fichadas impares": "Fichadas ímpares",
+ "Descanso diario 12h.": "Descanso diário 12h.",
+ "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.",
+ "Dirección incorrecta": "Endereço incorreto",
+ "Modifiable user details only by an administrator": "Detalhes do usuário modificáveis apenas por um administrador",
+ "Modifiable password only via recovery or by an administrator": "Senha modificável apenas via recuperação ou por um administrador",
+ "Not enough privileges to edit a client": "Não há privilégios suficientes para editar um cliente",
+ "This route does not exists": "Esta rota não existe",
+ "Claim pickup order sent": "Ordem de retirada de reclamação enviada [{{claimId}}]({{{claimUrl}}}) o cliente *{{clientName}}*",
+ "You don't have grant privilege": "Você não tem privilégio de concessão",
+ "You don't own the role and you can't assign it to another user": "Você não é proprietário do papel e não pode atribuí-lo a outro usuário",
+ "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) mesclado com [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
+ "Already has this status": "Já tem este status",
+ "There aren't records for this week": "Não há registros para esta semana",
+ "Empty data source": "Fonte de dados vazia",
+ "App locked": "Aplicativo bloqueado pelo usuário {{userId}}",
+ "Email verify": "Verificação de e-mail",
+ "Landing cannot be lesser than shipment": "O pouso não pode ser menor que o envio",
+ "Receipt's bank was not found": "Banco do recibo não encontrado",
+ "This receipt was not compensated": "Este recibo não foi compensado",
+ "Client's email was not found": "E-mail do cliente não encontrado",
+ "Negative basis": "Base negativa",
+ "This worker code already exists": "Este código de trabalhador já existe",
+ "This personal mail already exists": "Este e-mail pessoal já existe",
+ "This worker already exists": "Este trabalhador já existe",
+ "App name does not exist": "O nome do aplicativo não existe",
+ "Try again": "Tente novamente",
+ "Aplicación bloqueada por el usuario 9": "Aplicação bloqueada pelo usuário 9",
+ "Failed to upload delivery note": "Falha ao carregar nota de entrega {{id}}",
+ "The DOCUWARE PDF document does not exists": "O documento PDF DOCUWARE não existe",
+ "It is not possible to modify tracked sales": "Não é possível modificar vendas rastreadas",
+ "It is not possible to modify sales that their articles are from Floramondo": "Não é possível modificar vendas cujos artigos são da Floramondo",
+ "It is not possible to modify cloned sales": "Não é possível modificar vendas clonadas",
+ "A supplier with the same name already exists. Change the country.": "Já existe um fornecedor com o mesmo nome. Mude o país.",
+ "There is no assigned email for this client": "Não há e-mail atribuído para este cliente",
+ "Exists an invoice with a future date": "Existe uma fatura com data futura",
+ "Invoice date can't be less than max date": "A data da fatura não pode ser menor que a data máxima",
+ "Warehouse inventory not set": "Inventário do armazém não configurado",
+ "This locker has already been assigned": "Este armário já foi atribuído",
+ "Tickets with associated refunds": "Tickets com reembolsos associados",
+ "Not exist this branch": "Esta filial não existe",
+ "This ticket cannot be signed because it has not been boxed": "Este ticket não pode ser assinado porque não foi encaixotado",
+ "Collection does not exist": "Coleção não existe",
+ "Cannot obtain exclusive lock": "Não é possível obter um bloqueio exclusivo",
+ "Insert a date range": "Insira um intervalo de datas",
+ "Added observation": "{{user}} adicionou esta observação: {{text}}",
+ "Comment added to client": "Comentário adicionado ao cliente {{clientFk}}",
+ "Invalid auth code": "Código de autenticação inválido",
+ "Invalid or expired verification code": "Código de verificação inválido ou expirado",
+ "Cannot create a new claimBeginning from a different ticket": "Não é possível criar um novo reclamação a partir de um ticket diferente",
+ "company": "Empresa",
+ "country": "País",
+ "clientId": "Id do cliente",
+ "clientSocialName": "Cliente",
+ "amount": "Quantidade",
+ "taxableBase": "Base tributável",
+ "ticketFk": "Id do ticket",
+ "isActive": "Está ativo",
+ "hasToInvoice": "Tem que faturar",
+ "isTaxDataChecked": "Dados fiscais verificados",
+ "comercialId": "Id do comercial",
+ "comercialName": "Comercial",
+ "Pass expired": "A senha expirou, altere-a pelo Salix",
+ "Invalid NIF for VIES": "NIF inválido para VIES",
+ "Ticket does not exist": "Este ticket não existe",
+ "Ticket is already signed": "Este ticket já está assinado",
+ "Authentication failed": "Autenticação falhou",
+ "You can't use the same password": "Você não pode usar a mesma senha",
+ "You can only add negative amounts in refund tickets": "Você só pode adicionar quantidades negativas em tickets de reembolso",
+ "Fecha fuera de rango": "Data fora do intervalo",
+ "Error while generating PDF": "Erro ao gerar PDF",
+ "Error when sending mail to client": "Erro ao enviar e-mail para o cliente",
+ "Mail not sent": "E-mail não enviado cliente [{{clientId}}]({{{clientUrl}}})",
+ "The renew period has not been exceeded": "O período de renovação não foi excedido",
+ "Valid priorities": "Prioridades válidas",
+ "hasAnyNegativeBase": "Base negativa para os tickets",
+ "hasAnyPositiveBase": "Bases positivas para os tickets",
+ "You cannot assign an alias that you are not assigned to": "Você não pode atribuir um alias que não está atribuído a você",
+ "This ticket cannot be left empty.": "Este ticket não pode ficar vazio.",
+ "The company has not informed the supplier account for bank transfers": "A empresa não informou a conta do fornecedor para transferências bancárias",
+ "You cannot assign/remove an alias that you are not assigned to": "Você não pode atribuir/remover um alias que não está atribuído a você",
+ "This invoice has a linked vehicle.": "Esta fatura tem um veículo vinculado",
+ "You don't have enough privileges.": "Você não tem privilégios suficientes.",
+ "This ticket is locked": "Este ticket está bloqueado.",
+ "This ticket is not editable.": "Este ticket não é editável.",
+ "The ticket doesn't exist.": "O ticket não existe.",
+ "Social name should be uppercase": "O nome social deve estar em maiúsculas",
+ "Street should be uppercase": "A rua deve estar em maiúsculas",
+ "Ticket without Route": "Ticket sem rota",
+ "Select a different client": "Selecione um cliente diferente",
+ "Fill all the fields": "Preencha todos os campos",
+ "The response is not a PDF": "A resposta não é um PDF",
+ "Booking completed": "Reserva concluída",
+ "The ticket is in preparation": "O ticket está em preparação [{{ticketId}}]({{{ticketUrl}}}) comercial {{salesPersonId}}",
+ "The notification subscription of this worker cant be modified": "A inscrição de notificação deste trabalhador não pode ser modificada",
+ "User disabled": "Usuário desativado",
+ "The amount cannot be less than the minimum": "O valor não pode ser menor que o mínimo",
+ "quantityLessThanMin": "Quantidade menor que o mínimo",
+ "Cannot past travels with entries": "Não é possível passar viagens com entradas",
+ "It was not able to remove the next expeditions:": "Não foi possível remover as próximas expedições:",
+ "This claim has been updated": "Esta reclamação foi atualizada",
+ "This user does not have an assigned tablet": "Este usuário não tem um tablet atribuído",
+ "Field are invalid": "Campos inválidos",
+ "Incorrect pin": "PIN incorreto.",
+ "You already have the mailAlias": "Você já tem o alias de e-mail",
+ "The alias cant be modified": "O alias não pode ser modificado",
+ "No tickets to invoice": "Não há tickets para faturar",
+ "this warehouse has not dms": "Este armazém não tem DMS",
+ "This ticket already has a cmr saved": "Este ticket já tem um CMR salvo",
+ "Name should be uppercase": "O nome deve estar em maiúsculas",
+ "Bank entity must be specified": "A entidade bancária deve ser especificada",
+ "An email is necessary": "Um e-mail é necessário",
+ "You cannot update these fields": "Você não pode atualizar estes campos",
+ "CountryFK cannot be empty": "CountryFK não pode estar vazio",
+ "Cmr file does not exist": "O arquivo CMR não existe",
+ "You are not allowed to modify the alias": "Você não tem permissão para modificar o alias",
+ "The address of the customer must have information about Incoterms and Customs Agent": "O endereço do cliente deve ter informações sobre Incoterms e Agente Aduaneiro",
+ "The line could not be marked": "A linha não pôde ser marcada",
+ "This password can only be changed by the user themselves": "Esta senha só pode ser alterada pelo próprio usuário",
+ "They're not your subordinate": "Eles não são seus subordinados.",
+ "No results found": "Nenhum resultado encontrado",
+ "InvoiceIn is already booked": "InvoiceIn já está reservado",
+ "This workCenter is already assigned to this agency": "Este centro de trabalho já está atribuído a esta agência",
+ "Select ticket or client": "Selecione um ticket ou cliente",
+ "It was not able to create the invoice": "Não foi possível criar a fatura"
+}
\ No newline at end of file
diff --git a/loopback/server/datasources.json b/loopback/server/datasources.json
index 608479b4b..341d5d578 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/claim/back/locale/claim/en.yml b/modules/claim/back/locale/claim/en.yml
index 7c3ee7555..75416938a 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 27fd76ceb..e61c6a396 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 4b66bd418..232c134f6 100644
--- a/modules/claim/back/methods/claim/claimPickupPdf.js
+++ b/modules/claim/back/methods/claim/claimPickupPdf.js
@@ -35,7 +35,7 @@ module.exports = Self => {
path: '/:id/claim-pickup-pdf',
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.claimPickupPdf = (ctx, id) => Self.printReport(ctx, id, 'claim-pickup-order');
diff --git a/modules/claim/back/methods/claim/createFromSales.js b/modules/claim/back/methods/claim/createFromSales.js
index 30093e43d..1af479dbb 100644
--- a/modules/claim/back/methods/claim/createFromSales.js
+++ b/modules/claim/back/methods/claim/createFromSales.js
@@ -83,7 +83,6 @@ module.exports = Self => {
const newClaimBeginning = models.ClaimBeginning.create({
saleFk: sale.id,
claimFk: newClaim.id,
- quantity: sale.quantity
}, myOptions);
promises.push(newClaimBeginning);
diff --git a/modules/claim/back/methods/claim/downloadFile.js b/modules/claim/back/methods/claim/downloadFile.js
index 61784f39e..ffcf51367 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: ['DEFAULT', 'read:multimedia']
});
Self.downloadFile = async function(ctx, id) {
diff --git a/modules/claim/back/methods/claim/filter.js b/modules/claim/back/methods/claim/filter.js
index 2daee6413..f60b6572e 100644
--- a/modules/claim/back/methods/claim/filter.js
+++ b/modules/claim/back/methods/claim/filter.js
@@ -79,7 +79,12 @@ module.exports = Self => {
type: 'number',
description: 'The claimResponsible id',
http: {source: 'query'}
- }
+ },
+ {
+ arg: 'myTeam',
+ type: 'boolean',
+ description: `Team partners`
+ },
],
returns: {
type: ['object'],
@@ -92,6 +97,7 @@ module.exports = Self => {
});
Self.filter = async(ctx, filter, options) => {
+ const userId = ctx.req.accessToken.userId;
const models = Self.app.models;
const conn = Self.dataSource.connector;
const args = ctx.args;
@@ -121,7 +127,23 @@ module.exports = Self => {
claimIdsByClaimResponsibleFk = claims.map(claim => claim.claimFk);
}
- const where = buildFilter(args, (param, value) => {
+ // Apply filter by team
+ const teamMembersId = [];
+ if (args.myTeam != null) {
+ const worker = await models.Worker.findById(userId, {
+ include: {
+ relation: 'collegues'
+ }
+ }, myOptions);
+ const collegues = worker.collegues() || [];
+ for (let collegue of collegues)
+ teamMembersId.push(collegue.collegueFk);
+
+ if (teamMembersId.length == 0)
+ teamMembersId.push(userId);
+ }
+
+ const where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
return /^\d+$/.test(value)
@@ -152,6 +174,11 @@ module.exports = Self => {
to.setHours(23, 59, 59, 999);
return {'cl.created': {between: [value, to]}};
+ case 'myTeam':
+ if (value)
+ return {'cl.workerFk': {inq: teamMembersId}};
+ else
+ return {'cl.workerFk': {nin: teamMembersId}};
}
});
diff --git a/modules/claim/back/methods/claim/specs/createFromSales.spec.js b/modules/claim/back/methods/claim/specs/createFromSales.spec.js
index fe009c1c3..25414d1db 100644
--- a/modules/claim/back/methods/claim/specs/createFromSales.spec.js
+++ b/modules/claim/back/methods/claim/specs/createFromSales.spec.js
@@ -37,7 +37,7 @@ describe('Claim createFromSales()', () => {
let claimBeginning = await models.ClaimBeginning.findOne({where: {claimFk: claim.id}}, options);
expect(claimBeginning.saleFk).toEqual(newSale[0].id);
- expect(claimBeginning.quantity).toEqual(newSale[0].quantity);
+ expect(claimBeginning.quantity).toEqual(0);
await tx.rollback();
} catch (e) {
@@ -67,7 +67,7 @@ describe('Claim createFromSales()', () => {
const claimBeginning = await models.ClaimBeginning.findOne({where: {claimFk: claim.id}}, options);
expect(claimBeginning.saleFk).toEqual(newSale[0].id);
- expect(claimBeginning.quantity).toEqual(newSale[0].quantity);
+ expect(claimBeginning.quantity).toEqual(0);
await tx.rollback();
} catch (e) {
diff --git a/modules/claim/back/methods/claim/specs/filter.spec.js b/modules/claim/back/methods/claim/specs/filter.spec.js
index 49e258505..872f49aa3 100644
--- a/modules/claim/back/methods/claim/specs/filter.spec.js
+++ b/modules/claim/back/methods/claim/specs/filter.spec.js
@@ -1,13 +1,25 @@
const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('claim filter()', () => {
+ let ctx;
+ beforeEach(() => {
+ ctx = {
+ req: {
+ accessToken: {userId: 9},
+ headers: {origin: 'http://localhost'}
+ }
+ };
+ });
+
it('should return 1 result filtering by id', async() => {
const tx = await app.models.Claim.beginTransaction({});
try {
const options = {transaction: tx};
- const result = await app.models.Claim.filter({args: {filter: {}, search: 1}}, null, options);
+ ctx.args = {search: 1};
+ const result = await app.models.Claim.filter(ctx, null, options);
expect(result.length).toEqual(1);
expect(result[0].id).toEqual(1);
@@ -25,7 +37,8 @@ describe('claim filter()', () => {
try {
const options = {transaction: tx};
- const result = await app.models.Claim.filter({args: {filter: {}, search: 'Tony Stark'}}, null, options);
+ ctx.args = {search: 'Tony Stark'};
+ const result = await app.models.Claim.filter(ctx, null, options);
expect(result.length).toEqual(1);
expect(result[0].id).toEqual(4);
@@ -43,7 +56,8 @@ describe('claim filter()', () => {
try {
const options = {transaction: tx};
- const result = await app.models.Claim.filter({args: {filter: {}, workerFk: 18}}, null, options);
+ ctx.args = {workerFk: 18};
+ const result = await app.models.Claim.filter(ctx, null, options);
expect(result.length).toEqual(4);
expect(result[0].id).toEqual(1);
@@ -64,7 +78,8 @@ describe('claim filter()', () => {
try {
const options = {transaction: tx};
- const result = await app.models.Claim.filter({args: {filter: {}, itemFk: 2}}, null, options);
+ ctx.args = {itemFk: 2};
+ const result = await app.models.Claim.filter(ctx, null, options);
expect(result.length).toEqual(3);
expect(result[0].id).toEqual(1);
@@ -84,7 +99,8 @@ describe('claim filter()', () => {
try {
const options = {transaction: tx};
- const result = await app.models.Claim.filter({args: {filter: {}, claimResponsibleFk: 7}}, null, options);
+ ctx.args = {claimResponsibleFk: 7};
+ const result = await app.models.Claim.filter(ctx, null, options);
expect(result.length).toEqual(3);
expect(result[0].id).toEqual(2);
@@ -97,4 +113,22 @@ describe('claim filter()', () => {
throw e;
}
});
+
+ it('should now return claims from the worker team', async() => {
+ const tx = await models.Claim.beginTransaction({});
+
+ try {
+ const options = {transaction: tx};
+
+ ctx.args = {itemFk: null, myTeam: true};
+ const result = await app.models.Claim.filter(ctx, null, options);
+
+ expect(result.length).toEqual(2);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
});
diff --git a/modules/claim/back/methods/claim/specs/log.spec.js b/modules/claim/back/methods/claim/specs/log.spec.js
index 0ae534f1e..cef91b873 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 bd77ae406..b7725e7f8 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 68fff7846..a206d7f3e 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-beginning.js b/modules/claim/back/models/claim-beginning.js
index 4b870e5ea..d269b2285 100644
--- a/modules/claim/back/models/claim-beginning.js
+++ b/modules/claim/back/models/claim-beginning.js
@@ -19,7 +19,7 @@ module.exports = Self => {
if (ticket.ticketFk != claim.ticketFk)
throw new UserError(`Cannot create a new claimBeginning from a different ticket`);
}
- // await claimIsEditable(ctx);
+ await claimIsEditable(ctx);
});
Self.observe('before delete', async ctx => {
@@ -36,7 +36,7 @@ module.exports = Self => {
if (ctx.options && ctx.options.transaction)
myOptions.transaction = ctx.options.transaction;
- const claimBeginning = await Self.findById(ctx.where.id);
+ const claimBeginning = ctx.instance ?? await Self.findById(ctx.where.id);
const filter = {
where: {id: claimBeginning.claimFk},
diff --git a/modules/claim/back/models/claim-beginning.json b/modules/claim/back/models/claim-beginning.json
index d224586da..ba6e83808 100644
--- a/modules/claim/back/models/claim-beginning.json
+++ b/modules/claim/back/models/claim-beginning.json
@@ -16,8 +16,7 @@
"description": "Identifier"
},
"quantity": {
- "type": "number",
- "required": true
+ "type": "number"
}
},
"relations": {
diff --git a/modules/claim/back/models/claim.json b/modules/claim/back/models/claim.json
index 1fbbb00b1..1fc88df1c 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 458d5e831..e773511bf 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 10aa7623a..45bc1823d 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/search-panel/index.html b/modules/claim/front/search-panel/index.html
index fbc527d60..260f86801 100644
--- a/modules/claim/front/search-panel/index.html
+++ b/modules/claim/front/search-panel/index.html
@@ -70,6 +70,13 @@
label="Responsible">
+
+
+
diff --git a/modules/claim/front/summary/index.html b/modules/claim/front/summary/index.html
index 3115cb451..b5225e6f4 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/email/not-main-printer-configured/not-main-printer-configured.js b/print/templates/email/backup-printer-selected/backup-printer-selected.js
similarity index 92%
rename from print/templates/email/not-main-printer-configured/not-main-printer-configured.js
rename to print/templates/email/backup-printer-selected/backup-printer-selected.js
index c381991fa..6372d52c0 100755
--- a/print/templates/email/not-main-printer-configured/not-main-printer-configured.js
+++ b/print/templates/email/backup-printer-selected/backup-printer-selected.js
@@ -2,15 +2,14 @@ const Component = require(`vn-print/core/component`);
const emailBody = new Component('email-body');
module.exports = {
- name: 'not-main-printer-configured',
+ name: 'backup-printer-selected',
async serverPrefetch() {
this.sector = await this.findOneFromDef('sector', [this.sectorId]);
-
if (!this.sector)
throw new Error('Something went wrong');
this.labeler = await this.findOneFromDef('printer', [this.labelerId]);
- this.mainPrinter = await this.findOneFromDef('printer', [this.sector.mainPrinterFk]);
+ this.mainPrinter = await this.findOneFromDef('printer', [this.sector.backupPrinterFk]);
this.worker = await this.findOneFromDef('worker', [this.workerId]);
},
components: {
@@ -29,5 +28,6 @@ module.exports = {
type: Number,
required: true
}
+
}
};
diff --git a/print/templates/email/backup-printer-selected/locale/en.yml b/print/templates/email/backup-printer-selected/locale/en.yml
new file mode 100644
index 000000000..038e16e00
--- /dev/null
+++ b/print/templates/email/backup-printer-selected/locale/en.yml
@@ -0,0 +1,3 @@
+subject: Not main printer configured
+title: Not main printer configured
+description: 'The worker {0} is using the backup printer {1} for their sector {2}.'
\ No newline at end of file
diff --git a/print/templates/email/backup-printer-selected/locale/es.yml b/print/templates/email/backup-printer-selected/locale/es.yml
new file mode 100644
index 000000000..d172f2560
--- /dev/null
+++ b/print/templates/email/backup-printer-selected/locale/es.yml
@@ -0,0 +1,3 @@
+subject: Seleccionada impresora de repuesto
+title: Seleccionada impresora de repuesto
+description: 'El trabajador {0} esta utilizando la impresora de repuesto {1} del sector {2}.'
diff --git a/print/templates/email/not-main-printer-configured/sql/printer.sql b/print/templates/email/backup-printer-selected/sql/printer.sql
similarity index 63%
rename from print/templates/email/not-main-printer-configured/sql/printer.sql
rename to print/templates/email/backup-printer-selected/sql/printer.sql
index 265818129..2a98a8f08 100644
--- a/print/templates/email/not-main-printer-configured/sql/printer.sql
+++ b/print/templates/email/backup-printer-selected/sql/printer.sql
@@ -1,3 +1,4 @@
-SELECT id, name
+SELECT id,
+ name
FROM vn.printer
WHERE id = ?
diff --git a/print/templates/email/backup-printer-selected/sql/sector.sql b/print/templates/email/backup-printer-selected/sql/sector.sql
new file mode 100644
index 000000000..9514c4e38
--- /dev/null
+++ b/print/templates/email/backup-printer-selected/sql/sector.sql
@@ -0,0 +1,5 @@
+SELECT id,
+ description,
+ backupPrinterFk
+ FROM vn.sector
+ WHERE id = ?
diff --git a/print/templates/email/not-main-printer-configured/sql/worker.sql b/print/templates/email/backup-printer-selected/sql/worker.sql
similarity index 100%
rename from print/templates/email/not-main-printer-configured/sql/worker.sql
rename to print/templates/email/backup-printer-selected/sql/worker.sql
diff --git a/print/templates/email/invoice-ticket-closure/assets/css/import.js b/print/templates/email/invoice-ticket-closure/assets/css/import.js
new file mode 100644
index 000000000..4b4bb7086
--- /dev/null
+++ b/print/templates/email/invoice-ticket-closure/assets/css/import.js
@@ -0,0 +1,11 @@
+const Stylesheet = require(`vn-print/core/stylesheet`);
+
+const path = require('path');
+const vnPrintPath = path.resolve('print');
+
+module.exports = new Stylesheet([
+ `${vnPrintPath}/common/css/spacing.css`,
+ `${vnPrintPath}/common/css/misc.css`,
+ `${vnPrintPath}/common/css/layout.css`,
+ `${vnPrintPath}/common/css/email.css`])
+ .mergeStyles();
diff --git a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html
new file mode 100644
index 000000000..2effa8917
--- /dev/null
+++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html
@@ -0,0 +1,13 @@
+
+
+
+
{{ $t('title') }}
+
+
+
+
{{ $t('ticketId') }}: {{ticket.ticketId}}
+
{{ $t('reason') }}: {{ticket.reason}}
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js
new file mode 100644
index 000000000..31690ecbd
--- /dev/null
+++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js
@@ -0,0 +1,15 @@
+const Component = require(`vn-print/core/component`);
+const emailBody = new Component('email-body');
+
+module.exports = {
+ name: 'invoice-ticket-closure',
+ components: {
+ 'email-body': emailBody.build(),
+ },
+ props: {
+ tickets: {
+ type: Array,
+ required: true
+ },
+ }
+};
diff --git a/print/templates/email/invoice-ticket-closure/locale/en.yml b/print/templates/email/invoice-ticket-closure/locale/en.yml
new file mode 100644
index 000000000..fef73d23f
--- /dev/null
+++ b/print/templates/email/invoice-ticket-closure/locale/en.yml
@@ -0,0 +1,4 @@
+subject: Nightly ticket closing process report
+title: Nightly ticket closing process report
+reason: Reason
+ticketId: Ticket
\ No newline at end of file
diff --git a/print/templates/email/invoice-ticket-closure/locale/es.yml b/print/templates/email/invoice-ticket-closure/locale/es.yml
new file mode 100644
index 000000000..7d146b83d
--- /dev/null
+++ b/print/templates/email/invoice-ticket-closure/locale/es.yml
@@ -0,0 +1,4 @@
+subject: Informe proceso de cierre de tickets nocturno
+title: Informe proceso de cierre de tickets nocturno
+reason: Motivo
+ticketId: Ticket
\ No newline at end of file
diff --git a/print/templates/email/not-main-printer-configured/locale/en.yml b/print/templates/email/not-main-printer-configured/locale/en.yml
deleted file mode 100644
index 2a3051145..000000000
--- a/print/templates/email/not-main-printer-configured/locale/en.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-subject: Not main printer configured
-title: Not main printer configured
-description: 'Printer #{0} {1} has been configured in sector #{2} {3} (the main printer for that sector is #{4} {5}). Ask the worker {6}.'
diff --git a/print/templates/email/not-main-printer-configured/locale/es.yml b/print/templates/email/not-main-printer-configured/locale/es.yml
deleted file mode 100644
index b6fe5f9a0..000000000
--- a/print/templates/email/not-main-printer-configured/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-subject: Configurada impresora no principal
-title: Configurada impresora no principal
-description: 'Se ha configurado la impresora #{0} {1} en el sector #{2} {3} (la impresora principal de ese sector es la #{4} {5}). Preguntar al trabajador {6}.'
diff --git a/print/templates/email/not-main-printer-configured/not-main-printer-configured.html b/print/templates/email/not-main-printer-configured/not-main-printer-configured.html
deleted file mode 100644
index 1e9ffed7a..000000000
--- a/print/templates/email/not-main-printer-configured/not-main-printer-configured.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
{{ $t('title') }}
-
-
-
-
diff --git a/print/templates/email/not-main-printer-configured/sql/sector.sql b/print/templates/email/not-main-printer-configured/sql/sector.sql
deleted file mode 100644
index 5d54eeeb9..000000000
--- a/print/templates/email/not-main-printer-configured/sql/sector.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-SELECT id, description, mainPrinterFk
- FROM vn.sector
- WHERE id = ?
diff --git a/print/templates/email/zone-included/zone-included.html b/print/templates/email/zone-included/zone-included.html
index 78915faad..0484e0919 100644
--- a/print/templates/email/zone-included/zone-included.html
+++ b/print/templates/email/zone-included/zone-included.html
@@ -18,7 +18,7 @@
-
diff --git a/print/templates/reports/credit-request/locale/es.yml b/print/templates/reports/credit-request/locale/es.yml
index cd6f92dc5..5a48cfa50 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/delivery-note/assets/css/style.css b/print/templates/reports/delivery-note/assets/css/style.css
index 8405ae78d..3e1c64d85 100644
--- a/print/templates/reports/delivery-note/assets/css/style.css
+++ b/print/templates/reports/delivery-note/assets/css/style.css
@@ -39,7 +39,11 @@ h2 {
margin-top: 10px
}
-.observations{
+.observations {
text-align: justify;
text-justify: inter-word;
+}
+
+.column-oriented {
+ margin-bottom: 5px;
}
\ No newline at end of file
diff --git a/print/templates/reports/driver-route/assets/css/style.css b/print/templates/reports/driver-route/assets/css/style.css
index a3bcae789..02d6778ce 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 79bede5b2..9d2dd5c13 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 9d548c2b3..1ffb4d623 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/print/templates/reports/invoice/sql/rectified.sql b/print/templates/reports/invoice/sql/rectified.sql
index 79ce733e3..48eefb093 100644
--- a/print/templates/reports/invoice/sql/rectified.sql
+++ b/print/templates/reports/invoice/sql/rectified.sql
@@ -1,11 +1,9 @@
-SELECT
- io2.amount,
- io2.ref,
- io2.issued,
- ict.description
-FROM invoiceOut io
- JOIN invoiceCorrection ic ON ic.correctingFk = io.id
- JOIN invoiceOut io2 ON io2.id = ic.correctedFk
- LEFT JOIN ticket t ON t.refFk = io.ref
- JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk
-WHERE io.ref = ?
+SELECT io2.amount,
+ io2.ref,
+ io2.issued,
+ ict.description
+ FROM invoiceOut io
+ JOIN invoiceCorrection ic ON ic.correctingFk = io.id
+ JOIN invoiceOut io2 ON io2.id = ic.correctedFk
+ JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk
+ WHERE io.ref = ?
diff --git a/print/templates/reports/supplier-campaign-metrics/assets/css/style.css b/print/templates/reports/supplier-campaign-metrics/assets/css/style.css
index 32caeb43c..ff59bee18 100644
--- a/print/templates/reports/supplier-campaign-metrics/assets/css/style.css
+++ b/print/templates/reports/supplier-campaign-metrics/assets/css/style.css
@@ -17,4 +17,9 @@ h2 {
.description strong {
text-transform: uppercase;
-}
\ No newline at end of file
+}
+
+.black {
+ color: black;
+}
+
diff --git a/print/templates/reports/supplier-campaign-metrics/sql/entries.sql b/print/templates/reports/supplier-campaign-metrics/sql/entries.sql
index b48e99c23..60ef0fed3 100644
--- a/print/templates/reports/supplier-campaign-metrics/sql/entries.sql
+++ b/print/templates/reports/supplier-campaign-metrics/sql/entries.sql
@@ -6,3 +6,4 @@ SELECT
FROM vn.entry e
JOIN vn.travel t ON t.id = e.travelFk
WHERE e.supplierFk = ? AND DATE(t.shipped) BETWEEN ? AND ?
+ ORDER BY t.shipped DESC;
diff --git a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html
index 08b27d0bd..95b913bc5 100644
--- a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html
+++ b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html
@@ -37,7 +37,10 @@
diff --git a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.js b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.js
index 32a7e9b0a..474e9cb2d 100755
--- a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.js
+++ b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.js
@@ -7,7 +7,7 @@ module.exports = {
this.supplier = await this.findOneFromDef('supplier', [this.id]);
this.checkMainEntity(this.supplier);
let entries = await this.rawSqlFromDef('entries', [this.id, this.from, this.to]);
-
+ this.total = {quantity: 0, price: 0};
const entriesId = [];
for (let entry of entries)
@@ -23,7 +23,8 @@ module.exports = {
const entry = entriesMap.get(buy.entryFk);
if (entry) {
if (!entry.buys) entry.buys = [];
-
+ this.total.quantity = this.total.quantity + buy.quantity;
+ this.total.price = this.total.price + (buy.price * buy.quantity);
entry.buys.push(buy);
}
}
diff --git a/win/Content.md b/win/Content.md
new file mode 100644
index 000000000..eea5b123c
--- /dev/null
+++ b/win/Content.md
@@ -0,0 +1,18 @@
+# win
+
+In this folder, there are two scripts:
+1- 'addRule' : adds a rule to the Windows firewall to accept requests on ports 3000 and 5000.
+2- 'redirect' : allows redirecting ports 3000 and 5000 so that our machine processes them with our local Salix server.
+
+
+## Run
+
+Two ways:
+
+1-Search the project of Salix in WSL with the explorer of windows, for example: \\wsl.localhost\Debian\home\your_user\projects\salix and with a terminal Powershell with administrator permissions execute addRule.ps1 only one time and execute redirect.ps1 every time you need redirect ports when the project is running.
+
+2-Search the project of Salix in WSL with the explorer of windows and edit the files with .lnk with the path of your installation of Salix. So , you will have a direct link for execute.
+
+## Server
+
+To access your Salix server, you can directly enter the IP or name of your computer along with the corresponding port
\ No newline at end of file
diff --git a/win/addRule.ps1 b/win/addRule.ps1
new file mode 100644
index 000000000..363f4fee4
--- /dev/null
+++ b/win/addRule.ps1
@@ -0,0 +1,26 @@
+# Definir las propiedades de la nueva regla
+# Define el nombre de la regla
+$ruleName = "salixRule"
+
+# Define el perfil de la regla (Dominio, Privado, P�blico)
+$profile = "Domain,Private,Public"
+
+# Define la acción (Permitir/Bloquear)
+$action = "Allow"
+
+# Define el protocolo (TCP/UDP)
+$protocol = "TCP"
+
+# Define el puerto local
+$port = 3000, 5000
+
+# Define una descripción (opcional)
+$description = "Permitir tráfico HTTP.Frontend y backend Salix."
+
+# Crea la regla de firewall
+New-NetFirewallRule -DisplayName $ruleName -Profile $profile -Action $action -Protocol $protocol -LocalPort $port -Description $description
+
+# Imprime un mensaje de confirmación
+Write-Host "Regla de firewall creada exitosamente: $ruleName"
+
+pause
diff --git a/win/powershellAddRule.lnk b/win/powershellAddRule.lnk
new file mode 100644
index 000000000..bb462149a
Binary files /dev/null and b/win/powershellAddRule.lnk differ
diff --git a/win/powershellRedirect.lnk b/win/powershellRedirect.lnk
new file mode 100644
index 000000000..e5cc78862
Binary files /dev/null and b/win/powershellRedirect.lnk differ
diff --git a/win/redirect.ps1 b/win/redirect.ps1
new file mode 100644
index 000000000..431e569b2
--- /dev/null
+++ b/win/redirect.ps1
@@ -0,0 +1,5 @@
+# Redireccionar ports
+
+$wslip = ((wsl hostname -I) -split " ")[0]
+netsh interface portproxy set v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$wslip
+netsh interface portproxy set v4tov4 listenport=5000 listenaddress=0.0.0.0 connectport=5000 connectaddress=$wslip