diff --git a/back/model-config.json b/back/model-config.json
index 20bfb06bd..b6d304675 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -175,6 +175,9 @@
"PrintConfig": {
"dataSource": "vn"
},
+ "QueueMember": {
+ "dataSource": "vn"
+ },
"ViaexpressConfig": {
"dataSource": "vn"
},
diff --git a/back/models/buyer.json b/back/models/buyer.json
index a1297eda3..a17d3b538 100644
--- a/back/models/buyer.json
+++ b/back/models/buyer.json
@@ -15,9 +15,6 @@
"nickname": {
"type": "string",
"required": true
- },
- "display": {
- "type": "boolean"
}
},
"acls": [
diff --git a/back/models/queue-member.json b/back/models/queue-member.json
new file mode 100644
index 000000000..93ca2ebd7
--- /dev/null
+++ b/back/models/queue-member.json
@@ -0,0 +1,38 @@
+{
+ "name": "QueueMember",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "pbx.queueMember"
+ }
+ },
+ "properties": {
+ "id": {
+ "type": "number",
+ "id": true
+ },
+ "queue": {
+ "type": "string"
+ },
+ "extension": {
+ "type": "string"
+ }
+ },
+ "relations": {
+ "queueRelation": {
+ "type": "belongsTo",
+ "model": "Queue",
+ "foreignKey": "queue",
+ "primaryKey": "name"
+ }
+ },
+ "acls": [
+ {
+ "property": "*",
+ "accessType": "READ",
+ "principalType": "ROLE",
+ "principalId": "employee",
+ "permission": "ALLOW"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/db/dump/.dump/data.sql b/db/dump/.dump/data.sql
index 5800d6ecd..ca254055b 100644
--- a/db/dump/.dump/data.sql
+++ b/db/dump/.dump/data.sql
@@ -4,7 +4,7 @@ USE `util`;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-INSERT INTO `version` VALUES ('vn-database','11196','91ee956fbd1557848e4ab522bc5d39b2ec10e9b2','2024-09-18 07:28:14','11245');
+INSERT INTO `version` VALUES ('vn-database','11278','fe10f03459a153fc213bf64e352804c043f94590','2024-10-03 07:47:47','11281');
INSERT INTO `versionLog` VALUES ('vn-database','10107','00-firstScript.sql','jenkins@10.0.2.69','2022-04-23 10:53:53',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10112','00-firstScript.sql','jenkins@10.0.2.69','2022-05-09 09:14:53',NULL,NULL);
@@ -862,6 +862,7 @@ INSERT INTO `versionLog` VALUES ('vn-database','11083','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','11084','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-06-25 08:38:13',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11086','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-06-27 10:02:02',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11087','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-06-25 08:38:13',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11088','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:48',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11089','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-06-25 08:39:16',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11090','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-06-11 08:32:35',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11092','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-06-07 08:21:23',NULL,NULL);
@@ -875,12 +876,37 @@ INSERT INTO `versionLog` VALUES ('vn-database','11103','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','11104','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 07:39:38',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11105','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-06-20 15:36:07',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11106','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-06-25 08:39:49',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:48',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','01-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:48',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','02-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:48',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','03-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:48',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','04-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:49',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','05-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:44:49',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','06-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:45:04',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','07-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:45:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','08-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:45:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','09-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:45:47',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','10-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:45:48',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','11-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:45:59',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','12-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:00',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','14-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:00',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','15-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:06',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','17-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:06',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','18-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:06',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','19-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:19',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','20-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:46:19',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','21-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:34',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','22-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:34',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','23-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11107','24-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11108','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 07:38:39',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11109','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-06-18 19:09:56',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11110','00-clientUnpaid.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 07:39:38',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11111','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 07:39:38',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11112','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 07:38:40',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11113','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11114','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-06-25 08:39:49',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11115','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11116','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 07:39:38',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11117','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 07:39:38',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11118','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-19 12:28:49',NULL,NULL);
@@ -942,6 +968,7 @@ INSERT INTO `versionLog` VALUES ('vn-database','11172','14-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','11172','15-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-03 08:57:44',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11175','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-03 08:57:44',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11177','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-30 12:42:28',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11178','00-aclSetWeight.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11179','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-20 08:34:43',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11180','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-20 08:34:43',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11182','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-08-09 08:19:36',NULL,NULL);
@@ -967,12 +994,45 @@ INSERT INTO `versionLog` VALUES ('vn-database','11205','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','11206','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 07:38:42',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11207','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 07:38:42',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11209','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-03 08:58:01',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11210','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11210','01-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:35',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11210','02-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:40',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11210','03-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11211','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 07:38:42',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11213','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-06 06:31:13',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11215','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 07:38:42',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11216','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11217','00-hederaMessages.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-09 12:21:45',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11219','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11221','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11222','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11223','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11224','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11225','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11225','01-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11225','02-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11227','00-addWorkerTimeControlMailAcl.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:41',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11229','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-16 08:24:17',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11234','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:42',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11235','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11236','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11236','01-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11237','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11239','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-17 12:57:06',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11240','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11241','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-20 09:08:25',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11246','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-18 12:39:53',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11247','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-19 12:10:08',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11248','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-23 11:12:17',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11249','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11253','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-20 14:41:27',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11255','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11256','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-09-23 12:18:24',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11262','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11263','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-09-27 12:05:32',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11278','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-03 07:47:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11279','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-10-02 08:05:24',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11280','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-10-02 08:46:50',NULL,NULL);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
@@ -1345,6 +1405,8 @@ INSERT INTO `roleInherit` VALUES (373,131,2,19295);
INSERT INTO `roleInherit` VALUES (375,120,131,1437);
INSERT INTO `roleInherit` VALUES (376,124,21,19336);
INSERT INTO `roleInherit` VALUES (377,47,49,19295);
+INSERT INTO `roleInherit` VALUES (378,101,15,19294);
+INSERT INTO `roleInherit` VALUES (379,103,121,19294);
INSERT INTO `userPassword` VALUES (1,7,1,0,2,1);
@@ -1445,7 +1507,7 @@ INSERT INTO `ACL` VALUES (112,'Defaulter','*','READ','ALLOW','ROLE','employee',N
INSERT INTO `ACL` VALUES (113,'ClientRisk','*','READ','ALLOW','ROLE','trainee',NULL);
INSERT INTO `ACL` VALUES (114,'Receipt','*','READ','ALLOW','ROLE','trainee',NULL);
INSERT INTO `ACL` VALUES (115,'Receipt','*','WRITE','ALLOW','ROLE','administrative',NULL);
-INSERT INTO `ACL` VALUES (116,'BankEntity','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (116,'BankEntity','*','READ','ALLOW','ROLE','employee',10578);
INSERT INTO `ACL` VALUES (117,'ClientSample','*','*','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (118,'WorkerTeam','*','*','ALLOW','ROLE','salesPerson',NULL);
INSERT INTO `ACL` VALUES (119,'Travel','*','READ','ALLOW','ROLE','employee',NULL);
@@ -1541,8 +1603,6 @@ INSERT INTO `ACL` VALUES (234,'WorkerLog','find','READ','ALLOW','ROLE','hr',NULL
INSERT INTO `ACL` VALUES (235,'CustomsAgent','*','*','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (236,'Buy','*','*','ALLOW','ROLE','buyer',NULL);
INSERT INTO `ACL` VALUES (237,'WorkerDms','filter','*','ALLOW','ROLE','employee',NULL);
-INSERT INTO `ACL` VALUES (238,'Town','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
-INSERT INTO `ACL` VALUES (239,'Province','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
INSERT INTO `ACL` VALUES (241,'SupplierContact','*','WRITE','ALLOW','ROLE','administrative',NULL);
INSERT INTO `ACL` VALUES (248,'RoleMapping','*','READ','ALLOW','ROLE','account',NULL);
INSERT INTO `ACL` VALUES (249,'UserPassword','*','READ','ALLOW','ROLE','account',NULL);
@@ -1556,7 +1616,7 @@ INSERT INTO `ACL` VALUES (257,'FixedPrice','*','*','ALLOW','ROLE','buyer',NULL);
INSERT INTO `ACL` VALUES (258,'PayDem','*','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (259,'Client','createReceipt','*','ALLOW','ROLE','salesAssistant',NULL);
INSERT INTO `ACL` VALUES (260,'PrintServerQueue','*','WRITE','ALLOW','ROLE','employee',NULL);
-INSERT INTO `ACL` VALUES (261,'SupplierAccount','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (261,'SupplierAccount','*','WRITE','ALLOW','ROLE','administrative',783);
INSERT INTO `ACL` VALUES (262,'Entry','*','*','ALLOW','ROLE','administrative',NULL);
INSERT INTO `ACL` VALUES (263,'InvoiceIn','*','READ','ALLOW','ROLE','administrative',NULL);
INSERT INTO `ACL` VALUES (264,'StarredModule','*','*','ALLOW','ROLE','$authenticated',NULL);
@@ -1931,7 +1991,7 @@ INSERT INTO `ACL` VALUES (699,'TicketSms','find','READ','ALLOW','ROLE','salesPer
INSERT INTO `ACL` VALUES (701,'Docuware','upload','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
INSERT INTO `ACL` VALUES (702,'Ticket','docuwareDownload','READ','ALLOW','ROLE','salesPerson',NULL);
INSERT INTO `ACL` VALUES (703,'Worker','search','READ','ALLOW','ROLE','employee',NULL);
-INSERT INTO `ACL` VALUES (704,'ExpeditionState','addExpeditionState','WRITE','ALLOW','ROLE','delivery',NULL);
+INSERT INTO `ACL` VALUES (704,'ExpeditionState','addExpeditionState','WRITE','ALLOW','ROLE','production',19294);
INSERT INTO `ACL` VALUES (705,'SaleGroupDetail','deleteById','WRITE','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (706,'Ticket','setDeleted','WRITE','ALLOW','ROLE','buyer',NULL);
INSERT INTO `ACL` VALUES (707,'DeviceLog','create','WRITE','ALLOW','ROLE','employee',NULL);
@@ -2134,9 +2194,25 @@ INSERT INTO `ACL` VALUES (915,'ACL','*','WRITE','ALLOW','ROLE','developerBoss',1
INSERT INTO `ACL` VALUES (916,'Entry','getBuysCsv','READ','ALLOW','ROLE','supplier',10578);
INSERT INTO `ACL` VALUES (917,'InvoiceOut','refundAndInvoice','WRITE','ALLOW','ROLE','administrative',10578);
INSERT INTO `ACL` VALUES (918,'Worker','__get__descriptor','READ','ALLOW','ROLE','employee',10578);
-INSERT INTO `ACL` VALUES (919,'Worker','findById','READ','ALLOW','ROLE','$subordinate',10578);
+INSERT INTO `ACL` VALUES (919,'Worker','findById','READ','ALLOW','ROLE','employee',10578);
INSERT INTO `ACL` VALUES (920,'QuadmindsApiConfig','*','*','ALLOW','ROLE','delivery',19295);
-INSERT INTO `ACL` VALUES (921,'Worker','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (922,'SaleGroup','*','WRITE','ALLOW','ROLE','production',19294);
+INSERT INTO `ACL` VALUES (923,'Worker','__get__advancedSummary','READ','ALLOW','ROLE','hr',10578);
+INSERT INTO `ACL` VALUES (924,'Worker','__get__summary','READ','ALLOW','ROLE','employee',10578);
+INSERT INTO `ACL` VALUES (925,'Postcode','*','WRITE','ALLOW','ROLE','administrative',10578);
+INSERT INTO `ACL` VALUES (926,'Province','*','WRITE','ALLOW','ROLE','administrative',10578);
+INSERT INTO `ACL` VALUES (927,'Town','*','WRITE','ALLOW','ROLE','administrative',10578);
+INSERT INTO `ACL` VALUES (928,'ExpeditionStateType','*','READ','ALLOW','ROLE','employee',19294);
+INSERT INTO `ACL` VALUES (929,'ExpeditionState','addExpeditionState','WRITE','ALLOW','ROLE','delivery',19294);
+INSERT INTO `ACL` VALUES (930,'SupplierAccount','*','READ','ALLOW','ROLE','buyer',783);
+INSERT INTO `ACL` VALUES (931,'StockBought','*','READ','ALLOW','ROLE','buyer',10578);
+INSERT INTO `ACL` VALUES (932,'StockBought','*','WRITE','ALLOW','ROLE','buyer',10578);
+INSERT INTO `ACL` VALUES (933,'Buyer','*','READ','ALLOW','ROLE','buyer',10578);
+INSERT INTO `ACL` VALUES (934,'Ticket','setWeight','WRITE','ALLOW','ROLE','salesPerson',10578);
+INSERT INTO `ACL` VALUES (935,'BankEntity','*','WRITE','ALLOW','ROLE','financial',10578);
+INSERT INTO `ACL` VALUES (936,'Device','handleUser','*','ALLOW','ROLE','employee',10578);
+INSERT INTO `ACL` VALUES (937,'WorkerTimeControlMail','count','READ','ALLOW','ROLE','employee',10578);
+INSERT INTO `ACL` VALUES (938,'Worker','__get__mail','READ','ALLOW','ROLE','hr',10578);
INSERT INTO `fieldAcl` VALUES (1,'Client','name','update','employee');
INSERT INTO `fieldAcl` VALUES (2,'Client','contact','update','employee');
@@ -2437,6 +2513,7 @@ INSERT INTO `component` VALUES (45,'maná reclamacion',7,4,NULL,0,'manaClaim',0)
INSERT INTO `component` VALUES (46,'recargo a particular',2,NULL,0.25,0,'individual',0);
INSERT INTO `component` VALUES (48,'fusión de lineas',4,NULL,NULL,1,'lineFusion',0);
INSERT INTO `component` VALUES (49,'sustitución',4,NULL,NULL,1,'substitution',0);
+INSERT INTO `component` VALUES (50,'bonus',4,NULL,NULL,1,'bonus',0);
INSERT INTO `componentType` VALUES (1,'cost','coste',1,0);
INSERT INTO `componentType` VALUES (2,NULL,'com ventas',1,1);
@@ -2511,7 +2588,7 @@ INSERT INTO `department` VALUES (136,'heavyVehicles','VEHICULOS PESADOS',110,111
INSERT INTO `department` VALUES (137,'sorter','SORTER',112,113,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (139,'spainTeam4','EQUIPO ESPAÑA 4',67,68,3803,0,0,0,2,0,43,'/1/43/','es4_equipo',1,'es4@verdnatura.es',0,0,0,0,NULL,NULL,'5400',NULL);
INSERT INTO `department` VALUES (140,'hollandTeam','EQUIPO HOLANDA',69,70,NULL,0,0,0,2,0,43,'/1/43/','nl_equipo',1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (141,NULL,'PREVIA',35,36,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (141,NULL,'PREVIA',35,36,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,'PREVIOUS');
INSERT INTO `department` VALUES (146,NULL,'VERDNACOLOMBIA',3,4,NULL,72,0,0,2,0,22,'/1/22/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (147,'spainTeamAsia','EQUIPO ESPAÑA ASIA',71,72,40214,0,0,0,2,0,43,'/1/43/','esA_equipo',0,'esA@verdnatura.es',0,0,0,0,NULL,NULL,'5500',NULL);
@@ -2568,7 +2645,7 @@ INSERT INTO `sample` VALUES (16,'letter-debtor-nd','Aviso reiterado por saldo de
INSERT INTO `sample` VALUES (17,'client-lcr','Email de solicitud de datos bancarios LCR',0,1,1,0,NULL);
INSERT INTO `sample` VALUES (18,'client-debt-statement','Extracto del cliente',1,0,1,1,'Clients');
INSERT INTO `sample` VALUES (19,'credit-request','Solicitud de crédito',1,1,1,0,'Clients');
-INSERT INTO `sample` VALUES (20,'incoterms-authorization','Autorización de incoterms',1,1,1,0,'Clients');
+INSERT INTO `sample` VALUES (20,'incoterms-authorization','Entregas intracomunitarias recogidas por el cliente',1,1,1,0,'Clients');
INSERT INTO `siiTrascendencyInvoiceIn` VALUES (1,'Operación de régimen general');
INSERT INTO `siiTrascendencyInvoiceIn` VALUES (2,'Operaciones por las que los empresarios satisfacen compensaciones REAGYP');
@@ -2605,48 +2682,50 @@ INSERT INTO `siiTypeInvoiceOut` VALUES (7,'R3','Factura rectificativa (Art. 80.4
INSERT INTO `siiTypeInvoiceOut` VALUES (8,'R4','Factura rectificativa (Resto)');
INSERT INTO `siiTypeInvoiceOut` VALUES (9,'R5','Factura rectificativa en facturas simplificadas');
-INSERT INTO `state` VALUES (1,'Arreglar',2,0,'FIXING',NULL,1,0,0,0,0,0,0,4,1,'alert');
-INSERT INTO `state` VALUES (2,'Libre',2,0,'FREE',NULL,2,0,0,0,0,0,0,4,1,'notice');
-INSERT INTO `state` VALUES (3,'OK',3,0,'OK',3,28,1,0,1,0,1,1,3,0,'success');
-INSERT INTO `state` VALUES (4,'Impreso',4,0,'PRINTED',2,29,1,0,1,0,0,1,2,0,'success');
-INSERT INTO `state` VALUES (5,'Preparación',6,2,'ON_PREPARATION',7,14,0,0,0,2,0,0,2,0,'warning');
-INSERT INTO `state` VALUES (6,'En Revisión',7,2,'ON_CHECKING',NULL,6,0,1,0,3,0,0,1,0,'warning');
-INSERT INTO `state` VALUES (7,'Sin Acabar',1,0,'NOT_READY',NULL,7,0,0,0,0,0,0,4,1,'alert');
-INSERT INTO `state` VALUES (8,'Revisado',8,2,'CHECKED',NULL,8,0,1,0,3,0,0,1,0,'warning');
-INSERT INTO `state` VALUES (9,'Encajando',9,3,'PACKING',NULL,9,0,1,0,0,0,0,1,0,NULL);
-INSERT INTO `state` VALUES (10,'Encajado',10,3,'PACKED',NULL,10,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (11,'Facturado',0,4,'INVOICED',NULL,11,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (12,'Bloqueado',0,0,'BLOCKED',NULL,12,0,0,0,0,0,0,4,1,'alert');
-INSERT INTO `state` VALUES (13,'En Reparto',11,4,'ON_DELIVERY',NULL,13,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (14,'Preparado',6,2,'PREPARED',NULL,14,0,1,0,2,0,0,1,0,'warning');
-INSERT INTO `state` VALUES (15,'Pte Recogida',12,4,'WAITING_FOR_PICKUP',NULL,15,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (16,'Entregado',13,4,'DELIVERED',NULL,16,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (20,'Asignado',4,0,'PICKER_DESIGNED',NULL,20,1,0,0,0,0,0,2,0,'success');
-INSERT INTO `state` VALUES (21,'Retornado',4,2,'PRINTED_BACK',6,21,0,0,0,0,0,0,2,0,'success');
-INSERT INTO `state` VALUES (22,'Pte. Ampliar',2,0,'EXPANDABLE',NULL,22,0,0,0,0,0,0,4,1,'alert');
-INSERT INTO `state` VALUES (23,'URGENTE',5,2,'LAST_CALL',NULL,23,1,0,1,0,0,0,4,1,'success');
-INSERT INTO `state` VALUES (24,'Encadenado',4,0,'CHAINED',4,24,0,0,0,0,0,0,3,1,'success');
-INSERT INTO `state` VALUES (25,'Embarcando',3,0,'BOARDING',5,25,1,0,0,0,0,0,3,0,'alert');
-INSERT INTO `state` VALUES (26,'Prep Previa',5,0,'PREVIOUS_PREPARATION',1,28,1,0,0,1,0,0,2,0,'warning');
-INSERT INTO `state` VALUES (27,'Prep Asistida',5,2,'ASSISTED_PREPARATION',7,27,0,0,0,0,0,0,2,0,'success');
-INSERT INTO `state` VALUES (28,'Previa OK',3,0,'OK PREVIOUS',3,28,1,0,1,1,1,1,3,0,'warning');
-INSERT INTO `state` VALUES (29,'Previa Impreso',4,0,'PRINTED PREVIOUS',2,29,1,0,1,0,0,1,2,0,'success');
-INSERT INTO `state` VALUES (30,'Embarcado',4,2,'BOARD',5,30,0,0,0,2,0,0,3,0,'success');
-INSERT INTO `state` VALUES (31,'Polizon Impreso',4,2,'PRINTED STOWAWAY',2,29,1,0,1,0,0,1,2,0,'success');
-INSERT INTO `state` VALUES (32,'Polizon OK',3,2,'OK STOWAWAY',3,31,1,0,0,1,1,1,3,0,'warning');
-INSERT INTO `state` VALUES (33,'Auto_Impreso',4,0,'PRINTED_AUTO',2,29,1,0,1,0,0,1,2,0,'success');
-INSERT INTO `state` VALUES (34,'Pte Pago',3,0,'WAITING_FOR_PAYMENT',NULL,34,0,0,0,0,0,0,4,1,'alert');
-INSERT INTO `state` VALUES (35,'Semi-Encajado',9,3,'HALF_PACKED',NULL,10,0,1,0,0,0,0,1,0,NULL);
-INSERT INTO `state` VALUES (36,'Previa Revisando',3,0,'PREVIOUS_CONTROL',2,37,1,0,0,4,0,1,2,0,'warning');
-INSERT INTO `state` VALUES (37,'Previa Revisado',3,0,'PREVIOUS_CONTROLLED',2,29,1,0,1,0,0,1,2,0,'warning');
-INSERT INTO `state` VALUES (38,'Prep Cámara',6,2,'COOLER_PREPARATION',7,14,0,0,0,2,0,0,2,0,'warning');
-INSERT INTO `state` VALUES (41,'Prep Parcial',6,2,'PARTIAL_PREPARATION',7,14,0,0,0,2,0,0,2,0,'warning');
-INSERT INTO `state` VALUES (42,'Entregado en parte',13,3,'PARTIAL_DELIVERED',NULL,16,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (43,'Preparación por caja',6,2,'BOX_PICKING',7,42,0,0,0,2,0,0,2,0,'warning');
+INSERT INTO `state` VALUES (1,'Arreglar',2,0,'FIXING',1,0,0,0,0,0,0,4,1,'alert');
+INSERT INTO `state` VALUES (2,'Libre',2,0,'FREE',2,0,0,0,0,0,0,4,1,'notice');
+INSERT INTO `state` VALUES (3,'OK',3,0,'OK',28,1,0,1,0,1,1,3,0,'success');
+INSERT INTO `state` VALUES (4,'Impreso',4,0,'PRINTED',29,1,0,1,0,0,1,2,0,'success');
+INSERT INTO `state` VALUES (5,'Preparación',6,2,'ON_PREPARATION',14,0,0,0,2,0,0,2,0,'warning');
+INSERT INTO `state` VALUES (6,'En Revisión',7,2,'ON_CHECKING',6,0,1,0,3,0,0,1,0,'warning');
+INSERT INTO `state` VALUES (7,'Sin Acabar',1,0,'NOT_READY',7,0,0,0,0,0,0,4,1,'alert');
+INSERT INTO `state` VALUES (8,'Revisado',8,2,'CHECKED',8,0,1,0,3,0,0,1,0,'warning');
+INSERT INTO `state` VALUES (9,'Encajando',9,3,'PACKING',9,0,1,0,0,0,0,1,0,NULL);
+INSERT INTO `state` VALUES (10,'Encajado',10,3,'PACKED',10,0,1,0,0,0,0,0,0,NULL);
+INSERT INTO `state` VALUES (11,'Facturado',0,4,'INVOICED',11,0,1,0,0,0,0,0,0,NULL);
+INSERT INTO `state` VALUES (12,'Bloqueado',0,0,'BLOCKED',12,0,0,0,0,0,0,4,1,'alert');
+INSERT INTO `state` VALUES (13,'En Reparto',11,4,'ON_DELIVERY',13,0,1,0,0,0,0,0,0,NULL);
+INSERT INTO `state` VALUES (14,'Preparado',6,2,'PREPARED',14,0,1,0,2,0,0,1,0,'warning');
+INSERT INTO `state` VALUES (15,'Pte Recogida',12,4,'WAITING_FOR_PICKUP',15,0,1,0,0,0,0,0,0,NULL);
+INSERT INTO `state` VALUES (16,'Entregado',13,4,'DELIVERED',16,0,1,0,0,0,0,0,0,NULL);
+INSERT INTO `state` VALUES (20,'Asignado',4,0,'PICKER_DESIGNED',20,1,0,0,0,0,0,2,0,'success');
+INSERT INTO `state` VALUES (21,'Retornado',4,2,'PRINTED_BACK',21,0,0,0,0,0,0,2,0,'success');
+INSERT INTO `state` VALUES (22,'Pte. Ampliar',2,0,'EXPANDABLE',22,0,0,0,0,0,0,4,1,'alert');
+INSERT INTO `state` VALUES (23,'URGENTE',5,2,'LAST_CALL',23,1,0,1,0,0,0,4,1,'success');
+INSERT INTO `state` VALUES (24,'Encadenado',4,0,'CHAINED',24,0,0,0,0,0,0,3,1,'success');
+INSERT INTO `state` VALUES (25,'Embarcando',3,0,'BOARDING',25,1,0,0,0,0,0,3,0,'alert');
+INSERT INTO `state` VALUES (26,'Prep Previa',5,0,'PREVIOUS_PREPARATION',28,1,0,0,1,0,0,2,0,'warning');
+INSERT INTO `state` VALUES (27,'Prep Asistida',5,2,'ASSISTED_PREPARATION',27,0,0,0,0,0,0,2,0,'success');
+INSERT INTO `state` VALUES (28,'Previa OK',3,0,'OK PREVIOUS',28,1,0,1,1,1,1,3,0,'warning');
+INSERT INTO `state` VALUES (29,'Previa Impreso',4,0,'PRINTED PREVIOUS',29,1,0,1,0,0,1,2,0,'success');
+INSERT INTO `state` VALUES (30,'Embarcado',4,2,'BOARD',30,0,0,0,2,0,0,3,0,'success');
+INSERT INTO `state` VALUES (31,'Polizon Impreso',4,2,'PRINTED STOWAWAY',29,1,0,1,0,0,1,2,0,'success');
+INSERT INTO `state` VALUES (32,'Polizon OK',3,2,'OK STOWAWAY',31,1,0,0,1,1,1,3,0,'warning');
+INSERT INTO `state` VALUES (33,'Auto_Impreso',4,0,'PRINTED_AUTO',29,1,0,1,0,0,1,2,0,'success');
+INSERT INTO `state` VALUES (34,'Pte Pago',3,0,'WAITING_FOR_PAYMENT',34,0,0,0,0,0,0,4,1,'alert');
+INSERT INTO `state` VALUES (35,'Semi-Encajado',9,3,'HALF_PACKED',10,0,1,0,0,0,0,1,0,NULL);
+INSERT INTO `state` VALUES (36,'Previa Revisando',3,0,'PREVIOUS_CONTROL',37,1,0,0,4,0,1,2,0,'warning');
+INSERT INTO `state` VALUES (37,'Previa Revisado',3,0,'PREVIOUS_CONTROLLED',29,1,0,1,0,0,1,2,0,'warning');
+INSERT INTO `state` VALUES (38,'Prep Cámara',6,2,'COOLER_PREPARATION',14,0,0,0,2,0,0,2,0,'warning');
+INSERT INTO `state` VALUES (41,'Prep Parcial',6,2,'PARTIAL_PREPARATION',14,0,0,0,2,0,0,2,0,'warning');
+INSERT INTO `state` VALUES (42,'Entregado en parte',13,3,'PARTIAL_DELIVERED',16,0,1,0,0,0,0,0,0,NULL);
+INSERT INTO `state` VALUES (43,'Preparación por caja',6,2,'BOX_PICKING',42,0,0,0,2,0,0,2,0,'warning');
INSERT INTO `ticketUpdateAction` VALUES (1,'Cambiar los precios en el ticket','renewPrices');
INSERT INTO `ticketUpdateAction` VALUES (2,'Convertir en maná','mana');
+INSERT INTO `ticketCanAdvanceConfig` VALUES (1,5);
+
INSERT INTO `volumeConfig` VALUES (2.67,1.60,0.8,150,0.30,120,57,2.0,50,200,10,167.0);
INSERT INTO `workCenter` VALUES (1,'Silla',20,859,1,'Av espioca 100',552703,NULL);
@@ -2659,6 +2738,7 @@ INSERT INTO `workCenter` VALUES (7,'Tenerife',NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `workCenter` VALUES (8,'Silla-Agrario',26,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `workCenter` VALUES (9,'Algemesi',20,1354,60,'Fenollars, 2',523549,NULL);
INSERT INTO `workCenter` VALUES (10,'Rubi',88,NULL,84,'Av. de la Llana, 131',549722,NULL);
+INSERT INTO `workCenter` VALUES (11,'Colombia',NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO `workerTimeControlError` VALUES (1,'IS_NOT_ALLOWED_FUTURE','No se permite fichar a futuro');
INSERT INTO `workerTimeControlError` VALUES (2,'INACTIVE_BUSINESS','No hay un contrato en vigor');
diff --git a/db/dump/.dump/privileges.sql b/db/dump/.dump/privileges.sql
index 8ee823cfa..66e553763 100644
--- a/db/dump/.dump/privileges.sql
+++ b/db/dump/.dump/privileges.sql
@@ -1471,6 +1471,9 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','productionAssi','tillSerial','
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','stockBuyed','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','alertLevel','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','workerActivityType','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','priceDelta','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','parkingLog','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','travelLog','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
/*!40000 ALTER TABLE `tables_priv` ENABLE KEYS */;
/*!40000 ALTER TABLE `columns_priv` DISABLE KEYS */;
@@ -2072,7 +2075,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemshelving_addby
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_addByCollection','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemshelving_addlist','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemshelving_selfconsumption','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
-INSERT IGNORE INTO `procs_priv` VALUES ('','vn','cooler','item_getSimilar','PROCEDURE','guillermo@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','cooler','item_getSimilar','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemshelvingsale_add','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','collection_printsticker','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','deviceproductionuser_getworker','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
@@ -2123,7 +2126,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','itemshelving_filterb
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','itemshelving_addbyclaim','PROCEDURE','guillermo@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','itemshelving_addlist','PROCEDURE','guillermo@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','itemshelving_selfconsumption','PROCEDURE','guillermo@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
-INSERT IGNORE INTO `procs_priv` VALUES ('','vn','reviewer','item_getSimilar','PROCEDURE','guillermo@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','reviewer','item_getSimilar','PROCEDURE','guillermo@10.5.1.6','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','itemshelvingsale_add','PROCEDURE','guillermo@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','collection_printsticker','PROCEDURE','guillermo@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','delivery','deviceproductionuser_getworker','PROCEDURE','guillermo@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
@@ -2191,6 +2194,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','buy_recalcPricesByEn
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','entryEditor','buy_recalcPricesByBuy','PROCEDURE','jenkins@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','claimManager','buy_recalcPricesByBuy','PROCEDURE','jenkins@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','buy_recalcPricesByBuy','PROCEDURE','jenkins@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_addBySaleGroup','PROCEDURE','alexm@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','hr','ledger_nextTx','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','hr','ledger_docompensation','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_setQuantity','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
@@ -2206,6 +2210,8 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','grafana-write','item_ValuateInv
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','guest','ticketCalculatePurge','PROCEDURE','jenkins@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','buy_getUltimate','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','cooler','buy_getUltimate','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','bs','buyerBoss','waste_addSales','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','bs','grafana','waste_addSales','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
/*!40000 ALTER TABLE `procs_priv` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
diff --git a/db/dump/.dump/structure.sql b/db/dump/.dump/structure.sql
index f9ad18c8f..0bd03ac32 100644
--- a/db/dump/.dump/structure.sql
+++ b/db/dump/.dump/structure.sql
@@ -76,13 +76,13 @@ SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
--
--- Table structure for table `accountLog`
+-- Table structure for table `accountLog__`
--
-DROP TABLE IF EXISTS `accountLog`;
+DROP TABLE IF EXISTS `accountLog__`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `accountLog` (
+CREATE TABLE `accountLog__` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`msg` varchar(255) NOT NULL,
`pid` varchar(255) NOT NULL,
@@ -92,7 +92,7 @@ CREATE TABLE `accountLog` (
`time` varchar(255) NOT NULL,
`summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='@deprecated 2024-09-02 refs #7819';
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -186,23 +186,6 @@ CREATE TABLE `mailAliasAcl` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `mailClientAccess__`
---
-
-DROP TABLE IF EXISTS `mailClientAccess__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `mailClientAccess__` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `client` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL,
- `action` set('OK','REJECT') CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL DEFAULT 'REJECT',
- `description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `mailFrom` (`client`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='@deprecated 2023-09-03';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `mailConfig`
--
@@ -236,23 +219,6 @@ CREATE TABLE `mailForward` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Mail forwarding';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `mailSenderAccess__`
---
-
-DROP TABLE IF EXISTS `mailSenderAccess__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `mailSenderAccess__` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `sender` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL,
- `action` set('OK','REJECT') NOT NULL DEFAULT 'REJECT',
- `description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `mailFrom` (`sender`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='@deprecated 2023-09-03';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Temporary table structure for view `myRole`
--
@@ -371,6 +337,7 @@ CREATE TABLE `roleLog` (
KEY `userFk` (`userFk`),
KEY `roleLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `roleLog_originFk` (`originFk`,`creationDate`),
+ KEY `roleLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `roleLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -515,6 +482,7 @@ CREATE TABLE `userLog` (
KEY `userFk` (`userFk`),
KEY `userLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `userLog_originFk` (`originFk`,`creationDate`),
+ KEY `userLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `userLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2401,27 +2369,6 @@ CREATE TABLE `analisis_ventas_almacen_evolution` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `analisis_ventas_familia_evolution__`
---
-
-DROP TABLE IF EXISTS `analisis_ventas_familia_evolution__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `analisis_ventas_familia_evolution__` (
- `semana` int(11) NOT NULL,
- `familia` varchar(50) NOT NULL,
- `ventas` int(11) NOT NULL,
- `año` int(11) NOT NULL,
- `periodo` int(11) NOT NULL,
- `typeFk` smallint(5) unsigned DEFAULT NULL,
- UNIQUE KEY `familia` (`familia`,`periodo`),
- KEY `periodo` (`periodo`),
- KEY `analisis_ventas_familia_evolution_FK` (`typeFk`),
- CONSTRAINT `analisis_ventas_familia_evolution_FK` FOREIGN KEY (`typeFk`) REFERENCES `vn`.`itemType` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #5196 Deprecated 2023-06-05';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `analisis_ventas_provincia_evolution`
--
@@ -2643,54 +2590,6 @@ SET character_set_client = utf8;
1 AS `Consumo` */;
SET character_set_client = @saved_cs_client;
---
--- Table structure for table `live_counter__`
---
-
-DROP TABLE IF EXISTS `live_counter__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `live_counter__` (
- `odbc_date` timestamp NOT NULL DEFAULT current_timestamp(),
- `amount` double NOT NULL,
- PRIMARY KEY (`odbc_date`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #5744 Deprecated 2023-06-06';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `partitioning_information__`
---
-
-DROP TABLE IF EXISTS `partitioning_information__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `partitioning_information__` (
- `schema_name` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `table_name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `date_field` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
- `table_depending` varchar(15) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
- `execution_order` tinyint(3) unsigned NOT NULL,
- PRIMARY KEY (`schema_name`,`table_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #5744 Deprecated 2023-06-06';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `primer_pedido__`
---
-
-DROP TABLE IF EXISTS `primer_pedido__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `primer_pedido__` (
- `Id_Cliente` int(11) NOT NULL,
- `Id_Ticket` int(11) NOT NULL,
- `month` tinyint(1) NOT NULL,
- `year` smallint(2) NOT NULL,
- `total` decimal(10,2) NOT NULL DEFAULT 0.00,
- PRIMARY KEY (`Id_Cliente`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #5744 Deprecated 2023-06-06';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Temporary table structure for view `rotacion`
--
@@ -2724,26 +2623,13 @@ CREATE TABLE `rutasBoard` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Id_Ruta` int(10) unsigned NOT NULL DEFAULT 0,
`Id_Agencia` int(11) NOT NULL DEFAULT 0,
- `km__` varchar(9) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
- `Dia__` varchar(9) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
`Fecha` date NOT NULL,
- `Terceros__` int(11) DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
`Bultos` int(11) NOT NULL DEFAULT 0,
- `Matricula__` varchar(10) DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
- `Tipo__` varchar(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
- `year__` int(4) DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
- `month__` int(2) DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
- `warehouse_id__` smallint(5) unsigned DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
- `coste_bulto__` decimal(10,2) unsigned DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
`teorico` decimal(10,2) NOT NULL DEFAULT 0.00,
`practico` decimal(10,2) NOT NULL DEFAULT 0.00,
`greuge` decimal(10,2) NOT NULL DEFAULT 0.00,
- `m3__` decimal(10,1) unsigned DEFAULT NULL COMMENT '@deprecated 2023-11-01, refs #6087',
PRIMARY KEY (`id`),
- UNIQUE KEY `rutasBoard_Ruta` (`Id_Ruta`),
- KEY `rutasBoard_ix1` (`year__`),
- KEY `rutasBoard_ix2` (`month__`),
- KEY `rutasBoard_ix3` (`warehouse_id__`)
+ UNIQUE KEY `rutasBoard_Ruta` (`Id_Ruta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Se usa en https://grafana.verdnatura.es/d/c089276b-5ab5-430f-aa76-e5d8e0e7fe2e/analisis-de-volumen-y-rendimiento-por-agencia?orgId=1';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2780,36 +2666,6 @@ SET character_set_client = utf8;
1 AS `margen` */;
SET character_set_client = @saved_cs_client;
---
--- Table structure for table `tarifa_premisas__`
---
-
-DROP TABLE IF EXISTS `tarifa_premisas__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `tarifa_premisas__` (
- `Id_Premisa` int(11) NOT NULL AUTO_INCREMENT,
- `premisa` varchar(45) NOT NULL,
- PRIMARY KEY (`Id_Premisa`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #5744 Deprecated 2023-06-06';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `tarifa_warehouse__`
---
-
-DROP TABLE IF EXISTS `tarifa_warehouse__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `tarifa_warehouse__` (
- `Id_Tarifa_Warehouse` int(11) NOT NULL AUTO_INCREMENT,
- `warehouse_id` int(11) NOT NULL,
- `Id_Premisa` int(11) NOT NULL,
- `Valor` double NOT NULL,
- PRIMARY KEY (`Id_Tarifa_Warehouse`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #5744 Deprecated 2023-06-06\nAlmacena los valores de gasto por almacen';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Dumping events for database 'bi'
--
@@ -3876,10 +3732,7 @@ DROP TABLE IF EXISTS `clientDied`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientDied` (
`clientFk` int(11) NOT NULL DEFAULT 0,
- `clientName__` varchar(50) NOT NULL COMMENT '@deprecated 2023-10-15',
`lastInvoiced` date DEFAULT NULL,
- `workerCode__` varchar(3) NOT NULL COMMENT '@deprecated 2023-10-15',
- `Boss__` varchar(3) NOT NULL COMMENT '@deprecated 2023-10-15',
`warning` enum('first','second','third') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
PRIMARY KEY (`clientFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Clientes que no han comprado en los ultimos 3 meses, se actualiza con proceso nocturno el 3 de cada mes';
@@ -3920,24 +3773,6 @@ CREATE TABLE `clientNewBorn` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Listado de clientes que se consideran nuevos a efectos de cobrar la comision adicional del comercial';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `compradores__`
---
-
-DROP TABLE IF EXISTS `compradores__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `compradores__` (
- `Id_Trabajador` int(10) unsigned NOT NULL,
- `año` int(4) NOT NULL,
- `semana` int(2) NOT NULL,
- `importe` decimal(10,2) DEFAULT NULL,
- `comision` decimal(10,2) DEFAULT NULL,
- PRIMARY KEY (`Id_Trabajador`,`año`,`semana`),
- CONSTRAINT `comprador_trabajador` FOREIGN KEY (`Id_Trabajador`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `compradores_evolution`
--
@@ -4292,7 +4127,6 @@ DROP TABLE IF EXISTS `salesByItemTypeDay`;
CREATE TABLE `salesByItemTypeDay` (
`itemTypeFk` smallint(5) unsigned NOT NULL,
`dated` date NOT NULL,
- `netSale__` int(11) NOT NULL DEFAULT 0 COMMENT '@deprecated 2023-08-31, Mismo valor que campo sale',
`stems` int(11) NOT NULL DEFAULT 0 COMMENT 'Número de tallos vendidos',
`references` int(11) NOT NULL DEFAULT 0 COMMENT 'Número de artículos distintos por tipo vendidos',
`trash` int(11) NOT NULL DEFAULT 0 COMMENT 'Tallos basura',
@@ -4347,31 +4181,6 @@ CREATE TABLE `salesByclientSalesPerson` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Ventas diarias por cliente y comercial';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `salesMonthlySnapshot___`
---
-
-DROP TABLE IF EXISTS `salesMonthlySnapshot___`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `salesMonthlySnapshot___` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `salesPersonName` varchar(100) DEFAULT '',
- `teamName` varchar(100) DEFAULT NULL,
- `year` int(11) DEFAULT NULL,
- `month` int(11) DEFAULT NULL,
- `currentSale` decimal(10,3) DEFAULT NULL,
- `commissionSale` decimal(10,3) DEFAULT NULL,
- `individualPlus` decimal(10,3) DEFAULT NULL,
- `teamPlus` decimal(10,3) DEFAULT NULL,
- `teamScore` decimal(10,3) DEFAULT NULL,
- `newClientPlus` decimal(10,3) DEFAULT NULL,
- `newClientScore` decimal(10,3) DEFAULT NULL,
- `teamBossPlus` decimal(10,3) DEFAULT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='@deprecated 2022-11';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `salesPersonEvolution`
--
@@ -4392,48 +4201,6 @@ CREATE TABLE `salesPersonEvolution` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Evolución Comerciales';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `salesPerson__`
---
-
-DROP TABLE IF EXISTS `salesPerson__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `salesPerson__` (
- `workerFk` int(10) unsigned NOT NULL,
- `year` int(4) NOT NULL,
- `month` int(2) NOT NULL,
- `amount` decimal(10,2) DEFAULT NULL,
- `commission` decimal(10,2) DEFAULT NULL,
- `leasedCommission` decimal(10,2) DEFAULT NULL COMMENT 'comision proveniente de clientes que han sido donados. Ver tabla Clientes_cedidos',
- `cededCommission` decimal(10,2) DEFAULT NULL COMMENT 'comision generada por los clientes que han sido donados. Ver tabla Clientes_cedidos',
- `newCommission` decimal(10,2) DEFAULT NULL,
- `leasedReplacement` decimal(10,2) DEFAULT NULL,
- `itemTypeBorrowed` decimal(10,2) DEFAULT NULL,
- `portfolioWeight` decimal(10,2) DEFAULT NULL COMMENT 'Pero de la cartera del comercial a fecha vendedores.updated',
- `updated` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- PRIMARY KEY (`workerFk`,`year`,`month`),
- CONSTRAINT `salesPerson_FK` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='@deprecated 2022-11';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `vendedores_evolution__`
---
-
-DROP TABLE IF EXISTS `vendedores_evolution__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `vendedores_evolution__` (
- `workerFk` int(10) unsigned NOT NULL,
- `year` int(11) NOT NULL,
- `sales` decimal(10,2) DEFAULT NULL,
- `month` int(11) NOT NULL,
- PRIMARY KEY (`workerFk`,`year`,`month`),
- CONSTRAINT `evo_vendedor_trabajador` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='@deprecated 2022-11';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Temporary table structure for view `ventas`
--
@@ -4490,8 +4257,11 @@ CREATE TABLE `waste` (
`itemFk` int(11) NOT NULL DEFAULT 0,
`saleTotal` decimal(10,2) DEFAULT NULL COMMENT 'Coste',
`saleWasteQuantity` decimal(10,2) DEFAULT NULL,
- `saleInternalWaste` decimal(10,2) DEFAULT NULL,
`saleExternalWaste` decimal(10,2) DEFAULT NULL,
+ `saleFaultWaste` decimal(10,2) DEFAULT NULL,
+ `saleContainerWaste` decimal(10,2) DEFAULT NULL,
+ `saleBreakWaste` decimal(10,2) DEFAULT NULL,
+ `saleOtherWaste` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`year`,`week`,`buyerFk`,`itemTypeFk`,`itemFk`),
KEY `waste_itemType_id` (`itemTypeFk`),
KEY `waste_item_id` (`itemFk`),
@@ -6509,10 +6279,24 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `waste_addSales`()
+CREATE DEFINER=`root`@`localhost` PROCEDURE `waste_addSales`(
+ vDateFrom DATE,
+ vDateTo DATE
+)
BEGIN
- DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(util.VN_CURDATE()) DAY;
- DECLARE vDateTo DATE DEFAULT vDateFrom + INTERVAL 6 DAY;
+/**
+ * Recalcula las mermas de un periodo.
+ *
+ * @param vDateFrom Fecha desde
+ * @param vDateTo Fecha hasta
+ */
+ IF vDateFrom IS NULL THEN
+ SET vDateFrom = util.VN_CURDATE() - INTERVAL WEEKDAY(util.VN_CURDATE()) DAY;
+ END IF;
+
+ IF vDateTo IS NULL THEN
+ SET vDateTo = vDateFrom + INTERVAL 6 DAY;
+ END IF;
CALL cache.last_buy_refresh(FALSE);
@@ -6524,16 +6308,32 @@ BEGIN
s.itemFk,
SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity),
SUM(IF(aw.`type`, s.quantity, 0)),
- SUM(
- IF(
- aw.`type` = 'internal',
+ SUM(IF(
+ aw.`type` = 'external',
(b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
0
)
- ),
- SUM(
- IF(
- aw.`type` = 'external',
+ ),
+ SUM(IF(
+ aw.`type` = 'fault',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ 0
+ )
+ ),
+ SUM(IF(
+ aw.`type` = 'container',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ 0
+ )
+ ),
+ SUM(IF(
+ aw.`type` = 'break',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ 0
+ )
+ ),
+ SUM(IF(
+ aw.`type` = 'other',
(b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
0
)
@@ -6550,7 +6350,26 @@ BEGIN
JOIN vn.buy b ON b.id = lb.buy_id
WHERE t.shipped BETWEEN vDateFrom AND vDateTo
AND w.isManaged
- GROUP BY i.id;
+ GROUP BY YEAR(t.shipped), WEEK(t.shipped, 4), i.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 `waste_addSalesLauncher` */;
+/*!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 `waste_addSalesLauncher`()
+BEGIN
+ CALL waste_addSales(NULL, NULL);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -9347,27 +9166,6 @@ CREATE TABLE `warehouseFloramondo` (
--
-- Dumping events for database 'edi'
--
-/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
-/*!50106 DROP EVENT IF EXISTS `floramondo` */;
-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 = 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' */ ;;
-/*!50003 SET @saved_time_zone = @@time_zone */ ;;
-/*!50003 SET time_zone = 'SYSTEM' */ ;;
-/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `floramondo` ON SCHEDULE EVERY 6 MINUTE STARTS '2022-01-28 09:52:45' ON COMPLETION NOT PRESERVE DISABLE DO CALL edi.floramondo_offerRefresh() */ ;;
-/*!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 'edi'
@@ -10085,541 +9883,6 @@ DELIMITER ;
/*!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 `floramondo_offerRefresh` */;
-/*!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 `floramondo_offerRefresh`()
-proc: BEGIN
- DECLARE vLanded DATETIME;
- DECLARE vDone INT DEFAULT FALSE;
- DECLARE vFreeId INT;
- DECLARE vSupplyResponseFk INT;
- DECLARE vLastInserted DATETIME;
- DECLARE vIsAuctionDay BOOLEAN;
- DECLARE vMaxNewItems INT DEFAULT 10000;
- DECLARE vStartingTime DATETIME;
- DECLARE vAalsmeerMarketPlaceID VARCHAR(13) DEFAULT '8713783439043';
- DECLARE vDayRange INT;
-
- DECLARE cur1 CURSOR FOR
- SELECT id
- FROM edi.item_free;
-
- DECLARE cur2 CURSOR FOR
- SELECT srId
- FROM itemToInsert;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- DECLARE EXIT HANDLER FOR SQLSTATE '45000'
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('edi.floramondo_offerRefresh');
- SET @isTriggerDisabled = FALSE;
- RESIGNAL;
- END;
-
- IF 'test' = (SELECT environment FROM util.config) THEN
- LEAVE proc;
- END IF;
-
- IF !GET_LOCK('edi.floramondo_offerRefresh', 0) THEN
- LEAVE proc;
- END IF;
-
- SELECT dayRange INTO vDayRange
- FROM offerRefreshConfig;
-
- IF vDayRange IS NULL THEN
- CALL util.throw("Variable vDayRange not declared");
- END IF;
-
- SET vStartingTime = util.VN_NOW();
-
- TRUNCATE edi.offerList;
-
- INSERT INTO edi.offerList(supplier, total)
- SELECT v.name, COUNT(DISTINCT sr.ID) total
- FROM edi.supplyResponse sr
- JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
- WHERE sr.NumberOfUnits > 0
- AND sr.EmbalageCode != 999
- GROUP BY sr.vmpID;
-
- UPDATE edi.offerList o
- JOIN (SELECT v.name, COUNT(*) total
- FROM edi.supplyOffer sr
- JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
- GROUP BY sr.vmpID) sub ON o.supplier = sub.name
- SET o.`filter` = sub.total;
-
- -- Elimina de la lista de items libres aquellos que ya existen
- DELETE itf.*
- FROM edi.item_free itf
- JOIN vn.item i ON i.id = itf.id;
-
- CREATE OR REPLACE TEMPORARY TABLE tmp
- (INDEX (`Item_ArticleCode`))
- ENGINE = MEMORY
- SELECT t.*
- FROM (
- SELECT *
- FROM edi.supplyOffer
- ORDER BY (MarketPlaceID = vAalsmeerMarketPlaceID) DESC,
- NumberOfUnits DESC LIMIT 10000000000000000000) t
- GROUP BY t.srId;
-
- CREATE OR REPLACE TEMPORARY TABLE edi.offer (INDEX (`srID`), INDEX (`EmbalageCode`),
- INDEX (`ef1`), INDEX (`ef2`), INDEX (`ef3`), INDEX (`ef4`),INDEX (`ef5`), INDEX (`ef6`),
- INDEX (`s1Value`), INDEX (`s2Value`), INDEX (`s3Value`), INDEX (`s4Value`),INDEX (`s5Value`), INDEX (`s6Value`))
- ENGINE = MEMORY
- SELECT so.*,
- ev1.type_description s1Value,
- ev2.type_description s2Value,
- ev3.type_description s3Value,
- ev4.type_description s4Value,
- ev5.type_description s5Value,
- ev6.type_description s6Value,
- eif1.feature ef1,
- eif2.feature ef2,
- eif3.feature ef3,
- eif4.feature ef4,
- eif5.feature ef5,
- eif6.feature ef6
- FROM tmp so
- LEFT JOIN edi.item_feature eif1 ON eif1.item_id = so.Item_ArticleCode
- AND eif1.presentation_order = 1
- AND eif1.expiry_date IS NULL
- LEFT JOIN edi.item_feature eif2 ON eif2.item_id = so.Item_ArticleCode
- AND eif2.presentation_order = 2
- AND eif2.expiry_date IS NULL
- LEFT JOIN edi.item_feature eif3 ON eif3.item_id = so.Item_ArticleCode
- AND eif3.presentation_order = 3
- AND eif3.expiry_date IS NULL
- LEFT JOIN edi.item_feature eif4 ON eif4.item_id = so.Item_ArticleCode
- AND eif4.presentation_order = 4
- AND eif4.expiry_date IS NULL
- LEFT JOIN edi.item_feature eif5 ON eif5.item_id = so.Item_ArticleCode
- AND eif5.presentation_order = 5
- AND eif5.expiry_date IS NULL
- LEFT JOIN edi.item_feature eif6 ON eif6.item_id = so.Item_ArticleCode
- AND eif6.presentation_order = 6
- AND eif6.expiry_date IS NULL
- LEFT JOIN edi.`value` ev1 ON ev1.type_id = eif1.feature
- AND so.s1 = ev1.type_value
- LEFT JOIN edi.`value` ev2 ON ev2.type_id = eif2.feature
- AND so.s2 = ev2.type_value
- LEFT JOIN edi.`value` ev3 ON ev3.type_id = eif3.feature
- AND so.s3 = ev3.type_value
- LEFT JOIN edi.`value` ev4 ON ev4.type_id = eif4.feature
- AND so.s4 = ev4.type_value
- LEFT JOIN edi.`value` ev5 ON ev5.type_id = eif5.feature
- AND so.s5 = ev5.type_value
- LEFT JOIN edi.`value` ev6 ON ev6.type_id = eif6.feature
- AND so.s6 = ev6.type_value
- ORDER BY Price;
-
- DROP TEMPORARY TABLE tmp;
-
- DELETE o
- FROM edi.offer o
- LEFT JOIN vn.tag t1 ON t1.ediTypeFk = o.ef1 AND t1.overwrite = 'size'
- LEFT JOIN vn.tag t2 ON t2.ediTypeFk = o.ef2 AND t2.overwrite = 'size'
- LEFT JOIN vn.tag t3 ON t3.ediTypeFk = o.ef3 AND t3.overwrite = 'size'
- LEFT JOIN vn.tag t4 ON t4.ediTypeFk = o.ef4 AND t4.overwrite = 'size'
- LEFT JOIN vn.tag t5 ON t5.ediTypeFk = o.ef5 AND t5.overwrite = 'size'
- LEFT JOIN vn.tag t6 ON t6.ediTypeFk = o.ef6 AND t6.overwrite = 'size'
- JOIN vn.floramondoConfig fc ON TRUE
- WHERE (t1.id IS NOT NULL AND CONVERT(s1Value, UNSIGNED) > fc.itemMaxSize)
- OR (t2.id IS NOT NULL AND CONVERT(s2Value, UNSIGNED) > fc.itemMaxSize)
- OR (t3.id IS NOT NULL AND CONVERT(s3Value, UNSIGNED) > fc.itemMaxSize)
- OR (t4.id IS NOT NULL AND CONVERT(s4Value, UNSIGNED) > fc.itemMaxSize)
- OR (t5.id IS NOT NULL AND CONVERT(s5Value, UNSIGNED) > fc.itemMaxSize)
- OR (t6.id IS NOT NULL AND CONVERT(s6Value, UNSIGNED) > fc.itemMaxSize);
-
- START TRANSACTION;
-
- -- Actualizamos el campo supplyResponseFk para aquellos articulos que ya estan creados y reutilizamos
- UPDATE IGNORE edi.offer o
- JOIN vn.item i
- ON i.name = o.product_name
- AND i.subname <=> o.company_name
- AND i.value5 <=> o.s1Value
- AND i.value6 <=> o.s2Value
- AND i.value7 <=> o.s3Value
- AND i.value8 <=> o.s4Value
- AND i.value9 <=> o.s5Value
- AND i.value10 <=> o.s6Value
- AND i.NumberOfItemsPerCask <=> o.NumberOfItemsPerCask
- AND i.EmbalageCode <=> o.EmbalageCode
- AND i.quality <=> o.Quality
- JOIN vn.itemType it ON it.id = i.typeFk
- LEFT JOIN vn.sale s ON s.itemFk = i.id
- LEFT JOIN vn.ticket t ON t.id = s.ticketFk
- AND t.shipped > (util.VN_CURDATE() - INTERVAL 1 WEEK)
- LEFT JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
- LEFT JOIN edi.deliveryInformation di ON di.supplyResponseID = sr.ID
- LEFT JOIN edi.putOrder po ON po.supplyResponseID = i.supplyResponseFk
- AND po.OrderTradeLineDateTime > (util.VN_CURDATE() - INTERVAL 1 WEEK)
- SET i.supplyResponseFk = o.srID
- WHERE (sr.ID IS NULL
- OR sr.NumberOfUnits = 0
- OR di.LatestOrderDateTime < util.VN_NOW()
- OR di.ID IS NULL)
- AND it.isInventory
- AND t.id IS NULL
- AND po.id IS NULL;
-
- CREATE OR REPLACE TEMPORARY TABLE itemToInsert
- ENGINE = MEMORY
- SELECT o.*, CAST(NULL AS DECIMAL(6,0)) itemFk
- FROM edi.offer o
- LEFT JOIN vn.item i ON i.supplyResponseFk = o.srId
- WHERE i.id IS NULL
- LIMIT vMaxNewItems;
-
- -- Reciclado de nº de item
- OPEN cur1;
- OPEN cur2;
-
- read_loop: LOOP
-
- FETCH cur2 INTO vSupplyResponseFk;
- FETCH cur1 INTO vFreeId;
-
- IF vDone THEN
- LEAVE read_loop;
- END IF;
-
- UPDATE itemToInsert
- SET itemFk = vFreeId
- WHERE srId = vSupplyResponseFk;
-
- END LOOP;
-
- CLOSE cur1;
- CLOSE cur2;
-
- -- Insertamos todos los items en Articles de la oferta
- INSERT INTO vn.item(id,
- `name`,
- longName,
- subName,
- expenseFk,
- typeFk,
- intrastatFk,
- originFk,
- supplyResponseFk,
- numberOfItemsPerCask,
- embalageCode,
- quality,
- isFloramondo)
- SELECT iti.itemFk,
- iti.product_name,
- iti.product_name,
- iti.company_name,
- iti.expenseFk,
- iti.itemTypeFk,
- iti.intrastatFk,
- iti.originFk,
- iti.`srId`,
- iti.NumberOfItemsPerCask,
- iti.EmbalageCode,
- iti.Quality,
- TRUE
- FROM itemToInsert iti;
-
- -- Inserta la foto de los articulos nuevos (prioridad alta)
- INSERT IGNORE INTO vn.itemImageQueue(itemFk, url)
- SELECT i.id, PictureReference
- FROM itemToInsert ii
- JOIN vn.item i ON i.supplyResponseFk = ii.srId
- WHERE PictureReference IS NOT NULL
- AND i.image IS NULL;
-
- INSERT INTO edi.`log`(tableName, fieldName,fieldValue)
- SELECT 'itemImageQueue','NumImagenesPtes', COUNT(*)
- FROM vn.itemImageQueue
- WHERE attempts = 0;
-
- -- Inserta si se añadiesen tags nuevos
- INSERT IGNORE INTO vn.tag (name, ediTypeFk)
- SELECT description, type_id FROM edi.type;
-
- -- Desabilita el trigger para recalcular los tags al final
- SET @isTriggerDisabled = TRUE;
-
- -- Inserta los tags sólo en los articulos nuevos
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , ii.product_name, 1
- FROM itemToInsert ii
- JOIN vn.tag t ON t.`name` = 'Producto'
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT ii.product_name IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , ii.Quality, 3
- FROM itemToInsert ii
- JOIN vn.tag t ON t.`name` = 'Calidad'
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT ii.Quality IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , ii.company_name, 4
- FROM itemToInsert ii
- JOIN vn.tag t ON t.`name` = 'Productor'
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT ii.company_name IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , s1Value, 5
- FROM itemToInsert ii
- JOIN vn.tag t ON t.ediTypeFk = ii.ef1
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT s1Value IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , s2Value, 6
- FROM itemToInsert ii
- JOIN vn.tag t ON t.ediTypeFk = ii.ef2
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT s2Value IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , s3Value, 7
- FROM itemToInsert ii
- JOIN vn.tag t ON t.ediTypeFk = ii.ef3
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT s3Value IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , s4Value, 8
- FROM itemToInsert ii
- JOIN vn.tag t ON t.ediTypeFk = ii.ef4
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT s4Value IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , s5Value, 9
- FROM itemToInsert ii
- JOIN vn.tag t ON t.ediTypeFk = ii.ef5
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT s5Value IS NULL;
-
- INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id , s6Value, 10
- FROM itemToInsert ii
- JOIN vn.tag t ON t.ediTypeFk = ii.ef6
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- WHERE NOT s6Value IS NULL;
-
- INSERT IGNORE INTO vn.itemTag(itemFk, tagFk, value, priority)
- SELECT i.id, t.id, IFNULL(ink.name, ik.color), 11
- FROM itemToInsert ii
- JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
- JOIN vn.tag t ON t.`name` = 'Color'
- LEFT JOIN edi.feature f ON f.item_id = ii.Item_ArticleCode
- LEFT JOIN edi.`type` tp ON tp.type_id = f.feature_type_id
- AND tp.`description` = 'Hoofdkleur 1'
- LEFT JOIN vn.ink ON ink.dutchCode = f.feature_value
- LEFT JOIN vn.itemInk ik ON ik.longName = i.longName
- WHERE ink.name IS NOT NULL
- OR ik.color IS NOT NULL;
-
- CREATE OR REPLACE TABLE tmp.item
- (PRIMARY KEY (id))
- SELECT i.id FROM vn.item i
- JOIN itemToInsert ii ON i.supplyResponseFk = ii.`srId`;
-
- CALL vn.item_refreshTags();
-
- DROP TABLE tmp.item;
-
- SELECT MIN(LatestDeliveryDateTime) INTO vLanded
- FROM edi.supplyResponse sr
- JOIN edi.deliveryInformation di ON di.supplyResponseID = sr.ID
- JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID
- JOIN vn.floramondoConfig fc
- WHERE mp.isLatestOrderDateTimeRelevant
- AND di.LatestOrderDateTime > IF(
- fc.MaxLatestOrderHour > HOUR(util.VN_NOW()),
- util.VN_CURDATE(),
- util.VN_CURDATE() + INTERVAL 1 DAY);
-
- UPDATE vn.floramondoConfig
- SET nextLanded = vLanded
- WHERE vLanded IS NOT NULL;
-
- -- Elimina la oferta obsoleta
- UPDATE vn.buy b
- JOIN vn.entry e ON e.id = b.entryFk
- JOIN vn.travel tr ON tr.id = e.travelFk
- JOIN vn.agencyMode am ON am.id = tr.agencyModeFk
- JOIN vn.item i ON i.id = b.itemFk
- LEFT JOIN edi.supplyResponse sr ON i.supplyResponseFk = sr.ID
- LEFT JOIN edi.deliveryInformation di ON di.ID = b.deliveryFk
- SET b.quantity = 0
- WHERE (IFNULL(di.LatestOrderDateTime,util.VN_NOW()) <= util.VN_NOW()
- OR i.supplyResponseFk IS NULL
- OR sr.NumberOfUnits = 0)
- AND am.name = 'LOGIFLORA'
- AND e.isRaid;
-
- -- Localiza las entradas de cada almacen
- UPDATE edi.warehouseFloramondo
- SET entryFk = vn.entry_getForLogiflora(vLanded + INTERVAL travellingDays DAY, warehouseFk);
-
- IF vLanded IS NOT NULL THEN
- -- Actualiza la oferta existente
- UPDATE vn.buy b
- JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
- JOIN vn.item i ON i.id = b.itemFk
- JOIN edi.offer o ON i.supplyResponseFk = o.`srId`
- SET b.quantity = o.NumberOfUnits * o.NumberOfItemsPerCask,
- b.buyingValue = o.price
- WHERE (b.quantity <> o.NumberOfUnits * o.NumberOfItemsPerCask
- OR b.buyingValue <> o.price);
-
- -- Inserta el resto
- SET vLastInserted := util.VN_NOW();
-
- -- Inserta la oferta
- INSERT INTO vn.buy (
- entryFk,
- itemFk,
- quantity,
- buyingValue,
- stickers,
- packing,
- `grouping`,
- groupingMode,
- packagingFk,
- deliveryFk)
- SELECT wf.entryFk,
- i.id,
- o.NumberOfUnits * o.NumberOfItemsPerCask quantity,
- o.Price,
- o.NumberOfUnits etiquetas,
- o.NumberOfItemsPerCask packing,
- GREATEST(1, IFNULL(o.MinimumQuantity,0)) * o.NumberOfItemsPerCask `grouping`,
- 'packing',
- o.embalageCode,
- o.diId
- FROM edi.offer o
- JOIN vn.item i ON i.supplyResponseFk = o.srId
- JOIN edi.warehouseFloramondo wf
- JOIN vn.packaging p ON p.id
- LIKE o.embalageCode
- LEFT JOIN vn.buy b ON b.itemFk = i.id
- AND b.entryFk = wf.entryFk
- WHERE b.id IS NULL; -- Quitar esta linea y mirar de crear los packages a tiempo REAL
-
- INSERT INTO vn.itemCost(
- itemFk,
- warehouseFk,
- cm3,
- cm3delivery)
- SELECT b.itemFk,
- wf.warehouseFk,
- @cm3 := vn.buy_getUnitVolume(b.id),
- IFNULL((vc.standardFlowerBox * 1000) / i.packingOut, @cm3)
- FROM warehouseFloramondo wf
- JOIN vn.volumeConfig vc
- JOIN vn.buy b ON b.entryFk = wf.entryFk
- JOIN vn.item i ON i.id = b.itemFk
- LEFT JOIN vn.itemCost ic ON ic.itemFk = b.itemFk
- AND ic.warehouseFk = wf.warehouseFk
- WHERE (ic.cm3 IS NULL OR ic.cm3 = 0)
- ON DUPLICATE KEY UPDATE cm3 = @cm3, cm3delivery = IFNULL((vc.standardFlowerBox * 1000) / i.packingOut, @cm3);
-
- CREATE OR REPLACE TEMPORARY TABLE tmp.buyRecalc
- SELECT b.id
- FROM vn.buy b
- JOIN warehouseFloramondo wf ON wf.entryFk = b.entryFk
- WHERE b.created >= vLastInserted;
-
- CALL vn.buy_recalcPrices();
-
- UPDATE edi.offerList o
- JOIN (SELECT v.name, COUNT(DISTINCT b.itemFk) total
- FROM vn.buy b
- JOIN vn.item i ON i.id = b.itemFk
- JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
- JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
- JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
- JOIN vn.warehouse w ON w.id = wf.warehouseFk
- WHERE w.name = 'VNH'
- AND b.quantity > 0
- GROUP BY sr.vmpID) sub ON o.supplier = sub.name
- SET o.vnh = sub.total;
-
- UPDATE edi.offerList o
- JOIN (SELECT v.name, COUNT(DISTINCT b.itemFk) total
- FROM vn.buy b
- JOIN vn.item i ON i.id = b.itemFk
- JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
- JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
- JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
- JOIN vn.warehouse w ON w.id = wf.warehouseFk
- WHERE w.name = 'ALGEMESI'
- AND b.quantity > 0
- GROUP BY sr.vmpID) sub ON o.supplier = sub.name
- SET o.algemesi = sub.total;
- END IF;
-
- DROP TEMPORARY TABLE
- edi.offer,
- itemToInsert;
-
- SET @isTriggerDisabled = FALSE;
-
- COMMIT;
-
- -- Esto habria que pasarlo a procesos programados o trabajar con tags y dejar las familias
- UPDATE vn.item i
- SET typeFk = 121
- WHERE i.longName LIKE 'Rosa Garden %'
- AND typeFk = 17;
-
- UPDATE vn.item i
- SET typeFk = 156
- WHERE i.longName LIKE 'Rosa ec %'
- AND typeFk = 17;
-
- -- Refresca las fotos de los items existentes que mostramos (prioridad baja)
- INSERT IGNORE INTO vn.itemImageQueue(itemFk, url, priority)
- SELECT i.id, sr.PictureReference, 100
- FROM edi.supplyResponse sr
- JOIN vn.item i ON i.supplyResponseFk = sr.ID
- JOIN edi.supplyOffer so ON so.srId = sr.ID
- JOIN hedera.image i2 ON i2.name = i.image
- AND i2.collectionFk = 'catalog'
- WHERE i2.updated <= (UNIX_TIMESTAMP(util.VN_NOW()) - vDayRange)
- AND sr.NumberOfUnits;
-
- INSERT INTO edi.`log`
- SET tableName = 'floramondo_offerRefresh',
- fieldName = 'Tiempo de proceso',
- fieldValue = TIMEDIFF(util.VN_NOW(), vStartingTime);
-
- DO RELEASE_LOCK('edi.floramondo_offerRefresh');
-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 `item_freeAdd` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -19047,6 +18310,7 @@ CREATE TABLE `ACLLog` (
KEY `logRateuserFk` (`userFk`),
KEY `ACLLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `ACLLog_originFk` (`originFk`,`creationDate`),
+ KEY `ACLLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `aclUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -19455,6 +18719,7 @@ CREATE TABLE `bufferLog` (
KEY `logBufferUserFk` (`userFk`),
KEY `bufferLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `bufferLog_originFk` (`originFk`,`creationDate`),
+ KEY `bufferLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `bufferUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -24087,8 +23352,8 @@ DROP TABLE IF EXISTS `config`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
`id` int(10) unsigned NOT NULL,
- `dbVersion` char(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'The current database version',
- `hasTriggersDisabled` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Defines if triggers are disabled',
+ `dbVersion__` char(11) DEFAULT NULL COMMENT '@deprecated 2024-09-02 refs #7819',
+ `hasTriggersDisabled__` tinyint(1) NOT NULL DEFAULT 0 COMMENT '@deprecated 2024-09-02 refs #7819',
`environment` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'The current Database environment',
`lastDump` datetime DEFAULT NULL COMMENT 'Timestamp of the last data dump',
`mockUtcTime` datetime DEFAULT NULL,
@@ -24151,6 +23416,24 @@ SET character_set_client = utf8;
1 AS `error` */;
SET character_set_client = @saved_cs_client;
+--
+-- Table structure for table `logCleanMultiConfig`
+--
+
+DROP TABLE IF EXISTS `logCleanMultiConfig`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `logCleanMultiConfig` (
+ `schemaName` varchar(64) NOT NULL,
+ `tableName` varchar(64) NOT NULL,
+ `retentionDays` int(11) DEFAULT NULL,
+ `order` int(11) DEFAULT NULL,
+ `started` datetime DEFAULT NULL,
+ `finished` datetime DEFAULT NULL,
+ PRIMARY KEY (`schemaName`,`tableName`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `notification`
--
@@ -24297,7 +23580,25 @@ CREATE TABLE `versionLog` (
-- Dumping events for database 'util'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
-/*!50106 DROP EVENT IF EXISTS `slowLog_prune` */;
+/*!50106 DROP EVENT IF EXISTS `log_clean` */;
+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 = 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' */ ;;
+/*!50003 SET @saved_time_zone = @@time_zone */ ;;
+/*!50003 SET time_zone = 'SYSTEM' */ ;;
+/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `log_clean` ON SCHEDULE EVERY 1 DAY STARTS '2024-07-09 00:30:00' ON COMPLETION PRESERVE ENABLE DO CALL util.log_clean */ ;;
+/*!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 */ ;;
+/*!50106 DROP EVENT IF EXISTS `slowLog_prune` */;;
DELIMITER ;;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
@@ -25754,6 +25055,73 @@ DELIMITER ;
/*!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 `log_clean` */;
+/*!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 `log_clean`()
+BEGIN
+/**
+ * Hace limpieza de los datos de las tablas log,
+ * dejando únicamente los días de retención configurados.
+ */
+ DECLARE vSchemaName VARCHAR(65);
+ DECLARE vSchemaNameQuoted VARCHAR(65);
+ DECLARE vTableName VARCHAR(65);
+ DECLARE vTableNameQuoted VARCHAR(65);
+ DECLARE vRetentionDays INT;
+ DECLARE vStarted DATETIME;
+ DECLARE vDated DATE;
+ DECLARE vDone BOOL;
+
+ DECLARE vQueue CURSOR FOR
+ SELECT schemaName, tableName, retentionDays
+ FROM logCleanMultiConfig
+ ORDER BY `order`;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vQueue;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vQueue INTO vSchemaName, vTableName, vRetentionDays;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ IF vRetentionDays THEN
+ SET vStarted = VN_NOW();
+ SET vSchemaNameQuoted = quoteIdentifier(vSchemaName);
+ SET vTableNameQuoted = quoteIdentifier(vTableName);
+ SET vDated = VN_CURDATE() - INTERVAL vRetentionDays DAY;
+
+ EXECUTE IMMEDIATE CONCAT(
+ 'DELETE FROM ', vSchemaNameQuoted,
+ '.', vTableNameQuoted,
+ " WHERE creationDate < '", vDated, "'"
+ );
+
+ UPDATE logCleanMultiConfig
+ SET `started` = vStarted,
+ `finished` = VN_NOW()
+ WHERE schemaName = vSchemaName
+ AND tableName = vTableName;
+ END IF;
+ END LOOP;
+ CLOSE vQueue;
+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 `log_cleanInstances` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -26555,7 +25923,7 @@ DROP TABLE IF EXISTS `addressWaste`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `addressWaste` (
`addressFk` int(11) NOT NULL,
- `type` enum('internal','external') NOT NULL,
+ `type` enum('external','fault','container','break','other') NOT NULL,
PRIMARY KEY (`addressFk`),
CONSTRAINT `addressShortage_FK` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
@@ -26572,17 +25940,14 @@ CREATE TABLE `agency` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`warehouseFk` smallint(5) unsigned DEFAULT NULL COMMENT 'A nulo si se puede enrutar desde todos los almacenes',
- `warehouseAliasFk__` smallint(5) unsigned DEFAULT NULL COMMENT '@deprecated 2024-01-23 refs #5167',
`isOwn` tinyint(1) NOT NULL DEFAULT 0,
`workCenterFk` int(11) DEFAULT NULL,
`isAnyVolumeAllowed` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Permite vender productos que tengan vn.itemType.IsUnconventionalSize = TRUE',
`editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `warehouse_id` (`warehouseFk`),
- KEY `agencias_alias_idx` (`warehouseAliasFk__`),
KEY `agency_ibfk_3_idx` (`workCenterFk`),
KEY `agency_user_FK` (`editorFk`),
- CONSTRAINT `agency_FK` FOREIGN KEY (`warehouseAliasFk__`) REFERENCES `warehouseAlias__` (`id`) ON UPDATE CASCADE,
CONSTRAINT `agency_ibfk_1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
CONSTRAINT `agency_ibfk_3` FOREIGN KEY (`workCenterFk`) REFERENCES `workCenter` (`id`) ON UPDATE CASCADE,
CONSTRAINT `agency_user_FK` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`)
@@ -26646,6 +26011,7 @@ CREATE TABLE `agencyLog` (
KEY `logAgencyUserFk` (`userFk`),
KEY `agencyLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `agencyLog_originFk` (`originFk`,`creationDate`),
+ KEY `agencyLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
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;
@@ -27029,7 +26395,6 @@ CREATE TABLE `awbComponent` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`awbFk` smallint(11) unsigned DEFAULT NULL,
`supplierFk` int(11) NOT NULL,
- `dated__` date NOT NULL,
`typeFk` mediumint(3) unsigned DEFAULT NULL,
`awbRoleFk` tinyint(1) unsigned NOT NULL DEFAULT 1,
`awbUnitFk` varchar(10) DEFAULT NULL,
@@ -27388,30 +26753,6 @@ CREATE TABLE `bookingPlanner` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `botanicExport__`
---
-
-DROP TABLE IF EXISTS `botanicExport__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `botanicExport__` (
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
- `ediGenusFk` mediumint(8) unsigned NOT NULL,
- `ediSpecieFk` mediumint(8) unsigned DEFAULT NULL,
- `countryFk__` mediumint(8) unsigned DEFAULT NULL,
- `restriction` enum('Sin restriccion','Importacion Prohibida','pasaporte fitosanitario','pasaporte individual','declaracion origen') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `description` varchar(45) DEFAULT NULL,
- `isProtectedZone` tinyint(1) NOT NULL DEFAULT 0,
- `code` enum('importProhibited','phytosanitaryPassport','individualPassport') DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `Id_Paises` (`countryFk__`),
- KEY `botanicExport_ibfk_2_idx` (`ediGenusFk`),
- KEY `botanicExport_ibfk_3_idx` (`ediSpecieFk`),
- CONSTRAINT `botanicExport___ibfk_1` FOREIGN KEY (`countryFk__`) REFERENCES `country` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #4419 Deprecated 2023-07-20';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `budget`
--
@@ -27661,7 +27002,6 @@ CREATE TABLE `buy` (
`packing` int(11) NOT NULL DEFAULT 1 CHECK (`packing` > 0),
`grouping` smallint(5) unsigned NOT NULL DEFAULT 1,
`groupingMode` enum('grouping','packing') DEFAULT NULL,
- `containerFk__` smallint(5) unsigned DEFAULT NULL,
`comissionValue` decimal(10,3) NOT NULL DEFAULT 0.000,
`packageValue` decimal(10,3) NOT NULL DEFAULT 0.000,
`location` varchar(5) DEFAULT NULL,
@@ -27686,7 +27026,6 @@ CREATE TABLE `buy` (
KEY `CompresId_Trabajador` (`workerFk`),
KEY `Id_Cubo` (`packagingFk`),
KEY `Id_Entrada` (`entryFk`),
- KEY `container_id` (`containerFk__`),
KEY `buy_edi_id` (`ektFk`),
KEY `itemFk_entryFk` (`itemFk`,`entryFk`),
KEY `buy_fk_4_idx` (`deliveryFk`),
@@ -27925,7 +27264,6 @@ CREATE TABLE `chat` (
`dated` datetime DEFAULT NULL,
`checkUserStatus` tinyint(1) DEFAULT NULL,
`message` text DEFAULT NULL,
- `status__` tinyint(1) DEFAULT NULL,
`attempts` int(1) DEFAULT NULL,
`error` text DEFAULT NULL,
`status` enum('pending','sent','error','sending') NOT NULL DEFAULT 'pending',
@@ -27973,7 +27311,6 @@ CREATE TABLE `claim` (
`ticketFk` int(11) DEFAULT NULL,
`pickup` enum('agency','delivery') DEFAULT NULL,
`packages` smallint(10) unsigned DEFAULT 0 COMMENT 'packages received by the client',
- `rma__` varchar(100) DEFAULT NULL,
`responsabilityRate` decimal(3,2) GENERATED ALWAYS AS ((5 - `responsibility`) / 4) VIRTUAL,
`editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
@@ -28156,6 +27493,7 @@ CREATE TABLE `claimLog` (
KEY `userFk` (`userFk`),
KEY `claimLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `claimLog_claimLog` (`originFk`,`creationDate`),
+ KEY `claimLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `claimUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -28264,22 +27602,6 @@ CREATE TABLE `claimResult` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Consecuencias de los motivos';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `claimRma__`
---
-
-DROP TABLE IF EXISTS `claimRma__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `claimRma__` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `code` varchar(100) NOT NULL,
- `created` timestamp NOT NULL DEFAULT current_timestamp(),
- `workerFk` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='kkeada el 2024-02-26 por Pablo';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `claimState`
--
@@ -28346,7 +27668,6 @@ CREATE TABLE `client` (
`riskCalculated` date NOT NULL,
`hasCoreVnh` tinyint(1) DEFAULT 0,
`isRelevant` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Define los clientes cuyas ventas hay que tener en cuenta en los calculos estadisticos.',
- `clientTypeFk__` int(11) NOT NULL DEFAULT 1 COMMENT '@deprecated 2024-02-20 refs #6784',
`creditInsurance` int(11) DEFAULT NULL,
`eypbc` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Email\\nYesterday\\nPurchases\\nBy\\nConsigna',
`hasToInvoiceByAddress` tinyint(1) DEFAULT 0,
@@ -28362,7 +27683,6 @@ CREATE TABLE `client` (
`transferorFk` int(11) DEFAULT NULL COMMENT 'Cliente que le ha transmitido la titularidad de la empresa',
`lastSalesPersonFk` int(10) unsigned DEFAULT NULL COMMENT 'ultimo comercial que tuvo, para el calculo del peso en los rankings de equipo',
`businessTypeFk` varchar(20) NOT NULL DEFAULT 'florist',
- `hasIncoterms__` tinyint(1) NOT NULL DEFAULT 0 COMMENT '@deprecated 2024-06-12 refs #7545 Received incoterms authorization from client',
`rating` int(10) unsigned DEFAULT NULL COMMENT 'información proporcionada por Informa',
`recommendedCredit` int(10) unsigned DEFAULT NULL COMMENT 'información proporcionada por Informa',
`editorFk` int(10) unsigned DEFAULT NULL,
@@ -28378,7 +27698,6 @@ CREATE TABLE `client` (
KEY `default_address` (`defaultAddressFk`),
KEY `Telefono` (`phone`),
KEY `movil` (`mobile`),
- KEY `tipos_de_cliente_idx` (`clientTypeFk__`),
KEY `fk_Clientes_entity_idx` (`bankEntityFk`),
KEY `typeFk` (`typeFk`),
KEY `client_taxTypeSageFk_idx` (`taxTypeSageFk`),
@@ -28600,6 +27919,7 @@ CREATE TABLE `clientLog` (
KEY `userFk` (`userFk`),
KEY `clientLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `clientLog_clientLog` (`originFk`,`creationDate`),
+ KEY `clientLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `clientLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -28798,7 +28118,6 @@ DROP TABLE IF EXISTS `clientType`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientType` (
- `id__` int(11) NOT NULL COMMENT '@deprecated 2024-02-20 refs #6784',
`code` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`type` varchar(45) NOT NULL,
`isCreatedAsServed` tinyint(1) DEFAULT 0,
@@ -28852,7 +28171,6 @@ DROP TABLE IF EXISTS `cmr`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cmr` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `ticketFk__` int(11) DEFAULT NULL COMMENT '@deprecated 2023-10-20 refs #6092',
`truckPlate` varchar(30) DEFAULT NULL,
`observations` varchar(255) DEFAULT NULL,
`senderInstruccions` varchar(255) DEFAULT NULL,
@@ -28869,14 +28187,12 @@ CREATE TABLE `cmr` (
`landed` datetime DEFAULT NULL COMMENT 'Hora de llegada a destino',
`ead` datetime DEFAULT NULL COMMENT 'Estimated Arriving Date',
PRIMARY KEY (`id`),
- KEY `cmr_fk1_idx` (`ticketFk__`),
KEY `cmr_fk2_idx` (`companyFk`),
KEY `cmr_fk3_idx` (`addressToFk`),
KEY `cm_fk4_idx` (`supplierFk`),
KEY `cmr_FK` (`addressFromFk`),
CONSTRAINT `cmrCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `cmr_FK` FOREIGN KEY (`addressFromFk`) REFERENCES `address` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `cmr_fk1` FOREIGN KEY (`ticketFk__`) REFERENCES `ticket` (`id`),
CONSTRAINT `cmr_fk3` FOREIGN KEY (`addressToFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `cmr_supplierFk` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
@@ -29017,7 +28333,7 @@ DROP TABLE IF EXISTS `collectionWagon`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `collectionWagon` (
`collectionFk` int(11) NOT NULL,
- `wagonFk` varchar(6) NOT NULL,
+ `wagonFk` int(11) unsigned NOT NULL,
`position` int(11) unsigned NOT NULL,
PRIMARY KEY (`collectionFk`,`position`),
UNIQUE KEY `collectionWagon_unique` (`collectionFk`,`wagonFk`),
@@ -29036,7 +28352,7 @@ DROP TABLE IF EXISTS `collectionWagonTicket`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `collectionWagonTicket` (
`ticketFk` int(11) NOT NULL,
- `wagonFk` varchar(6) NOT NULL,
+ `wagonFk` int(11) unsigned NOT NULL,
`trayFk` int(11) unsigned NOT NULL,
`side` set('L','R') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`rgb` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'Color de la balda',
@@ -29046,7 +28362,7 @@ CREATE TABLE `collectionWagonTicket` (
KEY `collectionWagonTicket_FK_1` (`wagonFk`),
CONSTRAINT `collectionWagonTicket_FK` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON UPDATE CASCADE,
CONSTRAINT `collectionWagonTicket_FK_1` FOREIGN KEY (`wagonFk`) REFERENCES `wagon` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `collectionWagonTicket_tray` FOREIGN KEY (`trayFk`) REFERENCES `wagonTypeTray` (`id`) ON UPDATE CASCADE
+ CONSTRAINT `collectionWagonTicket_tray` FOREIGN KEY (`trayFk`) REFERENCES `wagonTypeTray` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -29102,7 +28418,6 @@ CREATE TABLE `company` (
`stamp` longblob DEFAULT NULL,
`created` timestamp NOT NULL ON UPDATE current_timestamp(),
`clientFk` int(11) DEFAULT NULL,
- `sage200Company__` int(2) DEFAULT NULL COMMENT '@deprecated 06/03/2024',
`supplierAccountFk` mediumint(8) unsigned DEFAULT NULL COMMENT 'Cuenta por defecto para ingresos desde este pais',
`isDefaulter` tinyint(4) NOT NULL DEFAULT 0,
`companyGroupFk` int(11) NOT NULL DEFAULT 1 COMMENT 'usado para calcular los greuges ',
@@ -29534,22 +28849,6 @@ CREATE TABLE `conveyorType` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `coolerPathDetail__`
---
-
-DROP TABLE IF EXISTS `coolerPathDetail__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `coolerPathDetail__` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `coolerPathFk` int(11) NOT NULL DEFAULT 1,
- `hallway` varchar(3) NOT NULL,
- PRIMARY KEY (`coolerPathFk`,`hallway`),
- UNIQUE KEY `cooler_path_detail_id_UNIQUE` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `corridor`
--
@@ -29579,7 +28878,6 @@ CREATE TABLE `country` (
`code` varchar(2) NOT NULL,
`viesCode` varchar(2) DEFAULT NULL,
`currencyFk` tinyint(3) unsigned NOT NULL DEFAULT 1,
- `politicalCountryFk__` mediumint(8) unsigned DEFAULT NULL COMMENT 'Pais Real(apaño por culpa del España Exento)',
`geoFk` int(11) DEFAULT NULL,
`hasDailyInvoice` tinyint(4) NOT NULL DEFAULT 0,
`isUeeMember` tinyint(4) NOT NULL DEFAULT 0,
@@ -29589,13 +28887,11 @@ CREATE TABLE `country` (
`isSocialNameUnique` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `country_unique` (`code`),
- KEY `Id_Paisreal` (`politicalCountryFk__`),
KEY `currency_id_fk_idx` (`currencyFk`),
KEY `country_Ix4` (`name`),
KEY `continent_id_fk_idx` (`continentFk`),
KEY `country_FK_1` (`geoFk`),
CONSTRAINT `continent_id_fk` FOREIGN KEY (`continentFk`) REFERENCES `continent` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
- CONSTRAINT `country_FK` FOREIGN KEY (`politicalCountryFk__`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
CONSTRAINT `country_FK_1` FOREIGN KEY (`geoFk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE,
CONSTRAINT `currency_id_fk` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
@@ -29699,15 +28995,14 @@ DROP TABLE IF EXISTS `creditInsurance`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `creditInsurance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `creditClassification` int(11) DEFAULT NULL,
+ `creditClassification__` int(11) DEFAULT NULL COMMENT '@deprecated 2024-09-11',
`credit` int(11) DEFAULT NULL,
`creationDate` timestamp NOT NULL DEFAULT current_timestamp(),
`grade` tinyint(1) DEFAULT NULL,
`creditClassificationFk` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
- KEY `CreditInsurance_Fk1_idx` (`creditClassification`),
+ KEY `CreditInsurance_Fk1_idx` (`creditClassification__`),
KEY `creditInsurance_creditClassificationFk` (`creditClassificationFk`),
- CONSTRAINT `CreditInsurance_Fk1` FOREIGN KEY (`creditClassification`) REFERENCES `creditClassification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `creditInsurance_creditClassificationFk` FOREIGN KEY (`creditClassificationFk`) REFERENCES `creditClassification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Detalla los clientes que tienen seguro de credito';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -29841,7 +29136,6 @@ CREATE TABLE `deliveryNote` (
`supervisorFk` int(10) unsigned NOT NULL,
`departmentFk` int(11) NOT NULL,
`invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
- `farmingFk__` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_albaran_Proveedores_idx` (`supplierFk`),
KEY `fk_albaran_empresa1_idx` (`companyFk`),
@@ -29851,9 +29145,7 @@ CREATE TABLE `deliveryNote` (
KEY `fk_albaran_Trabajadores2_idx` (`supervisorFk`),
KEY `fk_albaran_department1_idx` (`departmentFk`),
KEY `fk_albaran_recibida_idx` (`invoiceInFk`),
- KEY `albaran_FK` (`farmingFk__`),
CONSTRAINT `albaranCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `albaran_FK` FOREIGN KEY (`farmingFk__`) REFERENCES `farming` (`id`),
CONSTRAINT `albaran_supplierFk` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
CONSTRAINT `fk_albaran_Trabajadores1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
CONSTRAINT `fk_albaran_Trabajadores2` FOREIGN KEY (`supervisorFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
@@ -30130,6 +29422,7 @@ CREATE TABLE `deviceProductionLog` (
KEY `userFk` (`userFk`),
KEY `deviceProductionLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `deviceProductionLog_deviceProductionLog` (`originFk`,`creationDate`),
+ KEY `deviceProductionLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `deviceProductionUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -30268,7 +29561,6 @@ CREATE TABLE `dmsType` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(45) NOT NULL,
`name` varchar(45) NOT NULL,
- `path__` varchar(255) NOT NULL COMMENT '@deprecated 2024-01-08 refs #6410',
`writeRoleFk` int(10) unsigned DEFAULT NULL,
`readRoleFk` int(10) unsigned DEFAULT NULL,
`monthToDelete` int(10) unsigned DEFAULT NULL COMMENT 'Meses en el pasado para ir borrando registros, dejar a null para no borrarlos nunca',
@@ -30356,7 +29648,6 @@ DROP TABLE IF EXISTS `dua`;
CREATE TABLE `dua` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(45) DEFAULT NULL,
- `awbFk__` smallint(11) unsigned DEFAULT NULL COMMENT '@Deprecated refs #5871 01/10/2023',
`issued` date DEFAULT NULL,
`operated` date DEFAULT NULL,
`booked` date DEFAULT NULL,
@@ -30367,7 +29658,6 @@ CREATE TABLE `dua` (
`ASIEN` double DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code_UNIQUE` (`code`),
- KEY `fk_awb_dua_awb_idx` (`awbFk__`),
KEY `fk_dua_gestdoc1_idx` (`gestdocFk`),
KEY `dua_fk4_idx` (`companyFk`),
CONSTRAINT `duaCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
@@ -30619,7 +29909,6 @@ CREATE TABLE `entry` (
`companyFk` int(10) unsigned NOT NULL DEFAULT 442,
`gestDocFk` int(11) DEFAULT NULL,
`invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
- `isBlocked__` tinyint(4) NOT NULL DEFAULT 0 COMMENT '@deprecated 27/03/2024',
`loadPriority` int(11) DEFAULT NULL,
`kop` int(11) DEFAULT NULL,
`sub` mediumint(8) unsigned DEFAULT NULL,
@@ -30719,6 +30008,7 @@ CREATE TABLE `entryLog` (
KEY `entryLog_ibfk_2` (`userFk`),
KEY `entryLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `entryLog_originFk` (`originFk`,`creationDate`),
+ KEY `entryLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `entryLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -31014,7 +30304,6 @@ CREATE TABLE `expedition` (
`ticketFk` int(10) NOT NULL,
`freightItemFk` int(11) DEFAULT 1 COMMENT 'itemFk del artículo que nos va a facturar el proveedor de transporte.',
`created` timestamp NULL DEFAULT current_timestamp(),
- `itemFk__` int(11) DEFAULT NULL COMMENT 'Si es necesario el itemFk del cubo, se obtiene mediante packagingFk, join packing.itemFk',
`counter` smallint(5) unsigned NOT NULL,
`workerFk` int(10) unsigned DEFAULT NULL,
`externalId` varchar(20) DEFAULT NULL,
@@ -31588,29 +30877,6 @@ CREATE TABLE `floramondoConfig` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `forecastedBalance__`
---
-
-DROP TABLE IF EXISTS `forecastedBalance__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `forecastedBalance__` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `description` varchar(45) DEFAULT NULL,
- `amount` double NOT NULL DEFAULT 0,
- `dated` date NOT NULL,
- `accountingFk` int(11) DEFAULT NULL,
- `companyFk` int(10) unsigned NOT NULL DEFAULT 442,
- PRIMARY KEY (`id`),
- KEY `Fecha_indice` (`dated`),
- KEY `banco_prevision_idx` (`accountingFk`),
- KEY `empresa_prevision_idx` (`companyFk`),
- CONSTRAINT `Saldos_PrevisionCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `banco_prevision` FOREIGN KEY (`accountingFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='@deprecated 2024-05-21';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `franceExpressConfig`
--
@@ -32317,6 +31583,7 @@ CREATE TABLE `invoiceInLog` (
KEY `userFk` (`userFk`),
KEY `invoiceInLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `invoiceInLog_originFk` (`originFk`,`creationDate`),
+ KEY `invoiceInLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `invoiceInLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -32649,14 +31916,12 @@ CREATE TABLE `item` (
`itemPackingTypeFk` varchar(1) DEFAULT NULL,
`packingOut` decimal(10,2) DEFAULT NULL COMMENT 'cantidad que cabe en una caja de verdnatura',
`genericFk` int(11) DEFAULT NULL COMMENT 'Item genérico',
- `packingShelve__` int(11) DEFAULT NULL COMMENT '@deprecated 2024-31-01',
`isLaid` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indica si el producto se puede tumbar a efectos del transporte desde Holanda',
`lastUsed` datetime DEFAULT current_timestamp(),
`weightByPiece` int(10) unsigned DEFAULT NULL COMMENT 'peso por defecto para un articulo por tallo/unidad',
`editorFk` int(10) unsigned DEFAULT NULL,
`recycledPlastic` decimal(10,2) DEFAULT NULL,
`nonRecycledPlastic` decimal(10,2) DEFAULT NULL,
- `minQuantity__` int(10) unsigned DEFAULT NULL COMMENT '@deprecated 2024-07-11 refs #7704 Cantidad mínima para una línea de venta',
`isBoxPickingMode` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'FALSE: using item.packingOut TRUE: boxPicking using itemShelving.packing',
`photoMotivation` varchar(255) DEFAULT NULL,
`tag11` varchar(20) DEFAULT NULL,
@@ -33015,6 +32280,7 @@ CREATE TABLE `itemLog` (
KEY `itemLogUserFk_idx` (`userFk`),
KEY `itemLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `itemLog_originFk` (`originFk`,`creationDate`),
+ KEY `itemLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `itemLogUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -33235,7 +32501,6 @@ SET character_set_client = utf8;
1 AS `concept`,
1 AS `size`,
1 AS `Estado`,
- 1 AS `sectorProdPriority`,
1 AS `available`,
1 AS `sectorFk`,
1 AS `matricula`,
@@ -33599,20 +32864,10 @@ CREATE TABLE `itemType` (
`workerFk` int(10) unsigned NOT NULL,
`isInventory` tinyint(4) NOT NULL DEFAULT 1 COMMENT 'Se utiliza tanto en el cálculo del inventario, como en el del informe del inventario valorado',
`created` timestamp NULL DEFAULT current_timestamp(),
- `transaction__` tinyint(4) NOT NULL DEFAULT 0,
`making` int(10) unsigned DEFAULT NULL COMMENT 'Son productos de confección propia',
- `location__` varchar(10) DEFAULT NULL,
`life` smallint(5) unsigned DEFAULT NULL,
- `maneuver__` double NOT NULL DEFAULT 0.21 COMMENT '@deprecated 2024-07-01 refs #7418',
- `target__` double NOT NULL DEFAULT 0.15 COMMENT '@deprecated 2024-07-01 refs #7418',
- `topMargin__` double NOT NULL DEFAULT 0.3 COMMENT '@deprecated 2024-07-01 refs #7418',
- `profit__` double NOT NULL DEFAULT 0.02 COMMENT '@deprecated 2024-07-01 refs #7418',
- `density__` double NOT NULL DEFAULT 167 COMMENT '@deprecated 2024-07-01 refs #7418 Almacena el valor por defecto de la densidad en kg/m3 para el calculo de los portes aereos, en articulos se guarda la correcta',
`promo` double NOT NULL DEFAULT 0,
`isPackaging` tinyint(1) NOT NULL DEFAULT 0,
- `hasComponents__` tinyint(1) NOT NULL DEFAULT 1,
- `warehouseFk__` smallint(6) unsigned NOT NULL DEFAULT 60,
- `compression__` decimal(5,2) DEFAULT 1.00,
`itemPackingTypeFk` varchar(1) DEFAULT NULL,
`temperatureFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`isUnconventionalSize` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'familia con productos cuyas medidas no son aptas para la cinta transportadora o paletizar',
@@ -33626,13 +32881,11 @@ CREATE TABLE `itemType` (
KEY `Trabajador` (`workerFk`),
KEY `reino_id` (`categoryFk`),
KEY `Tipos_fk3_idx` (`making`),
- KEY `warehouseFk5_idx` (`warehouseFk__`),
KEY `temperatureFk` (`temperatureFk`),
CONSTRAINT `Tipos_fk3` FOREIGN KEY (`making`) REFERENCES `confectionType` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `Trabajador` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
CONSTRAINT `itemType_ibfk_1` FOREIGN KEY (`categoryFk`) REFERENCES `itemCategory` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `temperatureFk` FOREIGN KEY (`temperatureFk`) REFERENCES `temperature` (`code`),
- CONSTRAINT `warehouseFk5` FOREIGN KEY (`warehouseFk__`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE
+ CONSTRAINT `temperatureFk` FOREIGN KEY (`temperatureFk`) REFERENCES `temperature` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Protege la tabla tipos de updates para los 4 parámetros de los compradores, en funcion del valor del campo CodigoRojo de tblContadores.';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -33839,9 +33092,7 @@ DROP TABLE IF EXISTS `ledgerConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ledgerConfig` (
- `lastBookEntry__` int(11) NOT NULL COMMENT '@deprecated 2024-05-28 refs #7400 Modificar contador asientos contables',
- `maxTolerance` decimal(10,2) NOT NULL,
- PRIMARY KEY (`lastBookEntry__`)
+ `maxTolerance` decimal(10,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -34791,6 +34042,7 @@ CREATE TABLE `packaging` (
`isTrolley` tinyint(1) NOT NULL DEFAULT 0,
`isPallet` tinyint(1) NOT NULL DEFAULT 0,
`isPlantTray` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'The container is a plant tray. Used to restrict the picking of full plant trays, to make previous picking.',
+ `isActive` tinyint(1) DEFAULT 1,
PRIMARY KEY (`id`),
KEY `packaging_fk1` (`itemFk`),
KEY `packaging_fk2_idx` (`freightItemFk`),
@@ -34984,6 +34236,7 @@ CREATE TABLE `packingSiteDeviceLog` (
KEY `userFk` (`userFk`),
KEY `packingSiteDeviceLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `packingSiteDeviceLog_packingSiteDeviceLog` (`originFk`,`creationDate`),
+ KEY `packingSiteDeviceLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `packingSiteDeviceLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -35065,7 +34318,7 @@ CREATE TABLE `parking` (
PRIMARY KEY (`id`),
UNIQUE KEY `code_UNIQUE` (`code`),
KEY `parking_fk1_idx` (`sectorFk`),
- CONSTRAINT `parking_fk1` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `parking_fk1` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON UPDATE CASCADE,
CONSTRAINT `chkParkingCodeFormat` CHECK (char_length(`code`) > 4 and `code` regexp '^[^ ]+-[^ ]+$')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Tabla con los parkings del altillo';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -35094,6 +34347,7 @@ CREATE TABLE `parkingLog` (
KEY `logParkinguserFk` (`userFk`),
KEY `parkingLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `parkingLog_originFk` (`originFk`,`creationDate`),
+ KEY `parkingLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `parkingOriginFk` FOREIGN KEY (`originFk`) REFERENCES `parking` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `parkingUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
@@ -35267,15 +34521,7 @@ DROP TABLE IF EXISTS `payrollWorkCenter`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payrollWorkCenter` (
`workCenterFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.',
- `Centro__` varchar(255) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `nss_cotizacion__` varchar(15) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `domicilio__` varchar(255) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `poblacion__` varchar(45) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `cp__` varchar(5) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `empresa_id__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `companyFkA3` int(11) DEFAULT NULL COMMENT 'Columna que hace referencia a A3.',
- PRIMARY KEY (`workCenterFkA3`,`empresa_id__`),
- KEY `payroll_centros_ix1` (`empresa_id__`)
+ `companyFkA3` int(11) DEFAULT NULL COMMENT 'Columna que hace referencia a A3.'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -35288,17 +34534,10 @@ DROP TABLE IF EXISTS `payrollWorker`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payrollWorker` (
`workerFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.',
- `nss__` varchar(23) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `codpuesto__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
`companyFkA3` int(10) NOT NULL COMMENT 'Columna que hace referencia a A3.',
- `codcontrato__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `FAntiguedad__` date NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
`grupotarifa` int(10) NOT NULL,
- `codcategoria__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024',
- `ContratoTemporal__` tinyint(1) NOT NULL DEFAULT 0 COMMENT '@Deprecated refs #6738 15/03/2024',
`workerFk` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`workerFkA3`,`companyFkA3`),
- KEY `sajvgfh_idx` (`codpuesto__`),
KEY `payroll_employee_workerFk_idx` (`workerFk`),
CONSTRAINT `payroll_employee_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
@@ -35655,6 +34894,45 @@ CREATE TABLE `ppePlan` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Plan de amortizacion para la tabla ppe';
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `priceDelta`
+--
+
+DROP TABLE IF EXISTS `priceDelta`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `priceDelta` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `itemTypeFk` smallint(5) unsigned NOT NULL,
+ `minSize` int(10) unsigned DEFAULT NULL COMMENT 'Minimum item.size',
+ `maxSize` int(10) unsigned DEFAULT NULL COMMENT 'Maximum item.size',
+ `inkFk` varchar(3) DEFAULT NULL,
+ `originFk` tinyint(2) unsigned DEFAULT NULL,
+ `producerFk` mediumint(3) unsigned DEFAULT NULL,
+ `fromDated` date DEFAULT NULL,
+ `toDated` date DEFAULT NULL,
+ `absIncreasing` decimal(10,3) DEFAULT NULL COMMENT 'Absolute increasing of final price',
+ `ratIncreasing` int(11) DEFAULT NULL COMMENT 'Increasing ratio for the cost price',
+ `warehouseFk` smallint(6) unsigned NOT NULL,
+ `created` timestamp NOT NULL DEFAULT current_timestamp(),
+ `editorFk` int(10) unsigned DEFAULT NULL,
+ `zoneGeoFk` int(11) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `priceDelta_itemType_FK` (`itemTypeFk`),
+ KEY `priceDelta_ink_FK` (`inkFk`),
+ KEY `priceDelta_producer_FK` (`producerFk`),
+ KEY `priceDelta_warehouse_FK` (`warehouseFk`),
+ KEY `priceDelta_worker_FK` (`editorFk`),
+ KEY `priceDelta_zoneGeo_FK` (`zoneGeoFk`),
+ CONSTRAINT `priceDelta_ink_FK` FOREIGN KEY (`inkFk`) REFERENCES `ink` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_itemType_FK` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_producer_FK` FOREIGN KEY (`producerFk`) REFERENCES `producer` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_warehouse_FK` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_worker_FK` FOREIGN KEY (`editorFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_zoneGeo_FK` FOREIGN KEY (`zoneGeoFk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Defines the increasing o decreasing for ranges of items';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `priceFixed`
--
@@ -35913,6 +35191,7 @@ CREATE TABLE `productionConfigLog` (
KEY `productionConfigLog_userFk` (`userFk`),
KEY `productionConfigLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `productionConfigLog_originFk` (`originFk`,`creationDate`),
+ KEY `productionConfigLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `productionConfigUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -36359,6 +35638,7 @@ CREATE TABLE `rateLog` (
KEY `logRateuserFk` (`userFk`),
KEY `rateLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `rateLog_originFk` (`originFk`,`creationDate`),
+ KEY `rateLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `rateUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -36877,21 +36157,6 @@ CREATE TABLE `routeDefaultAgencyMode` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `routeLoadWorker__`
---
-
-DROP TABLE IF EXISTS `routeLoadWorker__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `routeLoadWorker__` (
- `routeFk` int(10) unsigned NOT NULL,
- `workerFk` int(10) unsigned NOT NULL,
- PRIMARY KEY (`routeFk`,`workerFk`),
- KEY `frmWorker_idx` (`workerFk`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Table deprecated on 26/04/23';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `routeLog`
--
@@ -36916,6 +36181,7 @@ CREATE TABLE `routeLog` (
KEY `userFk` (`userFk`),
KEY `routeLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `routeLog_originFk` (`originFk`,`creationDate`),
+ KEY `routeLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `routeLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -36965,24 +36231,6 @@ CREATE TABLE `routeRecalc` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='Queue of changed volume to recalc route volumen';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `routeUserPercentage__`
---
-
-DROP TABLE IF EXISTS `routeUserPercentage__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `routeUserPercentage__` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `workerFk` int(10) unsigned NOT NULL,
- `percentage` decimal(10,2) NOT NULL,
- `dated` date NOT NULL,
- PRIMARY KEY (`id`),
- KEY `routeUserPercentageFk_idx` (`workerFk`),
- CONSTRAINT `routeUserPercentageFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Temporary table structure for view `routesControl`
--
@@ -37247,6 +36495,7 @@ CREATE TABLE `saleGroupLog` (
KEY `saleGroupUserFk` (`userFk`),
KEY `saleGroupLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `saleGroupLog_originFk` (`originFk`,`creationDate`),
+ KEY `saleGroupLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `saleGroupLogUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -37369,7 +36618,6 @@ CREATE TABLE `saleTracking` (
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`originalQuantity` double DEFAULT NULL,
`workerFk` int(10) unsigned NOT NULL,
- `actionFk__` int(11) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`stateFk` tinyint(3) unsigned NOT NULL,
`isScanned` tinyint(1) DEFAULT NULL COMMENT 'TRUE: se ha escaneado. FALSE: escrito a mano. NULL:demás casos',
@@ -37378,11 +36626,9 @@ CREATE TABLE `saleTracking` (
KEY `Id_Movimiento` (`saleFk`),
KEY `fgnStateFk_idx` (`stateFk`),
KEY `saleTracking_idx5` (`created`),
- KEY `saleTracking_fk2_idx` (`actionFk__`),
KEY `saleTracking_FK_2` (`workerFk`),
CONSTRAINT `fgnStateFk` FOREIGN KEY (`stateFk`) REFERENCES `state` (`id`) ON UPDATE CASCADE,
CONSTRAINT `saleTracking_FK` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `saleTracking_FK_1` FOREIGN KEY (`actionFk__`) REFERENCES `ticketTrackingState__` (`id`) ON UPDATE CASCADE,
CONSTRAINT `saleTracking_FK_2` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -37939,6 +37185,7 @@ CREATE TABLE `shelvingLog` (
KEY `userFk` (`userFk`),
KEY `shelvingLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `shelvingLog_originFk` (`originFk`,`creationDate`),
+ KEY `shelvingLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `shelvingLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -38348,7 +37595,6 @@ CREATE TABLE `state` (
`order` tinyint(3) unsigned DEFAULT NULL,
`alertLevel` int(11) NOT NULL DEFAULT 0,
`code` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `sectorProdPriority` tinyint(3) DEFAULT NULL,
`nextStateFk` tinyint(3) unsigned NOT NULL COMMENT 'Estado al que tiene que cambiar el ticket despues de preparacion previa',
`isPreviousPreparable` tinyint(1) NOT NULL DEFAULT 0,
`isPicked` tinyint(1) NOT NULL DEFAULT 0,
@@ -38385,6 +37631,25 @@ CREATE TABLE `stateI18n` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `stockBought`
+--
+
+DROP TABLE IF EXISTS `stockBought`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `stockBought` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `workerFk` int(10) unsigned NOT NULL,
+ `bought` decimal(10,2) NOT NULL COMMENT 'purchase volume in m3 for the day',
+ `reserve` decimal(10,2) DEFAULT NULL COMMENT 'reserved volume in m3 for the day',
+ `dated` date NOT NULL DEFAULT current_timestamp(),
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `stockBought_unique` (`workerFk`,`dated`),
+ CONSTRAINT `stockBought_worker_FK` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `stockBuyed`
--
@@ -38439,7 +37704,6 @@ CREATE TABLE `supplier` (
`countryFk` mediumint(8) unsigned DEFAULT NULL,
`nif` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
`isOfficial` tinyint(1) NOT NULL DEFAULT 1,
- `isFarmer__` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'refs #7345 @deprecated 2024-05-10 - Utilizar withholdingSageFk',
`retAccount` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
`phone` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
`commission` float NOT NULL DEFAULT 0,
@@ -38506,7 +37770,6 @@ CREATE TABLE `supplierAccount` (
`office` varchar(4) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`DC` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`number` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
- `description__` varchar(45) DEFAULT NULL COMMENT '@deprecated 2023-03-23',
`bankEntityFk` int(10) unsigned DEFAULT NULL,
`accountingFk` int(11) DEFAULT NULL,
`beneficiary` varchar(50) DEFAULT NULL,
@@ -38720,6 +37983,7 @@ CREATE TABLE `supplierLog` (
KEY `supplierLog_ibfk_2` (`userFk`),
KEY `supplierLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `supplierLog_originFk` (`originFk`,`creationDate`),
+ KEY `supplierLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `supplierLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -39050,6 +38314,21 @@ CREATE TABLE `ticket` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `ticketCanAdvanceConfig`
+--
+
+DROP TABLE IF EXISTS `ticketCanAdvanceConfig`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `ticketCanAdvanceConfig` (
+ `id` int(10) unsigned NOT NULL,
+ `destinationOrder` int(11) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ CONSTRAINT `ticketCanAdvanceConfig_check` CHECK (`id` = 1)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `ticketCollection`
--
@@ -39462,7 +38741,6 @@ CREATE TABLE `ticketRequest` (
`ordered` datetime DEFAULT NULL,
`shipped` datetime DEFAULT NULL,
`salesPersonCode` varchar(3) DEFAULT NULL,
- `buyerCode__` varchar(3) NOT NULL COMMENT '@deprecated 2024-04-23 refs #6731 field not used',
`quantity` int(11) DEFAULT NULL,
`price` double DEFAULT NULL,
`itemFk` double DEFAULT NULL,
@@ -39481,7 +38759,6 @@ CREATE TABLE `ticketRequest` (
UNIQUE KEY `Id_Movimiento_UNIQUE` (`saleFk`),
KEY `Id_ARTICLE` (`itemFk`),
KEY `Id_CLIENTE` (`clientFk`),
- KEY `Id_Comprador` (`buyerCode__`),
KEY `Id_Movimiento` (`saleFk`),
KEY `Id_Vendedor` (`salesPersonCode`),
KEY `fgnRequester_idx` (`requesterFk`),
@@ -39541,23 +38818,6 @@ CREATE TABLE `ticketServiceType` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Lista de los posibles servicios a elegir';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `ticketSms__`
---
-
-DROP TABLE IF EXISTS `ticketSms__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `ticketSms__` (
- `smsFk` mediumint(8) unsigned NOT NULL,
- `ticketFk` int(11) DEFAULT NULL,
- PRIMARY KEY (`smsFk`),
- KEY `ticketSms_FK_1` (`ticketFk`),
- CONSTRAINT `ticketSms_FK` FOREIGN KEY (`smsFk`) REFERENCES `sms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `ticketSms_FK_1` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Temporary table structure for view `ticketState`
--
@@ -39631,20 +38891,6 @@ CREATE TABLE `ticketTracking` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `ticketTrackingState__`
---
-
-DROP TABLE IF EXISTS `ticketTrackingState__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `ticketTrackingState__` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `action` varchar(15) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `ticketTrolley`
--
@@ -39994,7 +39240,6 @@ CREATE TABLE `travel` (
`landingHour` time DEFAULT NULL,
`warehouseInFk` smallint(6) unsigned DEFAULT NULL,
`warehouseOutFk` smallint(6) unsigned DEFAULT NULL,
- `agencyFk__` smallint(5) unsigned NOT NULL COMMENT '@deprecated 2024-10-01 refs #6604',
`ref` varchar(20) DEFAULT NULL,
`isDelivered` tinyint(1) NOT NULL DEFAULT 0,
`isReceived` tinyint(1) NOT NULL DEFAULT 0,
@@ -40009,7 +39254,6 @@ CREATE TABLE `travel` (
`awbFk` smallint(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `shipment_1` (`shipped`,`landed`,`warehouseInFk`,`warehouseOutFk`,`agencyModeFk`,`ref`),
- KEY `agency_id` (`agencyFk__`),
KEY `shipment` (`shipped`),
KEY `landing` (`landed`),
KEY `warehouse_landing` (`warehouseInFk`,`landed`),
@@ -40132,6 +39376,7 @@ CREATE TABLE `travelLog` (
KEY `userFk` (`userFk`),
KEY `travelLog_changedModel` (`changedModel`,`changedModelId`,`originFk`),
KEY `travelLog_originFk` (`originFk`,`creationDate`),
+ KEY `travelLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `travelLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -40226,6 +39471,7 @@ CREATE TABLE `userLog` (
PRIMARY KEY (`id`),
KEY `originFk` (`originFk`),
KEY `userFk` (`userFk`),
+ KEY `userLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `userLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -40549,7 +39795,7 @@ DROP TABLE IF EXISTS `wagon`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wagon` (
- `id` varchar(6) NOT NULL COMMENT '26 letras de alfabeto inglés',
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '26 letras de alfabeto inglés',
`volume` int(11) NOT NULL DEFAULT 150 COMMENT 'Volumen en litros',
`plate` varchar(10) NOT NULL COMMENT 'Matrícula',
`typeFk` int(11) unsigned NOT NULL,
@@ -40574,7 +39820,11 @@ CREATE TABLE `wagonConfig` (
`maxWagonHeight` int(11) unsigned DEFAULT 200,
`minHeightBetweenTrays` int(11) unsigned DEFAULT 50,
`maxTrays` int(11) unsigned DEFAULT 6,
+ `defaultHeight` int(10) unsigned DEFAULT 0 COMMENT 'Default height in cm for a base tray',
+ `defaultTrayColorFk` int(11) unsigned DEFAULT NULL COMMENT 'Default color for a base tray',
PRIMARY KEY (`id`),
+ KEY `wagonConfig_wagonTypeColor_FK` (`defaultTrayColorFk`),
+ CONSTRAINT `wagonConfig_wagonTypeColor_FK` FOREIGN KEY (`defaultTrayColorFk`) REFERENCES `wagonTypeColor` (`id`),
CONSTRAINT `wagonConfig_check` CHECK (`id` = 1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -40621,15 +39871,15 @@ DROP TABLE IF EXISTS `wagonTypeTray`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wagonTypeTray` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
- `typeFk` int(11) unsigned DEFAULT NULL,
- `height` int(11) unsigned NOT NULL,
- `colorFk` int(11) unsigned DEFAULT NULL,
+ `wagonTypeFk` int(11) unsigned DEFAULT NULL,
+ `height` int(11) unsigned DEFAULT NULL,
+ `wagonTypeColorFk` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
- UNIQUE KEY `typeFk` (`typeFk`,`height`),
- KEY `wagonTypeTray_color` (`colorFk`),
- CONSTRAINT `wagonTypeTray_color` FOREIGN KEY (`colorFk`) REFERENCES `wagonTypeColor` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `wagonTypeTray_type` FOREIGN KEY (`typeFk`) REFERENCES `wagonType` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
+ KEY `wagonTypeTray_wagonType_FK` (`wagonTypeFk`),
+ KEY `wagonTypeTray_wagonTypeColor_FK` (`wagonTypeColorFk`),
+ CONSTRAINT `wagonTypeTray_wagonTypeColor_FK` FOREIGN KEY (`wagonTypeColorFk`) REFERENCES `wagonTypeColor` (`id`),
+ CONSTRAINT `wagonTypeTray_wagonType_FK` FOREIGN KEY (`wagonTypeFk`) REFERENCES `wagonType` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -40645,7 +39895,7 @@ CREATE TABLE `wagonVolumetry` (
`lines` int(10) unsigned NOT NULL DEFAULT 1,
`liters` int(10) unsigned NOT NULL DEFAULT 0,
`height` int(10) unsigned NOT NULL DEFAULT 20,
- `wagonFk` varchar(6) NOT NULL,
+ `wagonFk` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `wagonVolumetry_FK_1` (`wagonFk`),
CONSTRAINT `wagonVolumetry_FK_1` FOREIGN KEY (`wagonFk`) REFERENCES `wagon` (`id`) ON UPDATE CASCADE
@@ -40680,7 +39930,6 @@ CREATE TABLE `warehouse` (
`hasDms` tinyint(1) NOT NULL DEFAULT 0,
`pickUpAgencyModeFk` int(11) DEFAULT NULL,
`isBuyerToBeEmailed` tinyint(2) NOT NULL DEFAULT 0,
- `aliasFk__` smallint(5) unsigned DEFAULT NULL COMMENT '@deprecated 2024-01-23 refs #5167',
`labelReport` int(11) DEFAULT NULL,
`hasUbications` tinyint(1) NOT NULL DEFAULT 1,
`hasProduction` tinyint(1) NOT NULL DEFAULT 0,
@@ -40695,31 +39944,14 @@ CREATE TABLE `warehouse` (
UNIQUE KEY `name_UNIQUE` (`name`),
KEY `Id_Paises` (`countryFk`),
KEY `isComparativeIdx` (`isComparative`),
- KEY `warehouse_ibfk_1_idx` (`aliasFk__`),
KEY `warehouse_FK` (`addressFk`),
KEY `warehouse_FK_1` (`pickUpAgencyModeFk`),
CONSTRAINT `warehouse_FK` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `warehouse_FK_1` FOREIGN KEY (`pickUpAgencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `warehouse_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`),
- CONSTRAINT `warehouse_ibfk_2` FOREIGN KEY (`aliasFk__`) REFERENCES `warehouseAlias__` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
+ CONSTRAINT `warehouse_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `warehouseAlias__`
---
-
-DROP TABLE IF EXISTS `warehouseAlias__`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `warehouseAlias__` (
- `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(15) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `name_UNIQUE` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='@deprecated 2024-01-23 refs #5167';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `warehousePickup`
--
@@ -40795,9 +40027,8 @@ CREATE TABLE `worker` (
`hasMachineryAuthorized` tinyint(2) DEFAULT 0,
`seniority` date DEFAULT NULL,
`isTodayRelative` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Para el F11. Calcula los problemas de visiblidad en funcion del dia actual',
- `isF11Allowed` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Usuario autorizado para abrir el F11',
+ `isF11Allowed__` tinyint(1) NOT NULL DEFAULT 0 COMMENT '@deprecated 2024-09-22',
`maritalStatus` enum('S','M') NOT NULL,
- `labelerFk__` tinyint(3) unsigned DEFAULT NULL COMMENT '@deprecated 2023-06-26',
`originCountryFk` mediumint(8) unsigned DEFAULT NULL COMMENT 'País de origen',
`educationLevelFk` smallint(6) DEFAULT NULL,
`SSN` varchar(15) DEFAULT NULL,
@@ -40815,7 +40046,6 @@ CREATE TABLE `worker` (
UNIQUE KEY `worker_business` (`businessFk`),
KEY `sub` (`sub`),
KEY `boss_idx` (`bossFk`),
- KEY `worker_FK` (`labelerFk__`),
KEY `worker_FK_2` (`educationLevelFk`),
KEY `worker_FK_1` (`originCountryFk`),
KEY `worker_fk_editor` (`editorFk`),
@@ -41037,25 +40267,25 @@ CREATE TABLE `workerDistributionCategory` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `workerDocument`
+-- Table structure for table `workerDms`
--
-DROP TABLE IF EXISTS `workerDocument`;
+DROP TABLE IF EXISTS `workerDms`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `workerDocument` (
+CREATE TABLE `workerDms` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `worker` int(10) unsigned DEFAULT NULL,
- `document` int(11) DEFAULT NULL,
+ `workerFk` int(10) unsigned DEFAULT NULL,
+ `dmsFk` int(11) DEFAULT NULL,
`isReadableByWorker` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indica si el empleado tiene permiso para acceder al documento',
`editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
- KEY `workerDocument_ibfk_1` (`worker`),
- KEY `workerDocument_ibfk_2` (`document`),
+ KEY `workerDocument_ibfk_1` (`workerFk`),
+ KEY `workerDocument_ibfk_2` (`dmsFk`),
KEY `workerDocument_fk_editor` (`editorFk`),
- CONSTRAINT `workerDocument_FK` FOREIGN KEY (`worker`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `workerDocument_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
- CONSTRAINT `workerDocument_ibfk_2` FOREIGN KEY (`document`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+ CONSTRAINT `workerDms_ibfk_2` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `workerDocument_FK` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `workerDocument_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -41219,6 +40449,7 @@ CREATE TABLE `workerLog` (
KEY `userFk_idx` (`userFk`),
KEY `workerLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `workerLog_originFk` (`originFk`,`creationDate`),
+ KEY `workerLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `userFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -41721,9 +40952,10 @@ CREATE TABLE `zone` (
`isVolumetric` tinyint(1) NOT NULL DEFAULT 0,
`inflation` decimal(5,2) NOT NULL DEFAULT 1.00,
`m3Max` decimal(10,2) unsigned DEFAULT NULL,
- `itemMaxSize` int(11) DEFAULT NULL COMMENT 'tamaño maximo de los articulos que esa ruta puede transportar',
+ `itemMaxSize` int(11) DEFAULT NULL COMMENT 'Altura maxima de los articulos que esa agencia puede transportar',
`code` varchar(45) DEFAULT NULL,
`editorFk` int(10) unsigned DEFAULT NULL,
+ `itemMaxLength` int(11) DEFAULT NULL COMMENT 'Longitud maxima para articulos acostados que esa agencia puede transportar',
PRIMARY KEY (`id`),
KEY `fk_zone_2_idx` (`agencyModeFk`),
KEY `zone_name_idx` (`name`),
@@ -41997,6 +41229,7 @@ CREATE TABLE `zoneLog` (
KEY `userFk` (`userFk`),
KEY `zoneLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
KEY `zoneLog_originFk` (`originFk`,`creationDate`),
+ KEY `zoneLog_creationDate_IDX` (`creationDate` DESC) USING BTREE,
CONSTRAINT `zoneLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -42394,7 +41627,7 @@ DELIMITER ;;
/*!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 `travel_setDelivered` ON SCHEDULE EVERY 1 DAY STARTS '2024-07-12 00:10:00' ON COMPLETION PRESERVE ENABLE DO BEGIN
+/*!50106 CREATE*/ /*!50117 DEFINER=`vn`@`localhost`*/ /*!50106 EVENT `travel_setDelivered` ON SCHEDULE EVERY 1 DAY STARTS '2024-07-12 00:10:00' ON COMPLETION PRESERVE ENABLE DO BEGIN
UPDATE travel t
SET t.isDelivered = TRUE
WHERE t.shipped < util.VN_CURDATE();
@@ -43658,81 +42891,6 @@ DELIMITER ;
/*!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 FUNCTION IF EXISTS `entry_getForLogiflora` */;
-/*!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=`vn`@`localhost` FUNCTION `entry_getForLogiflora`(vLanded DATE, vWarehouseFk INT) RETURNS int(11)
- READS SQL DATA
-BEGIN
-
- /**
- * Devuelve una entrada para Logiflora. Si no existe la crea.
- *
- * @param vLanded Fecha de llegada al almacén
- * @param vWarehouseFk Identificador de vn.warehouse
- */
-
- DECLARE vTravelFk INT;
- DECLARE vEntryFk INT;
- DECLARE previousEntryFk INT;
-
- SET vTravelFk = vn.travel_getForLogiflora(vLanded, vWarehouseFk);
-
- IF vLanded THEN
-
- SELECT IFNULL(MAX(id),0) INTO vEntryFk
- FROM vn.entry
- WHERE travelFk = vTravelFk
- AND isRaid;
-
- IF NOT vEntryFk THEN
-
- INSERT INTO vn.entry(travelFk, supplierFk, commission, companyFk, currencyFk, isRaid)
- SELECT vTravelFk, s.id, 4, c.id, cu.id, TRUE
- FROM vn.supplier s
- JOIN vn.company c ON c.code = 'VNL'
- JOIN vn.currency cu ON cu.code = 'EUR'
- WHERE s.name = 'KONINKLIJE COOPERATIEVE BLOEMENVEILING FLORAHOLLAN';
-
- SELECT MAX(id) INTO vEntryFk
- FROM vn.entry
- WHERE travelFk = vTravelFk;
-
- END IF;
-
- END IF;
-
- SELECT entryFk INTO previousEntryFk
- FROM edi.warehouseFloramondo wf
- WHERE wf.warehouseFk = vWarehouseFk;
-
- IF IFNULL(previousEntryFk,0) != vEntryFk THEN
-
- UPDATE buy b
- SET b.printedStickers = 0
- WHERE entryFk = previousEntryFk;
-
- DELETE FROM buy WHERE entryFk = previousEntryFk;
-
- DELETE FROM entry WHERE id = previousEntryFk;
-
- END IF;
-
- RETURN vEntryFk;
-
-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 FUNCTION IF EXISTS `entry_isIntrastat` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -45084,26 +44242,6 @@ DELIMITER ;
/*!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 FUNCTION IF EXISTS `MIDNIGHT` */;
-/*!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=`vn`@`localhost` FUNCTION `MIDNIGHT`(vDate DATE) RETURNS datetime
- DETERMINISTIC
-BEGIN
- RETURN TIMESTAMP(vDate,'23:59:59');
-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 FUNCTION IF EXISTS `orderTotalVolume` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -45308,47 +44446,6 @@ DELIMITER ;
/*!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 FUNCTION IF EXISTS `routeProposal_` */;
-/*!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=`vn`@`localhost` FUNCTION `routeProposal_`(vTicketFk INT) RETURNS int(11)
- READS SQL DATA
-BEGIN
-
- DECLARE vRouteFk INT;
- DECLARE vAddressFk INT;
- DECLARE vShipped DATETIME;
-
- SELECT addressFk, date(shipped) INTO vAddressFk, vShipped
- FROM vn.ticket
- WHERE id = vTicketFk;
-
- SELECT routeFk INTO vRouteFk
- FROM
- (SELECT t.routeFk, sum(af.friendship) friendshipSum
- FROM vn.ticket t
- JOIN cache.addressFriendship af ON af.addressFk2 = t.addressFk AND af.addressFk1 = vAddressFk
- WHERE t.shipped BETWEEN vShipped and MIDNIGHT(vShipped)
- AND t.routeFk
- GROUP BY routeFk
- ORDER BY friendshipSum DESC
- ) sub
- LIMIT 1;
-
- RETURN vRouteFk;
-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 FUNCTION IF EXISTS `routeProposal_beta` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -46512,69 +45609,6 @@ FROM `time`
WHERE `month` = vMonth AND `year` = vYear
LIMIT 1;
RETURN vSalesYear;
-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 FUNCTION IF EXISTS `travel_getForLogiflora` */;
-/*!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=`vn`@`localhost` FUNCTION `travel_getForLogiflora`(vLanded DATE, vWarehouseFk INT) RETURNS int(11)
- READS SQL DATA
-BEGIN
-
- /**
- * Devuelve un número de travel para compras de Logiflora a partir de la fecha de llegada y del almacén.
- * Si no existe lo genera.
- *
- * @param vLanded Fecha de llegada al almacén
- * @param vWarehouseFk Identificador de vn.warehouse
- */
-
- DECLARE vTravelFk INT;
-
- IF vLanded THEN
-
- SELECT IFNULL(MAX(tr.id),0) INTO vTravelFk
- FROM vn.travel tr
- JOIN vn.warehouse wIn ON wIn.id = tr.warehouseInFk
- JOIN vn.warehouse wOut ON wOut.id = tr.warehouseOutFk
- JOIN vn.agencyMode am ON am.id = tr.agencyModeFk
- WHERE wIn.id = vWarehouseFk
- AND wOut.name = 'Holanda'
- AND am.name = 'LOGIFLORA'
- AND landed = vLanded;
-
- IF NOT vTravelFk THEN
-
- INSERT INTO vn.travel(landed, shipped, warehouseInFk, warehouseOutFk, agencyModeFk)
- SELECT vLanded, util.VN_CURDATE(), vWarehouseFk, wOut.id, am.id
- FROM vn.warehouse wOut
- JOIN vn.agencyMode am ON am.name = 'LOGIFLORA'
- WHERE wOut.name = 'Holanda';
-
- SELECT MAX(tr.id) INTO vTravelFk
- FROM vn.travel tr
- JOIN vn.warehouse wIn ON wIn.id = tr.warehouseInFk
- JOIN vn.warehouse wOut ON wOut.id = tr.warehouseOutFk
- WHERE wIn.id = vWarehouseFk
- AND wOut.name = 'Holanda'
- AND landed = vLanded;
- END IF;
-
- END IF;
-
- RETURN vTravelFk;
-
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -48720,7 +47754,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `buy_getUltimate`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `buy_getUltimate`(
vItemFk INT,
vWarehouseFk SMALLINT,
vDated DATE
@@ -48780,7 +47814,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `buy_getUltimateFromInterval`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `buy_getUltimateFromInterval`(
vItemFk INT,
vWarehouseFk SMALLINT,
vStarted DATE,
@@ -49533,7 +48567,10 @@ BEGIN
AND a.available > 0
AND (sub.itemAllowed OR NOT it.isFloramondo OR anr.available > 0)
AND (ag.isAnyVolumeAllowed OR NOT itt.isUnconventionalSize)
- AND (itc.isReclining OR it.`size` IS NULL OR it.`size` < z.itemMaxSize OR z.itemMaxSize IS NULL)
+ AND (it.`size` IS NULL
+ OR IF(itc.isReclining,
+ it.size <= z.itemMaxLength OR z.itemMaxLength IS NULL,
+ it.size <= z.itemMaxSize OR z.itemMaxSize IS NULL))
AND cit.id IS NULL
AND zit.id IS NULL
AND ait.id IS NULL;
@@ -49633,7 +48670,7 @@ CREATE DEFINER=`vn`@`localhost` PROCEDURE `catalog_componentCalculate`(
)
BEGIN
/**
- * Calcula los componentes de los articulos de tmp.ticketLot
+ * Calcula los componentes de los articulos de la tabla tmp.ticketLot
*
* @param vZoneFk para calcular el transporte
* @param vAddressFk Consignatario
@@ -49651,18 +48688,41 @@ BEGIN
FROM address
WHERE id = vAddressFk;
- CREATE OR REPLACE TEMPORARY TABLE tSpecialPrice
+ CREATE OR REPLACE TEMPORARY TABLE tPriceDelta
(INDEX (itemFk))
- ENGINE = MEMORY
- SELECT * FROM (
+ ENGINE = MEMORY
+ SELECT i.id itemFk,
+ SUM(IFNULL(pd.absIncreasing,0)) absIncreasing,
+ SUM(IFNULL(pd.ratIncreasing,0)) ratIncreasing,
+ pd.warehouseFk
+ FROM item i
+ JOIN priceDelta pd
+ ON pd.itemTypeFk = i.typeFk
+ AND (pd.minSize IS NULL OR pd.minSize <= i.`size`)
+ AND (pd.maxSize IS NULL OR pd.maxSize >= i.`size`)
+ AND (pd.inkFk IS NULL OR pd.inkFk = i.inkFk)
+ AND (pd.originFk IS NULL OR pd.originFk = i.originFk)
+ AND (pd.producerFk IS NULL OR pd.producerFk = i.producerFk)
+ AND (pd.warehouseFk IS NULL OR pd.warehouseFk = vWarehouseFk)
+ LEFT JOIN zoneGeo zg ON zg.id = pd.zoneGeoFk
+ LEFT JOIN zoneGeo zg2 ON zg2.id = address_getGeo(vAddressFk)
+ WHERE (pd.fromDated IS NULL OR pd.fromDated <= vShipped)
+ AND (pd.toDated IS NULL OR pd.toDated >= vShipped)
+ AND (pd.zoneGeoFk IS NULL OR zg2.lft BETWEEN zg.lft AND zg.rgt)
+ GROUP BY itemFk;
+
+ CREATE OR REPLACE TEMPORARY TABLE tSpecialPrice
+ (INDEX (itemFk))
+ ENGINE = MEMORY
+ SELECT * FROM (
SELECT *
- FROM specialPrice
- WHERE (clientFk = vClientFk OR clientFk IS NULL)
- AND started <= vShipped
- AND (ended >= vShipped OR ended IS NULL)
- ORDER BY (clientFk = vClientFk) DESC, id DESC
- LIMIT 10000000000000000000) t
- GROUP BY itemFk;
+ FROM specialPrice
+ WHERE (clientFk = vClientFk OR clientFk IS NULL)
+ AND started <= vShipped
+ AND (ended >= vShipped OR ended IS NULL)
+ ORDER BY (clientFk = vClientFk) DESC, id DESC
+ LIMIT 10000000000000000000) t
+ GROUP BY itemFk;
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketComponentCalculate
(PRIMARY KEY (itemFk, warehouseFk))
@@ -49734,6 +48794,19 @@ BEGIN
JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tc.itemFk AND tcc.warehouseFk = tc.warehouseFk
GROUP BY tc.itemFk, warehouseFk;
+ -- Bonus del comprador a un rango de productos
+ INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
+ SELECT
+ tcb.warehouseFk,
+ tcb.itemFk,
+ c.id,
+ IFNULL(tcb.base * tpd.ratIncreasing / 100,0) + IFNULL(tpd.absIncreasing,0)
+ FROM tmp.ticketComponentBase tcb
+ JOIN component c ON c.code = 'bonus'
+ JOIN tPriceDelta tpd
+ ON tpd.itemFk = tcb.itemFk
+ AND tpd.warehouseFk = tcb.warehouseFk;
+
-- RECOBRO
INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
SELECT tcb.warehouseFk, tcb.itemFk, c2.id,
@@ -49929,7 +49002,8 @@ BEGIN
tmp.ticketComponentBase,
tmp.ticketComponentRate,
tmp.ticketComponentCopy,
- tSpecialPrice;
+ tPriceDelta,
+ tSpecialPrice;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -50535,27 +49609,6 @@ DELIMITER ;
/*!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 `clearShelvingList` */;
-/*!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=`vn`@`localhost` PROCEDURE `clearShelvingList`(vShelvingFk VARCHAR(8))
-BEGIN
- UPDATE vn.itemShelving
- SET visible = 0
- WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk COLLATE utf8_unicode_ci;
-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 `clientDebtSpray` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -51788,24 +50841,20 @@ BEGIN
SELECT ts.saleFk,
ts.itemFk,
CAST(0 AS DECIMAL(10,0)) saleOrder,
- IF(ish.visible > 0 OR iss.id, 1, 100000) *
- IFNULL(p2.pickingOrder, p.pickingOrder) `order`,
- TO_SECONDS(IF(iss.id,
- iss.created - INTERVAL vCurrentYear YEAR,
- ish.created - INTERVAL YEAR(ish.created) YEAR)) priority,
+ (IF(ish.visible > 0 OR iss.id, 1, 100000) *
+ COALESCE(p2.pickingOrder, p.pickingOrder)) `order`,
+ TO_SECONDS(COALESCE(iss.created, ish.created)) - TO_SECONDS(MAKEDATE(IFNULL(YEAR(iss.created), YEAR(ish.created)), 1)) priority,
CONCAT(
- IF(iss.id,
- CONCAT('< ', IFNULL(wk.`code`, '---'),' > '),
- ''),
- p.`code`) COLLATE utf8_general_ci placement,
+ IF(iss.id, CONCAT('< ', COALESCE(wk.`code`, '---'),' > '), ''),
+ p.`code`
+ ) COLLATE utf8_general_ci placement,
sh.priority shelvingPriority,
sh.code COLLATE utf8_general_ci shelving,
ish.created,
ish.visible,
- IFNULL(
- IF(st.code = 'previousByPacking', ish.packing, g.`grouping`),
- 1) `grouping`,
- st.code = 'previousPrepared' isPreviousPrepared,
+ COALESCE(
+ IF(st.code = 'previousByPacking', ish.packing, g.`grouping`),1) `grouping`,
+ (st.code = 'previousPrepared') isPreviousPrepared,
iss.id itemShelvingSaleFk,
ts.ticketFk,
iss.id,
@@ -51813,11 +50862,12 @@ BEGIN
iss.userFk,
ts.quantity
FROM tSale ts
- LEFT JOIN (SELECT DISTINCT saleFk
- FROM saleTracking st
- JOIN state s ON s.id = st.stateFk
- WHERE st.isChecked
- AND s.semaphore = 1) st ON st.saleFk = ts.saleFk
+ LEFT JOIN (SELECT st.saleFk
+ FROM saleTracking st
+ JOIN state s ON s.id = st.stateFk
+ WHERE st.isChecked
+ AND s.semaphore = 1
+ GROUP BY st.saleFk) st ON st.saleFk = ts.saleFk
JOIN itemShelving ish ON ish.itemFk = ts.itemFk
JOIN shelving sh ON sh.code = ish.shelvingFk
JOIN parking p ON p.id = sh.parkingFk
@@ -51826,14 +50876,14 @@ BEGIN
JOIN warehouse w ON w.id = sc.warehouseFk
LEFT JOIN tGrouping g ON g.itemFk = ts.itemFk
LEFT JOIN itemShelvingSale iss ON iss.saleFk = ts.saleFk
- AND iss.itemShelvingFk = ish.id
+ AND iss.itemShelvingFk = ish.id
LEFT JOIN worker wk ON wk.id = iss.userFk
LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = ts.saleFk
LEFT JOIN saleGroup sg ON sg.id = sgd.saleGroupFk
LEFT JOIN parking p2 ON p2.id = sg.parkingFk
WHERE w.id = vWarehouseFk
- AND NOT sc.isHideForPickers
- HAVING (iss.id AND st.saleFk) OR salePreviousPrepared IS NULL;
+ AND NOT sc.isHideForPickers
+ AND ((iss.id AND st.saleFk) OR st.saleFk IS NULL);
CREATE OR REPLACE TEMPORARY TABLE tSalePlacementList2
(INDEX(saleFk), INDEX(olderPriority))
@@ -52403,7 +51453,7 @@ BEGIN
JOIN vn.ticketCollection tc ON tc.ticketFk = tob.ticketFk
LEFT JOIN vn.observationType ot ON ot.id = tob.observationTypeFk
WHERE ot.`code` = 'itemPicker'
- AND tc.collectionFk = vParamFk
+ AND tc.collectionFk = vParamFk OR tc.ticketFk = vParamFk
)
SELECT t.id ticketFk,
IF(!(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
@@ -52591,7 +51641,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_mergeSales`(vCollectionFk INT)
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `collection_mergeSales`(vCollectionFk INT)
BEGIN
DECLARE vDone BOOL;
DECLARE vTicketFk INT;
@@ -53739,7 +52789,7 @@ BEGIN
SELECT * FROM (
SELECT cc.client clientFk, ci.grade
FROM creditClassification cc
- JOIN creditInsurance ci ON cc.id = ci.creditClassification
+ JOIN creditInsurance ci ON cc.id = ci.creditClassificationFk
WHERE dateEnd IS NULL
ORDER BY ci.creationDate DESC
LIMIT 10000000000000000000) t1
@@ -59689,98 +58739,6 @@ ELSE
INSERT INTO vn.itemBarcode(itemFk,code) VALUES (vItemFk,vCode);
END IF;
-END ;;
-DELIMITER ;
-/*!50003 SET sql_mode = @saved_sql_mode */ ;
-/*!50003 SET character_set_client = @saved_cs_client */ ;
-/*!50003 SET character_set_results = @saved_cs_results */ ;
-/*!50003 SET collation_connection = @saved_col_connection */ ;
-/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `itemFuentesBalance` */;
-/*!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=`vn`@`localhost` PROCEDURE `itemFuentesBalance`(vDaysInFuture INT)
-BEGIN
-
- /* Se utiliza para calcular la necesidad de mover mercancia entre el almacén de fuentes y el nuestro
- *
- * @param vDaysInFuture Rango de dias para calcular entradas y salidas
- *
- */
-
- DECLARE vWarehouseFk INT;
-
- SELECT s.warehouseFk INTO vWarehouseFk
- FROM vn.sector s
- WHERE s.code = 'FUENTES_PICASSE';
-
- CALL cache.stock_refresh(FALSE);
-
- SELECT i.id itemFk,
- i.longName,
- i.size,
- i.subName,
- v.amount - IFNULL(fue.Fuentes,0) - IFNULL(alb.albenfruit,0) as visible,
- fue.Fuentes,
- alb.Albenfruit,
- sale.venta,
- IFNULL(buy.compra,0) + IFNULL(mov.traslado,0) as compra,
- IFNULL(v.amount,0) + IFNULL(sale.venta,0) + IFNULL(buy.compra,0) + IFNULL(mov.traslado,0)
- - IFNULL(fue.Fuentes,0) - IFNULL(alb.albenfruit,0) as saldo
- FROM vn.item i
- JOIN vn.itemType it ON it.id = i.typeFk
- JOIN vn.itemCategory ic ON ic.id = it.categoryFk
- LEFT JOIN (
- SELECT ish.itemFk, CAST(SUM(ish.visible) AS DECIMAL(10,0)) AS Fuentes
- FROM vn.itemShelving ish
- JOIN vn.shelving sh ON sh.code = ish.shelvingFk
- JOIN vn.parking p ON p.id = sh.parkingFk
- JOIN vn.sector s ON s.id = p.sectorFk
- WHERE s.code = 'FUENTES_PICASSE'
- GROUP BY ish.itemFk
- ) fue ON fue.itemFk = i.id
- LEFT JOIN (
- SELECT ish.itemFk, CAST(SUM(ish.visible) AS DECIMAL(10,0)) AS Albenfruit
- FROM vn.itemShelving ish
- JOIN vn.shelving sh ON sh.code = ish.shelvingFk
- JOIN vn.parking p ON p.id = sh.parkingFk
- JOIN vn.sector s ON s.id = p.sectorFk
- WHERE s.code = 'ALBENFRUIT'
- GROUP BY ish.itemFk
- ) alb ON alb.itemFk = i.id
- LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk
- LEFT JOIN (
- SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as venta
- FROM itemTicketOut
- WHERE shipped BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE()))
- AND warehouseFk = vWarehouseFk
- GROUP BY itemFk
- ) sale ON sale.item_id = i.id
- LEFT JOIN (
- SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as compra
- FROM itemEntryIn
- WHERE landed BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE()))
- AND warehouseInFk = vWarehouseFk
- AND isVirtualStock = FALSE
- GROUP BY itemFk
- ) buy ON buy.item_id = i.id
- LEFT JOIN (
- SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as traslado
- FROM itemEntryOut
- WHERE shipped BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE()))
- AND warehouseOutFk = vWarehouseFk
- GROUP BY itemFk
- ) mov ON mov.item_id = i.id
- WHERE (v.amount OR fue.Fuentes OR alb.Albenfruit)
- AND i.itemPackingTypeFk = 'H'
- AND ic.shortLife;
-
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -59797,7 +58755,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `itemMinimumQuantity_check`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `itemMinimumQuantity_check`(
vSelf INT,
vItemFk INT,
vStarted DATE,
@@ -60226,77 +59184,6 @@ BEGIN
WHERE shelvingFk = vShelvingFk OR isl.itemFk = vShelvingFk
ORDER BY isl.created DESC;
-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 `itemShelvingMakeFromDate` */;
-/*!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=`vn`@`localhost` PROCEDURE `itemShelvingMakeFromDate`(IN `vShelvingFk` VARCHAR(8), IN `vBarcode` VARCHAR(22), IN `vQuantity` INT, IN `vPackagingFk` VARCHAR(10), IN `vGrouping` INT, IN `vPacking` INT, IN `vWarehouseFk` INT, `vCreated` VARCHAR(22))
-BEGIN
-
- DECLARE vItemFk INT;
-
- SELECT vn.barcodeToItem(vBarcode) INTO vItemFk;
-
- SELECT itemFk INTO vItemFk
- FROM vn.buy b
- WHERE b.id = vItemFk;
-
- IF (SELECT COUNT(*) FROM vn.shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN
-
- INSERT IGNORE INTO vn.parking(`code`) VALUES(vShelvingFk);
- INSERT INTO vn.shelving(`code`, parkingFk)
- SELECT vShelvingFk, id
- FROM vn.parking
- WHERE `code` = vShelvingFk COLLATE utf8_unicode_ci;
-
- END IF;
-
- IF (SELECT COUNT(*) FROM vn.itemShelving
- WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
- AND itemFk = vItemFk
- AND packing = vPacking) = 1 THEN
-
- UPDATE vn.itemShelving
- SET visible = visible+vQuantity,
- created = vCreated
- WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
- AND itemFk = vItemFk
- AND packing = vPacking;
-
- ELSE
- CALL cache.last_buy_refresh(FALSE);
- INSERT INTO itemShelving( itemFk,
- shelvingFk,
- visible,
- created,
- `grouping`,
- packing,
- packagingFk)
- SELECT vItemFk,
- vShelvingFk,
- vQuantity,
- vCreated,
- IF(vGrouping = 0, IFNULL(b.packing, vPacking), vGrouping) `grouping`,
- IF(vPacking = 0, b.packing, vPacking) packing,
- IF(vPackagingFk = '', b.packagingFk, vPackagingFk) packaging
- FROM vn.item i
- LEFT JOIN cache.last_buy lb ON i.id = lb.item_id AND lb.warehouse_id = vWarehouseFk
- LEFT JOIN vn.buy b ON b.id = lb.buy_id
- WHERE i.id = vItemFk;
- END IF;
-
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -60341,39 +59228,6 @@ BEGIN
) ish ON ish.itemFk = id
WHERE b.stickers OR ish.etiquetas;
-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 `itemShelvingPlacementSupplyAdd` */;
-/*!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=`vn`@`localhost` PROCEDURE `itemShelvingPlacementSupplyAdd`(vItemShelvingFk INT, vItemPlacementSupplyFk INT, vQuantity INT)
-BEGIN
-
- INSERT INTO vn.itemShelvingPlacementSupply( itemShelvingFk,
- itemPlacementSupplyFk,
- quantity,
- userFk)
- VALUES (vItemShelvingFk,
- vItemPlacementSupplyFk,
- vQuantity,
- getUser());
-
- UPDATE vn.itemShelving
- SET visible = visible - vQuantity
- WHERE id = vItemShelvingFk;
-
-
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -60429,7 +59283,7 @@ BEGIN
AND IFNULL(sub3.transit,0) < s.quantity
AND s.isPicked = FALSE
AND s.reserved = FALSE
- AND t.shipped BETWEEN util.VN_CURDATE() AND MIDNIGHT(util.VN_CURDATE())
+ AND t.shipped BETWEEN util.VN_CURDATE() AND util.midnight()
AND tst.isPreviousPreparable = TRUE
AND t.warehouseFk = vWarehouseFk
AND iss.sectorFk = vSectorFk
@@ -60807,7 +59661,8 @@ BEGIN
getUser());
UPDATE itemShelving
- SET visible = visible - vQuantity
+ SET visible = visible - vQuantity,
+ available = available - vQuantity
WHERE id = vItemShelvingFk;
UPDATE vn.saleTracking
@@ -61034,7 +59889,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_addBySaleGroup`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `itemShelvingSale_addBySaleGroup`(
vSaleGroupFk INT(11)
)
BEGIN
@@ -62265,12 +61120,12 @@ CREATE DEFINER=`vn`@`localhost` PROCEDURE `itemShelving_selfConsumption`(
)
BEGIN
/**
- * Leave the indicated amount on the shelf
+ * Leave the indicated amount on the shelve
* and create a ticket with the difference.
*
- * @param vShelvingFk id of the shelf where the item is located.
+ * @param vShelvingFk id of the shelve where the item is located.
* @param vItemFk article of which the self-consumption ticket is to be created.
- * @param vQuantity amount that will stay on the shelf
+ * @param vQuantity amount that will stay on the shelve
*/
DECLARE vVisible INT;
DECLARE vClientFk INT;
@@ -62339,7 +61194,8 @@ BEGIN
WHERE id = vItemFk;
UPDATE itemShelving
- SET visible = IF(id = vItemShelvingFk, vQuantity, 0)
+ SET visible = IF(id = vItemShelvingFk, vQuantity, 0),
+ available = IF(id = vItemShelvingFk, vQuantity, 0)
WHERE shelvingFk = vShelvingFk
AND itemFk = vItemFk;
@@ -62392,7 +61248,8 @@ BEGIN
IF vNewItemShelvingFk THEN
UPDATE itemShelving ish
JOIN itemShelving ish2 ON ish2.id = vItemShelvingFk
- SET ish.visible = ish.visible + ish2.visible
+ SET ish.visible = ish.visible + ish2.visible,
+ ish.available = ish.available + ish2.available
WHERE ish.id = vNewItemShelvingFk;
DELETE FROM itemShelving
@@ -63730,7 +62587,8 @@ BEGIN
WHERE id = vTargetItemShelvingFk;
ELSE
UPDATE itemShelving
- SET visible = vCurrentVisible - vQuantity
+ SET visible = vCurrentVisible - vQuantity,
+ available = GREATEST(0, available - vQuantity)
WHERE id = vTargetItemShelvingFk;
END IF;
@@ -64517,25 +63375,24 @@ CREATE DEFINER=`vn`@`localhost` PROCEDURE `item_getSimilar`(
vSelf INT,
vWarehouseFk INT,
vDated DATE,
- vShowType BOOL
+ vShowType BOOL,
+ vDaysInForward INT
)
BEGIN
/**
-* Propone articulos disponibles ordenados, con la cantidad
+* Propone articulos ordenados, con la cantidad
* de veces usado y segun sus caracteristicas.
*
* @param vSelf Id de artículo
* @param vWarehouseFk Id de almacen
* @param vDated Fecha
* @param vShowType Mostrar tipos
+* @param vDaysInForward Días de alcance para las ventas
*/
DECLARE vAvailableCalcFk INT;
- DECLARE vVisibleCalcFk INT;
- DECLARE vTypeFk INT;
DECLARE vPriority INT DEFAULT 1;
CALL cache.available_refresh(vAvailableCalcFk, FALSE, vWarehouseFk, vDated);
- CALL cache.visible_refresh(vVisibleCalcFk, FALSE, vWarehouseFk);
WITH itemTags AS (
SELECT i.id,
@@ -64555,8 +63412,25 @@ BEGIN
AND it.priority = vPriority
LEFT JOIN vn.tag t ON t.id = it.tagFk
WHERE i.id = vSelf
+ ),
+ stock AS (
+ SELECT itemFk, SUM(visible) stock
+ FROM vn.itemShelvingStock
+ WHERE warehouseFk = vWarehouseFk
+ GROUP BY itemFk
+ ),
+ sold AS (
+ SELECT SUM(s.quantity) quantity, s.itemFk
+ FROM vn.sale s
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
+ WHERE t.shipped >= CURDATE() + INTERVAL vDaysInForward DAY
+ AND iss.saleFk IS NULL
+ AND t.warehouseFk = vWarehouseFk
+ GROUP BY s.itemFk
)
SELECT i.id itemFk,
+ LEAST(CAST(sd.quantity AS INT), sk.stock) advanceable,
i.longName,
i.subName,
i.tag5,
@@ -64578,13 +63452,13 @@ BEGIN
WHEN b.groupingMode = 'packing' THEN b.packing
ELSE 1
END minQuantity,
- v.visible located,
+ sk.stock located,
b.price2
FROM vn.item i
+ LEFT JOIN sold sd ON sd.itemFk = i.id
JOIN cache.available a ON a.item_id = i.id
AND a.calc_id = vAvailableCalcFk
- LEFT JOIN cache.visible v ON v.item_id = i.id
- AND v.calc_id = vVisibleCalcFk
+ LEFT JOIN stock sk ON sk.itemFk = i.id
LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
AND lb.warehouse_id = vWarehouseFk
LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id
@@ -64594,20 +63468,21 @@ BEGIN
LEFT JOIN vn.tag t ON t.id = it.tagFk
LEFT JOIN vn.buy b ON b.id = lb.buy_id
JOIN itemTags its
- WHERE a.available > 0
+ WHERE (a.available > 0 OR sd.quantity < sk.stock)
AND (i.typeFk = its.typeFk OR NOT vShowType)
AND i.id <> vSelf
- ORDER BY `counter` DESC,
- (t.name = its.name) DESC,
- (it.value = its.value) DESC,
- (i.tag5 = its.tag5) DESC,
- match5 DESC,
- (i.tag6 = its.tag6) DESC,
- match6 DESC,
- (i.tag7 = its.tag7) DESC,
- match7 DESC,
- (i.tag8 = its.tag8) DESC,
- match8 DESC
+ ORDER BY (a.available > 0) DESC,
+ `counter` DESC,
+ (t.name = its.name) DESC,
+ (it.value = its.value) DESC,
+ (i.tag5 = its.tag5) DESC,
+ match5 DESC,
+ (i.tag6 = its.tag6) DESC,
+ match6 DESC,
+ (i.tag7 = its.tag7) DESC,
+ match7 DESC,
+ (i.tag8 = its.tag8) DESC,
+ match8 DESC
LIMIT 100;
END ;;
DELIMITER ;
@@ -67052,60 +65927,66 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`vn`@`localhost` PROCEDURE `previousSticker_get`(vSaleGroupFk INT)
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `previousSticker_get`(
+ vSaleGroupFk INT
+)
BEGIN
/**
* Devuelve los campos a imprimir en una etiqueta de preparación previa.
- * Actualiza el valor de vn.saleGroup.parkingFk en el caso de que exista un
+ * Actualiza el valor de saleGroup.parkingFk en el caso de que exista un
* saleGroup del mismo ticket con parking, del mismo sector, para que todos se
* pongan juntos.
*
- * @param vSaleGroupFk Identificador de vn.saleGroup
+ * @param vSaleGroupFk Identificador de saleGroup
*/
DECLARE vTicketFk INT;
DECLARE vParkingFk INT;
DECLARE vSectorFk INT;
+ DECLARE vTicketLines INT;
- SELECT s.ticketFk
- INTO vTicketFk
- FROM vn.saleGroupDetail sgd
- JOIN vn.sale s ON s.id = sgd.saleFk
- WHERE sgd.saleGroupFk = vSaleGroupFk
- LIMIT 1;
+ WITH ticketData AS(
+ SELECT DISTINCT s.ticketFk
+ FROM vn.saleGroupDetail sgd
+ JOIN vn.sale s ON s.id = sgd.saleFk
+ WHERE sgd.saleGroupFk = vSaleGroupFk
+ )
+ SELECT COUNT(*), s.ticketFk INTO vTicketLines, vTicketFk
+ FROM vn.sale s
+ JOIN ticketData td ON td.ticketFk = s.ticketFk;
SELECT sg.parkingFk, sc.sectorFk
INTO vParkingFk, vSectorFk
- FROM vn.saleGroup sg
- JOIN vn.sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sg.id
- JOIN vn.sectorCollection sc ON sc.id = scsg.sectorCollectionFk
- JOIN vn.saleGroupDetail sgd ON sgd.saleGroupFk = sg.id
- JOIN vn.sale s ON s.id = sgd.saleFk
+ FROM saleGroup sg
+ JOIN sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sg.id
+ JOIN sectorCollection sc ON sc.id = scsg.sectorCollectionFk
+ JOIN saleGroupDetail sgd ON sgd.saleGroupFk = sg.id
+ JOIN sale s ON s.id = sgd.saleFk
WHERE s.ticketFk = vTicketFk
AND sg.parkingFk IS NOT NULL
LIMIT 1;
- UPDATE vn.saleGroup sg
+ UPDATE saleGroup sg
SET sg.parkingFk = vParkingFk
WHERE sg.id = vSaleGroupFk
AND sg.sectorFk = vSectorFk;
SELECT sgd.saleGroupFk,
t.id ticketFk,
- p.code as location,
- t.observations,
+ COUNT(*) previousLines,
IF(HOUR(t.shipped), HOUR(t.shipped), HOUR(z.`hour`)) shippingHour,
IF(MINUTE(t.shipped), MINUTE(t.shipped), MINUTE(z.`hour`)) shippingMinute ,
IFNULL(MAX(i.itemPackingTypeFk),'H') itemPackingTypeFk ,
- count(*) items,
+ vTicketLines ticketLines,
+ p.code `location`,
sc.description sector
- FROM vn.sale s
- JOIN vn.item i ON i.id = s.itemFk
- JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
- JOIN vn.saleGroup sg ON sg.id = sgd.saleGroupFk
- JOIN vn.sector sc ON sc.id = sg.sectorFk
- JOIN vn.ticket t ON t.id = s.ticketFk
- LEFT JOIN vn.parking p ON p.id = sg.parkingFk
- LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
+ FROM sale s
+ JOIN item i ON i.id = s.itemFk
+ JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
+ JOIN saleGroup sg ON sg.id = sgd.saleGroupFk
+ JOIN sector sc ON sc.id = sg.sectorFk
+ JOIN ticket t ON t.id = s.ticketFk
+ LEFT JOIN parking p ON p.id = sg.parkingFk
+ LEFT JOIN `zone` z ON z.id = t.zoneFk
WHERE sgd.saleGroupFk = vSaleGroupFk;
END ;;
DELIMITER ;
@@ -67427,15 +66308,15 @@ proc: BEGIN
UPDATE tmp.productionBuffer pb
JOIN sale s ON s.ticketFk = pb.ticketFk
JOIN item i ON i.id = s.itemFk
- JOIN itemType it ON it.id = i.typeFk
- JOIN itemCategory ic ON ic.id = it.categoryFk
- JOIN cache.last_buy lb ON lb.warehouse_id = vWarehouseFk AND lb.item_id = s.itemFk
+ JOIN cache.last_buy lb ON lb.warehouse_id = vWarehouseFk
+ AND lb.item_id = s.itemFk
JOIN buy b ON b.id = lb.buy_id
JOIN packaging p ON p.id = b.packagingFk
JOIN productionConfig pc
SET pb.hasPlantTray = TRUE
WHERE p.isPlantTray
- AND pb.isOwn;
+ AND s.quantity >= b.packing
+ AND pb.isOwn;
DROP TEMPORARY TABLE
tmp.productionTicket,
@@ -67753,7 +66634,6 @@ BEGIN
i.itemPackingTypeFk,
isa.`size`,
isa.Estado,
- isa.sectorProdPriority,
isa.available,
isa.sectorFk,
isa.matricula,
@@ -71167,8 +70047,9 @@ UPDATE shelving sh
AND (
sh.parked IS NULL
OR
- sh.parked < TIMESTAMPADD(MONTH,-1,util.VN_CURDATE())
- )
+ sh.parked < util.VN_CURDATE() - INTERVAL 2 WEEK
+ )
+
AND IF(code REGEXP '^[A-Za-z]{2}[0-9]', LEFT (code, 2) NOT IN (
SELECT DISTINCT LEFT(its.shelvingFk, 2)
FROM itemShelving its
@@ -71341,6 +70222,81 @@ DELIMITER ;
/*!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 `stockBought_calculate` */;
+/*!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=`vn`@`localhost` PROCEDURE `stockBought_calculate`(
+ vDated DATE
+)
+proc: BEGIN
+/**
+ * Calculate the stock of the auction warehouse from the inventory date to vDated
+ * without taking into account the outputs of the same day vDated
+ *
+ * @param vDated Date to calculate the stock.
+ */
+ IF vDated < util.VN_CURDATE() THEN
+ LEAVE proc;
+ END IF;
+
+ CREATE OR REPLACE TEMPORARY TABLE tStockBought
+ SELECT workerFk, reserve
+ FROM stockBought
+ WHERE dated = vDated
+ AND reserve;
+
+ DELETE FROM stockBought WHERE dated = vDated;
+
+ CALL item_calculateStock(vDated);
+
+ INSERT INTO stockBought(workerFk, bought, dated)
+ SELECT it.workerFk,
+ ROUND(SUM(
+ (ti.quantity / b.packing) *
+ buy_getVolume(b.id)
+ ) / vc.palletM3 / 1000000, 1) bought,
+ vDated
+ FROM itemType it
+ JOIN item i ON i.typeFk = it.id
+ LEFT JOIN tmp.item ti ON ti.itemFk = i.id
+ JOIN itemCategory ic ON ic.id = it.categoryFk
+ JOIN warehouse wh ON wh.code = 'VNH'
+ JOIN tmp.buyUltimate bu ON bu.itemFk = i.id
+ AND bu.warehouseFk = wh.id
+ JOIN buy b ON b.id = bu.buyFk
+ JOIN volumeConfig vc
+ WHERE ic.display
+ GROUP BY it.workerFk
+ HAVING bought;
+
+ UPDATE stockBought s
+ JOIN tStockBought ts ON ts.workerFk = s.workerFk
+ SET s.reserve = ts.reserve
+ WHERE s.dated = vDated;
+
+ INSERT INTO stockBought (workerFk, reserve, dated)
+ SELECT ts.workerFk, ts.reserve, vDated
+ FROM tStockBought ts
+ WHERE ts.workerFk NOT IN (
+ SELECT workerFk
+ FROM stockBought
+ WHERE dated = vDated
+ );
+
+ DROP TEMPORARY TABLE tStockBought, tmp.item, tmp.buyUltimate;
+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 `stockBuyedByWorker` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -72063,7 +71019,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `supplier_statementWithEntries`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `supplier_statementWithEntries`(
vSupplierFk INT,
vCurrencyFk INT,
vCompanyFk INT,
@@ -72081,14 +71037,14 @@ BEGIN
* @param vOrderBy Order by criteria
* @param vIsConciliated Indicates whether it is reconciled or not
* @param vHasEntries Indicates if future entries must be shown
-* @return tmp.supplierStatement
+* @return tmp.supplierStatement
*/
DECLARE vBalanceStartingDate DATETIME;
SET @euroBalance:= 0;
SET @currencyBalance:= 0;
- SELECT balanceStartingDate
+ SELECT balanceStartingDate
INTO vBalanceStartingDate
FROM invoiceInConfig;
@@ -72128,14 +71084,14 @@ BEGIN
c.code,
'invoiceIn' statementType
FROM invoiceIn ii
- JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
+ LEFT JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
JOIN currency c ON c.id = ii.currencyFk
WHERE ii.issued >= vBalanceStartingDate
- AND ii.supplierFk = vSupplierFk
+ AND ii.supplierFk = vSupplierFk
AND vCurrencyFk IN (ii.currencyFk, 0)
AND vCompanyFk IN (ii.companyFk, 0)
AND (vIsConciliated = ii.isBooked OR NOT vIsConciliated)
- GROUP BY iid.id
+ GROUP BY iid.id, ii.id
UNION ALL
SELECT p.bankFk,
p.companyFk,
@@ -72171,7 +71127,7 @@ BEGIN
AND vCurrencyFk IN (p.currencyFk, 0)
AND vCompanyFk IN (p.companyFk, 0)
AND (vIsConciliated = p.isConciliated OR NOT vIsConciliated)
- UNION ALL
+ UNION ALL
SELECT NULL,
companyFk,
NULL,
@@ -72198,7 +71154,7 @@ BEGIN
AND vCurrencyFk IN (se.currencyFk,0)
AND vCompanyFk IN (se.companyFk,0)
AND (vIsConciliated = se.isConciliated OR NOT vIsConciliated)
- UNION ALL
+ UNION ALL
SELECT NULL bankFk,
e.companyFk,
'E' serial,
@@ -72214,7 +71170,7 @@ BEGIN
FALSE isBooked,
c.code,
'order'
- FROM entry e
+ FROM entry e
JOIN travel tr ON tr.id = e.travelFk
JOIN currency c ON c.id = e.currencyFk
WHERE e.supplierFk = vSupplierFk
@@ -73667,8 +72623,7 @@ BEGIN
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id))
- SELECT
- origin.ticketFk futureId,
+ SELECT origin.ticketFk futureId,
dest.ticketFk id,
dest.state,
origin.futureState,
@@ -73699,48 +72654,48 @@ BEGIN
origin.warehouseFk futureWarehouseFk,
origin.companyFk futureCompanyFk,
IFNULL(dest.nickname, origin.nickname) nickname,
- dest.landed
+ dest.landed,
+ dest.preparation
FROM (
- SELECT
- s.ticketFk,
- c.salesPersonFk workerFk,
- t.shipped,
- t.totalWithVat,
- st.name futureState,
- am.name futureAgency,
- count(s.id) futureLines,
- GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
- CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
- SUM(s.quantity <= (IFNULL(il.stock,0) + IFNULL(im.amount, 0))) hasStock,
- z.id futureZoneFk,
- z.name futureZoneName,
- st.classColor,
- t.clientFk,
- t.nickname,
- t.addressFk,
- t.warehouseFk,
- t.companyFk,
- t.agencyModeFk
- FROM ticket t
- JOIN client c ON c.id = t.clientFk
- JOIN sale s ON s.ticketFk = t.id
- JOIN saleVolume sv ON sv.saleFk = s.id
- JOIN item i ON i.id = s.itemFk
- JOIN ticketState ts ON ts.ticketFk = t.id
- JOIN state st ON st.id = ts.stateFk
- JOIN agencyMode am ON t.agencyModeFk = am.id
- JOIN zone z ON t.zoneFk = z.id
- LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
- 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
+ SELECT s.ticketFk,
+ c.salesPersonFk workerFk,
+ t.shipped,
+ t.totalWithVat,
+ st.name futureState,
+ am.name futureAgency,
+ count(s.id) futureLines,
+ GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
+ CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
+ SUM(s.quantity <= (IFNULL(il.stock,0) + IFNULL(im.amount, 0))) hasStock,
+ z.id futureZoneFk,
+ z.name futureZoneName,
+ st.classColor,
+ t.clientFk,
+ t.nickname,
+ t.addressFk,
+ t.warehouseFk,
+ t.companyFk,
+ t.agencyModeFk
+ FROM ticket t
+ JOIN client c ON c.id = t.clientFk
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN saleVolume sv ON sv.saleFk = s.id
+ JOIN item i ON i.id = s.itemFk
+ JOIN ticketState ts ON ts.ticketFk = t.id
+ JOIN `state` st ON st.id = ts.stateFk
+ JOIN agencyMode am ON t.agencyModeFk = am.id
+ JOIN `zone` z ON t.zoneFk = z.id
+ LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
+ LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
+ 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
) origin
LEFT JOIN (
- SELECT
- t.id ticketFk,
+ SELECT t.id ticketFk,
st.name state,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt,
t.shipped,
@@ -73756,18 +72711,25 @@ BEGIN
t.warehouseFk,
t.companyFk,
t.landed,
- t.agencyModeFk
+ t.agencyModeFk,
+ SEC_TO_TIME(
+ COALESCE(HOUR(t.shipped), HOUR(zc.hour), HOUR(z.hour)) * 3600 +
+ COALESCE(MINUTE(t.shipped), MINUTE(zc.hour), MINUTE(z.hour)) * 60
+ ) preparation
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN saleVolume sv ON sv.saleFk = s.id
JOIN item i ON i.id = s.itemFk
JOIN ticketState ts ON ts.ticketFk = t.id
- JOIN state st ON st.id = ts.stateFk
+ JOIN `state` st ON st.id = ts.stateFk
JOIN agencyMode am ON t.agencyModeFk = am.id
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
+ LEFT JOIN `zone` z ON z.id = t.zoneFk
+ LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
+ JOIN ticketCanAdvanceConfig tc
WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance)
AND t.warehouseFk = vWarehouseFk
- AND st.order <= 5
+ AND st.order <= tc.destinationOrder
GROUP BY t.id
) dest ON dest.addressFk = origin.addressFk
WHERE origin.hasStock;
@@ -73813,6 +72775,7 @@ BEGIN
t.clientFk,
t.warehouseFk,
ts.alertLevel,
+ sub2.alertLevel futureAlertLevel,
t.shipped,
t.totalWithVat,
sub2.shipped futureShipped,
@@ -73839,6 +72802,7 @@ BEGIN
t.addressFk,
t.id,
t.shipped,
+ ts.alertLevel,
st.name state,
st.code,
st.classColor,
@@ -75713,7 +74677,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_mergeSales`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `ticket_mergeSales`(
vSelf INT
)
BEGIN
@@ -76368,7 +75332,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setProblemRiskByClient`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `ticket_setProblemRiskByClient`(
vClientFk INT
)
BEGIN
@@ -76710,7 +75674,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setVolume`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `ticket_setVolume`(
vSelf INT
)
BEGIN
@@ -76747,7 +75711,7 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setVolumeItemCost`(
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `ticket_setVolumeItemCost`(
vItemFk INT
)
BEGIN
@@ -81322,7 +80286,9 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`vn`@`localhost` PROCEDURE `worker_getHierarchy`(vUserFk INT)
+CREATE DEFINER=`vn`@`localhost` PROCEDURE `worker_getHierarchy`(
+ vUserFk INT
+)
BEGIN
/**
* Retorna una tabla temporal con los trabajadores que tiene
@@ -81335,15 +80301,16 @@ BEGIN
(PRIMARY KEY (workerFk))
ENGINE = MEMORY
WITH RECURSIVE workerHierarchy AS (
- SELECT id workerFk, bossFk, 0 depth
+ SELECT id workerFk, bossFk, 0 `depth`, CAST(id AS CHAR(255)) `path`
FROM vn.worker
WHERE id = vUserFk
UNION ALL
- SELECT w.id, w.bossFk, wh.depth + 1
+ SELECT w.id, w.bossFk, wh.`depth` + 1, CONCAT(wh.`path`, ',', w.id)
FROM vn.worker w
JOIN workerHierarchy wh ON w.bossFk = wh.workerFk
+ WHERE NOT FIND_IN_SET(w.id, wh.`path`)
)
- SELECT *
+ SELECT *
FROM workerHierarchy
ORDER BY depth, workerFk;
END ;;
@@ -83331,7 +82298,6 @@ SET character_set_client = utf8;
1 AS `hasKgPrice`,
1 AS `Equivalente`,
1 AS `Imprimir`,
- 1 AS `Familia__`,
1 AS `do_photo`,
1 AS `odbc_date`,
1 AS `isFloramondo`,
@@ -83596,7 +82562,8 @@ SET character_set_client = utf8;
1 AS `Suben`,
1 AS `Base`,
1 AS `box`,
- 1 AS `costeRetorno` */;
+ 1 AS `costeRetorno`,
+ 1 AS `isActive` */;
SET character_set_client = @saved_cs_client;
--
@@ -85619,7 +84586,6 @@ SET character_set_client = utf8;
1 AS `order`,
1 AS `alert_level`,
1 AS `code`,
- 1 AS `sectorProdPriority`,
1 AS `nextStateFk`,
1 AS `isPreviousPreparable`,
1 AS `isPicked` */;
@@ -87940,7 +86906,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`vn`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `itemShelvingAvailable` AS select `s`.`id` AS `saleFk`,`tst`.`updated` AS `Modificado`,`s`.`ticketFk` AS `ticketFk`,0 AS `isPicked`,`s`.`itemFk` AS `itemFk`,`s`.`quantity` AS `quantity`,`s`.`concept` AS `concept`,`i`.`size` AS `size`,`st`.`name` AS `Estado`,`st`.`sectorProdPriority` AS `sectorProdPriority`,`stock`.`visible` AS `available`,`stock`.`sectorFk` AS `sectorFk`,`stock`.`shelvingFk` AS `matricula`,`stock`.`parkingFk` AS `parking`,`stock`.`itemShelvingFk` AS `itemShelving`,`am`.`name` AS `Agency`,`t`.`shipped` AS `shipped`,`stock`.`grouping` AS `grouping`,`stock`.`packing` AS `packing`,`z`.`hour` AS `hour`,`st`.`isPreviousPreparable` AS `isPreviousPreparable`,`sv`.`physicalVolume` AS `physicalVolume`,`t`.`warehouseFk` AS `warehouseFk` from (((((((((`sale` `s` join `ticket` `t` on(`t`.`id` = `s`.`ticketFk`)) join `agencyMode` `am` on(`am`.`id` = `t`.`agencyModeFk`)) join `ticketStateToday` `tst` on(`tst`.`ticketFk` = `t`.`id`)) join `state` `st` on(`st`.`id` = `tst`.`state`)) join `item` `i` on(`i`.`id` = `s`.`itemFk`)) join `itemShelvingStock` `stock` on(`stock`.`itemFk` = `i`.`id`)) left join `saleTracking` `stk` on(`stk`.`saleFk` = `s`.`id`)) left join `zone` `z` on(`z`.`id` = `t`.`zoneFk`)) left join `saleVolume` `sv` on(`sv`.`saleFk` = `s`.`id`)) where `t`.`shipped` between `util`.`yesterday`() and `util`.`dayend`(`util`.`VN_CURDATE`()) and `stk`.`id` is null and `stock`.`visible` > 0 and `stk`.`saleFk` is null and `st`.`isPreviousPreparable` <> 0 */;
+/*!50001 VIEW `itemShelvingAvailable` AS select `s`.`id` AS `saleFk`,`tst`.`updated` AS `Modificado`,`s`.`ticketFk` AS `ticketFk`,0 AS `isPicked`,`s`.`itemFk` AS `itemFk`,`s`.`quantity` AS `quantity`,`s`.`concept` AS `concept`,`i`.`size` AS `size`,`st`.`name` AS `Estado`,`stock`.`visible` AS `available`,`stock`.`sectorFk` AS `sectorFk`,`stock`.`shelvingFk` AS `matricula`,`stock`.`parkingFk` AS `parking`,`stock`.`itemShelvingFk` AS `itemShelving`,`am`.`name` AS `Agency`,`t`.`shipped` AS `shipped`,`stock`.`grouping` AS `grouping`,`stock`.`packing` AS `packing`,`z`.`hour` AS `hour`,`st`.`isPreviousPreparable` AS `isPreviousPreparable`,`sv`.`physicalVolume` AS `physicalVolume`,`t`.`warehouseFk` AS `warehouseFk` from (((((((((`sale` `s` join `ticket` `t` on(`t`.`id` = `s`.`ticketFk`)) join `agencyMode` `am` on(`am`.`id` = `t`.`agencyModeFk`)) join `ticketStateToday` `tst` on(`tst`.`ticketFk` = `t`.`id`)) join `state` `st` on(`st`.`id` = `tst`.`state`)) join `item` `i` on(`i`.`id` = `s`.`itemFk`)) join `itemShelvingStock` `stock` on(`stock`.`itemFk` = `i`.`id`)) left join `saleTracking` `stk` on(`stk`.`saleFk` = `s`.`id`)) left join `zone` `z` on(`z`.`id` = `t`.`zoneFk`)) left join `saleVolume` `sv` on(`sv`.`saleFk` = `s`.`id`)) where `t`.`shipped` between `util`.`yesterday`() and `util`.`dayend`(`util`.`VN_CURDATE`()) and `stk`.`id` is null and `stock`.`visible` > 0 and `stk`.`saleFk` is null and `st`.`isPreviousPreparable` <> 0 */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -88840,7 +87806,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`vn`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `ticketStateToday` AS select `ts`.`ticketFk` AS `ticketFk`,`ts`.`state` AS `state`,`ts`.`productionOrder` AS `productionOrder`,`ts`.`alertLevel` AS `alertLevel`,`ts`.`userFk` AS `userFk`,`ts`.`code` AS `code`,`ts`.`updated` AS `updated`,`ts`.`isPicked` AS `isPicked` from (`ticketState` `ts` join `ticket` `t` on(`t`.`id` = `ts`.`ticketFk`)) where `t`.`shipped` between `util`.`VN_CURDATE`() and `MIDNIGHT`(`util`.`VN_CURDATE`()) */;
+/*!50001 VIEW `ticketStateToday` AS select `ts`.`ticketFk` AS `ticketFk`,`ts`.`state` AS `state`,`ts`.`productionOrder` AS `productionOrder`,`ts`.`alertLevel` AS `alertLevel`,`ts`.`userFk` AS `userFk`,`ts`.`code` AS `code`,`ts`.`updated` AS `updated`,`ts`.`isPicked` AS `isPicked` from (`ticketState` `ts` join `ticket` `t` on(`t`.`id` = `ts`.`ticketFk`)) where `t`.`shipped` between `util`.`VN_CURDATE`() and `util`.`midnight`() */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89134,7 +88100,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `Articles` AS select `i`.`id` AS `Id_Article`,`i`.`name` AS `Article`,`i`.`typeFk` AS `tipo_id`,`i`.`size` AS `Medida`,`i`.`inkFk` AS `Color`,`i`.`category` AS `Categoria`,`i`.`stems` AS `Tallos`,`i`.`originFk` AS `id_origen`,`i`.`description` AS `description`,`i`.`producerFk` AS `producer_id`,`i`.`intrastatFk` AS `Codintrastat`,`i`.`box` AS `caja`,`i`.`expenseFk` AS `expenseFk`,`i`.`comment` AS `comments`,`i`.`relevancy` AS `relevancy`,`i`.`image` AS `Foto`,`i`.`generic` AS `generic`,`i`.`density` AS `density`,`i`.`minPrice` AS `PVP`,`i`.`hasMinPrice` AS `Min`,`i`.`isActive` AS `isActive`,`i`.`longName` AS `longName`,`i`.`subName` AS `subName`,`i`.`tag5` AS `tag5`,`i`.`value5` AS `value5`,`i`.`tag6` AS `tag6`,`i`.`value6` AS `value6`,`i`.`tag7` AS `tag7`,`i`.`value7` AS `value7`,`i`.`tag8` AS `tag8`,`i`.`value8` AS `value8`,`i`.`tag9` AS `tag9`,`i`.`value9` AS `value9`,`i`.`tag10` AS `tag10`,`i`.`value10` AS `value10`,`i`.`minimum` AS `minimum`,`i`.`upToDown` AS `upToDown`,`i`.`hasKgPrice` AS `hasKgPrice`,`i`.`equivalent` AS `Equivalente`,`i`.`isToPrint` AS `Imprimir`,`i`.`family` AS `Familia__`,`i`.`doPhoto` AS `do_photo`,`i`.`created` AS `odbc_date`,`i`.`isFloramondo` AS `isFloramondo`,`i`.`supplyResponseFk` AS `supplyResponseFk`,`i`.`stemMultiplier` AS `stemMultiplier`,`i`.`itemPackingTypeFk` AS `itemPackingTypeFk`,`i`.`packingOut` AS `packingOut` from `vn`.`item` `i` */;
+/*!50001 VIEW `Articles` AS select `i`.`id` AS `Id_Article`,`i`.`name` AS `Article`,`i`.`typeFk` AS `tipo_id`,`i`.`size` AS `Medida`,`i`.`inkFk` AS `Color`,`i`.`category` AS `Categoria`,`i`.`stems` AS `Tallos`,`i`.`originFk` AS `id_origen`,`i`.`description` AS `description`,`i`.`producerFk` AS `producer_id`,`i`.`intrastatFk` AS `Codintrastat`,`i`.`box` AS `caja`,`i`.`expenseFk` AS `expenseFk`,`i`.`comment` AS `comments`,`i`.`relevancy` AS `relevancy`,`i`.`image` AS `Foto`,`i`.`generic` AS `generic`,`i`.`density` AS `density`,`i`.`minPrice` AS `PVP`,`i`.`hasMinPrice` AS `Min`,`i`.`isActive` AS `isActive`,`i`.`longName` AS `longName`,`i`.`subName` AS `subName`,`i`.`tag5` AS `tag5`,`i`.`value5` AS `value5`,`i`.`tag6` AS `tag6`,`i`.`value6` AS `value6`,`i`.`tag7` AS `tag7`,`i`.`value7` AS `value7`,`i`.`tag8` AS `tag8`,`i`.`value8` AS `value8`,`i`.`tag9` AS `tag9`,`i`.`value9` AS `value9`,`i`.`tag10` AS `tag10`,`i`.`value10` AS `value10`,`i`.`minimum` AS `minimum`,`i`.`upToDown` AS `upToDown`,`i`.`hasKgPrice` AS `hasKgPrice`,`i`.`equivalent` AS `Equivalente`,`i`.`isToPrint` AS `Imprimir`,`i`.`doPhoto` AS `do_photo`,`i`.`created` AS `odbc_date`,`i`.`isFloramondo` AS `isFloramondo`,`i`.`supplyResponseFk` AS `supplyResponseFk`,`i`.`stemMultiplier` AS `stemMultiplier`,`i`.`itemPackingTypeFk` AS `itemPackingTypeFk`,`i`.`packingOut` AS `packingOut` from `vn`.`item` `i` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89296,7 +88262,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `Cubos` AS select `p`.`id` AS `Id_Cubo`,`p`.`volume` AS `Volumen`,`p`.`width` AS `X`,`p`.`depth` AS `Y`,`p`.`height` AS `Z`,`p`.`isPackageReturnable` AS `Retornable`,`p`.`created` AS `odbc_date`,`p`.`itemFk` AS `item_id`,`p`.`price` AS `pvp`,`p`.`cubicPackage` AS `bultoCubico`,`p`.`value` AS `Valor`,`p`.`packagingReturnFk` AS `idCubos_Retorno`,`p`.`lower` AS `Bajan`,`p`.`upload` AS `Suben`,`p`.`base` AS `Base`,`p`.`isBox` AS `box`,`p`.`returnCost` AS `costeRetorno` from `vn`.`packaging` `p` */;
+/*!50001 VIEW `Cubos` AS select `p`.`id` AS `Id_Cubo`,`p`.`volume` AS `Volumen`,`p`.`width` AS `X`,`p`.`depth` AS `Y`,`p`.`height` AS `Z`,`p`.`isPackageReturnable` AS `Retornable`,`p`.`created` AS `odbc_date`,`p`.`itemFk` AS `item_id`,`p`.`price` AS `pvp`,`p`.`cubicPackage` AS `bultoCubico`,`p`.`value` AS `Valor`,`p`.`packagingReturnFk` AS `idCubos_Retorno`,`p`.`lower` AS `Bajan`,`p`.`upload` AS `Suben`,`p`.`base` AS `Base`,`p`.`isBox` AS `box`,`p`.`returnCost` AS `costeRetorno`,`p`.`isActive` AS `isActive` from `vn`.`packaging` `p` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -91240,7 +90206,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `state` AS select `s`.`id` AS `id`,`s`.`name` AS `name`,`s`.`order` AS `order`,`s`.`alertLevel` AS `alert_level`,`s`.`code` AS `code`,`s`.`sectorProdPriority` AS `sectorProdPriority`,`s`.`nextStateFk` AS `nextStateFk`,`s`.`isPreviousPreparable` AS `isPreviousPreparable`,`s`.`isPicked` AS `isPicked` from `vn`.`state` `s` */;
+/*!50001 VIEW `state` AS select `s`.`id` AS `id`,`s`.`name` AS `name`,`s`.`order` AS `order`,`s`.`alertLevel` AS `alert_level`,`s`.`code` AS `code`,`s`.`nextStateFk` AS `nextStateFk`,`s`.`isPreviousPreparable` AS `isPreviousPreparable`,`s`.`isPicked` AS `isPicked` from `vn`.`state` `s` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -91506,4 +90472,4 @@ USE `vn2008`;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-09-18 9:32:42
+-- Dump completed on 2024-10-03 7:42:53
diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql
index b0879a9c5..74190df36 100644
--- a/db/dump/.dump/triggers.sql
+++ b/db/dump/.dump/triggers.sql
@@ -4306,35 +4306,13 @@ DELIMITER ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
-/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`creditInsurance_beforeInsert`
- BEFORE INSERT ON `creditInsurance`
- FOR EACH ROW
-BEGIN
- IF NEW.creditClassificationFk THEN
- SET NEW.creditClassification = NEW.creditClassificationFk;
- 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=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`creditInsurance_afterInsert`
AFTER INSERT ON `creditInsurance`
FOR EACH ROW
BEGIN
UPDATE `client` c
JOIN vn.creditClassification cc ON cc.client = c.id
- SET creditInsurance = NEW.credit WHERE cc.id = NEW.creditClassification;
+ SET creditInsurance = NEW.credit WHERE cc.id = NEW.creditClassificationFk;
END */;;
DELIMITER ;
@@ -5018,7 +4996,10 @@ BEGIN
SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
END IF;
- IF NOT (NEW.travelFk <=> OLD.travelFk) OR NOT (NEW.currencyFk <=> OLD.currencyFk) THEN
+ IF NOT (NEW.travelFk <=> OLD.travelFk)
+ OR NOT (NEW.currencyFk <=> OLD.currencyFk)
+ OR NOT (NEW.supplierFk <=> OLD.supplierFk) THEN
+
SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk, NEW.supplierFk);
END IF;
END */;;
@@ -5552,7 +5533,7 @@ 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`.`host_beforeInsert`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`host_beforeInsert`
BEFORE INSERT ON `host`
FOR EACH ROW
BEGIN
@@ -6518,6 +6499,36 @@ BEGIN
SET NEW.userFk = account.myUser_getId();
SET NEW.available = NEW.visible;
+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=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`itemShelving_afterInsert`
+ AFTER INSERT ON `itemShelving`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO itemShelvingLog
+ SET itemShelvingFk = NEW.id,
+ workerFk = account.myUser_getId(),
+ accion = 'CREA REGISTRO',
+ itemFk = NEW.itemFk,
+ shelvingFk = NEW.shelvingFk,
+ visible = NEW.visible,
+ `grouping` = NEW.`grouping`,
+ packing = NEW.packing,
+ available = NEW.available;
+
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -7925,7 +7936,7 @@ 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`.`roadmap_beforeInsert`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`roadmap_beforeInsert`
BEFORE INSERT ON `roadmap`
FOR EACH ROW
BEGIN
@@ -7949,7 +7960,7 @@ 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`.`roadmap_beforeUpdate`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`roadmap_beforeUpdate`
BEFORE UPDATE ON `roadmap`
FOR EACH ROW
BEGIN
@@ -8604,7 +8615,7 @@ 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`.`saleGroupDetail_beforeInsert`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`saleGroupDetail_beforeInsert`
BEFORE INSERT ON `saleGroupDetail`
FOR EACH ROW
BEGIN
@@ -8624,7 +8635,7 @@ 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`.`saleGroupDetail_beforeUpdate`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`saleGroupDetail_beforeUpdate`
BEFORE UPDATE ON `saleGroupDetail`
FOR EACH ROW
BEGIN
@@ -8644,7 +8655,7 @@ 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`.`saleGroupDetail_afterDelete`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`saleGroupDetail_afterDelete`
AFTER DELETE ON `saleGroupDetail`
FOR EACH ROW
BEGIN
@@ -8925,7 +8936,7 @@ DELIMITER ;;
BEGIN
UPDATE client c
JOIN creditClassification cc ON cc.client = c.id
- JOIN creditInsurance ci ON ci.creditClassification = cc.id
+ JOIN creditInsurance ci ON ci.creditClassificationFk = cc.id
SET creditInsurance = ci.credit * 2 WHERE ci.id = NEW.creditInsurance;
END */;;
DELIMITER ;
@@ -8949,12 +8960,12 @@ BEGIN
IF NEW.dateLeaving IS NOT NULL THEN
UPDATE client c
JOIN creditClassification cc ON cc.client = c.id
- JOIN creditInsurance ci ON ci.creditClassification = cc.id
+ JOIN creditInsurance ci ON ci.creditClassificationFk = cc.id
SET creditInsurance = ci.credit WHERE ci.id = OLD.creditInsurance;
ELSE
UPDATE client c
JOIN creditClassification cc ON cc.client = c.id
- JOIN creditInsurance ci ON ci.creditClassification = cc.id
+ JOIN creditInsurance ci ON ci.creditClassificationFk = cc.id
SET creditInsurance = ci.credit * 2 WHERE ci.id = OLD.creditInsurance;
END IF;
END */;;
@@ -8978,7 +8989,7 @@ DELIMITER ;;
BEGIN
UPDATE client c
JOIN creditClassification cc ON cc.client = c.id
- JOIN creditInsurance ci ON ci.creditClassification = cc.id
+ JOIN creditInsurance ci ON ci.creditClassificationFk = cc.id
SET creditInsurance = ci.credit WHERE ci.id = OLD.creditInsurance;
END */;;
DELIMITER ;
@@ -10852,8 +10863,8 @@ DELIMITER ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
-/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerDocument_beforeInsert`
- BEFORE INSERT ON `workerDocument`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerDms_beforeInsert`
+ BEFORE INSERT ON `workerDms`
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
@@ -10872,8 +10883,8 @@ DELIMITER ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
-/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerDocument_beforeUpdate`
- BEFORE UPDATE ON `workerDocument`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerDms_beforeUpdate`
+ BEFORE UPDATE ON `workerDms`
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
@@ -10892,13 +10903,13 @@ DELIMITER ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
-/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerDocument_afterDelete`
- AFTER DELETE ON `workerDocument`
+/*!50003 CREATE*/ /*!50017 DEFINER=`vn`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerDms_afterDelete`
+ AFTER DELETE ON `workerDms`
FOR EACH ROW
BEGIN
INSERT INTO workerLog
SET `action` = 'delete',
- `changedModel` = 'WorkerDocument',
+ `changedModel` = 'WorkerDms',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
END */;;
@@ -11458,4 +11469,4 @@ USE `vn2008`;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-09-18 9:32:59
+-- Dump completed on 2024-10-03 7:43:14
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index ffbc6a864..d475ef02f 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -179,12 +179,13 @@ INSERT INTO `vn`.`country`(`id`, `name`, `isUeeMember`, `code`, `currencyFk`, `i
(30,'Canarias', 1, 'IC', 1, 24, 4, 1, 2);
INSERT INTO `vn`.`warehouse`(`id`, `name`, `code`, `isComparative`, `isInventory`, `hasAvailable`, `isManaged`, `hasDms`, `hasComission`, `countryFk`, `hasProduction`, `isOrigin`, `isDestiny`)
- VALUES (1, 'Warehouse One', 'ALG', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+ VALUES
+ (1, 'Warehouse One', 'ALG', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
(2, 'Warehouse Two', NULL, 1, 1, 1, 1, 0, 1, 13, 1, 1, 0),
(3, 'Warehouse Three', NULL, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0),
(4, 'Warehouse Four', NULL, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1),
(5, 'Warehouse Five', NULL, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0),
- (6, 'Warehouse six', 'VNH', 1, 1, 1, 1, 0, 0, 1, 1, 0, 0),
+ (6, 'Warehouse six', 'vnh', 1, 1, 1, 1, 0, 0, 1, 1, 0, 0),
(13, 'Inventory', 'inv', 1, 1, 1, 0, 0, 0, 1, 0, 0, 0),
(60, 'Algemesi', NULL, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0);
@@ -1544,7 +1545,7 @@ INSERT INTO `bs`.`waste`(`buyerFk`, `year`, `week`, `itemFk`, `itemTypeFk`, `sal
('103', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 6, 1, '186', '0', '51', '53.12', '56.20', '56.20', '56.20'),
('103', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 7, 1, '277', '0', '53.12', '56.20', '56.20', '56.20', '56.20');
-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)
+ 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, '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),
@@ -1560,7 +1561,7 @@ INSERT INTO vn.buy(id,entryFk,itemFk,buyingValue,quantity,packagingFk,stickers,f
(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()),
+ (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()),
(16, 99,1,50.0000, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.60, 99.40, 0, 1, 0, 1.00, '2024-07-30 08:13:51.000');
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`)
@@ -2442,30 +2443,32 @@ INSERT INTO `vn`.`workerTimeControl`(`userFk`, `timed`, `manual`, `direction`, `
(1107, CONCAT(util.VN_CURDATE(), ' 10:20'), TRUE, 'middle', 1),
(1107, CONCAT(util.VN_CURDATE(), ' 14:50'), TRUE, 'out', 1);
-INSERT INTO `vn`.`dmsType`(`id`, `name`, `readRoleFk`, `writeRoleFk`, `code`)
+INSERT INTO `vn`.`dmsType`
+ (`id`, `name`, `readRoleFk`, `writeRoleFk`, `code`)
VALUES
- (1, 'Facturas Recibidas', NULL, NULL, 'invoiceIn'),
- (2, 'Doc oficial', NULL, NULL, 'officialDoc'),
- (3, 'Laboral', 37, 37, 'hhrrData'),
- (4, 'Albaranes recibidos', NULL, NULL, 'deliveryNote'),
- (5, 'Otros', 1, 1, 'miscellaneous'),
- (6, 'Pruebas', NULL, NULL, 'tests'),
- (7, 'IAE Clientes', 1, 1, 'economicActivitiesTax'),
- (8, 'Fiscal', NULL, NULL, 'fiscal'),
- (9, 'Vehiculos', NULL, NULL, 'vehicles'),
- (10, 'Plantillas', NULL, NULL, 'templates'),
- (11, 'Contratos', NULL, NULL, 'contracts'),
- (12, 'ley de pagos', 1, 1, 'paymentsLaw'),
- (13, 'Basura', 1, 1, 'trash'),
- (14, 'Ticket', 1, 1, 'ticket'),
- (15, 'Presupuestos', NULL, NULL, 'budgets'),
- (16, 'Logistica', NULL, NULL, 'logistics'),
- (17, 'cmr', 1, 1, 'cmr'),
- (18, 'dua', NULL, NULL, 'dua'),
- (19, 'inmovilizado', NULL, NULL, 'fixedAssets'),
- (20, 'Reclamación', 1, 1, 'claim'),
- (21, 'Entrada', 1, 1, 'entry'),
- (22, 'Proveedor', 1, 1, 'supplier');
+ (1, 'Facturas Recibidas', NULL, NULL, 'invoiceIn'),
+ (2, 'Doc oficial', NULL, NULL, 'officialDoc'),
+ (3, 'Laboral', 37, 37, 'hhrrData'),
+ (4, 'Albaranes recibidos', NULL, NULL, 'deliveryNote'),
+ (5, 'Otros', 1, 1, 'miscellaneous'),
+ (6, 'Pruebas', NULL, NULL, 'tests'),
+ (7, 'IAE Clientes', 1, 1, 'economicActivitiesTax'),
+ (8, 'Fiscal', NULL, NULL, 'fiscal'),
+ (9, 'Vehiculos', NULL, NULL, 'vehicles'),
+ (10, 'Plantillas', NULL, NULL, 'templates'),
+ (11, 'Contratos', NULL, NULL, 'contracts'),
+ (12, 'ley de pagos', 1, 1, 'paymentsLaw'),
+ (13, 'Basura', 1, 1, 'trash'),
+ (14, 'Ticket', 1, 1, 'ticket'),
+ (15, 'Presupuestos', NULL, NULL, 'budgets'),
+ (16, 'Logistica', NULL, NULL, 'logistics'),
+ (17, 'cmr', 1, 1, 'cmr'),
+ (18, 'dua', NULL, NULL, 'dua'),
+ (19, 'inmovilizado', NULL, NULL, 'fixedAssets'),
+ (20, 'Reclamación', 1, 1, 'claim'),
+ (21, 'Entrada', 1, 1, 'entry'),
+ (22, 'Proveedor', 1, 1, 'supplier'),
+ (23, 'Termografos', 35, 35, 'thermograph');
INSERT INTO `vn`.`dms`(`id`, `dmsTypeFk`, `file`, `contentType`, `workerFk`, `warehouseFk`, `companyFk`, `hardCopyNumber`, `hasFile`, `reference`, `description`, `created`)
VALUES
@@ -2473,7 +2476,7 @@ INSERT INTO `vn`.`dms`(`id`, `dmsTypeFk`, `file`, `contentType`, `workerFk`, `wa
(2, 5, '2.txt', 'text/plain', 5, 1, 442, 1, TRUE, 'Client:104', 'Client:104 dms for the client', util.VN_CURDATE()),
(3, 5, '3.txt', 'text/plain', 5, 1, 442, NULL, TRUE, 'Client: 104', 'Client:104 readme', util.VN_CURDATE()),
(4, 3, '4.txt', 'text/plain', 5, 1, 442, NULL, TRUE, 'Worker: 106', 'Worker:106 readme', util.VN_CURDATE()),
- (5, 5, '5.txt', 'text/plain', 5, 1, 442, NULL, TRUE, 'travel: 1', 'dmsForThermograph', util.VN_CURDATE()),
+ (5, 23, '5.txt', 'text/plain', 5, 1, 442, NULL, TRUE, 'travel: 1', 'dmsForThermograph', util.VN_CURDATE()),
(6, 5, '6.txt', 'text/plain', 5, 1, 442, NULL, TRUE, 'NotExists', 'DoesNotExists', util.VN_CURDATE()),
(7, 20, '7.jpg', 'image/jpeg', 9, 1, 442, NULL, FALSE, '1', 'TICKET ID DEL CLIENTE BRUCE WAYNE ID 1101', util.VN_CURDATE()),
(8, 20, '8.mp4', 'video/mp4', 9, 1, 442, NULL, FALSE, '1', 'TICKET ID DEL CLIENTE BRUCE WAYNE ID 1101', util.VN_CURDATE()),
@@ -3188,7 +3191,7 @@ UPDATE vn.department
SET workerFk = null;
INSERT INTO vn.packaging
- VALUES('--', 2745600.00, 100.00, 120.00, 220.00, 0.00, 1, '2001-01-01 00:00:00.000', NULL, NULL, NULL, 0.00, 16, 0.00, 0, NULL, 0.00, NULL, NULL, 0, NULL, 0, 0,0);
+ VALUES('--', 2745600.00, 100.00, 120.00, 220.00, 0.00, 1, '2001-01-01 00:00:00.000', NULL, NULL, NULL, 0.00, 16, 0.00, 0, NULL, 0.00, NULL, NULL, 0, NULL, 0, 0,0,1);
INSERT IGNORE INTO vn.intrastat
@@ -3939,38 +3942,71 @@ INSERT INTO vn.medicalReview
(id, workerFk, centerFk, `date`, `time`, isFit, amount, invoice, remark)
VALUES(3, 9, 2, '2000-01-01', '8:00', 1, 150.0, NULL, NULL);
-INSERT INTO vn.stockBought (workerFk, bought, reserve, dated)
- VALUES(35, 1.00, 1.00, '2001-01-01');
-
-INSERT INTO vn.auctionConfig (id,conversionCoefficient,warehouseFk)
+INSERT INTO vn.stockBought (workerFk, bought, reserve, dated)
+ VALUES(35, 1.00, 1.00, '2001-01-01');
+INSERT INTO vn.auctionConfig (id,conversionCoefficient,warehouseFk)
VALUES (1,0.6,6);
-INSERT INTO vn.payrollComponent (id, name, isSalaryAgreed, isVariable, isException)
- VALUES (1, 'Salario1', 1, 0, 0),
+INSERT INTO vn.payrollComponent
+(id, name, isSalaryAgreed, isVariable, isException)
+ VALUES
+ (1, 'Salario1', 1, 0, 0),
(2, 'Salario2', 1, 1, 0),
(3, 'Salario3', 1, 0, 1);
-INSERT INTO vn.workerIncome (debit, credit, incomeTypeFk, paymentDate, workerFk, concept)
- VALUES (1000.00, 900.00, 2, '2000-01-01', 1106, NULL),
+
+INSERT INTO vn.workerIncome
+(debit, credit, incomeTypeFk, paymentDate, workerFk, concept)
+ VALUES
+ (1000.00, 900.00, 2, '2000-01-01', 1106, NULL),
(1001.00, 800.00, 2, '2000-01-01', 1106, NULL);
-INSERT INTO dipole.printer (id, description) VALUES(1, '');
-INSERT INTO dipole.expedition_PrintOut (expeditionFk, ticketFk, addressFk, street, postalCode, city, shopName, isPrinted, created, printerFk, routeFk, parkingCode, truckName, clientFk, phone, province, agency, m3, workerCode, itemFk, quantity, longName, shelvingFk, comments)
- VALUES(1, 1, 0, ' ', ' ', ' ', ' ', 0, '2001-01-01 00:00:00', 1, 0, ' ', ' ', 0, NULL, '', NULL, 0.000, NULL, 10, NULL, NULL, 'NCC', NULL);
+INSERT INTO dipole.printer (id, description)
+VALUES(1, '');
-INSERT INTO vn.accountDetail (id, value, accountDetailTypeFk, supplierAccountFk)
- VALUES (21, 'ES12345B12345678', 3, 241),
- (35, 'ES12346B12345679', 3, 241);
+INSERT INTO dipole.expedition_PrintOut (expeditionFk, ticketFk, addressFk, street, postalCode, city, shopName, isPrinted, created, printerFk, routeFk, parkingCode,
+truckName, clientFk, phone, province, agency, m3, workerCode, itemFk, quantity, longName, shelvingFk, comments)
+VALUES(1, 1, 0, ' ', ' ', ' ', ' ', 0, '2001-01-01 00:00:00', 1, 0, ' ', ' ', 0, NULL, '', NULL, 0.000, NULL, 10, NULL, NULL, 'NCC', NULL);
-INSERT INTO vn.accountDetailType (id, description, code)
- VALUES (1, 'IBAN', 'iban'),
- (2, 'SWIFT', 'swift'),
- (3, 'Referencia Remesas', 'remRef'),
- (4, 'Referencia Transferencias', 'trnRef'),
- (5, 'Referencia Nominas', 'payRef'),
- (6, 'ABA', 'aba');
+INSERT INTO vn.accountDetail
+(id, value, accountDetailTypeFk, supplierAccountFk)
+VALUES
+ (21, 'ES12345B12345678', 3, 241),
+ (35, 'ES12346B12345679', 3, 241);
+
+INSERT INTO vn.accountDetailType
+(id, description, code)
+VALUES
+ (1, 'IBAN', 'iban'),
+ (2, 'SWIFT', 'swift'),
+ (3, 'Referencia Remesas', 'remRef'),
+ (4, 'Referencia Transferencias', 'trnRef'),
+ (5, 'Referencia Nominas', 'payRef'),
+ (6, 'ABA', 'aba');
INSERT IGNORE INTO ormConfig
SET id =1,
selectLimit = 1000;
+
+INSERT INTO pbx.queueMultiConfig
+ SET id = 'ring',
+ strategy = 20,
+ timeout = 2,
+ retry = 0,
+ weight = 0,
+ maxLen = 0,
+ ringInUse = 0;
+
+INSERT INTO pbx.queue (description, name, config)
+ VALUES ('X-men', '1000', 1),
+ ('Avengers', '2000', 1);
+
+INSERT IGNORE INTO pbx.queueMember
+ SET queue = '1000',
+ extension = '1010';
+
+UPDATE vn.department SET pbxQueue = '1000' WHERE name = "CAMARA";
+UPDATE vn.department SET pbxQueue = '2000' WHERE name = "VENTAS";
+
+
diff --git a/db/routines/hedera/procedures/orderRow_updateOverstocking.sql b/db/routines/hedera/procedures/orderRow_updateOverstocking.sql
new file mode 100644
index 000000000..bbfa9432a
--- /dev/null
+++ b/db/routines/hedera/procedures/orderRow_updateOverstocking.sql
@@ -0,0 +1,52 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`vn`@`localhost`
+PROCEDURE `hedera`.`orderRow_updateOverstocking`(vOrderFk INT)
+BEGIN
+/**
+* Set amount = 0 to avoid overbooking sales
+*
+* @param vOrderFk hedera.order.id
+*/
+ DECLARE vCalcFk INT;
+ DECLARE vDone BOOL;
+ DECLARE vWarehouseFk INT;
+
+ DECLARE cWarehouses CURSOR FOR
+ SELECT DISTINCT warehouseFk
+ FROM orderRow
+ WHERE orderFk = vOrderFk
+ AND shipment = util.VN_CURDATE();
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ OPEN cWarehouses;
+ checking: LOOP
+ SET vDone = FALSE;
+
+ FETCH cWarehouses INTO vWarehouseFk;
+
+ IF vDone THEN
+ LEAVE checking;
+ END IF;
+
+ CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, util.VN_CURDATE());
+
+ UPDATE orderRow r
+ JOIN `order` o ON o.id = r.orderFk
+ JOIN orderConfig oc
+ JOIN cache.available a ON a.calc_id = vCalcFk AND a.item_id = r.itemFk
+ SET r.amount = 0
+ WHERE ADDTIME(o.rowUpdated, oc.reserveTime) < util.VN_NOW()
+ AND a.available <= 0
+ AND r.warehouseFk = vWarehouseFk
+ AND r.orderFk = vOrderFk;
+ END LOOP;
+ CLOSE cWarehouses;
+END$$
+DELIMITER ;
diff --git a/db/routines/hedera/procedures/order_confirmWithUser.sql b/db/routines/hedera/procedures/order_confirmWithUser.sql
index 2b033b704..6e4087ad8 100644
--- a/db/routines/hedera/procedures/order_confirmWithUser.sql
+++ b/db/routines/hedera/procedures/order_confirmWithUser.sql
@@ -12,6 +12,7 @@ BEGIN
* @param vUser The user identifier
*/
DECLARE vHasRows BOOL;
+ DECLARE vHas0Amount BOOL;
DECLARE vDone BOOL;
DECLARE vWarehouseFk INT;
DECLARE vShipment DATE;
@@ -97,6 +98,20 @@ BEGIN
SELECT employeeFk INTO vUserFk FROM orderConfig;
END IF;
+ CALL orderRow_updateOverstocking(vSelf);
+
+ -- Check if any product has a quantity of 0
+ SELECT EXISTS (
+ SELECT id
+ FROM orderRow
+ WHERE orderFk = vSelf
+ AND amount = 0
+ ) INTO vHas0Amount;
+
+ IF vHas0Amount THEN
+ CALL util.throw('Remove lines with quantity = 0 before confirming');
+ END IF;
+
START TRANSACTION;
CALL order_checkEditable(vSelf);
diff --git a/db/routines/hedera/triggers/orderRow_afterInsert.sql b/db/routines/hedera/triggers/orderRow_afterInsert.sql
new file mode 100644
index 000000000..44499f225
--- /dev/null
+++ b/db/routines/hedera/triggers/orderRow_afterInsert.sql
@@ -0,0 +1,10 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterInsert`
+ AFTER INSERT ON `orderRow`
+ FOR EACH ROW
+BEGIN
+ UPDATE `order`
+ SET rowUpdated = NOW()
+ WHERE id = NEW.orderFk;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/events/travel_setDelivered.sql b/db/routines/vn/events/travel_setDelivered.sql
index 769ee9d24..396f3e144 100644
--- a/db/routines/vn/events/travel_setDelivered.sql
+++ b/db/routines/vn/events/travel_setDelivered.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`travel_setDelivered`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `vn`.`travel_setDelivered`
ON SCHEDULE EVERY 1 DAY
STARTS '2024-07-12 00:10:00.000'
ON COMPLETION PRESERVE
diff --git a/db/routines/vn/procedures/buy_getUltimate.sql b/db/routines/vn/procedures/buy_getUltimate.sql
index 023e81774..1532222ad 100644
--- a/db/routines/vn/procedures/buy_getUltimate.sql
+++ b/db/routines/vn/procedures/buy_getUltimate.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_getUltimate`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`buy_getUltimate`(
vItemFk INT,
vWarehouseFk SMALLINT,
vDated DATE
diff --git a/db/routines/vn/procedures/buy_getUltimateFromInterval.sql b/db/routines/vn/procedures/buy_getUltimateFromInterval.sql
index 2115beb95..24a843eb0 100644
--- a/db/routines/vn/procedures/buy_getUltimateFromInterval.sql
+++ b/db/routines/vn/procedures/buy_getUltimateFromInterval.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_getUltimateFromInterval`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`buy_getUltimateFromInterval`(
vItemFk INT,
vWarehouseFk SMALLINT,
vStarted DATE,
diff --git a/db/routines/vn/procedures/buy_getVolumeByAgency.sql b/db/routines/vn/procedures/buy_getVolumeByAgency.sql
deleted file mode 100644
index 7393d12d8..000000000
--- a/db/routines/vn/procedures/buy_getVolumeByAgency.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`buy_getVolumeByAgency`(vDated DATE, vAgencyFk INT)
-BEGIN
-
- DROP TEMPORARY TABLE IF EXISTS tmp.buy;
- CREATE TEMPORARY TABLE tmp.buy (buyFk INT NOT NULL, PRIMARY KEY (buyFk)) ENGINE = MEMORY;
-
- INSERT INTO tmp.buy
- SELECT b.id
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed = vDated
- AND t.agencyModeFk IN (0, vAgencyFk);
-
- CALL buy_getVolume();
- DROP TEMPORARY TABLE tmp.buy;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/catalog_componentCalculate.sql b/db/routines/vn/procedures/catalog_componentCalculate.sql
index d4ce88ca7..e29e13a8c 100644
--- a/db/routines/vn/procedures/catalog_componentCalculate.sql
+++ b/db/routines/vn/procedures/catalog_componentCalculate.sql
@@ -29,21 +29,24 @@ BEGIN
(INDEX (itemFk))
ENGINE = MEMORY
SELECT i.id itemFk,
- SUM(IFNULL(pd.absIncreasing,0)) absIncreasing,
- SUM(IFNULL(pd.ratIncreasing,0)) ratIncreasing,
- pd.warehouseFk
- FROM item i
- JOIN priceDelta pd
- ON pd.itemTypeFk = i.typeFk
- AND (pd.minSize IS NULL OR pd.minSize <= i.`size`)
- AND (pd.maxSize IS NULL OR pd.maxSize >= i.`size`)
- AND (pd.inkFk IS NULL OR pd.inkFk = i.inkFk)
- AND (pd.originFk IS NULL OR pd.originFk = i.originFk)
- AND (pd.producerFk IS NULL OR pd.producerFk = i.producerFk)
- AND (pd.warehouseFk IS NULL OR pd.warehouseFk = vWarehouseFk)
- WHERE (pd.fromDated IS NULL OR pd.fromDated <= vShipped)
- AND (pd.toDated IS NULL OR pd.toDated >= vShipped)
- GROUP BY i.id;
+ SUM(IFNULL(pd.absIncreasing,0)) absIncreasing,
+ SUM(IFNULL(pd.ratIncreasing,0)) ratIncreasing,
+ pd.warehouseFk
+ FROM item i
+ JOIN priceDelta pd
+ ON pd.itemTypeFk = i.typeFk
+ AND (pd.minSize IS NULL OR pd.minSize <= i.`size`)
+ AND (pd.maxSize IS NULL OR pd.maxSize >= i.`size`)
+ AND (pd.inkFk IS NULL OR pd.inkFk = i.inkFk)
+ AND (pd.originFk IS NULL OR pd.originFk = i.originFk)
+ AND (pd.producerFk IS NULL OR pd.producerFk = i.producerFk)
+ AND (pd.warehouseFk IS NULL OR pd.warehouseFk = vWarehouseFk)
+ LEFT JOIN zoneGeo zg ON zg.id = pd.zoneGeoFk
+ LEFT JOIN zoneGeo zg2 ON zg2.id = address_getGeo(vAddressFk)
+ WHERE (pd.fromDated IS NULL OR pd.fromDated <= vShipped)
+ AND (pd.toDated IS NULL OR pd.toDated >= vShipped)
+ AND (pd.zoneGeoFk IS NULL OR zg2.lft BETWEEN zg.lft AND zg.rgt)
+ GROUP BY itemFk;
CREATE OR REPLACE TEMPORARY TABLE tSpecialPrice
(INDEX (itemFk))
@@ -130,15 +133,15 @@ BEGIN
-- Bonus del comprador a un rango de productos
INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
- SELECT
+ SELECT
tcb.warehouseFk,
tcb.itemFk,
c.id,
IFNULL(tcb.base * tpd.ratIncreasing / 100,0) + IFNULL(tpd.absIncreasing,0)
FROM tmp.ticketComponentBase tcb
JOIN component c ON c.code = 'bonus'
- JOIN tPriceDelta tpd
- ON tpd.itemFk = tcb.itemFk
+ JOIN tPriceDelta tpd
+ ON tpd.itemFk = tcb.itemFk
AND tpd.warehouseFk = tcb.warehouseFk;
-- RECOBRO
diff --git a/db/routines/vn/procedures/clean.sql b/db/routines/vn/procedures/clean.sql
index a8ca68e5f..d3fed0242 100644
--- a/db/routines/vn/procedures/clean.sql
+++ b/db/routines/vn/procedures/clean.sql
@@ -23,6 +23,13 @@ BEGIN
DELETE FROM messageInbox WHERE sendDate < v2Months;
DELETE FROM messageInbox WHERE sendDate < v2Months;
DELETE FROM workerTimeControl WHERE timed < v4Years;
+ DELETE FROM itemShelvingSale
+ WHERE itemShelvingFk IN (
+ SELECT id
+ FROM itemShelving
+ WHERE created < util.VN_CURDATE()
+ AND visible = 0
+ );
DELETE FROM itemShelving WHERE created < util.VN_CURDATE() AND visible = 0;
DELETE FROM ticketDown WHERE created < util.yesterday();
DELETE IGNORE FROM expedition WHERE created < v26Months;
@@ -50,16 +57,10 @@ BEGIN
DELETE FROM claim WHERE ticketCreated < v4Years;
-- Robert ubicacion anterior de travelLog comentario para debug
DELETE FROM zoneEvent WHERE `type` = 'day' AND dated < v3Months;
- DELETE bm
- FROM buyMark bm
- JOIN buy b ON b.id = bm.id
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed <= v2Months;
DELETE b FROM buy b
JOIN entryConfig e ON e.defaultEntry = b.entryFk
WHERE b.created < v2Months;
- DELETE FROM stockBuyed WHERE creationDate < v2Months;
+ DELETE FROM stockBought WHERE dated < v2Months;
DELETE FROM printQueue WHERE statusCode = 'printed' AND created < v2Months;
-- Equipos duplicados
DELETE w.*
diff --git a/db/routines/vn/procedures/collectionPlacement_get.sql b/db/routines/vn/procedures/collectionPlacement_get.sql
index d81847375..239dbd3a2 100644
--- a/db/routines/vn/procedures/collectionPlacement_get.sql
+++ b/db/routines/vn/procedures/collectionPlacement_get.sql
@@ -55,24 +55,20 @@ BEGIN
SELECT ts.saleFk,
ts.itemFk,
CAST(0 AS DECIMAL(10,0)) saleOrder,
- IF(ish.visible > 0 OR iss.id, 1, 100000) *
- IFNULL(p2.pickingOrder, p.pickingOrder) `order`,
- TO_SECONDS(IF(iss.id,
- iss.created - INTERVAL vCurrentYear YEAR,
- ish.created - INTERVAL YEAR(ish.created) YEAR)) priority,
+ (IF(ish.visible > 0 OR iss.id, 1, 100000) *
+ COALESCE(p2.pickingOrder, p.pickingOrder)) `order`,
+ TO_SECONDS(COALESCE(iss.created, ish.created)) - TO_SECONDS(MAKEDATE(IFNULL(YEAR(iss.created), YEAR(ish.created)), 1)) priority,
CONCAT(
- IF(iss.id,
- CONCAT('< ', IFNULL(wk.`code`, '---'),' > '),
- ''),
- p.`code`) COLLATE utf8_general_ci placement,
+ IF(iss.id, CONCAT('< ', COALESCE(wk.`code`, '---'),' > '), ''),
+ p.`code`
+ ) COLLATE utf8_general_ci placement,
sh.priority shelvingPriority,
sh.code COLLATE utf8_general_ci shelving,
ish.created,
ish.visible,
- IFNULL(
- IF(st.code = 'previousByPacking', ish.packing, g.`grouping`),
- 1) `grouping`,
- st.code = 'previousPrepared' isPreviousPrepared,
+ COALESCE(
+ IF(st.code = 'previousByPacking', ish.packing, g.`grouping`),1) `grouping`,
+ (st.code = 'previousPrepared') isPreviousPrepared,
iss.id itemShelvingSaleFk,
ts.ticketFk,
iss.id,
@@ -80,11 +76,12 @@ BEGIN
iss.userFk,
ts.quantity
FROM tSale ts
- LEFT JOIN (SELECT DISTINCT saleFk
- FROM saleTracking st
- JOIN state s ON s.id = st.stateFk
- WHERE st.isChecked
- AND s.semaphore = 1) st ON st.saleFk = ts.saleFk
+ LEFT JOIN (SELECT st.saleFk
+ FROM saleTracking st
+ JOIN state s ON s.id = st.stateFk
+ WHERE st.isChecked
+ AND s.semaphore = 1
+ GROUP BY st.saleFk) st ON st.saleFk = ts.saleFk
JOIN itemShelving ish ON ish.itemFk = ts.itemFk
JOIN shelving sh ON sh.code = ish.shelvingFk
JOIN parking p ON p.id = sh.parkingFk
@@ -93,14 +90,14 @@ BEGIN
JOIN warehouse w ON w.id = sc.warehouseFk
LEFT JOIN tGrouping g ON g.itemFk = ts.itemFk
LEFT JOIN itemShelvingSale iss ON iss.saleFk = ts.saleFk
- AND iss.itemShelvingFk = ish.id
+ AND iss.itemShelvingFk = ish.id
LEFT JOIN worker wk ON wk.id = iss.userFk
LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = ts.saleFk
LEFT JOIN saleGroup sg ON sg.id = sgd.saleGroupFk
LEFT JOIN parking p2 ON p2.id = sg.parkingFk
WHERE w.id = vWarehouseFk
- AND NOT sc.isHideForPickers
- HAVING (iss.id AND st.saleFk) OR salePreviousPrepared IS NULL;
+ AND NOT sc.isHideForPickers
+ AND ((iss.id AND st.saleFk) OR st.saleFk IS NULL);
CREATE OR REPLACE TEMPORARY TABLE tSalePlacementList2
(INDEX(saleFk), INDEX(olderPriority))
diff --git a/db/routines/vn/procedures/collection_assign.sql b/db/routines/vn/procedures/collection_assign.sql
index ba83f1fbb..a4c861c96 100644
--- a/db/routines/vn/procedures/collection_assign.sql
+++ b/db/routines/vn/procedures/collection_assign.sql
@@ -3,7 +3,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`collection_assign`(
vUserFk INT,
OUT vCollectionFk INT
)
-BEGIN
+BEGIN
/**
* Comprueba si existen colecciones libres que se ajustan
* al perfil del usuario y le asigna la más antigua.
@@ -45,6 +45,12 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
-- Si hay colecciones sin terminar, sale del proceso
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
CALL collection_get(vUserFk);
SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0, pc.maxNotAssignedCollectionLifeTime
@@ -118,9 +124,19 @@ BEGIN
IF vCollectionFk IS NULL THEN
CALL collection_new(vUserFk, vCollectionFk);
- UPDATE `collection`
- SET workerFk = vUserFk
- WHERE id = vCollectionFk;
+ START TRANSACTION;
+
+ SELECT workerFk INTO vCollectionWorker
+ FROM `collection`
+ WHERE id = vCollectionFk FOR UPDATE;
+
+ IF vCollectionWorker IS NULL THEN
+ UPDATE `collection`
+ SET workerFk = vUserFk
+ WHERE id = vCollectionFk;
+ END IF;
+
+ COMMIT;
END IF;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/collection_getTickets.sql b/db/routines/vn/procedures/collection_getTickets.sql
index 0f675041a..fed7a3eb6 100644
--- a/db/routines/vn/procedures/collection_getTickets.sql
+++ b/db/routines/vn/procedures/collection_getTickets.sql
@@ -21,9 +21,8 @@ BEGIN
SELECT tob.ticketFk, tob.description
FROM vn.ticketObservation tob
JOIN vn.ticketCollection tc ON tc.ticketFk = tob.ticketFk
- LEFT JOIN vn.observationType ot ON ot.id = tob.observationTypeFk
- WHERE ot.`code` = 'itemPicker'
- AND tc.collectionFk = vParamFk
+ JOIN vn.observationType ot ON ot.id = tob.observationTypeFk AND ot.`code` = 'itemPicker'
+ WHERE tc.collectionFk = vParamFk OR tc.ticketFk = vParamFk
)
SELECT t.id ticketFk,
IF(!(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
@@ -46,7 +45,7 @@ BEGIN
LEFT JOIN observation ob ON ob.ticketFk = t.id
WHERE t.id = vParamFk
AND t.shipped >= vYesterday
- UNION ALL
+ UNION
SELECT t.id ticketFk,
IF(NOT(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
am.name agencyName,
@@ -67,7 +66,7 @@ BEGIN
LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
LEFT JOIN observation ob ON ob.ticketFk = t.id
WHERE tc.collectionFk = vParamFk
- UNION ALL
+ UNION
SELECT sg.ticketFk,
NULL `level`,
am.name agencyName,
@@ -84,6 +83,7 @@ BEGIN
LEFT JOIN observation ob ON ob.ticketFk = t.id
LEFT JOIN vn.client c ON c.id = t.clientFk
WHERE sc.id = vParamFk
- AND t.shipped >= vYesterday;
+ AND t.shipped >= vYesterday
+ GROUP BY ticketFk;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/collection_mergeSales.sql b/db/routines/vn/procedures/collection_mergeSales.sql
index 26444d6f9..297bdb97e 100644
--- a/db/routines/vn/procedures/collection_mergeSales.sql
+++ b/db/routines/vn/procedures/collection_mergeSales.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_mergeSales`(vCollectionFk INT)
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`collection_mergeSales`(vCollectionFk INT)
BEGIN
DECLARE vDone BOOL;
DECLARE vTicketFk INT;
diff --git a/db/routines/vn/procedures/collection_new.sql b/db/routines/vn/procedures/collection_new.sql
index f04d5241e..480a88f35 100644
--- a/db/routines/vn/procedures/collection_new.sql
+++ b/db/routines/vn/procedures/collection_new.sql
@@ -1,5 +1,8 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`collection_new`(vUserFk INT, OUT vCollectionFk INT)
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`collection_new`(
+ vUserFk INT,
+ OUT vCollectionFk INT
+)
BEGIN
/**
* Genera colecciones de tickets sin asignar trabajador.
@@ -12,30 +15,29 @@ BEGIN
DECLARE vLinesLimit INT;
DECLARE vTicketLines INT;
DECLARE vVolumeLimit DECIMAL;
- DECLARE vTicketVolume DECIMAL;
DECLARE vSizeLimit INT;
+ DECLARE vTicketVolume DECIMAL;
DECLARE vMaxTickets INT;
- DECLARE vStateFk VARCHAR(45);
+ DECLARE vStateCode VARCHAR(45);
DECLARE vFirstTicketFk INT;
- DECLARE vHour INT;
- DECLARE vMinute INT;
DECLARE vWorkerCode VARCHAR(3);
- DECLARE vWagonCounter INT DEFAULT 0;
+ DECLARE vWagonCounter INT DEFAULT 1;
DECLARE vTicketFk INT;
DECLARE vItemPackingTypeFk VARCHAR(1);
- DECLARE vHasAssignedTickets BOOLEAN;
+ DECLARE vHasAssignedTickets BOOL;
DECLARE vHasUniqueCollectionTime BOOL;
- DECLARE vDone INT DEFAULT FALSE;
- DECLARE vLockName VARCHAR(215);
- DECLARE vLockTime INT DEFAULT 30;
+ DECLARE vHeight INT;
+ DECLARE vVolume INT;
+ DECLARE vLiters INT;
+ DECLARE vLines INT;
+ DECLARE vTotalLines INT DEFAULT 0;
+ DECLARE vTotalVolume INT DEFAULT 0;
DECLARE vFreeWagonFk INT;
- DECLARE vErrorNumber INT;
- DECLARE vErrorMsg TEXT;
+ DECLARE vDone INT DEFAULT FALSE;
- DECLARE c1 CURSOR FOR
+ DECLARE vTickets CURSOR FOR
SELECT ticketFk, `lines`, m3
FROM tmp.productionBuffer
- WHERE ticketFk <> vFirstTicketFk
ORDER BY HH,
mm,
productionOrder DESC,
@@ -48,26 +50,6 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- GET DIAGNOSTICS CONDITION 1
- vErrorNumber = MYSQL_ERRNO,
- vErrorMsg = MESSAGE_TEXT;
-
- CALL util.debugAdd('collection_new', JSON_OBJECT(
- 'errorNumber', vErrorNumber,
- 'errorMsg', vErrorMsg,
- 'lockName', vLockName,
- 'userFk', vUserFk,
- 'ticketFk', vTicketFk
- )); -- Tmp
-
- IF vLockName IS NOT NULL THEN
- DO RELEASE_LOCK(vLockName);
- END IF;
- RESIGNAL;
- END;
-
SELECT pc.ticketTrolleyMax * o.numberOfWagons,
pc.hasUniqueCollectionTime,
w.code,
@@ -78,36 +60,26 @@ BEGIN
o.trainFk,
o.linesLimit,
o.volumeLimit,
- o.sizeLimit,
- pc.collection_new_lockname
+ o.sizeLimit
INTO vMaxTickets,
- vHasUniqueCollectionTime,
- vWorkerCode,
- vWarehouseFk,
- vItemPackingTypeFk,
- vStateFk,
- vWagons,
- vTrainFk,
- vLinesLimit,
- vVolumeLimit,
- vSizeLimit,
- vLockName
- FROM productionConfig pc
- JOIN worker w ON w.id = vUserFk
+ vHasUniqueCollectionTime,
+ vWorkerCode,
+ vWarehouseFk,
+ vItemPackingTypeFk,
+ vStateCode,
+ vWagons,
+ vTrainFk,
+ vLinesLimit,
+ vVolumeLimit,
+ vSizeLimit
+ FROM worker w
+ JOIN operator o ON o.workerFk = w.id
JOIN state st ON st.`code` = 'ON_PREPARATION'
- JOIN operator o ON o.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;
+ JOIN productionConfig pc
+ WHERE w.id = vUserFk;
-- Se prepara el tren, con tantos vagones como sea necesario.
+
CREATE OR REPLACE TEMPORARY TABLE tTrain
(wagon INT,
shelve INT,
@@ -118,59 +90,60 @@ BEGIN
PRIMARY KEY(wagon, shelve))
ENGINE = MEMORY;
- WHILE vWagons > vWagonCounter DO
- SET vWagonCounter = vWagonCounter + 1;
-
- INSERT INTO tTrain(wagon, shelve, liters, `lines`, height)
- SELECT vWagonCounter, cv.`level` , cv.liters , cv.`lines` , cv.height
- FROM collectionVolumetry cv
- WHERE cv.trainFk = vTrainFk
+ INSERT INTO tTrain (wagon, shelve, liters, `lines`, height)
+ WITH RECURSIVE wagonSequence AS (
+ SELECT vWagonCounter wagon
+ UNION ALL
+ SELECT wagon + 1 wagon
+ FROM wagonSequence
+ WHERE wagon < vWagonCounter + vWagons -1
+ )
+ SELECT ws.wagon, cv.`level`, cv.liters, cv.`lines`, cv.height
+ FROM wagonSequence ws
+ JOIN vn.collectionVolumetry cv ON cv.trainFk = vTrainFk
AND cv.itemPackingTypeFk = vItemPackingTypeFk;
- END WHILE;
-- Esto desaparecerá cuando tengamos la table cache.ticket
+
CALL productionControl(vWarehouseFk, 0);
ALTER TABLE tmp.productionBuffer
ADD COLUMN liters INT,
ADD COLUMN height INT;
- -- Se obtiene nº de colección.
- INSERT INTO collection
- SET itemPackingTypeFk = vItemPackingTypeFk,
- trainFk = vTrainFk,
- wagons = vWagons,
- warehouseFk = vWarehouseFk;
-
- SELECT LAST_INSERT_ID() INTO vCollectionFk;
-
-- Los tickets de recogida en Algemesí sólo se sacan si están asignados.
-- Los pedidos con riesgo no se sacan aunque se asignen.
- DELETE pb.*
+
+ DELETE pb
FROM tmp.productionBuffer pb
JOIN state s ON s.id = pb.state
WHERE (pb.agency = 'REC_ALGEMESI'
AND s.code <> 'PICKER_DESIGNED')
OR pb.problem LIKE '%RIESGO%';
- -- Comprobamos si hay tickets asignados. En ese caso, nos centramos
- -- exclusivamente en esos tickets y los sacamos independientemente
- -- de problemas o tamaños
- SELECT COUNT(*) INTO vHasAssignedTickets
- FROM tmp.productionBuffer pb
- JOIN state s ON s.id = pb.state
- WHERE s.code = 'PICKER_DESIGNED'
- AND pb.workerCode = vWorkerCode;
+ -- Si hay tickets asignados, nos centramos exclusivamente en esos tickets
+ -- y los sacamos independientemente de problemas o tamaños
- -- Se dejan en la tabla tmp.productionBuffer sólo aquellos tickets adecuados
- IF vHasAssignedTickets THEN
- DELETE pb.*
+ SELECT EXISTS (
+ SELECT TRUE
FROM tmp.productionBuffer pb
JOIN state s ON s.id = pb.state
- WHERE s.code <> 'PICKER_DESIGNED'
- OR pb.workerCode <> vWorkerCode;
+ WHERE (s.code = 'PICKER_DESIGNED'
+ AND pb.workerCode = vWorkerCode)
+ OR s.code = 'LAST_CALL'
+ ) INTO vHasAssignedTickets;
+
+ -- Se dejan en la tabla tmp.productionBuffer sólo aquellos tickets adecuados
+
+ IF vHasAssignedTickets THEN
+ DELETE pb
+ FROM tmp.productionBuffer pb
+ JOIN state s ON s.id = pb.state
+ WHERE (s.code <> 'PICKER_DESIGNED'
+ OR pb.workerCode <> vWorkerCode)
+ AND s.code <> 'LAST_CALL';
ELSE
- DELETE pb.*
+ DELETE pb
FROM tmp.productionBuffer pb
JOIN state s ON s.id = pb.state
JOIN agencyMode am ON am.id = pb.agencyModeFk
@@ -193,26 +166,25 @@ BEGIN
OR (NOT pb.H AND pb.V > 0 AND vItemPackingTypeFk = 'H')
OR (NOT pb.V AND vItemPackingTypeFk = 'V')
OR (pc.isPreviousPreparationRequired AND pb.previousWithoutParking)
- OR LENGTH(pb.problem) > 0
+ OR LENGTH(pb.problem)
OR pb.lines > vLinesLimit
OR pb.m3 > vVolumeLimit
OR sub.maxSize > vSizeLimit
OR pb.hasPlantTray;
END IF;
- -- Es importante que el primer ticket se coja en todos los casos
- SELECT ticketFk,
- HH,
- mm,
- `lines`,
- m3
- INTO vFirstTicketFk,
- vHour,
- vMinute,
- vTicketLines,
- vTicketVolume
+ -- Hay que excluir aquellos que no tengan la misma hora de preparacion, si procede
+
+ IF vHasUniqueCollectionTime THEN
+ DELETE pb
+ FROM tmp.productionBuffer pb
+ JOIN tmp.productionBuffer pb2 ON pb2.ticketFk = vFirstTicketFk
+ AND (pb.HH <> pb2.HH OR pb.mm <> pb2.mm);
+ END IF;
+
+ SELECT ticketFk INTO vFirstTicketFk
FROM tmp.productionBuffer
- ORDER BY HH,
+ ORDER BY HH,
mm,
productionOrder DESC,
m3 DESC,
@@ -222,44 +194,37 @@ BEGIN
ticketFk
LIMIT 1;
- -- Hay que excluir aquellos que no tengan la misma hora de preparacion, si procede
- IF vHasUniqueCollectionTime THEN
- DELETE FROM tmp.productionBuffer
- WHERE HH <> vHour
- OR mm <> vMinute;
- END IF;
-
- SET vTicketFk = vFirstTicketFk;
- SET @lines = 0;
- SET @volume = 0;
-
- OPEN c1;
- read_loop: LOOP
+ OPEN vTickets;
+ l: LOOP
SET vDone = FALSE;
+ FETCH vTickets INTO vTicketFk, vTicketLines, vTicketVolume;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
-- Buscamos un ticket que cumpla con los requisitos en el listado
- IF ((vTicketLines + @lines) <= vLinesLimit OR vLinesLimit IS NULL)
- AND ((vTicketVolume + @volume) <= vVolumeLimit OR vVolumeLimit IS NULL) THEN
+
+ IF (vLinesLimit IS NULL OR (vTotalLines + vTicketLines) <= vLinesLimit)
+ AND (vVolumeLimit IS NULL OR (vTotalVolume + vTicketVolume) <= vVolumeLimit) THEN
CALL ticket_splitItemPackingType(vTicketFk, vItemPackingTypeFk);
DROP TEMPORARY TABLE tmp.ticketIPT;
+ SELECT COUNT(*), SUM(litros), MAX(i.`size`), SUM(sv.volume)
+ INTO vLines, vLiters, vHeight, vVolume
+ FROM saleVolume sv
+ JOIN sale s ON s.id = sv.saleFk
+ JOIN item i ON i.id = s.itemFk
+ WHERE sv.ticketFk = vTicketFk;
+
+ SET vTotalVolume = vTotalVolume + vVolume,
+ vTotalLines = vTotalLines + vLines;
+
UPDATE tmp.productionBuffer pb
- JOIN (
- SELECT SUM(litros) liters,
- @lines:= COUNT(*) + @lines,
- COUNT(*) `lines`,
- MAX(i.`size`) height,
- @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
- WHERE sv.ticketFk = vTicketFk
- ) sub
- SET pb.liters = sub.liters,
- pb.`lines` = sub.`lines`,
- pb.height = sub.height
+ SET pb.liters = vLiters,
+ pb.`lines` = vLines,
+ pb.height = vHeight
WHERE pb.ticketFk = vTicketFk;
UPDATE tTrain tt
@@ -276,17 +241,13 @@ BEGIN
tt.height
LIMIT 1;
- -- Si no le encuentra una balda adecuada, intentamos darle un carro entero si queda alguno libre
+ -- Si no le encuentra una balda, intentamos darle un carro entero libre
+
IF NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
- SELECT tt.wagon
- INTO vFreeWagonFk
- FROM tTrain tt
- LEFT JOIN (
- SELECT DISTINCT wagon
- FROM tTrain
- WHERE ticketFk IS NOT NULL
- ) nn ON nn.wagon = tt.wagon
- WHERE nn.wagon IS NULL
+ SELECT wagon INTO vFreeWagonFk
+ FROM tTrain
+ GROUP BY wagon
+ HAVING COUNT(ticketFk) = 0
ORDER BY wagon
LIMIT 1;
@@ -295,38 +256,35 @@ BEGIN
SET ticketFk = vFirstTicketFk
WHERE wagon = vFreeWagonFk;
- -- Se anulan el resto de carros libres para que sólo uno lleve un pedido excesivo
- DELETE tt.*
- FROM tTrain tt
- LEFT JOIN (
- SELECT DISTINCT wagon
- FROM tTrain
- WHERE ticketFk IS NOT NULL
- ) nn ON nn.wagon = tt.wagon
- WHERE nn.wagon IS NULL;
- END IF;
- END IF;
+ -- Se anulan el resto de carros libres,
+ -- máximo un carro con pedido excesivo
- FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
- IF vDone OR NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk IS NULL) THEN
- LEAVE read_loop;
- END IF;
- ELSE
- FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
- IF vDone THEN
- LEAVE read_loop;
- END IF;
+ DELETE tt
+ FROM tTrain tt
+ JOIN (SELECT wagon
+ FROM tTrain
+ GROUP BY wagon
+ HAVING COUNT(ticketFk) = 0
+ ) sub ON sub.wagon = tt.wagon;
+ END IF;
+ END IF;
END IF;
END LOOP;
- CLOSE c1;
+ CLOSE vTickets;
IF (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
- UPDATE collection c
- JOIN state st ON st.code = 'ON_PREPARATION'
- SET c.stateFk = st.id
- WHERE c.id = vCollectionFk;
+ -- Se obtiene nº de colección
+
+ INSERT INTO collection
+ SET itemPackingTypeFk = vItemPackingTypeFk,
+ trainFk = vTrainFk,
+ wagons = vWagons,
+ warehouseFk = vWarehouseFk;
+
+ SELECT LAST_INSERT_ID() INTO vCollectionFk;
-- Asigna las bandejas
+
INSERT IGNORE INTO ticketCollection(ticketFk, collectionFk, `level`, wagon, liters)
SELECT tt.ticketFk, vCollectionFk, tt.shelve, tt.wagon, tt.liters
FROM tTrain tt
@@ -334,39 +292,36 @@ BEGIN
ORDER BY tt.wagon, tt.shelve;
-- Actualiza el estado de los tickets
- CALL collection_setState(vCollectionFk, vStateFk);
+
+ CALL collection_setState(vCollectionFk, vStateCode);
-- Aviso para la preparacion previa
+
INSERT INTO ticketDown(ticketFk, collectionFk)
SELECT tc.ticketFk, tc.collectionFk
FROM ticketCollection tc
WHERE tc.collectionFk = vCollectionFk;
- CALL sales_mergeByCollection(vCollectionFk);
+ CALL collection_mergeSales(vCollectionFk);
UPDATE `collection` c
- JOIN (
+ JOIN(
SELECT COUNT(*) saleTotalCount,
SUM(s.isPicked <> 0) salePickedCount
FROM ticketCollection tc
JOIN sale s ON s.ticketFk = tc.ticketFk
- WHERE tc.collectionFk = vCollectionFk
- AND s.quantity > 0
- ) sub
+ WHERE tc.collectionFk = vCollectionFk
+ AND s.quantity > 0
+ )sub
SET c.saleTotalCount = sub.saleTotalCount,
c.salePickedCount = sub.salePickedCount
WHERE c.id = vCollectionFk;
-
ELSE
- DELETE FROM `collection`
- WHERE id = vCollectionFk;
- SET vCollectionFk = NULL;
+ SET vCollectionFk = NULL;
END IF;
- DO RELEASE_LOCK(vLockName);
-
DROP TEMPORARY TABLE
tTrain,
tmp.productionBuffer;
END$$
-DELIMITER ;
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/expeditionPallet_build.sql b/db/routines/vn/procedures/expeditionPallet_build.sql
index 2df73bb85..a33439061 100644
--- a/db/routines/vn/procedures/expeditionPallet_build.sql
+++ b/db/routines/vn/procedures/expeditionPallet_build.sql
@@ -5,22 +5,26 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`expeditionPallet_buil
vWorkerFk INT,
OUT vPalletFk INT
)
-BEGIN
-/** Construye un pallet de expediciones.
+proc: BEGIN
+/**
+ * Builds an expedition pallet.
*
- * Primero comprueba si esas expediciones ya pertenecen a otro pallet,
- * en cuyo caso actualiza ese pallet.
+ * First, it checks if these expeditions already belong to another pallet,
+ * in which case it returns an error.
*
- * @param vExpeditions JSON_ARRAY con esta estructura [exp1, exp2, exp3, ...]
- * @param vArcId INT Identificador de arcRead
- * @param vWorkerFk INT Identificador de worker
- * @param out vPalletFk Identificador de expeditionPallet
+ * @param vExpeditions JSON_ARRAY with this structure [exp1, exp2, exp3, ...]
+ * @param vArcId INT Identifier of arcRead
+ * @param vWorkerFk INT Identifier of worker
+ * @param out vPalletFk Identifier of expeditionPallet
*/
+
DECLARE vCounter INT;
DECLARE vExpeditionFk INT;
DECLARE vTruckFk INT;
DECLARE vPrinterFk INT;
DECLARE vExpeditionStateTypeFk INT;
+ DECLARE vFreeExpeditionCount INT;
+ DECLARE vExpeditionWithPallet INT;
CREATE OR REPLACE TEMPORARY TABLE tExpedition (
expeditionFk INT,
@@ -44,48 +48,63 @@ BEGIN
WHERE e.id = vExpeditionFk;
END WHILE;
- SELECT palletFk INTO vPalletFk
- FROM (
- SELECT palletFk, count(*) n
- FROM tExpedition
- WHERE palletFk > 0
- GROUP BY palletFk
- ORDER BY n DESC
- LIMIT 100
- ) sub
- LIMIT 1;
+ SELECT COUNT(expeditionFk) INTO vFreeExpeditionCount
+ FROM tExpedition
+ WHERE palletFk IS NULL;
- IF vPalletFk IS NULL THEN
- SELECT roadmapStopFk INTO vTruckFk
- FROM (
- SELECT rm.roadmapStopFk, count(*) n
- FROM routesMonitor rm
- JOIN tExpedition e ON e.routeFk = rm.routeFk
- GROUP BY roadmapStopFk
- ORDER BY n DESC
- LIMIT 1
- ) sub;
+ SELECT COUNT(expeditionFk) INTO vExpeditionWithPallet
+ FROM tExpedition
+ WHERE palletFk;
- IF vTruckFk IS NULL THEN
- CALL util.throw ('TRUCK_NOT_AVAILABLE');
- END IF;
-
- INSERT INTO expeditionPallet SET truckFk = vTruckFk;
-
- SET vPalletFk = LAST_INSERT_ID();
+ IF vExpeditionWithPallet THEN
+ UPDATE arcRead
+ SET error = (
+ SELECT GROUP_CONCAT(expeditionFk SEPARATOR ', ')
+ FROM tExpedition
+ WHERE palletFk
+ )
+ WHERE id = vArcId;
+ LEAVE proc;
END IF;
+ IF NOT vFreeExpeditionCount THEN
+ CALL util.throw ('NO_FREE_EXPEDITIONS');
+ END IF;
+
+ SELECT roadmapStopFk INTO vTruckFk
+ FROM (
+ SELECT rm.roadmapStopFk, count(*) n
+ FROM routesMonitor rm
+ JOIN tExpedition e ON e.routeFk = rm.routeFk
+ WHERE e.palletFk IS NULL
+ GROUP BY roadmapStopFk
+ ORDER BY n DESC
+ LIMIT 1
+ ) sub;
+
+ IF vTruckFk IS NULL THEN
+ CALL util.throw ('TRUCK_NOT_AVAILABLE');
+ END IF;
+
+ INSERT INTO expeditionPallet SET truckFk = vTruckFk;
+
+ SET vPalletFk = LAST_INSERT_ID();
+
INSERT INTO expeditionScan(expeditionFk, palletFk, workerFk)
SELECT expeditionFk, vPalletFk, vWorkerFk
FROM tExpedition
- ON DUPLICATE KEY UPDATE palletFk = vPalletFk, workerFk = vWorkerFk;
+ WHERE palletFk IS NULL;
SELECT id INTO vExpeditionStateTypeFk
FROM expeditionStateType
WHERE code = 'PALLETIZED';
-
+
INSERT INTO expeditionState(expeditionFk, typeFk)
- SELECT expeditionFk, vExpeditionStateTypeFk FROM tExpedition;
+ SELECT expeditionFk, vExpeditionStateTypeFk
+ FROM tExpedition
+ WHERE palletFk IS NULL;
+
+ UPDATE arcRead SET error = NULL WHERE id = vArcId;
SELECT printerFk INTO vPrinterFk FROM arcRead WHERE id = vArcId;
diff --git a/db/routines/vn/procedures/invoiceOut_newFromAddress.sql b/db/routines/vn/procedures/invoiceOut_newFromAddress.sql
new file mode 100644
index 000000000..495ace608
--- /dev/null
+++ b/db/routines/vn/procedures/invoiceOut_newFromAddress.sql
@@ -0,0 +1,56 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`invoiceOut_newFromAddress`(
+ IN vAddressFk INT,
+ IN vSerial CHAR(2),
+ IN vMaxShipped DATE,
+ IN vCompanyFk INT,
+ IN vTaxArea VARCHAR(25),
+ IN vRef VARCHAR(25),
+ OUT vInvoiceId INT)
+BEGIN
+/**
+ * Factura los tickets de un consignatario hasta una fecha dada
+ * @param vAddressFk Id del consignatario a facturar
+ * @param vSerial Serie de factura
+ * @param vMaxShipped Fecha hasta la cual cogerá tickets para facturar
+ * @param vCompanyFk Id de la empresa desde la que se factura
+ * @param vTaxArea Tipo de iva en relacion a la empresa y al cliente, NULL por defecto
+ * @param vRef Referencia de la factura en caso que se quiera forzar, NULL por defecto
+ * @return vInvoiceId factura
+ */
+ DECLARE vIsRefEditable BOOLEAN;
+
+ IF vRef IS NOT NULL AND vSerial IS NOT NULL THEN
+ SELECT isRefEditable INTO vIsRefEditable
+ FROM invoiceOutSerial
+ WHERE code = vSerial;
+
+ IF NOT vIsRefEditable THEN
+ CALL util.throw('serial non editable');
+ END IF;
+ END IF;
+
+ DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
+ (PRIMARY KEY (`id`))
+ ENGINE = MEMORY
+ SELECT id FROM ticket t
+ WHERE t.addressFk = vAddressFk
+ AND t.refFk IS NULL
+ AND t.companyFk = vCompanyFk
+ AND t.shipped BETWEEN
+ util.firstDayOfYear(vMaxShipped - INTERVAL 1 YEAR)
+ AND util.dayend(vMaxShipped);
+
+ CALL invoiceOut_new(vSerial, util.VN_CURDATE(), vTaxArea, vInvoiceId);
+
+ UPDATE invoiceOut
+ SET `ref` = vRef
+ WHERE id = vInvoiceId
+ AND vRef IS NOT NULL;
+
+ IF vSerial <> 'R' AND NOT ISNULL(vInvoiceId) AND vInvoiceId <> 0 THEN
+ CALL invoiceOutBooking(vInvoiceId);
+ END IF;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/itemMinimumQuantity_check.sql b/db/routines/vn/procedures/itemMinimumQuantity_check.sql
index fef7cdbdb..a4b15b90a 100644
--- a/db/routines/vn/procedures/itemMinimumQuantity_check.sql
+++ b/db/routines/vn/procedures/itemMinimumQuantity_check.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemMinimumQuantity_check`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemMinimumQuantity_check`(
vSelf INT,
vItemFk INT,
vStarted DATE,
diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql b/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql
index 285b9f93f..08d09c63e 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySaleGroup`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySaleGroup`(
vSaleGroupFk INT(11)
)
BEGIN
diff --git a/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql b/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql
new file mode 100644
index 000000000..9b15e82d1
--- /dev/null
+++ b/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql
@@ -0,0 +1,49 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemShelvingSale_deleteAdded`(
+ vSelf INT(11)
+)
+proc: BEGIN
+/**
+ * Borra una reservea devolviendo la cantidad al itemShelving
+ *
+ * @param vSelf Identificador del itemShelvingSale
+ */
+ DECLARE vSaleFk INT;
+ DECLARE vHasSalesPicked BOOL;
+
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ START TRANSACTION;
+
+ SELECT iss.saleFk INTO vSaleFk
+ FROM itemShelvingSale iss
+ JOIN sale s ON s.id = iss.saleFk
+ WHERE iss.id = vSelf AND s.isAdded
+ FOR UPDATE;
+
+ IF vSaleFk IS NULL THEN
+ CALL util.throw('The sale can not be deleted');
+ END IF;
+
+ SELECT COUNT(*) INTO vHasSalesPicked
+ FROM itemShelvingSale
+ WHERE saleFk = vSaleFk AND isPicked;
+
+ IF vHasSalesPicked THEN
+ CALL util.throw('A sale with picked sales cannot be deleted');
+ END IF;
+
+ UPDATE itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ SET ish.available = ish.available + iss.quantity
+ WHERE iss.saleFk = vSaleFk;
+
+ DELETE FROM sale WHERE id = vSaleFk;
+
+ COMMIT;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/itemShelving_addList.sql b/db/routines/vn/procedures/itemShelving_addList.sql
index 05b392485..ade92b9fd 100644
--- a/db/routines/vn/procedures/itemShelving_addList.sql
+++ b/db/routines/vn/procedures/itemShelving_addList.sql
@@ -1,16 +1,22 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemShelving_addList`(vShelvingFk VARCHAR(3), vList TEXT, vIsChecking BOOL, vWarehouseFk INT)
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemShelving_addList`(
+ vShelvingFk VARCHAR(3),
+ vList TEXT,
+ vIsChecking BOOL,
+ vWarehouseFk INT
+)
BEGIN
-/* Recorre cada elemento en la colección vList.
+/**
+ * Recorre cada elemento en la colección vList.
* Si el parámetro isChecking = FALSE, llama a itemShelving_add.
*
* Cuando es TRUE sólo inserta los elementos de la colección que no están ya en
- * ese shelving, actualizando los valores del campo vn.itemShelving.isChecked
+ * ese shelving, actualizando los valores del campo itemShelving.isChecked
*
- * param vShelvingFk Identificador de vn.shelving
- * param vList JSON array con esta estructura: '[value1, value2, ...]'
- * param vIsChecking Define si hay que añadir o comprobar los items
- * param vWarehouseFk Identificador de vn.warehouse
+ * @param vShelvingFk Identificador de shelving
+ * @param vList JSON array con esta estructura: '[value1, value2, ...]'
+ * @param vIsChecking Define si hay que añadir o comprobar los items
+ * @param vWarehouseFk Identificador de warehouse
*/
DECLARE vListLength INT DEFAULT JSON_LENGTH(vList);
DECLARE vCounter INT DEFAULT 0;
@@ -20,26 +26,27 @@ BEGIN
DECLARE vIsChecked BOOL;
WHILE vCounter < vListLength DO
- SET vPath = CONCAT('$[',vCounter,']');
- SET vBarcode = JSON_EXTRACT(vList,vPath);
+ SET vPath = CONCAT('$[', vCounter, ']');
+ SET vBarcode = JSON_EXTRACT(vList, vPath);
SET vIsChecked = NULL;
IF vIsChecking THEN
SELECT barcodeToItem(vBarcode) INTO vItemFk;
- SELECT COUNT(*) INTO vIsChecked
- FROM vn.itemShelving
+ SELECT IF(COUNT(*), TRUE, FALSE) INTO vIsChecked
+ FROM itemShelving
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
AND itemFk = vItemFk;
END IF;
- IF NOT (vIsChecking AND vIsChecked) THEN
- CALL vn.itemShelving_add(vShelvingFk, vBarcode, 1, NULL, NULL, NULL, vWarehouseFk);
+ IF NOT vIsChecking OR NOT vIsChecked THEN
+ CALL itemShelving_add(vShelvingFk, vBarcode, 1, NULL, NULL, NULL, vWarehouseFk);
END IF;
- UPDATE vn.itemShelving
+ UPDATE itemShelving
SET isChecked = vIsChecked
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
- AND itemFk = vItemFk AND isChecked IS NULL;
+ AND itemFk = vItemFk
+ AND isChecked IS NULL;
SET vCounter = vCounter + 1;
END WHILE;
diff --git a/db/routines/vn/procedures/item_getSimilar.sql b/db/routines/vn/procedures/item_getSimilar.sql
index b524e30a7..537f53848 100644
--- a/db/routines/vn/procedures/item_getSimilar.sql
+++ b/db/routines/vn/procedures/item_getSimilar.sql
@@ -1,64 +1,51 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getSimilar`(
- vSelf INT,
- vWarehouseFk INT,
- vDated DATE,
- vShowType BOOL,
- vDaysInForward INT
+ vSelf INT,
+ vWarehouseFk INT,
+ vDated DATE,
+ vShowType BOOL,
+ vDaysInForward INT
)
BEGIN
/**
-* Propone articulos ordenados, con la cantidad
-* de veces usado y segun sus caracteristicas.
-*
-* @param vSelf Id de artículo
-* @param vWarehouseFk Id de almacen
-* @param vDated Fecha
-* @param vShowType Mostrar tipos
-* @param vDaysInForward Días de alcance para las ventas
-*/
- DECLARE vAvailableCalcFk INT;
- DECLARE vPriority INT DEFAULT 1;
+ * Propone articulos ordenados, con la cantidad
+ * de veces usado y segun sus caracteristicas.
+ *
+ * @param vSelf Id de artículo
+ * @param vWarehouseFk Id de almacen
+ * @param vDated Fecha
+ * @param vShowType Mostrar tipos
+ * @param vDaysInForward Días de alcance para las ventas (https://redmine.verdnatura.es/issues/7956#note-4)
+ */
+ DECLARE vAvailableCalcFk INT;
+ DECLARE vVisibleCalcFk INT;
+ DECLARE vTypeFk INT;
+ DECLARE vPriority INT DEFAULT 1;
- CALL cache.available_refresh(vAvailableCalcFk, FALSE, vWarehouseFk, vDated);
+ CALL cache.available_refresh(vAvailableCalcFk, FALSE, vWarehouseFk, vDated);
+ CALL cache.visible_refresh(vVisibleCalcFk, FALSE, vWarehouseFk);
- WITH itemTags AS (
- SELECT i.id,
- typeFk,
- tag5,
- value5,
- tag6,
- value6,
- tag7,
- value7,
- tag8,
- value8,
- t.name,
- it.value
+ WITH itemTags AS (
+ SELECT i.id,
+ typeFk,
+ tag5,
+ value5,
+ tag6,
+ value6,
+ tag7,
+ value7,
+ tag8,
+ value8,
+ t.name,
+ it.value
FROM vn.item i
LEFT JOIN vn.itemTag it ON it.itemFk = i.id
AND it.priority = vPriority
LEFT JOIN vn.tag t ON t.id = it.tagFk
WHERE i.id = vSelf
- ),
- stock AS (
- SELECT itemFk, SUM(visible) stock
- FROM vn.itemShelvingStock
- WHERE warehouseFk = vWarehouseFk
- GROUP BY itemFk
- ),
- sold AS (
- SELECT SUM(s.quantity) quantity, s.itemFk
- FROM vn.sale s
- JOIN vn.ticket t ON t.id = s.ticketFk
- LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
- WHERE t.shipped BETWEEN CURDATE() AND CURDATE() + INTERVAL vDaysInForward DAY
- AND iss.saleFk IS NULL
- AND t.warehouseFk = vWarehouseFk
- GROUP BY s.itemFk
- )
- SELECT i.id itemFk,
- CAST(sd.quantity AS INT) advanceable,
+ )
+ SELECT i.id itemFk,
+ NULL advanceable, -- https://redmine.verdnatura.es/issues/7956#note-4
i.longName,
i.subName,
i.tag5,
@@ -80,13 +67,13 @@ BEGIN
WHEN b.groupingMode = 'packing' THEN b.packing
ELSE 1
END minQuantity,
- sk.stock located,
+ v.visible located,
b.price2
FROM vn.item i
- LEFT JOIN sold sd ON sd.itemFk = i.id
JOIN cache.available a ON a.item_id = i.id
AND a.calc_id = vAvailableCalcFk
- LEFT JOIN stock sk ON sk.itemFk = i.id
+ LEFT JOIN cache.visible v ON v.item_id = i.id
+ AND v.calc_id = vVisibleCalcFk
LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
AND lb.warehouse_id = vWarehouseFk
LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id
@@ -96,21 +83,20 @@ BEGIN
LEFT JOIN vn.tag t ON t.id = it.tagFk
LEFT JOIN vn.buy b ON b.id = lb.buy_id
JOIN itemTags its
- WHERE (a.available > 0 OR sd.quantity < sk.stock)
+ WHERE a.available > 0
AND (i.typeFk = its.typeFk OR NOT vShowType)
AND i.id <> vSelf
- ORDER BY (a.available > 0) DESC,
- `counter` DESC,
- (t.name = its.name) DESC,
- (it.value = its.value) DESC,
- (i.tag5 = its.tag5) DESC,
- match5 DESC,
- (i.tag6 = its.tag6) DESC,
- match6 DESC,
- (i.tag7 = its.tag7) DESC,
- match7 DESC,
- (i.tag8 = its.tag8) DESC,
- match8 DESC
+ ORDER BY `counter` DESC,
+ (t.name = its.name) DESC,
+ (it.value = its.value) DESC,
+ (i.tag5 = its.tag5) DESC,
+ match5 DESC,
+ (i.tag6 = its.tag6) DESC,
+ match6 DESC,
+ (i.tag7 = its.tag7) DESC,
+ match7 DESC,
+ (i.tag8 = its.tag8) DESC,
+ match8 DESC
LIMIT 100;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/productionControl.sql b/db/routines/vn/procedures/productionControl.sql
index 0560cdd7e..1d206e20d 100644
--- a/db/routines/vn/procedures/productionControl.sql
+++ b/db/routines/vn/procedures/productionControl.sql
@@ -15,13 +15,11 @@ proc: BEGIN
DECLARE vEndingDate DATETIME;
DECLARE vIsTodayRelative BOOLEAN;
- SELECT util.dayEnd(util.VN_CURDATE()) + INTERVAL LEAST(vScopeDays, maxProductionScopeDays) DAY
- INTO vEndingDate
- FROM productionConfig;
-
- SELECT isTodayRelative INTO vIsTodayRelative
- FROM worker
- WHERE id = getUser(); -- Cambiar por account.myUser_getId(), falta dar permisos
+ SELECT w.isTodayRelative, util.dayEnd(util.VN_CURDATE()) + INTERVAL LEAST(vScopeDays, pc.maxProductionScopeDays) DAY
+ INTO vIsTodayRelative,vEndingDate
+ FROM worker w
+ JOIN productionConfig pc
+ WHERE w.id = account.myUser_getId();
CALL prepareTicketList(util.yesterday(), vEndingDate);
@@ -268,15 +266,14 @@ proc: BEGIN
UPDATE tmp.productionBuffer pb
JOIN sale s ON s.ticketFk = pb.ticketFk
JOIN item i ON i.id = s.itemFk
- JOIN cache.last_buy lb ON lb.warehouse_id = vWarehouseFk
+ JOIN cache.last_buy lb ON lb.warehouse_id = vWarehouseFk
AND lb.item_id = s.itemFk
JOIN buy b ON b.id = lb.buy_id
JOIN packaging p ON p.id = b.packagingFk
- JOIN productionConfig pc
SET pb.hasPlantTray = TRUE
WHERE p.isPlantTray
AND s.quantity >= b.packing
- AND pb.isOwn;
+ AND pb.isOwn;
DROP TEMPORARY TABLE
tmp.productionTicket,
diff --git a/db/routines/vn/procedures/queueMember_updateQueue.sql b/db/routines/vn/procedures/queueMember_updateQueue.sql
new file mode 100644
index 000000000..5af44da4f
--- /dev/null
+++ b/db/routines/vn/procedures/queueMember_updateQueue.sql
@@ -0,0 +1,29 @@
+DELIMITER $$
+
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`queueMember_updateQueue`(
+ vBusinessFk INT
+)
+BEGIN
+ /**
+ * Elimina la entrada de la cola anterior y luego inserta la nueva para un trabajador.
+ *
+ * @param vBusinessFk ID del negocio
+ */
+ DECLARE vNewQueue VARCHAR(10);
+ DECLARE vExtension VARCHAR(10);
+ DECLARE exit handler FOR SQLEXCEPTION
+
+ SELECT d.pbxQueue, s.extension
+ INTO vNewQueue, vExtension
+ FROM business b
+ JOIN department d ON d.id = b.departmentFk
+ JOIN pbx.sip s ON s.user_id = b.workerFk
+ WHERE b.id = vBusinessFk;
+
+ DELETE FROM pbx.queueMember
+ WHERE extension = vExtension COLLATE utf8_general_ci;
+
+ INSERT IGNORE INTO pbx.queueMember (queue, extension)
+ VALUES (vNewQueue, vExtension);
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/sale_getProblems.sql b/db/routines/vn/procedures/sale_getProblems.sql
index 2bba8fbc3..b50b4784d 100644
--- a/db/routines/vn/procedures/sale_getProblems.sql
+++ b/db/routines/vn/procedures/sale_getProblems.sql
@@ -40,7 +40,7 @@ BEGIN
isTooLittle BOOL DEFAULT FALSE,
isVip BOOL DEFAULT FALSE,
PRIMARY KEY (ticketFk, saleFk)
- ) ENGINE = MEMORY;
+ ); -- No memory
INSERT INTO tmp.sale_problems(ticketFk,
saleFk,
diff --git a/db/routines/vn/procedures/stockBought_calculate.sql b/db/routines/vn/procedures/stockBought_calculate.sql
index 0930a86de..8b2a32e5d 100644
--- a/db/routines/vn/procedures/stockBought_calculate.sql
+++ b/db/routines/vn/procedures/stockBought_calculate.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`stockBought_calculate`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`stockBought_calculate`(
vDated DATE
)
proc: BEGIN
@@ -14,8 +14,8 @@ proc: BEGIN
END IF;
CREATE OR REPLACE TEMPORARY TABLE tStockBought
- SELECT workerFk, reserve
- FROM stockBought
+ SELECT workerFk, reserve
+ FROM stockBought
WHERE dated = vDated
AND reserve;
@@ -35,7 +35,7 @@ proc: BEGIN
LEFT JOIN tmp.item ti ON ti.itemFk = i.id
JOIN itemCategory ic ON ic.id = it.categoryFk
JOIN warehouse wh ON wh.code = 'VNH'
- JOIN tmp.buyUltimate bu ON bu.itemFk = i.id
+ JOIN tmp.buyUltimate bu ON bu.itemFk = i.id
AND bu.warehouseFk = wh.id
JOIN buy b ON b.id = bu.buyFk
JOIN volumeConfig vc
diff --git a/db/routines/vn/procedures/stockBuyedByWorker.sql b/db/routines/vn/procedures/stockBuyedByWorker.sql
deleted file mode 100644
index 13bda0133..000000000
--- a/db/routines/vn/procedures/stockBuyedByWorker.sql
+++ /dev/null
@@ -1,74 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`stockBuyedByWorker`(
- vDated DATE,
- vWorker INT
-)
-BEGIN
-/**
- * Inserta el volumen de compra de un comprador
- * en stockBuyed de acuerdo con la fecha.
- *
- * @param vDated Fecha de compra
- * @param vWorker Id de trabajador
- */
- CREATE OR REPLACE TEMPORARY TABLE tStockBuyed
- (INDEX (userFk))
- ENGINE = MEMORY
- SELECT requested, reserved, userFk
- FROM stockBuyed
- WHERE dated = vDated
- AND userFk = vWorker;
-
- DELETE FROM stockBuyed
- WHERE dated = vDated
- AND userFk = vWorker;
-
- CALL item_calculateStock(vDated);
-
- INSERT INTO stockBuyed(userFk, buyed, `dated`, reserved, requested, description)
- SELECT it.workerFk,
- SUM((ti.quantity / b.packing) * buy_getVolume(b.id)) / vc.palletM3 / 1000000,
- vDated,
- sb.reserved,
- sb.requested,
- u.name
- FROM itemType it
- JOIN item i ON i.typeFk = it.id
- LEFT JOIN tmp.item ti ON ti.itemFk = i.id
- JOIN itemCategory ic ON ic.id = it.categoryFk
- JOIN warehouse wh ON wh.code = 'VNH'
- JOIN tmp.buyUltimate bu ON bu.itemFk = i.id
- AND bu.warehouseFk = wh.id
- JOIN buy b ON b.id = bu.buyFk
- JOIN volumeConfig vc
- JOIN account.`user` u ON u.id = it.workerFk
- LEFT JOIN tStockBuyed sb ON sb.userFk = it.workerFk
- WHERE ic.display
- AND it.workerFk = vWorker;
-
- SELECT b.entryFk Id_Entrada,
- i.id Id_Article,
- i.name Article,
- ti.quantity Cantidad,
- (ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id))
- / (vc.trolleyM3 * 1000000) buyed,
- b.packagingFk id_cubo,
- b.packing
- FROM tmp.item ti
- JOIN item i ON i.id = ti.itemFk
- JOIN itemType it ON i.typeFk = it.id
- JOIN itemCategory ic ON ic.id = it.categoryFk
- JOIN worker w ON w.id = it.workerFk
- JOIN auctionConfig ac
- JOIN tmp.buyUltimate bu ON bu.itemFk = i.id
- AND bu.warehouseFk = ac.warehouseFk
- JOIN buy b ON b.id = bu.buyFk
- JOIN volumeConfig vc
- WHERE ic.display
- AND w.id = vWorker;
-
- DROP TEMPORARY TABLE tmp.buyUltimate,
- tmp.item,
- tStockBuyed;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/stockBuyed_add.sql b/db/routines/vn/procedures/stockBuyed_add.sql
deleted file mode 100644
index aab85e7fa..000000000
--- a/db/routines/vn/procedures/stockBuyed_add.sql
+++ /dev/null
@@ -1,70 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`stockBuyed_add`(
- vDated DATE
-)
-BEGIN
-/**
- * Inserta el volumen de compra por comprador
- * en stockBuyed de acuerdo con la fecha.
- *
- * @param vDated Fecha de compra
- */
- CREATE OR REPLACE TEMPORARY TABLE tStockBuyed
- (INDEX (userFk))
- ENGINE = MEMORY
- SELECT requested, reserved, userFk
- FROM stockBuyed
- WHERE dated = vDated;
-
- DELETE FROM stockBuyed WHERE dated = vDated;
-
- CALL item_calculateStock(vDated);
-
- INSERT INTO stockBuyed(userFk, buyed, `dated`, description)
- SELECT it.workerFk,
- SUM((ti.quantity / b.packing) * buy_getVolume(b.id)) / vc.palletM3 / 1000000,
- vDated,
- u.name
- FROM itemType it
- JOIN item i ON i.typeFk = it.id
- LEFT JOIN tmp.item ti ON ti.itemFk = i.id
- JOIN itemCategory ic ON ic.id = it.categoryFk
- JOIN warehouse wh ON wh.code = 'VNH'
- JOIN tmp.buyUltimate bu ON bu.itemFk = i.id AND bu.warehouseFk = wh.id
- JOIN buy b ON b.id = bu.buyFk
- JOIN volumeConfig vc
- JOIN account.`user` u ON u.id = it.workerFk
- JOIN workerDepartment wd ON wd.workerFk = u.id
- JOIN department d ON d.id = wd.departmentFk
- WHERE ic.display
- AND d.code IN ('shopping', 'logistic', 'franceTeam')
- GROUP BY it.workerFk;
-
- INSERT INTO stockBuyed(buyed, dated, description)
- SELECT SUM(ic.cm3 * ito.quantity / vc.palletM3 / 1000000),
- vDated,
- IF(c.code = 'ES', p.name, c.name) destiny
- FROM itemTicketOut ito
- JOIN ticket t ON t.id = ito.ticketFk
- JOIN `address` a ON a.id = t.addressFk
- JOIN province p ON p.id = a.provinceFk
- JOIN country c ON c.id = p.countryFk
- JOIN warehouse wh ON wh.id = t.warehouseFk
- JOIN itemCost ic ON ic.itemFk = ito.itemFk
- AND ic.warehouseFk = t.warehouseFk
- JOIN volumeConfig vc
- WHERE ito.shipped BETWEEN vDated AND util.dayend(vDated)
- AND wh.code = 'VNH'
- GROUP BY destiny;
-
- UPDATE stockBuyed s
- JOIN tStockBuyed ts ON ts.userFk = s.userFk
- SET s.requested = ts.requested,
- s.reserved = ts.reserved
- WHERE s.dated = vDated;
-
- DROP TEMPORARY TABLE tmp.buyUltimate,
- tmp.item,
- tStockBuyed;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/supplier_statementWithEntries.sql b/db/routines/vn/procedures/supplier_statementWithEntries.sql
index 55b271296..c0014f8e5 100644
--- a/db/routines/vn/procedures/supplier_statementWithEntries.sql
+++ b/db/routines/vn/procedures/supplier_statementWithEntries.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE vn.supplier_statementWithEntries(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE vn.supplier_statementWithEntries(
vSupplierFk INT,
vCurrencyFk INT,
vCompanyFk INT,
diff --git a/db/routines/vn/procedures/ticketRefund_upsert.sql b/db/routines/vn/procedures/ticketRefund_upsert.sql
new file mode 100644
index 000000000..fb22e6e8c
--- /dev/null
+++ b/db/routines/vn/procedures/ticketRefund_upsert.sql
@@ -0,0 +1,25 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticketRefund_upsert`(
+ vRefundTicketFk INT,
+ vOriginalTicketFk INT
+)
+ READS SQL DATA
+BEGIN
+/**
+ * Common code for ticketRefund triggers
+ *
+ * @param vRefundTicketFk
+ * @param vOriginalTicketFk
+ */
+ DECLARE vIsDeleted BOOL;
+
+ SELECT COUNT(*) INTO vIsDeleted
+ FROM ticket
+ WHERE id IN (vRefundTicketFk, vOriginalTicketFk)
+ AND isDeleted;
+
+ IF vIsDeleted THEN
+ CALL util.throw('The refund ticket cannot be deleted tickets');
+ END IF;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_mergeSales.sql b/db/routines/vn/procedures/ticket_mergeSales.sql
index 28b2dc1c0..8ef5f6d90 100644
--- a/db/routines/vn/procedures/ticket_mergeSales.sql
+++ b/db/routines/vn/procedures/ticket_mergeSales.sql
@@ -1,14 +1,27 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_mergeSales`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_mergeSales`(
vSelf INT
)
BEGIN
+/**
+ * Para un ticket se agrupa las diferentes líneas de venta de un mismo artículo en una sola
+ * siempre y cuando tengan el mismo precio y dto.
+ *
+ * @param vSelf Id de ticket
+ */
+ DECLARE vHasSalesToMerge BOOL;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
+ START TRANSACTION;
+
+ SELECT id INTO vSelf
+ FROM ticket
+ WHERE id = vSelf FOR UPDATE;
+
CREATE OR REPLACE TEMPORARY TABLE tSalesToPreserve
(PRIMARY KEY (id))
ENGINE = MEMORY
@@ -18,26 +31,24 @@ BEGIN
JOIN itemType it ON it.id = i.typeFk
WHERE s.ticketFk = vSelf
AND it.isMergeable
- GROUP BY s.itemFk, s.price, s.discount;
+ GROUP BY s.itemFk, s.price, s.discount
+ HAVING COUNT(*) > 1;
- START TRANSACTION;
+ SELECT COUNT(*) INTO vHasSalesToMerge FROM tSalesToPreserve;
- UPDATE sale s
- JOIN tSalesToPreserve stp ON stp.id = s.id
- SET s.quantity = newQuantity
- WHERE s.ticketFk = vSelf;
+ IF vHasSalesToMerge THEN
+ UPDATE sale s
+ JOIN tSalesToPreserve stp ON stp.id = s.id
+ SET s.quantity = newQuantity;
- DELETE s.*
- FROM sale s
- LEFT JOIN tSalesToPreserve stp ON stp.id = s.id
- JOIN item i ON i.id = s.itemFk
- JOIN itemType it ON it.id = i.typeFk
- WHERE s.ticketFk = vSelf
- AND stp.id IS NULL
- AND it.isMergeable;
+ DELETE s
+ FROM sale s
+ JOIN tSalesToPreserve stp ON stp.itemFk = s.itemFk
+ WHERE s.ticketFk = vSelf
+ AND s.id <> stp.id;
+ END IF;
COMMIT;
-
DROP TEMPORARY TABLE tSalesToPreserve;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql b/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql
index 8479550de..1652fd29e 100644
--- a/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql
+++ b/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setProblemRiskByClient`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_setProblemRiskByClient`(
vClientFk INT
)
BEGIN
diff --git a/db/routines/vn/procedures/ticket_setVolume.sql b/db/routines/vn/procedures/ticket_setVolume.sql
index d0fe9740c..c3cf0d057 100644
--- a/db/routines/vn/procedures/ticket_setVolume.sql
+++ b/db/routines/vn/procedures/ticket_setVolume.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setVolume`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_setVolume`(
vSelf INT
)
BEGIN
diff --git a/db/routines/vn/procedures/ticket_setVolumeItemCost.sql b/db/routines/vn/procedures/ticket_setVolumeItemCost.sql
index d7fb4473d..3c23b7c34 100644
--- a/db/routines/vn/procedures/ticket_setVolumeItemCost.sql
+++ b/db/routines/vn/procedures/ticket_setVolumeItemCost.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setVolumeItemCost`(
+CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_setVolumeItemCost`(
vItemFk INT
)
BEGIN
diff --git a/db/routines/vn/procedures/ticket_splitItemPackingType.sql b/db/routines/vn/procedures/ticket_splitItemPackingType.sql
index 0ee865af5..9a4bc01eb 100644
--- a/db/routines/vn/procedures/ticket_splitItemPackingType.sql
+++ b/db/routines/vn/procedures/ticket_splitItemPackingType.sql
@@ -3,124 +3,87 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_splitItemPacki
vSelf INT,
vOriginalItemPackingTypeFk VARCHAR(1)
)
-BEGIN
+proc:BEGIN
/**
- * Clona y reparte las ventas de un ticket en funcion del tipo de empaquetado.
- * Respeta el id inicial para el tipo propuesto.
+ * Clona y reparte las líneas de ventas de un ticket en funcion del tipo de empaquetado.
+ * Respeta el id de ticket original para el tipo de empaquetado propuesto.
*
* @param vSelf Id ticket
- * @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
+ * @param vOriginalItemPackingTypeFk Tipo empaquetado que se mantiene el ticket original
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
*/
- DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
- DECLARE vNewTicketFk INT;
- DECLARE vPackingTypesToSplit INT;
DECLARE vDone INT DEFAULT FALSE;
+ DECLARE vHasItemPackingType BOOL;
+ DECLARE vItemPackingTypeFk INT;
+ DECLARE vNewTicketFk INT;
- DECLARE vSaleGroup CURSOR FOR
- SELECT itemPackingTypeFk
- FROM tSaleGroup
- WHERE itemPackingTypeFk IS NOT NULL
- ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
+ DECLARE vItemPackingTypes CURSOR FOR
+ SELECT DISTINCT itemPackingTypeFk
+ FROM tSalesToMove;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- START TRANSACTION;
-
- SELECT id
- FROM sale
- WHERE ticketFk = vSelf
- AND NOT quantity
- FOR UPDATE;
-
- DELETE FROM sale
- WHERE NOT quantity
- AND ticketFk = vSelf;
-
- CREATE OR REPLACE TEMPORARY TABLE tSale
- (PRIMARY KEY (id))
- ENGINE = MEMORY
- SELECT s.id, i.itemPackingTypeFk, IFNULL(sv.litros, 0) litros
- FROM sale s
- JOIN item i ON i.id = s.itemFk
- LEFT JOIN saleVolume sv ON sv.saleFk = s.id
- WHERE s.ticketFk = vSelf;
-
- CREATE OR REPLACE TEMPORARY TABLE tSaleGroup
- ENGINE = MEMORY
- SELECT itemPackingTypeFk, SUM(litros) totalLitros
- FROM tSale
- GROUP BY itemPackingTypeFk;
-
- SELECT COUNT(*) INTO vPackingTypesToSplit
- FROM tSaleGroup
- WHERE itemPackingTypeFk IS NOT NULL;
+ SELECT COUNT(*) INTO vHasItemPackingType
+ FROM ticket t
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
+ WHERE t.id = vSelf
+ AND i.itemPackingTypeFk = vOriginalItemPackingTypeFk;
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
ticketFk INT,
itemPackingTypeFk VARCHAR(1)
- ) ENGINE = MEMORY;
+ ) ENGINE=MEMORY
+ SELECT vSelf ticketFk, vOriginalItemPackingTypeFk itemPackingTypeFk;
- CASE vPackingTypesToSplit
- WHEN 0 THEN
- INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- VALUES(vSelf, vItemPackingTypeFk);
- WHEN 1 THEN
- INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- SELECT vSelf, itemPackingTypeFk
- FROM tSaleGroup
- WHERE itemPackingTypeFk IS NOT NULL;
- ELSE
- OPEN vSaleGroup;
- FETCH vSaleGroup INTO vItemPackingTypeFk;
+ IF NOT vHasItemPackingType THEN
+ LEAVE proc;
+ END IF;
- INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- VALUES(vSelf, vItemPackingTypeFk);
+ CREATE OR REPLACE TEMPORARY TABLE tSalesToMove (
+ ticketFk INT,
+ saleFk INT,
+ itemPackingTypeFk INT
+ ) ENGINE=MEMORY;
- l: LOOP
- SET vDone = FALSE;
- FETCH vSaleGroup INTO vItemPackingTypeFk;
+ INSERT INTO tSalesToMove (saleFk, itemPackingTypeFk)
+ SELECT s.id, i.itemPackingTypeFk
+ FROM ticket t
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
+ WHERE t.id = vSelf
+ AND i.itemPackingTypeFk <> vOriginalItemPackingTypeFk;
- IF vDone THEN
- LEAVE l;
- END IF;
+ OPEN vItemPackingTypes;
- CALL ticket_Clone(vSelf, vNewTicketFk);
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vItemPackingTypes INTO vItemPackingTypeFk;
- INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- VALUES(vNewTicketFk, vItemPackingTypeFk);
- END LOOP;
+ IF vDone THEN
+ LEAVE l;
+ END IF;
- CLOSE vSaleGroup;
+ CALL ticket_Clone(vSelf, vNewTicketFk);
- SELECT s.id
- FROM sale s
- JOIN tSale ts ON ts.id = s.id
- JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
- FOR UPDATE;
+ UPDATE tSalesToMove
+ SET ticketFk = vNewTicketFk
+ WHERE itemPackingTypeFk = vItemPackingTypeFk;
- UPDATE sale s
- JOIN tSale ts ON ts.id = s.id
- JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
- SET s.ticketFk = t.ticketFk;
+ END LOOP;
- SELECT itemPackingTypeFk INTO vItemPackingTypeFk
- FROM tSaleGroup sg
- WHERE sg.itemPackingTypeFk IS NOT NULL
- ORDER BY sg.itemPackingTypeFk
- LIMIT 1;
+ CLOSE vItemPackingTypes;
- UPDATE sale s
- JOIN tSale ts ON ts.id = s.id
- JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = vItemPackingTypeFk
- SET s.ticketFk = t.ticketFk
- WHERE ts.itemPackingTypeFk IS NULL;
- END CASE;
+ UPDATE sale s
+ JOIN tSalesToMove stm ON stm.saleFk = s.id
+ SET s.ticketFk = stm.ticketFk
+ WHERE stm.ticketFk;
- COMMIT;
+ INSERT INTO tmp.ticketIPT (ticketFk, itemPackingTypeFk)
+ SELECT ticketFk, itemPackingTypeFk
+ FROM tSalesToMove
+ GROUP BY ticketFk;
- DROP TEMPORARY TABLE
- tSale,
- tSaleGroup;
+ DROP TEMPORARY TABLE tSalesToMove;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/worker_updateBusiness.sql b/db/routines/vn/procedures/worker_updateBusiness.sql
index a160c417a..43edb0416 100644
--- a/db/routines/vn/procedures/worker_updateBusiness.sql
+++ b/db/routines/vn/procedures/worker_updateBusiness.sql
@@ -21,6 +21,8 @@ BEGIN
SET businessFk = vNewBusinessFk
WHERE id = vSelf;
+ CALL queueMember_updateQueue(vNewBusinessFk);
+
IF vOldBusinessFk IS NULL THEN
CALL account.account_enable(vSelf);
diff --git a/db/routines/vn/triggers/business_afterUpdate.sql b/db/routines/vn/triggers/business_afterUpdate.sql
index 888308b9a..11aeb88b6 100644
--- a/db/routines/vn/triggers/business_afterUpdate.sql
+++ b/db/routines/vn/triggers/business_afterUpdate.sql
@@ -3,10 +3,20 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`business_afterUpdate`
AFTER UPDATE ON `business`
FOR EACH ROW
BEGIN
+ DECLARE vIsActive BOOL;
+ DECLARE vExtension VARCHAR(10);
+
CALL worker_updateBusiness(NEW.workerFk);
IF NOT (OLD.workerFk <=> NEW.workerFk) THEN
CALL worker_updateBusiness(OLD.workerFk);
END IF;
+
+ IF NOT (OLD.departmentFk <=> NEW.departmentFk) THEN
+ SELECT COUNT(*) INTO vIsActive FROM worker WHERE businessFk = NEW.id;
+ IF vIsActive THEN
+ CALL queueMember_updateQueue(NEW.id);
+ END IF;
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/host_beforeInsert.sql b/db/routines/vn/triggers/host_beforeInsert.sql
index c2cb82334..96b78bfb7 100644
--- a/db/routines/vn/triggers/host_beforeInsert.sql
+++ b/db/routines/vn/triggers/host_beforeInsert.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`host_beforeInsert`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`host_beforeInsert`
BEFORE INSERT ON `host`
FOR EACH ROW
BEGIN
diff --git a/db/routines/vn/triggers/itemShelving_afterInsert.sql b/db/routines/vn/triggers/itemShelving_afterInsert.sql
new file mode 100644
index 000000000..92243ca03
--- /dev/null
+++ b/db/routines/vn/triggers/itemShelving_afterInsert.sql
@@ -0,0 +1,18 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`itemShelving_afterInsert`
+ AFTER INSERT ON `itemShelving`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO itemShelvingLog
+ SET itemShelvingFk = NEW.id,
+ workerFk = account.myUser_getId(),
+ accion = 'CREA REGISTRO',
+ itemFk = NEW.itemFk,
+ shelvingFk = NEW.shelvingFk,
+ visible = NEW.visible,
+ `grouping` = NEW.`grouping`,
+ packing = NEW.packing,
+ available = NEW.available;
+
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/itemShelving_beforeUpdate.sql b/db/routines/vn/triggers/itemShelving_beforeUpdate.sql
index fabdf8efb..53f85de01 100644
--- a/db/routines/vn/triggers/itemShelving_beforeUpdate.sql
+++ b/db/routines/vn/triggers/itemShelving_beforeUpdate.sql
@@ -9,5 +9,8 @@ BEGIN
SET NEW.userFk = account.myUser_getId();
END IF;
+ IF NEW.shelvingFk <> OLD.shelvingFk THEN
+ SET NEW.movingState = NULL;
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql
index df07d5540..2f9481140 100644
--- a/db/routines/vn/triggers/roadmap_beforeInsert.sql
+++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert`
BEFORE INSERT ON `roadmap`
FOR EACH ROW
BEGIN
diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql
index 4905a0442..a2a02e96a 100644
--- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql
+++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate`
BEFORE UPDATE ON `roadmap`
FOR EACH ROW
BEGIN
diff --git a/db/routines/vn/triggers/saleGroupDetail._beforeInsert.sql b/db/routines/vn/triggers/saleGroupDetail._beforeInsert.sql
index 9513be46a..da975933c 100644
--- a/db/routines/vn/triggers/saleGroupDetail._beforeInsert.sql
+++ b/db/routines/vn/triggers/saleGroupDetail._beforeInsert.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`saleGroupDetail_beforeInsert`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`saleGroupDetail_beforeInsert`
BEFORE INSERT ON `saleGroupDetail`
FOR EACH ROW
BEGIN
diff --git a/db/routines/vn/triggers/saleGroupDetail_afterDelete.sql b/db/routines/vn/triggers/saleGroupDetail_afterDelete.sql
index 1698ad8ce..37c3e9a2b 100644
--- a/db/routines/vn/triggers/saleGroupDetail_afterDelete.sql
+++ b/db/routines/vn/triggers/saleGroupDetail_afterDelete.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`saleGroupDetail_afterDelete`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`saleGroupDetail_afterDelete`
AFTER DELETE ON `saleGroupDetail`
FOR EACH ROW
BEGIN
diff --git a/db/routines/vn/triggers/saleGroupDetail_beforeUpdate.sql b/db/routines/vn/triggers/saleGroupDetail_beforeUpdate.sql
index 0da18fd98..1f4238cdc 100644
--- a/db/routines/vn/triggers/saleGroupDetail_beforeUpdate.sql
+++ b/db/routines/vn/triggers/saleGroupDetail_beforeUpdate.sql
@@ -1,5 +1,5 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`saleGroupDetail_beforeUpdate`
+CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`saleGroupDetail_beforeUpdate`
BEFORE UPDATE ON `saleGroupDetail`
FOR EACH ROW
BEGIN
diff --git a/db/routines/vn/triggers/ticketRefund_beforeInsert.sql b/db/routines/vn/triggers/ticketRefund_beforeInsert.sql
index 61d9fe7a2..dd1da6650 100644
--- a/db/routines/vn/triggers/ticketRefund_beforeInsert.sql
+++ b/db/routines/vn/triggers/ticketRefund_beforeInsert.sql
@@ -3,6 +3,8 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`ticketRefund_beforeInse
BEFORE INSERT ON `ticketRefund`
FOR EACH ROW
BEGIN
+ CALL ticketRefund_upsert(NEW.refundTicketFk, NEW.originalTicketFk);
+
SET NEW.editorFk = account.myUser_getId();
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketRefund_beforeUpdate.sql b/db/routines/vn/triggers/ticketRefund_beforeUpdate.sql
index 807695de6..f27e3f092 100644
--- a/db/routines/vn/triggers/ticketRefund_beforeUpdate.sql
+++ b/db/routines/vn/triggers/ticketRefund_beforeUpdate.sql
@@ -3,6 +3,8 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`ticketRefund_beforeUpda
BEFORE UPDATE ON `ticketRefund`
FOR EACH ROW
BEGIN
+ CALL ticketRefund_upsert(NEW.refundTicketFk, NEW.originalTicketFk);
+
SET NEW.editorFk = account.myUser_getId();
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/travelThermograph_beforeInsert.sql b/db/routines/vn/triggers/travelThermograph_beforeInsert.sql
index f56109fba..256ee12a6 100644
--- a/db/routines/vn/triggers/travelThermograph_beforeInsert.sql
+++ b/db/routines/vn/triggers/travelThermograph_beforeInsert.sql
@@ -4,5 +4,14 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`travelThermograph_befor
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+
+ IF NEW.travelFk IS NULL AND
+ (SELECT COUNT(*) FROM travelThermograph
+ WHERE thermographFk = NEW.thermographFk
+ AND travelFk IS NULL
+ AND id <> NEW.id) > 0
+ THEN
+ CALL util.throw('Duplicate thermographFk without travelFk not allowed.');
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/travelThermograph_beforeUpdate.sql b/db/routines/vn/triggers/travelThermograph_beforeUpdate.sql
index 49f52f181..ffe81b38d 100644
--- a/db/routines/vn/triggers/travelThermograph_beforeUpdate.sql
+++ b/db/routines/vn/triggers/travelThermograph_beforeUpdate.sql
@@ -4,5 +4,14 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`travelThermograph_befor
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+
+ IF NEW.travelFk IS NULL AND
+ (SELECT COUNT(*) FROM travelThermograph
+ WHERE thermographFk = NEW.thermographFk
+ AND travelFk IS NULL
+ AND id <> NEW.id) > 0
+ THEN
+ CALL util.throw('Duplicate thermographFk without travelFk not allowed.');
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/views/buyer.sql b/db/routines/vn/views/buyer.sql
index e690dc16f..4f668d35d 100644
--- a/db/routines/vn/views/buyer.sql
+++ b/db/routines/vn/views/buyer.sql
@@ -2,12 +2,10 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`buyer`
AS SELECT DISTINCT `u`.`id` AS `userFk`,
- `u`.`nickname` AS `nickname`,
- `ic`.`display` AS `display`
+ `u`.`nickname` AS `nickname`
FROM (
`account`.`user` `u`
JOIN `vn`.`itemType` `it` ON(`it`.`workerFk` = `u`.`id`)
- JOIN `vn`.`itemCategory` `ic` ON(`ic`.`id` = `it`.`categoryFk`)
)
WHERE `u`.`active` <> 0
ORDER BY `u`.`nickname`
diff --git a/db/routines/vn2008/views/Agencias.sql b/db/routines/vn2008/views/Agencias.sql
index d70ec73f4..1176d02c4 100644
--- a/db/routines/vn2008/views/Agencias.sql
+++ b/db/routines/vn2008/views/Agencias.sql
@@ -13,6 +13,5 @@ AS SELECT `am`.`id` AS `Id_Agencia`,
`am`.`reportMail` AS `send_mail`,
`am`.`isActive` AS `tpv`,
`am`.`code` AS `code`,
- `am`.`showAgencyName` AS `show_AgencyName`,
`am`.`isRiskFree` AS `isRiskFree`
FROM `vn`.`agencyMode` `am`
diff --git a/db/routines/vn2008/views/Compres_mark.sql b/db/routines/vn2008/views/Compres_mark.sql
deleted file mode 100644
index 7138c4e4c..000000000
--- a/db/routines/vn2008/views/Compres_mark.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE OR REPLACE DEFINER=`root`@`localhost`
- SQL SECURITY DEFINER
- VIEW `vn2008`.`Compres_mark`
-AS SELECT `bm`.`id` AS `Id_Compra`,
- `bm`.`comment` AS `comment`,
- `bm`.`mark` AS `mark`,
- `bm`.`odbcDate` AS `odbc_date`
-FROM `vn`.`buyMark` `bm`
diff --git a/db/routines/vn2008/views/Cubos.sql b/db/routines/vn2008/views/Cubos.sql
index 4ece9c435..1b23af4fc 100644
--- a/db/routines/vn2008/views/Cubos.sql
+++ b/db/routines/vn2008/views/Cubos.sql
@@ -17,5 +17,6 @@ AS SELECT `p`.`id` AS `Id_Cubo`,
`p`.`upload` AS `Suben`,
`p`.`base` AS `Base`,
`p`.`isBox` AS `box`,
- `p`.`returnCost` AS `costeRetorno`
+ `p`.`returnCost` AS `costeRetorno`,
+ `p`.`isActive` AS `isActive`
FROM `vn`.`packaging` `p`
diff --git a/db/versions/11198-blackPhormium/00-firstScript.sql b/db/versions/11198-blackPhormium/00-firstScript.sql
new file mode 100644
index 000000000..6c181ed21
--- /dev/null
+++ b/db/versions/11198-blackPhormium/00-firstScript.sql
@@ -0,0 +1,7 @@
+UPDATE vn.itemShelving
+ SET isChecked = TRUE
+ WHERE isChecked;
+
+UPDATE vn.itemShelving
+ SET isChecked = FALSE
+ WHERE NOT isChecked;
diff --git a/db/versions/11242-whiteAnthurium/00-firstScript.sql b/db/versions/11242-whiteAnthurium/00-firstScript.sql
new file mode 100644
index 000000000..43dccf374
--- /dev/null
+++ b/db/versions/11242-whiteAnthurium/00-firstScript.sql
@@ -0,0 +1,3 @@
+DELETE FROM salix.ACL
+ WHERE model = 'WorkerLog'
+ AND property = '*';
\ No newline at end of file
diff --git a/db/versions/11251-navyChrysanthemum/00-firstScript.sql b/db/versions/11251-navyChrysanthemum/00-firstScript.sql
new file mode 100644
index 000000000..6ec0a66bb
--- /dev/null
+++ b/db/versions/11251-navyChrysanthemum/00-firstScript.sql
@@ -0,0 +1,5 @@
+/*
+UPDATE vn.sale
+ SET originalQuantity = quantity
+ WHERE originalQuantity IS NULL
+*/
diff --git a/db/versions/11251-navyChrysanthemum/01-firstScript.sql b/db/versions/11251-navyChrysanthemum/01-firstScript.sql
new file mode 100644
index 000000000..c942e0400
--- /dev/null
+++ b/db/versions/11251-navyChrysanthemum/01-firstScript.sql
@@ -0,0 +1 @@
+-- ALTER TABLE vn.sale MODIFY COLUMN originalQuantity decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT 'Se utiliza para notificar a través de rocket los cambios de quantity';
\ No newline at end of file
diff --git a/db/versions/11261-bronzeDracena/00-firstScript.sql b/db/versions/11261-bronzeDracena/00-firstScript.sql
new file mode 100644
index 000000000..1ef944db2
--- /dev/null
+++ b/db/versions/11261-bronzeDracena/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.agencyMode
+ CHANGE IF EXISTS showAgencyName showAgencyName__ tinyint(1) DEFAULT 1 COMMENT '@deprecated 2024-09-24';
\ No newline at end of file
diff --git a/db/versions/11262-chocolateCamellia/00-firstScript.sql b/db/versions/11262-chocolateCamellia/00-firstScript.sql
new file mode 100644
index 000000000..79910fa76
--- /dev/null
+++ b/db/versions/11262-chocolateCamellia/00-firstScript.sql
@@ -0,0 +1,31 @@
+-- vn.priceDelta definition
+
+CREATE OR REPLACE TABLE vn.priceDelta (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `itemTypeFk` smallint(5) unsigned NOT NULL,
+ `minSize` int(10) unsigned DEFAULT NULL COMMENT 'Minimum item.size',
+ `maxSize` int(10) unsigned DEFAULT NULL COMMENT 'Maximum item.size',
+ `inkFk` varchar(3) DEFAULT NULL,
+ `originFk` tinyint(2) unsigned DEFAULT NULL,
+ `producerFk` mediumint(3) unsigned DEFAULT NULL,
+ `fromDated` date DEFAULT NULL,
+ `toDated` date DEFAULT NULL,
+ `absIncreasing` decimal(10,3) DEFAULT NULL COMMENT 'Absolute increasing of final price',
+ `ratIncreasing` int(11) DEFAULT NULL COMMENT 'Increasing ratio for the cost price',
+ `warehouseFk` smallint(6) unsigned NOT NULL,
+ `created` timestamp NOT NULL DEFAULT current_timestamp(),
+ `editorFk` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `priceDelta_itemType_FK` (`itemTypeFk`),
+ KEY `priceDelta_ink_FK` (`inkFk`),
+ KEY `priceDelta_producer_FK` (`producerFk`),
+ KEY `priceDelta_warehouse_FK` (`warehouseFk`),
+ KEY `priceDelta_worker_FK` (`editorFk`),
+ CONSTRAINT `priceDelta_ink_FK` FOREIGN KEY (`inkFk`) REFERENCES `ink` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_itemType_FK` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_producer_FK` FOREIGN KEY (`producerFk`) REFERENCES `producer` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_warehouse_FK` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_worker_FK` FOREIGN KEY (`editorFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Defines the increasing o decreasing for ranges of items';
+
+GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE vn.priceDelta TO buyer;
\ No newline at end of file
diff --git a/db/versions/11263-brownAnthurium/00-firstScript.sql b/db/versions/11263-brownAnthurium/00-firstScript.sql
new file mode 100644
index 000000000..0824ea5f7
--- /dev/null
+++ b/db/versions/11263-brownAnthurium/00-firstScript.sql
@@ -0,0 +1,32 @@
+-- Place your SQL code here
+-- vn.priceDelta definition
+
+CREATE OR REPLACE TABLE vn.priceDelta (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `itemTypeFk` smallint(5) unsigned NOT NULL,
+ `minSize` int(10) unsigned DEFAULT NULL COMMENT 'Minimum item.size',
+ `maxSize` int(10) unsigned DEFAULT NULL COMMENT 'Maximum item.size',
+ `inkFk` varchar(3) DEFAULT NULL,
+ `originFk` tinyint(2) unsigned DEFAULT NULL,
+ `producerFk` mediumint(3) unsigned DEFAULT NULL,
+ `fromDated` date DEFAULT NULL,
+ `toDated` date DEFAULT NULL,
+ `absIncreasing` decimal(10,3) DEFAULT NULL COMMENT 'Absolute increasing of final price',
+ `ratIncreasing` int(11) DEFAULT NULL COMMENT 'Increasing ratio for the cost price',
+ `warehouseFk` smallint(6) unsigned NOT NULL,
+ `created` timestamp NOT NULL DEFAULT current_timestamp(),
+ `editorFk` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `priceDelta_itemType_FK` (`itemTypeFk`),
+ KEY `priceDelta_ink_FK` (`inkFk`),
+ KEY `priceDelta_producer_FK` (`producerFk`),
+ KEY `priceDelta_warehouse_FK` (`warehouseFk`),
+ KEY `priceDelta_worker_FK` (`editorFk`),
+ CONSTRAINT `priceDelta_ink_FK` FOREIGN KEY (`inkFk`) REFERENCES `ink` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_itemType_FK` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_producer_FK` FOREIGN KEY (`producerFk`) REFERENCES `producer` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_warehouse_FK` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `priceDelta_worker_FK` FOREIGN KEY (`editorFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Defines the increasing o decreasing for ranges of items';
+
+GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE vn.priceDelta TO buyer;
\ No newline at end of file
diff --git a/db/versions/11271-blackMastic/00-firstScript.sql b/db/versions/11271-blackMastic/00-firstScript.sql
new file mode 100644
index 000000000..dcc8349a5
--- /dev/null
+++ b/db/versions/11271-blackMastic/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.priceDelta ADD IF NOT EXISTS zoneGeoFk int(11) NULL COMMENT 'Application area for the bonus component';
+ALTER TABLE vn.priceDelta ADD CONSTRAINT priceDelta_zoneGeo_FK FOREIGN KEY IF NOT EXISTS (zoneGeoFk) REFERENCES vn.zoneGeo(id) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11272-azureLilium/00-firstScript.sql b/db/versions/11272-azureLilium/00-firstScript.sql
new file mode 100644
index 000000000..0194ece18
--- /dev/null
+++ b/db/versions/11272-azureLilium/00-firstScript.sql
@@ -0,0 +1,4 @@
+-- Place your SQL code here
+RENAME TABLE vn.stockBuyed TO vn.stockBuyed__;
+ALTER TABLE vn.stockBuyed__
+COMMENT='@deprecated 2024-10-01 rename and refactor to stockBought';
diff --git a/db/versions/11273-goldenDendro/00-firstScript.sql b/db/versions/11273-goldenDendro/00-firstScript.sql
new file mode 100644
index 000000000..2fc6809e5
--- /dev/null
+++ b/db/versions/11273-goldenDendro/00-firstScript.sql
@@ -0,0 +1,22 @@
+CREATE TABLE IF NOT EXISTS `vn`.`itemStateTag` (
+ `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name_UNIQUE` (`name`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT
+ CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Artificial');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Inactivo');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Preservado');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Seco');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Seco y preservado');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Estabilizada');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Natural y seco');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Preservado y artificial');
+INSERT IGNORE INTO `vn`.`itemStateTag` (`name`) VALUES ('Usado');
+
+UPDATE vn.tag
+ SET isFree=0,
+ sourceTable='itemStateTag'
+ WHERE name= 'Estado';
diff --git a/db/versions/11274-redGerbera/00-firstScript copy 2.sql b/db/versions/11274-redGerbera/00-firstScript copy 2.sql
new file mode 100644
index 000000000..452accf2e
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript copy 2.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.address MODIFY COLUMN isEqualizated tinyint(1) DEFAULT FALSE NOT NULL;
diff --git a/db/versions/11274-redGerbera/00-firstScript copy 3.sql b/db/versions/11274-redGerbera/00-firstScript copy 3.sql
new file mode 100644
index 000000000..c1f574379
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript copy 3.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.autonomy MODIFY COLUMN isUeeMember tinyint(1) DEFAULT FALSE NOT NULL;
\ No newline at end of file
diff --git a/db/versions/11274-redGerbera/00-firstScript copy 4.sql b/db/versions/11274-redGerbera/00-firstScript copy 4.sql
new file mode 100644
index 000000000..18a4d3314
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript copy 4.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.chat MODIFY COLUMN checkUserStatus tinyint(1) DEFAULT FALSE NOT NULL;
diff --git a/db/versions/11274-redGerbera/00-firstScript copy 5.sql b/db/versions/11274-redGerbera/00-firstScript copy 5.sql
new file mode 100644
index 000000000..c75965735
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript copy 5.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.warehouse
+ MODIFY COLUMN isOrigin tinyint(1) DEFAULT FALSE NOT NULL,
+ MODIFY COLUMN isDestiny tinyint(1) DEFAULT FALSE NOT NULL;
\ No newline at end of file
diff --git a/db/versions/11274-redGerbera/00-firstScript copy 6.sql b/db/versions/11274-redGerbera/00-firstScript copy 6.sql
new file mode 100644
index 000000000..63b942e9d
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript copy 6.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.zoneIncluded MODIFY COLUMN isIncluded tinyint(1) DEFAULT FALSE NOT NULL;
diff --git a/db/versions/11274-redGerbera/00-firstScript copy.sql b/db/versions/11274-redGerbera/00-firstScript copy.sql
new file mode 100644
index 000000000..f14ff371d
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript copy.sql
@@ -0,0 +1 @@
+ALTER TABLE bs.defaulter MODIFY COLUMN hasChanged tinyint(1) DEFAULT FALSE NOT NULL;
diff --git a/db/versions/11274-redGerbera/00-firstScript.sql b/db/versions/11274-redGerbera/00-firstScript.sql
new file mode 100644
index 000000000..8bcf7e027
--- /dev/null
+++ b/db/versions/11274-redGerbera/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE account.user MODIFY COLUMN emailVerified tinyint(1) DEFAULT FALSE NOT NULL;
diff --git a/db/versions/11277-wheatChico/00-firstScript.sql b/db/versions/11277-wheatChico/00-firstScript.sql
new file mode 100644
index 000000000..c2b5963a4
--- /dev/null
+++ b/db/versions/11277-wheatChico/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE hedera.`order` ADD IF NOT EXISTS rowUpdated DATETIME NULL
+ COMMENT 'Timestamp for last updated record in orderRow table';
diff --git a/db/versions/11278-crimsonEucalyptus/00-firstScript.sql b/db/versions/11278-crimsonEucalyptus/00-firstScript.sql
new file mode 100644
index 000000000..f69f75f1d
--- /dev/null
+++ b/db/versions/11278-crimsonEucalyptus/00-firstScript.sql
@@ -0,0 +1,6 @@
+-- Place your SQL code here
+
+ALTER TABLE vn.priceDelta ADD IF NOT EXISTS zoneGeoFk int(11) NULL;
+
+ALTER TABLE vn.priceDelta ADD CONSTRAINT priceDelta_zoneGeo_FK FOREIGN KEY IF NOT EXISTS (zoneGeoFk)
+REFERENCES vn.zoneGeo (`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11279-turquoiseDendro/00-firstScript.sql b/db/versions/11279-turquoiseDendro/00-firstScript.sql
new file mode 100644
index 000000000..a241e6af2
--- /dev/null
+++ b/db/versions/11279-turquoiseDendro/00-firstScript.sql
@@ -0,0 +1,6 @@
+-- Place your SQL code here
+
+ALTER TABLE vn.priceDelta ADD IF NOT EXISTS zoneGeoFk int(11) NULL;
+
+ALTER TABLE vn.priceDelta ADD CONSTRAINT priceDelta_zoneGeo_FK FOREIGN KEY IF NOT EXISTS (zoneGeoFk)
+REFERENCES vn.zoneGeo (`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/db/versions/11280-goldenCamellia/00-firstScript.sql b/db/versions/11280-goldenCamellia/00-firstScript.sql
new file mode 100644
index 000000000..fd55760c1
--- /dev/null
+++ b/db/versions/11280-goldenCamellia/00-firstScript.sql
@@ -0,0 +1,24 @@
+ALTER TABLE `vn`.`packaging`
+ ADD COLUMN IF NOT EXISTS `isActive` TINYINT(1) DEFAULT 1;
+
+UPDATE vn.packaging
+ SET isActive = FALSE
+ WHERE id IN('06x04x06','07x04x03','1000','100SM','1031','104','105','1060','10x04x06','10x04x07','1100','118','119','1200','129','1300',
+ '134','146','147','148','158','159','17x01x02','17X01X03','17x01x04','17x01x05','18X01X04','198','199',
+ '20P','20x01x03','246','273','278','279','280','290','359','37247','382','40P','453','463','464','465','466',
+ '467','469','471','473','494','508','509','511','512','514','515','516','518','519-50B','575','598-3x6','604','605','606',
+ '607','609','647','67515','676','680','682','685','687','688','691','692','693','694','695','730','751','7808','790','7910',
+ '7920','79450','7950','7952','7960','7976','7982','7986','7988',
+ '7993','8000','8046','8049','8053','8057','8058','8065','8076','8085','8086','8088',
+ '8091','8095','8096','8097','8101','8106','8108','8110','8112','8124','8134','8140','8141','8143','8145','8149','8150',
+ '8170','8174','8192','8200','8210','8249','8270','8275','8288','8300','8350','8375','8399','8400','8420','845','847','8480','8500',
+ '855','858','8600','862','869','871','872','8720','878','879','880','8800','882','885','910','911','912','914','916','917','918','919',
+ '920','921','922','923','924','925','926','927','930','9300','932','934','935','936','938','942','948','9600','980','984','9920',
+ 'B20x16','B43x13','Bande Rota','bb3','Bcesta','BcestaOVAL','BcestaRED','Bcirios','BciriosG','BjarronBLN','BjarronNGR',
+ 'Btazon','Bvelas','cactus200','Caja040','CajaTGLF','CC Alza Pl','CC_falso',
+ 'EB-RSMINA','EMB 1_4','EMB 2_5','espuma','FB-BENCH','granel','Grenex','guzma1200','guzma1400','guzma330','guzma400','guzma650','guzma900','HB-ALEX',
+ 'HB-APOSENT','HB-MAGIC','HB-NATUF','HB-RSMINA','HB-TES-RSR','HB068','HB117','HB2-CIRCA','JB-AROMA','jumboX3','kalan330','kalan400',
+ 'kalan577','kalan900','L12','L120','L14','L2-120','L200','L3-120','L4-120','L44','L6','L6-180','L8','L8-200','MB-BENCH','MBOLA','mc_11',
+ 'mc_13','Msp','NO VALIDO','NO-002','PANIC','PBLG','PISOCC/3','PISOCC/4','PISOCC/5','PISOCC/6',
+ 'procona','QB-CARDENA','QB-PANDERO','QB-TES-RSR','QB7-TOSCA','QB9-TOSCA','RB-BENCH','SemiEuroPa','spolette','t_flori11','T26x23',
+ 'T26x25','T27x24','T27x30','T28x26','T30x24','T33x30','THA50','ti_13','Tumbado','UB-BENCH')
\ No newline at end of file
diff --git a/db/versions/11281-purpleCyca/00-firstScript.sql b/db/versions/11281-purpleCyca/00-firstScript.sql
new file mode 100644
index 000000000..eadba5ae1
--- /dev/null
+++ b/db/versions/11281-purpleCyca/00-firstScript.sql
@@ -0,0 +1 @@
+DROP TABLE IF EXISTS vn.buyMark;
diff --git a/db/versions/11283-redAspidistra/00-firstScript.sql b/db/versions/11283-redAspidistra/00-firstScript.sql
new file mode 100644
index 000000000..a88091297
--- /dev/null
+++ b/db/versions/11283-redAspidistra/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.itemShelving DROP FOREIGN KEY itemShelving_fk2;
+ALTER TABLE vn.itemShelving ADD CONSTRAINT itemShelving_fk2
+ FOREIGN KEY (shelvingFk) REFERENCES vn.shelving(code) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11284-turquoiseLaurel/00-firstScript.sql b/db/versions/11284-turquoiseLaurel/00-firstScript.sql
new file mode 100644
index 000000000..34762faf6
--- /dev/null
+++ b/db/versions/11284-turquoiseLaurel/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.itemShelving ADD IF NOT EXISTS isMoving BOOL DEFAULT FALSE NOT NULL COMMENT 'Indica que se ha marcado este registro para transferirlo a otro sector';
diff --git a/db/versions/11285-orangeErica/00-firstScript.sql b/db/versions/11285-orangeErica/00-firstScript.sql
new file mode 100644
index 000000000..c13571f3a
--- /dev/null
+++ b/db/versions/11285-orangeErica/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.itemShelving DROP COLUMN IF EXISTS isMoving;
+ALTER TABLE vn.itemShelving ADD IF NOT EXISTS movingState ENUM('selected','printed') NULL;
diff --git a/db/versions/11287-azureRaphis/00-firstScript.sql b/db/versions/11287-azureRaphis/00-firstScript.sql
new file mode 100644
index 000000000..77d60eb40
--- /dev/null
+++ b/db/versions/11287-azureRaphis/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE hedera.`order` ADD IF NOT EXISTS rowUpdated DATETIME NULL
+ COMMENT 'Timestamp for last updated record in orderRow table';
\ No newline at end of file
diff --git a/db/versions/11294-azureFern/00-firstScript.sql b/db/versions/11294-azureFern/00-firstScript.sql
new file mode 100644
index 000000000..2d6ed3a5b
--- /dev/null
+++ b/db/versions/11294-azureFern/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.itemShelving DROP COLUMN IF EXISTS isMoving;
+ALTER TABLE vn.itemShelving ADD IF NOT EXISTS movingState ENUM('selected','printed') NULL;
\ No newline at end of file
diff --git a/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js b/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js
deleted file mode 100644
index 9c37ce9ba..000000000
--- a/e2e/paths/01-salix/03_smartTable_searchBar_integrations.spec.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('SmartTable SearchBar integration', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('salesPerson', 'item');
- await page.waitToClick(selectors.globalItems.searchButton);
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should search by type in searchBar, reload page and have same results', async() => {
- await page.waitToClick(selectors.itemsIndex.openAdvancedSearchButton);
- await page.autocompleteSearch(selectors.itemsIndex.advancedSearchItemType, 'Anthurium');
- await page.waitToClick(selectors.itemsIndex.advancedSearchButton);
- await page.waitForNumberOfElements(selectors.itemsIndex.searchResult, 4);
-
- await page.reload({
- waitUntil: 'networkidle2'
- });
-
- await page.waitForNumberOfElements(selectors.itemsIndex.searchResult, 4);
-
- await page.write(selectors.itemsIndex.advancedSmartTableGrouping, '1');
- await page.keyboard.press('Enter');
- await page.waitForNumberOfElements(selectors.itemsIndex.searchResult, 2);
-
- await page.reload({
- waitUntil: 'networkidle2'
- });
-
- await page.waitForNumberOfElements(selectors.itemsIndex.searchResult, 1);
- });
-
- it('should filter in section without smart-table and search in searchBar go to zone section', async() => {
- await page.loginAndModule('salesPerson', 'zone');
- await page.waitToClick(selectors.globalItems.searchButton);
-
- await page.doSearch('A');
- const firstCount = await page.countElement(selectors.zoneIndex.searchResult);
-
- await page.doSearch('A');
- const secondCount = await page.countElement(selectors.zoneIndex.searchResult);
-
- expect(firstCount).toEqual(7);
- expect(secondCount).toEqual(7);
- });
-
- it('should order orders by first id and order by last id, reload page and have same order', async() => {
- await page.loginAndModule('developer', 'item');
- await page.accessToSection('item.fixedPrice');
- await page.keyboard.press('Enter');
-
- await page.waitForTextInField(selectors.itemFixedPrice.firstItemID, '1');
-
- await page.waitToClick(selectors.itemFixedPrice.orderColumnId);
- await page.reload({
- waitUntil: 'networkidle2'
- });
- await page.waitForTextInField(selectors.itemFixedPrice.firstItemID, '3');
- });
-});
diff --git a/e2e/paths/07-order/01_summary.spec.js b/e2e/paths/07-order/01_summary.spec.js
deleted file mode 100644
index 9df481ef6..000000000
--- a/e2e/paths/07-order/01_summary.spec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import getBrowser from '../../helpers/puppeteer';
-
-const $ = {
- id: 'vn-order-summary vn-one:nth-child(1) > vn-label-value:nth-child(1) span',
- alias: 'vn-order-summary vn-one:nth-child(1) > vn-label-value:nth-child(2) span',
- consignee: 'vn-order-summary vn-one:nth-child(2) > vn-label-value:nth-child(6) span',
- subtotal: 'vn-order-summary vn-one.taxes > p:nth-child(1)',
- vat: 'vn-order-summary vn-one.taxes > p:nth-child(2)',
- total: 'vn-order-summary vn-one.taxes > p:nth-child(3)',
- sale: 'vn-order-summary vn-tbody > vn-tr',
-};
-
-describe('Order summary path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- await page.accessToSearchResult('16');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the order summary section and check data', async() => {
- await page.waitForState('order.card.summary');
-
- const id = await page.innerText($.id);
- const alias = await page.innerText($.alias);
- const consignee = await page.innerText($.consignee);
- const subtotal = await page.innerText($.subtotal);
- const vat = await page.innerText($.vat);
- const total = await page.innerText($.total);
- const sale = await page.countElement($.sale);
-
- expect(id).toEqual('16');
- expect(alias).toEqual('Many places');
- expect(consignee).toEqual('address 26 - Gotham (Province one)');
- expect(subtotal.length).toBeGreaterThan(1);
- expect(vat.length).toBeGreaterThan(1);
- expect(total.length).toBeGreaterThan(1);
- expect(sale).toBeGreaterThan(0);
- });
-});
diff --git a/e2e/paths/07-order/02_basic_data.spec.js b/e2e/paths/07-order/02_basic_data.spec.js
deleted file mode 100644
index b2c21b071..000000000
--- a/e2e/paths/07-order/02_basic_data.spec.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-const $ = {
- form: 'vn-order-basic-data form',
- observation: 'vn-order-basic-data form [vn-name="note"]',
- saveButton: `vn-order-basic-data form button[type=submit]`,
- acceptButton: '.vn-confirm.shown button[response="accept"]'
-};
-
-describe('Order edit basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
-
- await page.loginAndModule('employee', 'order');
- await page.accessToSearchResult('1');
- await page.accessToSection('order.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- describe('when confirmed order', () => {
- it('should not be able to change the client', async() => {
- const message = await page.sendForm($.form, {
- client: 'Tony Stark',
- address: 'Tony Stark',
- });
-
- expect(message.text).toContain(`You can't make changes on the basic data`);
- });
- });
-
- describe('when new order', () => {
- it('should create an order and edit its basic data', async() => {
- await page.waitToClick(selectors.globalItems.returnToModuleIndexButton);
- await page.waitToClick($.acceptButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.ordersIndex.createOrderButton);
- await page.waitForState('order.create');
-
- await page.autocompleteSearch(selectors.createOrderView.client, 'Jessica Jones');
- await page.pickDate(selectors.createOrderView.landedDatePicker);
- await page.autocompleteSearch(selectors.createOrderView.agency, 'Other agency');
- await page.waitToClick(selectors.createOrderView.createButton);
- await page.waitForState('order.card.catalog');
-
- await page.accessToSection('order.card.basicData');
-
- const values = {
- client: 'Tony Stark',
- address: 'Tony Stark',
- agencyMode: 'Other agency'
- };
-
- const message = await page.sendForm($.form, values);
- await page.reloadSection('order.card.basicData');
- const formValues = await page.fetchForm($.form, Object.keys(values));
-
- expect(message.isSuccess).toBeTrue();
- expect(formValues).toEqual(values);
- });
- });
-});
diff --git a/e2e/paths/07-order/03_lines.spec.js b/e2e/paths/07-order/03_lines.spec.js
deleted file mode 100644
index 718ea5ce5..000000000
--- a/e2e/paths/07-order/03_lines.spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Order lines', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- await page.accessToSearchResult('8');
- await page.accessToSection('order.card.line');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should check the order subtotal', async() => {
- const result = await page
- .waitToGetProperty(selectors.orderLine.orderSubtotal, 'innerText');
-
- expect(result).toContain('112.30');
- });
-
- it('should delete the first line in the order', async() => {
- await page.waitToClick(selectors.orderLine.firstLineDeleteButton);
- await page.waitToClick(selectors.orderLine.confirmButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should confirm the order subtotal has changed', async() => {
- await page.waitForTextInElement(selectors.orderLine.orderSubtotal, '92.80');
- const result = await page
- .waitToGetProperty(selectors.orderLine.orderSubtotal, 'innerText');
-
- expect(result).toContain('92.80');
- });
-
- it('should confirm the whole order and redirect to ticket index filtered by clientFk', async() => {
- await page.waitToClick(selectors.orderLine.confirmOrder);
-
- await page.expectURL('ticket/index');
- await page.expectURL('clientFk');
- });
-});
diff --git a/e2e/paths/07-order/04_catalog.spec.js b/e2e/paths/07-order/04_catalog.spec.js
deleted file mode 100644
index b8a20e938..000000000
--- a/e2e/paths/07-order/04_catalog.spec.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Order catalog', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should open the create new order form', async() => {
- await page.waitToClick(selectors.ordersIndex.createOrderButton);
- await page.waitForState('order.create');
- });
-
- it('should create a new order', async() => {
- await page.autocompleteSearch(selectors.createOrderView.client, 'Tony Stark');
- await page.pickDate(selectors.createOrderView.landedDatePicker);
- await page.autocompleteSearch(selectors.createOrderView.agency, 'Other agency');
- await page.waitToClick(selectors.createOrderView.createButton);
- await page.waitForState('order.card.catalog');
- });
-
- it('should add the realm and type filters and obtain results', async() => {
- await page.waitToClick(selectors.orderCatalog.plantRealmButton);
- await page.autocompleteSearch(selectors.orderCatalog.type, 'Anthurium');
- await page.waitForNumberOfElements('section.product', 4);
- const result = await page.countElement('section.product');
-
- expect(result).toEqual(4);
- });
-
- it('should perfom an "OR" search for the item tag colors silver and brown', async() => {
- await page.waitToClick(selectors.orderCatalog.openTagSearch);
- await page.autocompleteSearch(selectors.orderCatalog.tag, 'Color');
- await page.autocompleteSearch(selectors.orderCatalog.firstTagAutocomplete, 'silver');
- await page.waitToClick(selectors.orderCatalog.addTagButton);
- await page.autocompleteSearch(selectors.orderCatalog.secondTagAutocomplete, 'brown');
- await page.waitToClick(selectors.orderCatalog.searchTagButton);
- await page.waitForNumberOfElements('section.product', 4);
- });
-
- it('should perfom an "OR" search for the item tag tallos 2 and 9', async() => {
- await page.waitToClick(selectors.orderCatalog.openTagSearch);
- await page.autocompleteSearch(selectors.orderCatalog.tag, 'Tallos');
- await page.write(selectors.orderCatalog.firstTagValue, '2');
- await page.waitToClick(selectors.orderCatalog.addTagButton);
- await page.write(selectors.orderCatalog.secondTagValue, '9');
- await page.waitToClick(selectors.orderCatalog.searchTagButton);
- await page.waitForNumberOfElements('section.product', 2);
- });
-
- it('should perform a general search for category', async() => {
- await page.write(selectors.orderCatalog.itemTagValue, 'concussion');
- await page.keyboard.press('Enter');
- await page.waitForNumberOfElements('section.product', 2);
- });
-
- it('should perfom an "AND" search for the item tag tallos 2', async() => {
- await page.waitToClick(selectors.orderCatalog.openTagSearch);
- await page.autocompleteSearch(selectors.orderCatalog.tag, 'Tallos');
- await page.write(selectors.orderCatalog.firstTagValue, '2');
- await page.waitToClick(selectors.orderCatalog.searchTagButton);
- await page.waitForNumberOfElements('section.product', 1);
- });
-
- it('should remove the tag filters and have 4 results', async() => {
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.sixthFilterRemoveButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.fifthFilterRemoveButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.fourthFilterRemoveButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.thirdFilterRemoveButton);
-
- await page.waitForNumberOfElements('.product', 4);
- const result = await page.countElement('section.product');
-
- expect(result).toEqual(4);
- });
-
- it('should search for an item by id', async() => {
- await page.accessToSearchResult('2');
- await page.waitForNumberOfElements('section.product', 1);
- const result = await page.countElement('section.product');
-
- expect(result).toEqual(1);
- });
-});
diff --git a/e2e/paths/07-order/05_index.spec.js b/e2e/paths/07-order/05_index.spec.js
deleted file mode 100644
index 23769766c..000000000
--- a/e2e/paths/07-order/05_index.spec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Order Index', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should check the second search result doesn't contain a total of 0€`, async() => {
- await page.waitToClick(selectors.globalItems.searchButton);
- const result = await page.waitToGetProperty(selectors.ordersIndex.secondSearchResultTotal, 'innerText');
-
- expect(result).not.toContain('0.00');
- });
-
- it('should search including empty orders', async() => {
- await page.waitToClick(selectors.ordersIndex.openAdvancedSearch);
- await page.waitToClick(selectors.ordersIndex.advancedSearchShowEmptyCheckbox);
- await page.waitToClick(selectors.ordersIndex.advancedSearchButton);
- await page.waitForTextInElement(selectors.ordersIndex.secondSearchResultTotal, '0.00');
- const result = await page.waitToGetProperty(selectors.ordersIndex.secondSearchResultTotal, 'innerText');
-
- expect(result).toContain('0.00');
- });
-});
diff --git a/e2e/paths/10-travel/01_create.spec.js b/e2e/paths/10-travel/01_create.spec.js
deleted file mode 100644
index 98ade4852..000000000
--- a/e2e/paths/10-travel/01_create.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Travel create path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('buyer', 'travel');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should create a new travel and check it was created with the correct data', async() => {
- const date = Date.vnNew();
- date.setDate(15);
- date.setUTCHours(0, 0, 0, 0);
-
- await page.waitToClick(selectors.travelIndex.newTravelButton);
- await page.waitForState('travel.create');
-
- const values = {
- reference: 'Testing reference',
- agencyMode: 'inhouse pickup',
- shipped: date,
- landed: date,
- warehouseOut: 'Warehouse One',
- warehouseIn: 'Warehouse Five'
- };
-
- const message = await page.sendForm('vn-travel-create form', values);
- await page.waitForState('travel.card.basicData');
- const formValues = await page.fetchForm('vn-travel-basic-data form', Object.keys(values));
-
- expect(message.isSuccess).toBeTrue();
- expect(formValues).toEqual(values);
- });
-});
diff --git a/e2e/paths/10-travel/02_basic_data_and_log.spec.js b/e2e/paths/10-travel/02_basic_data_and_log.spec.js
deleted file mode 100644
index 701e6b1b4..000000000
--- a/e2e/paths/10-travel/02_basic_data_and_log.spec.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Travel basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('buyer', 'travel');
- await page.write(selectors.travelIndex.generalSearchFilter, '3');
- await page.keyboard.press('Enter');
- await page.accessToSection('travel.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the thermograph section', async() => {
- await page.waitForState('travel.card.basicData');
- });
-
- it('should set a wrong delivery date then receive an error on submit', async() => {
- await page.loginAndModule('buyer', 'travel');
- await page.write(selectors.travelIndex.generalSearchFilter, '4');
- await page.keyboard.press('Enter');
- await page.accessToSection('travel.card.basicData');
- await page.waitForState('travel.card.basicData');
-
- const lastMonth = Date.vnNew();
- lastMonth.setMonth(lastMonth.getMonth() - 2);
-
- await page.pickDate(selectors.travelBasicData.deliveryDate, lastMonth);
- await page.waitToClick(selectors.travelBasicData.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Landing cannot be lesser than shipment');
- });
-
- it('should undo the changes', async() => {
- await page.clearInput(selectors.travelBasicData.reference);
- await page.write(selectors.travelBasicData.reference, 'totally pointless ref');
- await page.waitToClick(selectors.travelBasicData.undoChanges);
- const result = await page.waitToGetProperty(selectors.travelBasicData.reference, 'value');
-
- expect(result).toEqual('fourth travel');
- });
-
- it('should now edit the whole form then save', async() => {
- await page.clearInput(selectors.travelBasicData.reference);
- await page.write(selectors.travelBasicData.reference, 'new reference!');
- await page.autocompleteSearch(selectors.travelBasicData.agency, 'Entanglement');
- await page.autocompleteSearch(selectors.travelBasicData.outputWarehouse, 'Warehouse Three');
- await page.autocompleteSearch(selectors.travelBasicData.inputWarehouse, 'Warehouse Four');
- await page.waitToClick(selectors.travelBasicData.delivered);
- await page.waitToClick(selectors.travelBasicData.received);
- await page.waitToClick(selectors.travelBasicData.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reload the section and check the reference was saved', async() => {
- await page.reloadSection('travel.card.basicData');
- const result = await page.waitToGetProperty(selectors.travelBasicData.reference, 'value');
-
- expect(result).toEqual('new reference!');
- });
-
- it('should check the agency was saved', async() => {
- const result = await page.waitToGetProperty(selectors.travelBasicData.agency, 'value');
-
- expect(result).toEqual('Entanglement');
- });
-
- it('should check the output warehouse date was saved', async() => {
- const result = await page.waitToGetProperty(selectors.travelBasicData.outputWarehouse, 'value');
-
- expect(result).toEqual('Warehouse Three');
- });
-
- it('should check the input warehouse date was saved', async() => {
- const result = await page.waitToGetProperty(selectors.travelBasicData.inputWarehouse, 'value');
-
- expect(result).toEqual('Warehouse Four');
- });
-
- it(`should check the delivered checkbox was saved even tho it doesn't make sense`, async() => {
- await page.waitForClassPresent(selectors.travelBasicData.delivered, 'checked');
- });
-
- it(`should check the received checkbox was saved even tho it doesn't make sense`, async() => {
- await page.waitForClassPresent(selectors.travelBasicData.received, 'checked');
- });
-});
diff --git a/e2e/paths/10-travel/03_descriptor.spec.js b/e2e/paths/10-travel/03_descriptor.spec.js
deleted file mode 100644
index f066a74ca..000000000
--- a/e2e/paths/10-travel/03_descriptor.spec.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Travel descriptor path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('buyer', 'travel');
- await page.write(selectors.travelIndex.generalSearchFilter, '3');
- await page.keyboard.press('Enter');
- await page.waitForState('travel.card.summary');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should click the descriptor button to navigate to the travel index showing all travels with current agency', async() => {
- await page.waitToClick(selectors.travelDescriptor.filterByAgencyButton);
- await page.waitForState('travel.index');
- const result = await page.countElement(selectors.travelIndex.anySearchResult);
-
- expect(result).toBeGreaterThanOrEqual(1);
- });
-
- it('should navigate to the first search result', async() => {
- await page.waitToClick(selectors.travelIndex.firstSearchResult);
- await page.waitForState('travel.card.summary');
- const state = await page.getState();
-
- expect(state).toBe('travel.card.summary');
- });
-});
diff --git a/e2e/paths/10-travel/04_extra_community.spec.js b/e2e/paths/10-travel/04_extra_community.spec.js
deleted file mode 100644
index c5975c958..000000000
--- a/e2e/paths/10-travel/04_extra_community.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Travel extra community path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('buyer', 'travel');
- await page.accessToSection('travel.extraCommunity');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should edit the travel reference and the locked kilograms', async() => {
- await page.waitToClick(selectors.travelExtraCommunity.removeContinentFilter);
- await page.waitForSpinnerLoad();
- await page.writeOnEditableTD(selectors.travelExtraCommunity.firstTravelReference, 'edited reference');
- await page.waitForSpinnerLoad();
- await page.writeOnEditableTD(selectors.travelExtraCommunity.firstTravelLockedKg, '1500');
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reload the index and confirm the reference and locked kg were edited', async() => {
- await page.accessToSection('travel.index');
- await page.accessToSection('travel.extraCommunity');
- await page.waitToClick(selectors.travelExtraCommunity.removeContinentFilter);
- await page.waitForTextInElement(selectors.travelExtraCommunity.firstTravelReference, 'edited reference');
- const reference = await page.getProperty(selectors.travelExtraCommunity.firstTravelReference, 'innerText');
- const lockedKg = await page.getProperty(selectors.travelExtraCommunity.firstTravelLockedKg, 'innerText');
-
- expect(reference).toContain('edited reference');
- expect(lockedKg).toContain(1500);
- });
-});
diff --git a/e2e/paths/10-travel/06_search_panel.spec.js b/e2e/paths/10-travel/06_search_panel.spec.js
deleted file mode 100644
index 420ceaf48..000000000
--- a/e2e/paths/10-travel/06_search_panel.spec.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Travel search panel path', () => {
- let browser;
- let page;
- let httpRequest;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('buyer', 'travel');
- page.on('request', req => {
- if (req.url().includes(`Travels/filter`))
- httpRequest = req.url();
- });
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should filter using all the fields', async() => {
- await page.click(selectors.travelIndex.chip);
- await page.write(selectors.travelIndex.generalSearchFilter, 'travel');
- await page.keyboard.press('Enter');
-
- expect(httpRequest).toContain('search=travel');
-
- await page.click(selectors.travelIndex.chip);
- await page.autocompleteSearch(selectors.travelIndex.agencyFilter, 'Entanglement');
-
- expect(httpRequest).toContain('agencyModeFk');
-
- await page.click(selectors.travelIndex.chip);
- await page.autocompleteSearch(selectors.travelIndex.warehouseOutFilter, 'Warehouse One');
-
- expect(httpRequest).toContain('warehouseOutFk');
-
- await page.click(selectors.travelIndex.chip);
- await page.autocompleteSearch(selectors.travelIndex.warehouseInFilter, 'Warehouse Two');
-
- expect(httpRequest).toContain('warehouseInFk');
-
- await page.click(selectors.travelIndex.chip);
- await page.overwrite(selectors.travelIndex.scopeDaysFilter, '15');
- await page.keyboard.press('Enter');
-
- expect(httpRequest).toContain('scopeDays=15');
-
- await page.click(selectors.travelIndex.chip);
- await page.autocompleteSearch(selectors.travelIndex.continentFilter, 'Asia');
-
- expect(httpRequest).toContain('continent');
-
- await page.click(selectors.travelIndex.chip);
- await page.write(selectors.travelIndex.totalEntriesFilter, '1');
- await page.keyboard.press('Enter');
-
- expect(httpRequest).toContain('totalEntries=1');
- });
-});
diff --git a/e2e/paths/11-zone/01_basic-data.spec.js b/e2e/paths/11-zone/01_basic-data.spec.js
deleted file mode 100644
index 34d08c57f..000000000
--- a/e2e/paths/11-zone/01_basic-data.spec.js
+++ /dev/null
@@ -1,104 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Zone basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
-
- await page.loginAndModule('deliveryAssistant',
- 'zone'); // turns up the zone module name and route aint the same lol
- await page.accessToSearchResult('10');
- await page.accessToSection('zone.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the basic data section', async() => {
- await page.waitForState('zone.card.basicData');
- });
-
- it('should edit de form and then save', async() => {
- await page.clearInput(selectors.zoneBasicData.name);
- await page.write(selectors.zoneBasicData.name, 'Brimstone teleportation');
- await page.autocompleteSearch(selectors.zoneBasicData.agency, 'Quantum break device');
- await page.clearInput(selectors.zoneBasicData.maxVolume);
- await page.write(selectors.zoneBasicData.maxVolume, '10');
- await page.clearInput(selectors.zoneBasicData.travelingDays);
- await page.write(selectors.zoneBasicData.travelingDays, '1');
- await page.clearInput(selectors.zoneBasicData.closing);
- await page.pickTime(selectors.zoneBasicData.closing, '21:00');
- await page.clearInput(selectors.zoneBasicData.price);
- await page.write(selectors.zoneBasicData.price, '999');
- await page.clearInput(selectors.zoneBasicData.bonus);
- await page.write(selectors.zoneBasicData.bonus, '100');
- await page.clearInput(selectors.zoneBasicData.inflation);
- await page.write(selectors.zoneBasicData.inflation, '200');
- await page.waitToClick(selectors.zoneBasicData.volumetric);
- await page.waitToClick(selectors.zoneBasicData.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should now reload the section', async() => {
- await page.reloadSection('zone.card.basicData');
- });
-
- it('should confirm the name was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.name, 'value');
-
- expect(result).toEqual('Brimstone teleportation');
- });
-
- it('should confirm the agency was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.agency, 'value');
-
- expect(result).toEqual('Quantum break device');
- });
-
- it('should confirm the max volume was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.maxVolume, 'value');
-
- expect(result).toEqual('10');
- });
-
- it('should confirm the traveling days were updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.travelingDays, 'value');
-
- expect(result).toEqual('1');
- });
-
- it('should confirm the closing hour was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.closing, 'value');
-
- expect(result).toEqual('21:00');
- });
-
- it('should confirm the price was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.price, 'value');
-
- expect(result).toEqual('999');
- });
-
- it('should confirm the bonus was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.bonus, 'value');
-
- expect(result).toEqual('100');
- });
-
- it('should confirm the inflation was updated', async() => {
- const result = await page.waitToGetProperty(selectors.zoneBasicData.inflation, 'value');
-
- expect(result).toEqual('200');
- });
-
- it('should confirm the volumetric checkbox was checked', async() => {
- await page.waitForClassPresent(selectors.zoneBasicData.volumetric, 'checked');
- });
-});
diff --git a/e2e/paths/11-zone/02_descriptor.spec.js b/e2e/paths/11-zone/02_descriptor.spec.js
deleted file mode 100644
index baccc910f..000000000
--- a/e2e/paths/11-zone/02_descriptor.spec.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Zone descriptor path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('deliveryAssistant', 'zone');
- await page.accessToSearchResult('13');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should eliminate the zone using the descriptor option', async() => {
- await page.waitToClick(selectors.zoneDescriptor.menu);
- await page.waitToClick(selectors.zoneDescriptor.deleteZone);
- await page.respondToDialog('accept');
- await page.waitForState('zone.index');
- });
-
- it('should search for the deleted zone to find no results', async() => {
- await page.doSearch('13');
- const count = await page.countElement(selectors.zoneIndex.searchResult);
-
- expect(count).toEqual(0);
- });
-});
diff --git a/front/core/services/app.js b/front/core/services/app.js
index cec7bea7f..dba6e70bf 100644
--- a/front/core/services/app.js
+++ b/front/core/services/app.js
@@ -57,7 +57,7 @@ export default class App {
getUrl(route, appName = 'lilium') {
const index = window.location.hash.indexOf(route.toLowerCase());
- const newRoute = index < 0 ? route : window.location.hash.substring(index);
+ let newRoute = index < 0 ? route : window.location.hash.substring(index);
const env = process.env.NODE_ENV;
const filter = {
where: {and: [
@@ -66,6 +66,17 @@ export default class App {
]}
};
+ const hasId = !isNaN(parseInt(route.split('/')[1]));
+
+ if (this.logger.$params.q) {
+ let tableValue = this.logger.$params.q;
+ const q = JSON.parse(tableValue);
+ if (typeof q === 'number')
+ tableValue = JSON.stringify({id: tableValue});
+ newRoute = newRoute.concat(`?table=${tableValue}`);
+ } else if (!hasId && this.logger.$params.id && newRoute.indexOf(this.logger.$params.id) < 0)
+ newRoute = newRoute.concat(`${this.logger.$params.id}`);
+
return this.logger.$http.get('Urls/findOne', {filter})
.then(res => {
if (res && res.data)
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index 352e08826..ea84cb6eb 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -235,10 +235,10 @@
"Cannot add holidays on this day": "Cannot add holidays on this day",
"Cannot send mail": "Cannot send mail",
"CONSTRAINT `chkParkingCodeFormat` failed for `vn`.`parking`": "CONSTRAINT `chkParkingCodeFormat` failed for `vn`.`parking`",
+ "This postcode already exists": "This postcode already exists",
"Original invoice not found": "Original invoice not found",
"There is already a tray with the same height": "There is already a tray with the same height",
"The height must be greater than 50cm": "The height must be greater than 50cm",
"The maximum height of the wagon is 200cm": "The maximum height of the wagon is 200cm",
- "This postcode already exists": "This postcode already exists",
- "This buyer has already made a reservation for this date": "This buyer has already made a reservation for this date"
-}
\ No newline at end of file
+ "The quantity claimed cannot be greater than the quantity of the line": "The quantity claimed cannot be greater than the quantity of the line"
+}
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index ba4b90cb5..796c945e8 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -366,9 +366,11 @@
"The invoices have been created but the PDFs could not be generated": "Se ha facturado pero no se ha podido generar el PDF",
"It has been invoiced but the PDF of refund not be generated": "Se ha facturado pero no se ha podido generar el PDF del abono",
"Payment method is required": "El método de pago es obligatorio",
- "Cannot send mail": "No se ha podido enviar el correo",
+ "Cannot send mail": "Não é possível enviar o email",
"CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos",
"The sale not exists in the item shelving": "La venta no existe en la estantería del artículo",
+ "The entry not have stickers": "La entrada no tiene etiquetas",
+ "Too many records": "Demasiados registros",
"Original invoice not found": "Factura original no encontrada",
"The entry has no lines or does not exist": "La entrada no tiene lineas o no existe",
"Weight already set": "El peso ya está establecido",
@@ -377,7 +379,7 @@
"The height must be greater than 50cm": "La altura debe ser superior a 50cm",
"The maximum height of the wagon is 200cm": "La altura máxima es 200cm",
"The entry does not have stickers": "La entrada no tiene etiquetas",
- "Too many records": "Demasiados registros",
"This buyer has already made a reservation for this date": "Este comprador ya ha hecho una reserva para esta fecha",
- "No valid travel thermograph found": "No se encontró un termógrafo válido"
+ "No valid travel thermograph found": "No se encontró un termógrafo válido",
+ "The quantity claimed cannot be greater than the quantity of the line": "La cantidad reclamada no puede ser mayor que la cantidad de la línea"
}
diff --git a/loopback/locale/fr.json b/loopback/locale/fr.json
index 601fe35f5..a6648b186 100644
--- a/loopback/locale/fr.json
+++ b/loopback/locale/fr.json
@@ -361,6 +361,6 @@
"The invoices have been created but the PDFs could not be generated": "La facture a été émise mais le PDF n'a pas pu être généré",
"It has been invoiced but the PDF of refund not be generated": "Il a été facturé mais le PDF de remboursement n'a pas été généré",
"Cannot send mail": "Impossible d'envoyer le mail",
- "Original invoice not found": "Facture originale introuvable"
-
+ "Original invoice not found": "Facture originale introuvable",
+ "The quantity claimed cannot be greater than the quantity of the line": "Le montant réclamé ne peut pas être supérieur au montant de la ligne"
}
diff --git a/loopback/locale/pt.json b/loopback/locale/pt.json
index a6a65710f..a43f0e780 100644
--- a/loopback/locale/pt.json
+++ b/loopback/locale/pt.json
@@ -361,5 +361,6 @@
"The invoices have been created but the PDFs could not be generated": "Foi faturado, mas o PDF não pôde ser gerado",
"It has been invoiced but the PDF of refund not be generated": "Foi faturado mas não foi gerado o PDF do reembolso",
"Original invoice not found": "Fatura original não encontrada",
- "Cannot send mail": "Não é possível enviar o email"
+ "Cannot send mail": "Não é possível enviar o email",
+ "The quantity claimed cannot be greater than the quantity of the line": "O valor reclamado não pode ser superior ao valor da linha"
}
diff --git a/modules/account/back/models/mail-alias-account.js b/modules/account/back/models/mail-alias-account.js
index 0eee6a123..61ca344e9 100644
--- a/modules/account/back/models/mail-alias-account.js
+++ b/modules/account/back/models/mail-alias-account.js
@@ -1,6 +1,5 @@
const ForbiddenError = require('vn-loopback/util/forbiddenError');
-const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.rewriteDbError(function(err) {
diff --git a/modules/account/back/models/sip.json b/modules/account/back/models/sip.json
index f2e2221b5..dbcef3b9e 100644
--- a/modules/account/back/models/sip.json
+++ b/modules/account/back/models/sip.json
@@ -25,7 +25,12 @@
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "user_id"
+ },
+ "queueMember": {
+ "type": "belongsTo",
+ "model": "QueueMember",
+ "foreignKey": "extension",
+ "primaryKey": "extension"
}
}
-}
-
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/modules/claim/back/methods/claim-beginning/specs/claim-beginning.spec.js b/modules/claim/back/methods/claim-beginning/specs/claim-beginning.spec.js
new file mode 100644
index 000000000..b7974ad23
--- /dev/null
+++ b/modules/claim/back/methods/claim-beginning/specs/claim-beginning.spec.js
@@ -0,0 +1,55 @@
+const models = require('vn-loopback/server/server').models;
+const LoopBackContext = require('loopback-context');
+
+describe('ClaimBeginning model()', () => {
+ const claimFk = 1;
+ const activeCtx = {
+ accessToken: {userId: 18},
+ headers: {origin: 'localhost:5000'},
+ __: () => {}
+ };
+
+ beforeEach(() => {
+ spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
+ active: activeCtx
+ });
+ });
+
+ it('should change quantity claimed', async() => {
+ const tx = await models.ClaimBeginning.beginTransaction({});
+
+ let error;
+ try {
+ const options = {transaction: tx};
+ const claim = await models.ClaimBeginning.findOne({where: {claimFk}}, options);
+ const sale = await models.Sale.findById(claim.saleFk, {}, options);
+ await claim.updateAttribute('quantity', sale.quantity - 1, options);
+
+ await tx.rollback();
+ } catch (e) {
+ error = e;
+ await tx.rollback();
+ }
+
+ expect(error).toBeUndefined();
+ });
+
+ it('should throw error when quantity claimed is greater than quantity of the sale', async() => {
+ const tx = await models.ClaimBeginning.beginTransaction({});
+
+ let error;
+ try {
+ const options = {transaction: tx};
+ const claim = await models.ClaimBeginning.findOne({where: {claimFk}}, options);
+ const sale = await models.Sale.findById(claim.saleFk, {}, options);
+ await claim.updateAttribute('quantity', sale.quantity + 1, options);
+
+ await tx.rollback();
+ } catch (e) {
+ error = e;
+ await tx.rollback();
+ }
+
+ expect(error.toString()).toContain('The quantity claimed cannot be greater than the quantity of the line');
+ });
+});
diff --git a/modules/claim/back/models/claim-beginning.js b/modules/claim/back/models/claim-beginning.js
index d269b2285..3dc9261c3 100644
--- a/modules/claim/back/models/claim-beginning.js
+++ b/modules/claim/back/models/claim-beginning.js
@@ -10,16 +10,21 @@ module.exports = Self => {
});
Self.observe('before save', async ctx => {
+ const options = ctx.options;
+ const models = Self.app.models;
+ const saleFk = ctx?.currentInstance?.saleFk || ctx?.instance?.saleFk;
+ const sale = await models.Sale.findById(saleFk, {fields: ['ticketFk', 'quantity']}, options);
+
if (ctx.isNewInstance) {
- const models = Self.app.models;
- const options = ctx.options;
- const instance = ctx.instance;
- const ticket = await models.Sale.findById(instance.saleFk, {fields: ['ticketFk']}, options);
- const claim = await models.Claim.findById(instance.claimFk, {fields: ['ticketFk']}, options);
- if (ticket.ticketFk != claim.ticketFk)
+ const claim = await models.Claim.findById(ctx.instance.claimFk, {fields: ['ticketFk']}, options);
+ if (sale.ticketFk != claim.ticketFk)
throw new UserError(`Cannot create a new claimBeginning from a different ticket`);
}
+
await claimIsEditable(ctx);
+
+ if (sale?.quantity && ctx.data?.quantity && ctx.data.quantity > sale?.quantity)
+ throw new UserError('The quantity claimed cannot be greater than the quantity of the line');
});
Self.observe('before delete', async ctx => {
diff --git a/modules/client/front/defaulter/index.html b/modules/client/front/defaulter/index.html
index 33bb751f1..440f34d3d 100644
--- a/modules/client/front/defaulter/index.html
+++ b/modules/client/front/defaulter/index.html
@@ -54,7 +54,7 @@
Client
-
+
Es trabajador
diff --git a/modules/client/front/defaulter/index.js b/modules/client/front/defaulter/index.js
index bc8686c10..2ec53d380 100644
--- a/modules/client/front/defaulter/index.js
+++ b/modules/client/front/defaulter/index.js
@@ -57,6 +57,11 @@ export default class Controller extends Section {
field: 'observation',
searchable: false
},
+ {
+ field: 'isWorker',
+ checkbox: true,
+
+ },
{
field: 'created',
datepicker: true
@@ -73,9 +78,6 @@ export default class Controller extends Section {
set defaulters(value) {
if (!value || !value.length) return;
- for (let defaulter of value)
- defaulter.isWorker = defaulter.businessTypeFk === 'worker';
-
this._defaulters = value;
}
@@ -164,6 +166,8 @@ export default class Controller extends Section {
exprBuilder(param, value) {
switch (param) {
+ case 'isWorker':
+ return {isWorker: value};
case 'creditInsurance':
case 'amount':
case 'clientFk':
diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js
index 776544bc6..f4703245c 100644
--- a/modules/entry/back/methods/entry/filter.js
+++ b/modules/entry/back/methods/entry/filter.js
@@ -106,10 +106,15 @@ module.exports = Self => {
description: `The to shipped date filter`
},
{
- arg: 'days',
+ arg: 'daysOnward',
type: 'number',
description: `N days interval`
},
+ {
+ arg: 'daysAgo',
+ type: 'number',
+ description: `N days ago interval`
+ },
{
arg: 'invoiceAmount',
type: 'number',
@@ -216,16 +221,29 @@ module.exports = Self => {
JOIN vn.currency cu ON cu.id = e.currencyFk`
);
- if (ctx.args.days) {
- stmt.merge({
- sql: `
- AND t.shipped <= util.VN_CURDATE() + INTERVAL ? DAY
- AND t.shipped >= util.VN_CURDATE()
- `,
- params: [ctx.args.days]
- });
+ stmt.merge(conn.makeWhere(filter.where));
+
+ const {daysAgo, daysOnward} = ctx.args;
+ if (daysOnward || daysAgo) {
+ const params = [];
+ let today = 'util.VN_CURDATE()';
+ let from = today;
+ let to = today;
+
+ if (daysAgo) {
+ from += ' - INTERVAL ? DAY';
+ params.push(daysAgo);
+ }
+ if (daysOnward) {
+ to += ' + INTERVAL ? DAY';
+ params.push(daysOnward);
+ }
+
+ const whereDays = (filter.where ? 'AND' : 'WHERE') + ` t.shipped BETWEEN ${from} AND ${to}`;
+ stmt.merge({sql: whereDays, params});
}
- stmt.merge(conn.makeSuffix(filter));
+
+ stmt.merge(conn.makePagination(filter));
const itemsIndex = stmts.push(stmt) - 1;
const sql = ParameterizedSQL.join(stmts, ';');
diff --git a/modules/entry/back/methods/entry/print.js b/modules/entry/back/methods/entry/print.js
index 11abf0788..5b9de9a69 100644
--- a/modules/entry/back/methods/entry/print.js
+++ b/modules/entry/back/methods/entry/print.js
@@ -52,7 +52,7 @@ module.exports = Self => {
await merger.add(new Uint8Array(pdfBuffer[0]));
}
- if (!merger._doc) throw new UserError('The entry does not have stickers');
+ if (!merger._doc) throw new UserError('The entry not have stickers');
await Self.rawSql(`
UPDATE buy
diff --git a/modules/entry/back/methods/entry/specs/filter.spec.js b/modules/entry/back/methods/entry/specs/filter.spec.js
index 145da170a..4bf5127b0 100644
--- a/modules/entry/back/methods/entry/specs/filter.spec.js
+++ b/modules/entry/back/methods/entry/specs/filter.spec.js
@@ -49,13 +49,13 @@ describe('Entry filter()', () => {
});
describe('should return the entry matching the supplier', () => {
- it('when userId is supplier ', async() => {
+ it('when userId is supplier and searching days onward', async() => {
const tx = await models.Entry.beginTransaction({});
const options = {transaction: tx};
try {
const ctx = {
- args: {days: 6},
+ args: {daysOnward: 6},
req: {accessToken: {userId: 1102}}
};
@@ -70,6 +70,27 @@ describe('Entry filter()', () => {
}
});
+ it('when userId is supplier and searching days ago', async() => {
+ const tx = await models.Entry.beginTransaction({});
+ const options = {transaction: tx};
+
+ try {
+ const ctx = {
+ args: {daysAgo: 31},
+ req: {accessToken: {userId: 1102}}
+ };
+
+ const result = await models.Entry.filter(ctx, options);
+
+ expect(result.length).toEqual(6);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+
it('when userId is supplier fetching other supplier', async() => {
const tx = await models.Entry.beginTransaction({});
const options = {transaction: tx};
diff --git a/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js b/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js
index 3e040d0d3..d5f712edf 100644
--- a/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js
+++ b/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js
@@ -45,8 +45,8 @@ module.exports = Self => {
i.id itemFk,
i.name itemName,
ti.quantity,
- (ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id))
- / (vc.trolleyM3 * 1000000) volume,
+ ROUND((ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id))
+ / (vc.trolleyM3 * 1000000),1) volume,
b.packagingFk packagingFk,
b.packing
FROM tmp.item ti
diff --git a/modules/entry/back/model-config.json b/modules/entry/back/model-config.json
index 85f5e8285..5c45b6e07 100644
--- a/modules/entry/back/model-config.json
+++ b/modules/entry/back/model-config.json
@@ -29,4 +29,4 @@
"StockBought": {
"dataSource": "vn"
}
-}
\ No newline at end of file
+}
diff --git a/modules/entry/front/descriptor-popover/index.html b/modules/entry/front/descriptor-popover/index.html
new file mode 100644
index 000000000..23f641632
--- /dev/null
+++ b/modules/entry/front/descriptor-popover/index.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/modules/zone/front/descriptor-popover/index.js b/modules/entry/front/descriptor-popover/index.js
similarity index 81%
rename from modules/zone/front/descriptor-popover/index.js
rename to modules/entry/front/descriptor-popover/index.js
index a21232e41..d79aed03e 100644
--- a/modules/zone/front/descriptor-popover/index.js
+++ b/modules/entry/front/descriptor-popover/index.js
@@ -3,7 +3,7 @@ import DescriptorPopover from 'salix/components/descriptor-popover';
class Controller extends DescriptorPopover {}
-ngModule.vnComponent('vnZoneDescriptorPopover', {
+ngModule.vnComponent('vnEntryDescriptorPopover', {
slotTemplate: require('./index.html'),
controller: Controller
});
diff --git a/modules/entry/front/descriptor/index.html b/modules/entry/front/descriptor/index.html
new file mode 100644
index 000000000..3354d4155
--- /dev/null
+++ b/modules/entry/front/descriptor/index.html
@@ -0,0 +1,65 @@
+
+
+
+ Show entry report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/entry/front/descriptor/index.js b/modules/entry/front/descriptor/index.js
new file mode 100644
index 000000000..3452a6d34
--- /dev/null
+++ b/modules/entry/front/descriptor/index.js
@@ -0,0 +1,99 @@
+import ngModule from '../module';
+import Descriptor from 'salix/components/descriptor';
+
+class Controller extends Descriptor {
+ get entry() {
+ return this.entity;
+ }
+
+ set entry(value) {
+ this.entity = value;
+ }
+
+ get travelFilter() {
+ let travelFilter;
+ const entryTravel = this.entry && this.entry.travel;
+
+ if (entryTravel && entryTravel.agencyModeFk) {
+ travelFilter = this.entry && JSON.stringify({
+ agencyModeFk: entryTravel.agencyModeFk
+ });
+ }
+ return travelFilter;
+ }
+
+ get entryFilter() {
+ let entryTravel = this.entry && this.entry.travel;
+
+ if (!entryTravel || !entryTravel.landed) return null;
+
+ const date = new Date(entryTravel.landed);
+ date.setHours(0, 0, 0, 0);
+
+ const from = new Date(date.getTime());
+ from.setDate(from.getDate() - 10);
+
+ const to = new Date(date.getTime());
+ to.setDate(to.getDate() + 10);
+
+ return JSON.stringify({
+ supplierFk: this.entry.supplierFk,
+ from,
+ to
+ });
+ }
+
+ loadData() {
+ const filter = {
+ include: [
+ {
+ relation: 'travel',
+ scope: {
+ fields: ['id', 'landed', 'agencyModeFk', 'warehouseOutFk'],
+ include: [
+ {
+ relation: 'agency',
+ scope: {
+ fields: ['name']
+ }
+ },
+ {
+ relation: 'warehouseOut',
+ scope: {
+ fields: ['name']
+ }
+ },
+ {
+ relation: 'warehouseIn',
+ scope: {
+ fields: ['name']
+ }
+ }
+ ]
+ }
+ },
+ {
+ relation: 'supplier',
+ scope: {
+ fields: ['id', 'nickname']
+ }
+ }
+ ]
+ };
+
+ return this.getData(`Entries/${this.id}`, {filter})
+ .then(res => this.entity = res.data);
+ }
+
+ showEntryReport() {
+ this.vnReport.show(`Entries/${this.id}/entry-order-pdf`);
+ }
+}
+
+ngModule.vnComponent('vnEntryDescriptor', {
+ template: require('./index.html'),
+ controller: Controller,
+ bindings: {
+ entry: '<'
+ }
+});
diff --git a/modules/entry/front/index.js b/modules/entry/front/index.js
index a7209a0bd..0f2208862 100644
--- a/modules/entry/front/index.js
+++ b/modules/entry/front/index.js
@@ -1,3 +1,6 @@
export * from './module';
import './main';
+import './descriptor';
+import './descriptor-popover';
+import './summary';
diff --git a/modules/entry/front/routes.json b/modules/entry/front/routes.json
index 53c599cf1..a2e70e37d 100644
--- a/modules/entry/front/routes.json
+++ b/modules/entry/front/routes.json
@@ -8,6 +8,12 @@
"main": [
{"state": "entry.index", "icon": "icon-entry"},
{"state": "entry.latestBuys", "icon": "contact_support"}
+ ],
+ "card": [
+ {"state": "entry.card.basicData", "icon": "settings"},
+ {"state": "entry.card.buy.index", "icon": "icon-lines"},
+ {"state": "entry.card.observation", "icon": "insert_drive_file"},
+ {"state": "entry.card.log", "icon": "history"}
]
},
"keybindings": [
@@ -27,6 +33,90 @@
"component": "vn-entry-index",
"description": "Entries",
"acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/latest-buys?q",
+ "state": "entry.latestBuys",
+ "component": "vn-entry-latest-buys",
+ "description": "Latest buys",
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/create?supplierFk&travelFk&companyFk",
+ "state": "entry.create",
+ "component": "vn-entry-create",
+ "description": "New entry",
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/:id",
+ "state": "entry.card",
+ "abstract": true,
+ "component": "vn-entry-card"
+ },
+ {
+ "url": "/summary",
+ "state": "entry.card.summary",
+ "component": "vn-entry-summary",
+ "description": "Summary",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/basic-data",
+ "state": "entry.card.basicData",
+ "component": "vn-entry-basic-data",
+ "description": "Basic data",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/observation",
+ "state": "entry.card.observation",
+ "component": "vn-entry-observation",
+ "description": "Notes",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url" : "/log",
+ "state": "entry.card.log",
+ "component": "vn-entry-log",
+ "description": "Log",
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/buy",
+ "state": "entry.card.buy",
+ "abstract": true,
+ "component": "ui-view",
+ "acl": ["buyer"]
+ },
+ {
+ "url" : "/index",
+ "state": "entry.card.buy.index",
+ "component": "vn-entry-buy-index",
+ "description": "Buys",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url" : "/import",
+ "state": "entry.card.buy.import",
+ "component": "vn-entry-buy-import",
+ "description": "Import buys",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer"]
}
]
}
diff --git a/modules/entry/front/summary/index.html b/modules/entry/front/summary/index.html
new file mode 100644
index 000000000..22ea87bdf
--- /dev/null
+++ b/modules/entry/front/summary/index.html
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+ #{{$ctrl.entryData.id}} - {{$ctrl.entryData.supplier.nickname}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$ctrl.entryData.travel.ref}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Buys
+
+
+
+ Quantity
+ Stickers
+ Package
+ Weight
+ Packing
+ Grouping
+ Buying value
+ Import
+ PVP
+
+
+
+
+ {{::line.quantity}}
+ {{::line.stickers | dashIfEmpty}}
+ {{::line.packagingFk | dashIfEmpty}}
+ {{::line.weight}}
+
+
+ {{::line.packing | dashIfEmpty}}
+
+
+
+
+ {{::line.grouping | dashIfEmpty}}
+
+
+ {{::line.buyingValue | currency: 'EUR':2}}
+ {{::line.quantity * line.buyingValue | currency: 'EUR':2}}
+ {{::line.price2 | currency: 'EUR':2 | dashIfEmpty}} / {{::line.price3 | currency: 'EUR':2 | dashIfEmpty}}
+
+
+
+
+ {{::line.item.itemType.code}}
+
+
+
+
+ {{::line.item.id}}
+
+
+
+
+ {{::line.item.size}}
+
+
+
+
+ {{::line.item.minPrice | currency: 'EUR':2}}
+
+
+
+
+ {{::line.item.name}}
+
+ {{::line.item.subName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/entry/front/summary/index.js b/modules/entry/front/summary/index.js
new file mode 100644
index 000000000..6e18bc959
--- /dev/null
+++ b/modules/entry/front/summary/index.js
@@ -0,0 +1,33 @@
+import ngModule from '../module';
+import './style.scss';
+import Summary from 'salix/components/summary';
+
+class Controller extends Summary {
+ get entry() {
+ if (!this._entry)
+ return this.$params;
+
+ return this._entry;
+ }
+
+ set entry(value) {
+ this._entry = value;
+
+ if (value && value.id)
+ this.getEntryData();
+ }
+
+ getEntryData() {
+ return this.$http.get(`Entries/${this.entry.id}/getEntry`).then(response => {
+ this.entryData = response.data;
+ });
+ }
+}
+
+ngModule.vnComponent('vnEntrySummary', {
+ template: require('./index.html'),
+ controller: Controller,
+ bindings: {
+ entry: '<'
+ }
+});
diff --git a/modules/entry/front/summary/style.scss b/modules/entry/front/summary/style.scss
new file mode 100644
index 000000000..1d5b22e30
--- /dev/null
+++ b/modules/entry/front/summary/style.scss
@@ -0,0 +1,30 @@
+@import "variables";
+
+
+vn-entry-summary .summary {
+ max-width: $width-lg;
+
+ .dark-row {
+ background-color: lighten($color-marginal, 10%);
+ }
+
+ tbody tr:nth-child(1) {
+ border-top: $border-thin;
+ }
+
+ tbody tr:nth-child(1),
+ tbody tr:nth-child(2) {
+ border-left: $border-thin;
+ border-right: $border-thin
+ }
+
+ tbody tr:nth-child(3) {
+ height: inherit
+ }
+
+ tr {
+ margin-bottom: 10px;
+ }
+}
+
+$color-font-link-medium: lighten($color-font-link, 20%)
\ No newline at end of file
diff --git a/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js b/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js
index c46da0ba5..a06128848 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js
@@ -10,6 +10,11 @@ module.exports = Self => {
type: 'any',
description: 'The invoiceable client id'
},
+ {
+ arg: 'addressFk',
+ type: 'any',
+ description: 'The address id'
+ },
{
arg: 'ticketFk',
type: 'any',
@@ -23,7 +28,8 @@ module.exports = Self => {
{
arg: 'serial',
type: 'string',
- description: 'The invoice serial'
+ description: 'The invoice serial',
+ required: true
},
{
arg: 'taxArea',
@@ -46,108 +52,126 @@ module.exports = Self => {
}
});
- Self.createManualInvoice = async(ctx, clientFk, ticketFk, maxShipped, serial, taxArea, reference, options) => {
- if (!clientFk && !ticketFk) throw new UserError(`Select ticket or client`);
- const models = Self.app.models;
- const myOptions = {userId: ctx.req.accessToken.userId};
- let tx;
+ Self.createManualInvoice =
+ async(ctx, clientFk, addressFk, ticketFk, maxShipped, serial, taxArea, reference, options) => {
+ if (!clientFk && !ticketFk) throw new UserError(`Select ticket or client`);
+ const models = Self.app.models;
+ const myOptions = {userId: ctx.req.accessToken.userId};
+ let tx;
- if (typeof options == 'object')
- Object.assign(myOptions, options);
+ if (typeof options == 'object')
+ Object.assign(myOptions, options);
- if (!myOptions.transaction) {
- tx = await Self.beginTransaction({});
- myOptions.transaction = tx;
- }
+ if (!myOptions.transaction) {
+ tx = await Self.beginTransaction({});
+ myOptions.transaction = tx;
+ }
- let companyId;
- let newInvoice;
- let query;
- try {
- if (ticketFk) {
- const ticket = await models.Ticket.findById(ticketFk, null, myOptions);
- const company = await models.Company.findById(ticket.companyFk, null, myOptions);
+ let companyFk;
+ let newInvoice;
+ let query;
+ try {
+ if (ticketFk) {
+ const ticket = await models.Ticket.findById(ticketFk, {
+ fields: ['clientFk', 'companyFk', 'shipped', 'refFk', 'totalWithVat']
+ }, myOptions);
+ const company = await models.Company.findById(ticket.companyFk, {
+ fields: ['code']
+ }, myOptions);
- clientFk = ticket.clientFk;
- maxShipped = ticket.shipped;
- companyId = ticket.companyFk;
+ clientFk = ticket.clientFk;
+ maxShipped = ticket.shipped;
+ companyFk = ticket.companyFk;
- // Validates invoiced ticket
- if (ticket.refFk)
- throw new UserError('This ticket is already invoiced');
+ if (ticket.refFk)
+ throw new UserError('This ticket is already invoiced');
- // Validates ticket amount
- if (ticket.totalWithVat == 0)
- throw new UserError(`A ticket with an amount of zero can't be invoiced`);
+ if (ticket.totalWithVat == 0)
+ throw new UserError(`A ticket with an amount of zero can't be invoiced`);
- // Validates ticket nagative base
- const hasNegativeBase = await getNegativeBase(maxShipped, clientFk, companyId, myOptions);
- if (hasNegativeBase && company.code == 'VNL')
- throw new UserError(`A ticket with a negative base can't be invoiced`);
- } else {
- if (!maxShipped)
- throw new UserError(`Max shipped required`);
+ const hasNegativeBase = await getNegativeBase(maxShipped, clientFk, companyFk, myOptions);
+ if (hasNegativeBase && company.code == 'VNL')
+ throw new UserError(`A ticket with a negative base can't be invoiced`);
+ } else {
+ if (!maxShipped)
+ throw new UserError(`Max shipped required`);
- const company = await models.Ticket.findOne({
- fields: ['companyFk'],
- where: {
- clientFk: clientFk,
- shipped: {lte: maxShipped}
+ if (addressFk) {
+ const address = await models.Address.findById(addressFk, {
+ fields: ['clientFk']
+ }, myOptions);
+
+ if (clientFk && clientFk !== address.clientFk)
+ throw new UserError('The provided clientFk does not match');
}
- }, myOptions);
- companyId = company.companyFk;
+ const company = await models.Ticket.findOne({
+ fields: ['companyFk'],
+ where: {
+ clientFk: clientFk,
+ shipped: {lte: maxShipped}
+ }
+ }, myOptions);
+ companyFk = company.companyFk;
+ }
+
+ const isClientInvoiceable = await isInvoiceable(clientFk, myOptions);
+ if (!isClientInvoiceable)
+ throw new UserError(`This client is not invoiceable`);
+
+ const tomorrow = Date.vnNew();
+ tomorrow.setDate(tomorrow.getDate() + 1);
+
+ if (maxShipped >= tomorrow)
+ throw new UserError(`Can't invoice to future`);
+
+ const maxInvoiceDate = await getMaxIssued(serial, companyFk, myOptions);
+ if (Date.vnNew() < maxInvoiceDate)
+ throw new UserError(`Can't invoice to past`);
+
+ if (ticketFk) {
+ query = `CALL invoiceOut_newFromTicket(?, ?, ?, ?, @newInvoiceId)`;
+ await Self.rawSql(query, [
+ ticketFk,
+ serial,
+ taxArea,
+ reference
+ ], myOptions);
+ } else if (addressFk) {
+ query = `CALL invoiceOut_newFromAddress(?, ?, ?, ?, ?, ?, @newInvoiceId)`;
+ await Self.rawSql(query, [
+ addressFk,
+ serial,
+ maxShipped,
+ companyFk,
+ taxArea,
+ reference
+ ], myOptions);
+ } else {
+ query = `CALL invoiceOut_newFromClient(?, ?, ?, ?, ?, ?, @newInvoiceId)`;
+ await Self.rawSql(query, [
+ clientFk,
+ serial,
+ maxShipped,
+ companyFk,
+ taxArea,
+ reference
+ ], myOptions);
+ }
+
+ [newInvoice] = await Self.rawSql(`SELECT @newInvoiceId id`, null, myOptions);
+
+ if (tx) await tx.commit();
+ } catch (e) {
+ if (tx) await tx.rollback();
+ throw e;
}
- // Validate invoiceable client
- const isClientInvoiceable = await isInvoiceable(clientFk, myOptions);
- if (!isClientInvoiceable)
- throw new UserError(`This client is not invoiceable`);
+ if (!newInvoice.id) throw new UserError('It was not able to create the invoice');
- // Can't invoice tickets into future
- const tomorrow = Date.vnNew();
- tomorrow.setDate(tomorrow.getDate() + 1);
+ await Self.createPdf(ctx, newInvoice.id);
- if (maxShipped >= tomorrow)
- throw new UserError(`Can't invoice to future`);
-
- const maxInvoiceDate = await getMaxIssued(serial, companyId, myOptions);
- if (Date.vnNew() < maxInvoiceDate)
- throw new UserError(`Can't invoice to past`);
-
- if (ticketFk) {
- query = `CALL invoiceOut_newFromTicket(?, ?, ?, ?, @newInvoiceId)`;
- await Self.rawSql(query, [
- ticketFk,
- serial,
- taxArea,
- reference
- ], myOptions);
- } else {
- query = `CALL invoiceOut_newFromClient(?, ?, ?, ?, ?, ?, @newInvoiceId)`;
- await Self.rawSql(query, [
- clientFk,
- serial,
- maxShipped,
- companyId,
- taxArea,
- reference
- ], myOptions);
- }
-
- [newInvoice] = await Self.rawSql(`SELECT @newInvoiceId id`, null, myOptions);
-
- if (tx) await tx.commit();
- } catch (e) {
- if (tx) await tx.rollback();
- throw e;
- }
-
- if (!newInvoice.id) throw new UserError('It was not able to create the invoice');
-
- await Self.createPdf(ctx, newInvoice.id);
-
- return newInvoice;
- };
+ return newInvoice;
+ };
async function isInvoiceable(clientFk, options) {
const models = Self.app.models;
@@ -159,10 +183,10 @@ module.exports = Self => {
return result.invoiceable;
}
- async function getNegativeBase(maxShipped, clientFk, companyId, options) {
+ async function getNegativeBase(maxShipped, clientFk, companyFk, options) {
const models = Self.app.models;
await models.InvoiceOut.rawSql('CALL invoiceOut_exportationFromClient(?,?,?)',
- [maxShipped, clientFk, companyId], options
+ [maxShipped, clientFk, companyFk], options
);
const query = 'SELECT vn.hasAnyNegativeBase() AS base';
const [result] = await models.InvoiceOut.rawSql(query, [], options);
@@ -170,14 +194,14 @@ module.exports = Self => {
return result.base;
}
- async function getMaxIssued(serial, companyId, options) {
+ async function getMaxIssued(serial, companyFk, options) {
const models = Self.app.models;
const query = `SELECT MAX(issued) AS issued
FROM invoiceOut
WHERE serial = ? AND companyFk = ?`;
const [maxIssued] = await models.InvoiceOut.rawSql(query,
- [serial, companyId], options);
- const maxInvoiceDate = maxIssued && maxIssued.issued || Date.vnNew();
+ [serial, companyFk], options);
+ const maxInvoiceDate = maxIssued?.issued || Date.vnNew();
return maxInvoiceDate;
}
diff --git a/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js b/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
index bf7e7d3cb..2fad1afd8 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
@@ -64,7 +64,7 @@ module.exports = Self => {
try {
const client = await models.Client.findById(args.clientId, {
fields: ['id', 'hasToInvoiceByAddress']
- }, options);
+ }, myOptions);
if (client.hasToInvoiceByAddress) {
await Self.rawSql('CALL ticketToInvoiceByAddress(?, ?, ?, ?)', [
@@ -72,13 +72,13 @@ module.exports = Self => {
args.maxShipped,
args.addressId,
args.companyFk
- ], options);
+ ], myOptions);
} else {
await Self.rawSql('CALL invoiceFromClient(?, ?, ?)', [
args.maxShipped,
client.id,
args.companyFk
- ], options);
+ ], myOptions);
}
const invoiceId = await models.Ticket.makeInvoice(
@@ -87,7 +87,7 @@ module.exports = Self => {
args.companyFk,
args.invoiceDate,
null,
- options
+ myOptions
);
if (tx) await tx.commit();
diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js
index 55739e570..58c18b730 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js
@@ -6,110 +6,90 @@ describe('InvoiceOut createManualInvoice()', () => {
const clientId = 1106;
const activeCtx = {accessToken: {userId: 1}};
const ctx = {req: activeCtx};
+ let tx; let options;
+
+ beforeEach(async() => {
+ spyOn(models.InvoiceOut, 'createPdf').and.returnValue(Promise.resolve(true));
+ spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
+ active: activeCtx
+ });
+
+ tx = await models.InvoiceOut.beginTransaction({});
+ options = {transaction: tx};
+ });
+
+ afterEach(async() => {
+ await tx.rollback();
+ });
it('should throw an error trying to invoice again', async() => {
- spyOn(models.InvoiceOut, 'createPdf').and.returnValue(new Promise(resolve => resolve(true)));
-
- const tx = await models.InvoiceOut.beginTransaction({});
- const options = {transaction: tx};
-
let error;
try {
- await createInvoice(ctx, options, undefined, ticketId);
- await createInvoice(ctx, options, undefined, ticketId);
-
- await tx.rollback();
+ await createInvoice(ctx, options, undefined, undefined, ticketId);
+ await createInvoice(ctx, options, undefined, undefined, ticketId);
} catch (e) {
error = e;
- await tx.rollback();
}
expect(error.message).toContain('This ticket is already invoiced');
});
it('should throw an error for a ticket with an amount of zero', async() => {
- spyOn(models.InvoiceOut, 'createPdf').and.returnValue(new Promise(resolve => resolve(true)));
- spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
- active: activeCtx
- });
-
- const tx = await models.InvoiceOut.beginTransaction({});
- const options = {transaction: tx};
-
let error;
try {
const ticket = await models.Ticket.findById(ticketId, null, options);
await ticket.updateAttributes({totalWithVat: 0}, options);
- await createInvoice(ctx, options, undefined, ticketId);
- await tx.rollback();
+ await createInvoice(ctx, options, undefined, undefined, ticketId);
} catch (e) {
error = e;
- await tx.rollback();
}
expect(error.message).toContain(`A ticket with an amount of zero can't be invoiced`);
});
it('should throw an error when the clientFk property is set without the max shipped date', async() => {
- spyOn(models.InvoiceOut, 'createPdf').and.returnValue(new Promise(resolve => resolve(true)));
-
- const tx = await models.InvoiceOut.beginTransaction({});
- const options = {transaction: tx};
-
let error;
try {
await createInvoice(ctx, options, clientId);
- await tx.rollback();
} catch (e) {
error = e;
- await tx.rollback();
}
expect(error.message).toContain(`Max shipped required`);
});
it('should throw an error for a non-invoiceable client', async() => {
- spyOn(models.InvoiceOut, 'createPdf').and.returnValue(new Promise(resolve => resolve(true)));
- spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
- active: activeCtx
- });
-
- const tx = await models.InvoiceOut.beginTransaction({});
- const options = {transaction: tx};
-
let error;
try {
const client = await models.Client.findById(clientId, null, options);
await client.updateAttributes({isTaxDataChecked: false}, options);
- await createInvoice(ctx, options, undefined, ticketId);
-
- await tx.rollback();
+ await createInvoice(ctx, options, undefined, undefined, ticketId);
} catch (e) {
error = e;
- await tx.rollback();
}
expect(error.message).toContain(`This client is not invoiceable`);
});
- it('should create a manual invoice', async() => {
- spyOn(models.InvoiceOut, 'createPdf').and.returnValue(new Promise(resolve => resolve(true)));
+ it('should create a manual invoice with ticket', async() => {
+ const result = await createInvoice(ctx, options, undefined, undefined, ticketId);
- const tx = await models.InvoiceOut.beginTransaction({});
- const options = {transaction: tx};
+ expect(result.id).toEqual(jasmine.any(Number));
+ });
- try {
- const result = await createInvoice(ctx, options, undefined, ticketId);
+ it('should create a manual invoice with client', async() => {
+ const result = await createInvoice(ctx, options, clientId, undefined, undefined, Date.vnNew());
- expect(result.id).toEqual(jasmine.any(Number));
+ expect(result.id).toEqual(jasmine.any(Number));
+ });
- await tx.rollback();
- } catch (e) {
- await tx.rollback();
- throw e;
- }
+ it('should create a manual invoice with address', async() => {
+ const addressFk = 126;
+ const result = await createInvoice(ctx, options, clientId, addressFk, undefined, Date.vnNew());
+
+ expect(result.id).toEqual(jasmine.any(Number));
});
});
@@ -117,6 +97,7 @@ function createInvoice(
ctx,
options,
clientFk = undefined,
+ addressFk = undefined,
ticketFk = undefined,
maxShipped = undefined,
serial = 'T',
@@ -124,6 +105,6 @@ function createInvoice(
reference = undefined
) {
return models.InvoiceOut.createManualInvoice(
- ctx, clientFk, ticketFk, maxShipped, serial, taxArea, reference, options
+ ctx, clientFk, addressFk, ticketFk, maxShipped, serial, taxArea, reference, options
);
}
diff --git a/modules/item/back/methods/item-shelving/deleteItemShelvings.js b/modules/item/back/methods/item-shelving/deleteItemShelvings.js
index f534b4e9a..fbc354cce 100644
--- a/modules/item/back/methods/item-shelving/deleteItemShelvings.js
+++ b/modules/item/back/methods/item-shelving/deleteItemShelvings.js
@@ -34,6 +34,11 @@ module.exports = Self => {
try {
const promises = [];
for (let itemShelvingId of itemShelvingIds) {
+ const itemShelvingSaleToDelete = models.ItemShelvingSale.destroyAll({
+ itemShelvingFk: itemShelvingId
+ }, myOptions);
+ promises.push(itemShelvingSaleToDelete);
+
const itemShelvingToDelete = models.ItemShelving.destroyById(itemShelvingId, myOptions);
promises.push(itemShelvingToDelete);
}
diff --git a/modules/item/back/methods/item-shelving/specs/deleteItemShelvings.spec.js b/modules/item/back/methods/item-shelving/specs/deleteItemShelvings.spec.js
index b4113d7cf..541a529cb 100644
--- a/modules/item/back/methods/item-shelving/specs/deleteItemShelvings.spec.js
+++ b/modules/item/back/methods/item-shelving/specs/deleteItemShelvings.spec.js
@@ -10,7 +10,7 @@ describe('ItemShelving deleteItemShelvings()', () => {
const itemShelvingIds = [1, 2];
const result = await models.ItemShelving.deleteItemShelvings(itemShelvingIds, options);
- expect(result.length).toEqual(2);
+ expect(result.length).toEqual(4);
await tx.rollback();
} catch (e) {
diff --git a/modules/item/back/methods/item-shelving/updateFromSale.js b/modules/item/back/methods/item-shelving/updateFromSale.js
index 167509074..47ca2a010 100644
--- a/modules/item/back/methods/item-shelving/updateFromSale.js
+++ b/modules/item/back/methods/item-shelving/updateFromSale.js
@@ -38,9 +38,13 @@ module.exports = Self => {
const itemShelving = itemShelvingSale.itemShelving();
const quantity = itemShelving.visible + itemShelvingSale.quantity;
+ const available = itemShelving.available + itemShelvingSale.quantity;
await itemShelving.updateAttributes(
- {visible: quantity},
+ {
+ visible: quantity,
+ available: available
+ },
myOptions
);
if (tx) await tx.commit();
diff --git a/modules/item/front/routes.json b/modules/item/front/routes.json
index 4b7cd1490..05b887a96 100644
--- a/modules/item/front/routes.json
+++ b/modules/item/front/routes.json
@@ -3,7 +3,7 @@
"name": "Items",
"icon": "icon-item",
"validations" : true,
- "dependencies": ["worker", "client", "ticket"],
+ "dependencies": ["worker", "client", "ticket", "entry"],
"menus": {
"main": [
{"state": "item.index", "icon": "icon-item"},
diff --git a/modules/monitor/front/index.js b/modules/monitor/front/index.js
index 19ea06b5a..a7209a0bd 100644
--- a/modules/monitor/front/index.js
+++ b/modules/monitor/front/index.js
@@ -1,8 +1,3 @@
export * from './module';
import './main';
-import './index/';
-import './index/tickets';
-import './index/clients';
-import './index/orders';
-import './index/search-panel';
diff --git a/modules/monitor/front/index/clients/index.html b/modules/monitor/front/index/clients/index.html
deleted file mode 100644
index c0e3d1b14..000000000
--- a/modules/monitor/front/index/clients/index.html
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Date
-
-
- Hour
-
-
- Salesperson
-
-
- Client
-
-
-
-
-
-
-
- {{::visit.dated | date:'dd/MM/yy'}}
-
-
-
-
- {{::visit.hour | date: 'HH:mm'}}
-
-
-
-
- {{::visit.salesPerson | dashIfEmpty}}
-
-
-
-
- {{::visit.clientName}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/monitor/front/index/clients/index.js b/modules/monitor/front/index/clients/index.js
deleted file mode 100644
index ac3ce9140..000000000
--- a/modules/monitor/front/index/clients/index.js
+++ /dev/null
@@ -1,96 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
-
- const date = Date.vnNew();
- this.dateFrom = date;
- this.dateTo = date;
- this.filter = {
- where: {
- 'v.stamp': {
- between: this.dateRange()
- }
- }
- };
-
- this.smartTableOptions = {
- activeButtons: {
- search: true
- },
- columns: [
- {
- field: 'clientFk',
- autocomplete: {
- url: 'Clients',
- showField: 'name',
- valueField: 'id'
- }
- },
- {
- field: 'salesPersonFk',
- autocomplete: {
- url: 'Workers/activeWithInheritedRole',
- where: `{role: 'salesPerson'}`,
- searchFunction: '{firstName: $search}',
- showField: 'nickname',
- valueField: 'id',
- }
- },
- {
- field: 'dated',
- searchable: false
- },
- {
- field: 'hour',
- searchable: false
- }
- ]
- };
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'clientFk':
- return {[`c.id`]: value};
- case 'salesPersonFk':
- return {[`c.${param}`]: value};
- }
- }
-
- dateRange() {
- let from = this.dateFrom;
- let to = this.dateTo;
- if (!from)
- from = Date.vnNew();
- if (!to)
- to = Date.vnNew();
- const minHour = new Date(from);
- minHour.setHours(0, 0, 0, 0);
- const maxHour = new Date(to);
- maxHour.setHours(23, 59, 59, 59);
-
- return [minHour, maxHour];
- }
-
- addFilterDate() {
- this.$.model.filter = {
- where: {
- 'v.stamp': {
- between: this.dateRange()
- }
- }
- };
- this.$.model.refresh();
- }
-}
-
-ngModule.vnComponent('vnMonitorSalesClients', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- main: '^vnMonitorIndex'
- }
-});
diff --git a/modules/monitor/front/index/index.html b/modules/monitor/front/index/index.html
deleted file mode 100644
index 85987ac20..000000000
--- a/modules/monitor/front/index/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/monitor/front/index/index.js b/modules/monitor/front/index/index.js
deleted file mode 100644
index 72ca9dae9..000000000
--- a/modules/monitor/front/index/index.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
-
- const isTopPanelHidden = localStorage.getItem('ticketTopPanelHidden');
- if (isTopPanelHidden === 'true')
- this.isTopPanelHidden = true;
- }
-
- toggle() {
- const monitor = this.element.querySelector('vn-horizontal');
- const isHidden = monitor.classList.contains('hidden');
-
- if (!isHidden) {
- monitor.classList.add('hidden');
- localStorage.setItem('ticketTopPanelHidden', true);
- } else {
- monitor.classList.remove('hidden');
- localStorage.setItem('ticketTopPanelHidden', false);
- }
- }
-}
-
-ngModule.vnComponent('vnMonitorIndex', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- main: '^vnMonitorIndex'
- }
-});
diff --git a/modules/monitor/front/index/index.spec.js b/modules/monitor/front/index/index.spec.js
deleted file mode 100644
index 506e75720..000000000
--- a/modules/monitor/front/index/index.spec.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import './index.js';
-describe('Component vnMonitorIndex', () => {
- let controller;
- let $element;
-
- beforeEach(ngModule('monitor'));
-
- beforeEach(inject(($compile, $rootScope) => {
- $element = $compile(' ')($rootScope);
- controller = $element.controller('vnMonitorIndex');
- }));
-
- describe('toggle()', () => {
- it('should add the hidden class to the horizontal contaning the panel to hide', () => {
- controller.toggle();
-
- const targetElement = $element[0].querySelector('vn-horizontal');
- const firstClass = targetElement.classList[0];
-
- const isTopPanelHidden = localStorage.getItem('ticketTopPanelHidden');
-
- expect(firstClass).toEqual('hidden');
- expect(isTopPanelHidden).toEqual('true');
- });
-
- it('should remove the hidden class to the horizontal contaning the panel to hide', () => {
- const targetElement = $element[0].querySelector('vn-horizontal');
- targetElement.classList.add('hidden');
- controller.toggle();
- const firstClass = targetElement.classList[0];
-
- const isTopPanelHidden = localStorage.getItem('ticketTopPanelHidden');
-
- expect(firstClass).toBeUndefined();
- expect(isTopPanelHidden).toEqual('false');
- });
- });
-});
diff --git a/modules/monitor/front/index/locale/es.yml b/modules/monitor/front/index/locale/es.yml
deleted file mode 100644
index f114a2259..000000000
--- a/modules/monitor/front/index/locale/es.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-Tickets monitor: Monitor de tickets
-Clients on website: Clientes activos en la web
-Recent order actions: Acciones recientes en pedidos
-Search tickets: Buscar tickets
-Delete selected elements: Eliminar los elementos seleccionados
-All the selected elements will be deleted. Are you sure you want to continue?: Todos los elementos seleccionados serán eliminados. ¿Seguro que quieres continuar?
-Component lack: Faltan componentes
-Ticket too little: Ticket demasiado pequeño
-Minimize/Maximize: Minimizar/Maximizar
-Problems: Problemas
-Theoretical: Teórica
-Practical: Práctica
-Preparation: Preparación
-Auto-refresh: Auto-refresco
-Toggle auto-refresh every 2 minutes: Conmuta el refresco automático cada 2 minutos
-Is fragile: Es frágil
diff --git a/modules/monitor/front/index/orders/index.html b/modules/monitor/front/index/orders/index.html
deleted file mode 100644
index 4d1171185..000000000
--- a/modules/monitor/front/index/orders/index.html
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- Date
- Client
- SalesPerson
-
-
-
-
-
-
-
-
-
-
- {{::order.date_send | date: 'dd/MM/yyyy'}}
-
-
-
-
- {{::order.clientName}}
-
-
-
-
- {{::order.salesPerson | dashIfEmpty}}
-
-
-
-
-
-
-
- {{::order.date_make | date: 'dd/MM/yyyy HH:mm'}}
-
-
-
-
- {{::order.agencyName | dashIfEmpty}}
-
-
-
- {{::order.import | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Filter by selection
-
-
- Exclude selection
-
-
- Remove filter
-
-
- Remove all filters
-
-
- Copy value
-
-
-
-
-
diff --git a/modules/monitor/front/index/orders/index.js b/modules/monitor/front/index/orders/index.js
deleted file mode 100644
index 40100b79f..000000000
--- a/modules/monitor/front/index/orders/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- get checked() {
- const rows = this.$.model.data || [];
- const checkedRows = [];
- for (let row of rows) {
- if (row.checked)
- checkedRows.push(row.id);
- }
-
- return checkedRows;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- onDelete() {
- const params = {deletes: this.checked};
- const query = `SalesMonitors/deleteOrders`;
- this.$http.post(query, params).then(
- () => this.$.model.refresh());
- }
-
- chipColor(date) {
- const today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
-
- const orderLanded = new Date(date);
- orderLanded.setHours(0, 0, 0, 0);
-
- const difference = today - orderLanded;
-
- if (difference == 0)
- return 'warning';
- if (difference < 0)
- return 'success';
- if (difference > 0)
- return 'alert';
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'date_send':
- return {[`o.date_send`]: {
- between: this.dateRange(value)}
- };
- case 'clientFk':
- return {[`c.id`]: value};
- case 'salesPersonFk':
- return {[`c.${param}`]: value};
- }
- }
-
- dateRange(value) {
- const minHour = new Date(value);
- minHour.setHours(0, 0, 0, 0);
- const maxHour = new Date(value);
- maxHour.setHours(23, 59, 59, 59);
-
- return [minHour, maxHour];
- }
-}
-
-ngModule.vnComponent('vnMonitorSalesOrders', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- main: '^vnMonitorIndex'
- }
-});
diff --git a/modules/monitor/front/index/orders/index.spec.js b/modules/monitor/front/index/orders/index.spec.js
deleted file mode 100644
index 109925358..000000000
--- a/modules/monitor/front/index/orders/index.spec.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Component vnMonitorSalesOrders', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('monitor'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element(' ');
- controller = $componentController('vnMonitorSalesOrders', {$element});
- controller.$.model = crudModel;
- controller.$.model.data = [
- {id: 1, name: 'My item 1'},
- {id: 2, name: 'My item 2'},
- {id: 3, name: 'My item 3'}
- ];
- }));
-
- describe('checked() getter', () => {
- it('should return a the selected rows', () => {
- const modelData = controller.$.model.data;
- modelData[0].checked = true;
- modelData[1].checked = true;
-
- const result = controller.checked;
-
- expect(result).toEqual(expect.arrayContaining([1, 2]));
- });
- });
-
- describe('onDelete()', () => {
- it('should make a query and then call to the model refresh() method', () => {
- jest.spyOn(controller.$.model, 'refresh');
-
- const modelData = controller.$.model.data;
- modelData[0].checked = true;
- modelData[1].checked = true;
-
- const expectedParams = {deletes: [1, 2]};
- $httpBackend.expect('POST', 'SalesMonitors/deleteOrders', expectedParams).respond(200);
- controller.onDelete();
- $httpBackend.flush();
-
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/monitor/front/index/orders/style.scss b/modules/monitor/front/index/orders/style.scss
deleted file mode 100644
index 64d6497c9..000000000
--- a/modules/monitor/front/index/orders/style.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-@import "variables";
-
-vn-monitor-sales-orders {
- vn-table.scrollable {
- max-height: 350px;
- overflow-x: hidden
- }
-
- vn-table a.vn-tbody {
- & > vn-tr:nth-child(2) {
- color: gray;
-
- & > vn-td {
- border-bottom: $border;
- font-size: 13px;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/modules/monitor/front/index/search-panel/index.html b/modules/monitor/front/index/search-panel/index.html
deleted file mode 100644
index 25a3510ab..000000000
--- a/modules/monitor/front/index/search-panel/index.html
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
diff --git a/modules/monitor/front/index/search-panel/index.js b/modules/monitor/front/index/search-panel/index.js
deleted file mode 100644
index ef6625e8a..000000000
--- a/modules/monitor/front/index/search-panel/index.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import ngModule from '../../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- constructor($, $element) {
- super($, $element);
- this.filter = this.$.filter;
-
- this.getGroupedStates();
- }
-
- getGroupedStates() {
- let groupedStates = [];
- this.$http.get('AlertLevels').then(res => {
- for (let state of res.data) {
- groupedStates.push({
- id: state.id,
- code: state.code,
- name: this.$t(state.code)
- });
- }
- this.groupedStates = groupedStates;
- });
- }
-
- get from() {
- return this._from;
- }
-
- set from(value) {
- this._from = value;
- this.filter.scopeDays = null;
- }
-
- get to() {
- return this._to;
- }
-
- set to(value) {
- this._to = value;
- this.filter.scopeDays = null;
- }
-
- get scopeDays() {
- return this._scopeDays;
- }
-
- set scopeDays(value) {
- this._scopeDays = value;
-
- this.filter.from = null;
- this.filter.to = null;
- }
-}
-
-ngModule.vnComponent('vnMonitorSalesSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/monitor/front/index/search-panel/index.spec.js b/modules/monitor/front/index/search-panel/index.spec.js
deleted file mode 100644
index 18cf1abfc..000000000
--- a/modules/monitor/front/index/search-panel/index.spec.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import './index';
-
-describe('Monitor Component vnMonitorSalesSearchPanel', () => {
- let $httpBackend;
- let controller;
-
- beforeEach(ngModule('monitor'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnMonitorSalesSearchPanel', {$element: null});
- controller.$t = () => {};
- controller.filter = {};
- }));
-
- describe('getGroupedStates()', () => {
- it('should set an array of groupedStates with the adition of a name translation', () => {
- jest.spyOn(controller, '$t').mockReturnValue('miCodigo');
- const data = [
- {
- id: 9999,
- code: 'myCode'
- }
- ];
- $httpBackend.whenGET('AlertLevels').respond(data);
- controller.getGroupedStates();
- $httpBackend.flush();
-
- expect(controller.groupedStates).toEqual([{
- id: 9999,
- code: 'myCode',
- name: 'miCodigo'
- }]);
- });
- });
-
- describe('from() setter', () => {
- it('should clear the scope days when setting the from property', () => {
- controller.filter.scopeDays = 1;
-
- controller.from = Date.vnNew();
-
- expect(controller.filter.scopeDays).toBeNull();
- expect(controller.from).toBeDefined();
- });
- });
-
- describe('to() setter', () => {
- it('should clear the scope days when setting the to property', () => {
- controller.filter.scopeDays = 1;
-
- controller.to = Date.vnNew();
-
- expect(controller.filter.scopeDays).toBeNull();
- expect(controller.to).toBeDefined();
- });
- });
-
- describe('scopeDays() setter', () => {
- it('should clear the date range when setting the scopeDays property', () => {
- controller.filter.from = Date.vnNew();
- controller.filter.to = Date.vnNew();
-
- controller.scopeDays = 1;
-
- expect(controller.filter.from).toBeNull();
- expect(controller.filter.to).toBeNull();
- expect(controller.scopeDays).toBeDefined();
- });
- });
-});
diff --git a/modules/monitor/front/index/style.scss b/modules/monitor/front/index/style.scss
deleted file mode 100644
index 2b193ac88..000000000
--- a/modules/monitor/front/index/style.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-@import "variables";
-@import "effects";
-
-vn-monitor-index {
- .header {
- padding: 12px 0 5px 0;
- color: gray;
- font-size: 1.2rem;
- border-bottom: $border;
- margin-bottom: 10px;
-
- & > vn-none > vn-icon {
- @extend %clickable-light;
- color: $color-button;
- font-size: 1.4rem;
- }
-
- vn-none > .arrow {
- transition: transform 200ms;
- }
- }
-
- vn-monitor-sales-clients {
- vn-card {
- margin-right: 15px;
- }
-
- .header {
- padding-right: 15px;
-
- & > vn-none > .arrow {
- display: none
- }
- }
- }
-
- vn-table.scrollable {
- height: 300px
- }
-
- vn-horizontal {
- flex-wrap: wrap
- }
-
- .hidden {
- vn-card {
- display: none
- }
-
- .header > vn-none > .arrow {
- transform: rotate(180deg);
- }
- }
-}
-
-@media (max-width:1150px) {
- vn-monitor-index {
- & > vn-horizontal {
- flex-direction: column;
-
- vn-monitor-sales-clients,
- vn-monitor-sales-orders {
- width: 100%
- }
-
- vn-monitor-sales-clients {
- margin-bottom: 15px
- }
- }
-
- vn-monitor-sales-clients {
- vn-card {
- margin-right: 0
- }
-
- .header {
- padding-right: 0;
-
- & > vn-none > .arrow {
- display: inline-block
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/modules/monitor/front/index/tickets/index.html b/modules/monitor/front/index/tickets/index.html
deleted file mode 100644
index 94a950baf..000000000
--- a/modules/monitor/front/index/tickets/index.html
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Problems
-
-
- Identifier
-
-
- Client
-
-
- Salesperson
-
-
- Date
-
-
- Theoretical
-
-
- Practical
-
-
- Preparation
-
-
- Province
-
-
- State
-
-
- Fragile
-
-
- Zone
-
-
- Total
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ticket.id}}
-
-
-
-
- {{ticket.nickname}}
-
-
-
-
- {{ticket.userName | dashIfEmpty}}
-
-
-
-
- {{ticket.shippedDate | date: 'dd/MM/yyyy'}}
-
-
- {{ticket.zoneLanding | date: 'HH:mm'}}
- {{ticket.practicalHour | date: 'HH:mm'}}
- {{ticket.shipped | date: 'HH:mm'}}
- {{ticket.province}}
-
-
- {{ticket.refFk}}
-
-
- {{ticket.state}}
-
-
-
-
-
-
-
-
- {{ticket.zoneName | dashIfEmpty}}
-
-
-
-
- {{(ticket.totalWithVat ? ticket.totalWithVat : 0) | currency: 'EUR': 2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Filter by selection
-
-
- Exclude selection
-
-
- Remove filter
-
-
- Remove all filters
-
-
- Copy value
-
-
-
diff --git a/modules/monitor/front/index/tickets/index.js b/modules/monitor/front/index/tickets/index.js
deleted file mode 100644
index 2f2dead05..000000000
--- a/modules/monitor/front/index/tickets/index.js
+++ /dev/null
@@ -1,178 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
-
- this.filterParams = this.fetchParams();
- this.smartTableOptions = {
- activeButtons: {
- search: true,
- shownColumns: true,
- },
- columns: [
- {
- field: 'totalProblems',
- searchable: false
- },
- {
- field: 'salesPersonFk',
- autocomplete: {
- url: 'Workers/activeWithInheritedRole',
- where: `{role: 'salesPerson'}`,
- searchFunction: '{firstName: $search}',
- showField: 'nickname',
- valueField: 'id',
- }
- },
- {
- field: 'provinceFk',
- autocomplete: {
- url: 'Provinces',
- }
- },
- {
- field: 'stateFk',
- autocomplete: {
- url: 'States',
- }
- },
- {
- field: 'zoneFk',
- autocomplete: {
- url: 'Zones',
- }
- },
- {
- field: 'warehouseFk',
- autocomplete: {
- url: 'Warehouses',
- }
- },
- {
- field: 'shippedDate',
- datepicker: true
- },
- {
- field: 'theoreticalHour',
- searchable: false
- },
- {
- field: 'preparationHour',
- searchable: false
- }
- ]
- };
- }
-
- $onInit() {
- if (!this.$params.q) {
- this.$.$applyAsync(
- () => this.$.model.applyFilter(null, this.filterParams));
- }
- }
-
- fetchParams($params = {}) {
- const excludedParams = [
- 'search',
- 'clientFk',
- 'orderFk',
- 'refFk',
- 'scopeDays'
- ];
-
- const hasExcludedParams = excludedParams.some(param => {
- return $params && $params[param] != undefined;
- });
- const hasParams = Object.entries($params).length;
- if (!hasParams || !hasExcludedParams)
- $params.scopeDays = 1;
-
- if (typeof $params.scopeDays === 'number') {
- const from = Date.vnNew();
- from.setHours(0, 0, 0, 0);
-
- const to = new Date(from.getTime());
- to.setDate(to.getDate() + $params.scopeDays);
- to.setHours(23, 59, 59, 999);
-
- Object.assign($params, {from, to});
- }
-
- return $params;
- }
-
- compareDate(date) {
- let today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
- let timeTicket = new Date(date);
- timeTicket.setHours(0, 0, 0, 0);
-
- let comparation = today - timeTicket;
-
- if (comparation == 0)
- return 'warning';
- if (comparation < 0)
- return 'success';
- }
-
- totalPriceColor(ticket) {
- const total = parseInt(ticket.totalWithVat);
- if (total > 0 && total < 50)
- return 'warning';
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'stateFk':
- return {'ts.stateFk': value};
- case 'salesPersonFk':
- return {'c.salesPersonFk': value};
- case 'provinceFk':
- return {'a.provinceFk': value};
- case 'theoreticalHour':
- return {'z.hour': value};
- case 'practicalHour':
- return {'zed.etc': value};
- case 'shippedDate':
- return {'t.shipped': {
- between: this.dateRange(value)}
- };
- case 'nickname':
- return {[`t.nickname`]: {like: `%${value}%`}};
- case 'zoneFk':
- case 'totalWithVat':
- return {[`t.${param}`]: value};
- }
- }
-
- dateRange(value) {
- const minHour = new Date(value);
- minHour.setHours(0, 0, 0, 0);
- const maxHour = new Date(value);
- maxHour.setHours(23, 59, 59, 59);
-
- return [minHour, maxHour];
- }
-
- preview(ticket) {
- this.selectedTicket = ticket;
- this.$.summary.show();
- }
-
- autoRefresh(value) {
- if (value)
- this.refreshTimer = setInterval(() => this.$.model.refresh(), 120000);
- else {
- clearInterval(this.refreshTimer);
- this.refreshTimer = null;
- }
- }
-}
-
-ngModule.vnComponent('vnMonitorSalesTickets', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/monitor/front/index/tickets/index.spec.js b/modules/monitor/front/index/tickets/index.spec.js
deleted file mode 100644
index c12ea6844..000000000
--- a/modules/monitor/front/index/tickets/index.spec.js
+++ /dev/null
@@ -1,133 +0,0 @@
-import './index.js';
-describe('Component vnMonitorSalesTickets', () => {
- let controller;
- let $window;
- let tickets = [{
- id: 1,
- clientFk: 1,
- checked: false,
- totalWithVat: 10.5
- }, {
- id: 2,
- clientFk: 1,
- checked: true,
- totalWithVat: 20.5
- }, {
- id: 3,
- clientFk: 1,
- checked: true,
- totalWithVat: 30
- }];
-
- beforeEach(ngModule('monitor'));
-
- beforeEach(inject(($componentController, _$window_) => {
- $window = _$window_;
- const $element = angular.element(' ');
- controller = $componentController('vnMonitorSalesTickets', {$element});
- }));
-
- describe('fetchParams()', () => {
- it('should return a range of dates with passed scope days', () => {
- let params = controller.fetchParams({
- scopeDays: 2
- });
- const from = Date.vnNew();
- from.setHours(0, 0, 0, 0);
- const to = new Date(from.getTime());
- to.setDate(to.getDate() + params.scopeDays);
- to.setHours(23, 59, 59, 999);
-
- const expectedParams = {
- from,
- scopeDays: params.scopeDays,
- to
- };
-
- expect(params).toEqual(expectedParams);
- });
-
- it('should return default value for scope days', () => {
- let params = controller.fetchParams({
- scopeDays: 1
- });
-
- expect(params.scopeDays).toEqual(1);
- });
-
- it('should return the given scope days', () => {
- let params = controller.fetchParams({
- scopeDays: 2
- });
-
- expect(params.scopeDays).toEqual(2);
- });
- });
-
- describe('compareDate()', () => {
- it('should return warning when the date is the present', () => {
- let today = Date.vnNew();
- let result = controller.compareDate(today);
-
- expect(result).toEqual('warning');
- });
-
- it('should return sucess when the date is in the future', () => {
- let futureDate = Date.vnNew();
- futureDate = futureDate.setDate(futureDate.getDate() + 10);
- let result = controller.compareDate(futureDate);
-
- expect(result).toEqual('success');
- });
-
- it('should return undefined when the date is in the past', () => {
- let pastDate = Date.vnNew();
- pastDate = pastDate.setDate(pastDate.getDate() - 10);
- let result = controller.compareDate(pastDate);
-
- expect(result).toEqual(undefined);
- });
- });
-
- describe('totalPriceColor()', () => {
- it('should return "warning" when the ticket amount is less than 50€', () => {
- const result = controller.totalPriceColor({totalWithVat: '8.50'});
-
- expect(result).toEqual('warning');
- });
- });
-
- describe('dateRange()', () => {
- it('should return two dates with the hours at the start and end of the given date', () => {
- const now = Date.vnNew();
-
- const today = now.getDate();
-
- const dateRange = controller.dateRange(now);
- const start = dateRange[0].toString();
- const end = dateRange[1].toString();
-
- expect(start).toContain(today);
- expect(start).toContain('00:00:00');
-
- expect(end).toContain(today);
- expect(end).toContain('23:59:59');
- });
- });
-
- describe('preview()', () => {
- it('should show the dialog summary', () => {
- controller.$.summary = {show: () => {}};
- jest.spyOn(controller.$.summary, 'show');
-
- let event = new MouseEvent('click', {
- view: $window,
- bubbles: true,
- cancelable: true
- });
- controller.preview(event, tickets[0]);
-
- expect(controller.$.summary.show).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/monitor/front/index/tickets/style.scss b/modules/monitor/front/index/tickets/style.scss
deleted file mode 100644
index 102c92a8a..000000000
--- a/modules/monitor/front/index/tickets/style.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-@import "variables";
-
-vn-monitor-sales-tickets {
- @media screen and (max-width: 1440px) {
- .expendable {
- display: none;
- }
- }
-
- vn-th.icon-field,
- vn-th.icon-field *,
- vn-td.icon-field,
- vn-td.icon-field * {
- padding: 0;
- max-width: 50px
- }
-
- vn-th[field="nickname"],
- vn-td[name="nickname"] {
- min-width: 250px
- }
-
- vn-td.icon-field > vn-icon {
- margin-left: 3px;
- margin-right: 3px;
- }
-
- vn-table.scrollable.lg {
- height: 736px
- }
-
- tbody tr[ng-repeat]:focus {
- background-color: $color-primary-light
- }
-
- .highRisk i {
- color: $color-alert
- }
-
- td[name="nickname"] {
- max-width: 200px
- }
-
- td[name="zone"] {
- max-width: 150px
- }
-}
\ No newline at end of file
diff --git a/modules/monitor/front/locale/es.yml b/modules/monitor/front/locale/es.yml
deleted file mode 100644
index 7d7e72f6b..000000000
--- a/modules/monitor/front/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Sales monitor: Monitor de ventas
\ No newline at end of file
diff --git a/modules/monitor/front/main/index.html b/modules/monitor/front/main/index.html
index 6e04f06d0..e69de29bb 100644
--- a/modules/monitor/front/main/index.html
+++ b/modules/monitor/front/main/index.html
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/modules/monitor/front/main/index.js b/modules/monitor/front/main/index.js
index 42fc159d5..3af5292cb 100644
--- a/modules/monitor/front/main/index.js
+++ b/modules/monitor/front/main/index.js
@@ -1,7 +1,16 @@
import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
-export default class Monitor extends ModuleMain {}
+export default class Monitor extends ModuleMain {
+ constructor($element, $) {
+ super($element, $);
+ }
+
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`monitor/`);
+ }
+}
ngModule.vnComponent('vnMonitor', {
controller: Monitor,
diff --git a/modules/monitor/front/routes.json b/modules/monitor/front/routes.json
index acad3ecbc..30da8bcac 100644
--- a/modules/monitor/front/routes.json
+++ b/modules/monitor/front/routes.json
@@ -1,13 +1,9 @@
{
"module": "monitor",
"name": "Monitors",
- "icon" : "grid_view",
- "dependencies": ["ticket", "worker", "client"],
- "validations" : true,
+ "icon": "grid_view",
"menus": {
- "main": [
- {"state": "monitor.index", "icon": "grid_view"}
- ],
+ "main": [],
"card": []
},
"keybindings": [
@@ -23,7 +19,7 @@
"abstract": true,
"component": "vn-monitor",
"description": "Monitors"
- },
+ },
{
"url": "/index?q",
"state": "monitor.index",
diff --git a/modules/order/front/basic-data/index.html b/modules/order/front/basic-data/index.html
deleted file mode 100644
index 019153b0d..000000000
--- a/modules/order/front/basic-data/index.html
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/order/front/basic-data/index.js b/modules/order/front/basic-data/index.js
deleted file mode 100644
index 16a3cea5e..000000000
--- a/modules/order/front/basic-data/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- let isDirty = false;
- this.$.$watch('$ctrl.selection', newValue => {
- if (newValue) {
- this.$.addressModel.where = {clientFk: newValue.id};
- this.$.addressModel.refresh();
- if (isDirty)
- this.order.addressFk = newValue.defaultAddressFk;
- isDirty = true;
- } else {
- this.$.addressModel.clear();
- if (isDirty)
- this.order.addressFk = null;
- }
- });
- }
-
- set order(value = {}) {
- this._order = value;
-
- const agencyModeFk = value.agencyModeFk;
- this.getAvailableAgencies();
- this._order.agencyModeFk = agencyModeFk;
- }
-
- get order() {
- return this._order;
- }
-
- getAvailableAgencies() {
- const order = this.order;
- order.agencyModeFk = null;
-
- const params = {
- addressFk: order.addressFk,
- landed: order.landed
- };
- if (params.landed && params.addressFk) {
- this.$http.get(`Agencies/landsThatDay`, {params})
- .then(res => this._availableAgencies = res.data);
- }
- }
-}
-
-ngModule.vnComponent('vnOrderBasicData', {
- controller: Controller,
- template: require('./index.html'),
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/basic-data/index.spec.js b/modules/order/front/basic-data/index.spec.js
deleted file mode 100644
index 21dee0765..000000000
--- a/modules/order/front/basic-data/index.spec.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderBasicData', () => {
- let $httpBackend;
- let $httpParamSerializer;
- let controller;
- let $scope;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($compile, _$httpBackend_, $rootScope, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $scope = $rootScope.$new();
-
- $httpBackend.whenRoute('GET', 'Addresses')
- .respond([{id: 2, nickname: 'address 2'}]);
- $httpBackend.whenRoute('GET', 'Clients')
- .respond([{id: 1, defaultAddressFk: 1}]);
- $scope.order = {clientFk: 1, addressFk: 1};
-
- let $element = $compile(' ')($scope);
- $httpBackend.flush();
- controller = $element.controller('vnOrderBasicData');
- }));
-
- afterAll(() => {
- $scope.$destroy();
- $element.remove();
- });
-
- describe('constructor()', () => {
- it('should update the address after the client changes', async() => {
- const addressId = 999;
- const id = 444;
-
- controller.selection = {id: id, defaultAddressFk: addressId};
- $scope.$digest();
-
- expect(controller.order.addressFk).toEqual(addressId);
- });
- });
-
- describe('getAvailableAgencies()', () => {
- it('should set agencyModeFk to null and get the available agencies if the order has landed and client', async() => {
- controller.order.agencyModeFk = 999;
- controller.order.addressFk = 999;
- controller.order.landed = Date.vnNew();
-
- const expectedAgencies = [{id: 1}, {id: 2}];
-
- const paramsObj = {
- addressFk: controller.order.addressFk,
- landed: controller.order.landed
- };
- const serializedParams = $httpParamSerializer(paramsObj);
- $httpBackend.expect('GET', `Agencies/landsThatDay?${serializedParams}`).respond(expectedAgencies);
- controller.getAvailableAgencies();
- $httpBackend.flush();
-
- expect(controller.order.agencyModeFk).toBeDefined();
- expect(controller._availableAgencies).toEqual(expectedAgencies);
- });
- });
- });
-});
diff --git a/modules/order/front/basic-data/locale/es.yml b/modules/order/front/basic-data/locale/es.yml
deleted file mode 100644
index 5c6014c9c..000000000
--- a/modules/order/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-This form has been disabled because there are lines in this order or it's confirmed: Este formulario ha sido deshabilitado por que esta orden contiene líneas o está confirmada
\ No newline at end of file
diff --git a/modules/order/front/basic-data/style.scss b/modules/order/front/basic-data/style.scss
deleted file mode 100644
index 34d6c2931..000000000
--- a/modules/order/front/basic-data/style.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-vn-order-basic-data {
- .disabledForm {
- text-align: center;
- color: red;
- span {
- margin: 0 auto;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/card/index.html b/modules/order/front/card/index.html
deleted file mode 100644
index 4f10c1728..000000000
--- a/modules/order/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/order/front/card/index.js b/modules/order/front/card/index.js
deleted file mode 100644
index a7e5eeb5d..000000000
--- a/modules/order/front/card/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- include: [
- {
- relation: 'agencyMode',
- scope: {
- fields: ['name']
- }
- }, {
- relation: 'address',
- scope: {
- fields: ['nickname']
- }
- }, {
- relation: 'rows',
- scope: {
- fields: ['id']
- }
- }, {
- relation: 'client',
- scope: {
- fields: [
- 'salesPersonFk',
- 'name',
- 'isActive',
- 'isFreezed',
- 'isTaxDataChecked'
- ],
- include: {
- relation: 'salesPersonUser',
- scope: {
- fields: ['id', 'name']
- }
- }
- }
- }
- ]
- };
-
- return this.$q.all([
- this.$http.get(`Orders/${this.$params.id}`, {filter})
- .then(res => this.order = res.data),
- this.$http.get(`Orders/${this.$params.id}/getTotal`)
- .then(res => ({total: res.data}))
- ]).then(res => {
- this.order = Object.assign.apply(null, res);
- });
- }
-}
-
-ngModule.vnComponent('vnOrderCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/card/index.spec.js b/modules/order/front/card/index.spec.js
deleted file mode 100644
index f0de26b72..000000000
--- a/modules/order/front/card/index.spec.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderCard', () => {
- let controller;
- let $httpBackend;
- let data = {id: 1, name: 'fooName'};
- let total = 10.5;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_, $stateParams) => {
- $httpBackend = _$httpBackend_;
-
- let $element = angular.element('
');
- controller = $componentController('vnOrderCard', {$element});
-
- $stateParams.id = data.id;
- $httpBackend.whenRoute('GET', 'Orders/:id').respond(data);
- $httpBackend.whenRoute('GET', 'Orders/:id/getTotal').respond(200, total);
- }));
-
- it('should request data and total, merge them, and set it on the controller', () => {
- controller.reload();
- $httpBackend.flush();
-
- expect(controller.order).toEqual(Object.assign({}, data, {total}));
- });
- });
-});
-
diff --git a/modules/order/front/catalog-search-panel/index.html b/modules/order/front/catalog-search-panel/index.html
deleted file mode 100644
index 42f2e0f50..000000000
--- a/modules/order/front/catalog-search-panel/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
diff --git a/modules/order/front/catalog-search-panel/index.js b/modules/order/front/catalog-search-panel/index.js
deleted file mode 100644
index b84243ca7..000000000
--- a/modules/order/front/catalog-search-panel/index.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- constructor($element, $) {
- super($element, $);
-
- this.filter = {};
- }
-
- get filter() {
- return this.$.filter;
- }
-
- set filter(value) {
- if (!value)
- value = {};
- if (!value.values)
- value.values = [{}];
-
- this.$.filter = value;
- }
-
- addValue() {
- this.filter.values.push({});
- setTimeout(() => this.parentPopover.relocate());
- }
-}
-
-ngModule.vnComponent('vnOrderCatalogSearchPanel', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- onSubmit: '&?',
- parentPopover: '',
- resultTags: ''
- }
-});
diff --git a/modules/order/front/catalog-view/index.html b/modules/order/front/catalog-view/index.html
deleted file mode 100644
index b047e1e6a..000000000
--- a/modules/order/front/catalog-view/index.html
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{::item.name}}
-
-
- {{::item.subName}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{::item.minQuantity}}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/order/front/catalog-view/index.js b/modules/order/front/catalog-view/index.js
deleted file mode 100644
index 6f2cead8f..000000000
--- a/modules/order/front/catalog-view/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-ngModule.vnComponent('vnOrderCatalogView', {
- template: require('./index.html'),
- controller: Component,
- bindings: {
- order: '<',
- model: '<'
- }
-});
diff --git a/modules/order/front/catalog-view/locale/es.yml b/modules/order/front/catalog-view/locale/es.yml
deleted file mode 100644
index 187dbbc83..000000000
--- a/modules/order/front/catalog-view/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Order created: Orden creada
\ No newline at end of file
diff --git a/modules/order/front/catalog-view/style.scss b/modules/order/front/catalog-view/style.scss
deleted file mode 100644
index 1e48745ca..000000000
--- a/modules/order/front/catalog-view/style.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-@import "variables";
-
-vn-order-catalog {
- .catalog-header {
- border-bottom: $border-thin;
- padding: $spacing-md;
- align-items: center;
-
- & > vn-one {
- display: flex;
- flex: 1;
-
- span {
- color: $color-font-secondary
- }
- }
- & > vn-auto {
- width: 448px;
- display: flex;
- overflow: hidden;
-
- & > * {
- padding-left: $spacing-md;
- }
- }
- }
- .catalog-list {
- padding-top: $spacing-sm;
- }
- .item-color-background {
- background: linear-gradient($color-bg-panel, $color-main);
- border-radius: 50%;
- margin-left: 140px;
- margin-top: 140px;
- width: 40px;
- height: 40px;
- position: absolute;
- }
- .item-color {
- margin: auto;
- margin-top: 5px;
- border-radius: 50%;
- width: 30px;
- height: 30px;
- position: relative;
- }
- .alert {
- color: $color-alert;
- }
-}
diff --git a/modules/order/front/catalog/index.html b/modules/order/front/catalog/index.html
deleted file mode 100644
index 0f7928c8b..000000000
--- a/modules/order/front/catalog/index.html
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{name}}
-
- {{categoryName}}
-
-
-
-
-
-
-
-
-
-
- More than {{model.limit}} results
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id: {{$ctrl.itemId}}
-
-
-
-
- Name :
-
- {{$ctrl.itemName}}
-
-
-
- {{category.selection.name}}
-
-
- {{type.selection.name}}
-
-
-
-
- {{::tagGroup.tagSelection.name}} :
-
-
- ,
- "{{::tagValue.value}}"
-
-
-
-
-
diff --git a/modules/order/front/catalog/index.js b/modules/order/front/catalog/index.js
deleted file mode 100644
index c0777ebc9..000000000
--- a/modules/order/front/catalog/index.js
+++ /dev/null
@@ -1,377 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.itemTypes = [];
- this._tagGroups = [];
-
- // Static autocomplete data
- this.orderWays = [
- {way: 'ASC', name: 'Ascendant'},
- {way: 'DESC', name: 'Descendant'},
- ];
- this.defaultOrderFields = [
- {field: 'relevancy DESC, name', name: 'Relevancy', priority: 999},
- {field: 'showOrder, price', name: 'Color and price', priority: 999},
- {field: 'name', name: 'Name', priority: 999},
- {field: 'price', name: 'Price', priority: 999}
- ];
- this.orderFields = [].concat(this.defaultOrderFields);
- this._orderWay = this.orderWays[0].way;
- this.orderField = this.orderFields[0].field;
- }
-
- $onChanges() {
- this.getData().then(() => {
- if (this.order && this.order.isConfirmed)
- this.$state.go('order.card.line');
- });
- }
-
- getData() {
- return this.$http.get(`Orders/${this.$params.id}`)
- .then(res => this.order = res.data);
- }
-
- /**
- * Fills order autocomplete with tags
- * obtained from last filtered
- */
- get order() {
- return this._order;
- }
-
- /**
- * Sets filter values from state params
- *
- * @param {Object} value - Order data
- */
- set order(value) {
- this._order = value;
-
- if (!value) return;
-
- this.$.$applyAsync(() => {
- if (this.$params.categoryId)
- this.categoryId = parseInt(this.$params.categoryId);
-
- if (this.$params.typeId)
- this.typeId = parseInt(this.$params.typeId);
-
- if (this.$params.tagGroups)
- this.tagGroups = JSON.parse(this.$params.tagGroups);
- });
- }
-
- get items() {
- return this._items;
- }
-
- set items(value) {
- this._items = value;
-
- if (!value) return;
-
- this.fetchResultTags(value);
- this.buildOrderFilter();
- }
-
- get categoryId() {
- return this._categoryId;
- }
-
- set categoryId(value = null) {
- this._categoryId = value;
- this.itemTypes = [];
- this.typeId = null;
-
- this.updateStateParams();
-
- if (this.tagGroups.length > 0)
- this.applyFilters();
-
- if (value)
- this.updateItemTypes();
- }
-
- changeCategory(id) {
- if (this._categoryId == id) id = null;
- this.categoryId = id;
- }
-
- get typeId() {
- return this._typeId;
- }
-
- set typeId(value) {
- this._typeId = value;
-
- this.updateStateParams();
-
- if (value || this.tagGroups.length > 0)
- this.applyFilters();
- }
-
- get tagGroups() {
- return this._tagGroups;
- }
-
- set tagGroups(value) {
- this._tagGroups = value;
-
- this.updateStateParams();
-
- if (value.length)
- this.applyFilters();
- }
-
- /**
- * Get order way ASC/DESC
- */
- get orderWay() {
- return this._orderWay;
- }
-
- set orderWay(value) {
- this._orderWay = value;
- if (value) this.applyOrder();
- }
-
- /**
- * Returns the order way selection
- */
- get orderSelection() {
- return this._orderSelection;
- }
-
- set orderSelection(value) {
- this._orderSelection = value;
-
- if (value) this.applyOrder();
- }
-
- /**
- * Apply order to model
- */
- applyOrder() {
- if (this.typeId || this.tagGroups.length > 0 || this.itemName)
- this.$.model.addFilter(null, {orderBy: this.getOrderBy()});
- }
-
- /**
- * Returns order param
- *
- * @return {Object} - Order param
- */
- getOrderBy() {
- const isTag = !!(this.orderSelection && this.orderSelection.isTag);
- return {
- field: this.orderField,
- way: this.orderWay,
- isTag: isTag
- };
- }
-
- /**
- * Refreshes item type dropdown data
- */
- updateItemTypes() {
- let params = {
- itemCategoryId: this.categoryId
- };
-
- const query = `Orders/${this.order.id}/getItemTypeAvailable`;
- this.$http.get(query, {params}).then(res =>
- this.itemTypes = res.data);
- }
-
- /**
- * Search by tag value
- * @param {object} event
- */
- onSearchByTag(event) {
- const value = this.$.search.value;
- if (event.key !== 'Enter' || !value) return;
- this.tagGroups.push({values: [{value: value}]});
- this.$.search.value = null;
- this.updateStateParams();
- this.applyFilters();
- }
-
- remove(index) {
- this.tagGroups.splice(index, 1);
- this.updateStateParams();
-
- if (this.tagGroups.length >= 0 || this.itemId || this.typeId)
- this.applyFilters();
- }
-
- removeItemId() {
- this.itemId = null;
- this.$.searchbar.doSearch({}, 'bar');
- }
-
- removeItemName() {
- this.itemName = null;
- this.$.searchbar.doSearch({}, 'bar');
- }
-
- applyFilters(filter = {}) {
- let newParams = {};
- let newFilter = Object.assign({}, filter);
- const model = this.$.model;
-
- if (this.categoryId)
- newFilter.categoryFk = this.categoryId;
-
- if (this.typeId)
- newFilter.typeFk = this.typeId;
-
- newParams = {
- orderFk: this.$params.id,
- orderBy: this.getOrderBy(),
- tagGroups: this.tagGroups,
- };
-
- return model.applyFilter({where: newFilter}, newParams);
- }
-
- openPanel(event) {
- if (event.defaultPrevented) return;
- event.preventDefault();
-
- this.panelFilter = {};
- this.$.popover.show(this.$.search.element);
- }
-
- onPanelSubmit(filter) {
- this.$.popover.hide();
- const values = filter.values;
- const nonEmptyValues = values.filter(tagValue => {
- return tagValue.value;
- });
-
- filter.values = nonEmptyValues;
-
- if (filter.tagFk && nonEmptyValues.length) {
- this.tagGroups.push(filter);
- this.updateStateParams();
- this.applyFilters();
- }
- }
-
- /**
- * Updates url state params from filter values
- */
- updateStateParams() {
- const params = {};
-
- params.categoryId = undefined;
- if (this.categoryId)
- params.categoryId = this.categoryId;
-
- params.typeId = undefined;
- if (this.typeId)
- params.typeId = this.typeId;
-
- params.tagGroups = undefined;
- if (this.tagGroups && this.tagGroups.length)
- params.tagGroups = JSON.stringify(this.sanitizedTagGroupParam());
-
- this.$state.go(this.$state.current.name, params);
- }
-
- sanitizedTagGroupParam() {
- const tagGroups = [];
- for (let tagGroup of this.tagGroups) {
- const tagParam = {values: []};
-
- for (let tagValue of tagGroup.values)
- tagParam.values.push({value: tagValue.value});
-
- if (tagGroup.tagFk)
- tagParam.tagFk = tagGroup.tagFk;
-
- if (tagGroup.tagSelection) {
- tagParam.tagSelection = {
- name: tagGroup.tagSelection.name
- };
- }
-
- tagGroups.push(tagParam);
- }
-
- return tagGroups;
- }
-
- fetchResultTags(items) {
- const resultTags = [];
- for (let item of items) {
- for (let itemTag of item.tags) {
- const alreadyAdded = resultTags.findIndex(tag => {
- return tag.tagFk == itemTag.tagFk;
- });
-
- if (alreadyAdded == -1)
- resultTags.push({...itemTag, priority: 1});
- else
- resultTags[alreadyAdded].priority += 1;
- }
- }
- this.resultTags = resultTags;
- }
-
- buildOrderFilter() {
- const filter = [].concat(this.defaultOrderFields);
- for (let tag of this.resultTags)
- filter.push({...tag, field: tag.id, isTag: true});
-
- this.orderFields = filter;
- }
-
- onSearch(params) {
- if (!params) return;
-
- this.itemId = null;
- this.itemName = null;
-
- if (params.search) {
- if (/^\d+$/.test(params.search)) {
- this.itemId = params.search;
- return this.applyFilters({
- 'i.id': params.search
- });
- } else {
- this.itemName = params.search;
- return this.applyFilters({
- 'i.name': {like: `%${params.search}%`}
- });
- }
- } else return this.applyFilters();
- }
-
- formatTooltip(tagGroup) {
- const tagValues = tagGroup.values;
-
- let title = '';
- if (tagGroup.tagFk) {
- const tagName = tagGroup.tagSelection.name;
- title += `${tagName}: `;
- }
-
- for (let [i, tagValue] of tagValues.entries()) {
- if (i > 0) title += ', ';
- title += `"${tagValue.value}"`;
- }
-
- return `${title}`;
- }
-}
-
-ngModule.vnComponent('vnOrderCatalog', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/catalog/index.spec.js b/modules/order/front/catalog/index.spec.js
deleted file mode 100644
index 03d7c41ba..000000000
--- a/modules/order/front/catalog/index.spec.js
+++ /dev/null
@@ -1,386 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Order', () => {
- describe('Component vnOrderCatalog', () => {
- let $scope;
- let $state;
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$state_, _$httpBackend_, $rootScope) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- $scope.model = crudModel;
- $scope.search = {};
- $scope.itemId = {};
- $state = _$state_;
- $state.current.name = 'my.current.state';
- const $element = angular.element(' ');
- controller = $componentController('vnOrderCatalog', {$element, $scope});
- controller._order = {id: 4};
- controller.$params = {
- categoryId: 1,
- typeId: 2,
- id: 4
- };
- }));
-
- describe('getData()', () => {
- it(`should make a query an fetch the order data`, () => {
- controller._order = null;
-
- $httpBackend.expect('GET', `Orders/4`).respond(200, {id: 4, isConfirmed: true});
- $httpBackend.expect('GET', `Orders/4/getItemTypeAvailable?itemCategoryId=1`).respond();
- controller.getData();
- $httpBackend.flush();
-
- const order = controller.order;
-
- expect(order.id).toEqual(4);
- expect(order.isConfirmed).toBeTruthy();
- });
- });
-
- describe('order() setter', () => {
- it(`should call scope $applyAsync() method and apply filters from state params`, () => {
- $httpBackend.expect('GET', `Orders/4/getItemTypeAvailable?itemCategoryId=1`).respond();
- controller.order = {id: 4};
-
- $scope.$apply();
-
- expect(controller.categoryId).toEqual(1);
- expect(controller.typeId).toEqual(2);
- });
- });
-
- describe('items() setter', () => {
- it(`should return an object with order params`, () => {
- jest.spyOn(controller, 'fetchResultTags');
- jest.spyOn(controller, 'buildOrderFilter');
-
- const expectedResult = [{field: 'showOrder, price', name: 'Color and price', priority: 999}];
- const items = [{id: 1, name: 'My Item', tags: [
- {tagFk: 4, name: 'Length'},
- {tagFk: 5, name: 'Color'}
- ]}];
- controller.items = items;
-
- expect(controller.orderFields.length).toEqual(6);
- expect(controller.orderFields).toEqual(jasmine.arrayContaining(expectedResult));
- expect(controller.fetchResultTags).toHaveBeenCalledWith(items);
- expect(controller.buildOrderFilter).toHaveBeenCalledWith();
- });
- });
-
- describe('categoryId() setter', () => {
- it(`should set category property to null, call updateStateParams() method and not call applyFilters()`, () => {
- jest.spyOn(controller, 'updateStateParams');
-
- controller.categoryId = null;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- });
-
- it(`should set category property and then call updateStateParams() and applyFilters() methods`, () => {
- jest.spyOn(controller, 'updateStateParams');
-
- controller.categoryId = 2;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- });
- });
-
- describe('changeCategory()', () => {
- it(`should set categoryId property to null if the new value equals to the old one`, () => {
- controller.categoryId = 2;
- controller.changeCategory(2);
-
- expect(controller.categoryId).toBeNull();
- });
-
- it(`should set categoryId property`, () => {
- controller.categoryId = 2;
- controller.changeCategory(1);
-
- expect(controller.categoryId).toEqual(1);
- });
- });
-
- describe('typeId() setter', () => {
- it(`should set type property to null, call updateStateParams() method and not call applyFilters()`, () => {
- jest.spyOn(controller, 'updateStateParams');
- jest.spyOn(controller, 'applyFilters');
-
- controller.typeId = null;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- expect(controller.applyFilters).not.toHaveBeenCalledWith();
- });
-
- it(`should set category property and then call updateStateParams() and applyFilters() methods`, () => {
- jest.spyOn(controller, 'updateStateParams');
- jest.spyOn(controller, 'applyFilters');
-
- controller.typeId = 2;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('tagGroups() setter', () => {
- it(`should set tagGroups property and then call updateStateParams() and applyFilters() methods`, () => {
- jest.spyOn(controller, 'updateStateParams');
- jest.spyOn(controller, 'applyFilters');
-
- controller.tagGroups = [{tagFk: 11, values: [{value: 'Brown'}]}];
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('onSearchByTag()', () => {
- it(`should not add a new tag if the event key code doesn't equals to 'Enter'`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller.order = {id: 4};
- controller.$.search.value = 'Brown';
- controller.onSearchByTag({key: 'Tab'});
-
- expect(controller.applyFilters).not.toHaveBeenCalledWith();
- });
-
- it(`should add a new tag if the event key code equals to 'Enter' an then call applyFilters()`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller.order = {id: 4};
- controller.$.search.value = 'Brown';
- controller.onSearchByTag({key: 'Enter'});
-
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('onSearch()', () => {
- it(`should apply a filter by item id an then call the applyFilters method`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- const itemId = 1;
- controller.onSearch({search: itemId});
-
- expect(controller.applyFilters).toHaveBeenCalledWith({
- 'i.id': itemId
- });
- });
-
- it(`should apply a filter by item name an then call the applyFilters method`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- const itemName = 'Bow';
- controller.onSearch({search: itemName});
-
- expect(controller.applyFilters).toHaveBeenCalledWith({
- 'i.name': {like: `%${itemName}%`}
- });
- });
- });
-
- describe('applyFilters()', () => {
- it(`should call model applyFilter() method with a new filter`, () => {
- jest.spyOn(controller.$.model, 'applyFilter');
-
- controller._categoryId = 2;
- controller._typeId = 4;
-
- controller.applyFilters();
-
- expect(controller.$.model.applyFilter).toHaveBeenCalledWith(
- {where: {categoryFk: 2, typeFk: 4}},
- {orderFk: 4, orderBy: controller.getOrderBy(), tagGroups: []});
- });
- });
-
- describe('remove()', () => {
- it(`should remove a tag from tags property`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller.tagGroups = [
- {tagFk: 1, values: [{value: 'Brown'}]},
- {tagFk: 67, values: [{value: 'Concussion'}]}
- ];
- controller.remove(0);
-
- const firstTag = controller.tagGroups[0];
-
- expect(controller.tagGroups.length).toEqual(1);
- expect(firstTag.tagFk).toEqual(67);
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
-
- it(`should remove a tag from tags property and call applyFilters() if there's no more tags`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller._categoryId = 1;
- controller._typeId = 1;
- controller.tagGroups = [{tagFk: 1, values: [{value: 'Blue'}]}];
- controller.remove(0);
-
- expect(controller.tagGroups.length).toEqual(0);
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('updateStateParams()', () => {
- it(`should call state go() method passing category and type state params`, () => {
- jest.spyOn(controller.$state, 'go');
-
- controller._categoryId = 2;
- controller._typeId = 4;
- controller._tagGroups = [
- {tagFk: 67, values: [{value: 'Concussion'}], tagSelection: {name: 'Category'}}
- ];
- const tagGroups = JSON.stringify([
- {values: [{value: 'Concussion'}], tagFk: 67, tagSelection: {name: 'Category'}}
- ]);
- const expectedResult = {categoryId: 2, typeId: 4, tagGroups: tagGroups};
- controller.updateStateParams();
-
- expect(controller.$state.go).toHaveBeenCalledWith('my.current.state', expectedResult);
- });
- });
-
- describe('getOrderBy()', () => {
- it(`should return an object with order params`, () => {
- controller.orderField = 'relevancy DESC, name';
- controller.orderWay = 'DESC';
- let expectedResult = {
- field: 'relevancy DESC, name',
- way: 'DESC',
- isTag: false
- };
- let result = controller.getOrderBy();
-
- expect(result).toEqual(expectedResult);
- });
- });
-
- describe('applyOrder()', () => {
- it(`should apply order param to model calling getOrderBy()`, () => {
- jest.spyOn(controller, 'getOrderBy');
- jest.spyOn(controller.$.model, 'addFilter');
-
- controller.field = 'relevancy DESC, name';
- controller.way = 'ASC';
- controller._categoryId = 1;
- controller._typeId = 1;
- let expectedOrder = {orderBy: controller.getOrderBy()};
-
- controller.applyOrder();
-
- expect(controller.getOrderBy).toHaveBeenCalledWith();
- expect(controller.$.model.addFilter).toHaveBeenCalledWith(null, expectedOrder);
- });
- });
-
- describe('fetchResultTags()', () => {
- it(`should create an array of non repeated tags then set the resultTags property`, () => {
- const items = [
- {
- id: 1, name: 'My Item 1', tags: [
- {tagFk: 4, name: 'Length', value: 1},
- {tagFk: 5, name: 'Color', value: 'red'}
- ]
- },
- {
- id: 2, name: 'My Item 2', tags: [
- {tagFk: 4, name: 'Length', value: 1},
- {tagFk: 5, name: 'Color', value: 'blue'}
- ]
- }];
- controller.fetchResultTags(items);
-
- expect(controller.resultTags.length).toEqual(2);
- });
- });
-
- describe('buildOrderFilter()', () => {
- it(`should create an array of non repeated tags plus default filters and then set the orderFields property`, () => {
- const items = [
- {
- id: 1, name: 'My Item 1', tags: [
- {tagFk: 4, name: 'Length'},
- {tagFk: 5, name: 'Color'}
- ]
- },
- {
- id: 2, name: 'My Item 2', tags: [
- {tagFk: 5, name: 'Color'},
- {tagFk: 6, name: 'Relevancy'}
- ]
- }];
-
- controller.fetchResultTags(items);
- controller.buildOrderFilter();
-
- expect(controller.orderFields.length).toEqual(7);
- });
- });
-
- describe('formatTooltip()', () => {
- it(`should return a formatted text with the tag name and values`, () => {
- const tagGroup = {
- values: [{value: 'Silver'}, {value: 'Brown'}],
- tagFk: 1,
- tagSelection: {
- name: 'Color'
- }
- };
-
- const result = controller.formatTooltip(tagGroup);
-
- expect(result).toEqual(`Color: "Silver", "Brown"`);
- });
-
- it(`should return a formatted text with the tag value`, () => {
- const tagGroup = {
- values: [{value: 'Silver'}]
- };
-
- const result = controller.formatTooltip(tagGroup);
-
- expect(result).toEqual(`"Silver"`);
- });
- });
-
- describe('sanitizedTagGroupParam()', () => {
- it(`should return an array of tags`, () => {
- const dirtyTagGroups = [{
- values: [{value: 'Silver'}, {value: 'Brown'}],
- tagFk: 1,
- tagSelection: {
- name: 'Color',
- $orgRow: {name: 'Color'}
- },
- $orgIndex: 1
- }];
- controller.tagGroups = dirtyTagGroups;
-
- const expectedResult = [{
- values: [{value: 'Silver'}, {value: 'Brown'}],
- tagFk: 1,
- tagSelection: {
- name: 'Color'
- }
- }];
- const result = controller.sanitizedTagGroupParam();
-
- expect(result).toEqual(expect.objectContaining(expectedResult));
- });
- });
- });
-});
-
diff --git a/modules/order/front/catalog/locale/es.yml b/modules/order/front/catalog/locale/es.yml
deleted file mode 100644
index fc78755ae..000000000
--- a/modules/order/front/catalog/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Name: Nombre
-Search by item id or name: Buscar por id de artículo o nombre
-OR: O
\ No newline at end of file
diff --git a/modules/order/front/catalog/style.scss b/modules/order/front/catalog/style.scss
deleted file mode 100644
index 9ffe81dfb..000000000
--- a/modules/order/front/catalog/style.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-@import "variables";
-
-vn-order-catalog vn-side-menu div {
- & > .input {
- padding-left: $spacing-md;
- padding-right: $spacing-md;
- border-color: $color-spacer;
- border-bottom: $border-thin;
- }
- .item-category {
- padding: $spacing-sm;
- justify-content: flex-start;
- align-items: flex-start;
- flex-wrap: wrap;
-
- vn-autocomplete[vn-id="category"] {
- display: none
- }
-
- & > vn-one {
- padding: $spacing-sm;
- min-width: 33.33%;
- text-align: center;
- box-sizing: border-box;
-
- & > vn-icon {
- padding: $spacing-sm;
- background-color: $color-font-secondary;
- border-radius: 50%;
- cursor: pointer;
-
- &.active {
- background-color: $color-main;
- color: #FFF
- }
- & > i:before {
- font-size: 2.6rem;
- width: 16px;
- height: 16px;
- }
- }
- }
- }
- .chips {
- display: flex;
- flex-wrap: wrap;
- padding: $spacing-md;
- overflow: hidden;
- max-width: 100%;
- }
- vn-autocomplete[vn-id="type"] .list {
- max-height: 320px
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/create/card.html b/modules/order/front/create/card.html
deleted file mode 100644
index ed6f752d3..000000000
--- a/modules/order/front/create/card.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
- {{id}}: {{name}}
-
-
- {{nickname}}: {{street}}, {{city}}
-
-
-
-
-
diff --git a/modules/order/front/create/card.js b/modules/order/front/create/card.js
deleted file mode 100644
index 315cc8255..000000000
--- a/modules/order/front/create/card.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-
-class Controller extends Component {
- constructor($element, $) {
- super($element, $);
- this.order = {};
- this.clientFk = this.$params.clientFk;
- }
-
- $onInit() {
- if (this.$params && this.$params.clientFk)
- this.clientFk = this.$params.clientFk;
- }
-
- set order(value) {
- if (value)
- this._order = value;
- }
-
- get order() {
- return this._order;
- }
-
- set clientFk(value) {
- this.order.clientFk = value;
-
- if (value) {
- let filter = {
- include: {
- relation: 'defaultAddress',
- scope: {
- fields: 'id'
- }
- },
- where: {id: value}
- };
- filter = encodeURIComponent(JSON.stringify(filter));
- let query = `Clients?filter=${filter}`;
- this.$http.get(query).then(res => {
- if (res.data) {
- let client = res.data[0];
- let defaultAddress = client.defaultAddress;
- this.addressFk = defaultAddress.id;
- }
- });
- } else
- this.addressFk = null;
- }
-
- get clientFk() {
- return this.order.clientFk;
- }
-
- set addressFk(value) {
- this.order.addressFk = value;
- this.getAvailableAgencies();
- }
-
- get addressFk() {
- return this.order.addressFk;
- }
-
- set landed(value) {
- this.order.landed = value;
- this.getAvailableAgencies();
- }
-
- get landed() {
- return this.order.landed;
- }
-
- get warehouseFk() {
- return this.order.warehouseFk;
- }
-
- getAvailableAgencies() {
- let order = this.order;
- order.agencyModeFk = null;
-
- let params = {
- addressFk: order.addressFk,
- landed: order.landed
- };
- if (params.landed && params.addressFk) {
- this.$http.get(`Agencies/landsThatDay`, {params})
- .then(res => this._availableAgencies = res.data);
- }
- }
-
- onSubmit() {
- this.createOrder();
- }
-
- createOrder() {
- let params = {
- landed: this.order.landed,
- addressId: this.order.addressFk,
- agencyModeId: this.order.agencyModeFk
- };
- this.$http.post(`Orders/new`, params).then(res => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$state.go('order.card.catalog', {id: res.data});
- });
- }
-}
-
-ngModule.vnComponent('vnOrderCreateCard', {
- template: require('./card.html'),
- controller: Controller,
- bindings: {
- order: ''
- }
-});
diff --git a/modules/order/front/create/card.spec.js b/modules/order/front/create/card.spec.js
deleted file mode 100644
index e37900af6..000000000
--- a/modules/order/front/create/card.spec.js
+++ /dev/null
@@ -1,104 +0,0 @@
-import './card.js';
-
-describe('Order', () => {
- describe('Component vnOrderCreateCard', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_, _vnApp_, $rootScope) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(' ');
- controller = $componentController('vnOrderCreateCard', {$element, $scope});
- controller.item = {id: 3};
- }));
-
- describe('set order', () => {
- it(`should set order if the value given is not null`, () => {
- controller.order = 1;
-
- expect(controller.order).toEqual(1);
- });
- });
-
- describe('set clientFk', () => {
- it(`should set addressFk to null and clientFk to a value and set addressFk to a value given`, () => {
- let filter = {
- include: {
- relation: 'defaultAddress',
- scope: {
- fields: 'id'
- }
- },
- where: {id: 2}
- };
- filter = encodeURIComponent(JSON.stringify(filter));
- let response = [
- {
- defaultAddress: {id: 1}
- }
- ];
- $httpBackend.whenGET(`Clients?filter=${filter}`).respond(response);
- $httpBackend.expectGET(`Clients?filter=${filter}`);
-
- controller.clientFk = 2;
- $httpBackend.flush();
-
- expect(controller.clientFk).toEqual(2);
- expect(controller.order.addressFk).toBe(1);
- });
- });
-
- describe('set addressFk', () => {
- it(`should set agencyModeFk property to null and addressFk to a value`, () => {
- controller.addressFk = 1101;
-
- expect(controller.addressFk).toEqual(1101);
- expect(controller.order.agencyModeFk).toBe(null);
- });
- });
-
- describe('getAvailableAgencies()', () => {
- it(`should make a query if landed and addressFk exists`, () => {
- controller.order.addressFk = 1101;
- controller.order.landed = 1101;
-
- $httpBackend.whenRoute('GET', 'Agencies/landsThatDay')
- .respond({data: 1});
-
- controller.getAvailableAgencies();
- $httpBackend.flush();
- });
- });
-
- describe('onSubmit()', () => {
- it(`should call createOrder()`, () => {
- jest.spyOn(controller, 'createOrder');
- controller.onSubmit();
-
- expect(controller.createOrder).toHaveBeenCalledWith();
- });
- });
-
- describe('createOrder()', () => {
- it(`should make a query, call vnApp.showSuccess and $state.go if the response is defined`, () => {
- controller.order.landed = 1101;
- controller.order.addressFk = 1101;
- controller.order.agencyModeFk = 1101;
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$state, 'go');
- $httpBackend.expect('POST', 'Orders/new', {landed: 1101, addressId: 1101, agencyModeId: 1101}).respond(200, 1);
- controller.createOrder();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$state.go).toHaveBeenCalledWith('order.card.catalog', {id: 1});
- });
- });
- });
-});
-
diff --git a/modules/order/front/create/index.html b/modules/order/front/create/index.html
deleted file mode 100644
index 86df579a6..000000000
--- a/modules/order/front/create/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/order/front/create/index.js b/modules/order/front/create/index.js
deleted file mode 100644
index 317c4e27e..000000000
--- a/modules/order/front/create/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- async onSubmit() {
- let newOrderID = await this.$.card.createOrder();
- this.$state.go('order.card.summary', {id: newOrderID});
- }
-}
-
-ngModule.vnComponent('vnOrderCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/create/index.spec.js b/modules/order/front/create/index.spec.js
deleted file mode 100644
index af8c8f974..000000000
--- a/modules/order/front/create/index.spec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderCreate', () => {
- let $scope;
- let controller;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- $scope.card = {createOrder: () => {}};
- const $element = angular.element(' ');
- controller = $componentController('vnOrderCreate', {$element, $scope});
- }));
-
- describe('onSubmit()', () => {
- it(`should call createOrder()`, () => {
- jest.spyOn(controller.$.card, 'createOrder');
- controller.onSubmit();
-
- expect(controller.$.card.createOrder).toHaveBeenCalledWith();
- });
-
- it(`should call go()`, async() => {
- jest.spyOn(controller.$state, 'go');
- await controller.onSubmit();
-
- expect(controller.$state.go).toHaveBeenCalledWith('order.card.summary', {id: undefined});
- });
- });
- });
-});
-
diff --git a/modules/order/front/create/locale/es.yml b/modules/order/front/create/locale/es.yml
deleted file mode 100644
index 49cd64c4a..000000000
--- a/modules/order/front/create/locale/es.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-You can't create an order for a frozen client: No puedes crear una orden a un cliente congelado
-You can't create an order for an inactive client: No puedes crear una orden a un cliente inactivo
-You can't create an order for a client that doesn't has tax data verified:
- No puedes crear una orden a un cliente cuyos datos fiscales no han sido verificados
-You can't create an order for a client that has a debt: No puedes crear una orden a un cliente que tiene deuda
-New order: Nueva orden
\ No newline at end of file
diff --git a/modules/order/front/descriptor/index.html b/modules/order/front/descriptor/index.html
deleted file mode 100644
index 538789027..000000000
--- a/modules/order/front/descriptor/index.html
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- Delete order
-
-
-
-
-
-
-
-
- {{$ctrl.order.client.salesPersonUser.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/order/front/descriptor/index.js b/modules/order/front/descriptor/index.js
deleted file mode 100644
index 5d22dd721..000000000
--- a/modules/order/front/descriptor/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import ngModule from '../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get order() {
- return this.entity;
- }
-
- set order(value) {
- this.entity = value;
- }
-
- get ticketFilter() {
- return JSON.stringify({orderFk: this.id});
- }
-
- deleteOrder() {
- return this.$http.delete(`Orders/${this.id}`)
- .then(() => {
- this.$state.go('order.index');
- this.vnApp.showSuccess(this.$t('Order deleted'));
- });
- }
-}
-
-ngModule.vnComponent('vnOrderDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/descriptor/index.spec.js b/modules/order/front/descriptor/index.spec.js
deleted file mode 100644
index e6147faee..000000000
--- a/modules/order/front/descriptor/index.spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import './index.js';
-
-describe('Order Component vnOrderDescriptor', () => {
- let $httpBackend;
- let controller;
- const order = {id: 1};
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnOrderDescriptor', {$element: null}, {order});
- }));
-
- describe('deleteOrder()', () => {
- it(`should perform a DELETE query`, () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$state, 'go');
-
- $httpBackend.expectDELETE(`Orders/${order.id}`).respond();
- controller.deleteOrder();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$state.go).toHaveBeenCalledWith('order.index');
- });
- });
-});
-
diff --git a/modules/order/front/descriptor/locale/es.yml b/modules/order/front/descriptor/locale/es.yml
deleted file mode 100644
index 0734d7638..000000000
--- a/modules/order/front/descriptor/locale/es.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-Client: Cliente
-Confirmed: Confirmado
-Not confirmed: Sin confirmar
-State: Estado
-Landed: F. entrega
-Items: Articulos
-Agency: Agencia
-Sales person: Comercial
-Order ticket list: Ticket del pedido
-Delete order: Eliminar pedido
-You are going to delete this order: El pedido se eliminará
-continue anyway?: ¿Continuar de todos modos?
\ No newline at end of file
diff --git a/modules/order/front/index.js b/modules/order/front/index.js
index 4d5b5615e..a7209a0bd 100644
--- a/modules/order/front/index.js
+++ b/modules/order/front/index.js
@@ -1,17 +1,3 @@
export * from './module';
import './main';
-import './index/';
-import './card';
-import './descriptor';
-import './search-panel';
-import './catalog-search-panel';
-import './catalog-view';
-import './catalog';
-import './summary';
-import './line';
-import './prices-popover';
-import './volume';
-import './create';
-import './create/card';
-import './basic-data';
diff --git a/modules/order/front/index/index.html b/modules/order/front/index/index.html
deleted file mode 100644
index c4bed7307..000000000
--- a/modules/order/front/index/index.html
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
-
- Id
- Sales person
- Client
- Confirmed
- Created
- Landed
- Hour
- Agency
- Total
-
-
-
-
- {{::order.id}}
-
-
- {{::order.name | dashIfEmpty}}
-
-
-
-
- {{::order.clientName}}
-
-
-
-
-
-
- {{::order.created | date: 'dd/MM/yyyy HH:mm'}}
-
-
- {{::order.landed | date:'dd/MM/yyyy'}}
-
-
- {{::(order.hourTheoretical
- ? order.hourTheoretical
- : order.hourEffective) | dashIfEmpty
- }}
- {{::order.agencyName}}
- {{::order.total | currency: 'EUR': 2 | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/order/front/index/index.js b/modules/order/front/index/index.js
deleted file mode 100644
index 750f2e226..000000000
--- a/modules/order/front/index/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(order) {
- this.selectedOrder = order;
- this.$.summary.show();
- }
-
- compareDate(date) {
- let today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
-
- date = new Date(date);
- date.setHours(0, 0, 0, 0);
-
- const timeDifference = today - date;
- if (timeDifference == 0) return 'warning';
- if (timeDifference < 0) return 'success';
- }
-}
-
-ngModule.vnComponent('vnOrderIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/index/index.spec.js b/modules/order/front/index/index.spec.js
deleted file mode 100644
index abe336478..000000000
--- a/modules/order/front/index/index.spec.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import './index.js';
-describe('Component vnOrderIndex', () => {
- let controller;
- let $window;
- let orders = [{
- id: 1,
- clientFk: 1,
- isConfirmed: false
- }, {
- id: 2,
- clientFk: 1,
- isConfirmed: false
- }, {
- id: 3,
- clientFk: 1,
- isConfirmed: true
- }];
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$window_) => {
- $window = _$window_;
- const $element = angular.element(' ');
- controller = $componentController('vnOrderIndex', {$element});
- }));
-
- describe('compareDate()', () => {
- it('should return warning when the date is the present', () => {
- let curDate = Date.vnNew();
- let result = controller.compareDate(curDate);
-
- expect(result).toEqual('warning');
- });
-
- it('should return sucess when the date is in the future', () => {
- let futureDate = Date.vnNew();
- futureDate = futureDate.setDate(futureDate.getDate() + 10);
- let result = controller.compareDate(futureDate);
-
- expect(result).toEqual('success');
- });
-
- it('should return undefined when the date is in the past', () => {
- let pastDate = Date.vnNew();
- pastDate = pastDate.setDate(pastDate.getDate() - 10);
- let result = controller.compareDate(pastDate);
-
- expect(result).toEqual(undefined);
- });
- });
-
- describe('preview()', () => {
- it('should show the dialog summary', () => {
- controller.$.summary = {show: () => {}};
- jest.spyOn(controller.$.summary, 'show');
-
- let event = new MouseEvent('click', {
- view: $window,
- bubbles: true,
- cancelable: true
- });
- controller.preview(event, orders[0]);
-
- expect(controller.$.summary.show).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/order/front/line/index.html b/modules/order/front/line/index.html
deleted file mode 100644
index 7be5a00af..000000000
--- a/modules/order/front/line/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
- Id
- Description
- Warehouse
- Shipped
- Quantity
- Price
- Amount
-
-
-
-
-
-
-
-
-
-
- {{::row.itemFk}}
-
-
-
-
- {{::row.item.name}}
-
- {{::row.item.subName}}
-
-
-
-
-
- {{::row.warehouse.name}}
- {{::row.shipped | date: 'dd/MM/yyyy'}}
- {{::row.quantity}}
-
- {{::row.price | currency: 'EUR':2}}
-
-
- {{::row.price * row.quantity | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/order/front/line/index.js b/modules/order/front/line/index.js
deleted file mode 100644
index 94d1fbfbf..000000000
--- a/modules/order/front/line/index.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- $onInit() {
- this.getRows();
- }
-
- set order(value) {
- this._order = value;
- this.getVAT();
- }
-
- get order() {
- return this._order;
- }
-
- get subtotal() {
- return this.order ? this.order.total - this.VAT : 0;
- }
-
- getRows() {
- let filter = {
- where: {orderFk: this.$params.id},
- include: [
- {relation: 'item'},
- {relation: 'warehouse'}
- ]
- };
- this.$http.get(`OrderRows`, {filter})
- .then(res => this.rows = res.data);
- }
-
- getVAT() {
- this.$http.get(`Orders/${this.$params.id}/getVAT`)
- .then(res => this.VAT = res.data);
- }
-
- deleteRow(index) {
- let [row] = this.rows.splice(index, 1);
- let params = {
- rows: [row.id],
- actualOrderId: this.$params.id
- };
- return this.$http.post(`OrderRows/removes`, params)
- .then(() => this.card.reload())
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')));
- }
-
- save() {
- this.$http.post(`Orders/${this.$params.id}/confirm`).then(() => {
- this.vnApp.showSuccess(this.$t('Order confirmed'));
- this.$state.go(`ticket.index`, {
- q: JSON.stringify({clientFk: this.order.clientFk})
- });
- });
- }
-}
-
-ngModule.vnComponent('vnOrderLine', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- },
- require: {
- card: '^vnOrderCard'
- }
-});
diff --git a/modules/order/front/line/index.spec.js b/modules/order/front/line/index.spec.js
deleted file mode 100644
index ad0e1edbc..000000000
--- a/modules/order/front/line/index.spec.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderLine', () => {
- let $state;
- let controller;
- let $httpBackend;
-
- const vat = 10.5;
- const rows = [
- {
- quantity: 4,
- price: 10.5
- }, {
- quantity: 3,
- price: 2.4
- }
- ];
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$state_, _$httpBackend_) => {
- $state = _$state_;
- $httpBackend = _$httpBackend_;
-
- $state.params.id = 1;
- $httpBackend.whenGET(`OrderRows`).respond(rows);
- $httpBackend.whenRoute('GET', `Orders/:id/getVAT`).respond(200, vat);
-
- controller = $componentController('vnOrderLine', {$element: null});
- }));
-
- describe('getRows()', () => {
- it('should make a query to get the rows of a given order', () => {
- controller.getRows();
- $httpBackend.flush();
-
- expect(controller.rows).toEqual(rows);
- });
- });
-
- describe('getVAT()', () => {
- it('should make a query to get the VAT of a given order', () => {
- controller.getVAT();
- $httpBackend.flush();
-
- expect(controller.VAT).toBe(vat);
- });
- });
-
- describe('deleteRow()', () => {
- it('should remove a row from rows and add save the data if the response is accept', () => {
- controller.getRows();
- $httpBackend.flush();
-
- controller.card = {reload: jasmine.createSpy('reload')};
- $httpBackend.expectPOST(`OrderRows/removes`).respond();
- controller.deleteRow(0);
- $httpBackend.flush();
-
- expect(controller.rows.length).toBe(1);
- expect(controller.card.reload).toHaveBeenCalled();
- });
- });
- });
-});
diff --git a/modules/order/front/line/locale/es.yml b/modules/order/front/line/locale/es.yml
deleted file mode 100644
index d1368d369..000000000
--- a/modules/order/front/line/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Delete row: Eliminar linea
-Order confirmed: Pedido confirmado
-Are you sure you want to delete this row?: ¿Estas seguro de que quieres eliminar esta línea?
\ No newline at end of file
diff --git a/modules/order/front/line/style.scss b/modules/order/front/line/style.scss
deleted file mode 100644
index 4da941a2c..000000000
--- a/modules/order/front/line/style.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-@import "./variables";
-
-vn-order-line {
- vn-table {
- img {
- border-radius: 50%;
- width: 50px;
- height: 50px;
- }
- }
- .header {
- text-align: right;
-
- & > div {
- margin-bottom: $spacing-xs;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/main/index.js b/modules/order/front/main/index.js
index caf819c9d..61b0201fd 100644
--- a/modules/order/front/main/index.js
+++ b/modules/order/front/main/index.js
@@ -2,8 +2,12 @@ import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
export default class Order extends ModuleMain {
- $postLink() {
- this.filter = {showEmpty: false};
+ constructor($element, $) {
+ super($element, $);
+ }
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`order/`);
}
}
diff --git a/modules/order/front/prices-popover/index.html b/modules/order/front/prices-popover/index.html
deleted file mode 100644
index 2551853e6..000000000
--- a/modules/order/front/prices-popover/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
diff --git a/modules/order/front/prices-popover/index.js b/modules/order/front/prices-popover/index.js
deleted file mode 100644
index aa5570f59..000000000
--- a/modules/order/front/prices-popover/index.js
+++ /dev/null
@@ -1,115 +0,0 @@
-import ngModule from '../module';
-import Popover from 'core/components/popover';
-import './style.scss';
-
-class Controller extends Popover {
- constructor(...args) {
- super(...args);
- this.totalBasquet = 0;
- }
-
- set prices(value) {
- this._prices = value;
- if (value && value[0].grouping)
- this.getTotalQuantity();
- }
-
- get prices() {
- return this._prices;
- }
-
- show(parent, item) {
- this.id = item.id;
- this.item = JSON.parse(JSON.stringify(item));
- this.maxQuantity = this.item.available;
- this.prices = this.item.prices;
-
- super.show(parent);
- }
-
- onClose() {
- this.id = null;
- this.item = {};
- this.tags = {};
- this._prices = {};
- this.totalQuantity = 0;
- super.onClose();
- }
-
- getTotalQuantity() {
- let total = 0;
- for (let price of this.prices) {
- if (!price.quantity) price.quantity = 0;
- total += price.quantity;
- }
-
- this.totalQuantity = total;
- }
-
- addQuantity(price) {
- this.getTotalQuantity();
- const quantity = this.totalQuantity + price.grouping;
- if (quantity <= this.maxQuantity)
- price.quantity += price.grouping;
- }
-
- getGroupings() {
- const filledRows = [];
- for (let priceOption of this.prices) {
- if (priceOption.quantity && priceOption.quantity > 0) {
- const priceMatch = filledRows.find(row => {
- return row.warehouseFk == priceOption.warehouseFk
- && row.price == priceOption.price;
- });
-
- if (!priceMatch)
- filledRows.push(Object.assign({}, priceOption));
- else priceMatch.quantity += priceOption.quantity;
- }
- }
-
- return filledRows;
- }
-
- submit() {
- const filledRows = this.getGroupings();
-
- try {
- const hasInvalidGropings = filledRows.some(row =>
- row.quantity % row.grouping != 0
- );
-
- if (filledRows.length <= 0)
- throw new Error('First you must add some quantity');
-
- if (hasInvalidGropings)
- throw new Error(`The amounts doesn't match with the grouping`);
-
- const params = {
- orderFk: this.order.id,
- items: filledRows
- };
- this.$http.post(`OrderRows/addToOrder`, params)
- .then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.hide();
- if (this.card) this.card.reload();
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- return true;
- }
-}
-
-ngModule.vnComponent('vnOrderPricesPopover', {
- slotTemplate: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- },
- require: {
- card: '?^vnOrderCard'
- }
-});
diff --git a/modules/order/front/prices-popover/index.spec.js b/modules/order/front/prices-popover/index.spec.js
deleted file mode 100644
index 734a9e254..000000000
--- a/modules/order/front/prices-popover/index.spec.js
+++ /dev/null
@@ -1,171 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderPricesPopover', () => {
- let controller;
- let $httpBackend;
- let orderId = 16;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $scope = $rootScope.$new();
- const $element = angular.element(' ');
- const $transclude = {
- $$boundTransclude: {
- $$slots: []
- }
- };
- controller = $componentController('vnOrderPricesPopover', {$element, $scope, $transclude});
- controller._prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 100}
- ];
- controller.item = {available: 1000};
- controller.maxQuantity = 1000;
- controller.order = {id: orderId};
- }));
-
- describe('prices() setter', () => {
- it('should call to the getTotalQuantity() method', () => {
- controller.getTotalQuantity = jest.fn();
-
- controller.prices = [
- {grouping: 10, quantity: 0},
- {grouping: 100, quantity: 0},
- {grouping: 1000, quantity: 0},
- ];
-
- expect(controller.getTotalQuantity).toHaveBeenCalledWith();
- });
- });
-
- describe('getTotalQuantity()', () => {
- it('should set the totalQuantity property', () => {
- controller.getTotalQuantity();
-
- expect(controller.totalQuantity).toEqual(100);
- });
- });
-
- describe('addQuantity()', () => {
- it('should call to the getTotalQuantity() method and NOT set the quantity property', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- controller.prices = [
- {grouping: 10, quantity: 0},
- {grouping: 100, quantity: 0},
- {grouping: 1000, quantity: 1000},
- ];
-
- const oneThousandGrouping = controller.prices[2];
-
- expect(oneThousandGrouping.quantity).toEqual(1000);
-
- controller.addQuantity(oneThousandGrouping);
-
- expect(controller.getTotalQuantity).toHaveBeenCalledWith();
- expect(oneThousandGrouping.quantity).toEqual(1000);
- });
-
- it('should call to the getTotalQuantity() method and then set the quantity property', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- const oneHandredGrouping = controller.prices[1];
- controller.addQuantity(oneHandredGrouping);
-
- expect(controller.getTotalQuantity).toHaveBeenCalledWith();
- expect(oneHandredGrouping.quantity).toEqual(200);
- });
- });
-
- describe('getGroupings()', () => {
- it('should return a row with the total filled quantity', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 10},
- {warehouseFk: 1, grouping: 100, quantity: 100},
- {warehouseFk: 1, grouping: 1000, quantity: 1000},
- ];
-
- const rows = controller.getGroupings();
- const firstRow = rows[0];
-
- expect(rows.length).toEqual(1);
- expect(firstRow.quantity).toEqual(1110);
- });
-
- it('should return two filled rows with a quantity', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 10},
- {warehouseFk: 2, grouping: 10, quantity: 10},
- {warehouseFk: 1, grouping: 100, quantity: 0},
- {warehouseFk: 1, grouping: 1000, quantity: 1000},
- ];
-
- const rows = controller.getGroupings();
- const firstRow = rows[0];
- const secondRow = rows[1];
-
- expect(rows.length).toEqual(2);
- expect(firstRow.quantity).toEqual(1010);
- expect(secondRow.quantity).toEqual(10);
- });
- });
-
- describe('submit()', () => {
- it('should throw an error if none of the rows contains a quantity', () => {
- jest.spyOn(controller, 'getTotalQuantity');
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 0}
- ];
-
- controller.submit();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`First you must add some quantity`);
- });
-
- it(`should throw an error if the quantity doesn't match the grouping value`, () => {
- jest.spyOn(controller, 'getTotalQuantity');
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 1101}
- ];
-
- controller.submit();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The amounts doesn't match with the grouping`);
- });
-
- it('should should make an http query and then show a success message', () => {
- jest.spyOn(controller, 'getTotalQuantity');
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 100}
- ];
-
- const params = {
- orderFk: orderId,
- items: [{warehouseFk: 1, grouping: 100, quantity: 100}]
- };
-
- $httpBackend.expectPOST('OrderRows/addToOrder', params).respond(200);
- controller.submit();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith(`Data saved!`);
- });
- });
- });
-});
diff --git a/modules/order/front/prices-popover/locale/es.yml b/modules/order/front/prices-popover/locale/es.yml
deleted file mode 100644
index 27eac802d..000000000
--- a/modules/order/front/prices-popover/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Qty.: Cant.
-First you must add some quantity: Primero debes agregar alguna cantidad
-The amounts doesn't match with the grouping: Las cantidades no coinciden con el grouping
\ No newline at end of file
diff --git a/modules/order/front/prices-popover/style.scss b/modules/order/front/prices-popover/style.scss
deleted file mode 100644
index deaeab044..000000000
--- a/modules/order/front/prices-popover/style.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-@import "variables";
-
-.vn-order-prices-popover .content {
- .prices {
- vn-table {
- .price-kg {
- color: $color-font-secondary;
- font-size: .75rem
- }
- .vn-input-number {
- width: 80px;
- }
- }
- .footer {
- text-align: center;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/routes.json b/modules/order/front/routes.json
index 2eeb60553..25c68300f 100644
--- a/modules/order/front/routes.json
+++ b/modules/order/front/routes.json
@@ -28,19 +28,19 @@
"abstract": true,
"component": "vn-order",
"description": "Orders"
- },
+ },
{
"url": "/index?q",
"state": "order.index",
"component": "vn-order-index",
"description": "Orders"
- },
+ },
{
"url": "/:id",
"state": "order.card",
"abstract": true,
"component": "vn-order-card"
- },
+ },
{
"url": "/summary",
"state": "order.card.summary",
@@ -49,48 +49,6 @@
"params": {
"order": "$ctrl.order"
}
- },
- {
- "url": "/catalog?q&categoryId&typeId&tagGroups",
- "state": "order.card.catalog",
- "component": "vn-order-catalog",
- "description": "Catalog",
- "params": {
- "order": "$ctrl.order"
- }
- },
- {
- "url": "/volume",
- "state": "order.card.volume",
- "component": "vn-order-volume",
- "description": "Volume",
- "params": {
- "order": "$ctrl.order"
- }
- },
- {
- "url": "/line",
- "state": "order.card.line",
- "component": "vn-order-line",
- "description": "Lines",
- "params": {
- "order": "$ctrl.order"
- }
- },
- {
- "url": "/create?clientFk",
- "state": "order.create",
- "component": "vn-order-create",
- "description": "New order"
- },
- {
- "url": "/basic-data",
- "state": "order.card.basicData",
- "component": "vn-order-basic-data",
- "description": "Basic data",
- "params": {
- "order": "$ctrl.order"
- }
}
]
-}
\ No newline at end of file
+}
diff --git a/modules/order/front/search-panel/index.html b/modules/order/front/search-panel/index.html
deleted file mode 100644
index 001fc0bcb..000000000
--- a/modules/order/front/search-panel/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
diff --git a/modules/order/front/search-panel/index.js b/modules/order/front/search-panel/index.js
deleted file mode 100644
index 07be9ca24..000000000
--- a/modules/order/front/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.vnComponent('vnOrderSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/order/front/search-panel/locale/es.yml b/modules/order/front/search-panel/locale/es.yml
deleted file mode 100644
index 9801e151f..000000000
--- a/modules/order/front/search-panel/locale/es.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-Order id: Id cesta
-Client id: Id cliente
-From landed: Desde f. entrega
-To landed: Hasta f. entrega
-To: Hasta
-Agency: Agencia
-Application: Aplicación
-SalesPerson: Comercial
-Order confirmed: Pedido confirmado
-Show empty: Mostrar vacías
-Search orders by ticket id: Buscar pedido por id ticket
\ No newline at end of file
diff --git a/modules/order/front/summary/index.html b/modules/order/front/summary/index.html
deleted file mode 100644
index 218359992..000000000
--- a/modules/order/front/summary/index.html
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
- Basket #{{$ctrl.summary.id}} - {{$ctrl.summary.client.name}}
- ({{$ctrl.summary.client.id}})
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.summary.address.nickname}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Subtotal {{$ctrl.summary.subTotal | currency: 'EUR':2}}
- VAT {{$ctrl.summary.VAT | currency: 'EUR':2}}
- Total {{$ctrl.summary.total | currency: 'EUR':2}}
-
-
-
-
-
-
- Item
- Description
- Quantity
- Price
- Amount
-
-
-
-
-
-
-
-
-
-
-
- {{::row.itemFk}}
-
-
-
-
- {{::row.item.name}}
-
- {{::row.item.subName}}
-
-
-
-
-
- {{::row.quantity}}
- {{::row.price | currency: 'EUR':2}}
- {{::row.quantity * row.price | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/order/front/summary/index.js b/modules/order/front/summary/index.js
deleted file mode 100644
index cc1df8f5d..000000000
--- a/modules/order/front/summary/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import ngModule from '../module';
-import Summary from 'salix/components/summary';
-import './style.scss';
-
-class Controller extends Summary {
- setSummary() {
- this.$http.get(`Orders/${this.order.id}/summary`)
- .then(res => this.summary = res.data);
- }
-
- get formattedAddress() {
- if (!this.summary) return null;
-
- let address = this.summary.address;
- let province = address.province ? `(${address.province.name})` : '';
-
- return `${address.street} - ${address.city} ${province}`;
- }
-
- $onChanges() {
- if (this.order && this.order.id)
- this.setSummary();
- }
-
- save() {
- this.$http.post(`Orders/${this.order.id}/confirm`).then(() => {
- this.vnApp.showSuccess(this.$t('Order confirmed'));
- this.$state.go(`ticket.index`, {
- q: JSON.stringify({clientFk: this.order.clientFk})
- });
- });
- }
-}
-
-ngModule.vnComponent('vnOrderSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/summary/index.spec.js b/modules/order/front/summary/index.spec.js
deleted file mode 100644
index 0c04593e1..000000000
--- a/modules/order/front/summary/index.spec.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import './index';
-
-describe('Order', () => {
- describe('Component vnOrderSummary', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element(' ');
- controller = $componentController('vnOrderSummary', {$element});
- controller.order = {id: 1};
- }));
-
- describe('getSummary()', () => {
- it('should now perform a GET query and define the summary property', () => {
- let res = {
- id: 1,
- nickname: 'Batman'
- };
- $httpBackend.expectGET(`Orders/1/summary`).respond(res);
- controller.setSummary();
- $httpBackend.flush();
-
- expect(controller.summary).toEqual(res);
- });
- });
-
- describe('formattedAddress()', () => {
- it('should return a full fromatted address with city and province', () => {
- controller.summary = {
- address: {
- province: {
- name: 'Gotham'
- },
- street: '1007 Mountain Drive',
- city: 'Gotham'
- }
- };
-
- expect(controller.formattedAddress).toEqual('1007 Mountain Drive - Gotham (Gotham)');
- });
- });
- });
-});
diff --git a/modules/order/front/summary/style.scss b/modules/order/front/summary/style.scss
deleted file mode 100644
index a2537c58f..000000000
--- a/modules/order/front/summary/style.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-@import "./variables";
-
-vn-order-summary .summary{
- max-width: $width-lg;
-
- & > vn-horizontal > vn-one {
- min-width: 160px;
-
- &.taxes {
- border: $border-thin-light;
- text-align: right;
- padding: 8px;
-
- & > p {
- font-size: 1.2rem;
- margin: 3px;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/volume/index.html b/modules/order/front/volume/index.html
deleted file mode 100644
index e0053f9ed..000000000
--- a/modules/order/front/volume/index.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
diff --git a/modules/order/front/volume/index.js b/modules/order/front/volume/index.js
deleted file mode 100644
index c1bc5ec7d..000000000
--- a/modules/order/front/volume/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.filter = {
- include: {
- relation: 'item'
- },
- order: 'itemFk'
- };
- this.order = {};
- this.ticketVolumes = [];
- }
-
- onDataChange() {
- this.$http.get(`Orders/${this.$params.id}/getVolumes`)
- .then(res => {
- this.$.model.data.forEach(order => {
- res.data.volumes.forEach(volume => {
- if (order.itemFk === volume.itemFk)
- order.volume = volume.volume;
- });
- });
- });
- }
-}
-
-ngModule.vnComponent('vnOrderVolume', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/volume/index.spec.js b/modules/order/front/volume/index.spec.js
deleted file mode 100644
index 6d7b18865..000000000
--- a/modules/order/front/volume/index.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import './index';
-
-describe('Order', () => {
- describe('Component vnOrderVolume', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, $state, _$httpBackend_, $rootScope) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- $scope.model = {
- data: [
- {itemFk: 1},
- {itemFk: 2}
- ]
- };
-
- $state.params.id = 1;
- const $element = angular.element(' ');
- controller = $componentController('vnOrderVolume', {$element, $scope});
- }));
-
- it('should join the sale volumes to its respective sale', () => {
- let response = {
- volumes: [
- {itemFk: 1, volume: 0.008},
- {itemFk: 2, volume: 0.003}
- ]
- };
-
- $httpBackend.expectGET(`Orders/1/getVolumes`).respond(response);
- controller.onDataChange();
- $httpBackend.flush();
-
- expect(controller.$.model.data[0].volume).toBe(0.008);
- expect(controller.$.model.data[1].volume).toBe(0.003);
- });
- });
-});
diff --git a/modules/order/front/volume/style.scss b/modules/order/front/volume/style.scss
deleted file mode 100644
index da13eca0d..000000000
--- a/modules/order/front/volume/style.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-
-@import "./variables";
-
-vn-order-volume {
- .header {
- text-align: right;
-
- & > div {
- margin-bottom: $spacing-xs;
- }
- }
-}
diff --git a/modules/route/back/methods/route/driverRouteEmail.js b/modules/route/back/methods/route/driverRouteEmail.js
index 62147db87..bbac2b0e8 100644
--- a/modules/route/back/methods/route/driverRouteEmail.js
+++ b/modules/route/back/methods/route/driverRouteEmail.js
@@ -39,8 +39,6 @@ module.exports = Self => {
const {reportMail} = agencyMode();
let user;
let account;
- let userEmail;
- ctx.args.recipients = reportMail ? reportMail.split(',').map(email => email.trim()) : [];
if (workerFk) {
user = await models.VnUser.findById(workerFk, {
@@ -50,17 +48,10 @@ module.exports = Self => {
account = await models.Account.findById(workerFk);
}
- if (user?.active && account)
- userEmail = user.emailUser().email;
-
- if (userEmail)
- ctx.args.recipients.push(userEmail);
-
- ctx.args.recipients = [...new Set(ctx.args.recipients)];
-
- if (!ctx.args.recipients.length)
- throw new UserError('An email is necessary');
+ if (user?.active && account) ctx.args.recipient = user.emailUser().email;
+ else ctx.args.recipient = reportMail;
+ if (!ctx.args.recipient) throw new UserError('An email is necessary');
return Self.sendTemplate(ctx, 'driver-route');
};
};
diff --git a/modules/supplier/back/methods/supplier/getWithPackaging.js b/modules/supplier/back/methods/supplier/getWithPackaging.js
new file mode 100644
index 000000000..07e563412
--- /dev/null
+++ b/modules/supplier/back/methods/supplier/getWithPackaging.js
@@ -0,0 +1,45 @@
+module.exports = Self => {
+ Self.remoteMethod('getWithPackaging', {
+ description: 'Returns the list of suppliers with an entry of type packaging',
+ accessType: 'READ',
+ returns: {
+ type: 'object',
+ root: true
+ },
+ http: {
+ path: `/getWithPackaging`,
+ verb: 'GET'
+ },
+ nolimit: true
+ });
+ Self.getWithPackaging = async options => {
+ const models = Self.app.models;
+ const myOptions = {};
+ const oneYearAgo = new Date();
+ oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1);
+
+ if (typeof options == 'object')
+ Object.assign(myOptions, options);
+
+ const entries = await models.Entry.find({
+ where: {
+ typeFk: 'packaging',
+ created: {gte: oneYearAgo}
+ },
+ include: {
+ relation: 'supplier',
+ scope: {
+ fields: ['id', 'name']
+ }
+ },
+ fields: {supplierFk: true}
+ }, myOptions);
+
+ const result = entries.map(item => ({
+ id: item.supplier().id,
+ name: item.supplier().name
+ }));
+ return Array.from(new Map(result.map(entry => [entry.id, entry])).values());
+ };
+};
+
diff --git a/modules/supplier/back/methods/supplier/specs/getWithPackaging.spec.js b/modules/supplier/back/methods/supplier/specs/getWithPackaging.spec.js
new file mode 100644
index 000000000..bd30d7437
--- /dev/null
+++ b/modules/supplier/back/methods/supplier/specs/getWithPackaging.spec.js
@@ -0,0 +1,33 @@
+const {models} = require('vn-loopback/server/server');
+
+describe('Supplier getWithPackaging()', () => {
+ it('should return a list of suppliers with an entry of type packaging', async() => {
+ const typeFk = 'packaging';
+
+ const tx = await models.Supplier.beginTransaction({});
+ const myOptions = {transaction: tx};
+
+ try {
+ const entry = await models.Entry.findOne(
+ {
+ where: {
+ id: 1
+ },
+ myOptions
+ });
+
+ await entry.updateAttributes({
+ typeFk: typeFk,
+ created: new Date()
+ });
+
+ const result = await models.Supplier.getWithPackaging(myOptions);
+
+ expect(result.length).toEqual(1);
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+});
diff --git a/modules/supplier/back/models/supplier.js b/modules/supplier/back/models/supplier.js
index 2d3ffef3e..7e6908d57 100644
--- a/modules/supplier/back/models/supplier.js
+++ b/modules/supplier/back/models/supplier.js
@@ -12,6 +12,7 @@ module.exports = Self => {
require('../methods/supplier/campaignMetricsEmail')(Self);
require('../methods/supplier/newSupplier')(Self);
require('../methods/supplier/getItemsPackaging')(Self);
+ require('../methods/supplier/getWithPackaging')(Self);
Self.validatesPresenceOf('name', {
message: 'The social name cannot be empty'
diff --git a/modules/ticket/back/methods/sale-tracking/setPicked.js b/modules/ticket/back/methods/sale-tracking/setPicked.js
index ed3656cf4..b63a0474f 100644
--- a/modules/ticket/back/methods/sale-tracking/setPicked.js
+++ b/modules/ticket/back/methods/sale-tracking/setPicked.js
@@ -75,7 +75,11 @@ module.exports = Self => {
const itemShelving = await models.ItemShelving.findById(itemShelvingFk, null, myOptions);
- await itemShelving.updateAttributes({visible: itemShelving.visible - quantity}, myOptions);
+ await itemShelving.updateAttributes(
+ {
+ visible: itemShelving.visible - quantity,
+ available: itemShelving.available - quantity
+ }, myOptions);
await Self.updateAll(
{saleFk},
diff --git a/modules/ticket/back/methods/sale/clone.js b/modules/ticket/back/methods/sale/clone.js
index 24346f3ba..0b658a69e 100644
--- a/modules/ticket/back/methods/sale/clone.js
+++ b/modules/ticket/back/methods/sale/clone.js
@@ -142,12 +142,19 @@ module.exports = Self => {
ctx.args.addressId = ticket.addressFk;
const newTicket = await models.Ticket.new(ctx, myOptions);
-
- await models.TicketRefund.create({
- originalTicketFk: ticketId,
- refundTicketFk: newTicket.id
- }, myOptions);
-
+ const existingRefund = await models.TicketRefund.findOne({
+ where: {
+ originalTicketFk: ticketId,
+ refundTicketFk: newTicket.id
+ },
+ myOptions
+ });
+ if (!existingRefund) {
+ await models.TicketRefund.create({
+ originalTicketFk: ticketId,
+ refundTicketFk: newTicket.id
+ }, myOptions);
+ }
return newTicket;
}
};
diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js
index 143c0a3f0..8869f9464 100644
--- a/modules/ticket/back/methods/ticket/closeAll.js
+++ b/modules/ticket/back/methods/ticket/closeAll.js
@@ -54,7 +54,7 @@ module.exports = Self => {
JOIN country co ON co.id = p.countryFk
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered'))
- AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?)
+ AND DATE(t.shipped) BETWEEN ? - INTERVAL 7 DAY AND util.dayEnd(?)
AND t.refFk IS NULL
GROUP BY t.id
`, [toDate, toDate]);
diff --git a/modules/ticket/back/methods/ticket/closure.js b/modules/ticket/back/methods/ticket/closure.js
index a75596bac..d20c83304 100644
--- a/modules/ticket/back/methods/ticket/closure.js
+++ b/modules/ticket/back/methods/ticket/closure.js
@@ -12,16 +12,18 @@ module.exports = async function(ctx, Self, tickets, options) {
Object.assign(myOptions, options);
let tx;
- if (!myOptions.transaction) {
- tx = await Self.beginTransaction({});
- myOptions.transaction = tx;
- }
+ // if (!myOptions.transaction) {
+ // tx = await Self.beginTransaction({});
+ // myOptions.transaction = tx;
+ // }
if (tickets.length == 0) return;
const failedtickets = [];
for (const ticket of tickets) {
try {
+ await Self.rawSql(`CALL util.debugAdd('invoicingTicket', ?)`, [ticket.id], {userId});
+
await Self.app.models.InvoiceOut.getSerial(ticket.clientFk, ticket.companyFk, ticket.addressFk, 'quick');
await Self.rawSql(
`CALL vn.ticket_closeByTicket(?)`,
@@ -149,6 +151,11 @@ module.exports = async function(ctx, Self, tickets, options) {
myOptions);
}
} catch (error) {
+ await Self.rawSql(`
+ INSERT INTO util.debug (variable, value)
+ VALUES ('invoicingTicketError', ?)
+ `, [ticket.id + ' - ' + error]);
+
if (error.responseCode == 450) {
await invalidEmail(ticket);
continue;
diff --git a/modules/travel/back/methods/travel/saveThermograph.js b/modules/travel/back/methods/travel/saveThermograph.js
index d246d8149..6f7e1c8bf 100644
--- a/modules/travel/back/methods/travel/saveThermograph.js
+++ b/modules/travel/back/methods/travel/saveThermograph.js
@@ -117,7 +117,8 @@ module.exports = Self => {
result: state,
maxTemperature,
minTemperature,
- temperatureFk
+ temperatureFk,
+ warehouseFk: warehouseId,
}, myOptions);
if (tx) await tx.commit();
diff --git a/modules/travel/back/methods/travel/specs/saveThermograph.spec.js b/modules/travel/back/methods/travel/specs/saveThermograph.spec.js
index c7d848c08..c2da4234e 100644
--- a/modules/travel/back/methods/travel/specs/saveThermograph.spec.js
+++ b/modules/travel/back/methods/travel/specs/saveThermograph.spec.js
@@ -4,7 +4,7 @@ describe('Thermograph saveThermograph()', () => {
const ctx = beforeAll.getCtx();
const travelFk = 1;
const thermographId = '138350-0';
- const warehouseFk = '1';
+ const warehouseFk = 1;
const state = 'COMPLETED';
const maxTemperature = 30;
const minTemperature = 10;
@@ -41,7 +41,7 @@ describe('Thermograph saveThermograph()', () => {
maxTemperature,
minTemperature,
temperatureFk,
- null,
+ warehouseFk,
null,
null,
null,
diff --git a/modules/travel/front/basic-data/index.html b/modules/travel/front/basic-data/index.html
deleted file mode 100644
index 783208d9a..000000000
--- a/modules/travel/front/basic-data/index.html
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/travel/front/basic-data/index.js b/modules/travel/front/basic-data/index.js
deleted file mode 100644
index 581fd71e5..000000000
--- a/modules/travel/front/basic-data/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- onSubmit() {
- return this.$.watcher.submit().then(() =>
- this.card.reload()
- );
- }
-}
-
-ngModule.vnComponent('vnTravelBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- travel: '<'
- },
- require: {
- card: '^vnTravelCard'
- }
-});
diff --git a/modules/travel/front/basic-data/index.spec.js b/modules/travel/front/basic-data/index.spec.js
deleted file mode 100644
index 11894d6e0..000000000
--- a/modules/travel/front/basic-data/index.spec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import './index.js';
-
-describe('Travel Component vnTravelBasicData', () => {
- let controller;
-
- beforeEach(angular.mock.module('travel', $translateProvider => {
- $translateProvider.translations('en', {});
- }));
-
- beforeEach(inject($componentController => {
- const $element = angular.element(' ');
- controller = $componentController('vnTravelBasicData', {$element});
- controller.card = {reload: () => {}};
- controller.$.watcher = {submit: () => {}};
- }));
-
- describe('onSubmit()', () => {
- it('should call the card reload method after the watcher submits', done => {
- jest.spyOn(controller.card, 'reload');
- jest.spyOn(controller.$.watcher, 'submit').mockReturnValue(Promise.resolve());
-
- controller.onSubmit().then(() => {
- expect(controller.card.reload).toHaveBeenCalledWith();
- done();
- }).catch(done.fail);
- });
- });
-});
diff --git a/modules/travel/front/basic-data/locale/es.yml b/modules/travel/front/basic-data/locale/es.yml
deleted file mode 100644
index d95675612..000000000
--- a/modules/travel/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Undo changes: Deshacer cambios
diff --git a/modules/travel/front/card/index.html b/modules/travel/front/card/index.html
deleted file mode 100644
index 91964be21..000000000
--- a/modules/travel/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/travel/front/card/index.js b/modules/travel/front/card/index.js
deleted file mode 100644
index d46244cb5..000000000
--- a/modules/travel/front/card/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- include: [
- {
- relation: 'warehouseIn',
- scope: {
- fields: ['id', 'name']
- }
- }, {
- relation: 'warehouseOut',
- scope: {
- fields: ['id', 'name']
- }
- }
- ]
- };
-
- this.$http.get(`Travels/${this.$params.id}`, {filter})
- .then(response => this.travel = response.data);
- }
-}
-
-ngModule.vnComponent('vnTravelCard', {
- template: require('./index.html'),
- controller: Controller
-});
-
diff --git a/modules/travel/front/create/index.html b/modules/travel/front/create/index.html
deleted file mode 100644
index 593887a22..000000000
--- a/modules/travel/front/create/index.html
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
diff --git a/modules/travel/front/create/index.js b/modules/travel/front/create/index.js
deleted file mode 100644
index a85917ca8..000000000
--- a/modules/travel/front/create/index.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- $onChanges() {
- if (this.$params && this.$params.q)
- this.travel = JSON.parse(this.$params.q);
- }
-
- onShippedChange(value) {
- let hasFilledProperties;
- let hasAgencyMode;
- if (this.travel) {
- hasAgencyMode = Boolean(this.travel.agencyModeFk);
- hasFilledProperties = this.travel.landed || this.travel.warehouseInFk || this.travel.warehouseOutFk;
- }
- if (!hasAgencyMode || hasFilledProperties)
- return;
-
- const query = `travels/getAverageDays`;
- const params = {
- agencyModeFk: this.travel.agencyModeFk
- };
- this.$http.get(query, {params}).then(res => {
- if (!res.data)
- return;
-
- const landed = new Date(value);
- const futureDate = landed.getDate() + res.data.dayDuration;
- landed.setDate(futureDate);
-
- this.travel.landed = landed;
- this.travel.warehouseInFk = res.data.warehouseInFk;
- this.travel.warehouseOutFk = res.data.warehouseOutFk;
- });
- }
-
- onSubmit() {
- return this.$.watcher.submit().then(
- res => this.$state.go('travel.card.basicData', {id: res.data.id})
- );
- }
-}
-
-ngModule.vnComponent('vnTravelCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/travel/front/create/index.spec.js b/modules/travel/front/create/index.spec.js
deleted file mode 100644
index cdff8cfb9..000000000
--- a/modules/travel/front/create/index.spec.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import './index';
-import watcher from 'core/mocks/watcher';
-
-describe('Travel Component vnTravelCreate', () => {
- let $scope;
- let $state;
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject(($componentController, $rootScope, _$state_, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- $state = _$state_;
- $scope.watcher = watcher;
- const $element = angular.element(' ');
- controller = $componentController('vnTravelCreate', {$element, $scope});
- }));
-
- describe('onSubmit()', () => {
- it(`should call submit() on the watcher then expect a callback`, () => {
- jest.spyOn($state, 'go');
-
- controller.onSubmit();
-
- expect(controller.$state.go).toHaveBeenCalledWith('travel.card.basicData', {id: 1234});
- });
- });
-
- describe('$onChanges()', () => {
- it('should update the travel data when $params.q is defined', () => {
- controller.$params = {q: '{"ref": 1,"agencyModeFk": 1}'};
-
- const params = {q: '{"ref": 1, "agencyModeFk": 1}'};
- const json = JSON.parse(params.q);
-
- controller.$onChanges();
-
- expect(controller.travel).toEqual(json);
- });
- });
-
- describe('onShippedChange()', () => {
- it(`should do nothing if there's no agencyModeFk in the travel.`, () => {
- controller.travel = {};
- controller.onShippedChange();
-
- expect(controller.travel.landed).toBeUndefined();
- expect(controller.travel.warehouseInFk).toBeUndefined();
- expect(controller.travel.warehouseOutFk).toBeUndefined();
- });
-
- it(`should do nothing if there's no response data.`, () => {
- controller.travel = {agencyModeFk: 4};
- const tomorrow = Date.vnNew();
-
- const query = `travels/getAverageDays?agencyModeFk=${controller.travel.agencyModeFk}`;
- $httpBackend.expectGET(query).respond(undefined);
- controller.onShippedChange(tomorrow);
- $httpBackend.flush();
-
- expect(controller.travel.warehouseInFk).toBeUndefined();
- expect(controller.travel.warehouseOutFk).toBeUndefined();
- expect(controller.travel.dayDuration).toBeUndefined();
- });
-
- it(`should fill the fields when it's selected a date and agency.`, () => {
- controller.travel = {agencyModeFk: 1};
- const tomorrow = Date.vnNew();
- tomorrow.setDate(tomorrow.getDate() + 9);
- const expectedResponse = {
- id: 8,
- dayDuration: 9,
- warehouseInFk: 5,
- warehouseOutFk: 1
- };
-
- const query = `travels/getAverageDays?agencyModeFk=${controller.travel.agencyModeFk}`;
- $httpBackend.expectGET(query).respond(expectedResponse);
- controller.onShippedChange(tomorrow);
- $httpBackend.flush();
-
- expect(controller.travel.warehouseInFk).toEqual(expectedResponse.warehouseInFk);
- expect(controller.travel.warehouseOutFk).toEqual(expectedResponse.warehouseOutFk);
- });
- });
-});
diff --git a/modules/travel/front/descriptor-menu/index.html b/modules/travel/front/descriptor-menu/index.html
deleted file mode 100644
index 19831860b..000000000
--- a/modules/travel/front/descriptor-menu/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
- Clone travel
-
-
- Clone travel and his entries
-
-
- Delete travel
-
-
- Add entry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/travel/front/descriptor-menu/index.js b/modules/travel/front/descriptor-menu/index.js
deleted file mode 100644
index f68502ec3..000000000
--- a/modules/travel/front/descriptor-menu/index.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- }
-
- get travelId() {
- return this._travelId;
- }
-
- set travelId(value) {
- this._travelId = value;
-
- if (value) this.loadData();
- }
-
- loadData() {
- const filter = {
- fields: [
- 'id',
- 'ref',
- 'shipped',
- 'landed',
- 'totalEntries',
- 'agencyModeFk',
- 'warehouseInFk',
- 'warehouseOutFk',
- 'cargoSupplierFk'
- ],
- include: [
- {
- relation: 'warehouseIn',
- scope: {
- fields: ['name']
- }
- }, {
- relation: 'warehouseOut',
- scope: {
- fields: ['name']
- }
- }
- ]
- };
- this.$http.get(`Travels/${this.travelId}`, {filter})
- .then(res => this.travel = res.data);
-
- this.$http.get(`Travels/${this.travelId}/getEntries`)
- .then(res => this.entries = res.data);
- }
-
- get isBuyer() {
- return this.aclService.hasAny(['buyer']);
- }
-
- onDeleteAccept() {
- this.$http.delete(`Travels/${this.travelId}`)
- .then(() => this.$state.go('travel.index'))
- .then(() => this.vnApp.showSuccess(this.$t('Travel deleted')));
- }
-
- onCloneAccept() {
- const params = JSON.stringify({
- ref: this.travel.ref,
- agencyModeFk: this.travel.agencyModeFk,
- shipped: this.travel.shipped,
- landed: this.travel.landed,
- warehouseInFk: this.travel.warehouseInFk,
- warehouseOutFk: this.travel.warehouseOutFk
- });
- this.$state.go('travel.create', {q: params});
- }
-
- async redirectToCreateEntry() {
- this.$state.go('home');
- window.location.href = await this.vnApp.getUrl(`entry/create?travelFk=${this.travelId}`);
- }
-
- onCloneWithEntriesAccept() {
- this.$http.post(`Travels/${this.travelId}/cloneWithEntries`)
- .then(res => this.$state.go('travel.card.basicData', {id: res.data}));
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnTravelDescriptorMenu', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- travelId: '<',
- }
-});
diff --git a/modules/travel/front/descriptor-menu/index.spec.js b/modules/travel/front/descriptor-menu/index.spec.js
deleted file mode 100644
index 40319e8e2..000000000
--- a/modules/travel/front/descriptor-menu/index.spec.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import './index.js';
-
-describe('Travel Component vnTravelDescriptorMenu', () => {
- let controller;
- let $httpBackend;
- beforeEach(ngModule('travel'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element(' ');
- controller = $componentController('vnTravelDescriptorMenu', {$element});
- controller._travelId = 5;
- }));
-
- describe('onCloneAccept()', () => {
- it('should call state.go with the travel data', () => {
- jest.spyOn(controller.$state, 'go').mockReturnValue('ok');
-
- controller.travel = {
- ref: 'the ref',
- agencyModeFk: 'the agency',
- shipped: 'the shipped date',
- landed: 'the landing date',
- warehouseInFk: 'the receiver warehouse',
- warehouseOutFk: 'the sender warehouse'
- };
-
- controller.onCloneAccept();
-
- const params = JSON.stringify({
- ref: controller.travel.ref,
- agencyModeFk: controller.travel.agencyModeFk,
- shipped: controller.travel.shipped,
- landed: controller.travel.landed,
- warehouseInFk: controller.travel.warehouseInFk,
- warehouseOutFk: controller.travel.warehouseOutFk
- });
-
- expect(controller.$state.go).toHaveBeenCalledWith('travel.create', {'q': params});
- });
- });
-
- describe('onDeleteAccept()', () => {
- it('should perform a delete query', () => {
- jest.spyOn(controller.$state, 'go').mockReturnValue('ok');
- controller.travelId = 1;
-
- $httpBackend.when('GET', `Travels/${controller.travelId}`).respond(200);
- $httpBackend.when('GET', `Travels/${controller.travelId}/getEntries`).respond(200);
- $httpBackend.expect('DELETE', `Travels/${controller.travelId}`).respond(200);
- controller.onDeleteAccept();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith('travel.index');
- });
- });
-
- describe('onCloneWithEntriesAccept()', () => {
- it('should make an HTTP query and then call to the $state.go method with the returned id', () => {
- jest.spyOn(controller.$state, 'go').mockReturnValue('ok');
-
- $httpBackend.expect('POST', `Travels/${controller.travelId}/cloneWithEntries`).respond(200, 9);
- controller.onCloneWithEntriesAccept();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith('travel.card.basicData', {
- id: jasmine.any(Number)
- });
- });
- });
-});
diff --git a/modules/travel/front/descriptor-menu/locale/es.yml b/modules/travel/front/descriptor-menu/locale/es.yml
deleted file mode 100644
index e019d1769..000000000
--- a/modules/travel/front/descriptor-menu/locale/es.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-Clone travel: Clonar envío
-Add entry: Añadir entrada
-Clone travel and his entries: Clonar travel y sus entradas
-Do you want to clone this travel and all containing entries?: ¿Quieres clonar este travel y todas las entradas que contiene?
-Delete travel: Eliminar envío
-The travel will be deleted: El envío será eliminado
-Do you want to delete this travel?: ¿Quieres eliminar este envío?
-Travel deleted: Envío eliminado
\ No newline at end of file
diff --git a/modules/travel/front/descriptor-menu/style.scss b/modules/travel/front/descriptor-menu/style.scss
deleted file mode 100644
index beab9335e..000000000
--- a/modules/travel/front/descriptor-menu/style.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-@import "./effects";
-@import "variables";
-
-vn-travel-descriptor-menu {
- & > vn-icon-button[icon="more_vert"] {
- display: flex;
- min-width: 45px;
- height: 45px;
- box-sizing: border-box;
- align-items: center;
- justify-content: center;
- }
- & > vn-icon-button[icon="more_vert"] {
- @extend %clickable;
- color: inherit;
-
- & > vn-icon {
- padding: 10px;
- }
- vn-icon {
- font-size: 1.75rem;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/travel/front/descriptor-popover/index.html b/modules/travel/front/descriptor-popover/index.html
deleted file mode 100644
index 376423bbc..000000000
--- a/modules/travel/front/descriptor-popover/index.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/modules/travel/front/descriptor-popover/index.js b/modules/travel/front/descriptor-popover/index.js
deleted file mode 100644
index 12c5908ca..000000000
--- a/modules/travel/front/descriptor-popover/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import ngModule from '../module';
-import DescriptorPopover from 'salix/components/descriptor-popover';
-
-class Controller extends DescriptorPopover {}
-
-ngModule.vnComponent('vnTravelDescriptorPopover', {
- slotTemplate: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/travel/front/descriptor/index.html b/modules/travel/front/descriptor/index.html
deleted file mode 100644
index bbf5721fd..000000000
--- a/modules/travel/front/descriptor/index.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/travel/front/descriptor/index.js b/modules/travel/front/descriptor/index.js
deleted file mode 100644
index b1f2f53be..000000000
--- a/modules/travel/front/descriptor/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import ngModule from '../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get travel() {
- return this.entity;
- }
-
- set travel(value) {
- this.entity = value;
- }
-
- get travelFilter() {
- let travelFilter;
- const travel = this.travel;
-
- if (travel && travel.agencyModeFk) {
- travelFilter = this.travel && JSON.stringify({
- agencyModeFk: this.travel.agencyModeFk
- });
- }
- return travelFilter;
- }
-
- loadData() {
- const filter = {
- fields: [
- 'id',
- 'ref',
- 'shipped',
- 'landed',
- 'totalEntries',
- 'warehouseInFk',
- 'warehouseOutFk',
- 'cargoSupplierFk'
- ],
- include: [
- {
- relation: 'warehouseIn',
- scope: {
- fields: ['name']
- }
- }, {
- relation: 'warehouseOut',
- scope: {
- fields: ['name']
- }
- }
- ]
- };
-
- return this.getData(`Travels/${this.id}`, {filter})
- .then(res => this.entity = res.data);
- }
-}
-
-ngModule.vnComponent('vnTravelDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- travel: '<'
- }
-});
diff --git a/modules/travel/front/descriptor/index.spec.js b/modules/travel/front/descriptor/index.spec.js
deleted file mode 100644
index 0a88c8607..000000000
--- a/modules/travel/front/descriptor/index.spec.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import './index.js';
-
-describe('vnTravelDescriptor', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnTravelDescriptor', {$element: null});
- }));
-
- describe('loadData()', () => {
- it(`should perform a get query to store the worker data into the controller`, () => {
- const id = 1;
- const response = 'foo';
-
- $httpBackend.expectRoute('GET', `Travels/${id}`).respond(response);
- controller.id = id;
- $httpBackend.flush();
-
- expect(controller.travel).toEqual(response);
- });
- });
-});
diff --git a/modules/travel/front/descriptor/locale/es.yml b/modules/travel/front/descriptor/locale/es.yml
deleted file mode 100644
index 3e6d62735..000000000
--- a/modules/travel/front/descriptor/locale/es.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-Reference: Referencia
-Wh. In: Alm. entrada
-Wh. Out: Alm. salida
-Shipped: F. envío
-Landed: F. entrega
-Total entries: Entradas totales
\ No newline at end of file
diff --git a/modules/travel/front/extra-community-search-panel/index.html b/modules/travel/front/extra-community-search-panel/index.html
deleted file mode 100644
index c0d726718..000000000
--- a/modules/travel/front/extra-community-search-panel/index.html
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
diff --git a/modules/travel/front/extra-community-search-panel/index.js b/modules/travel/front/extra-community-search-panel/index.js
deleted file mode 100644
index 1add11dce..000000000
--- a/modules/travel/front/extra-community-search-panel/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- constructor($, $element) {
- super($, $element);
-
- this.filter = this.$.filter;
- }
-
- get shippedFrom() {
- return this.filter.shippedFrom;
- }
-
- set shippedFrom(value) {
- this.filter.shippedFrom = value;
- }
-
- get landedTo() {
- return this.filter.landedTo;
- }
-
- set landedTo(value) {
- this.filter.landedTo = value;
- }
-}
-
-ngModule.vnComponent('vnExtraCommunitySearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/travel/front/extra-community/index.html b/modules/travel/front/extra-community/index.html
deleted file mode 100644
index 8132bddb1..000000000
--- a/modules/travel/front/extra-community/index.html
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id
-
-
- Supplier
-
-
- Agency
-
-
- Amount
-
-
- Reference
-
-
- Packages
-
-
- Bl. KG
-
-
- Phy. KG
-
-
- Vol. KG
-
-
- Wh. Out
-
-
- W. Shipped
-
-
- Wh. In
-
-
- W. Landed
-
-
-
-
-
-
-
-
- {{::entry.id}}
-
-
-
-
- {{::entry.supplierName}}
-
-
- {{::entry.invoiceAmount | currency: 'EUR': 2}}
-
- {{::entry.reference}}
- {{::entry.stickers}}
-
- {{::entry.loadedkg}}
- {{::entry.volumeKg}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/travel/front/extra-community/index.js b/modules/travel/front/extra-community/index.js
deleted file mode 100644
index 6e9c39f43..000000000
--- a/modules/travel/front/extra-community/index.js
+++ /dev/null
@@ -1,162 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $, vnReport) {
- super($element, $);
-
- this.vnReport = vnReport;
-
- const draggable = this.element.querySelector('.travel-list');
- draggable.addEventListener('dragstart',
- event => this.dragStart(event));
- draggable.addEventListener('dragend',
- event => this.dragEnd(event));
-
- draggable.addEventListener('dragover',
- event => this.dragOver(event));
- draggable.addEventListener('dragenter',
- event => this.dragEnter(event));
- draggable.addEventListener('dragleave',
- event => this.dragLeave(event));
-
- this.draggableElement = 'tr[draggable]';
- this.droppableElement = 'tbody[vn-droppable]';
-
- const twoDays = 2;
- const shippedFrom = Date.vnNew();
- shippedFrom.setDate(shippedFrom.getDate() - twoDays);
- shippedFrom.setHours(0, 0, 0, 0);
-
- const sevenDays = 7;
- const landedTo = Date.vnNew();
- landedTo.setDate(landedTo.getDate() + sevenDays);
- landedTo.setHours(23, 59, 59, 59);
-
- this.defaultFilter = {
- shippedFrom: shippedFrom,
- landedTo: landedTo,
- continent: 'AM'
- };
-
- this.smartTableOptions = {};
- }
-
- onDragInterval() {
- if (this.dragClientY > 0 && this.dragClientY < 75)
- this.$window.scrollTo(0, this.$window.scrollY - 10);
-
- const maxHeight = window.screen.availHeight - (window.outerHeight - window.innerHeight);
- if (this.dragClientY > maxHeight - 75 && this.dragClientY < maxHeight)
- this.$window.scrollTo(0, this.$window.scrollY + 10);
- }
-
- findDraggable($event) {
- const target = $event.target;
- const draggable = target.closest(this.draggableElement);
-
- return draggable;
- }
-
- findDroppable($event) {
- const target = $event.target;
- const droppable = target.closest(this.droppableElement);
-
- return droppable;
- }
-
- dragStart($event) {
- const draggable = this.findDraggable($event);
- draggable.classList.add('dragging');
-
- const id = parseInt(draggable.id);
- this.entryId = id;
- this.entry = draggable;
- this.interval = setInterval(() => this.onDragInterval(), 50);
- }
-
- dragEnd($event) {
- const draggable = this.findDraggable($event);
- draggable.classList.remove('dragging');
- this.entryId = null;
- this.entry = null;
-
- clearInterval(this.interval);
- }
-
- onDrop($event) {
- const model = this.$.model;
- const droppable = this.findDroppable($event);
- const travelId = parseInt(droppable.id);
-
- const currentDroppable = this.entry.closest(this.droppableElement);
-
- if (currentDroppable == droppable) return;
-
- if (this.entryId && travelId) {
- const path = `Entries/${this.entryId}`;
- this.$http.patch(path, {travelFk: travelId})
- .then(() => model.refresh())
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')));
- }
- }
-
- undrop() {
- if (!this.dropping) return;
- this.dropping.classList.remove('dropping');
- this.dropping = null;
- }
-
- dragOver($event) {
- this.dragClientY = $event.clientY;
- $event.preventDefault();
- }
-
- dragEnter($event) {
- let element = this.findDroppable($event);
- if (element) this.dropCount++;
-
- if (element != this.dropping) {
- this.undrop();
- if (element) element.classList.add('dropping');
- this.dropping = element;
- }
- }
-
- dragLeave($event) {
- let element = this.findDroppable($event);
-
- if (element) {
- this.dropCount--;
- if (this.dropCount == 0) this.undrop();
- }
- }
-
- save(id, data) {
- const endpoint = `Travels/${id}`;
- this.$http.patch(endpoint, data)
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')));
- }
-
- get reportParams() {
- const userParams = this.$.model.userParams;
- const currentFilter = this.$.model.currentFilter;
-
- return Object.assign({
- authorization: this.vnToken.tokenMultimedia,
- filter: currentFilter
- }, userParams);
- }
-
- showReport() {
- this.vnReport.show(`Travels/extra-community-pdf`, this.reportParams);
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnReport'];
-
-ngModule.vnComponent('vnTravelExtraCommunity', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/travel/front/extra-community/index.spec.js b/modules/travel/front/extra-community/index.spec.js
deleted file mode 100644
index 18ddee665..000000000
--- a/modules/travel/front/extra-community/index.spec.js
+++ /dev/null
@@ -1,128 +0,0 @@
-import './index.js';
-
-describe('Travel Component vnTravelExtraCommunity', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element('
');
- controller = $componentController('vnTravelExtraCommunity', {$element});
- controller.$.model = {};
- controller.$.model.refresh = jest.fn();
- }));
-
- describe('findDraggable()', () => {
- it('should find the draggable element', () => {
- const draggable = document.createElement('tr');
- draggable.setAttribute('draggable', true);
-
- const $event = new Event('dragstart');
- const target = document.createElement('div');
- draggable.appendChild(target);
- target.dispatchEvent($event);
-
- const result = controller.findDraggable($event);
-
- expect(result).toEqual(draggable);
- });
- });
-
- describe('findDroppable()', () => {
- it('should find the droppable element', () => {
- const droppable = document.createElement('tbody');
- droppable.setAttribute('vn-droppable', true);
-
- const $event = new Event('drop');
- const target = document.createElement('div');
- droppable.appendChild(target);
- target.dispatchEvent($event);
-
- const result = controller.findDroppable($event);
-
- expect(result).toEqual(droppable);
- });
- });
-
- describe('dragStart()', () => {
- it(`should add the class "dragging" to the draggable element
- and then set the entryId controller property`, () => {
- const draggable = document.createElement('tr');
- draggable.setAttribute('draggable', true);
- draggable.setAttribute('id', 3);
-
- jest.spyOn(controller, 'findDraggable').mockReturnValue(draggable);
-
- const $event = new Event('dragStart');
- controller.dragStart($event);
-
- const firstClass = draggable.classList[0];
-
- expect(firstClass).toEqual('dragging');
- expect(controller.entryId).toEqual(3);
- expect(controller.entry).toEqual(draggable);
- });
- });
-
- describe('dragEnd()', () => {
- it(`should remove the class "dragging" from the draggable element
- and then set the entryId controller property to null`, () => {
- const draggable = document.createElement('tr');
- draggable.setAttribute('draggable', true);
- draggable.setAttribute('id', 3);
- draggable.classList.add('dragging');
-
- jest.spyOn(controller, 'findDraggable').mockReturnValue(draggable);
-
- const $event = new Event('dragStart');
- controller.dragEnd($event);
-
- const classList = draggable.classList;
-
- expect(classList.length).toEqual(0);
- expect(controller.entryId).toBeNull();
- expect(controller.entry).toBeNull();
- });
- });
-
- describe('onDrop()', () => {
- it('should make an HTTP patch query', () => {
- const droppable = document.createElement('tbody');
- droppable.setAttribute('vn-droppable', true);
- droppable.setAttribute('id', 1);
-
- jest.spyOn(controller, 'findDroppable').mockReturnValue(droppable);
-
- const oldDroppable = document.createElement('tbody');
- oldDroppable.setAttribute('vn-droppable', true);
- const entry = document.createElement('div');
- oldDroppable.appendChild(entry);
-
- controller.entryId = 3;
- controller.entry = entry;
-
- const $event = new Event('drop');
- const expectedData = {travelFk: 1};
- $httpBackend.expect('PATCH', `Entries/3`, expectedData).respond(200);
- controller.onDrop($event);
- $httpBackend.flush();
- });
- });
-
- describe('save()', () => {
- it('should make an HTTP query', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const travelId = 1;
- const data = {ref: 'New reference'};
- const expectedData = {ref: 'New reference'};
- $httpBackend.expect('PATCH', `Travels/${travelId}`, expectedData).respond(200);
- controller.save(travelId, data);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
- });
- });
-});
diff --git a/modules/travel/front/extra-community/locale/es.yml b/modules/travel/front/extra-community/locale/es.yml
deleted file mode 100644
index ed6179c91..000000000
--- a/modules/travel/front/extra-community/locale/es.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-Family: Familia
-Extra community: Extra comunitarios
-Freighter: Transitario
-Bl. KG: KG Bloq.
-Phy. KG: KG físico
-Vol. KG: KG Vol.
-Search by travel id or reference: Buscar por id de travel o referencia
-Search by extra community travel: Buscar por envío extra comunitario
-Continent Out: Cont. salida
-W. Shipped: F. envío
-W. Landed: F. llegada
diff --git a/modules/travel/front/extra-community/style.scss b/modules/travel/front/extra-community/style.scss
deleted file mode 100644
index fb64822f9..000000000
--- a/modules/travel/front/extra-community/style.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-@import "variables";
-
-vn-travel-extra-community {
- .header {
- margin-bottom: 16px;
- line-height: 1;
- padding: 7px;
- padding-bottom: 7px;
- padding-bottom: 4px;
- font-weight: lighter;
- background-color: $color-bg;
- color: white;
- border-bottom: 1px solid #f7931e;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- cursor: pointer;
- .multi-line{
- padding-top: 15px;
- padding-bottom: 15px;
- }
- }
-
- table[vn-droppable] {
- border-radius: 0;
- }
-
- tr[draggable] {
- transition: all .5s;
- cursor: move;
- overflow: auto;
- outline: 0;
- height: 65px;
- pointer-events: fill;
- user-select: all;
- }
-
- tr[draggable] *::selection {
- background-color: transparent;
- }
-
- tr[draggable]:hover {
- background-color: $color-hover-cd;
- }
-
- tr[draggable].dragging {
- background-color: $color-primary-light;
- color: $color-font-light;
- font-weight: bold;
- }
-
-
- .multi-line{
- max-width: 200px;
- word-wrap: normal;
- white-space: normal;
- }
-
- vn-td-editable text {
- background-color: transparent;
- padding: 0;
- border: 0;
- border-bottom: 1px dashed $color-active;
- border-radius: 0;
- color: $color-active
- }
-}
diff --git a/modules/travel/front/index.js b/modules/travel/front/index.js
index e4375c59d..a7209a0bd 100644
--- a/modules/travel/front/index.js
+++ b/modules/travel/front/index.js
@@ -1,18 +1,3 @@
export * from './module';
import './main';
-import './index/';
-import './search-panel';
-import './descriptor';
-import './card';
-import './summary';
-import './basic-data';
-import './log';
-import './create';
-import './thermograph/index/';
-import './thermograph/create/';
-import './thermograph/edit/';
-import './descriptor-popover';
-import './descriptor-menu';
-import './extra-community';
-import './extra-community-search-panel';
diff --git a/modules/travel/front/index/index.html b/modules/travel/front/index/index.html
deleted file mode 100644
index a768e4a29..000000000
--- a/modules/travel/front/index/index.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- Reference
- Agency
- Warehouse Out
- Shipped
-
- Warehouse In
- Landed
-
- Total entries
-
-
-
-
-
- {{::travel.ref}}
- {{::travel.agencyModeName}}
- {{::travel.warehouseOutName}}
-
-
- {{::travel.shipped | date:'dd/MM/yyyy'}}
-
-
-
-
-
-
- {{::travel.warehouseInName}}
-
-
- {{::travel.landed | date:'dd/MM/yyyy'}}
-
-
-
-
-
-
- {{::travel.totalEntries}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/travel/front/index/index.js b/modules/travel/front/index/index.js
deleted file mode 100644
index a570146fe..000000000
--- a/modules/travel/front/index/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- preview(travel) {
- this.travelSelected = travel;
- this.$.summary.show();
- }
-
- onCloneAccept(travel) {
- const params = JSON.stringify({
- ref: travel.ref,
- agencyModeFk: travel.agencyModeFk,
- shipped: travel.shipped,
- landed: travel.landed,
- warehouseInFk: travel.warehouseInFk,
- warehouseOutFk: travel.warehouseOutFk
- });
- this.$state.go('travel.create', {q: params});
- }
-
- compareDate(date) {
- let today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
-
- date = new Date(date);
- date.setHours(0, 0, 0, 0);
-
- const timeDifference = today - date;
- if (timeDifference == 0) return 'warning';
- if (timeDifference < 0) return 'success';
- }
-}
-
-ngModule.vnComponent('vnTravelIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/travel/front/index/index.spec.js b/modules/travel/front/index/index.spec.js
deleted file mode 100644
index 9083c4519..000000000
--- a/modules/travel/front/index/index.spec.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import './index.js';
-
-describe('Travel Component vnTravelIndex', () => {
- let controller;
- let travel = {
- id: 1,
- warehouseInFk: 1,
- totalEntries: 3,
- isDelivered: false
- };
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject($componentController => {
- const $element = angular.element(' ');
- controller = $componentController('vnTravelIndex', {$element});
- controller.$.summary = {show: jasmine.createSpy('show')};
- }));
-
- describe('preview()', () => {
- it('should show the dialog summary', () => {
- let event = new MouseEvent('click', {
- bubbles: true,
- cancelable: true
- });
- controller.preview(event, travel);
-
- expect(controller.$.summary.show).toHaveBeenCalledWith();
- });
- });
-
- describe('onCloneAccept()', () => {
- it('should call go() then update travelSelected in the controller', () => {
- jest.spyOn(controller.$state, 'go');
-
- const travel = {
- ref: 1,
- agencyModeFk: 1
- };
- const travelParams = {
- ref: travel.ref,
- agencyModeFk: travel.agencyModeFk
- };
- const queryParams = JSON.stringify(travelParams);
- controller.onCloneAccept(travel);
-
- expect(controller.$state.go).toHaveBeenCalledWith('travel.create', {q: queryParams});
- });
- });
-
- describe('compareDate()', () => {
- it('should return warning if the date passed to compareDate() is todays', () => {
- const today = Date.vnNew();
-
- const result = controller.compareDate(today);
-
- expect(result).toEqual('warning');
- });
-
- it('should return success if the date passed to compareDate() is in the future', () => {
- const tomorrow = Date.vnNew();
- tomorrow.setDate(tomorrow.getDate() + 1);
-
- const result = controller.compareDate(tomorrow);
-
- expect(result).toEqual('success');
- });
-
- it('should return undefined if the date passed to compareDate() is in the past', () => {
- const yesterday = Date.vnNew();
- yesterday.setDate(yesterday.getDate() - 1);
-
- const result = controller.compareDate(yesterday);
-
- expect(result).toBeUndefined();
- });
- });
-});
diff --git a/modules/travel/front/index/locale/es.yml b/modules/travel/front/index/locale/es.yml
deleted file mode 100644
index 5ce4c502f..000000000
--- a/modules/travel/front/index/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Do you want to clone this travel?: ¿Desea clonar este envio?
-All it's properties will be copied: Todas sus propiedades serán copiadas
-Clone: Clonar
\ No newline at end of file
diff --git a/modules/travel/front/index/style.scss b/modules/travel/front/index/style.scss
deleted file mode 100644
index ca1cf538b..000000000
--- a/modules/travel/front/index/style.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-@import "variables";
-
-vn-travel-index {
- vn-icon {
- color: $color-font-secondary
- }
-
- vn-icon.active {
- color: $color-success
- }
-}
diff --git a/modules/travel/front/log/index.html b/modules/travel/front/log/index.html
deleted file mode 100644
index fc4622e5a..000000000
--- a/modules/travel/front/log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/travel/front/log/index.js b/modules/travel/front/log/index.js
deleted file mode 100644
index 7af601b5c..000000000
--- a/modules/travel/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnTravelLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/travel/front/main/index.html b/modules/travel/front/main/index.html
index 131d9409e..e69de29bb 100644
--- a/modules/travel/front/main/index.html
+++ b/modules/travel/front/main/index.html
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/travel/front/main/index.js b/modules/travel/front/main/index.js
index 6a153f21a..37dcbb0dc 100644
--- a/modules/travel/front/main/index.js
+++ b/modules/travel/front/main/index.js
@@ -5,6 +5,10 @@ export default class Travel extends ModuleMain {
constructor() {
super();
}
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`travel/`);
+ }
}
ngModule.vnComponent('vnTravel', {
diff --git a/modules/travel/front/routes.json b/modules/travel/front/routes.json
index 5a63620d4..6891a46cf 100644
--- a/modules/travel/front/routes.json
+++ b/modules/travel/front/routes.json
@@ -3,7 +3,7 @@
"name": "Travels",
"icon": "local_airport",
"validations": true,
- "dependencies": ["worker"],
+ "dependencies": ["worker", "entry"],
"menus": {
"main": [
{"state": "travel.index", "icon": "local_airport"},
@@ -27,80 +27,6 @@
"state": "travel.index",
"component": "vn-travel-index",
"description": "Travels"
- }, {
- "url": "/:id",
- "state": "travel.card",
- "abstract": true,
- "component": "vn-travel-card"
- }, {
- "url": "/summary",
- "state": "travel.card.summary",
- "component": "vn-travel-summary",
- "description": "Summary",
- "params": {
- "travel": "$ctrl.travel"
- }
- }, {
- "url": "/basic-data",
- "state": "travel.card.basicData",
- "component": "vn-travel-basic-data",
- "description": "Basic data",
- "acl": ["buyer","logistic"],
- "params": {
- "travel": "$ctrl.travel"
- }
- }, {
- "url" : "/log",
- "state": "travel.card.log",
- "component": "vn-travel-log",
- "description": "Log"
- }, {
- "url": "/create?q",
- "state": "travel.create",
- "component": "vn-travel-create",
- "description": "New travel"
- }, {
- "url": "/thermograph",
- "state": "travel.card.thermograph",
- "abstract": true,
- "component": "ui-view"
- }, {
- "url" : "/index",
- "state": "travel.card.thermograph.index",
- "component": "vn-travel-thermograph-index",
- "description": "Thermographs",
- "params": {
- "travel": "$ctrl.travel"
- },
- "acl": ["buyer"]
- }, {
- "url" : "/create",
- "state": "travel.card.thermograph.create",
- "component": "vn-travel-thermograph-create",
- "description": "Add thermograph",
- "params": {
- "travel": "$ctrl.travel"
- },
- "acl": ["buyer"]
- }, {
- "url" : "/:thermographId/edit",
- "state": "travel.card.thermograph.edit",
- "component": "vn-travel-thermograph-edit",
- "description": "Edit thermograph",
- "params": {
- "travel": "$ctrl.travel"
- },
- "acl": ["buyer"]
- },
- {
- "url": "/extra-community?q",
- "state": "travel.extraCommunity",
- "component": "vn-travel-extra-community",
- "description": "Extra community",
- "acl": ["buyer"],
- "params": {
- "travel": "$ctrl.travel"
- }
}
]
}
diff --git a/modules/travel/front/search-panel/index.html b/modules/travel/front/search-panel/index.html
deleted file mode 100644
index dd8d98af1..000000000
--- a/modules/travel/front/search-panel/index.html
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id/{{$ctrl.$t('Reference')}}: {{$ctrl.filter.search}}
-
-
- {{$ctrl.$t('Agency')}}: {{agency.selection.name}}
-
-
- {{$ctrl.$t('Warehouse Out')}}: {{warehouseOut.selection.name}}
-
-
- {{$ctrl.$t('Warehouse In')}}: {{warehouseIn.selection.name}}
-
-
- {{$ctrl.$t('Days onward')}}: {{$ctrl.filter.scopeDays}}
-
-
- {{$ctrl.$t('Landed from')}}: {{$ctrl.filter.landedFrom | date:'dd/MM/yyyy'}}
-
-
- {{$ctrl.$t('Landed to')}}: {{$ctrl.filter.landedTo | date:'dd/MM/yyyy'}}
-
-
- {{$ctrl.$t('Continent Out')}}: {{continent.selection.name}}
-
-
- {{$ctrl.$t('Total entries')}}: {{$ctrl.filter.totalEntries}}
-
-
-
diff --git a/modules/travel/front/search-panel/index.js b/modules/travel/front/search-panel/index.js
deleted file mode 100644
index 5969a8c3f..000000000
--- a/modules/travel/front/search-panel/index.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-import './style.scss';
-
-class Controller extends SearchPanel {
- constructor($, $element) {
- super($, $element);
- this.initFilter();
- this.fetchData();
- }
-
- $onChanges() {
- if (this.model)
- this.applyFilters();
- }
-
- fetchData() {
- this.$http.get('AgencyModes').then(res => {
- this.agencyModes = res.data;
- });
- this.$http.get('Warehouses').then(res => {
- this.warehouses = res.data;
- });
- this.$http.get('Continents').then(res => {
- this.continents = res.data;
- });
- }
-
- initFilter() {
- this.filter = {};
- if (this.$params.q) {
- this.filter = JSON.parse(this.$params.q);
- this.search = this.filter.search;
- this.totalEntries = this.filter.totalEntries;
- }
- if (!this.filter.scopeDays) this.filter.scopeDays = 7;
- }
-
- applyFilters(param) {
- if (this.filter?.search)
- delete this.filter.scopeDays;
-
- this.model.applyFilter({}, this.filter)
- .then(() => {
- if (param && this.model._orgData.length === 1)
- this.$state.go('travel.card.summary', {id: this.model._orgData[0].id});
- else
- this.$state.go(this.$state.current.name, {q: JSON.stringify(this.filter)}, {location: 'replace'});
- });
- }
-
- removeParamFilter(param) {
- if (this[param]) delete this[param];
- delete this.filter[param];
- this.applyFilters();
- }
-
- onKeyPress($event, param) {
- if ($event.key === 'Enter') {
- this.filter[param] = this[param];
- this.applyFilters(param === 'search');
- }
- }
-}
-
-ngModule.vnComponent('vnTravelSearchPanel', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- model: '<'
- }
-});
diff --git a/modules/travel/front/search-panel/index.spec.js b/modules/travel/front/search-panel/index.spec.js
deleted file mode 100644
index 488143e80..000000000
--- a/modules/travel/front/search-panel/index.spec.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import './index';
-
-describe('Travel Component vnTravelSearchPanel', () => {
- let controller;
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject($componentController => {
- controller = $componentController('vnTravelSearchPanel', {$element: null});
- controller.$t = () => {};
- }));
-
- describe('applyFilters()', () => {
- it('should apply filters', async() => {
- controller.filter = {foo: 'bar'};
- controller.model = {
- applyFilter: jest.fn().mockResolvedValue(),
- _orgData: [{id: 1}]
- };
- controller.$state = {
- current: {
- name: 'foo'
- },
- go: jest.fn()
- };
-
- await controller.applyFilters(true);
-
- expect(controller.model.applyFilter).toHaveBeenCalledWith({}, controller.filter);
- expect(controller.$state.go).toHaveBeenCalledWith('travel.card.summary', {id: 1});
-
- await controller.applyFilters(false);
-
- expect(controller.$state.go).toHaveBeenCalledWith(controller.$state.current.name,
- {q: JSON.stringify(controller.filter)}, {location: 'replace'});
- });
- });
-});
diff --git a/modules/travel/front/search-panel/locale/es.yml b/modules/travel/front/search-panel/locale/es.yml
deleted file mode 100644
index 1f892a742..000000000
--- a/modules/travel/front/search-panel/locale/es.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-Ticket id: Id ticket
-Client id: Id cliente
-Nickname: Alias
-From: Desde
-To: Hasta
-Agency: Agencia
-Warehouse: Almacén
\ No newline at end of file
diff --git a/modules/travel/front/search-panel/style.scss b/modules/travel/front/search-panel/style.scss
deleted file mode 100644
index 0da52408a..000000000
--- a/modules/travel/front/search-panel/style.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-@import "variables";
-
-vn-travel-search-panel vn-side-menu {
- .menu {
- min-width: $menu-width;
- }
- & > div {
- .input {
- padding-left: $spacing-md;
- padding-right: $spacing-md;
- border-color: $color-spacer;
- border-bottom: $border-thin;
- }
- .horizontal {
- padding-left: $spacing-md;
- padding-right: $spacing-md;
- grid-auto-flow: column;
- grid-column-gap: $spacing-sm;
- align-items: center;
- }
- .chips {
- display: flex;
- flex-wrap: wrap;
- padding: $spacing-md;
- overflow: hidden;
- max-width: 100%;
- border-color: $color-spacer;
- }
-
- .or {
- align-self: center;
- font-weight: bold;
- font-size: 26px;
- color: $color-font-secondary;
- }
- }
-}
diff --git a/modules/travel/front/summary/index.html b/modules/travel/front/summary/index.html
deleted file mode 100644
index d9dbb0f90..000000000
--- a/modules/travel/front/summary/index.html
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
- {{$ctrl.travelData.id}} - {{$ctrl.travelData.ref}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Entries
-
-
-
- Confirmed
- Entry Id
- Supplier
- Reference
- HB
- Freight
- Package
- CC
- Pallet
- m³
-
-
-
-
-
-
-
-
-
-
-
- {{entry.id}}
-
-
- {{entry.supplierName}}
- {{entry.reference}}
- {{entry.hb}}
- {{entry.freightValue | currency: 'EUR': 2}}
- {{entry.packageValue | currency: 'EUR': 2}}
- {{entry.cc}}
- {{entry.pallet}}
- {{entry.m3}}
-
-
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.total('hb')}}
- {{$ctrl.total('freightValue') | currency: 'EUR': 2}}
- {{$ctrl.total('packageValue') | currency: 'EUR': 2}}
- {{$ctrl.total('cc') | number:2}}
- {{$ctrl.total('pallet') | number:2}}
- {{$ctrl.total('m3') | number:2}}
-
-
-
-
-
-
-
-
- Thermograph
-
-
-
-
- Code
- Temperature
- State
- Destination
- Created
-
-
-
-
- {{thermograph.thermographFk}}
- {{thermograph.temperatureFk}}
- {{thermograph.result}}
- {{thermograph.warehouse.name}}
- {{thermograph.created | date: 'dd/MM/yyyy'}}
-
-
-
-
-
-
-
-
diff --git a/modules/travel/front/summary/index.js b/modules/travel/front/summary/index.js
deleted file mode 100644
index 5144a0bb5..000000000
--- a/modules/travel/front/summary/index.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import ngModule from '../module';
-import Summary from 'salix/components/summary';
-import './style.scss';
-
-class Controller extends Summary {
- $onInit() {
- this.entries = [];
- }
-
- get travel() {
- return this._travel;
- }
-
- set travel(value) {
- this._travel = value;
-
- if (value && value.id) {
- this.getTravel();
- this.getEntries();
- this.getThermographs();
- }
- }
-
- getTravel() {
- return this.$http.get(`Travels/${this.travel.id}/getTravel`)
- .then(res => this.travelData = res.data);
- }
-
- getEntries() {
- return this.$http.get(`Travels/${this.travel.id}/getEntries`)
- .then(res => this.entries = res.data);
- }
-
- getThermographs() {
- const filter = {
- include: {
- relation: 'warehouse',
- scope: {
- fields: ['id', 'name']
- }
- },
- where: {
- travelFk: this.travel.id
- }
- };
-
- return this.$http.get(`TravelThermographs`, {filter})
- .then(res => this.travelThermographs = res.data);
- }
-
- total(field) {
- let total = 0;
-
- for (let entry of this.entries)
- total += entry[field];
-
- return total;
- }
-
- get isBuyer() {
- return this.aclService.hasAny(['buyer']);
- }
-}
-
-ngModule.vnComponent('vnTravelSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- travel: '<'
- }
-});
diff --git a/modules/travel/front/summary/index.spec.js b/modules/travel/front/summary/index.spec.js
deleted file mode 100644
index b1b750689..000000000
--- a/modules/travel/front/summary/index.spec.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import './index';
-
-describe('component vnTravelSummary', () => {
- let controller;
- let $httpBackend;
- let $scope;
- let $httpParamSerializer;
-
- beforeEach(angular.mock.module('travel', $translateProvider => {
- $translateProvider.translations('en', {});
- }));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $scope = $rootScope.$new();
- const $element = angular.element(` `);
- controller = $componentController('vnTravelSummary', {$element, $scope});
- }));
-
- describe('travel setter/getter', () => {
- it('should return the travel and then call both getTravel() and getEntries()', () => {
- jest.spyOn(controller, 'getTravel');
- jest.spyOn(controller, 'getEntries');
- jest.spyOn(controller, 'getThermographs');
- controller.travel = {id: 99};
-
- expect(controller._travel.id).toEqual(99);
- expect(controller.getTravel).toHaveBeenCalledWith();
- expect(controller.getEntries).toHaveBeenCalledWith();
- expect(controller.getThermographs).toHaveBeenCalledWith();
- });
- });
-
- describe('getTravel()', () => {
- it('should perform a get and then store data on the controller', () => {
- controller._travel = {id: 999};
-
- const query = `Travels/${controller._travel.id}/getTravel`;
- $httpBackend.expectGET(query).respond('I am the travelData');
- controller.getTravel();
- $httpBackend.flush();
-
- expect(controller.travelData).toEqual('I am the travelData');
- });
- });
-
- describe('getEntries()', () => {
- it('should call the getEntries method to get the entries data', () => {
- controller._travel = {id: 999};
-
- const query = `Travels/${controller._travel.id}/getEntries`;
- $httpBackend.expectGET(query).respond('I am the entries');
- controller.getEntries();
- $httpBackend.flush();
-
- expect(controller.entries).toEqual('I am the entries');
- });
- });
-
- describe('getThermographs()', () => {
- it('should call the getThermographs method to get the thermographs', () => {
- controller._travel = {id: 2};
-
- $httpBackend.expectGET(`TravelThermographs`).respond('I am the thermographs');
- controller.getThermographs();
- $httpBackend.flush();
-
- expect(controller.travelThermographs).toEqual('I am the thermographs');
- });
- });
-
- describe('total()', () => {
- it('should calculate the total amount of a given property for every row', () => {
- controller.entries = [
- {id: 1, freightValue: 1, packageValue: 2, cc: 0.01},
- {id: 2, freightValue: 1, packageValue: 2, cc: 0.01},
- {id: 3, freightValue: 1, packageValue: 2, cc: 0.01}
- ];
-
- expect(controller.total('freightValue')).toEqual(3);
- expect(controller.total('packageValue')).toEqual(6);
- expect(controller.total('cc')).toEqual(0.03);
- });
- });
-});
diff --git a/modules/travel/front/summary/locale/es.yml b/modules/travel/front/summary/locale/es.yml
deleted file mode 100644
index aa6adc938..000000000
--- a/modules/travel/front/summary/locale/es.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-Reference: Referencia
-Warehouse In: Alm. entrada
-Warehouse Out: Alm. salida
-Shipped: F. envío
-Landed: F. entrega
-Total entries: Ent. totales
-Delivered: Enviada
-Received: Recibida
-Agency: Agencia
-Entries: Entradas
-Confirmed: Confirmada
-Entry Id: Id entrada
-Supplier: Proveedor
-Pallet: Pallet
-Freight: Porte
-Package: Embalaje
-Half box: Media caja
-Go to the travel: Ir al envío
diff --git a/modules/travel/front/summary/style.scss b/modules/travel/front/summary/style.scss
deleted file mode 100644
index dd4cfa72d..000000000
--- a/modules/travel/front/summary/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-@import "variables";
-
-
-vn-travel-summary .summary {
- max-width: $width-lg;
-}
\ No newline at end of file
diff --git a/modules/travel/front/thermograph/create/index.html b/modules/travel/front/thermograph/create/index.html
deleted file mode 100644
index 41709e1fb..000000000
--- a/modules/travel/front/thermograph/create/index.html
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create
-
-
\ No newline at end of file
diff --git a/modules/travel/front/thermograph/create/index.js b/modules/travel/front/thermograph/create/index.js
deleted file mode 100644
index 9f0678807..000000000
--- a/modules/travel/front/thermograph/create/index.js
+++ /dev/null
@@ -1,122 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.dms = {files: [], state: 'Ok'};
- }
-
- get travel() {
- return this._travel;
- }
-
- set travel(value) {
- this._travel = value;
-
- if (value) {
- this.setDefaultParams();
- this.getAllowedContentTypes();
- }
- }
-
- getAllowedContentTypes() {
- this.$http.get('DmsContainers/allowedContentTypes').then(res => {
- const contentTypes = res.data.join(', ');
- this.allowedContentTypes = contentTypes;
- });
- }
-
- get contentTypesInfo() {
- return this.$t('ContentTypesInfo', {
- allowedContentTypes: this.allowedContentTypes
- });
- }
-
- setDefaultParams() {
- const params = {filter: {
- where: {code: 'miscellaneous'}
- }};
- this.$http.get('DmsTypes/findOne', {params}).then(res => {
- const dmsTypeId = res.data && res.data.id;
- const companyId = this.vnConfig.companyFk;
- const warehouseId = this.vnConfig.warehouseFk;
- const defaultParams = {
- reference: this.travel.id,
- warehouseId: warehouseId,
- companyId: companyId,
- dmsTypeId: dmsTypeId,
- description: this.$t('TravelFileDescription', {
- travelId: this.travel.id
- }).toUpperCase()
- };
-
- this.dms = Object.assign(this.dms, defaultParams);
- });
- }
-
- onAddThermographClick(event) {
- const defaultTemperature = 'cool';
- const defaultModel = 'DISPOSABLE';
-
- event.preventDefault();
- this.newThermograph = {
- thermographId: this.thermographId,
- warehouseId: this.warehouseId,
- temperatureFk: defaultTemperature,
- model: defaultModel
- };
-
- this.$.modelsModel.refresh();
- this.$.newThermographDialog.show();
- }
-
- onNewThermographAccept() {
- const hasMissingField =
- !this.newThermograph.thermographId ||
- !this.newThermograph.warehouseId ||
- !this.newThermograph.temperatureFk ||
- !this.newThermograph.model;
-
- if (hasMissingField)
- throw new UserError(`Some fields are invalid`);
-
- return this.$http.post(`Thermographs/createThermograph`, this.newThermograph)
- .then(res => this.dms.thermographId = res.data.id);
- }
-
- onSubmit() {
- const query = `Travels/${this.travel.id}/saveThermograph`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
-
- for (let i = 0; i < files.length; i++)
- formData.append(files[i].name, files[i]);
-
- return formData;
- },
- data: this.dms.files
- };
- this.$http(options).then(res => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.watcher.updateOriginalData();
- this.$state.go('travel.card.thermograph.index');
- });
- }
-}
-
-ngModule.vnComponent('vnTravelThermographCreate', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- travel: '<'
- }
-});
diff --git a/modules/travel/front/thermograph/create/index.spec.js b/modules/travel/front/thermograph/create/index.spec.js
deleted file mode 100644
index 1ad263d31..000000000
--- a/modules/travel/front/thermograph/create/index.spec.js
+++ /dev/null
@@ -1,108 +0,0 @@
-import './index';
-
-describe('Ticket', () => {
- describe('Component vnTravelThermographCreate', () => {
- let controller;
- let $httpBackend;
- let $httpParamSerializer;
- const travelId = 3;
- const dmsTypeId = 5;
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject(($componentController, _$httpBackend_, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- const $element = angular.element(' ');
- controller = $componentController('vnTravelThermographCreate', {$element});
- controller._travel = {
- id: travelId
- };
- }));
-
- describe('travel() setter', () => {
- it('should set the travel data and then call setDefaultParams() and getAllowedContentTypes()', () => {
- jest.spyOn(controller, 'setDefaultParams');
- jest.spyOn(controller, 'getAllowedContentTypes');
- controller.travel = {
- id: travelId
- };
-
- expect(controller.travel).toBeDefined();
- expect(controller.setDefaultParams).toHaveBeenCalledWith();
- expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
- });
- });
-
- describe('setDefaultParams()', () => {
- it('should perform a GET query and define the dms property on controller', () => {
- const params = {filter: {
- where: {code: 'miscellaneous'}
- }};
- let serializedParams = $httpParamSerializer(params);
- $httpBackend.expect('GET', `DmsTypes/findOne?${serializedParams}`).respond({id: dmsTypeId, code: 'miscellaneous'});
- controller.setDefaultParams();
- $httpBackend.flush();
-
- expect(controller.dms).toBeDefined();
- expect(controller.dms.reference).toEqual(travelId);
- expect(controller.dms.dmsTypeId).toEqual(dmsTypeId);
- });
- });
-
- describe('getAllowedContentTypes()', () => {
- it('should make an HTTP GET request to get the allowed content types', () => {
- const expectedResponse = ['application/pdf', 'image/png', 'image/jpg'];
- $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond(expectedResponse);
- controller.getAllowedContentTypes();
- $httpBackend.flush();
-
- expect(controller.allowedContentTypes).toBeDefined();
- expect(controller.allowedContentTypes).toEqual('application/pdf, image/png, image/jpg');
- });
- });
-
- describe('onAddThermographClick()', () => {
- it('should call the show() function of the create thermograph dialog', () => {
- controller.$.newThermographDialog = {show: jest.fn()};
- controller.$.modelsModel = {refresh: jest.fn()};
- controller.$.temperaturesModel = {refresh: jest.fn()};
-
- const event = new Event('click');
- jest.spyOn(event, 'preventDefault');
-
- controller.onAddThermographClick(event);
-
- expect(event.preventDefault).toHaveBeenCalledTimes(1);
- expect(controller.$.newThermographDialog.show).toHaveBeenCalledTimes(1);
- });
- });
-
- describe('onNewThermographAccept()', () => {
- it('should set the created thermograph data on to the controller for the autocomplete to use it', () => {
- const id = 'the created id';
- const warehouseId = 1;
- const temperatureId = 'cool';
- const model = 'my model';
-
- controller.newThermograph = {
- thermographId: id,
- warehouseId: warehouseId,
- temperatureFk: temperatureId,
- model: model
- };
- const response = {
- id: id,
- warehouseId: warehouseId,
- temperatureFk: temperatureId,
- model: model
- };
- $httpBackend.when('POST', `Thermographs/createThermograph`).respond(response);
- controller.onNewThermographAccept();
- $httpBackend.flush();
-
- expect(controller.dms.thermographId).toEqual(response.id);
- });
- });
- });
-});
diff --git a/modules/travel/front/thermograph/edit/index.html b/modules/travel/front/thermograph/edit/index.html
deleted file mode 100644
index 3fe448b56..000000000
--- a/modules/travel/front/thermograph/edit/index.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
diff --git a/modules/travel/front/thermograph/edit/index.js b/modules/travel/front/thermograph/edit/index.js
deleted file mode 100644
index 17caf9ef2..000000000
--- a/modules/travel/front/thermograph/edit/index.js
+++ /dev/null
@@ -1,98 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- get travel() {
- return this._travel;
- }
-
- set travel(value) {
- this._travel = value;
-
- if (value) {
- this.setDefaultParams();
- this.getAllowedContentTypes();
- }
- }
-
- getAllowedContentTypes() {
- this.$http.get('DmsContainers/allowedContentTypes').then(res => {
- const contentTypes = res.data.join(', ');
- this.allowedContentTypes = contentTypes;
- });
- }
-
- get contentTypesInfo() {
- return this.$t('ContentTypesInfo', {
- allowedContentTypes: this.allowedContentTypes
- });
- }
-
- setDefaultParams() {
- const filterObj = {include: {relation: 'dms'}};
- const filter = encodeURIComponent(JSON.stringify(filterObj));
- const path = `TravelThermographs/${this.$params.thermographId}?filter=${filter}`;
- this.$http.get(path).then(res => {
- const thermograph = res.data;
- this.thermograph = {
- thermographId: thermograph.thermographFk,
- state: thermograph.result,
- reference: thermograph.dms.reference,
- warehouseId: thermograph.dms.warehouseFk,
- companyId: thermograph.dms.companyFk,
- dmsTypeId: thermograph.dms.dmsTypeFk,
- description: thermograph.dms.description,
- hasFile: thermograph.dms.hasFile,
- hasFileAttached: false,
- files: []
- };
- });
- }
-
- onSubmit() {
- const query = `travels/${this.$params.id}/saveThermograph`;
- const options = {
- method: 'POST',
- url: query,
- params: this.thermograph,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
-
- for (const element of files)
- formData.append(element.name, element);
-
- return formData;
- },
- data: this.thermograph.files
- };
- this.$http(options).then(res => {
- if (res) {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.watcher.updateOriginalData();
- this.$state.go('travel.card.thermograph.index');
- }
- });
- }
-
- onFileChange(files) {
- let hasFileAttached = false;
- if (files.length > 0)
- hasFileAttached = true;
-
- this.$.$applyAsync(() => {
- this.thermograph.hasFileAttached = hasFileAttached;
- });
- }
-}
-
-ngModule.vnComponent('vnTravelThermographEdit', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- travel: '<'
- }
-});
diff --git a/modules/travel/front/thermograph/edit/index.spec.js b/modules/travel/front/thermograph/edit/index.spec.js
deleted file mode 100644
index 0b3ef4fbe..000000000
--- a/modules/travel/front/thermograph/edit/index.spec.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import './index';
-import watcher from 'core/mocks/watcher.js';
-
-describe('Worker', () => {
- describe('Component vnTravelThermographEdit', () => {
- let controller;
- let $scope;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('travel'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- const $element = angular.element(` {
- it('should set the travel data and then call setDefaultParams() and getAllowedContentTypes()', () => {
- jest.spyOn(controller, 'setDefaultParams');
- jest.spyOn(controller, 'getAllowedContentTypes');
- controller._travel = undefined;
- controller.travel = {
- id: 3
- };
-
- expect(controller.setDefaultParams).toHaveBeenCalledWith();
- expect(controller.travel).toBeDefined();
- expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
- });
- });
-
- describe('setDefaultParams()', () => {
- it('should perform a GET query and define the dms property on controller', () => {
- const thermographId = 6;
- const expectedResponse = {
- thermographFk: 6,
- result: 'Ok',
- dms: {
- reference: '123456-01',
- warehouseFk: 1,
- companyFk: 442,
- dmsTypeFk: 3,
- description: 'Test'
- }
- };
-
- const filterObj = {include: {relation: 'dms'}};
- const filter = encodeURIComponent(JSON.stringify(filterObj));
- const query = `TravelThermographs/${thermographId}?filter=${filter}`;
- $httpBackend.expect('GET', query).respond(expectedResponse);
- controller.setDefaultParams();
- $httpBackend.flush();
-
- expect(controller.thermograph).toBeDefined();
- expect(controller.thermograph.reference).toEqual('123456-01');
- expect(controller.thermograph.dmsTypeId).toEqual(3);
- expect(controller.thermograph.state).toEqual('Ok');
- });
- });
-
- describe('onFileChange()', () => {
- it('should set dms hasFileAttached property to true if has any files', () => {
- const files = [{id: 1, name: 'MyFile'}];
- controller.thermograph = {hasFileAttached: false};
- controller.onFileChange(files);
- $scope.$apply();
-
- expect(controller.thermograph.hasFileAttached).toBeTruthy();
- });
- });
-
- describe('getAllowedContentTypes()', () => {
- it('should make an HTTP GET request to get the allowed content types', () => {
- const expectedResponse = ['image/png', 'image/jpg'];
- $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond(expectedResponse);
- controller.getAllowedContentTypes();
- $httpBackend.flush();
-
- expect(controller.allowedContentTypes).toBeDefined();
- expect(controller.allowedContentTypes).toEqual('image/png, image/jpg');
- });
- });
-
- describe('contentTypesInfo()', () => {
- it('should return a description with a list of allowed content types', () => {
- controller.allowedContentTypes = ['image/png', 'image/jpg'];
- const expectedTypes = controller.allowedContentTypes.join(', ');
-
- const expectedResult = `Allowed content types: ${expectedTypes}`;
- jest.spyOn(controller.$translate, 'instant').mockReturnValue(expectedResult);
-
- const result = controller.contentTypesInfo;
-
- expect(result).toEqual(expectedResult);
- });
- });
-
- describe('onSubmit()', () => {
- it('should make an HTTP POST request to save the form data', () => {
- jest.spyOn(controller.$.watcher, 'updateOriginalData');
-
- const files = [{id: 1, name: 'MyFile'}];
- controller.thermograph = {files};
- const serializedParams = $httpParamSerializer(controller.thermograph);
- const query = `travels/${controller.$params.id}/saveThermograph?${serializedParams}`;
-
- $httpBackend.expect('POST', query).respond({});
- controller.onSubmit();
- $httpBackend.flush();
- });
- });
- });
-});
diff --git a/modules/travel/front/thermograph/edit/style.scss b/modules/travel/front/thermograph/edit/style.scss
deleted file mode 100644
index 73f136fc1..000000000
--- a/modules/travel/front/thermograph/edit/style.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
-
diff --git a/modules/travel/front/thermograph/index/index.html b/modules/travel/front/thermograph/index/index.html
deleted file mode 100644
index 4d711613d..000000000
--- a/modules/travel/front/thermograph/index/index.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/travel/front/thermograph/index/index.js b/modules/travel/front/thermograph/index/index.js
deleted file mode 100644
index f8b239cfe..000000000
--- a/modules/travel/front/thermograph/index/index.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $, vnFile) {
- super($element, $);
- this.vnFile = vnFile;
- this.filter = {
- include:
- {relation: 'warehouse',
- scope: {
- fields: ['id', 'name']
- }
- }
- };
- }
-
- showDeleteConfirm(index) {
- this.thermographIndex = index;
- this.$.confirm.show();
- }
-
- deleteThermograph() {
- const data = this.travelThermographs;
- const thermographId = data[this.thermographIndex].id;
- const query = `Travels/deleteThermograph?id=${thermographId}`;
- this.$http.delete(query).then(() => {
- this.vnApp.showSuccess(this.$t('Thermograph deleted'));
- this.$.model.remove(this.thermographIndex);
- this.thermographIndex = null;
- });
- }
-
- downloadFile(dmsId) {
- this.vnFile.download(`api/dms/${dmsId}/downloadFile`);
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnFile'];
-
-ngModule.vnComponent('vnTravelThermographIndex', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnTravelCard'
- },
- bindings: {
- travel: '<'
- }
-});
diff --git a/modules/travel/front/thermograph/index/style.scss b/modules/travel/front/thermograph/index/style.scss
deleted file mode 100644
index 2c287ed9d..000000000
--- a/modules/travel/front/thermograph/index/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-@import "variables";
-
-vn-route-tickets form{
- margin: 0 auto;
- max-width: $width-lg;
-}
\ No newline at end of file
diff --git a/modules/travel/front/thermograph/locale/es.yml b/modules/travel/front/thermograph/locale/es.yml
deleted file mode 100644
index 1fdb98c8e..000000000
--- a/modules/travel/front/thermograph/locale/es.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-Code: Código
-Temperature: Temperatura
-State: Estado
-Destination: Destino
-Created: Creado
-Remove thermograph: Eliminar termógrafo
-Upload file: Subir fichero
-Edit file: Editar fichero
-Upload: Subir
-File: Fichero
-TravelFileDescription: Travel id {{travelId}}
-ContentTypesInfo: 'Tipos de archivo permitidos: {{allowedContentTypes}}'
-Are you sure you want to continue?: ¿Seguro que quieres continuar?
-Add thermograph: Añadir termógrafo
-Edit thermograph: Editar termógrafo
-Thermograph deleted: Termógrafo eliminado
-Thermograph: Termógrafo
-New thermograph: Nuevo termógrafo
-Are you sure you want to remove the thermograph?: ¿Seguro que quieres quitar el termógrafo?
-Identifier: Identificador
\ No newline at end of file
diff --git a/modules/worker/back/methods/device/handle-user.js b/modules/worker/back/methods/device/handle-user.js
index ac4ff2704..55302c1cb 100644
--- a/modules/worker/back/methods/device/handle-user.js
+++ b/modules/worker/back/methods/device/handle-user.js
@@ -82,7 +82,7 @@ module.exports = Self => {
const getDataOperator = await models.Operator.findOne({
where: {workerFk: user.id},
fields: ['numberOfWagons', 'warehouseFk', 'itemPackingTypeFk', 'sectorFk', 'sector',
- 'trainFk', 'train', 'labelerFk', 'printer'],
+ 'trainFk', 'train', 'labelerFk', 'printer', 'isOnReservationMode'],
include: [
{
relation: 'sector',
diff --git a/modules/worker/back/methods/worker/filter.js b/modules/worker/back/methods/worker/filter.js
index 2f328d28f..52c60572a 100644
--- a/modules/worker/back/methods/worker/filter.js
+++ b/modules/worker/back/methods/worker/filter.js
@@ -67,6 +67,12 @@ module.exports = Self => {
type: 'String',
description: 'The worker user name',
http: {source: 'query'}
+ },
+ {
+ arg: 'email',
+ type: 'String',
+ description: 'The user email',
+ http: {source: 'query'}
}
],
returns: {
@@ -99,6 +105,8 @@ module.exports = Self => {
return {'w.firstName': {like: `%${value}%`}};
case 'lastName':
return {'w.lastName': {like: `%${value}%`}};
+ case 'nickname':
+ return {'u.nickname': {like: `%${value}%`}};
case 'extension':
return {'p.extension': value};
case 'fi':
@@ -107,6 +115,8 @@ module.exports = Self => {
return {'d.id': value};
case 'userName':
return {'u.name': {like: `%${value}%`}};
+ case 'email':
+ return {'eu.email': {like: `%${value}%`}};
}
});
@@ -116,15 +126,23 @@ module.exports = Self => {
let stmt;
stmt = new ParameterizedSQL(
- `SELECT w.id, u.email, p.extension, u.name as userName,
- d.name AS department, w.lastName, u.nickname, mu.email
+ `SELECT w.id,
+ w.lastName,
+ w.firstName,
+ u.email,
+ u.nickname,
+ p.extension,
+ u.name as userName,
+ d.name AS department,
+ eu.email,
+ c.fi
FROM worker w
LEFT JOIN workerDepartment wd ON wd.workerFk = w.id
LEFT JOIN department d ON d.id = wd.departmentFk
LEFT JOIN client c ON c.id = w.id
LEFT JOIN account.user u ON u.id = w.id
LEFT JOIN pbx.sip p ON p.user_id = u.id
- LEFT JOIN account.emailUser mu ON mu.userFk = u.id`
+ LEFT JOIN account.emailUser eu ON eu.userFk = u.id`
);
stmt.merge(conn.makeSuffix(filter));
diff --git a/modules/worker/back/models/worker.json b/modules/worker/back/models/worker.json
index b896e775b..c334c0d05 100644
--- a/modules/worker/back/models/worker.json
+++ b/modules/worker/back/models/worker.json
@@ -253,7 +253,18 @@
"relation": "client"
},
{
- "relation": "sip"
+ "relation": "sip",
+ "scope": {
+ "include": {
+ "relation": "queueMember",
+ "scope": {
+ "fields": [
+ "queue",
+ "extension"
+ ]
+ }
+ }
+ }
}
]
},
diff --git a/modules/zone/front/basic-data/index.html b/modules/zone/front/basic-data/index.html
deleted file mode 100644
index 5070a3aea..000000000
--- a/modules/zone/front/basic-data/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
diff --git a/modules/zone/front/basic-data/index.js b/modules/zone/front/basic-data/index.js
deleted file mode 100644
index 402b471fc..000000000
--- a/modules/zone/front/basic-data/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- onSubmit() {
- this.$.watcher.submit().then(() =>
- this.card.reload()
- );
- }
-}
-
-ngModule.vnComponent('vnZoneBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- zone: '<'
- },
- require: {
- card: '^vnZoneCard'
- }
-});
diff --git a/modules/zone/front/calendar/index.html b/modules/zone/front/calendar/index.html
deleted file mode 100644
index cfcebf359..000000000
--- a/modules/zone/front/calendar/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/calendar/index.js b/modules/zone/front/calendar/index.js
deleted file mode 100644
index 288a8f328..000000000
--- a/modules/zone/front/calendar/index.js
+++ /dev/null
@@ -1,191 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-class Controller extends Component {
- constructor($element, $, vnWeekDays) {
- super($element, $);
- this.vnWeekDays = vnWeekDays;
- this.nMonths = 4;
-
- let date = Date.vnNew();
- date.setDate(1);
- date.setHours(0, 0, 0, 0);
- this.date = date;
- }
-
- get date() {
- return this._date;
- }
-
- set date(value) {
- this._date = value;
- let stamp = value.getTime();
-
- let firstDay = new Date(stamp);
- firstDay.setDate(1);
- this.firstDay = firstDay;
-
- let lastDay = new Date(stamp);
- lastDay.setMonth(lastDay.getMonth() + this.nMonths);
- lastDay.setDate(0);
- this.lastDay = lastDay;
-
- this.months = [];
- for (let i = 0; i < this.nMonths; i++) {
- let monthDate = new Date(stamp);
- monthDate.setMonth(value.getMonth() + i);
- this.months.push(monthDate);
- }
-
- this.refreshEvents();
- }
-
- step(direction) {
- let date = new Date(this.date.getTime());
- date.setMonth(date.getMonth() + (this.nMonths * direction));
- this.date = date;
-
- this.emit('step');
- }
-
- get data() {
- return this._data;
- }
-
- set data(value) {
- this._data = value;
-
- value = value || {};
-
- this.events = value.events;
-
- function toStamp(date) {
- return date && new Date(date).setHours(0, 0, 0, 0);
- }
-
- this.exclusions = {};
- let exclusions = value.exclusions;
-
- if (exclusions) {
- for (let exclusion of exclusions) {
- let stamp = toStamp(exclusion.dated);
- if (!this.exclusions[stamp]) this.exclusions[stamp] = [];
- this.exclusions[stamp].push(exclusion);
- }
- }
-
- this.geoExclusions = {};
- let geoExclusions = value.geoExclusions;
-
- if (geoExclusions) {
- for (let geoExclusion of geoExclusions) {
- let stamp = toStamp(geoExclusion.dated);
- if (!this.geoExclusions[stamp]) this.geoExclusions[stamp] = [];
- this.geoExclusions[stamp].push(geoExclusion);
- }
- }
-
- let events = value.events;
-
- if (events) {
- for (let event of events) {
- event.dated = toStamp(event.dated);
- event.ended = toStamp(event.ended);
- event.started = toStamp(event.started);
- event.wdays = this.vnWeekDays.fromSet(event.weekDays);
- }
- }
-
- this.refreshEvents();
-
- let calendars = this.element.querySelectorAll('vn-calendar');
- for (let calendar of calendars)
- calendar.$ctrl.repaint();
- }
-
- refreshEvents() {
- this.days = {};
- if (!this.data) return;
-
- let day = new Date(this.firstDay.getTime());
-
- while (day <= this.lastDay) {
- let stamp = day.getTime();
- let wday = day.getDay();
- let dayEvents = [];
- let exclusions = this.exclusions[stamp] || [];
-
- if (this.events) {
- for (let event of this.events) {
- let match;
-
- switch (event.type) {
- case 'day':
- match = event.dated == stamp;
- break;
- default:
- match = event.wdays[wday]
- && (!event.started || stamp >= event.started)
- && (!event.ended || stamp <= event.ended);
- break;
- }
-
- if (match && !exclusions.find(e => e.zoneFk == event.zoneFk))
- dayEvents.push(event);
- }
- }
-
- if (dayEvents.length)
- this.days[stamp] = dayEvents;
-
- day.setDate(day.getDate() + 1);
- }
- }
-
- onSelection($event, $days, $type, $weekday) {
- let $events = [];
- let $exclusions = [];
- let $geoExclusions = [];
-
- for (let day of $days) {
- let stamp = day.getTime();
- $events = $events.concat(this.days[stamp] || []);
- $exclusions = $exclusions.concat(this.exclusions[stamp] || []);
- $geoExclusions = $geoExclusions.concat(this.geoExclusions[stamp] || []);
- }
-
- this.emit('selection', {
- $event,
- $days,
- $type,
- $weekday,
- $events,
- $exclusions,
- $geoExclusions
- });
- }
-
- hasEvents(day) {
- let stamp = day.getTime();
- return this.days[stamp] || this.exclusions[stamp] || this.geoExclusions[stamp];
- }
-
- getClass(day) {
- let stamp = day.getTime();
- if (this.geoExclusions[stamp])
- return 'geoExcluded';
- else if (this.exclusions[stamp])
- return 'excluded';
- else return '';
- }
-}
-Controller.$inject = ['$element', '$scope', 'vnWeekDays'];
-
-ngModule.vnComponent('vnZoneCalendar', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- data: ''
- }
-});
diff --git a/modules/zone/front/calendar/index.spec.js b/modules/zone/front/calendar/index.spec.js
deleted file mode 100644
index 43280a9e8..000000000
--- a/modules/zone/front/calendar/index.spec.js
+++ /dev/null
@@ -1,172 +0,0 @@
-import './index';
-import crudModel from 'core/mocks/crud-model';
-
-describe('component vnZoneCalendar', () => {
- let $scope;
- let controller;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- const $element = angular.element(` `);
- controller = $componentController('vnZoneCalendar', {$element, $scope});
- controller.$.model = crudModel;
- controller.zone = {id: 1};
- controller.days = [];
- controller.exclusions = [];
- controller.geoExclusions = [];
- }));
-
- describe('date() setter', () => {
- it('should set the month property and then call the refreshEvents() method', () => {
- jest.spyOn(controller, 'refreshEvents').mockReturnThis();
-
- controller.date = Date.vnNew();
-
- expect(controller.refreshEvents).toHaveBeenCalledWith();
- expect(controller.months.length).toEqual(4);
- });
- });
-
- describe('step()', () => {
- it('should set the date month to 4 months backwards', () => {
- const now = Date.vnNew();
- now.setDate(15);
- now.setMonth(now.getMonth() - 4);
-
- controller.step(-1);
-
- const expectedMonth = now.getMonth();
- const currentMonth = controller.date.getMonth();
-
- expect(currentMonth).toEqual(expectedMonth);
- });
-
- it('should set the date month to 4 months forwards', () => {
- const now = Date.vnNew();
- now.setDate(15);
- now.setMonth(now.getMonth() + 4);
-
- controller.step(1);
-
- const expectedMonth = now.getMonth();
- const currentMonth = controller.date.getMonth();
-
- expect(currentMonth).toEqual(expectedMonth);
- });
- });
-
- describe('data() setter', () => {
- it('should set the events, exclusions and geoExclusions and then call the refreshEvents() method', () => {
- jest.spyOn(controller, 'refreshEvents').mockReturnThis();
-
- controller.data = {
- exclusions: [{
- dated: Date.vnNew()
- }],
- events: [{
- dated: Date.vnNew()
- }],
- geoExclusions: [{
- dated: Date.vnNew()
- }],
- };
-
- expect(controller.refreshEvents).toHaveBeenCalledWith();
- expect(controller.events).toBeDefined();
- expect(controller.events.length).toEqual(1);
- expect(controller.exclusions).toBeDefined();
- expect(controller.geoExclusions).toBeDefined();
- expect(Object.keys(controller.exclusions).length).toEqual(1);
- });
- });
-
- describe('refreshEvents()', () => {
- it('should fill the days property with the events.', () => {
- controller.data = [];
- controller.firstDay = Date.vnNew();
-
- const lastDay = Date.vnNew();
- lastDay.setDate(lastDay.getDate() + 10);
- controller.lastDay = lastDay;
-
- const firstEventStamp = controller.firstDay.getTime();
- const lastEventStamp = controller.lastDay.getTime();
- controller.events = [{
- type: 'day',
- dated: firstEventStamp
- },
- {
- type: 'day',
- dated: lastEventStamp
- }];
-
- controller.refreshEvents();
- const expectedDays = Object.keys(controller.days);
-
- expect(expectedDays.length).toEqual(2);
- });
- });
-
- describe('onSelection()', () => {
- it('should call the emit() method', () => {
- jest.spyOn(controller, 'emit');
-
- const $event = {};
- const $days = [Date.vnNew()];
- const $type = 'day';
- const $weekday = 1;
-
- controller.onSelection($event, $days, $type, $weekday);
-
- expect(controller.emit).toHaveBeenCalledWith('selection',
- {
- $days: $days,
- $event: {},
- $events: [],
- $exclusions: [],
- $type: 'day',
- $weekday: 1,
- $geoExclusions: [],
- }
- );
- });
- });
-
- describe('hasEvents()', () => {
- it('should return true for an existing event on a date', () => {
- const dated = Date.vnNew();
-
- controller.days[dated.getTime()] = true;
-
- const result = controller.hasEvents(dated);
-
- expect(result).toBeTruthy();
- });
- });
-
- describe('getClass()', () => {
- it('should return the className "excluded" for an excluded date', () => {
- const dated = Date.vnNew();
-
- controller.exclusions = [];
- controller.exclusions[dated.getTime()] = true;
-
- const result = controller.getClass(dated);
-
- expect(result).toEqual('excluded');
- });
-
- it('should return the className "geoExcluded" for a date with geo excluded', () => {
- const dated = Date.vnNew();
-
- controller.geoExclusions = [];
- controller.geoExclusions[dated.getTime()] = true;
-
- const result = controller.getClass(dated);
-
- expect(result).toEqual('geoExcluded');
- });
- });
-});
diff --git a/modules/zone/front/calendar/style.scss b/modules/zone/front/calendar/style.scss
deleted file mode 100644
index 38491af58..000000000
--- a/modules/zone/front/calendar/style.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-@import "variables";
-
-vn-zone-calendar {
- display: block;
-
- & > vn-card {
- & > .header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- background-color: $color-main;
- color: white;
- font-weight: bold;
- height: 45px;
-
- & > .vn-button {
- color: inherit;
- height: 100%;
- }
- }
- & > .calendars {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-evenly;
-
- & > .vn-calendar {
- max-width: 288px;
-
- #days-container .day {
- &.event .day-number {
- background-color: $color-success;
- }
- &.excluded .day-number {
- background-color: $color-alert;
- }
- &.geoExcluded .day-number {
- background-color: $color-main;
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/modules/zone/front/card/index.html b/modules/zone/front/card/index.html
deleted file mode 100644
index ae6a7f10a..000000000
--- a/modules/zone/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/zone/front/card/index.js b/modules/zone/front/card/index.js
deleted file mode 100644
index 4e8ac7e8c..000000000
--- a/modules/zone/front/card/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- include: {
- relation: 'agencyMode',
- scope: {fields: ['name']}
- }
- };
-
- this.$http.get(`Zones/${this.$params.id}`, {filter})
- .then(res => this.zone = res.data);
- }
-}
-
-ngModule.vnComponent('vnZoneCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/zone/front/card/index.spec.js b/modules/zone/front/card/index.spec.js
deleted file mode 100644
index 64127990f..000000000
--- a/modules/zone/front/card/index.spec.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import './index.js';
-
-describe('Zone Component vnZoneCard', () => {
- let controller;
- let $httpBackend;
- let data = {id: 1, name: 'fooName'};
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, _$httpBackend_, $stateParams) => {
- $httpBackend = _$httpBackend_;
-
- let $element = angular.element('
');
- controller = $componentController('vnZoneCard', {$element});
-
- $stateParams.id = data.id;
- $httpBackend.whenRoute('GET', 'Zones/:id').respond(data);
- }));
-
- it('should request data and set it on the controller', () => {
- controller.reload();
- $httpBackend.flush();
-
- expect(controller.zone).toEqual(data);
- });
-});
diff --git a/modules/zone/front/create/index.html b/modules/zone/front/create/index.html
deleted file mode 100644
index f8c7df391..000000000
--- a/modules/zone/front/create/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
-
-
diff --git a/modules/zone/front/create/index.js b/modules/zone/front/create/index.js
deleted file mode 100644
index db337a9a3..000000000
--- a/modules/zone/front/create/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- this.zone = {
- travelingDays: 0,
- price: 0.20,
- bonus: 0.20,
- hour: Date.vnNew()
- };
- }
-
- onSubmit() {
- return this.$.watcher.submit().then(res =>
- this.$state.go('zone.card.location', {id: res.data.id})
- );
- }
-}
-
-ngModule.vnComponent('vnZoneCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/zone/front/create/index.spec.js b/modules/zone/front/create/index.spec.js
deleted file mode 100644
index fe0088225..000000000
--- a/modules/zone/front/create/index.spec.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import './index';
-import watcher from 'core/mocks/watcher';
-
-describe('Zone Component vnZoneCreate', () => {
- let $scope;
- let $state;
- let controller;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, $rootScope, _$state_) => {
- $scope = $rootScope.$new();
- $state = _$state_;
- $scope.watcher = watcher;
- $scope.watcher.submit = () => {
- return {
- then: callback => {
- callback({data: {id: 1234}});
- }
- };
- };
- const $element = angular.element(' ');
- controller = $componentController('vnZoneCreate', {$element, $scope});
- }));
-
- describe('onSubmit()', () => {
- it(`should call submit() on the watcher then expect a callback`, () => {
- jest.spyOn($state, 'go');
-
- controller.zone = {
- name: 'Zone One'
- };
-
- controller.onSubmit();
-
- expect(controller.$state.go).toHaveBeenCalledWith('zone.card.location', Object({id: 1234}));
- });
- });
-});
-
diff --git a/modules/zone/front/create/locale/es.yml b/modules/zone/front/create/locale/es.yml
deleted file mode 100644
index 4827ced37..000000000
--- a/modules/zone/front/create/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Traveling days: Días de viaje
-Closing hour: Hora de cierre
-Bonus: Bonificación
\ No newline at end of file
diff --git a/modules/zone/front/delivery-days/index.html b/modules/zone/front/delivery-days/index.html
deleted file mode 100644
index c47d89982..000000000
--- a/modules/zone/front/delivery-days/index.html
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id
- Name
- Agency
- Closing
- Price
-
-
-
-
-
- {{::zone.id}}
- {{::zone.name}}
- {{::zone.agencyModeName}}
- {{::zone.hour | date: 'HH:mm'}}
- {{::zone.price | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/delivery-days/index.js b/modules/zone/front/delivery-days/index.js
deleted file mode 100644
index 71e8c8ab7..000000000
--- a/modules/zone/front/delivery-days/index.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- $onInit() {
- this.setParams();
- }
-
- $postLink() {
- this.deliveryMethodFk = 'delivery';
- }
-
- setParams() {
- const hasParams = this.$params.deliveryMethodFk || this.$params.geoFk || this.$params.agencyModeFk;
- if (hasParams) {
- if (this.$params.deliveryMethodFk)
- this.deliveryMethodFk = this.$params.deliveryMethodFk;
-
- if (this.$params.geoFk)
- this.geoFk = this.$params.geoFk;
-
- if (this.$params.agencyModeFk)
- this.agencyModeFk = this.$params.agencyModeFk;
-
- this.fetchData();
- }
- }
-
- fetchData() {
- const params = {
- deliveryMethodFk: this.deliveryMethodFk,
- geoFk: this.geoFk,
- agencyModeFk: this.agencyModeFk
- };
- this.$.data = null;
- this.$http.get(`Zones/getEvents`, {params})
- .then(res => {
- let data = res.data;
- this.$.data = data;
- if (!data.events.length)
- this.vnApp.showMessage(this.$t('No service for the specified zone'));
-
- this.$state.go(this.$state.current.name, params);
- });
- }
-
- get deliveryMethodFk() {
- return this._deliveryMethodFk;
- }
-
- set deliveryMethodFk(value) {
- this._deliveryMethodFk = value;
-
- let filter;
-
- if (value === 'pickUp')
- filter = {where: {code: 'PICKUP'}};
- else
- filter = {where: {code: {inq: ['DELIVERY', 'AGENCY']}}};
-
- this.$http.get(`DeliveryMethods`, {filter}).then(res => {
- const deliveryMethods = res.data.map(deliveryMethod => deliveryMethod.id);
- this.agencyFilter = {deliveryMethodFk: {inq: deliveryMethods}};
- });
- }
-
- onSelection($event, $events, $days) {
- if (!$events.length) return;
-
- const day = $days[0];
- const zoneIds = [];
- for (let event of $events)
- zoneIds.push(event.zoneFk);
-
- const params = {
- zoneIds: zoneIds,
- date: day
- };
-
- this.$http.post(`Zones/getZoneClosing`, params)
- .then(res => this.zoneClosing = res.data)
- .then(() => this.$.zoneEvents.show($event.target));
- }
-
- preview(zone) {
- this.selectedZone = zone;
- this.$.summary.show();
- }
-}
-
-ngModule.vnComponent('vnZoneDeliveryDays', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/zone/front/delivery-days/index.spec.js b/modules/zone/front/delivery-days/index.spec.js
deleted file mode 100644
index 28705880c..000000000
--- a/modules/zone/front/delivery-days/index.spec.js
+++ /dev/null
@@ -1,126 +0,0 @@
-import './index.js';
-import popover from 'core/mocks/popover';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Zone Component vnZoneDeliveryDays', () => {
- let $httpBackend;
- let controller;
- let $element;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $element = angular.element(' {
- it('should set the deliveryMethodFk property as pickup and then perform a query that sets the filter', () => {
- $httpBackend.expect('GET', 'DeliveryMethods').respond([{id: 999}]);
- controller.deliveryMethodFk = 'pickUp';
- $httpBackend.flush();
-
- expect(controller.agencyFilter).toEqual({deliveryMethodFk: {inq: [999]}});
- });
- });
-
- describe('setParams()', () => {
- it('should do nothing when no params are received', () => {
- controller.setParams();
-
- expect(controller.deliveryMethodFk).toBeUndefined();
- expect(controller.geoFk).toBeUndefined();
- expect(controller.agencyModeFk).toBeUndefined();
- });
-
- it('should set the controller properties when the params are provided', () => {
- controller.$params = {
- deliveryMethodFk: 3,
- geoFk: 2,
- agencyModeFk: 1
- };
- controller.setParams();
-
- expect(controller.deliveryMethodFk).toEqual(controller.$params.deliveryMethodFk);
- expect(controller.geoFk).toEqual(controller.$params.geoFk);
- expect(controller.agencyModeFk).toEqual(controller.$params.agencyModeFk);
- });
- });
-
- describe('fetchData()', () => {
- it('should make an HTTP GET query and then call the showMessage() method', () => {
- jest.spyOn(controller.vnApp, 'showMessage');
- jest.spyOn(controller.$state, 'go');
-
- controller.agencyModeFk = 1;
- controller.deliveryMethodFk = 2;
- controller.geoFk = 3;
- controller.$state.current.name = 'myState';
-
- const expectedData = {events: []};
-
- const url = 'Zones/getEvents?agencyModeFk=1&deliveryMethodFk=2&geoFk=3';
-
- $httpBackend.when('GET', 'DeliveryMethods').respond([]);
- $httpBackend.expect('GET', url).respond({events: []});
- controller.fetchData();
- $httpBackend.flush();
-
- expect(controller.$.data).toEqual(expectedData);
- expect(controller.vnApp.showMessage).toHaveBeenCalledWith('No service for the specified zone');
- expect(controller.$state.go).toHaveBeenCalledWith(
- controller.$state.current.name,
- {
- agencyModeFk: 1,
- deliveryMethodFk: 2,
- geoFk: 3
- }
- );
- });
- });
-
- describe('onSelection()', () => {
- it('should not call the show popover method if events array is empty', () => {
- jest.spyOn(controller.$.zoneEvents, 'show');
-
- const event = new Event('click');
- const target = document.createElement('div');
- target.dispatchEvent(event);
- const events = [];
- controller.onSelection(event, events);
-
- expect(controller.$.zoneEvents.show).not.toHaveBeenCalled();
- });
-
- it('should call the show() method and call getZoneClosing() with the expected ids', () => {
- jest.spyOn(controller.$.zoneEvents, 'show');
-
- const event = new Event('click');
- const target = document.createElement('div');
- target.dispatchEvent(event);
-
- const day = Date.vnNew();
- const events = [
- {zoneFk: 1},
- {zoneFk: 2},
- {zoneFk: 8}
- ];
- const params = {
- zoneIds: [1, 2, 8],
- date: [day][0]
- };
- const response = [{id: 1, hour: ''}];
-
- $httpBackend.when('POST', 'Zones/getZoneClosing', params).respond({response});
- controller.onSelection(event, events, [day]);
- $httpBackend.flush();
-
- expect(controller.$.zoneEvents.show).toHaveBeenCalledWith(target);
- expect(controller.zoneClosing.id).toEqual(response.id);
- });
- });
-});
diff --git a/modules/zone/front/delivery-days/style.scss b/modules/zone/front/delivery-days/style.scss
deleted file mode 100644
index 3dd4abb7c..000000000
--- a/modules/zone/front/delivery-days/style.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-@import "variables";
-
-vn-zone-delivery-days {
- vn-zone-calendar {
- display: flex;
- justify-content: center;
- flex-wrap: wrap;
-
- & > vn-calendar {
- min-width: 264px;
- }
- }
- form {
- display: flex;
- flex-direction: column;
- }
-}
-
-.zoneEvents {
- width: 700px;
- max-height: 450px;
-
- vn-data-viewer {
- margin-bottom: 0;
- vn-pagination {
- padding: 0
- }
- }
-
- & > .header {
- background-color: $color-main;
- color: white;
- font-weight: bold;
- text-align: center
- }
-}
\ No newline at end of file
diff --git a/modules/zone/front/descriptor-popover/index.html b/modules/zone/front/descriptor-popover/index.html
deleted file mode 100644
index 7e4e8f5d8..000000000
--- a/modules/zone/front/descriptor-popover/index.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/descriptor/index.html b/modules/zone/front/descriptor/index.html
deleted file mode 100644
index a3432a99d..000000000
--- a/modules/zone/front/descriptor/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
- Delete
-
-
- Clone
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/descriptor/index.js b/modules/zone/front/descriptor/index.js
deleted file mode 100644
index 3f4863a60..000000000
--- a/modules/zone/front/descriptor/index.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import ngModule from '../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get zone() {
- return this.entity;
- }
-
- set zone(value) {
- this.entity = value;
- }
-
- loadData() {
- const filter = {
- include: [
- {
- relation: 'agencyMode',
- scope: {
- fields: ['name'],
- }
- }
- ]
- };
-
- return this.getData(`Zones/${this.id}`, {filter})
- .then(res => this.entity = res.data);
- }
-
- onDelete() {
- const $t = this.$translate.instant;
- const today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
- const filter = {where: {zoneFk: this.id, shipped: {gte: today}}};
- this.$http.get(`Tickets`, {filter}).then(res => {
- const ticketsAmount = res.data.length;
- if (ticketsAmount) {
- const params = {ticketsAmount};
- const question = $t('This zone contains tickets', params, null, null, 'sanitizeParameters');
- this.$.deleteZone.question = question;
- this.$.deleteZone.show();
- } else
- this.deleteZone();
- });
- }
-
- deleteZone() {
- return this.$http.post(`Zones/${this.id}/deleteZone`).then(() => {
- this.$state.go('zone.index');
- this.vnApp.showSuccess(this.$t('Zone deleted'));
- });
- }
-
- onCloneAccept() {
- return this.$http.post(`Zones/${this.id}/clone`).
- then(res => this.$state.go('zone.card.basicData', {id: res.data.id}));
- }
-}
-
-ngModule.vnComponent('vnZoneDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- zone: '<'
- }
-});
diff --git a/modules/zone/front/descriptor/index.spec.js b/modules/zone/front/descriptor/index.spec.js
deleted file mode 100644
index 435a1d00f..000000000
--- a/modules/zone/front/descriptor/index.spec.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import './index.js';
-
-describe('Zone descriptor', () => {
- let $httpBackend;
- let controller;
- let $element;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $element = angular.element(' {},
- show: () => {}
- };
- }));
-
- describe('onDelete()', () => {
- it('should make an HTTP POST query and then call the deleteZone show() method', () => {
- jest.spyOn(controller.$.deleteZone, 'show');
-
- const expectedData = [{id: 16}];
- $httpBackend.when('GET', 'Tickets').respond(expectedData);
- controller.onDelete();
- $httpBackend.flush();
-
- expect(controller.$.deleteZone.show).toHaveBeenCalledWith();
- });
-
- it('should make an HTTP POST query and then call the deleteZone() method', () => {
- jest.spyOn(controller, 'deleteZone').mockReturnThis();
-
- const expectedData = [];
- $httpBackend.when('GET', 'Tickets').respond(expectedData);
- controller.onDelete();
- $httpBackend.flush();
-
- expect(controller.deleteZone).toHaveBeenCalledWith();
- });
- });
-
- describe('deleteZone()', () => {
- it('should make an HTTP POST query and then call the showMessage() method', () => {
- jest.spyOn(controller.$state, 'go').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const stateName = 'zone.index';
- $httpBackend.when('POST', 'Zones/1/deleteZone').respond(200);
- controller.deleteZone();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith(stateName);
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Zone deleted');
- });
- });
-
- describe('onCloneAccept()', () => {
- it('should make an HTTP POST query and then call the state go() method', () => {
- jest.spyOn(controller.$state, 'go').mockReturnThis();
-
- const stateName = 'zone.card.basicData';
- const expectedData = {id: 1};
- $httpBackend.when('POST', 'Zones/1/clone').respond(expectedData);
- controller.onCloneAccept();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith(stateName, expectedData);
- });
- });
-});
diff --git a/modules/zone/front/descriptor/locale/es.yml b/modules/zone/front/descriptor/locale/es.yml
deleted file mode 100644
index 0581ee93a..000000000
--- a/modules/zone/front/descriptor/locale/es.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-This zone contains tickets: Esta zona contiene {{ticketsAmount}} tickets por servir. ¿Seguro que quieres eliminar esta zona?
-Do you want to clone this zone?: ¿Quieres clonar esta zona?
-All it's properties will be copied: Todas sus propiedades serán copiadas
-Zone deleted: Zona eliminada
\ No newline at end of file
diff --git a/modules/zone/front/events/index.html b/modules/zone/front/events/index.html
deleted file mode 100644
index 157b2a669..000000000
--- a/modules/zone/front/events/index.html
+++ /dev/null
@@ -1,277 +0,0 @@
-
-
-
-
-
- Edit mode
-
-
-
-
-
-
-
-
-
- Events
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Add
- Save
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Add
- Save
-
-
-
diff --git a/modules/zone/front/events/index.js b/modules/zone/front/events/index.js
deleted file mode 100644
index b86330126..000000000
--- a/modules/zone/front/events/index.js
+++ /dev/null
@@ -1,316 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $, vnWeekDays) {
- super($element, $);
- this.vnWeekDays = vnWeekDays;
- this.editMode = 'include';
- }
-
- $onInit() {
- this.refresh();
- }
-
- get path() {
- return `Zones/${this.$params.id}/events`;
- }
-
- get exclusionsPath() {
- return `Zones/${this.$params.id}/exclusions`;
- }
-
- get checked() {
- const geos = this.$.model.data || [];
- const checkedLines = [];
- for (let geo of geos) {
- if (geo.checked)
- checkedLines.push(geo);
- }
- return checkedLines;
- }
-
- refresh() {
- this.$.data = null;
- this.$.$applyAsync(() => {
- const params = {
- zoneFk: this.$params.id,
- started: this.$.calendar.firstDay,
- ended: this.$.calendar.lastDay
- };
-
- this.$http.get(`Zones/getEventsFiltered`, {params}).then(res => {
- const data = res.data;
- this.$.data = data;
- });
- });
- }
-
- formatWdays(weekDays) {
- if (!weekDays) return;
-
- let abrWdays = weekDays
- .split(',')
- .map(wday => this.vnWeekDays.map[wday].localeAbr);
-
- return abrWdays.length < 7
- ? abrWdays.join(', ')
- : this.$t('Everyday');
- }
-
- onSelection(days, type, weekday, events, exclusions, exclusionGeos) {
- if (this.editMode == 'include') {
- if (events.length)
- return this.editInclusion(events[0]);
- return this.createInclusion(type, days, weekday);
- } else if (this.editMode == 'exclude') {
- if (exclusions.length || exclusionGeos.length)
- return this.editExclusion(exclusions[0] || {}, exclusionGeos);
- return this.createExclusion(days);
- }
- }
-
- editExclusion(exclusion, exclusionGeos) {
- this.isNew = false;
- this.excludeSelected = angular.copy(exclusion);
- this.excludeSelected.type = exclusionGeos.length ?
- 'specificLocations' : 'all';
-
- this.exclusionGeos = new Set();
- if (exclusionGeos.length) {
- this.excludeSelected.id = exclusionGeos[0].zoneExclusionFk;
- exclusionGeos.forEach(x => this.exclusionGeos.add(x.geoFk));
- }
-
- this.$.excludeDialog.show();
- }
-
- createExclusion(days) {
- this.isNew = true;
- this.excludeSelected = {
- type: 'all',
- dated: days[0]
- };
- this.exclusionGeos = new Set();
- this.$.excludeDialog.show();
- }
-
- onEditClick(row, event) {
- if (event.defaultPrevented) return;
- this.editInclusion(row);
- }
-
- editInclusion(row) {
- this.isNew = false;
- this.selected = angular.copy(row);
- this.selected.wdays = this.vnWeekDays.fromSet(row.weekDays);
- this.$.includeDialog.show();
- }
-
- createInclusion(type, days, weekday) {
- this.isNew = true;
-
- if (type == 'weekday') {
- let wdays = [];
- if (weekday) wdays[weekday] = true;
-
- this.selected = {
- type: 'indefinitely',
- wdays
- };
- } else {
- this.selected = {
- type: 'day',
- dated: days[0]
- };
- }
-
- this.$.includeDialog.show();
- }
-
- onIncludeResponse(response) {
- switch (response) {
- case 'accept': {
- let selected = this.selected;
- let type = selected.type;
-
- selected.weekDays = this.vnWeekDays.toSet(selected.wdays);
-
- if (type == 'day')
- selected.weekDays = '';
- else
- selected.dated = null;
-
- if (type != 'range') {
- selected.started = null;
- selected.ended = null;
- }
-
- let req;
-
- if (this.isNew)
- req = this.$http.post(this.path, selected);
- else
- req = this.$http.put(`${this.path}/${selected.id}`, selected);
-
- return req.then(() => {
- this.selected = null;
- this.isNew = null;
- this.refresh();
- });
- }
- case 'delete':
- return this.onDelete(this.selected.id)
- .then(response => response == 'accept');
- }
- }
-
- onExcludeResponse(response) {
- const type = this.excludeSelected.type;
- switch (response) {
- case 'accept': {
- if (type == 'all')
- return this.exclusionCreate();
- return this.exclusionGeoCreate();
- }
- case 'delete':
- return this.exclusionDelete(this.excludeSelected);
- }
- }
-
- onDeleteClick(id, event) {
- if (event.defaultPrevented) return;
- event.preventDefault();
- this.onDelete(id);
- }
-
- onDelete(id) {
- return this.$.confirm.show(
- response => this.onDeleteResponse(response, id));
- }
-
- onDeleteResponse(response, id) {
- if (response != 'accept' || !id) return;
- return this.$http.delete(`${this.path}/${id}`)
- .then(() => this.refresh());
- }
-
- exclusionCreate() {
- const excludeSelected = this.excludeSelected;
- const dated = excludeSelected.dated;
- let req;
-
- if (this.isNew)
- req = this.$http.post(this.exclusionsPath, [{dated}]);
- if (!this.isNew)
- req = this.$http.put(`${this.exclusionsPath}/${excludeSelected.id}`, {dated});
-
- return req.then(() => {
- this.refresh();
- });
- }
-
- exclusionGeoCreate() {
- const excludeSelected = this.excludeSelected;
- let req;
- const geoIds = [];
- this.exclusionGeos.forEach(id => geoIds.push(id));
-
- if (this.isNew) {
- const params = {
- zoneFk: parseInt(this.$params.id),
- date: excludeSelected.dated,
- geoIds
- };
- req = this.$http.post(`Zones/exclusionGeo`, params);
- } else {
- const params = {
- zoneExclusionFk: this.excludeSelected.id,
- geoIds
- };
- req = this.$http.post(`Zones/updateExclusionGeo`, params);
- }
- return req.then(() => this.refresh());
- }
-
- exclusionDelete(exclusion) {
- const path = `${this.exclusionsPath}/${exclusion.id}`;
- return this.$http.delete(path)
- .then(() => this.refresh());
- }
-
- set excludeSearch(value) {
- this._excludeSearch = value;
- if (!value) this.onSearch();
- }
-
- get excludeSearch() {
- return this._excludeSearch;
- }
-
- onKeyDown(event) {
- if (event.key == 'Enter') {
- event.preventDefault();
- this.onSearch();
- }
- }
-
- onSearch() {
- const params = {search: this._excludeSearch};
- if (this.excludeSelected.type == 'specificLocations') {
- this.$.model.applyFilter({}, params).then(() => {
- const data = this.$.model.data;
- this.getChecked(data);
- this.$.treeview.data = data;
- });
- }
- }
-
- onFetch(item) {
- const params = item ? {parentId: item.id} : null;
- return this.$.model.applyFilter({}, params).then(() => {
- const data = this.$.model.data;
- this.getChecked(data);
- return data;
- });
- }
-
- onSort(a, b) {
- if (b.selected !== a.selected) {
- if (a.selected == null)
- return 1;
- if (b.selected == null)
- return -1;
- return b.selected - a.selected;
- }
-
- return a.name.localeCompare(b.name);
- }
-
- getChecked(data) {
- for (let geo of data) {
- geo.checked = this.exclusionGeos.has(geo.id);
- if (geo.childs) this.getChecked(geo.childs);
- }
- }
-
- onItemCheck(geoId, checked) {
- if (checked)
- this.exclusionGeos.add(geoId);
- else
- this.exclusionGeos.delete(geoId);
- }
-}
-Controller.$inject = ['$element', '$scope', 'vnWeekDays'];
-
-ngModule.vnComponent('vnZoneEvents', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- zone: '<'
- },
- require: {
- card: '^vnZoneCard'
- }
-});
diff --git a/modules/zone/front/events/index.spec.js b/modules/zone/front/events/index.spec.js
deleted file mode 100644
index 558d97b6f..000000000
--- a/modules/zone/front/events/index.spec.js
+++ /dev/null
@@ -1,340 +0,0 @@
-import './index';
-import crudModel from 'core/mocks/crud-model';
-
-describe('component vnZoneEvents', () => {
- let $scope;
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(` `);
- controller = $componentController('vnZoneEvents', {$element, $scope});
- controller.$params = {id: 1};
- }));
-
- describe('refresh()', () => {
- it('should set the zone and then call both getSummary() and getWarehouses()', () => {
- const date = '2021-10-01';
-
- controller.$params.id = 999;
- controller.$.calendar = {
- firstDay: date,
- lastDay: date
- };
-
- const params = {
- zoneFk: controller.$params.id,
- started: date,
- ended: date
- };
-
- const query = `Zones/getEventsFiltered?ended=${date}&started=${date}&zoneFk=${params.zoneFk}`;
- const response = {
- events: 'myEvents',
- exclusions: 'myExclusions',
- geoExclusions: 'myGeoExclusions',
- };
- $httpBackend.whenGET(query).respond(response);
- controller.refresh();
- $httpBackend.flush();
-
- const data = controller.$.data;
-
- expect(data.events).toBeDefined();
- expect(data.exclusions).toBeDefined();
- });
- });
-
- describe('onSelection()', () => {
- it('should call the editInclusion() method', () => {
- jest.spyOn(controller, 'editInclusion').mockReturnThis();
-
- const weekday = {};
- const days = [];
- const type = 'EventType';
- const events = [{name: 'Event'}];
- const exclusions = [];
- const exclusionsGeo = [];
- controller.editMode = 'include';
- controller.onSelection(days, type, weekday, events, exclusions, exclusionsGeo);
-
- expect(controller.editInclusion).toHaveBeenCalledWith({name: 'Event'});
- });
-
- it('should call the createInclusion() method', () => {
- jest.spyOn(controller, 'createInclusion').mockReturnThis();
-
- const weekday = {dated: Date.vnNew()};
- const days = [weekday];
- const type = 'EventType';
- const events = [];
- const exclusions = [];
- const exclusionsGeo = [];
- controller.editMode = 'include';
- controller.onSelection(days, type, weekday, events, exclusions, exclusionsGeo);
-
- expect(controller.createInclusion).toHaveBeenCalledWith(type, days, weekday);
- });
-
- it('should call the editExclusion() method with exclusions', () => {
- jest.spyOn(controller, 'editExclusion').mockReturnThis();
-
- const weekday = {};
- const days = [];
- const type = 'EventType';
- const events = [];
- const exclusions = [{name: 'Exclusion'}];
- const exclusionsGeo = [];
- controller.editMode = 'exclude';
- controller.onSelection(days, type, weekday, events, exclusions, exclusionsGeo);
-
- expect(controller.editExclusion).toHaveBeenCalled();
- });
-
- it('should call the editExclusion() method with exclusionsGeo', () => {
- jest.spyOn(controller, 'editExclusion').mockReturnThis();
-
- const weekday = {};
- const days = [];
- const type = 'EventType';
- const events = [];
- const exclusions = [];
- const exclusionsGeo = [{name: 'GeoExclusion'}];
- controller.editMode = 'exclude';
- controller.onSelection(days, type, weekday, events, exclusions, exclusionsGeo);
-
- expect(controller.editExclusion).toHaveBeenCalled();
- });
-
- it('should call the createExclusion() method', () => {
- jest.spyOn(controller, 'createExclusion').mockReturnThis();
-
- const weekday = {};
- const days = [{dated: Date.vnNew()}];
- const type = 'EventType';
- const events = [];
- const exclusions = [];
- const exclusionsGeo = [];
- controller.editMode = 'exclude';
- controller.onSelection(days, type, weekday, events, exclusions, exclusionsGeo);
-
- expect(controller.createExclusion).toHaveBeenCalledWith(days);
- });
- });
-
- describe('editExclusion()', () => {
- it('shoud set the excludeSelected.type = "specificLocations" and then call the excludeDialog show() method', () => {
- controller.$.excludeDialog = {show: jest.fn()};
-
- const exclusionGeos = [{id: 1}];
- const exclusions = [];
-
- controller.editExclusion(exclusions, exclusionGeos);
-
- expect(controller.excludeSelected.type).toEqual('specificLocations');
- expect(controller.$.excludeDialog.show).toHaveBeenCalledWith();
- });
-
- it('shoud set the excludeSelected.type = "all" and then call the excludeDialog show() method', () => {
- controller.$.excludeDialog = {show: jest.fn()};
-
- const exclusionGeos = [];
- const exclusions = [{id: 1}];
-
- controller.editExclusion(exclusions, exclusionGeos);
-
- expect(controller.excludeSelected.type).toEqual('all');
- expect(controller.$.excludeDialog.show).toHaveBeenCalledWith();
- });
- });
-
- describe('createExclusion()', () => {
- it('shoud set the excludeSelected property and then call the excludeDialog show() method', () => {
- controller.$.excludeDialog = {show: jest.fn()};
-
- const days = [Date.vnNew()];
- controller.createExclusion(days);
-
- expect(controller.excludeSelected).toBeDefined();
- expect(controller.isNew).toBeTruthy();
- expect(controller.$.excludeDialog.show).toHaveBeenCalledWith();
- });
- });
-
- describe('createInclusion()', () => {
- it('shoud set the selected property and then call the includeDialog show() method', () => {
- controller.$.includeDialog = {show: jest.fn()};
-
- const type = 'weekday';
- const days = [Date.vnNew()];
- const weekday = 1;
- controller.createInclusion(type, days, weekday);
-
- const selection = controller.selected;
- const firstWeekday = selection.wdays[weekday];
-
- expect(selection.type).toEqual('indefinitely');
- expect(firstWeekday).toBeTruthy();
- expect(controller.isNew).toBeTruthy();
- expect(controller.$.includeDialog.show).toHaveBeenCalledWith();
- });
-
- it('shoud set the selected property with the first day and then call the includeDialog show() method', () => {
- controller.$.includeDialog = {show: jest.fn()};
-
- const type = 'nonListedType';
- const days = [Date.vnNew()];
- const weekday = 1;
- controller.createInclusion(type, days, weekday);
-
- const selection = controller.selected;
-
- expect(selection.type).toEqual('day');
- expect(selection.dated).toEqual(days[0]);
- expect(controller.isNew).toBeTruthy();
- expect(controller.$.includeDialog.show).toHaveBeenCalledWith();
- });
- });
-
- describe('onIncludeResponse()', () => {
- it('shoud call the onDelete() method', () => {
- jest.spyOn(controller, 'onDelete').mockReturnValue(
- new Promise(accept => accept())
- );
-
- controller.selected = {id: 1};
- controller.onIncludeResponse('delete');
-
- expect(controller.onDelete).toHaveBeenCalledWith(1);
- });
-
- it('shoud make an HTTP POST query to create a new one and then call the refresh() method', () => {
- jest.spyOn(controller, 'refresh').mockReturnThis();
-
- controller.selected = {id: 1};
- controller.isNew = true;
-
- $httpBackend.when('POST', `Zones/1/events`).respond(200);
- controller.onIncludeResponse('accept');
- $httpBackend.flush();
-
- expect(controller.refresh).toHaveBeenCalledWith();
- });
-
- it('shoud make an HTTP PUT query and then call the refresh() method', () => {
- jest.spyOn(controller, 'refresh').mockReturnThis();
-
- controller.selected = {id: 1};
- controller.isNew = false;
-
- const eventId = 1;
- $httpBackend.when('PUT', `Zones/1/events/${eventId}`).respond(200);
- controller.onIncludeResponse('accept');
- $httpBackend.flush();
-
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('onExcludeResponse()', () => {
- it('should call the exclusionCreate() method', () => {
- jest.spyOn(controller, 'exclusionCreate').mockReturnThis();
-
- controller.excludeSelected = {type: 'all'};
- controller.onExcludeResponse('accept');
-
- expect(controller.exclusionCreate).toHaveBeenCalledWith();
- });
-
- it('should call the exclusionGeoCreate() method', () => {
- jest.spyOn(controller, 'exclusionGeoCreate').mockReturnThis();
-
- controller.excludeSelected = {type: 'specificLocations'};
- controller.onExcludeResponse('accept');
-
- expect(controller.exclusionGeoCreate).toHaveBeenCalledWith();
- });
-
- it('should call the exclusionDelete() method', () => {
- jest.spyOn(controller, 'exclusionDelete').mockReturnThis();
-
- controller.excludeSelected = {id: 1, type: 'all'};
- controller.onExcludeResponse('delete');
-
- expect(controller.exclusionDelete).toHaveBeenCalledWith(controller.excludeSelected);
- });
- });
-
- describe('onDeleteResponse()', () => {
- it('shoud make an HTTP DELETE query and then call the refresh() method', () => {
- jest.spyOn(controller, 'refresh').mockReturnThis();
-
- const eventId = 1;
- $httpBackend.expect('DELETE', `Zones/1/events/1`).respond({id: 1});
- controller.onDeleteResponse('accept', eventId);
- $httpBackend.flush();
-
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('exclusionCreate()', () => {
- it('shoud make an HTTP POST query and then call the refresh() method', () => {
- jest.spyOn(controller, 'refresh').mockReturnThis();
-
- controller.excludeSelected = {};
- controller.isNew = true;
- $httpBackend.expect('POST', `Zones/1/exclusions`).respond({id: 1});
- controller.exclusionCreate();
- $httpBackend.flush();
-
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('exclusionDelete()', () => {
- it('shoud make an HTTP DELETE query once and then call the refresh() method', () => {
- jest.spyOn(controller, 'refresh').mockReturnThis();
-
- const exclusions = {id: 1};
- const firstExclusionId = 1;
- $httpBackend.expectDELETE(`Zones/1/exclusions/${firstExclusionId}`).respond(200);
- controller.exclusionDelete(exclusions);
- $httpBackend.flush();
-
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('onSearch()', () => {
- it('should call the applyFilter() method and then set the data', () => {
- jest.spyOn(controller, 'getChecked').mockReturnValue([1, 2, 3]);
-
- controller.$.treeview = {};
- controller.$.model = crudModel;
- controller.excludeSelected = {type: 'specificLocations'};
- controller._excludeSearch = 'es';
-
- controller.onSearch();
- const treeviewData = controller.$.treeview.data;
-
- expect(treeviewData).toBeDefined();
- expect(treeviewData.length).toEqual(3);
- });
- });
-
- describe('onFetch()', () => {
- it('should call the applyFilter() method and then return the model data', () => {
- jest.spyOn(controller, 'getChecked').mockReturnValue([1, 2, 3]);
-
- controller.$.model = crudModel;
- const result = controller.onFetch();
-
- expect(result.length).toEqual(3);
- });
- });
-});
diff --git a/modules/zone/front/events/locale/es.yml b/modules/zone/front/events/locale/es.yml
deleted file mode 100644
index d6eee9f67..000000000
--- a/modules/zone/front/events/locale/es.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-Edit mode: Modo de edición
-Include: Incluir
-Exclude: Excluir
-Events: Eventos
-Add event: Añadir evento
-Edit event: Editar evento
-All: Todo
-Specific locations: Localizaciones concretas
-Locations where it is not distributed: Localizaciones en las que no se reparte
-You must select a location: Debes seleccionar una localización
-Add exclusion: Añadir exclusión
-Edit exclusion: Editar exclusión
diff --git a/modules/zone/front/events/style.scss b/modules/zone/front/events/style.scss
deleted file mode 100644
index 49a6e87a6..000000000
--- a/modules/zone/front/events/style.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-@import "variables";
-
- .width{
- width: 600px
- }
-
- .treeview{
- max-height: 300px;
- overflow: auto;
- }
-
diff --git a/modules/zone/front/index.js b/modules/zone/front/index.js
index dc20eea47..a7209a0bd 100644
--- a/modules/zone/front/index.js
+++ b/modules/zone/front/index.js
@@ -1,19 +1,3 @@
export * from './module';
import './main';
-import './index/';
-import './delivery-days';
-import './summary';
-import './card';
-import './descriptor';
-import './descriptor-popover';
-import './search-panel';
-import './create';
-import './basic-data';
-import './warehouses';
-import './events';
-import './calendar';
-import './location';
-import './calendar';
-import './upcoming-deliveries';
-import './log';
diff --git a/modules/zone/front/index/index.html b/modules/zone/front/index/index.html
deleted file mode 100644
index 78e3f2cd8..000000000
--- a/modules/zone/front/index/index.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
- Id
- Name
- Agency
- Closing
- Price
-
-
-
-
-
- {{::zone.id}}
- {{::zone.name}}
- {{::zone.agencyMode.name}}
- {{::zone.hour | date: 'HH:mm'}}
- {{::zone.price | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/zone/front/index/index.js b/modules/zone/front/index/index.js
deleted file mode 100644
index ad54f7df4..000000000
--- a/modules/zone/front/index/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(zone) {
- this.selectedZone = zone;
- this.$.summary.show();
- }
-
- onCloneAccept(zone) {
- return this.$http.post(`Zones/${zone.id}/clone`)
- .then(res => {
- this.$state.go('zone.card.basicData', {id: res.data.id});
- });
- }
-}
-
-ngModule.vnComponent('vnZoneIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/zone/front/index/locale/es.yml b/modules/zone/front/index/locale/es.yml
deleted file mode 100644
index 14195e869..000000000
--- a/modules/zone/front/index/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Do you want to clone this zone?: ¿Seguro que quieres clonar esta zona?
-All it's properties will be copied: Todas sus propiedades serán copiadas
\ No newline at end of file
diff --git a/modules/zone/front/locale/es.yml b/modules/zone/front/locale/es.yml
index 7c9e783ab..4d528f37a 100644
--- a/modules/zone/front/locale/es.yml
+++ b/modules/zone/front/locale/es.yml
@@ -13,7 +13,7 @@ Indefinitely: Indefinido
Inflation: Inflación
Locations: Localizaciones
Maximum m³: M³ máximo
-Max m³: Medida máxima
+Max m³: Medida máxima
New zone: Nueva zona
One day: Un día
Pick up: Recogida
@@ -32,4 +32,4 @@ Warehouses: Almacenes
Week days: Días de la semana
Zones: Zonas
zone: zona
-Go to the zone: Ir a la zona
\ No newline at end of file
+Go to the zone: Ir a la zona
diff --git a/modules/zone/front/location/index.html b/modules/zone/front/location/index.html
deleted file mode 100644
index b86c618b7..000000000
--- a/modules/zone/front/location/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/zone/front/location/index.js b/modules/zone/front/location/index.js
deleted file mode 100644
index 0f92f37de..000000000
--- a/modules/zone/front/location/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- onSearch(params) {
- this.$.model.applyFilter({}, params).then(() => {
- const data = this.$.model.data;
- this.$.treeview.data = data;
- });
- }
-
- onFetch(item) {
- const params = item ? {parentId: item.id} : null;
- return this.$.model.applyFilter({}, params)
- .then(() => this.$.model.data);
- }
-
- onSort(a, b) {
- if (b.selected !== a.selected) {
- if (a.selected == null)
- return 1;
- if (b.selected == null)
- return -1;
- return b.selected - a.selected;
- }
-
- return a.name.localeCompare(b.name);
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return {name: {like: `%${value}%`}};
- }
- }
-
- onSelection(value, item) {
- if (value == null)
- value = undefined;
- const params = {geoId: item.id, isIncluded: value};
- const path = `zones/${this.zone.id}/toggleIsIncluded`;
- this.$http.post(path, params);
- }
-}
-
-ngModule.vnComponent('vnZoneLocation', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- zone: '<'
- },
- require: {
- card: '^vnZoneCard'
- }
-});
diff --git a/modules/zone/front/location/index.spec.js b/modules/zone/front/location/index.spec.js
deleted file mode 100644
index 30968209c..000000000
--- a/modules/zone/front/location/index.spec.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import './index';
-import crudModel from 'core/mocks/crud-model';
-
-describe('component vnZoneLocation', () => {
- let $scope;
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(` `);
- controller = $componentController('vnZoneLocation', {$element, $scope});
- controller.$.model = crudModel;
- controller.zone = {id: 1};
- }));
-
- describe('onSearch()', () => {
- it('should call the applyFilter() method and then set the data', () => {
- controller.$.treeview = {};
- controller.onSearch({});
-
- const treeviewData = controller.$.treeview.data;
-
- expect(treeviewData).toBeDefined();
- expect(treeviewData.length).toEqual(3);
- });
- });
-
- describe('onFetch()', () => {
- it('should call the applyFilter() method and then return the model data', () => {
- const result = controller.onFetch();
-
- expect(result.length).toEqual(3);
- });
- });
-
- describe('onSelection()', () => {
- it('should make an HTTP POST query', () => {
- const item = {id: 123};
-
- const expectedParams = {geoId: 123, isIncluded: true};
- $httpBackend.expect('POST', `zones/1/toggleIsIncluded`, expectedParams).respond(200);
- controller.onSelection(true, item);
- $httpBackend.flush();
- });
- });
-});
diff --git a/modules/zone/front/location/style.scss b/modules/zone/front/location/style.scss
deleted file mode 100644
index 24d685a51..000000000
--- a/modules/zone/front/location/style.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-@import "variables";
-
-vn-zone-location {
- vn-treeview-child {
- .content > .vn-check:not(.indeterminate):not(.checked) {
- color: $color-alert;
-
- & > .btn {
- border-color: $color-alert;
- }
- }
- .content > .vn-check.checked {
- color: $color-notice;
-
- & > .btn {
- background-color: $color-notice;
- border-color: $color-notice
- }
- }
- }
-}
diff --git a/modules/zone/front/log/index.html b/modules/zone/front/log/index.html
deleted file mode 100644
index 539afda82..000000000
--- a/modules/zone/front/log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/zone/front/log/index.js b/modules/zone/front/log/index.js
deleted file mode 100644
index 8c3be2423..000000000
--- a/modules/zone/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnZoneLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/zone/front/main/index.html b/modules/zone/front/main/index.html
index 8dd6cdf78..e69de29bb 100644
--- a/modules/zone/front/main/index.html
+++ b/modules/zone/front/main/index.html
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/main/index.js b/modules/zone/front/main/index.js
index 3be60c5a1..38896d418 100644
--- a/modules/zone/front/main/index.js
+++ b/modules/zone/front/main/index.js
@@ -4,25 +4,10 @@ import ModuleMain from 'salix/components/module-main';
export default class Zone extends ModuleMain {
constructor($element, $) {
super($element, $);
- this.filter = {
- include: {
- relation: 'agencyMode',
- scope: {fields: ['name']}
- }
- };
}
-
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return /^\d+$/.test(value)
- ? {id: value}
- : {name: {like: `%${value}%`}};
- case 'name':
- return {[param]: {like: `%${value}%`}};
- case 'agencyModeFk':
- return {[param]: value};
- }
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`zone/`);
}
}
diff --git a/modules/zone/front/main/index.spec.js b/modules/zone/front/main/index.spec.js
deleted file mode 100644
index 1e50cee80..000000000
--- a/modules/zone/front/main/index.spec.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import './index.js';
-
-describe('Zone Component vnZone', () => {
- let controller;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject($componentController => {
- const $element = angular.element(' ');
- controller = $componentController('vnZone', {$element});
- }));
-
- describe('exprBuilder()', () => {
- it('should return a formated object with the id in case of search', () => {
- let param = 'search';
- let value = 1;
- let result = controller.exprBuilder(param, value);
-
- expect(result).toEqual({id: 1});
- });
-
- it('should return a formated object with the agencyModeFk in case of agencyModeFk', () => {
- let param = 'agencyModeFk';
- let value = 'My Delivery';
- let result = controller.exprBuilder(param, value);
-
- expect(result).toEqual({agencyModeFk: 'My Delivery'});
- });
- });
-});
diff --git a/modules/zone/front/routes.json b/modules/zone/front/routes.json
index 7f67260da..a4993007d 100644
--- a/modules/zone/front/routes.json
+++ b/modules/zone/front/routes.json
@@ -7,15 +7,6 @@
"menus": {
"main": [
{"state": "zone.index", "icon": "icon-zone"},
- {"state": "zone.deliveryDays", "icon": "today"},
- {"state": "zone.upcomingDeliveries", "icon": "today"}
- ],
- "card": [
- {"state": "zone.card.basicData", "icon": "settings"},
- {"state": "zone.card.location", "icon": "my_location"},
- {"state": "zone.card.warehouses", "icon": "home"},
- {"state": "zone.card.log", "icon": "history"},
- {"state": "zone.card.events", "icon": "today"}
]
},
"keybindings": [
@@ -34,79 +25,6 @@
"state": "zone.index",
"component": "vn-zone-index",
"description": "Zones"
- },
- {
- "url": "/delivery-days?q&deliveryMethodFk&geoFk&agencyModeFk",
- "state": "zone.deliveryDays",
- "component": "vn-zone-delivery-days",
- "description": "Delivery days"
- },
- {
- "url": "/upcoming-deliveries",
- "state": "zone.upcomingDeliveries",
- "component": "vn-upcoming-deliveries",
- "description": "Upcoming deliveries"
- },
- {
- "url": "/create",
- "state": "zone.create",
- "component": "vn-zone-create",
- "description": "New zone"
- },
- {
- "url": "/:id",
- "state": "zone.card",
- "component": "vn-zone-card",
- "abstract": true,
- "description": "Detail"
- },
- {
- "url": "/summary",
- "state": "zone.card.summary",
- "component": "vn-zone-summary",
- "description": "Summary",
- "params": {
- "zone": "$ctrl.zone"
- }
- },
- {
- "url": "/basic-data",
- "state": "zone.card.basicData",
- "component": "vn-zone-basic-data",
- "description": "Basic data",
- "params": {
- "zone": "$ctrl.zone"
- }
- },
- {
- "url": "/warehouses",
- "state": "zone.card.warehouses",
- "component": "vn-zone-warehouses",
- "description": "Warehouses"
- },
- {
- "url": "/events?q",
- "state": "zone.card.events",
- "component": "vn-zone-events",
- "description": "Calendar",
- "params": {
- "zone": "$ctrl.zone"
- }
- },
- {
- "url": "/location?q",
- "state": "zone.card.location",
- "component": "vn-zone-location",
- "description": "Locations",
- "params": {
- "zone": "$ctrl.zone"
- }
- },
- {
- "url" : "/log",
- "state": "zone.card.log",
- "component": "vn-zone-log",
- "description": "Log"
}
]
-}
\ No newline at end of file
+}
diff --git a/modules/zone/front/search-panel/index.html b/modules/zone/front/search-panel/index.html
deleted file mode 100644
index bda8a946e..000000000
--- a/modules/zone/front/search-panel/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/search-panel/index.js b/modules/zone/front/search-panel/index.js
deleted file mode 100644
index 598af02b2..000000000
--- a/modules/zone/front/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.vnComponent('vnZoneSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/zone/front/summary/index.html b/modules/zone/front/summary/index.html
deleted file mode 100644
index 2fe94388f..000000000
--- a/modules/zone/front/summary/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
- #{{$ctrl.summary.id}} - {{$ctrl.summary.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name
-
-
-
-
- {{zoneWarehouse.warehouse.name}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/zone/front/summary/index.js b/modules/zone/front/summary/index.js
deleted file mode 100644
index ad33f28be..000000000
--- a/modules/zone/front/summary/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import ngModule from '../module';
-import Summary from 'salix/components/summary';
-
-class Controller extends Summary {
- get zone() {
- return this._zone;
- }
-
- set zone(value) {
- this._zone = value;
-
- if (!value) return;
-
- this.getSummary();
- this.getWarehouses();
- }
-
- getSummary() {
- const params = {
- filter: {
- include: {
- relation: 'agencyMode',
- fields: ['name']
- },
- where: {
- id: this.zone.id
- }
- }
- };
- this.$http.get(`Zones/findOne`, {params}).then(res => {
- this.summary = res.data;
- });
- }
-
- getWarehouses() {
- const params = {
- filter: {
- include: {
- relation: 'warehouse',
- fields: ['name']
- }
- }
- };
- this.$http.get(`Zones/${this.zone.id}/warehouses`, {params}).then(res => {
- this.zoneWarehouses = res.data;
- });
- }
-}
-
-ngModule.vnComponent('vnZoneSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- zone: '<'
- }
-});
diff --git a/modules/zone/front/summary/index.spec.js b/modules/zone/front/summary/index.spec.js
deleted file mode 100644
index 7541ee795..000000000
--- a/modules/zone/front/summary/index.spec.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import './index';
-
-describe('component vnZoneSummary', () => {
- let $scope;
- let controller;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $scope = $rootScope.$new();
- const $element = angular.element(` `);
- controller = $componentController('vnZoneSummary', {$element, $scope});
- }));
-
- describe('zone setter', () => {
- it('should set the zone and then call both getSummary() and getWarehouses()', () => {
- jest.spyOn(controller, 'getSummary');
- jest.spyOn(controller, 'getWarehouses');
-
- controller.zone = {id: 1};
-
- expect(controller.getSummary).toHaveBeenCalledWith();
- expect(controller.getWarehouses).toHaveBeenCalledWith();
- });
- });
-
- describe('getSummary()', () => {
- it('should perform a get and then store data on the controller', () => {
- controller._zone = {id: 1};
- let params = {
- filter: {
- include: {
- relation: 'agencyMode',
- fields: ['name']
- },
- where: {
- id: controller._zone.id
- }
- }
- };
- const serializedParams = $httpParamSerializer(params);
- const query = `Zones/findOne?${serializedParams}`;
- $httpBackend.expectGET(query).respond({id: 1});
- controller.getSummary();
- $httpBackend.flush();
-
- expect(controller.summary).toBeDefined();
- });
- });
-
- describe('getWarehouses()', () => {
- it('should make an HTTP get query and then store data on the controller', () => {
- controller._zone = {id: 1};
- const params = {
- filter: {
- include: {
- relation: 'warehouse',
- fields: ['name']
- }
- }
- };
-
- const serializedParams = $httpParamSerializer(params);
- const query = `Zones/1/warehouses?${serializedParams}`;
- $httpBackend.expect('GET', query).respond([{id: 1}]);
- controller.getWarehouses();
- $httpBackend.flush();
-
- expect(controller.zoneWarehouses.length).toEqual(1);
- });
- });
-});
diff --git a/modules/zone/front/upcoming-deliveries/index.html b/modules/zone/front/upcoming-deliveries/index.html
deleted file mode 100644
index afcd0bbc6..000000000
--- a/modules/zone/front/upcoming-deliveries/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
- Province
- Closing
- Id
-
-
-
-
- {{::zone.name}}
- {{::zone.hour}}
- {{::zone.zoneFk}}
-
-
-
-
-
-
diff --git a/modules/zone/front/upcoming-deliveries/index.js b/modules/zone/front/upcoming-deliveries/index.js
deleted file mode 100644
index 371321711..000000000
--- a/modules/zone/front/upcoming-deliveries/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $, vnWeekDays) {
- super($element, $);
- this.days = vnWeekDays.days;
- }
-
- getWeekDay(jsonDate) {
- const weekDay = new Date(jsonDate).getDay();
-
- return this.days[weekDay].locale;
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnWeekDays'];
-
-ngModule.vnComponent('vnUpcomingDeliveries', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/zone/front/upcoming-deliveries/index.spec.js b/modules/zone/front/upcoming-deliveries/index.spec.js
deleted file mode 100644
index 95eb999f9..000000000
--- a/modules/zone/front/upcoming-deliveries/index.spec.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import './index';
-
-describe('component vnUpcomingDeliveries', () => {
- let $scope;
- let controller;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- const $element = angular.element(` `);
- controller = $componentController('vnUpcomingDeliveries', {$element, $scope});
- }));
-
- describe('getWeekDay()', () => {
- it('should retrieve a weekday for a json passed', () => {
- let jsonDate = '1970-01-01T22:00:00.000Z';
-
- expect(controller.getWeekDay(jsonDate)).toEqual('Thursday');
- });
- });
-});
diff --git a/modules/zone/front/upcoming-deliveries/locale/es.yml b/modules/zone/front/upcoming-deliveries/locale/es.yml
deleted file mode 100644
index 9f08e3a72..000000000
--- a/modules/zone/front/upcoming-deliveries/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Family: Familia
-Percentage: Porcentaje
-Dwindle: Mermas
\ No newline at end of file
diff --git a/modules/zone/front/upcoming-deliveries/style.scss b/modules/zone/front/upcoming-deliveries/style.scss
deleted file mode 100644
index b52231a09..000000000
--- a/modules/zone/front/upcoming-deliveries/style.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-@import "variables";
-
-vn-upcoming-deliveries {
- .header {
- margin-bottom: 16px;
- text-transform: uppercase;
- font-size: 1.25rem;
- line-height: 1;
- padding: 7px;
- padding-bottom: 7px;
- padding-bottom: 4px;
- font-weight: lighter;
- background-color: $color-main-light;
- border-bottom: 1px solid $color-primary;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- background-color: $color-bg;
- }
-
- vn-table vn-th.waste-family,
- vn-table vn-td.waste-family {
- max-width: 64px;
- width: 64px
- }
-}
\ No newline at end of file
diff --git a/modules/zone/front/warehouses/index.html b/modules/zone/front/warehouses/index.html
deleted file mode 100644
index acd85f182..000000000
--- a/modules/zone/front/warehouses/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
- {{::row.warehouse.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Save
-
-
-
-
diff --git a/modules/zone/front/warehouses/index.js b/modules/zone/front/warehouses/index.js
deleted file mode 100644
index 85b398658..000000000
--- a/modules/zone/front/warehouses/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- $onInit() {
- this.refresh();
- }
-
- get path() {
- return `Zones/${this.$params.id}/warehouses`;
- }
-
- refresh() {
- let filter = {include: 'warehouse'};
- this.$http.get(this.path, {params: {filter}})
- .then(res => this.$.data = res.data);
- }
-
- onCreate() {
- this.selected = {};
- this.$.dialog.show();
- }
-
- onSave() {
- this.$http.post(this.path, this.selected)
- .then(() => {
- this.selected = null;
- this.isNew = null;
- this.$.dialog.hide();
- this.refresh();
- });
-
- return false;
- }
-
- onDelete(row) {
- this.$.confirm.show();
- this.deleteRow = row;
- }
-
- delete() {
- let row = this.deleteRow;
- if (!row) return;
- return this.$http.delete(`${this.path}/${row.id}`)
- .then(() => {
- let index = this.$.data.indexOf(row);
- if (index !== -1) this.$.data.splice(index, 1);
- this.deleteRow = null;
- });
- }
-}
-
-ngModule.vnComponent('vnZoneWarehouses', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/zone/front/warehouses/index.spec.js b/modules/zone/front/warehouses/index.spec.js
deleted file mode 100644
index 0e71d541c..000000000
--- a/modules/zone/front/warehouses/index.spec.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import './index.js';
-
-describe('Zone warehouses', () => {
- let $httpBackend;
- let $httpParamSerializer;
- let controller;
- let $element;
-
- beforeEach(ngModule('zone'));
-
- beforeEach(inject(($componentController, _$httpBackend_, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $element = angular.element(' {
- it('should make an HTTP GET query and then set the data', () => {
- const params = {filter: {include: 'warehouse'}};
- const serializedParams = $httpParamSerializer(params);
- const path = `Zones/1/warehouses?${serializedParams}`;
- $httpBackend.expect('GET', path).respond([{id: 1, name: 'Warehouse one'}]);
- controller.refresh();
- $httpBackend.flush();
-
- expect(controller.$.data).toBeDefined();
- });
- });
-
- describe('onSave()', () => {
- it('should make an HTTP POST query and then call the refresh() method', () => {
- jest.spyOn(controller, 'refresh').mockReturnThis();
-
- $httpBackend.expect('POST', `Zones/1/warehouses`).respond(200);
- controller.onSave();
- $httpBackend.flush();
-
- expect(controller.selected).toBeNull();
- expect(controller.isNew).toBeNull();
- expect(controller.$.dialog.hide).toHaveBeenCalledWith();
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('delete()', () => {
- it('should make an HTTP DELETE query and then set deleteRow property to null value', () => {
- controller.deleteRow = {id: 1};
- controller.$.data = [{id: 1}];
- $httpBackend.expect('DELETE', `Zones/1/warehouses/1`).respond(200);
- controller.delete();
- $httpBackend.flush();
-
- expect(controller.deleteRow).toBeNull();
- });
- });
-});
diff --git a/myt.config.yml b/myt.config.yml
index 663b1aec2..25f94f1bd 100755
--- a/myt.config.yml
+++ b/myt.config.yml
@@ -69,6 +69,7 @@ fixtures:
- siiTypeInvoiceOut
- state
- ticketUpdateAction
+ - ticketCanAdvanceConfig
- volumeConfig
- workCenter
- workerTimeControlError
diff --git a/package.json b/package.json
index 8f9670903..32c1f21d8 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
"@babel/register": "^7.7.7",
"@commitlint/cli": "^19.2.1",
"@commitlint/config-conventional": "^19.1.0",
- "@verdnatura/myt": "^1.6.11",
+ "@verdnatura/myt": "^1.6.12",
"angular-mocks": "^1.7.9",
"babel-jest": "^26.0.1",
"babel-loader": "^8.2.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e2480cf4a..042b91fe0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -143,8 +143,8 @@ devDependencies:
specifier: ^19.1.0
version: 19.1.0
'@verdnatura/myt':
- specifier: ^1.6.11
- version: 1.6.11
+ specifier: ^1.6.12
+ version: 1.6.12
angular-mocks:
specifier: ^1.7.9
version: 1.8.3
@@ -2846,8 +2846,8 @@ packages:
dev: false
optional: true
- /@verdnatura/myt@1.6.11:
- resolution: {integrity: sha512-uqdbSJSznBBzAoRkvBt600nUMEPL1PJ2v73eWMZbaoGUMiZiNAehYjs4gIrObP1cxC85JOx97XoLpG0BzPsaig==}
+ /@verdnatura/myt@1.6.12:
+ resolution: {integrity: sha512-t/SiDuQW9KJkcjhwQ9AkrcoTwghxQ7IyQ56e+88eYdoMi24l6bQGF0wHzMaIPRfQAoR8hqgfMOief4OAqW4Iqw==}
hasBin: true
dependencies:
'@sqltools/formatter': 1.2.5
@@ -6548,7 +6548,7 @@ packages:
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
engines: {node: '>= 4.0'}
os: [darwin]
- deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2
+ deprecated: Upgrade to fsevents v2 to mitigate potential security issues
requiresBuild: true
dependencies:
bindings: 1.5.0
@@ -10485,7 +10485,7 @@ packages:
engines: {node: '>=10'}
requiresBuild: true
dependencies:
- semver: 7.5.4
+ semver: 7.6.0
dev: false
optional: true
@@ -12501,6 +12501,7 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
+ dev: true
/semver@7.6.0:
resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
@@ -12508,7 +12509,6 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
- dev: true
/send@0.18.0(supports-color@6.1.0):
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}