diff --git a/CHANGELOG.md b/CHANGELOG.md
index f59a3d4c6..6db79a40a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,61 @@
+# Version 24.32 - 2024-08-06
+
+### Added 🆕
+
+- chore: refs #7197 add supplierActivityFk filter by:jorgep
+- feat checkExpeditionPrintOut refs #7751 by:sergiodt
+- feat(defaulter_filter): add department by:alexm
+- feat: redirect to lilium page not found by:alexm
+- feat: refactor buyUltimate refs #7736 by:Carlos Andrés
+- feat: refs #6403 add delete by:pablone
+- feat: refs #7126 Added manaClaim calc by:guillermo
+- feat: refs #7126 Refactor and added columns in bs.waste table & proc by:guillermo
+- feat: refs #7197 filter by correcting by:jorgep
+- feat: refs #7297 add new columns by:pablone
+- feat: refs #7356 new parameters in sql for Weekly tickets front by:Jon
+- feat: refs #7401 redirect lilium by:pablone
+- feat: refs #7511 Fix tests by:guillermo
+- feat: refs #7511 Rename to multiConfig tables by:guillermo
+- feat: refs #7589 Added display (item_valuateInventory) by:guillermo
+- feat: refs #7589 Added vItemTypeFk & vItemCategoryFk (item_valuateInventory) by:guillermo
+- feat: refs #7681 Changes by:guillermo
+- feat: refs #7681 Optimization and refactor by:guillermo
+- feat: refs #7683 drop temporary table by:robert
+- feat: refs #7683 productionControl by:robert
+- feat: refs #7728 Added throw due date by:guillermo
+- feat: refs #7740 Ticket before update added restriction by:guillermo
+- feat(salix): #7648 Add field for endpoint as buyLabel report by:Javier Segarra
+- feat(salix): #7648 remove white line by:Javier Segarra
+- feat: tabla config dias margen vctos. refs #7728 by:Carlos Andrés
+
+### Changed 📦
+
+- eat: refactor buyUltimate refs #7736 by:Carlos Andrés
+- feat: refactor buyUltimate refs #7736 by:Carlos Andrés
+- feat: refs #7681 Optimization and refactor by:guillermo
+- refactor: refs #7126 Requested changes by:guillermo
+- refactor: refs #7511 Minor change by:guillermo
+- refactor: refs #7640 Multipleinventory available by:guillermo
+- refactor: refs #7681 Changes by:guillermo
+- refactor: refs #7681 Requested changes by:guillermo
+
+### Fixed 🛠️
+
+- add prefix (hotFix_liliumRedirection) by:alexm
+- fix(client_filter): add recovery by:alexm
+- fix: defaulter filter correct sql (6943-fix_defaulter_filter) by:alexm
+- fix(deletExpeditions): merge test → dev by:guillermo
+- fix: refs #6403 fix mrw cancel shipment return type by:pablone
+- fix: refs #7126 Added addressWaste type by:guillermo
+- fix: refs #7126 Fix by:guillermo
+- fix: refs #7126 Minor change by:guillermo
+- fix: refs #7126 Primary key no unique data by:guillermo
+- fix: refs #7126 Slow update by:guillermo
+- fix: refs #7511 Minor change by:guillermo
+- fix: refs #7546 Deleted insert util.binlogQueue by:guillermo
+- fix: refs #7811 Variables pm2 by:guillermo
+- fix: without path by:alexm
+
# Version 24.28 - 2024-07-09
### Added 🆕
diff --git a/back/methods/collection/assign.js b/back/methods/collection/assign.js
index 0484eb5a8..f246043b8 100644
--- a/back/methods/collection/assign.js
+++ b/back/methods/collection/assign.js
@@ -20,9 +20,14 @@ module.exports = Self => {
if (typeof options == 'object')
Object.assign(myOptions, options);
- const [, , [{collectionFk}]] =
- await Self.rawSql('CALL vn.collection_assign(?, @vCollectionFk); SELECT @vCollectionFk collectionFk',
- [userId], myOptions);
+ const randStr = Math.random().toString(36).substring(3);
+ const result = await Self.rawSql(`
+ CALL vn.collection_assign(?, @vCollectionFk);
+ SELECT @vCollectionFk ?
+ `, [userId, randStr], myOptions);
+
+ // Por si entra en SELECT FOR UPDATE una o varias veces
+ const collectionFk = result.find(item => item[0]?.[randStr] !== undefined)?.[0]?.[randStr];
if (!collectionFk) throw new UserError('There are not picking tickets');
await Self.rawSql('CALL vn.collection_printSticker(?, NULL)', [collectionFk], myOptions);
diff --git a/back/methods/collection/getTickets.js b/back/methods/collection/getTickets.js
index b79dbc93a..2a2b67524 100644
--- a/back/methods/collection/getTickets.js
+++ b/back/methods/collection/getTickets.js
@@ -57,8 +57,10 @@ module.exports = Self => {
ROW_NUMBER () OVER (PARTITION BY s.id ORDER BY pickingOrder) currentItemShelving,
COUNT(*) OVER (PARTITION BY s.id ORDER BY s.id) totalItemShelving,
sh.code,
- IFNULL(p2.code, p.code) parkingCode,
- IFNULL(p2.pickingOrder, p.pickingOrder) pickingOrder,
+ p2.code parkingCode,
+ p2.pickingOrder pickingOrder,
+ p.code parkingCodePrevia,
+ p.pickingOrder pickingOrderPrevia,
iss.id itemShelvingSaleFk,
iss.isPicked
FROM ticketCollection tc
@@ -95,8 +97,10 @@ module.exports = Self => {
ROW_NUMBER () OVER (PARTITION BY s.id ORDER BY p.pickingOrder),
COUNT(*) OVER (PARTITION BY s.id ORDER BY s.id) ,
sh.code,
- IFNULL(p2.code, p.code),
- IFNULL(p2.pickingOrder, p.pickingOrder),
+ p2.code,
+ p2.pickingOrder,
+ p.code,
+ p.pickingOrder,
iss.id itemShelvingSaleFk,
iss.isPicked
FROM sectorCollection sc
diff --git a/back/methods/mrw-config/createShipment.ejs b/back/methods/mrw-config/createShipment.ejs
index 65326112b..52ccc859c 100644
--- a/back/methods/mrw-config/createShipment.ejs
+++ b/back/methods/mrw-config/createShipment.ejs
@@ -25,7 +25,7 @@
<%= expeditionData.fi %>
<%= expeditionData.clientName %>
- <%= expeditionData.phone %>
+ <%= expeditionData.mobile %>
<%= expeditionData.deliveryObservation %>
diff --git a/back/methods/mrw-config/createShipment.js b/back/methods/mrw-config/createShipment.js
index 900e1fc0f..2ebb80774 100644
--- a/back/methods/mrw-config/createShipment.js
+++ b/back/methods/mrw-config/createShipment.js
@@ -47,13 +47,13 @@ module.exports = Self => {
co.code countryCode,
c.fi,
c.name clientName,
- c.phone,
+ IFNULL(a.mobile, c.mobile) mobile,
DATE_FORMAT(t.shipped, '%d/%m/%Y') created,
t.shipped,
CONCAT( e.ticketFk, LPAD(e.counter, mc.counterWidth, '0')) reference,
LPAD(IF(mw.serviceType IS NULL, ms.serviceType, mw.serviceType), mc.serviceTypeWidth, '0') serviceType,
IF(mw.weekdays, 'S', 'N') weekDays,
- oa.description deliveryObservation
+ ta.description deliveryObservation
FROM expedition e
JOIN ticket t ON e.ticketFk = t.id
JOIN agencyMode am ON am.id = t.agencyModeFk
@@ -62,8 +62,8 @@ module.exports = Self => {
AND mw.weekDays & (1 << WEEKDAY(t.landed))
JOIN client c ON t.clientFk = c.id
JOIN address a ON t.addressFk = a.id
- LEFT JOIN addressObservation oa ON oa.addressFk = a.id
- AND oa.observationTypeFk IN (SELECT id FROM observationType ot WHERE ot.code = 'delivery')
+ LEFT JOIN ticketObservation ta ON ta.ticketFk = t.id
+ AND ta.observationTypeFk IN (SELECT id FROM observationType ot WHERE ot.code = 'agency')
JOIN province p ON a.provinceFk = p.id
JOIN country co ON co.id = p.countryFk
JOIN mrwConfig mc
diff --git a/back/methods/postcode/filter.js b/back/methods/postcode/filter.js
index 8b0f64d97..f350b1ea9 100644
--- a/back/methods/postcode/filter.js
+++ b/back/methods/postcode/filter.js
@@ -11,13 +11,6 @@ module.exports = Self => {
arg: 'filter',
type: 'object',
description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string',
- http: {source: 'query'}
- },
- {
- arg: 'search',
- type: 'string',
- description: 'Value to filter',
- http: {source: 'query'}
},
],
returns: {
@@ -29,13 +22,11 @@ module.exports = Self => {
verb: 'GET',
},
});
- Self.filter = async(ctx, filter, options) => {
+ Self.filter = async(filter = {}, options) => {
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
- filter = ctx?.filter ?? {};
-
const conn = Self.dataSource.connector;
const where = buildFilter(filter?.where, (param, value) => {
switch (param) {
@@ -50,31 +41,33 @@ module.exports = Self => {
};
}
}) ?? {};
- delete ctx.filter.where;
+ delete filter.where;
const stmts = [];
let stmt;
stmt = new ParameterizedSQL(`
- SELECT
- pc.townFk,
- t.provinceFk,
- p.countryFk,
- pc.code,
- t.name as town,
- p.name as province,
- c.name country
- FROM
- postCode pc
- JOIN town t on t.id = pc.townFk
- JOIN province p on p.id = t.provinceFk
- JOIN country c on c.id = p.countryFk
+ SELECT
+ pc.townFk,
+ t.provinceFk,
+ p.countryFk,
+ pc.code,
+ t.name as town,
+ p.name as province,
+ c.name country
+ FROM
+ postCode pc
+ JOIN town t on t.id = pc.townFk
+ JOIN province p on p.id = t.provinceFk
+ JOIN country c on c.id = p.countryFk
`);
- stmt.merge(conn.makeSuffix({where, ...ctx}));
+ stmt.merge(conn.makeSuffix({where}));
+ stmt.merge(conn.makeLimit(filter));
const itemsIndex = stmts.push(stmt) - 1;
const sql = ParameterizedSQL.join(stmts, ';');
const result = await conn.executeStmt(sql, myOptions);
+
return itemsIndex === 0 ? result : result[itemsIndex];
};
};
diff --git a/back/methods/postcode/specs/filter.spec.js b/back/methods/postcode/specs/filter.spec.js
index 60ac24809..abf450a19 100644
--- a/back/methods/postcode/specs/filter.spec.js
+++ b/back/methods/postcode/specs/filter.spec.js
@@ -6,12 +6,9 @@ describe('Postcode filter()', () => {
const options = {transaction: tx};
try {
- const ctx = {
- filter: {
- },
+ const results = await models.Postcode.filter({
limit: 1
- };
- const results = await models.Postcode.filter(ctx, options);
+ }, options);
expect(results.length).toEqual(1);
await tx.rollback();
@@ -26,14 +23,11 @@ describe('Postcode filter()', () => {
const options = {transaction: tx};
try {
- const ctx = {
- filter: {
- where: {
- search: 46,
- }
- },
- };
- const results = await models.Postcode.filter(ctx, options);
+ const results = await models.Postcode.filter({
+ where: {
+ search: 46,
+ }
+ }, options);
expect(results.length).toEqual(4);
await tx.rollback();
@@ -48,14 +42,9 @@ describe('Postcode filter()', () => {
const options = {transaction: tx};
try {
- const ctx = {
- filter: {
- where: {
- search: 'Alz',
- }
- },
- };
- const results = await models.Postcode.filter(ctx, options);
+ const results = await models.Postcode.filter({where: {
+ search: 'Alz',
+ }}, options);
expect(results.length).toEqual(1);
await tx.rollback();
@@ -70,14 +59,9 @@ describe('Postcode filter()', () => {
const options = {transaction: tx};
try {
- const ctx = {
- filter: {
- where: {
- search: 'one',
- }
- },
- };
- const results = await models.Postcode.filter(ctx, options);
+ const results = await models.Postcode.filter({where: {
+ search: 'one',
+ }}, options);
expect(results.length).toEqual(4);
await tx.rollback();
@@ -92,14 +76,11 @@ describe('Postcode filter()', () => {
const options = {transaction: tx};
try {
- const ctx = {
- filter: {
- where: {
- search: 'Ec',
- }
- },
- };
- const results = await models.Postcode.filter(ctx, options);
+ const results = await models.Postcode.filter({
+ where: {
+ search: 'Ec',
+ }
+ }, options);
expect(results.length).toEqual(1);
await tx.rollback();
diff --git a/back/model-config.json b/back/model-config.json
index a16fe4e8a..13c06ef54 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -28,6 +28,9 @@
"Company": {
"dataSource": "vn"
},
+ "Config": {
+ "dataSource": "vn"
+ },
"Continent": {
"dataSource": "vn"
},
diff --git a/back/models/config.json b/back/models/config.json
new file mode 100644
index 000000000..e5ba1f134
--- /dev/null
+++ b/back/models/config.json
@@ -0,0 +1,22 @@
+{
+ "name": "Config",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "config"
+ }
+ },
+ "properties": {
+ "inventoried": {
+ "type": "date"
+ }
+ },
+ "acls": [
+ {
+ "accessType": "READ",
+ "principalType": "ROLE",
+ "principalId": "$authenticated",
+ "permission": "ALLOW"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/back/models/expedition_PrintOut.json b/back/models/expedition_PrintOut.json
index 23a2fdbc4..dd49b0234 100644
--- a/back/models/expedition_PrintOut.json
+++ b/back/models/expedition_PrintOut.json
@@ -14,6 +14,9 @@
},
"itemFk": {
"type": "number"
+ },
+ "isChecked": {
+ "type": "boolean"
}
}
}
\ No newline at end of file
diff --git a/back/models/postcode.json b/back/models/postcode.json
index eadc2c86c..bad6be5d7 100644
--- a/back/models/postcode.json
+++ b/back/models/postcode.json
@@ -9,7 +9,8 @@
"properties": {
"code": {
"id": true,
- "type": "string"
+ "type": "string",
+ "required": true
}
},
"relations": {
@@ -47,4 +48,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/back/models/town.json b/back/models/town.json
index 4ad729791..e5d39314b 100644
--- a/back/models/town.json
+++ b/back/models/town.json
@@ -12,7 +12,8 @@
"type": "number"
},
"name": {
- "type": "string"
+ "type": "string",
+ "required": true
}
},
"relations": {
@@ -54,4 +55,4 @@
"fields": ["id", "name", "provinceFk"]
}
}
-}
\ No newline at end of file
+}
diff --git a/back/process.yml b/back/process.yml
index a29323240..08fee7a93 100644
--- a/back/process.yml
+++ b/back/process.yml
@@ -2,6 +2,5 @@ apps:
- script: ./loopback/server/server.js
name: salix-back
instances: 1
- max_restarts: 3
- restart_delay: 15000
+ max_restarts: 0
node_args: --tls-min-v1.0 --openssl-legacy-provider
diff --git a/db/dump/.dump/data.sql b/db/dump/.dump/data.sql
index 43f686022..f6bc84db7 100644
--- a/db/dump/.dump/data.sql
+++ b/db/dump/.dump/data.sql
@@ -3,7 +3,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','11117','5558e69e648c3819d4a1edf86f8df4b94d36e71a','2024-07-09 07:39:39','11141');
+INSERT INTO `version` VALUES ('vn-database','11161','36dee872d62ba2421c05503f374f6b208c40ecfa','2024-08-06 07:53:56','11180');
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);
@@ -764,6 +764,7 @@ INSERT INTO `versionLog` VALUES ('vn-database','10955','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','10956','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:58',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10957','00-aclTicketClone.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:58',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10959','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-18 13:32:25',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','10960','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:12',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10962','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-25 08:27:35',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10964','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:52',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10967','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:52',NULL,NULL);
@@ -779,6 +780,7 @@ INSERT INTO `versionLog` VALUES ('vn-database','10977','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','10978','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-06-11 08:32:33',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10983','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 07:39:37',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10984','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','10986','00-addSummaryId.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:12',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10988','00-pbx_prefix.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-04-11 17:00:16',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10990','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10991','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-05-14 07:45:26',NULL,NULL);
@@ -820,6 +822,7 @@ INSERT INTO `versionLog` VALUES ('vn-database','11034','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','11037','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-28 07:32:17',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11038','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-28 07:32:17',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11040','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-28 07:32:31',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11042','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-06 07:53:54',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11044','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-28 07:32:31',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11045','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-05-10 14:53:29',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11046','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-28 07:32:46',NULL,NULL);
@@ -877,8 +880,39 @@ INSERT INTO `versionLog` VALUES ('vn-database','11111','00-firstScript.sql','jen
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','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);
+INSERT INTO `versionLog` VALUES ('vn-database','11119','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:13',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11120','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11121','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11126','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11128','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11129','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11130','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11131','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:15',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11134','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-05 11:02:07',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11135','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:16',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11136','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:22:16',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11137','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:23:33',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11138','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:23:34',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11139','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-08 10:58:01',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11140','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:23:34',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11145','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-09 13:55:46',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11146','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-06 07:53:54',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11149','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:23:35',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11150','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:23:35',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11152','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-16 09:06:11',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11154','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-23 08:23:35',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11155','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-06 07:53:54',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11156','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-06 07:53:54',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11157','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-16 13:11:00',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11158','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-17 17:06:30',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11159','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-18 17:23:32',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11160','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-18 13:46:16',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11161','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-06 07:53:54',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11164','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-23 11:03:16',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11168','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-25 08:58:34',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11169','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-25 12:38:13',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);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
@@ -1248,6 +1282,7 @@ INSERT INTO `roleInherit` VALUES (370,72,130,10578);
INSERT INTO `roleInherit` VALUES (371,36,35,NULL);
INSERT INTO `roleInherit` VALUES (372,126,13,19295);
INSERT INTO `roleInherit` VALUES (373,131,2,19295);
+INSERT INTO `roleInherit` VALUES (375,120,131,1437);
INSERT INTO `userPassword` VALUES (1,7,1,0,2,1);
@@ -1461,7 +1496,7 @@ INSERT INTO `ACL` VALUES (260,'PrintServerQueue','*','WRITE','ALLOW','ROLE','emp
INSERT INTO `ACL` VALUES (261,'SupplierAccount','*','*','ALLOW','ROLE','administrative');
INSERT INTO `ACL` VALUES (262,'Entry','*','*','ALLOW','ROLE','administrative');
INSERT INTO `ACL` VALUES (263,'InvoiceIn','*','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (264,'StarredModule','*','*','ALLOW','ROLE','employee');
+INSERT INTO `ACL` VALUES (264,'StarredModule','*','*','ALLOW','ROLE','$authenticated');
INSERT INTO `ACL` VALUES (265,'ItemBotanical','*','WRITE','ALLOW','ROLE','logisticBoss');
INSERT INTO `ACL` VALUES (266,'ZoneLog','*','READ','ALLOW','ROLE','employee');
INSERT INTO `ACL` VALUES (267,'Genus','*','WRITE','ALLOW','ROLE','logisticBoss');
@@ -1906,12 +1941,12 @@ INSERT INTO `ACL` VALUES (772,'Route','getExpeditionSummary','READ','ALLOW','ROL
INSERT INTO `ACL` VALUES (773,'WorkerTimeControl','login','READ','ALLOW','ROLE','timeControl');
INSERT INTO `ACL` VALUES (774,'WorkerTimeControl','getClockIn','READ','ALLOW','ROLE','timeControl');
INSERT INTO `ACL` VALUES (775,'WorkerTimeControl','clockIn','WRITE','ALLOW','ROLE','timeControl');
-INSERT INTO `ACL` VALUES (776,'WorkerTimeControl','addTimeEntry','WRITE','ALLOW','ROLE','teamBoss');
-INSERT INTO `ACL` VALUES (777,'WorkerTimeControl','deleteTimeEntry','WRITE','ALLOW','ROLE','teamBoss');
-INSERT INTO `ACL` VALUES (778,'WorkerTimeControl','updateTimeEntry','WRITE','ALLOW','ROLE','teamBoss');
+INSERT INTO `ACL` VALUES (776,'WorkerTimeControl','addTimeEntry','WRITE','ALLOW','ROLE','employee');
+INSERT INTO `ACL` VALUES (777,'WorkerTimeControl','deleteTimeEntry','WRITE','ALLOW','ROLE','employee');
+INSERT INTO `ACL` VALUES (778,'WorkerTimeControl','updateTimeEntry','WRITE','ALLOW','ROLE','employee');
INSERT INTO `ACL` VALUES (779,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','developer');
INSERT INTO `ACL` VALUES (780,'WorkerTimeControl','updateMailState','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (781,'WorkerTimeControl','weeklyHourRecordEmail','WRITE','ALLOW','ROLE','teamBoss');
+INSERT INTO `ACL` VALUES (781,'WorkerTimeControl','weeklyHourRecordEmail','WRITE','ALLOW','ROLE','employee');
INSERT INTO `ACL` VALUES (782,'WorkerTimeControl','getMailStates','READ','ALLOW','ROLE','employee');
INSERT INTO `ACL` VALUES (783,'WorkerTimeControl','resendWeeklyHourEmail','WRITE','ALLOW','ROLE','employee');
INSERT INTO `ACL` VALUES (784,'VnRole','*','READ','ALLOW','ROLE','employee');
@@ -2020,6 +2055,14 @@ INSERT INTO `ACL` VALUES (892,'WorkerIncome','*','*','ALLOW','ROLE','hr');
INSERT INTO `ACL` VALUES (893,'PayrollComponent','*','*','ALLOW','ROLE','hr');
INSERT INTO `ACL` VALUES (894,'Worker','__get__incomes','*','ALLOW','ROLE','hr');
INSERT INTO `ACL` VALUES (895,'ItemShelvingLog','*','READ','ALLOW','ROLE','production');
+INSERT INTO `ACL` VALUES (897,'WorkerLog','*','READ','ALLOW','ROLE','employee');
+INSERT INTO `ACL` VALUES (901,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','system');
+INSERT INTO `ACL` VALUES (902,'Entry','filter','READ','ALLOW','ROLE','supplier');
+INSERT INTO `ACL` VALUES (903,'Entry','getBuys','READ','ALLOW','ROLE','supplier');
+INSERT INTO `ACL` VALUES (904,'Entry','buyLabel','READ','ALLOW','ROLE','supplier');
+INSERT INTO `ACL` VALUES (905,'AddressWaste','*','READ','ALLOW','ROLE','production');
+INSERT INTO `ACL` VALUES (906,'Entry','print','READ','ALLOW','ROLE','supplier');
+INSERT INTO `ACL` VALUES (907,'Expedition_PrintOut','*','*','ALLOW','ROLE','production');
INSERT INTO `fieldAcl` VALUES (1,'Client','name','update','employee');
INSERT INTO `fieldAcl` VALUES (2,'Client','contact','update','employee');
@@ -2104,11 +2147,11 @@ INSERT INTO `module` VALUES ('wagon');
INSERT INTO `module` VALUES ('worker');
INSERT INTO `module` VALUES ('zone');
-INSERT INTO `defaultViewConfig` VALUES ('itemsIndex','{\"intrastat\":false,\"stemMultiplier\":false,\"landed\":false,\"producer\":false}');
-INSERT INTO `defaultViewConfig` VALUES ('latestBuys','{\"intrastat\":false,\"description\":false,\"density\":false,\"isActive\":false,\n \"freightValue\":false,\"packageValue\":false,\"isIgnored\":false,\"price2\":false,\"ektFk\":false,\"weight\":false,\n \"size\":false,\"comissionValue\":false,\"landing\":false}');
-INSERT INTO `defaultViewConfig` VALUES ('ticketsMonitor','{\"id\":false}');
-INSERT INTO `defaultViewConfig` VALUES ('clientsDetail','{\"id\":true,\"phone\":true,\"city\":true,\"socialName\":true,\"salesPersonFk\":true,\"email\":true,\"name\":false,\"fi\":false,\"credit\":false,\"creditInsurance\":false,\"mobile\":false,\"street\":false,\"countryFk\":false,\"provinceFk\":false,\"postcode\":false,\"created\":false,\"businessTypeFk\":false,\"payMethodFk\":false,\"sageTaxTypeFk\":false,\"sageTransactionTypeFk\":false,\"isActive\":false,\"isVies\":false,\"isTaxDataChecked\":false,\"isEqualizated\":false,\"isFreezed\":false,\"hasToInvoice\":false,\"hasToInvoiceByAddress\":false,\"isToBeMailed\":false,\"hasLcr\":false,\"hasCoreVnl\":false,\"hasSepaVnl\":false}');
-INSERT INTO `defaultViewConfig` VALUES ('routesList','{\"ID\":true,\"worker\":true,\"agency\":true,\"vehicle\":true,\"date\":true,\"volume\":true,\"description\":true,\"started\":true,\"finished\":true,\"actions\":true}');
+INSERT INTO `defaultViewMultiConfig` VALUES ('itemsIndex','{\"intrastat\":false,\"stemMultiplier\":false,\"landed\":false,\"producer\":false}');
+INSERT INTO `defaultViewMultiConfig` VALUES ('latestBuys','{\"intrastat\":false,\"description\":false,\"density\":false,\"isActive\":false,\n \"freightValue\":false,\"packageValue\":false,\"isIgnored\":false,\"price2\":false,\"ektFk\":false,\"weight\":false,\n \"size\":false,\"comissionValue\":false,\"landing\":false}');
+INSERT INTO `defaultViewMultiConfig` VALUES ('ticketsMonitor','{\"id\":false}');
+INSERT INTO `defaultViewMultiConfig` VALUES ('clientsDetail','{\"id\":true,\"phone\":true,\"city\":true,\"socialName\":true,\"salesPersonFk\":true,\"email\":true,\"name\":false,\"fi\":false,\"credit\":false,\"creditInsurance\":false,\"mobile\":false,\"street\":false,\"countryFk\":false,\"provinceFk\":false,\"postcode\":false,\"created\":false,\"businessTypeFk\":false,\"payMethodFk\":false,\"sageTaxTypeFk\":false,\"sageTransactionTypeFk\":false,\"isActive\":false,\"isVies\":false,\"isTaxDataChecked\":false,\"isEqualizated\":false,\"isFreezed\":false,\"hasToInvoice\":false,\"hasToInvoiceByAddress\":false,\"isToBeMailed\":false,\"hasLcr\":false,\"hasCoreVnl\":false,\"hasSepaVnl\":false}');
+INSERT INTO `defaultViewMultiConfig` VALUES ('routesList','{\"ID\":true,\"worker\":true,\"agency\":true,\"vehicle\":true,\"date\":true,\"volume\":true,\"description\":true,\"started\":true,\"finished\":true,\"actions\":true}');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
@@ -2120,9 +2163,10 @@ USE `vn`;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
INSERT INTO `alertLevel` VALUES ('FREE',0,1);
-INSERT INTO `alertLevel` VALUES ('ON_PREPARATION',1,1);
-INSERT INTO `alertLevel` VALUES ('PACKED',2,0);
-INSERT INTO `alertLevel` VALUES ('DELIVERED',3,0);
+INSERT INTO `alertLevel` VALUES ('ON_PREVIOUS',1,1);
+INSERT INTO `alertLevel` VALUES ('ON_PREPARATION',2,1);
+INSERT INTO `alertLevel` VALUES ('PACKED',3,0);
+INSERT INTO `alertLevel` VALUES ('DELIVERED',4,0);
INSERT INTO `bookingPlanner` VALUES (5,'2017-07-01 00:00:00','4770000002','WORLD',7,4,1);
INSERT INTO `bookingPlanner` VALUES (6,'2017-07-01 00:00:00','4770000010','NATIONAL',3,1,1);
@@ -2321,18 +2365,18 @@ INSERT INTO `component` VALUES (47,'promocion Italia',4,NULL,NULL,1,'italianOffe
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 `componentType` VALUES (1,'coste',1,0,'COST');
-INSERT INTO `componentType` VALUES (2,'com ventas',1,1,NULL);
-INSERT INTO `componentType` VALUES (3,'com compras',1,1,NULL);
-INSERT INTO `componentType` VALUES (4,'empresa',1,1,'MARGIN');
-INSERT INTO `componentType` VALUES (5,'cliente',0,0,NULL);
-INSERT INTO `componentType` VALUES (6,'agencia',0,0,'FREIGHT');
-INSERT INTO `componentType` VALUES (7,'cartera_comercial',0,0,'MANA');
-INSERT INTO `componentType` VALUES (8,'cartera_producto',0,1,NULL);
-INSERT INTO `componentType` VALUES (9,'maniobra',1,0,NULL);
-INSERT INTO `componentType` VALUES (10,'cartera_comprador',0,1,NULL);
-INSERT INTO `componentType` VALUES (11,'errores',0,1,NULL);
-INSERT INTO `componentType` VALUES (12,'otros',0,1,NULL);
+INSERT INTO `componentType` VALUES (1,'cost','coste',1,0);
+INSERT INTO `componentType` VALUES (2,NULL,'com ventas',1,1);
+INSERT INTO `componentType` VALUES (3,NULL,'com compras',1,1);
+INSERT INTO `componentType` VALUES (4,'margin','empresa',1,1);
+INSERT INTO `componentType` VALUES (5,NULL,'cliente',0,0);
+INSERT INTO `componentType` VALUES (6,'freight','agencia',0,0);
+INSERT INTO `componentType` VALUES (7,'mana','cartera_comercial',0,0);
+INSERT INTO `componentType` VALUES (8,NULL,'cartera_producto',0,1);
+INSERT INTO `componentType` VALUES (9,NULL,'maniobra',1,0);
+INSERT INTO `componentType` VALUES (10,NULL,'cartera_comprador',0,1);
+INSERT INTO `componentType` VALUES (11,NULL,'errores',0,1);
+INSERT INTO `componentType` VALUES (12,'other','otros',0,1);
INSERT INTO `continent` VALUES (1,'Asia','AS');
INSERT INTO `continent` VALUES (2,'América','AM');
@@ -2340,61 +2384,62 @@ INSERT INTO `continent` VALUES (3,'África','AF');
INSERT INTO `continent` VALUES (4,'Europa','EU');
INSERT INTO `continent` VALUES (5,'Oceanía','OC');
-INSERT INTO `department` VALUES (1,'VN','VERDNATURA',1,110,763,0,0,0,0,26,NULL,'/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (22,'shopping','COMPRAS',2,3,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (23,'CMA','CAMARA',13,14,NULL,72,1,1,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,1,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (31,'it','INFORMATICA',4,5,NULL,72,0,0,1,0,1,'/1/','informatica-cau',1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (34,'accounting','CONTABILIDAD',6,7,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (35,'finance','FINANZAS',8,9,NULL,0,0,0,1,0,1,'/1/',NULL,1,'begonya@verdnatura.es',1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (36,'labor','LABORAL',10,11,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (37,'PROD','PRODUCCION',12,35,NULL,72,1,1,1,11,1,'/1/',NULL,0,NULL,0,1,1,1,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (38,'picking','SACADO',15,16,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (39,'packing','ENCAJADO',17,18,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (41,'administration','ADMINISTRACION',36,37,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (43,'VT','VENTAS',38,69,NULL,0,0,0,1,15,1,'/1/',NULL,1,'',1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (44,'management','GERENCIA',70,71,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (45,'logistic','LOGISTICA',72,73,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (46,'delivery','REPARTO',74,75,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (48,'storage','ALMACENAJE',76,77,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (49,NULL,'PROPIEDAD',78,79,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (52,NULL,'CARGA AEREA',80,81,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (53,'marketing','MARKETING Y COMUNICACIÓN',39,40,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (54,NULL,'ORNAMENTALES',82,83,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (55,NULL,'TALLER NATURAL',19,20,14548,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1118,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (56,NULL,'TALLER ARTIFICIAL',21,22,8470,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1927,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (58,'CMP','CAMPOS',84,87,NULL,72,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (59,'maintenance','MANTENIMIENTO',88,89,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (60,'claims','RECLAMACIONES',41,42,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,1,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (61,NULL,'VNH',90,93,NULL,73,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (66,NULL,'VERDNAMADRID',94,95,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (68,NULL,'COMPLEMENTOS',23,24,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (69,NULL,'VERDNABARNA',96,97,NULL,74,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (80,'spainTeam5','EQUIPO ESPAÑA 5',43,44,4250,0,0,0,2,0,43,'/1/43/','es5_equipo',1,'es5@verdnatura.es',0,0,0,0,NULL,NULL,'5300',NULL);
-INSERT INTO `department` VALUES (86,NULL,'LIMPIEZA',98,99,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (89,NULL,'COORDINACION',100,101,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (90,NULL,'TRAILER',91,92,NULL,0,0,0,2,0,61,'/1/61/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (91,'artificial','ARTIFICIAL',25,26,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (92,NULL,'EQUIPO SILVERIO',45,46,1203,0,0,0,2,0,43,'/1/43/','sdc_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (94,'spainTeam2','EQUIPO ESPAÑA 2',47,48,3797,0,0,0,2,0,43,'/1/43/','es2_equipo',1,'es2@verdnatura.es',0,0,0,0,NULL,NULL,'5100',NULL);
-INSERT INTO `department` VALUES (95,'spainTeam1','EQUIPO ESPAÑA 1',49,50,24065,0,0,0,2,0,43,'/1/43/','es1_equipo',1,'es1@verdnatura.es',0,0,0,0,NULL,NULL,'5000',NULL);
-INSERT INTO `department` VALUES (96,NULL,'EQUIPO C LOPEZ',51,52,4661,0,0,0,2,0,43,'/1/43/','cla_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (115,NULL,'EQUIPO CLAUDI',53,54,3810,0,0,0,2,0,43,'/1/43/','csr_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (123,NULL,'EQUIPO ELENA BASCUÑANA',55,56,7102,0,0,0,2,0,43,'/1/43/','ebt_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (124,NULL,'CONTROL INTERNO',102,103,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (125,'spainTeam3','EQUIPO ESPAÑA 3',57,58,1118,0,0,0,2,0,43,'/1/43/','es3_equipo',1,'es3@verdnatura.es',0,0,0,0,NULL,NULL,'5200',NULL);
-INSERT INTO `department` VALUES (126,NULL,'PRESERVADO',27,28,NULL,0,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (128,NULL,'PALETIZADO',29,30,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (130,NULL,'REVISION',31,32,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (131,'greenhouse','INVERNADERO',85,86,NULL,0,0,0,2,0,58,'/1/58/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (132,NULL,'EQUIPO DC',59,60,1731,0,0,0,2,0,43,'/1/43/','dc_equipo',1,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (133,'franceTeam','EQUIPO FRANCIA',61,62,1731,72,0,0,2,0,43,'/1/43/','fr_equipo',1,'gestionfrancia@verdnatura.es',0,0,0,0,NULL,NULL,'3300',NULL);
-INSERT INTO `department` VALUES (134,'portugalTeam','EQUIPO PORTUGAL',63,64,6264,0,0,0,2,0,43,'/1/43/','pt_equipo',1,'portugal@verdnatura.es',0,0,0,0,NULL,NULL,'3500',NULL);
-INSERT INTO `department` VALUES (135,'routers','ENRUTADORES',104,105,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (136,'heavyVehicles','VEHICULOS PESADOS',106,107,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (137,'sorter','SORTER',108,109,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',65,66,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',67,68,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',33,34,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (1,'VN','VERDNATURA',1,112,763,0,0,0,0,26,NULL,'/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (22,'shopping','COMPRAS',2,5,NULL,72,0,0,1,1,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (23,'CMA','CAMARA',15,16,NULL,72,1,1,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (31,'it','INFORMATICA',6,7,NULL,72,0,0,1,0,1,'/1/','informatica-cau',1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (34,'accounting','CONTABILIDAD',8,9,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (35,'finance','FINANZAS',10,11,NULL,0,0,0,1,0,1,'/1/',NULL,1,'begonya@verdnatura.es',1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (36,'labor','LABORAL',12,13,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (37,'PROD','PRODUCCION',14,37,NULL,72,1,1,1,11,1,'/1/',NULL,0,NULL,0,1,1,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (38,'picking','SACADO',17,18,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (39,'packing','ENCAJADO',19,20,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (41,'administration','ADMINISTRACION',38,39,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (43,'VT','VENTAS',40,71,NULL,0,0,0,1,15,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (44,'management','GERENCIA',72,73,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (45,'logistic','LOGISTICA',74,75,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (46,'delivery','REPARTO',76,77,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (48,'storage','ALMACENAJE',78,79,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (49,NULL,'PROPIEDAD',80,81,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (52,NULL,'CARGA AEREA',82,83,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (53,'marketing','MARKETING Y COMUNICACIÓN',41,42,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (54,NULL,'ORNAMENTALES',84,85,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (55,NULL,'TALLER NATURAL',21,22,14548,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1118,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (56,NULL,'TALLER ARTIFICIAL',23,24,8470,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1927,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (58,'CMP','CAMPOS',86,89,NULL,72,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (59,'maintenance','MANTENIMIENTO',90,91,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (60,'claims','RECLAMACIONES',43,44,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,1,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (61,NULL,'VNH',92,95,NULL,73,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (66,NULL,'VERDNAMADRID',96,97,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (68,NULL,'COMPLEMENTOS',25,26,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (69,NULL,'VERDNABARNA',98,99,NULL,74,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (80,'spainTeam5','EQUIPO ESPAÑA 5',45,46,4250,0,0,0,2,0,43,'/1/43/','es5_equipo',1,'es5@verdnatura.es',0,0,0,0,NULL,NULL,'5300',NULL);
+INSERT INTO `department` VALUES (86,NULL,'LIMPIEZA',100,101,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (89,NULL,'COORDINACION',102,103,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (90,NULL,'TRAILER',93,94,NULL,0,0,0,2,0,61,'/1/61/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (91,'artificial','ARTIFICIAL',27,28,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (92,NULL,'EQUIPO SILVERIO',47,48,1203,0,0,0,2,0,43,'/1/43/','sdc_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (94,'spainTeam2','EQUIPO ESPAÑA 2',49,50,3797,0,0,0,2,0,43,'/1/43/','es2_equipo',1,'es2@verdnatura.es',0,0,0,0,NULL,NULL,'5100',NULL);
+INSERT INTO `department` VALUES (95,'spainTeam1','EQUIPO ESPAÑA 1',51,52,24065,0,0,0,2,0,43,'/1/43/','es1_equipo',1,'es1@verdnatura.es',0,0,0,0,NULL,NULL,'5000',NULL);
+INSERT INTO `department` VALUES (96,NULL,'EQUIPO C LOPEZ',53,54,4661,0,0,0,2,0,43,'/1/43/','cla_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (115,NULL,'EQUIPO CLAUDI',55,56,3810,0,0,0,2,0,43,'/1/43/','csr_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (123,NULL,'EQUIPO ELENA BASCUÑANA',57,58,7102,0,0,0,2,0,43,'/1/43/','ebt_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (124,NULL,'CONTROL INTERNO',104,105,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (125,'spainTeam3','EQUIPO ESPAÑA 3',59,60,1118,0,0,0,2,0,43,'/1/43/','es3_equipo',1,'es3@verdnatura.es',0,0,0,0,NULL,NULL,'5200',NULL);
+INSERT INTO `department` VALUES (126,NULL,'PRESERVADO',29,30,NULL,0,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (128,NULL,'PALETIZADO',31,32,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (130,NULL,'REVISION',33,34,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (131,'greenhouse','INVERNADERO',87,88,NULL,0,0,0,2,0,58,'/1/58/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (132,NULL,'EQUIPO DC',61,62,1731,0,0,0,2,0,43,'/1/43/','dc_equipo',1,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (133,'franceTeam','EQUIPO FRANCIA',63,64,1731,72,0,0,2,0,43,'/1/43/','fr_equipo',1,'gestionfrancia@verdnatura.es',0,0,0,0,NULL,NULL,'3300',NULL);
+INSERT INTO `department` VALUES (134,'portugalTeam','EQUIPO PORTUGAL',65,66,6264,0,0,0,2,0,43,'/1/43/','pt_equipo',1,'portugal@verdnatura.es',0,0,0,0,NULL,NULL,'3500',NULL);
+INSERT INTO `department` VALUES (135,'routers','ENRUTADORES',106,107,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (136,'heavyVehicles','VEHICULOS PESADOS',108,109,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (137,'sorter','SORTER',110,111,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 (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 `docuware` VALUES (1,'deliveryNote','Albaranes cliente','find','find','N__ALBAR_N',NULL);
INSERT INTO `docuware` VALUES (2,'deliveryNote','Albaranes cliente','store','Archivar','N__ALBAR_N',NULL);
@@ -2656,38 +2701,39 @@ INSERT INTO `state` VALUES (1,'Arreglar',2,0,'FIXING',NULL,1,0,0,0,0,0,0,4,1,'al
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,0,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,1,'ON_PREPARATION',7,14,0,0,0,2,0,0,2,0,'warning');
-INSERT INTO `state` VALUES (6,'En Revisión',7,1,'ON_CHECKING',NULL,6,0,1,0,3,0,0,1,0,'warning');
+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,1,'CHECKED',NULL,8,0,1,0,3,0,0,1,0,'warning');
-INSERT INTO `state` VALUES (9,'Encajando',9,2,'PACKING',NULL,9,0,1,0,0,0,0,1,0,NULL);
-INSERT INTO `state` VALUES (10,'Encajado',10,2,'PACKED',NULL,10,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (11,'Facturado',0,3,'INVOICED',NULL,11,0,1,0,0,0,0,0,0,NULL);
+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,3,'ON_DELIVERY',NULL,13,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (14,'Preparado',6,1,'PREPARED',NULL,14,0,1,0,2,0,0,1,0,'warning');
-INSERT INTO `state` VALUES (15,'Pte Recogida',12,3,'WAITING_FOR_PICKUP',NULL,15,0,1,0,0,0,0,0,0,NULL);
-INSERT INTO `state` VALUES (16,'Entregado',13,3,'DELIVERED',NULL,16,0,1,0,0,0,0,0,0,NULL);
+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,1,'PRINTED_BACK',6,21,0,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,1,'LAST_CALL',NULL,23,1,0,1,0,0,0,4,1,'success');
+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,1,'ASSISTED_PREPARATION',7,27,0,0,0,0,0,0,2,0,'success');
+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,1,'BOARD',5,30,0,0,0,2,0,0,3,0,'success');
-INSERT INTO `state` VALUES (31,'Polizon Impreso',4,1,'PRINTED STOWAWAY',2,29,1,0,1,0,0,1,2,0,'success');
-INSERT INTO `state` VALUES (32,'Polizon OK',3,1,'OK STOWAWAY',3,31,1,0,0,1,1,1,3,0,'warning');
+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,2,'HALF_PACKED',NULL,10,0,1,0,0,0,0,1,0,NULL);
+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,1,'COOLER_PREPARATION',7,14,0,0,0,2,0,0,2,0,'warning');
-INSERT INTO `state` VALUES (41,'Prep Parcial',6,1,'PARTIAL_PREPARATION',7,14,0,0,0,2,0,0,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 `ticketUpdateAction` VALUES (1,'Cambiar los precios en el ticket','renewPrices');
INSERT INTO `ticketUpdateAction` VALUES (2,'Convertir en maná','mana');
diff --git a/db/dump/.dump/privileges.sql b/db/dump/.dump/privileges.sql
index c063df7ae..7776e6d5a 100644
--- a/db/dump/.dump/privileges.sql
+++ b/db/dump/.dump/privileges.sql
@@ -464,6 +464,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','productionAssi','Reservas
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryAssistant','cmr','guillermo@db-proxy1.static.verdnatura.es','0000-00-00 00:00:00','Insert,Update,Delete','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','employee','Rutas','alexm@%','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','address','alexm@%','0000-00-00 00:00:00','Insert','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','pbx','grafana','queue','root@localhost','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','address','alexm@%','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','accountingType','guillermo@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','itemShelvingStock_byWarehouse','guillermo@db-proxy1.static.verdnatura.es','0000-00-00 00:00:00','Select','');
@@ -738,7 +739,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','productionAssi','mrw','guille
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','mrwService','alexm@%','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','administrative','ppePlan','alexm@%','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hrBoss','accountingConfig','alexm@%','0000-00-00 00:00:00','Select','');
-INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','buy','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Delete','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','buy','carlosap@10.5.1.8','0000-00-00 00:00:00','Select,Update,Delete','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','logistic','buy','alexm@%','0000-00-00 00:00:00','Delete','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','saleGoal','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','packager','packingSiteLog','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Insert','');
@@ -777,6 +778,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','productionAssi','vehicleState
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','productionAssi','vehicleEvent','alexm@%','0000-00-00 00:00:00','Select,Insert','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','cooler','Tintas','alexm@%','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','administrative','itemBotanical','alexm@%','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','productionConfigLog','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','account','developer','signInLog','juan@db-proxy1.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','ticketTracking','alexm@db-proxy1.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','productionAssi','deviceProductionState','alexm@%','0000-00-00 00:00:00','Select','');
@@ -787,6 +789,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','printServerQueue__
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','artificialBoss','buy','alexm@%','0000-00-00 00:00:00','Update','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','hr','Movimientos','alexm@%','0000-00-00 00:00:00','Update','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','coolerAssist','buy','alexm@%','0000-00-00 00:00:00','Update','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','itemMinimumQuantity','jenkins@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','adminOfficer','receipt','guillermo@db-proxy1.static.verdnatura.es','0000-00-00 00:00:00','Insert','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','buyerBoss','producer','alexm@%','0000-00-00 00:00:00','Update','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','administrative','link','alexm@%','0000-00-00 00:00:00','Select','');
@@ -1003,7 +1006,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','calendar','juan@db-
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','campaign','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','ticketService','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','report','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
-INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','buyer','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','buyer','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','bs','grafana','defaulter','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','componentType','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','clientManaCache','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
@@ -1274,7 +1277,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','bs','grafana','workerProductivityC
INSERT IGNORE INTO `tables_priv` VALUES ('','srt','grafana','antenna','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','cmr','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','accounting','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
-INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','creditClassification','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','creditClassification','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','ticketLog','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','srt','grafana','moving','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','claimDevelopment','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
@@ -1289,6 +1292,8 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','srt','grafana','buffer','juan@db-p
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','greuge','juan@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','item','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','','Select,Update');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','coolerBoss','itemShelving','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Update','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','agencyIncoming','alexm@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','addressObservation','carlosap@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','negativeOrigin','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryBoss','Vehiculos_consumo','carlosap@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','entryOrder','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Delete','');
@@ -1354,6 +1359,8 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','administrative','accounting',
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','accounting','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','workerActivity','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','ticketRequest','guillermo@10.5.1.3','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryAssistant','Vehiculos_consumo','carlosap@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','administrative','budgetState','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryBoss','vehicleState','jgallego@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','srt','grafana','expeditionState','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','specialPrice','jgallego@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
@@ -1376,6 +1383,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','professionalCategor
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','production','ticketObservation','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Insert','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','deliveryNoteState','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','deliveryNote','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','inventoryConfig','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','comparative','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','invoiceOutExpense','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','delivery','carlosap@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
@@ -1389,9 +1397,9 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','bs','buyer','waste','alexm@db-prox
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','clientObservation','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','hedera','grafana','visit','root@localhost','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','workerActivity','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
-INSERT IGNORE INTO `tables_priv` VALUES ('','vn','financial','bankPolicy','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Delete','');
-INSERT IGNORE INTO `tables_priv` VALUES ('','vn','financial','bankPolicyDetail','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Delete','');
-INSERT IGNORE INTO `tables_priv` VALUES ('','vn','financial','bankPolicyReview','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','financial','bankPolicy','jgallego@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','financial','bankPolicyDetail','jgallego@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','financial','bankPolicyReview','jgallego@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','roadmapStop','guillermo@10.5.1.3','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','production','roadmapStop','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','agencyWorkCenter','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
@@ -1401,6 +1409,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','teamBoss','business','guiller
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','ticketServiceType','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','employee','business','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','','Select');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','supplierAgencyTerm','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','itemMinimumQuantity','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','clientRate','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','entryEditor','Entradas','guillermo@10.5.1.3','0000-00-00 00:00:00','Insert','Update');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','administrative','clientInforma','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
@@ -1425,12 +1434,27 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','businessReasonEnd','guil
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','buyer','buy_edi','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','buyer','buySource','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','bi','salesPerson','claims_ratio','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','hedera','employee','shelfMultiConfig','jenkins@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','clientConfig','carlosap@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryBoss','albaran','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryBoss','albaran_gestdoc','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryBoss','albaran_state','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryBoss','deliveryNote','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryBoss','deliveryNoteDms','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryBoss','deliveryNoteState','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','salesPerson','buy','alexm@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','entryType','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','productionBoss','claimDestination','juan@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','entryLog','alexm@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','dipole','grafana','expedition_PrintOut','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','ticketObservation','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','recovery','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','observationType','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','clientInforma','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','accountingType','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','bankPolicyDetail','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','bankPolicyReview','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','bankPolicy','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 */;
@@ -1902,6 +1926,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','salesAssistant','invoiceoutboo
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','ticket_gettax','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','util','productionAssi','midnight','FUNCTION','alexm@%','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','dipole','employee','expedition_add','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemshelving_transfer','PROCEDURE','alexm@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','coolerBoss','itempacking','FUNCTION','alexm@%','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','salesPerson','ticket_clone','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','cache','employee','available_refresh','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00');
@@ -2031,6 +2056,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','account','developer','user_hasrouti
INSERT IGNORE INTO `procs_priv` VALUES ('','account','grafana','user_hasRole','FUNCTION','jgallego@db-proxy2.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','util','guest','time_generate','PROCEDURE','jenkins@db-proxy2.static.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemshelving_addbyclaim','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
+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','production','item_getsimilar','PROCEDURE','alexm@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00');
@@ -2156,6 +2182,17 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','claimManager','buy_recalcPrice
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','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');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_unpicked','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','collection_getAssigned','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','collection_addWithReservation','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_addBySectorCollection','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','sectorCollection_hasSalesReserved','FUNCTION','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_reallocate','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_setPicked','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','sectorCollection_getMyPartial','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','grafana-write','item_ValuateInventory','PROCEDURE','guillermo@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','guest','ticketCalculatePurge','PROCEDURE','jenkins@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 */;
@@ -2196,6 +2233,7 @@ INSERT IGNORE INTO `global_priv` VALUES ('','financial','{\"access\": 0, \"vers
INSERT IGNORE INTO `global_priv` VALUES ('','financialBoss','{\"access\": 0, \"version_id\": 101106, \"is_role\": true}');
INSERT IGNORE INTO `global_priv` VALUES ('','floranet','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
INSERT IGNORE INTO `global_priv` VALUES ('','grafana','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
+INSERT IGNORE INTO `global_priv` VALUES ('','grafana-write','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
INSERT IGNORE INTO `global_priv` VALUES ('','greenhouseBoss','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
INSERT IGNORE INTO `global_priv` VALUES ('','guest','{\"access\": 0, \"max_questions\": 40000, \"max_updates\": 1000, \"max_connections\": 150000, \"max_user_connections\": 200, \"max_statement_time\": 0.000000, \"is_role\": true, \"version_id\": 101106}');
INSERT IGNORE INTO `global_priv` VALUES ('','handmadeBoss','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
diff --git a/db/dump/.dump/structure.sql b/db/dump/.dump/structure.sql
index 9b5e9e4a7..4790e156c 100644
--- a/db/dump/.dump/structure.sql
+++ b/db/dump/.dump/structure.sql
@@ -89,6 +89,7 @@ CREATE TABLE `accountLog` (
`host` varchar(255) NOT NULL,
`rhost` varchar(255) NOT NULL,
`time` varchar(255) NOT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -156,11 +157,14 @@ CREATE TABLE `mailAliasAccount` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`mailAlias` int(10) unsigned NOT NULL,
`account` int(10) unsigned NOT NULL,
+ `editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mailAlias` (`mailAlias`,`account`),
KEY `account` (`account`),
+ KEY `mailAliasAccount_editorFk` (`editorFk`),
CONSTRAINT `account` FOREIGN KEY (`account`) REFERENCES `account` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `mailAlias` FOREIGN KEY (`mailAlias`) REFERENCES `mailAlias` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+ CONSTRAINT `mailAlias` FOREIGN KEY (`mailAlias`) REFERENCES `mailAlias` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `mailAliasAccount_editorFk` FOREIGN KEY (`editorFk`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Mail alias that is assigned to each account';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -361,6 +365,7 @@ CREATE TABLE `roleLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `roleLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -420,6 +425,7 @@ CREATE TABLE `signInLog` (
`userName` varchar(30) NOT NULL,
`ip` varchar(100) NOT NULL,
`owner` tinyint(1) DEFAULT 1,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
CONSTRAINT `signInLog_ibfk_1` FOREIGN KEY (`userFk`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
@@ -503,6 +509,7 @@ CREATE TABLE `userLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `userLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -3732,7 +3739,7 @@ BEGIN
JOIN vn.saleComponent sc ON sc.saleFk = s.id
JOIN vn.component c ON c.id = sc.componentFk
JOIN vn.componentType ct ON ct.id = c.typeFk
- WHERE ct.code = 'FREIGHT'
+ WHERE ct.code = 'freight'
AND r.created BETWEEN vDatedFrom AND vDatedTo
GROUP BY r.id
) sub ON sub.routeFk = r.Id_Ruta
@@ -4492,20 +4499,22 @@ DROP TABLE IF EXISTS `waste`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `waste` (
- `buyer` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`year` int(4) NOT NULL,
`week` int(2) NOT NULL,
- `family` varchar(30) NOT NULL,
+ `buyerFk` int(10) unsigned NOT NULL,
+ `itemTypeFk` smallint(5) unsigned NOT NULL,
`itemFk` int(11) NOT NULL DEFAULT 0,
- `itemTypeFk` smallint(5) unsigned DEFAULT NULL,
- `saleTotal` decimal(16,0) DEFAULT NULL,
- `saleWaste` decimal(16,0) DEFAULT NULL,
- `rate` decimal(5,1) DEFAULT NULL,
- PRIMARY KEY (`buyer`,`year`,`week`,`family`,`itemFk`),
+ `saleQuantity` decimal(10,2) DEFAULT NULL,
+ `saleTotal` decimal(10,2) DEFAULT NULL,
+ `saleInternalWaste` decimal(10,2) DEFAULT NULL,
+ `saleExternalWaste` decimal(10,2) DEFAULT NULL,
+ PRIMARY KEY (`year`,`week`,`buyerFk`,`itemTypeFk`,`itemFk`),
KEY `waste_itemType_id` (`itemTypeFk`),
KEY `waste_item_id` (`itemFk`),
+ KEY `waste_user_FK` (`buyerFk`),
CONSTRAINT `waste_itemType_id` FOREIGN KEY (`itemTypeFk`) REFERENCES `vn`.`itemType` (`id`),
- CONSTRAINT `waste_item_id` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON UPDATE CASCADE
+ CONSTRAINT `waste_item_id` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `waste_user_FK` FOREIGN KEY (`buyerFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -6518,32 +6527,51 @@ DELIMITER ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `waste_addSales`()
BEGIN
- DECLARE vWeek INT;
- DECLARE vYear INT;
+ DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY;
+ DECLARE vDateTo DATE DEFAULT vDateFrom + INTERVAL 6 DAY;
+
+ CALL cache.last_buy_refresh(FALSE);
- SELECT week, year
- INTO vWeek, vYear
- FROM vn.time
- WHERE dated = util.VN_CURDATE();
-
REPLACE bs.waste
- SELECT *, 100 * mermas / total as porcentaje
- FROM (
- SELECT buyer,
- year,
- week,
- family,
- itemFk,
- itemTypeFk,
- floor(sum(value)) as total,
- floor(sum(IF(typeFk = 'loses', value, 0))) as mermas
- FROM vn.saleValue
- where year = vYear and week = vWeek
-
- GROUP BY family, itemFk
-
- ) sub
- ORDER BY mermas DESC;
+ SELECT YEAR(t.shipped),
+ WEEK(t.shipped, 4),
+ it.workerFk,
+ it.id,
+ s.itemFk,
+ SUM(s.quantity),
+ SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity) `value`,
+ SUM (
+ IF(
+ aw.`type` = 'internal',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ 0
+ )
+ ) internalWaste,
+ SUM (
+ IF(
+ aw.`type` = 'external',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ IF(c.code = 'manaClaim',
+ sc.value * s.quantity,
+ 0
+ )
+ )
+ ) externalWaste
+ FROM vn.sale s
+ JOIN vn.item i ON i.id = s.itemFk
+ JOIN vn.itemType it ON it.id = i.typeFk
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ JOIN vn.address a FORCE INDEX (PRIMARY) ON a.id = t.addressFk
+ LEFT JOIN vn.addressWaste aw ON aw.addressFk = a.id
+ JOIN vn.warehouse w ON w.id = t.warehouseFk
+ JOIN cache.last_buy lb ON lb.item_id = i.id
+ AND lb.warehouse_id = w.id
+ JOIN vn.buy b ON b.id = lb.buy_id
+ LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id
+ LEFT JOIN vn.component c ON c.id = sc.componentFk
+ WHERE t.shipped BETWEEN vDateFrom AND vDateTo
+ AND w.isManaged
+ GROUP BY it.id, i.id;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -7194,7 +7222,7 @@ proc: BEGIN
)sub
GROUP BY sub.itemFk;
- DROP TEMPORARY TABLE tmp.itemCalc, tItemRange;
+ DROP TEMPORARY TABLE tmp.itemCalc, tItemRange, tmp.itemList;
CALL cache_calc_end (vCalc);
END ;;
DELIMITER ;
@@ -7369,7 +7397,7 @@ proc: BEGIN
)sub
GROUP BY sub.itemFk;
- DROP TEMPORARY TABLE tmp.itemCalc, itemRange;
+ DROP TEMPORARY TABLE tmp.itemCalc, itemRange, tmp.itemList;
CALL cache_calc_end (vCalc);
END ;;
DELIMITER ;
@@ -7738,7 +7766,7 @@ proc: BEGIN
SELECT inventoried INTO started FROM vn.config LIMIT 1;
SET ended = util.VN_CURDATE(); -- TIMESTAMPADD(DAY, -1, util.VN_CURDATE());
- CALL vn.buyUltimateFromInterval(NULL, started, ended);
+ CALL vn.buy_getUltimateFromInterval(NULL, NULL, started, ended);
DELETE FROM last_buy;
@@ -7862,14 +7890,14 @@ DELIMITER ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `visible_refresh`(OUT v_calc INT, v_refresh BOOL, v_warehouse INT)
-proc: BEGIN
+proc:BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
CALL cache_calc_unlock (v_calc);
RESIGNAL;
END;
- CALL cache_calc_start (v_calc, v_refresh, 'visible', v_warehouse);
+ CALL cache_calc_start (v_calc, v_refresh, 'visible', v_warehouse);
IF !v_refresh THEN
LEAVE proc;
@@ -7877,22 +7905,26 @@ proc: BEGIN
-- Calculamos el stock hasta ayer
- CALL `cache`.stock_refresh(false);
+ CALL cache.stock_refresh(false);
CREATE OR REPLACE TEMPORARY TABLE tmp.itemVisible
(PRIMARY KEY (item_id))
ENGINE = MEMORY
- SELECT item_id, amount stock, amount visible FROM `cache`.stock
- WHERE warehouse_id = v_warehouse;
+ SELECT s.item_id, SUM(s.amount) stock, SUM(s.amount) visible
+ FROM stock s
+ JOIN vn.warehouse w ON w.id = s.warehouse_id
+ WHERE (v_warehouse IS NULL OR s.warehouse_id = v_warehouse)
+ AND w.isComparative
+ GROUP BY s.item_id;
-- Calculamos los movimientos confirmados de hoy
- CALL vn.item_GetVisible(v_warehouse, NULL);
+ CALL vn.item_calcVisible(NULL, v_warehouse);
DELETE FROM visible WHERE calc_id = v_calc;
INSERT INTO visible (calc_id, item_id,visible)
SELECT v_calc, item_id, visible FROM tmp.itemVisible;
- CALL cache_calc_end (v_calc);
+ CALL cache_calc_end (v_calc);
DROP TEMPORARY TABLE tmp.itemVisible;
END ;;
@@ -7956,6 +7988,7 @@ CREATE TABLE `expedition_PrintOut` (
`longName` varchar(30) DEFAULT NULL,
`shelvingFk` varchar(5) DEFAULT NULL,
`comments` varchar(100) DEFAULT NULL,
+ `isChecked` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indica si la expedición ha sido revisada por un revisor',
PRIMARY KEY (`expeditionFk`),
KEY `expedition_PrintOut_FK` (`printerFk`),
CONSTRAINT `expedition_PrintOut_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
@@ -8456,7 +8489,6 @@ SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `ektRecent` AS SELECT
1 AS `id`,
- 1 AS `barcode`,
1 AS `entryYear`,
1 AS `batchNumber`,
1 AS `deliveryNumber`,
@@ -8601,13 +8633,13 @@ CREATE TABLE `feature` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `fileConfig`
+-- Table structure for table `fileMultiConfig`
--
-DROP TABLE IF EXISTS `fileConfig`;
+DROP TABLE IF EXISTS `fileMultiConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `fileConfig` (
+CREATE TABLE `fileMultiConfig` (
`name` varchar(25) NOT NULL,
`checksum` text DEFAULT NULL,
`keyValue` tinyint(1) NOT NULL DEFAULT 1,
@@ -8680,13 +8712,13 @@ CREATE TABLE `goodCharacteristic` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `imapConfig`
+-- Table structure for table `imapMultiConfig`
--
-DROP TABLE IF EXISTS `imapConfig`;
+DROP TABLE IF EXISTS `imapMultiConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `imapConfig` (
+CREATE TABLE `imapMultiConfig` (
`id` tinyint(3) unsigned NOT NULL,
`environment` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`host` varchar(150) NOT NULL DEFAULT 'localhost',
@@ -9212,13 +9244,13 @@ CREATE TABLE `supplyResponseLog` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `tableConfig`
+-- Table structure for table `tableMultiConfig`
--
-DROP TABLE IF EXISTS `tableConfig`;
+DROP TABLE IF EXISTS `tableMultiConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `tableConfig` (
+CREATE TABLE `tableMultiConfig` (
`fileName` varchar(2) NOT NULL,
`toTable` varchar(15) NOT NULL,
`file` varchar(30) NOT NULL,
@@ -9831,7 +9863,6 @@ BEGIN
*/
DECLARE vRewriteKop INT DEFAULT NULL;
DECLARE vTruncatePutOrder INT DEFAULT NULL;
- DECLARE vBarcode CHAR(15) DEFAULT NULL;
DECLARE vKop INT;
DECLARE vPutOrderFk BIGINT;
@@ -9840,17 +9871,6 @@ BEGIN
FROM ekt
WHERE id = vSelf;
- -- Generates the barcode
-
- SELECT CONCAT(
- LPAD(IFNULL(auction,0), 3, 0),
- LPAD(IFNULL(klo, 99), 2, 0),
- LPAD(DAYOFYEAR(fec), 3, 0),
- COALESCE(agj, RIGHT(batchNumber,7), id))
- INTO vBarcode
- FROM ekt
- WHERE id = vSelf;
-
-- Rewrites the kop parameter
IF vKop IS NULL THEN
@@ -9870,10 +9890,9 @@ BEGIN
-- Refresh EKT
- UPDATE ekt SET
- barcode = vBarcode
- ,kop = vKop
- ,putOrderFk = vTruncatePutOrder
+ UPDATE ekt
+ SET kop = vKop,
+ putOrderFk = vTruncatePutOrder
WHERE id = vSelf;
END ;;
DELIMITER ;
@@ -12262,13 +12281,13 @@ CREATE TABLE `shelf` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `shelfConfig`
+-- Table structure for table `shelfMultiConfig`
--
-DROP TABLE IF EXISTS `shelfConfig`;
+DROP TABLE IF EXISTS `shelfMultiConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shelfConfig` (
+CREATE TABLE `shelfMultiConfig` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`namePrefix` varchar(50) DEFAULT NULL,
@@ -12282,9 +12301,9 @@ CREATE TABLE `shelfConfig` (
KEY `shelf_id` (`shelf`),
KEY `family_id` (`family`),
KEY `warehouse_id` (`warehouse`),
- CONSTRAINT `shelfConfig_ibfk_1` FOREIGN KEY (`family`) REFERENCES `vn`.`itemType` (`id`),
- CONSTRAINT `shelfConfig_ibfk_2` FOREIGN KEY (`shelf`) REFERENCES `shelf` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `shelfConfig_ibfk_3` FOREIGN KEY (`warehouse`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+ CONSTRAINT `shelfMultiConfig_ibfk_1` FOREIGN KEY (`family`) REFERENCES `vn`.`itemType` (`id`),
+ CONSTRAINT `shelfMultiConfig_ibfk_2` FOREIGN KEY (`shelf`) REFERENCES `shelf` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `shelfMultiConfig_ibfk_3` FOREIGN KEY (`warehouse`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -12872,12 +12891,8 @@ BEGIN
JOIN vn.warehouse w ON w.id = p.warehouseFk
ORDER BY warehouseFk, `grouping`;
- DROP TEMPORARY TABLE
- tmp.ticketCalculateItem,
- tmp.ticketComponentPrice,
- tmp.ticketComponent,
- tmp.ticketLot,
- tmp.zoneGetShipped;
+ CALL vn.ticketCalculatePurge();
+ DROP TEMPORARY TABLE tmp.item;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -13942,11 +13957,23 @@ BEGIN
CALL util.throw ('ORDER_ROW_UNAVAILABLE');
END IF;
- SELECT IFNULL(minQuantity, 0) INTO vMinQuantity
- FROM vn.item
- WHERE id = vItem;
+ WITH itemMinQuantityPriority AS (
+ SELECT quantity,
+ ROW_NUMBER() OVER (
+ PARTITION BY itemFk
+ ORDER BY warehouseFk IS NULL
+ ) priority
+ FROM vn.itemMinimumQuantity
+ WHERE itemFk = vItem
+ AND `started` <= vShipment
+ AND (`ended` >= vShipment OR `ended` IS NULL)
+ AND (warehouseFk = vWarehouse OR warehouseFk IS NULL)
+ )
+ SELECT quantity INTO vMinQuantity
+ FROM itemMinQuantityPriority
+ WHERE priority = 1;
- IF vAmount < LEAST(vMinQuantity, vAvailable) THEN
+ IF vAmount < LEAST(IFNULL(vMinQuantity, 0), vAvailable) THEN
CALL util.throw ('quantityLessThanMin');
END IF;
@@ -15832,7 +15859,7 @@ CREATE TABLE `queue` (
UNIQUE KEY `name` (`name`),
UNIQUE KEY `description` (`description`),
KEY `config` (`config`),
- CONSTRAINT `queue_ibfk_1` FOREIGN KEY (`config`) REFERENCES `queueConfig` (`id`) ON UPDATE CASCADE
+ CONSTRAINT `queue_ibfk_1` FOREIGN KEY (`config`) REFERENCES `queueMultiConfig` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Queues';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -15854,25 +15881,6 @@ SET character_set_client = utf8;
1 AS `ringinuse` */;
SET character_set_client = @saved_cs_client;
---
--- Table structure for table `queueConfig`
---
-
-DROP TABLE IF EXISTS `queueConfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `queueConfig` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `strategy` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `timeout` int(10) unsigned NOT NULL,
- `retry` int(10) unsigned NOT NULL,
- `weight` int(10) unsigned NOT NULL,
- `maxLen` int(10) unsigned NOT NULL,
- `ringInUse` tinyint(4) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Default values for queues configuration';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `queueMember`
--
@@ -15907,6 +15915,25 @@ SET character_set_client = utf8;
1 AS `paused` */;
SET character_set_client = @saved_cs_client;
+--
+-- Table structure for table `queueMultiConfig`
+--
+
+DROP TABLE IF EXISTS `queueMultiConfig`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `queueMultiConfig` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `strategy` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
+ `timeout` int(10) unsigned NOT NULL,
+ `retry` int(10) unsigned NOT NULL,
+ `weight` int(10) unsigned NOT NULL,
+ `maxLen` int(10) unsigned NOT NULL,
+ `ringInUse` tinyint(4) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Default values for queues configuration';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `queuePhone`
--
@@ -19088,13 +19115,13 @@ CREATE TABLE `authCode` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `defaultViewConfig`
+-- Table structure for table `defaultViewMultiConfig`
--
-DROP TABLE IF EXISTS `defaultViewConfig`;
+DROP TABLE IF EXISTS `defaultViewMultiConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `defaultViewConfig` (
+CREATE TABLE `defaultViewMultiConfig` (
`tableCode` varchar(25) NOT NULL,
`columns` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='The default configuration of columns for views';
@@ -26427,14 +26454,15 @@ CREATE TABLE `addressObservation` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `addressShortage`
+-- Table structure for table `addressWaste`
--
-DROP TABLE IF EXISTS `addressShortage`;
+DROP TABLE IF EXISTS `addressWaste`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `addressShortage` (
+CREATE TABLE `addressWaste` (
`addressFk` int(11) NOT NULL,
+ `type` enum('internal','external') 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;
@@ -26488,6 +26516,19 @@ CREATE TABLE `agencyExtraCharge` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `agencyIncoming`
+--
+
+DROP TABLE IF EXISTS `agencyIncoming`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `agencyIncoming` (
+ `agencyModeFk` int(11) NOT NULL,
+ PRIMARY KEY (`agencyModeFk`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Agencias de entrada de mercancias';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `agencyLog`
--
@@ -26507,6 +26548,7 @@ CREATE TABLE `agencyLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `logAgencyUserFk` (`userFk`),
KEY `agencyLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -27641,14 +27683,17 @@ CREATE TABLE `calendar` (
`businessFk` int(11) NOT NULL,
`dayOffTypeFk` int(11) NOT NULL,
`dated` date NOT NULL,
+ `created` timestamp NOT NULL DEFAULT current_timestamp(),
`editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `calendar_UN` (`businessFk`,`dated`),
KEY `calendar_employee_business_labour_id_idx` (`businessFk`),
KEY `calendar_employee_calendar_state_calendar_state_id_idx` (`dayOffTypeFk`),
KEY `id_index` (`id`),
+ KEY `calendar_user_FK` (`editorFk`),
CONSTRAINT `calendar_FK` FOREIGN KEY (`dayOffTypeFk`) REFERENCES `absenceType` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `calendar_businessFk` FOREIGN KEY (`businessFk`) REFERENCES `business` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+ CONSTRAINT `calendar_businessFk` FOREIGN KEY (`businessFk`) REFERENCES `business` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `calendar_user_FK` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -27902,6 +27947,7 @@ CREATE TABLE `claimDestination` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`description` varchar(15) NOT NULL,
`addressFk` int(10) DEFAULT NULL COMMENT 'Indica el consignatario para el ticket que regulariza el inventario',
+ `code` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `clSolAddressFk_idx` (`addressFk`),
CONSTRAINT `clSolAddressFk` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
@@ -28012,6 +28058,7 @@ CREATE TABLE `claimLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `claimLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -28226,6 +28273,7 @@ CREATE TABLE `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,
+ `hasDailyInvoice` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indica si el cliente requiere facturación diaria por defecto se copiará lo que tenga country.hasDailyInvoice',
PRIMARY KEY (`id`),
UNIQUE KEY `IF` (`fi`),
KEY `Id_Trabajador` (`salesPersonFk`),
@@ -28454,6 +28502,7 @@ CREATE TABLE `clientLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `clientLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -29164,12 +29213,12 @@ DROP TABLE IF EXISTS `componentType`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `componentType` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `type` varchar(45) NOT NULL,
+ `code` varchar(20) DEFAULT NULL,
+ `name` varchar(45) NOT NULL,
`isBase` tinyint(4) NOT NULL DEFAULT 0 COMMENT 'Marca aquellas series que se utilizan para calcular el precio base de las ventas, a efectos estadisticos',
`isMargin` tinyint(4) NOT NULL DEFAULT 0,
- `code` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
- UNIQUE KEY `Serie_UNIQUE` (`type`)
+ UNIQUE KEY `Serie_UNIQUE` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Permite organizar de forma ordenada los distintos componentes';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -29311,24 +29360,6 @@ CREATE TABLE `conveyorBuildingClass` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Tipo de caja para el montaje de pallets';
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `conveyorConfig`
---
-
-DROP TABLE IF EXISTS `conveyorConfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `conveyorConfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `itemName` varchar(45) NOT NULL,
- `length` int(11) DEFAULT NULL,
- `width` int(11) DEFAULT NULL,
- `height` int(11) DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `itemName_UNIQUE` (`itemName`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `conveyorExpedition`
--
@@ -29377,6 +29408,24 @@ CREATE TABLE `conveyorMode` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `conveyorMultiConfig`
+--
+
+DROP TABLE IF EXISTS `conveyorMultiConfig`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `conveyorMultiConfig` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `itemName` varchar(45) NOT NULL,
+ `length` int(11) DEFAULT NULL,
+ `width` int(11) DEFAULT NULL,
+ `height` int(11) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `itemName_UNIQUE` (`itemName`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `conveyorType`
--
@@ -29983,6 +30032,7 @@ CREATE TABLE `deviceProductionLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `deviceProductionLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -30571,6 +30621,7 @@ CREATE TABLE `entryLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `entryLog_ibfk_2` (`userFk`),
KEY `entryLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -31109,13 +31160,15 @@ CREATE TABLE `expeditionState` (
`created` timestamp NOT NULL DEFAULT current_timestamp(),
`expeditionFk` int(11) NOT NULL,
`typeFk` int(11) NOT NULL,
- `userFk` int(11) DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
`isScanned` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `expeditionState_FK` (`expeditionFk`),
KEY `expeditionState_FK_1` (`typeFk`),
+ KEY `expeditionState_userFk` (`userFk`),
CONSTRAINT `expeditionState_FK` FOREIGN KEY (`expeditionFk`) REFERENCES `expedition` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `expeditionState_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `expeditionStateType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+ CONSTRAINT `expeditionState_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `expeditionStateType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `expeditionState_userFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Historico de estados de las expediciones';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -31611,7 +31664,7 @@ DROP TABLE IF EXISTS `greuge`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `greuge` (
- `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`clientFk` int(11) NOT NULL,
`description` varchar(45) NOT NULL,
`amount` decimal(10,2) NOT NULL,
@@ -31621,7 +31674,7 @@ CREATE TABLE `greuge` (
`ticketFk` int(11) DEFAULT NULL,
`userFk` int(10) unsigned DEFAULT NULL,
`editorFk` int(10) unsigned DEFAULT NULL,
- PRIMARY KEY (`Id`),
+ PRIMARY KEY (`id`),
KEY `greuges_type_fk_idx` (`greugeTypeFk`),
KEY `Id_Ticket_Greuge_Ticket_idx` (`ticketFk`),
KEY `Greuges_cliente_idx` (`clientFk`),
@@ -32060,6 +32113,7 @@ CREATE TABLE `invoiceInConfig` (
`sageFarmerWithholdingFk` smallint(6) NOT NULL,
`daysAgo` int(10) unsigned DEFAULT 45 COMMENT 'Días en el pasado para mostrar facturas en invoiceIn series en salix',
`taxRowLimit` int(11) DEFAULT 4 COMMENT 'Número máximo de líneas de IVA que puede tener una factura',
+ `dueDateMarginDays` int(10) unsigned DEFAULT 2,
PRIMARY KEY (`id`),
KEY `invoiceInConfig_sageWithholdingFk` (`sageFarmerWithholdingFk`),
CONSTRAINT `invoiceInConfig_sageWithholdingFk` FOREIGN KEY (`sageFarmerWithholdingFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -32163,6 +32217,7 @@ CREATE TABLE `invoiceInLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `invoiceInLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -32412,13 +32467,13 @@ CREATE TABLE `invoiceOutTax` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `invoiceOutTaxConfig`
+-- Table structure for table `invoiceOutTaxMultiConfig`
--
-DROP TABLE IF EXISTS `invoiceOutTaxConfig`;
+DROP TABLE IF EXISTS `invoiceOutTaxMultiConfig`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `invoiceOutTaxConfig` (
+CREATE TABLE `invoiceOutTaxMultiConfig` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`taxClassCodeFk` varchar(1) DEFAULT NULL,
`taxTypeSageFk` smallint(6) DEFAULT NULL,
@@ -32505,9 +32560,15 @@ CREATE TABLE `item` (
`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 'Cantidad mínima para una línea de venta',
+ `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,
+ `value11` varchar(50) DEFAULT NULL,
+ `tag12` varchar(20) DEFAULT NULL,
+ `value12` varchar(50) DEFAULT NULL,
+ `tag13` varchar(20) DEFAULT NULL,
+ `value13` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `item_supplyResponseFk_idx` (`supplyResponseFk`),
KEY `Color` (`inkFk`),
@@ -32846,11 +32907,12 @@ CREATE TABLE `itemLog` (
`action` set('insert','update','delete') NOT NULL,
`creationDate` timestamp NULL DEFAULT current_timestamp(),
`description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
- `changedModel` enum('Item','ItemBarcode','ItemBotanical','ItemNiche','ItemTag','ItemTaxCountry') NOT NULL DEFAULT 'Item',
+ `changedModel` enum('Item','ItemBarcode','ItemBotanical','ItemNiche','ItemTag','ItemTaxCountry','ItemMinimumQuantity') NOT NULL DEFAULT 'Item',
`oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `itemLogUserFk_idx` (`userFk`),
KEY `itemLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -32876,6 +32938,37 @@ CREATE TABLE `itemMatchProperties` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Propiedades para encontrar articulos equivalentes en verdnatura';
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `itemMinimumQuantity`
+--
+
+DROP TABLE IF EXISTS `itemMinimumQuantity`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `itemMinimumQuantity` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `itemFk` int(10) NOT NULL,
+ `quantity` int(10) NOT NULL,
+ `started` date NOT NULL,
+ `ended` date DEFAULT NULL,
+ `warehouseFk` smallint(5) unsigned DEFAULT NULL,
+ `created` timestamp NOT NULL DEFAULT current_timestamp(),
+ `editorFk` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `itemMinimumQuantity_UNIQUE` (`itemFk`,`started`,`ended`,`warehouseFk`),
+ KEY `itemFk` (`itemFk`),
+ KEY `started` (`started`),
+ KEY `ended` (`ended`),
+ KEY `warehouseFk` (`warehouseFk`),
+ KEY `editorFk` (`editorFk`),
+ CONSTRAINT `itemMinimumQuantity_ibfk_1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `itemMinimumQuantity_ibfk_2` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `itemMinimumQuantity_ibfk_3` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
+ CONSTRAINT `itemMinimumQuantity_check_1` CHECK (`started` <= `ended`),
+ CONSTRAINT `itemMinimumQuantity_check` CHECK (`quantity` > 0)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `itemPackingType`
--
@@ -33012,6 +33105,7 @@ CREATE TABLE `itemShelving` (
`buyFk` int(11) DEFAULT NULL,
`editorFk` int(10) unsigned DEFAULT NULL,
`available` int(11) DEFAULT NULL,
+ `isSplit` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Este valor cambia al splitar un carro que se ha quedado en holanda',
PRIMARY KEY (`id`),
KEY `itemShelving_fk1_idx` (`itemFk`),
KEY `itemShelving_fk2_idx` (`shelvingFk`),
@@ -33170,7 +33264,7 @@ CREATE TABLE `itemShelvingSale` (
`quantity` decimal(10,0) NOT NULL DEFAULT 0,
`created` timestamp NOT NULL DEFAULT current_timestamp(),
`userFk` int(11) unsigned NOT NULL,
- `isPicked` tinyint(1) NOT NULL DEFAULT 0,
+ `isPicked` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `itemShelvingSale_fk1_idx` (`itemShelvingFk`),
KEY `itemShelvingSale_fk2_idx` (`saleFk`),
@@ -33191,8 +33285,11 @@ DROP TABLE IF EXISTS `itemShelvingSaleReserve`;
CREATE TABLE `itemShelvingSaleReserve` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`saleFk` int(11) NOT NULL,
+ `sectorFk` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
- KEY `itemShelvingSaleReserve_ibfk_1` (`saleFk`)
+ KEY `itemShelvingSaleReserve_ibfk_1` (`saleFk`),
+ KEY `itemShelvingSaleReserve_sector_FK` (`sectorFk`),
+ CONSTRAINT `itemShelvingSaleReserve_sector_FK` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Queue of changed itemShelvingSale to reserve';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -33408,11 +33505,11 @@ CREATE TABLE `itemType` (
`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,
- `target` double NOT NULL DEFAULT 0.15,
- `topMargin` double NOT NULL DEFAULT 0.3,
- `profit` double NOT NULL DEFAULT 0.02,
- `density` double NOT NULL DEFAULT 167 COMMENT 'Almacena el valor por defecto de la densidad en kg/m3 para el calculo de los portes aereos, en articulos se guarda la correcta',
+ `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,
@@ -34752,6 +34849,7 @@ CREATE TABLE `packingSiteDeviceLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `packingSiteDeviceLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -34860,6 +34958,7 @@ CREATE TABLE `parkingLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `logParkinguserFk` (`userFk`),
KEY `parkingLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -35063,7 +35162,7 @@ CREATE TABLE `payrollWorker` (
`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 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,
@@ -35641,21 +35740,52 @@ CREATE TABLE `productionConfig` (
`sectorFromCode` varchar(15) DEFAULT NULL COMMENT 'Sector origen que se revisa ítems más nuevos al parkinear',
`sectorToCode` varchar(15) DEFAULT NULL COMMENT 'Sector destino que se revisa ítems más nuevos al parkinear',
`orderMode` enum('Location','Age') NOT NULL DEFAULT 'Location',
+ `editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `productionConfig_FK` (`shortageAddressFk`),
KEY `productionConfig_FK_1` (`clientSelfConsumptionFk`),
KEY `productionConfig_FK_2` (`addressSelfConsumptionFk`),
KEY `productionConfig_sector_FK` (`sectorFromCode`),
KEY `productionConfig_sector_FK_1` (`sectorToCode`),
+ KEY `productionConfig_user_FK` (`editorFk`),
CONSTRAINT `productionConfig_FK` FOREIGN KEY (`shortageAddressFk`) REFERENCES `address` (`id`) ON UPDATE CASCADE,
CONSTRAINT `productionConfig_FK_1` FOREIGN KEY (`clientSelfConsumptionFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `productionConfig_FK_2` FOREIGN KEY (`addressSelfConsumptionFk`) REFERENCES `address` (`id`) ON UPDATE CASCADE,
CONSTRAINT `productionConfig_sector_FK` FOREIGN KEY (`sectorFromCode`) REFERENCES `sector` (`code`) ON UPDATE CASCADE,
CONSTRAINT `productionConfig_sector_FK_1` FOREIGN KEY (`sectorToCode`) REFERENCES `sector` (`code`) ON UPDATE CASCADE,
+ CONSTRAINT `productionConfig_user_FK` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
CONSTRAINT `productionConfig_check` CHECK (`id` = 1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Recoge los parámetros que condicionan la producción';
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `productionConfigLog`
+--
+
+DROP TABLE IF EXISTS `productionConfigLog`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `productionConfigLog` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `originFk` int(11) DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
+ `action` set('insert','update','delete','select') NOT NULL,
+ `creationDate` timestamp NULL DEFAULT current_timestamp(),
+ `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `changedModel` enum('ProductionConfig') NOT NULL DEFAULT 'ProductionConfig',
+ `oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
+ `newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
+ `changedModelId` int(11) NOT NULL,
+ `changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `productionConfigLog_userFk` (`userFk`),
+ KEY `productionConfigLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
+ KEY `productionConfigLog_originFk` (`originFk`,`creationDate`),
+ 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 */;
+
--
-- Table structure for table `productionError`
--
@@ -36073,6 +36203,7 @@ CREATE TABLE `rateLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `logRateuserFk` (`userFk`),
KEY `rateLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -36622,6 +36753,7 @@ CREATE TABLE `routeLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `routeLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -37390,11 +37522,10 @@ CREATE TABLE `sectorCollectionSaleGroup` (
`sectorCollectionFk` int(11) NOT NULL,
`saleGroupFk` int(11) NOT NULL,
PRIMARY KEY (`id`),
- UNIQUE KEY `saleGroupFk` (`saleGroupFk`),
- KEY `sectorCollectionFk` (`sectorCollectionFk`),
+ UNIQUE KEY `sectorCollectionSaleGroup_unique` (`sectorCollectionFk`,`saleGroupFk`),
+ KEY `sectorCollectionSaleGroup_saleGroup_FK` (`saleGroupFk`),
CONSTRAINT `sectorCollectionSaleGroup_ibfk_1` FOREIGN KEY (`sectorCollectionFk`) REFERENCES `sectorCollection` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `sectorCollectionSaleGroup_ibfk_2` FOREIGN KEY (`saleGroupFk`) REFERENCES `saleGroup` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `sectorCollectionSaleGroup_ibfk_3` FOREIGN KEY (`saleGroupFk`) REFERENCES `saleGroup` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+ CONSTRAINT `sectorCollectionSaleGroup_saleGroup_FK` FOREIGN KEY (`saleGroupFk`) REFERENCES `saleGroup` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Relaciona las lineas de venta con la coleccion del sector';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -37596,6 +37727,7 @@ CREATE TABLE `shelvingLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `shelvingLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -38023,10 +38155,10 @@ CREATE TABLE `state` (
PRIMARY KEY (`id`),
UNIQUE KEY `code_UNIQUE` (`code`),
KEY `state_id3` (`semaphore`),
- KEY `alertLevel` (`alertLevel`),
KEY `state_FK` (`nextStateFk`),
+ KEY `state_ibfk_1` (`alertLevel`),
CONSTRAINT `state_FK` FOREIGN KEY (`nextStateFk`) REFERENCES `state` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `state_ibfk_1` FOREIGN KEY (`alertLevel`) REFERENCES `alertLevel` (`id`)
+ CONSTRAINT `state_ibfk_1` FOREIGN KEY (`alertLevel`) REFERENCES `alertLevel` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -38376,6 +38508,7 @@ CREATE TABLE `supplierLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `supplierLog_ibfk_2` (`userFk`),
KEY `supplierLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -38857,7 +38990,7 @@ DROP TABLE IF EXISTS `ticketLastState`;
CREATE TABLE `ticketLastState` (
`ticketFk` int(11) NOT NULL DEFAULT 0,
`ticketTrackingFk` int(11) NOT NULL,
- `name` varchar(15) NOT NULL,
+ `name` varchar(20) NOT NULL,
PRIMARY KEY (`ticketFk`),
KEY `double_foreign` (`ticketFk`,`ticketTrackingFk`),
CONSTRAINT `Id_Ticket` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -38910,6 +39043,7 @@ CREATE TABLE `ticketLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `logTicketuserFk` (`userFk`),
KEY `ticketLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -39211,7 +39345,7 @@ CREATE TABLE `ticketSms__` (
`ticketFk` int(11) DEFAULT NULL,
PRIMARY KEY (`smsFk`),
KEY `ticketSms_FK_1` (`ticketFk`),
- CONSTRAINT `ticketSms_FK` FOREIGN KEY (`smsFk`) REFERENCES `sms` (`id`) ON UPDATE CASCADE,
+ 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 */;
@@ -39676,6 +39810,7 @@ CREATE TABLE `travel` (
KEY `travel_FK` (`agencyModeFk`),
KEY `travel_fk_editor` (`editorFk`),
KEY `travel_FK_1` (`awbFk`),
+ KEY `travel_landed_IDX` (`landed` DESC,`warehouseInFk`,`warehouseOutFk`) USING BTREE,
CONSTRAINT `travel_FK` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
CONSTRAINT `travel_FK_1` FOREIGN KEY (`awbFk`) REFERENCES `awb` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `travel_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
@@ -39784,6 +39919,7 @@ CREATE TABLE `travelLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `travelLog_changedModel` (`changedModel`,`changedModelId`,`originFk`),
@@ -39859,27 +39995,6 @@ CREATE TABLE `trolley` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
---
--- Table structure for table `userConfig`
---
-
-DROP TABLE IF EXISTS `userConfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `userConfig` (
- `userFk` int(10) unsigned NOT NULL,
- `warehouseFk` smallint(6) DEFAULT NULL,
- `companyFk` smallint(5) unsigned DEFAULT NULL,
- `created` timestamp NULL DEFAULT current_timestamp(),
- `updated` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `darkMode` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Salix interface dark mode',
- `tabletFk` varchar(100) DEFAULT NULL,
- PRIMARY KEY (`userFk`),
- KEY `tabletFk` (`tabletFk`),
- CONSTRAINT `userConfig_ibfk_1` FOREIGN KEY (`tabletFk`) REFERENCES `docuwareTablet` (`tablet`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Configuración de usuario en Salix';
-/*!40101 SET character_set_client = @saved_cs_client */;
-
--
-- Table structure for table `userLog`
--
@@ -39899,6 +40014,7 @@ CREATE TABLE `userLog` (
`newInstance` text DEFAULT NULL,
`changedModelId` int(11) DEFAULT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `originFk` (`originFk`),
KEY `userFk` (`userFk`),
@@ -39906,6 +40022,27 @@ CREATE TABLE `userLog` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci `PAGE_COMPRESSED`=1;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `userMultiConfig`
+--
+
+DROP TABLE IF EXISTS `userMultiConfig`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `userMultiConfig` (
+ `userFk` int(10) unsigned NOT NULL,
+ `warehouseFk` smallint(6) DEFAULT NULL,
+ `companyFk` smallint(5) unsigned DEFAULT NULL,
+ `created` timestamp NULL DEFAULT current_timestamp(),
+ `updated` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `darkMode` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Salix interface dark mode',
+ `tabletFk` varchar(100) DEFAULT NULL,
+ PRIMARY KEY (`userFk`),
+ KEY `tabletFk` (`tabletFk`),
+ CONSTRAINT `userMultiConfig_ibfk_1` FOREIGN KEY (`tabletFk`) REFERENCES `docuwareTablet` (`tablet`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Configuración de usuario en Salix';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `userPhone`
--
@@ -39980,14 +40117,14 @@ CREATE TABLE `vehicle` (
KEY `vehicle_supplierFk` (`supplierFk`),
KEY `vehicle_supplierCoolerFk` (`supplierCoolerFk`),
KEY `vehicle_bankPolicyFk` (`bankPolicyFk`),
- CONSTRAINT `provinceFk` FOREIGN KEY (`warehouseFk`) REFERENCES `province` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `vehicleCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
CONSTRAINT `vehicle_FK` FOREIGN KEY (`fuelTypeFk`) REFERENCES `fuelType` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `vehicle_FK_1` FOREIGN KEY (`ppeFk`) REFERENCES `ppe` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `vehicle_bankPolicyFk` FOREIGN KEY (`bankPolicyFk`) REFERENCES `bankPolicy` (`id`) ON UPDATE CASCADE,
CONSTRAINT `vehicle_deliveryPointFk` FOREIGN KEY (`deliveryPointFk`) REFERENCES `deliveryPoint` (`id`) ON UPDATE CASCADE,
CONSTRAINT `vehicle_supplierCoolerFk` FOREIGN KEY (`supplierCoolerFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `vehicle_supplierFk` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`)
+ CONSTRAINT `vehicle_supplierFk` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`),
+ CONSTRAINT `vehicle_warehouse_FK` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -40869,6 +41006,7 @@ CREATE TABLE `workerLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk_idx` (`userFk`),
KEY `workerLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -41646,6 +41784,7 @@ CREATE TABLE `zoneLog` (
`newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
`changedModelId` int(11) NOT NULL,
`changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userFk` (`userFk`),
KEY `zoneLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
@@ -41680,7 +41819,39 @@ CREATE TABLE `zoneWarehouse` (
-- Dumping events for database 'vn'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
-/*!50106 DROP EVENT IF EXISTS `client_unassignSalesPerson` */;
+/*!50106 DROP EVENT IF EXISTS `claim_changeState` */;
+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 `claim_changeState` ON SCHEDULE EVERY 1 DAY STARTS '2024-06-06 07:52:46' ON COMPLETION PRESERVE ENABLE DO BEGIN
+
+ DECLARE vClaimState INT;
+
+ SELECT id INTO vClaimState
+ FROM claimState cs
+ WHERE cs.code = 'canceled';
+
+ UPDATE claim c
+ JOIN claimState cs ON cs.id = c.claimStateFk
+ SET c.claimStateFk = vClaimState
+ WHERE c.created < util.VN_CURDATE() - INTERVAL 2 MONTH
+ AND cs.code IN('incomplete','coming','waiting','out');
+
+END */ ;;
+/*!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 `client_unassignSalesPerson` */;;
DELIMITER ;;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
@@ -42018,6 +42189,28 @@ DELIMITER ;;
/*!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 `travel_setDelivered` */;;
+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 `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();
+END */ ;;
+/*!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 `vehicle_notify` */;;
DELIMITER ;;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
@@ -45891,6 +46084,44 @@ 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 `ticket_isProblemCalcNeeded` */;
+/*!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` FUNCTION `ticket_isProblemCalcNeeded`(vSelf INT
+) RETURNS tinyint(1)
+ DETERMINISTIC
+BEGIN
+/**
+ * Check if the ticket requires to update column vn.ticket.problem
+ *
+ * @param vSelf Id ticket
+ * @return BOOL
+ */
+ DECLARE vIsProblemCalcNeeded BOOL;
+
+ SELECT COUNT(*) INTO vIsProblemCalcNeeded
+ FROM ticket t
+ JOIN client c ON c.id = t.clientFk
+ JOIN agencyMode am ON am.id = t.agencyModeFk
+ JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
+ WHERE t.id = vSelf
+ AND dm.code IN ('AGENCY','DELIVERY','PICKUP')
+ AND c.typeFk = 'normal';
+
+ RETURN vIsProblemCalcNeeded;
+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 `ticket_isTooLittle` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -46850,6 +47081,44 @@ 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 `address_updateCoordinates` */;
+/*!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 `address_updateCoordinates`(
+ vTicketFk INT,
+ vLongitude INT,
+ vLatitude INT)
+BEGIN
+/**
+ * Actualiza las coordenadas de una dirección.
+ *
+ * @param vTicketFk Id del ticket
+ * @param vLongitude Longitud de la dirección
+ * @param vLatitude Latitud de la dirección
+ */
+ DECLARE vAddressFK INT;
+
+ SELECT addressFK INTO vAddressFK
+ FROM ticket
+ WHERE id = vTicketFk;
+
+ UPDATE address
+ SET longitude = vLongitude,
+ latitude = vLatitude
+ WHERE id = vAddressFK;
+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 `agencyHourGetFirstShipped` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -47242,7 +47511,7 @@ proc: BEGIN
-- Tabla con el ultimo dia de last_buy para cada producto
-- que hace un replace de la anterior.
- CALL buyUltimate(vWarehouseShipment, util.VN_CURDATE());
+ CALL buy_getUltimate (NULL, vWarehouseShipment, util.VN_CURDATE());
INSERT INTO tItemRange
SELECT t.itemFk, tr.landed
@@ -47902,42 +48171,21 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `buyUltimate`(vWarehouseFk SMALLINT, vDated DATE)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `buyUltimate`(
+ vWarehouseFk SMALLINT,
+ vDated DATE
+)
BEGIN
/**
- * Calcula las últimas compras realizadas hasta una fecha
+ * @deprecated Usar buy_getUltimate
+ * Calcula las últimas compras realizadas hasta una fecha.
*
+ * @param vItemFk Id del artículo
* @param vWarehouseFk Id del almacén
* @param vDated Compras hasta fecha
* @return tmp.buyUltimate
*/
- CALL cache.last_buy_refresh (FALSE);
-
- DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimate;
- CREATE TEMPORARY TABLE tmp.buyUltimate
- (PRIMARY KEY (itemFk, warehouseFk),
- INDEX(itemFk))
- ENGINE = MEMORY
- SELECT item_id itemFk, buy_id buyFk, warehouse_id warehouseFk, landing
- FROM cache.last_buy
- WHERE warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL;
-
- CALL buyUltimateFromInterval(vWarehouseFk, util.VN_CURDATE(), vDated);
-
- REPLACE INTO tmp.buyUltimate
- SELECT itemFk, buyFk, warehouseFk, landed landing
- FROM tmp.buyUltimateFromInterval
- WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
- AND landed <= vDated
- AND NOT isIgnored;
-
- INSERT IGNORE INTO tmp.buyUltimate
- SELECT itemFk, buyFk, warehouseFk, landed landing
- FROM tmp.buyUltimateFromInterval
- WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
- AND landed > vDated
- ORDER BY isIgnored = FALSE DESC;
-
+ CALL buy_getUltimate(NULL, vWarehouseFk, vDated);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -47954,9 +48202,14 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `buyUltimateFromInterval`(vWarehouseFk SMALLINT, vStarted DATE, vEnded DATE)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `buyUltimateFromInterval`(
+ vWarehouseFk SMALLINT,
+ vStarted DATE,
+ vEnded DATE
+)
BEGIN
/**
+ * @deprecated Usar buy_getUltimateFromInterval
* Calcula las últimas compras realizadas
* desde un rango de fechas.
*
@@ -47965,129 +48218,7 @@ BEGIN
* @param vEnded Fecha fin
* @return tmp.buyUltimateFromInterval
*/
- IF vEnded IS NULL THEN
- SET vEnded = vStarted;
- END IF;
-
- IF vEnded < vStarted THEN
- SET vStarted = TIMESTAMPADD(MONTH, -1, vEnded);
- END IF;
-
- -- Item
- DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimateFromInterval;
- CREATE TEMPORARY TABLE tmp.buyUltimateFromInterval
- (PRIMARY KEY (itemFk, warehouseFk), INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
- ENGINE = MEMORY
- SELECT itemFk,
- warehouseFk,
- buyFk,
- MAX(landed) landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
-
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT
- b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed > vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- AND NOT b.isIgnored
- GROUP BY itemFk, warehouseInFk;
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT
- b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.quantity = 0
- GROUP BY itemFk, warehouseInFk;
-
- -- ItemOriginal
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT itemFk,
- warehouseFk,
- buyFk,
- MAX(landed) landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- itemOriginalFk,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- AND NOT b.isIgnored
- AND b.quantity > 0
- AND itemOriginalFk
- ORDER BY t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemOriginalFk, warehouseFk;
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT
- b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed > vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- AND NOT b.isIgnored
- AND itemOriginalFk
- GROUP BY itemOriginalFk, warehouseInFk;
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT
- b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.quantity = 0
- AND itemOriginalFk
- GROUP BY itemOriginalFk, warehouseInFk;
+ CALL vn.buy_getUltimateFromInterval(NULL, vWarehouseFk, vStarted, vEnded);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -48473,6 +48604,254 @@ DELIMITER ;
/*!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 `buy_getUltimate` */;
+/*!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 `buy_getUltimate`(
+ vItemFk INT,
+ vWarehouseFk SMALLINT,
+ vDated DATE
+)
+BEGIN
+/**
+ * Calcula las últimas compras realizadas hasta una fecha.
+ *
+ * @param vItemFk Id del artículo
+ * @param vWarehouseFk Id del almacén
+ * @param vDated Compras hasta fecha
+ * @return tmp.buyUltimate
+ */
+ CALL cache.last_buy_refresh(FALSE);
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.buyUltimate
+ (PRIMARY KEY (itemFk, warehouseFk),
+ INDEX(itemFk))
+ ENGINE = MEMORY
+ SELECT item_id itemFk, buy_id buyFk, warehouse_id warehouseFk, landing
+ FROM cache.last_buy
+ WHERE (warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL)
+ AND (item_id = vItemFk OR vItemFk IS NULL);
+
+ IF vDated >= util.VN_CURDATE() THEN
+ CALL buy_getUltimateFromInterval(vItemFk, vWarehouseFk, util.VN_CURDATE(), vDated);
+
+ REPLACE INTO tmp.buyUltimate
+ SELECT itemFk, buyFk, warehouseFk, landed landing
+ FROM tmp.buyUltimateFromInterval
+ WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
+ AND (itemFk = vItemFk OR vItemFk IS NULL)
+ AND landed <= vDated
+ AND NOT isIgnored;
+
+ INSERT IGNORE INTO tmp.buyUltimate
+ SELECT itemFk, buyFk, warehouseFk, landed landing
+ FROM tmp.buyUltimateFromInterval
+ WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
+ AND (itemFk = vItemFk OR vItemFk IS NULL)
+ AND landed > vDated
+ ORDER BY isIgnored = FALSE DESC;
+ 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 `buy_getUltimateFromInterval` */;
+/*!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 `buy_getUltimateFromInterval`(
+ vItemFk INT,
+ vWarehouseFk SMALLINT,
+ vStarted DATE,
+ vEnded DATE
+)
+BEGIN
+/**
+ * Calcula las últimas compras realizadas
+ * desde un rango de fechas.
+ *
+ * @param vItemFk Id del artículo
+ * @param vWarehouseFk Id del almacén si es NULL se actualizan todos
+ * @param vStarted Fecha inicial
+ * @param vEnded Fecha fin
+ * @return tmp.buyUltimateFromInterval
+ */
+ IF vEnded IS NULL THEN
+ SET vEnded = vStarted;
+ END IF;
+
+ IF vEnded < vStarted THEN
+ SET vStarted = vEnded - INTERVAL 1 MONTH;
+ END IF;
+
+ -- Item
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.buyUltimateFromInterval
+ (PRIMARY KEY (itemFk, warehouseFk),
+ INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
+ ENGINE = MEMORY
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed > vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ AND NOT b.isIgnored
+ ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.quantity = 0
+ ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+ -- ItemOriginal
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ itemOriginalFk,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ AND NOT b.isIgnored
+ AND b.quantity > 0
+ AND itemOriginalFk
+ ORDER BY t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed > vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ AND NOT b.isIgnored
+ AND itemOriginalFk
+ ORDER BY t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM
+ (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.quantity = 0
+ AND itemOriginalFk
+ ORDER BY t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+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 = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `buy_getVolume` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
@@ -48801,7 +49180,11 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `buy_updateGrouping`(vWarehouseFk INT, vItemFk INT, vGrouping INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `buy_updateGrouping`(
+ vWarehouseFk INT,
+ vItemFk INT,
+ vGrouping INT
+)
BEGIN
/**
* Actualiza el grouping de las últimas compras de un artículo
@@ -48810,9 +49193,9 @@ BEGIN
* @param vItemFk Id del Artículo
* @param vGrouping Cantidad de grouping
*/
- CALL vn.buyUltimate(vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, util.VN_CURDATE());
- UPDATE vn.buy b
+ UPDATE buy b
JOIN tmp.buyUltimate bu ON b.id = bu.buyFk
SET b.`grouping` = vGrouping
WHERE bu.warehouseFk = vWarehouseFk
@@ -48844,7 +49227,7 @@ BEGIN
* @param vItemFk id del item
* @param vPacking packing a actualizar
*/
- CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, util.VN_CURDATE());
UPDATE buy b
JOIN tmp.buyUltimate bu ON b.id = bu.buyFk
@@ -48939,7 +49322,7 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- CALL vn.zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, vShowExpiredZones);
+ CALL zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, vShowExpiredZones);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot(
@@ -48955,8 +49338,7 @@ BEGIN
CALL catalog_componentPrepare();
- DROP TEMPORARY TABLE IF EXISTS tmp.ticketCalculateItem;
- CREATE TEMPORARY TABLE tmp.ticketCalculateItem(
+ CREATE OR REPLACE TEMPORARY TABLE tmp.ticketCalculateItem(
itemFk INT(11) NOT NULL,
available INT(11),
producer VARCHAR(50),
@@ -48970,11 +49352,11 @@ BEGIN
price DECIMAL(10,2),
priceKg DECIMAL(10,2),
`grouping` INT(10) UNSIGNED,
+ minQuantity INT(10) UNSIGNED,
PRIMARY KEY `itemFk` (`itemFk`)
) ENGINE = MEMORY DEFAULT CHARSET=utf8;
OPEN cTravelTree;
-
l: LOOP
SET vDone = FALSE;
FETCH cTravelTree INTO vZoneFk, vWarehouseFk, vShipped;
@@ -48983,9 +49365,9 @@ BEGIN
LEAVE l;
END IF;
- CALL `cache`.available_refresh (vAvailableCalc, FALSE, vWarehouseFk, vShipped);
- CALL `cache`.availableNoRaids_refresh (vAvailableNoRaidsCalc, FALSE, vWarehouseFk, vShipped);
- CALL vn.buyUltimate(vWarehouseFk, vShipped);
+ CALL `cache`.available_refresh(vAvailableCalc, FALSE, vWarehouseFk, vShipped);
+ CALL `cache`.availableNoRaids_refresh(vAvailableNoRaidsCalc, FALSE, vWarehouseFk, vShipped);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vShipped);
INSERT INTO tmp.ticketLot (warehouseFk, itemFk, available, buyFk, zoneFk)
SELECT vWarehouseFk,
@@ -48997,17 +49379,17 @@ BEGIN
LEFT JOIN cache.availableNoRaids anr ON anr.item_id = a.item_id
AND anr.calc_id = vAvailableNoRaidsCalc
JOIN tmp.item i ON i.itemFk = a.item_id
- JOIN vn.item it ON it.id = i.itemFk
- JOIN vn.`zone` z ON z.id = vZoneFk
+ JOIN item it ON it.id = i.itemFk
+ JOIN `zone` z ON z.id = vZoneFk
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = a.item_id
LEFT JOIN edi.supplyResponse sr ON sr.ID = it.supplyResponseFk
LEFT JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
LEFT JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID
LEFT JOIN (SELECT isVNHSupplier, isEarlyBird, TRUE AS itemAllowed
- FROM vn.addressFilter af
+ FROM addressFilter af
JOIN (SELECT ad.provinceFk, p.countryFk, ad.isLogifloraAllowed
- FROM vn.address ad
- JOIN vn.province p ON p.id = ad.provinceFk
+ FROM address ad
+ JOIN province p ON p.id = ad.provinceFk
WHERE ad.id = vAddressFk
) sub2 ON sub2.provinceFk <=> IFNULL(af.provinceFk, sub2.provinceFk)
AND sub2.countryFk <=> IFNULL(af.countryFk, sub2.countryFk)
@@ -49019,18 +49401,18 @@ BEGIN
OR ISNULL(af.afterDated))
) sub ON sub.isVNHSupplier = v.isVNHSupplier
AND (sub.isEarlyBird = mp.isEarlyBird OR ISNULL(sub.isEarlyBird))
- JOIN vn.agencyMode am ON am.id = vAgencyModeFk
- JOIN vn.agency ag ON ag.id = am.agencyFk
- JOIN vn.itemType itt ON itt.id = it.typeFk
- JOIN vn.itemCategory itc on itc.id = itt.categoryFk
- JOIN vn.address ad ON ad.id = vAddressFk
- LEFT JOIN vn.clientItemType cit
+ JOIN agencyMode am ON am.id = vAgencyModeFk
+ JOIN agency ag ON ag.id = am.agencyFk
+ JOIN itemType itt ON itt.id = it.typeFk
+ JOIN itemCategory itc on itc.id = itt.categoryFk
+ JOIN address ad ON ad.id = vAddressFk
+ LEFT JOIN clientItemType cit
ON cit.clientFk = ad.clientFk
AND cit.itemTypeFk = itt.id
- LEFT JOIN vn.zoneItemType zit
+ LEFT JOIN zoneItemType zit
ON zit.zoneFk = vZoneFk
AND zit.itemTypeFk = itt.id
- LEFT JOIN vn.agencyModeItemType ait
+ LEFT JOIN agencyModeItemType ait
ON ait.agencyModeFk = vAgencyModeFk
AND ait.itemTypeFk = itt.id
WHERE a.calc_id = vAvailableCalc
@@ -49044,9 +49426,9 @@ BEGIN
DROP TEMPORARY TABLE tmp.buyUltimate;
- CALL vn.catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
+ CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
- INSERT INTO tmp.ticketCalculateItem (
+ INSERT INTO tmp.ticketCalculateItem(
itemFk,
available,
producer,
@@ -49059,9 +49441,9 @@ BEGIN
origin,
price,
priceKg,
- `grouping`)
- SELECT
- tl.itemFk,
+ `grouping`,
+ minQuantity)
+ SELECT tl.itemFk,
SUM(tl.available) available,
p.name producer,
i.name item,
@@ -49073,7 +49455,8 @@ BEGIN
o.code origin,
bl.price,
bl.priceKg,
- bl.`grouping`
+ bl.`grouping`,
+ mq.quantity
FROM tmp.ticketLot tl
JOIN item i ON tl.itemFk = i.id
LEFT JOIN producer p ON p.id = i.producerFk AND p.isVisible
@@ -49089,12 +49472,28 @@ BEGIN
) sub
GROUP BY itemFk
) bl ON bl.itemFk = tl.itemFk
- WHERE tl.zoneFk = vZoneFk AND tl.warehouseFk = vWarehouseFk
+ LEFT JOIN (
+ WITH itemMinQuantityPriority AS (
+ SELECT itemFk,
+ quantity,
+ ROW_NUMBER() OVER (
+ PARTITION BY itemFk
+ ORDER BY warehouseFk IS NULL
+ ) priority
+ FROM vn.itemMinimumQuantity
+ WHERE `started` <= vShipped
+ AND (`ended` >= vShipped OR `ended` IS NULL)
+ AND (warehouseFk = vWarehouseFk OR warehouseFk IS NULL)
+ )
+ SELECT itemFk, quantity
+ FROM itemMinQuantityPriority
+ WHERE priority = 1
+ ) mq ON mq.itemFk = tl.itemFk
+ WHERE tl.zoneFk = vZoneFk
+ AND tl.warehouseFk = vWarehouseFk
GROUP BY tl.itemFk
ON DUPLICATE KEY UPDATE available = available + VALUES(available);
-
END LOOP;
-
CLOSE cTravelTree;
END ;;
DELIMITER ;
@@ -49727,6 +50126,10 @@ BEGIN
DELETE FROM ticketDown WHERE created < util.yesterday();
DELETE FROM entryLog WHERE creationDate < v2Months;
DELETE IGNORE FROM expedition WHERE created < v26Months;
+ DELETE cs
+ FROM sms s
+ JOIN clientSms cs ON cs.smsFk = s.id
+ WHERE s.created < v18Months;
DELETE FROM sms WHERE created < v18Months;
DELETE FROM saleTracking WHERE created < v1Years;
DELETE FROM productionError WHERE dated < v1Years;
@@ -50679,14 +51082,14 @@ DELIMITER ;
/*!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 = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `client_create` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `client_create`(
vFirstname VARCHAR(50),
@@ -50723,20 +51126,25 @@ BEGIN
DECLARE vIsTaxDataChecked TINYINT(1);
DECLARE vHasCoreVnl BOOLEAN;
DECLARE vMandateTypeFk INT;
+ DECLARE vHasDailyInvoice BOOLEAN;
- SELECT defaultPayMethodFk,
- defaultDueDay,
- defaultCredit,
- defaultIsTaxDataChecked,
- defaultHasCoreVnl,
- defaultMandateTypeFk
+ SELECT cc.defaultPayMethodFk,
+ cc.defaultDueDay,
+ cc.defaultCredit,
+ cc.defaultIsTaxDataChecked,
+ cc.defaultHasCoreVnl,
+ cc.defaultMandateTypeFk,
+ c.hasDailyInvoice
INTO vPayMethodFk,
vDueDay,
vDefaultCredit,
vIsTaxDataChecked,
vHasCoreVnl,
- vMandateTypeFk
- FROM clientConfig;
+ vMandateTypeFk,
+ vHasDailyInvoice
+ FROM clientConfig cc
+ LEFT JOIN province p ON p.id = vProvinceFk
+ LEFT JOIN country c ON c.id = p.countryFk;
INSERT INTO `client`
SET id = vUserFk,
@@ -50754,7 +51162,8 @@ BEGIN
credit = vDefaultCredit,
isTaxDataChecked = vIsTaxDataChecked,
hasCoreVnl = vHasCoreVnl,
- isEqualizated = FALSE
+ isEqualizated = FALSE,
+ hasDailyInvoice = vHasDailyInvoice
ON duplicate KEY UPDATE
payMethodFk = vPayMethodFk,
dueDay = vDueDay,
@@ -51455,7 +51864,8 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_addWithReservation`(
vItemFk INT,
vQuantity INT,
vTicketFk INT,
- vSaleGroupFk INT
+ vSaleGroupFk INT,
+ vSectorFk INT
)
BEGIN
/**
@@ -51519,7 +51929,7 @@ BEGIN
SELECT LAST_INSERT_ID() INTO vSaleFk;
CALL sale_calculateComponent(vSaleFk, NULL);
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
IF NOT EXISTS (SELECT TRUE FROM itemShelvingSale WHERE saleFk = vSaleFk LIMIT 1) THEN
SET vHasThrow = TRUE;
@@ -51580,16 +51990,16 @@ BEGIN
vErrorNumber = MYSQL_ERRNO,
vErrorMsg = MESSAGE_TEXT;
+ CALL util.debugAdd('collection_assign', JSON_OBJECT(
+ 'errorNumber', vErrorNumber,
+ 'errorMsg', vErrorMsg,
+ 'lockName', vLockName,
+ 'userFk', vUserFk
+ )); -- Tmp
+
IF vLockName IS NOT NULL THEN
DO RELEASE_LOCK(vLockName);
- CALL util.debugAdd('collection_assign', JSON_OBJECT(
- 'errorNumber', vErrorNumber,
- 'errorMsg', vErrorMsg,
- 'lockName', vLockName,
- 'userFk', vUserFk
- )); -- Tmp
END IF;
-
RESIGNAL;
END;
@@ -52123,17 +52533,17 @@ BEGIN
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);
- CALL util.debugAdd('collection_new', JSON_OBJECT(
- 'errorNumber', vErrorNumber,
- 'errorMsg', vErrorMsg,
- 'lockName', vLockName,
- 'userFk', vUserFk,
- 'ticketFk', vTicketFk
- )); -- Tmp
END IF;
-
RESIGNAL;
END;
@@ -52487,18 +52897,21 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_setParking`(IN `vCollectionFk` VARCHAR(8), IN `vParkingFk` INT)
-proc: BEGIN
+CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_setParking`(
+ vSelf INT,
+ vParkingFk INT
+)
+BEGIN
/**
* Aparca una colección en un parking.
*
- * @param vCollectionFk Id de la colección
- * @param vParkingFk Id del parking
+ * @param vSelf Id colección
+ * @param vParkingFk Id parking
*/
- REPLACE vn.ticketParking(ticketFk, parkingFk)
+ REPLACE ticketParking(ticketFk, parkingFk)
SELECT tc.ticketFk, vParkingFk
- FROM vn.ticketCollection tc
- WHERE tc.collectionFk = vCollectionFk;
+ FROM ticketCollection tc
+ WHERE tc.collectionFk = vSelf;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -52580,7 +52993,7 @@ DECLARE vCompanyFk INT;
SELECT IFNULL(uc.companyFk, rc.defaultCompanyFk)
INTO vCompanyFk
FROM vn.routeConfig rc
- LEFT JOIN userConfig uc ON uc.userFk = workerFk;
+ LEFT JOIN userMultiConfig uc ON uc.userFk = workerFk;
SELECT
@@ -53095,9 +53508,9 @@ BEGIN
SET @order = 0;
- DROP TEMPORARY TABLE IF EXISTS tmp.newSaleList;
+ DROP TEMPORARY TABLE IF EXISTS tNewSaleList;
- CREATE TEMPORARY TABLE tmp.newSaleList
+ CREATE TEMPORARY TABLE tNewSaleList
SELECT id as saleFk, @order := @order + 1 as orden
FROM vn.sale
WHERE ticketFk = vTargetTicketFk
@@ -53107,8 +53520,9 @@ BEGIN
SELECT ns.saleFk, sc.componentFk, sc.value
FROM vn.saleComponent sc
JOIN tmp.saleList s ON s.saleFk = sc.saleFk
- JOIN tmp.newSaleList ns ON ns.orden = s.orden;
+ JOIN tNewSaleList ns ON ns.orden = s.orden;
+ DROP TEMPORARY TABLE tNewSaleList;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -53909,6 +54323,7 @@ BEGIN
DECLARE vInvoiceFk INT;
DECLARE vBookEntry INT;
DECLARE vFiscalYear INT;
+ DECLARE vIncorrectInvoiceInDueDay INT;
DECLARE vInvoicesIn CURSOR FOR
SELECT DISTINCT e.invoiceInFk
@@ -53921,6 +54336,19 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ SELECT GROUP_CONCAT(ii.id) INTO vIncorrectInvoiceInDueDay
+ FROM invoiceInDueDay iidd
+ JOIN invoiceIn ii ON iidd.invoiceInFk = ii.id
+ JOIN `entry` e ON e.invoiceInFk = ii.id
+ JOIN duaEntry de ON de.entryFk = e.id
+ JOIN invoiceInConfig iic
+ WHERE de.duaFk = vDuaFk
+ AND iidd.dueDated <= util.VN_CURDATE() + INTERVAL iic.dueDateMarginDays DAY;
+
+ IF vIncorrectInvoiceInDueDay THEN
+ CALL util.throw(CONCAT('Incorrect due date, invoice: ', vIncorrectInvoiceInDueDay));
+ END IF;
+
UPDATE invoiceIn ii
JOIN entry e ON e.invoiceInFk = ii.id
JOIN duaEntry de ON de.entryFk = e.id
@@ -53978,7 +54406,7 @@ BEGIN
AND (NOT e.isBooked OR NOT e.isConfirmed)
),
notBookedEntries AS (
- SELECT e.id
+ SELECT entryFk
FROM vn.duaEntry
WHERE duaFk = vDuaFk
AND NOT customsValue
@@ -54938,7 +55366,7 @@ BEGIN
FROM tmp.itemList;
END IF;
- CALL buyUltimateFromInterval(vWarehouseIn,vInventoryDate, vDateLanded);
+ CALL buy_getUltimateFromInterval(NULL, vWarehouseIn,vInventoryDate, vDateLanded);
CREATE OR REPLACE TEMPORARY TABLE tTransfer
ENGINE = MEMORY
@@ -55078,7 +55506,7 @@ BEGIN
AND e.id = vSelf;
IF vIsEditable AND NOT IFNULL(@isModeInventory, FALSE) THEN
- CALL util.throw('Entry is not editable');
+ CALL util.throw(CONCAT('Entry ', vSelf, ' is not editable'));
END IF;
END ;;
DELIMITER ;
@@ -55414,60 +55842,45 @@ BEGIN
DECLARE vBuyStickers INT;
DECLARE vDone BOOLEAN DEFAULT FALSE;
- DECLARE cur CURSOR FOR
+ DECLARE cur CURSOR FOR
SELECT bb.id buyFk,
FLOOR(ish.visible / ish.packing) ishStickers,
bb.stickers buyStickers
- FROM vn.itemShelving ish
+ FROM itemShelving ish
JOIN (SELECT b.id, b.itemFk, b.stickers
- FROM vn.buy b
- WHERE b.entryFk = vFromEntryFk
- ORDER BY b.stickers DESC
- LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk
- AND bb.stickers >= FLOOR(ish.visible / ish.packing)
- WHERE shelvingFk = vShelvingFk COLLATE utf8_general_ci
- GROUP BY ish.id;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
-
- -- Cantidades de la matrícula que exceden la de las entradas
- SELECT ish.itemFk,
- i.longName,
- FLOOR(ish.visible / ish.packing) AS etiEnMatricula,
- bb.stickers etiEnEntrada
- FROM vn.itemShelving ish
- JOIN vn.item i ON i.id = ish.itemFk
- LEFT JOIN (SELECT b.id, b.itemFk, b.stickers
- FROM vn.buy b
+ FROM buy b
WHERE b.entryFk = vFromEntryFk
ORDER BY b.stickers DESC
LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk
- WHERE shelvingFk = vShelvingFk COLLATE utf8_general_ci
- AND IFNULL(bb.stickers,0) < FLOOR(ish.visible / ish.packing)
+ AND bb.stickers >= FLOOR(ish.visible / ish.packing)
+ WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_general_ci
+ AND NOT ish.isSplit
GROUP BY ish.id;
-
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
OPEN cur;
read_loop: LOOP
SET vDone = FALSE;
FETCH cur INTO vBuyFk, vIshStickers, vBuyStickers;
-
+
IF vDone THEN
LEAVE read_loop;
END IF;
-
+
IF vIshStickers = vBuyStickers THEN
- UPDATE vn.buy
+ UPDATE buy
SET entryFk = vToEntryFk
WHERE id = vBuyFk;
ELSE
- UPDATE vn.buy
+ UPDATE buy
SET stickers = stickers - vIshStickers,
quantity = stickers * packing
WHERE id = vBuyFk;
-
- INSERT INTO vn.buy(entryFk,
+
+ INSERT INTO buy(entryFk,
itemFk,
quantity,
buyingValue,
@@ -55518,13 +55931,16 @@ BEGIN
weight,
deliveryFk,
itemOriginalFk
- FROM vn.buy
+ FROM buy
WHERE id = vBuyFk;
UPDATE buy SET printedStickers = vIshStickers WHERE id = LAST_INSERT_ID();
END IF;
- END LOOP;
+ UPDATE itemShelving
+ SET isSplit = TRUE
+ WHERE shelvingFk = vShelvingFk COLLATE utf8_general_ci;
+ END LOOP;
CLOSE cur;
END ;;
DELIMITER ;
@@ -55724,7 +56140,12 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionPallet_build`(IN vExpeditions JSON, IN vArcId INT, IN vWorkerFk INT, OUT vPalletFk INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionPallet_build`(
+ vExpeditions JSON,
+ vArcId INT,
+ vWorkerFk INT,
+ OUT vPalletFk INT
+)
BEGIN
/** Construye un pallet de expediciones.
*
@@ -55732,28 +56153,22 @@ BEGIN
* en cuyo caso actualiza ese pallet.
*
* @param vExpeditions JSON_ARRAY con esta estructura [exp1, exp2, exp3, ...]
- * @param vArcId INT Identificador de vn.arcRead
- * @param vWorkerFk INT Identificador de vn.worker
- * @param out vPalletFk Identificador de vn.expeditionPallet
+ * @param vArcId INT Identificador de arcRead
+ * @param vWorkerFk INT Identificador de worker
+ * @param out vPalletFk Identificador de expeditionPallet
*/
DECLARE vCounter INT;
DECLARE vExpeditionFk INT;
DECLARE vTruckFk INT;
DECLARE vPrinterFk INT;
+ DECLARE vExpeditionStateTypeFk INT;
- DROP TEMPORARY TABLE IF EXISTS tExpedition;
- CREATE TEMPORARY TABLE tExpedition
- SELECT
- e.id expeditionFk,
- r.id routeFk,
- ep.id palletFk
- FROM
- vn.expedition e,
- vn.route r,
- vn.expeditionPallet ep
- LIMIT 0;
-
- ALTER TABLE tExpedition ADD PRIMARY KEY (expeditionFk);
+ CREATE OR REPLACE TEMPORARY TABLE tExpedition (
+ expeditionFk INT,
+ routeFk INT,
+ palletFk INT,
+ PRIMARY KEY (expeditionFk)
+ );
SET vCounter = JSON_LENGTH(vExpeditions);
@@ -55764,53 +56179,58 @@ BEGIN
INSERT IGNORE INTO tExpedition(expeditionFk, routeFk, palletFk)
SELECT vExpeditionFk, t.routeFk, es.palletFk
- FROM vn.expedition e
- LEFT JOIN vn.ticket t ON t.id = e.ticketFk
- LEFT JOIN vn.expeditionScan es ON es.expeditionFk = e.id
+ FROM expedition e
+ LEFT JOIN ticket t ON t.id = e.ticketFk
+ LEFT JOIN expeditionScan es ON es.expeditionFk = e.id
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
+ SELECT palletFk, count(*) n
+ FROM tExpedition
+ WHERE palletFk > 0
+ GROUP BY palletFk
+ ORDER BY n DESC
+ LIMIT 100
+ ) sub
LIMIT 1;
IF vPalletFk IS NULL THEN
- SELECT roadmapStopFk
- INTO vTruckFk
- FROM (
- SELECT rm.roadmapStopFk, count(*) n
- FROM vn.routesMonitor rm
- JOIN tExpedition e ON e.routeFk = rm.routeFk
- GROUP BY roadmapStopFk
- ORDER BY n DESC
- LIMIT 1) sub;
+ 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;
IF vTruckFk IS NULL THEN
CALL util.throw ('TRUCK_NOT_AVAILABLE');
END IF;
- INSERT INTO vn.expeditionPallet(truckFk)
- VALUES(vTruckFk);
+ INSERT INTO expeditionPallet SET truckFk = vTruckFk;
SET vPalletFk = LAST_INSERT_ID();
END IF;
- INSERT INTO vn.expeditionScan(expeditionFk, palletFk, workerFk)
+ INSERT INTO expeditionScan(expeditionFk, palletFk, workerFk)
SELECT expeditionFk, vPalletFk, vWorkerFk
FROM tExpedition
ON DUPLICATE KEY UPDATE palletFk = vPalletFk, workerFk = vWorkerFk;
- SELECT printerFk INTO vPrinterFk
- FROM vn.arcRead
- WHERE id = vArcId;
+ SELECT id INTO vExpeditionStateTypeFk
+ FROM expeditionStateType
+ WHERE code = 'PALLETIZED';
- CALL vn.report_print(
+ INSERT INTO expeditionState(expeditionFk, typeFk)
+ SELECT expeditionFk, vExpeditionStateTypeFk FROM tExpedition;
+
+ SELECT printerFk INTO vPrinterFk FROM arcRead WHERE id = vArcId;
+
+ CALL report_print(
'LabelPalletExpedition',
vPrinterFk,
account.myUser_getId(),
@@ -55818,7 +56238,7 @@ BEGIN
'high'
);
- UPDATE vn.expeditionPallet SET isPrint = TRUE WHERE id = vPalletFk;
+ UPDATE expeditionPallet SET isPrint = TRUE WHERE id = vPalletFk;
DROP TEMPORARY TABLE tExpedition;
END ;;
@@ -57376,7 +57796,9 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceInDueDay_calculate`(vInvoiceInFk INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceInDueDay_calculate`(
+vInvoiceInFk INT
+)
BEGIN
/**
* Calcula los vctos. de una factura recibida
@@ -57433,12 +57855,13 @@ BEGIN
COUNT(DISTINCT(pdd.detail)) cont,
s.payDay,
ii.issued,
- DATE(ii.created) + INTERVAL 2 DAY created
+ DATE(ii.created) + INTERVAL iic.dueDateMarginDays DAY created
FROM invoiceIn ii
JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva= iit.taxTypeSageFk
JOIN supplier s ON s.id = ii.supplierFk
- JOIN payDemDetail pdd ON pdd.id = s.payDemFk
+ JOIN payDemDetail pdd ON pdd.id = s.payDemFk
+ JOIN invoiceInConfig iic
WHERE ii.id = vInvoiceInFk
GROUP BY ii.id
)sub
@@ -57769,18 +58192,18 @@ BEGIN
* @param vBookEntry Id de asiento, si es NULL se genera uno nuevo
*/
DECLARE vFiscalYear INT;
- DECLARE vHasDistinctTransactions INT;
+ DECLARE vHasRepeatedTransactions BOOL;
- SELECT COUNT(DISTINCT transactionTypeSageFk) INTO vHasDistinctTransactions
- FROM invoiceIn ii
- JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
- JOIN invoiceInSerial iis ON iis.code = ii.serial
+ SELECT TRUE INTO vHasRepeatedTransactions
+ FROM invoiceInTax iit
+ JOIN invoiceIn ii ON ii.id = iit.invoiceInFk
WHERE ii.id = vSelf
- AND iis.taxAreaFk = 'CEE'
- AND transactionTypeSageFk;
+ AND ii.serial = 'E'
+ HAVING COUNT(DISTINCT iit.transactionTypeSageFk) > 1
+ LIMIT 1;
- IF vHasDistinctTransactions > 1 THEN
- CALL util.throw ('This invoice does not allow different types of transactions');
+ IF vHasRepeatedTransactions THEN
+ CALL util.throw ('This invoice contains different types of transactions');
END IF;
CREATE OR REPLACE TEMPORARY TABLE tInvoiceIn
@@ -58837,7 +59260,7 @@ BEGIN
i.transactionTypeSageFk,
@vTaxCodeGeneral := i.taxClassCodeFk
FROM tmp.ticketServiceTax tst
- JOIN invoiceOutTaxConfig i ON i.taxClassCodeFk = tst.code
+ JOIN invoiceOutTaxMultiConfig i ON i.taxClassCodeFk = tst.code
WHERE i.isService
HAVING taxableBase
) sub;
@@ -58850,7 +59273,7 @@ BEGIN
i.taxTypeSageFk ,
i.transactionTypeSageFk
FROM tmp.ticketTax tt
- JOIN invoiceOutTaxConfig i ON i.taxClassCodeFk = tt.code
+ JOIN invoiceOutTaxMultiConfig i ON i.taxClassCodeFk = tt.code
WHERE !i.isService
GROUP BY tt.pgcFk
HAVING taxableBase
@@ -59193,6 +59616,47 @@ 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 `itemMinimumQuantity_check` */;
+/*!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 `itemMinimumQuantity_check`(
+ vSelf INT,
+ vItemFk INT,
+ vStarted DATE,
+ vEnded DATE,
+ vWarehouseFk INT
+)
+BEGIN
+ DECLARE vHasCollision BOOL;
+
+ IF vStarted IS NULL THEN
+ CALL util.throw('The field "started" cannot be null');
+ END IF;
+
+ SELECT COUNT(*) INTO vHasCollision
+ FROM itemMinimumQuantity
+ WHERE vItemFk = itemFk
+ AND ((vStarted <= ended OR ended IS NULL)
+ AND (vStarted >= `started` OR vEnded IS NULL))
+ AND (vWarehouseFk <=> warehouseFk)
+ AND vSelf <> id;
+
+ IF vHasCollision THEN
+ CALL util.throw('A line with the same configuration already exists');
+ 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 `itemPlacementFromTicket` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -60237,7 +60701,7 @@ BEGIN
LEAVE l;
END IF;
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, NULL);
END LOOP;
CLOSE vSales;
END ;;
@@ -60256,105 +60720,181 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_addBySale`(
- vSaleFk INT
+CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_addBySale`(
+ vSaleFk INT,
+ vSectorFk INT
)
-proc: BEGIN
-/**
- * Reserva una línea de venta en la ubicación más óptima
- *
- * @param vSaleFk Id de sale
- * @param vItemShelvingSaleFk Id de reserva
- */
- DECLARE vLastPickingOrder INT;
- DECLARE vDone INT DEFAULT FALSE;
- DECLARE vItemShelvingFk INT;
- DECLARE vAvailable INT;
- DECLARE vReservedQuantity INT;
- DECLARE vOutStanding INT;
- DECLARE vUserFk INT;
-
- DECLARE vItemShelvingAvailable CURSOR FOR
- SELECT ish.id itemShelvingFk,
- ish.available
- FROM sale s
- JOIN itemShelving ish ON ish.itemFk = s.itemFk
- JOIN shelving sh ON sh.code = ish.shelvingFk
- JOIN parking p ON p.id = sh.parkingFk
- JOIN sector sc ON sc.id = p.sectorFk
- JOIN productionConfig pc
- WHERE s.id = vSaleFk
- AND NOT sc.isHideForPickers
- ORDER BY s.id,
- p.pickingOrder >= vLastPickingOrder,
- sh.priority DESC,
- ish.available >= s.quantity DESC,
- s.quantity MOD ish.grouping = 0 DESC,
- ish.grouping DESC,
- IF(pc.orderMode = 'Location', p.pickingOrder, ish.created);
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
- SELECT MAX(p.pickingOrder), s.quantity - SUM(IFNULL(iss.quantity, 0))
- INTO vLastPickingOrder, vOutStanding
- FROM sale s
- LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
- LEFT JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
- LEFT JOIN shelving sh ON sh.code = ish.shelvingFk
- LEFT JOIN parking p ON p.id = sh.parkingFk
- WHERE s.id = vSaleFk;
-
- IF vOutStanding <= 0 THEN
- LEAVE proc;
- END IF;
-
- SELECT getUser() INTO vUserFk;
-
- OPEN vItemShelvingAvailable;
- l: LOOP
- SET vDone = FALSE;
- FETCH vItemShelvingAvailable INTO vItemShelvingFk, vAvailable;
-
- IF vOutStanding <= 0 OR vDone THEN
- LEAVE l;
- END IF;
-
- START TRANSACTION;
-
- SELECT id INTO vItemShelvingFk
- FROM itemShelving
- WHERE id = vItemShelvingFk
- FOR UPDATE;
-
- SELECT LEAST(vOutStanding, vAvailable) INTO vReservedQuantity;
- SET vOutStanding = vOutStanding - vReservedQuantity;
-
- IF vReservedQuantity > 0 THEN
-
- INSERT INTO itemShelvingSale(
- itemShelvingFk,
- saleFk,
- quantity,
- userFk)
- SELECT vItemShelvingFk,
- vSaleFk,
- vReservedQuantity,
- vUserFk;
-
- UPDATE itemShelving
- SET available = available - vReservedQuantity
- WHERE id = vItemShelvingFk;
-
- END IF;
-
- COMMIT;
- END LOOP;
- CLOSE vItemShelvingAvailable;
+proc: BEGIN
+/**
+ * Reserva una línea de venta en la ubicación más óptima
+ *
+ * @param vSaleFk Id de sale
+ * @param vItemShelvingSaleFk Id de reserva
+ * @param vSectorFk Id del sector del operator
+ */
+ DECLARE vLastPickingOrder INT;
+ DECLARE vDone INT DEFAULT FALSE;
+ DECLARE vItemShelvingFk INT;
+ DECLARE vAvailable INT;
+ DECLARE vReservedQuantity INT;
+ DECLARE vOutStanding INT;
+ DECLARE vUserFk INT;
+ DECLARE vTotalReservedQuantity INT;
+ DECLARE vSaleQuantity INT;
+
+ DECLARE vItemShelvingAvailable CURSOR FOR
+ SELECT ish.id itemShelvingFk,
+ ish.available
+ FROM sale s
+ JOIN itemShelving ish ON ish.itemFk = s.itemFk
+ JOIN shelving sh ON sh.code = ish.shelvingFk
+ JOIN parking p ON p.id = sh.parkingFk
+ JOIN sector sc ON sc.id = p.sectorFk
+ JOIN productionConfig pc
+ WHERE s.id = vSaleFk
+ AND NOT sc.isHideForPickers
+ AND (sc.id = vSectorFk OR vSectorFk IS NULL)
+ ORDER BY s.id,
+ p.pickingOrder >= vLastPickingOrder,
+ sh.priority DESC,
+ ish.available >= s.quantity DESC,
+ s.quantity MOD ish.grouping = 0 DESC,
+ ish.grouping DESC,
+ IF(pc.orderMode = 'Location', p.pickingOrder, ish.created);
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ SELECT MAX(p.pickingOrder), s.quantity - SUM(IFNULL(iss.quantity, 0)), s.quantity
+ INTO vLastPickingOrder, vOutStanding, vSaleQuantity
+ FROM sale s
+ LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
+ LEFT JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ LEFT JOIN shelving sh ON sh.code = ish.shelvingFk
+ LEFT JOIN parking p ON p.id = sh.parkingFk
+ WHERE s.id = vSaleFk;
+
+ IF vOutStanding <= 0 THEN
+ LEAVE proc;
+ END IF;
+
+ SELECT getUser() INTO vUserFk;
+
+ OPEN vItemShelvingAvailable;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vItemShelvingAvailable INTO vItemShelvingFk, vAvailable;
+
+ IF vOutStanding <= 0 OR vDone THEN
+ SELECT SUM(IFNULL(quantity, 0))
+ INTO vTotalReservedQuantity
+ FROM itemShelvingSale
+ WHERE saleFk = vSaleFk;
+
+ IF vTotalReservedQuantity <> vSaleQuantity THEN
+ UPDATE sale
+ SET quantity = vTotalReservedQuantity
+ WHERE id = vSaleFk;
+ END IF;
+ LEAVE l;
+ END IF;
+
+ START TRANSACTION;
+
+ SELECT id INTO vItemShelvingFk
+ FROM itemShelving
+ WHERE id = vItemShelvingFk
+ FOR UPDATE;
+
+ SELECT LEAST(vOutStanding, vAvailable) INTO vReservedQuantity;
+ SET vOutStanding = vOutStanding - vReservedQuantity;
+
+ IF vReservedQuantity > 0 THEN
+
+ INSERT INTO itemShelvingSale(
+ itemShelvingFk,
+ saleFk,
+ quantity,
+ userFk,
+ isPicked)
+ SELECT vItemShelvingFk,
+ vSaleFk,
+ vReservedQuantity,
+ vUserFk,
+ FALSE;
+
+ UPDATE itemShelving
+ SET available = available - vReservedQuantity
+ WHERE id = vItemShelvingFk;
+
+ END IF;
+
+ COMMIT;
+ END LOOP;
+ CLOSE vItemShelvingAvailable;
+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 `itemShelvingSale_addBySaleGroup` */;
+/*!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 `itemShelvingSale_addBySaleGroup`(
+ vSaleGroupFk INT(11)
+)
+BEGIN
+/**
+ * Reserva cantidades con ubicaciones para el contenido de una preparación previa
+ * a través del saleGroup
+ *
+ * @param vSaleGroupFk Identificador de saleGroup
+ */
+ DECLARE vDone BOOL DEFAULT FALSE;
+ DECLARE vSaleFk INT;
+ DECLARE vSectorFk INT;
+ DECLARE vSales CURSOR FOR
+ SELECT s.id
+ FROM saleGroupDetail sgd
+ JOIN sale s ON sgd.saleFk = s.id
+ JOIN saleTracking str ON str.saleFk = s.id
+ JOIN `state` st ON st.id = str.stateFk
+ AND st.code = 'PREVIOUS_PREPARATION'
+ LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
+ WHERE sgd.saleGroupFk = vSaleGroupFk
+ AND str.workerFk = account.myUser_getId()
+ AND iss.id IS NULL;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ SELECT sectorFk INTO vSectorFk
+ FROM operator
+ WHERE workerFk = account.myUser_getId();
+
+ OPEN vSales;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vSales INTO vSaleFk;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
+ END LOOP;
+ CLOSE vSales;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -60381,6 +60921,7 @@ BEGIN
*/
DECLARE vDone BOOL DEFAULT FALSE;
DECLARE vSaleFk INT;
+ DECLARE vSectorFk INT;
DECLARE vSales CURSOR FOR
SELECT s.id
FROM sectorCollectionSaleGroup sc
@@ -60396,6 +60937,10 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ SELECT sectorFk INTO vSectorFk
+ FROM operator
+ WHERE workerFk = account.myUser_getId();
+
OPEN vSales;
l: LOOP
SET vDone = FALSE;
@@ -60405,7 +60950,7 @@ BEGIN
LEAVE l;
END IF;
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
END LOOP;
CLOSE vSales;
END ;;
@@ -60431,9 +60976,10 @@ proc: BEGIN
*/
DECLARE vDone BOOL;
DECLARE vSaleFk INT;
+ DECLARE vSectorFk INT;
DECLARE vSales CURSOR FOR
- SELECT DISTINCT saleFk FROM tSale;
+ SELECT DISTINCT saleFk, sectorFk FROM tSale;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
@@ -60451,24 +60997,25 @@ proc: BEGIN
CREATE OR REPLACE TEMPORARY TABLE tSale
ENGINE = MEMORY
- SELECT id, saleFk FROM itemShelvingSaleReserve;
+ SELECT id, saleFk, sectorFk FROM itemShelvingSaleReserve;
OPEN vSales;
myLoop: LOOP
SET vDone = FALSE;
- FETCH vSales INTO vSaleFk;
+ FETCH vSales INTO vSaleFk, vSectorFk;
IF vDone THEN
LEAVE myLoop;
END IF;
- CALL itemShelvingSale_addBySale (vSaleFk);
+ CALL itemShelvingSale_addBySale (vSaleFk, vSectorFk);
END LOOP;
CLOSE vSales;
- DELETE iss FROM itemShelvingSaleReserve iss JOIN tSale s ON s.id = iss.id;
+ DELETE iss FROM itemShelvingSaleReserve iss
+ JOIN tSale s ON s.id = iss.id AND s.sectorFk = iss.sectorFk;
DROP TEMPORARY TABLE tSale;
@@ -60489,52 +61036,58 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_reallocate`(
- vItemShelvingFk INT(10),
- vItemFk INT(10)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_reallocate`(
+ vItemShelvingFk INT(10),
+ vItemFk INT(10),
+ vSectorFk INT
)
-BEGIN
-/**
- * Elimina reservas de un itemShelving e intenta reservar en otra ubicación
- *
- * @param vItemShelvingFk Id itemShelving
- */
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
- START TRANSACTION;
-
- SELECT id INTO vItemShelvingFk
- FROM itemShelving
- WHERE id = vItemShelvingFk
- FOR UPDATE;
-
- UPDATE itemShelving
- SET visible = 0,
- available = 0
- WHERE id = vItemShelvingFk
- AND itemFk = vItemFk;
-
- INSERT INTO itemShelvingSaleReserve (saleFk)
- SELECT DISTINCT iss.saleFk
- FROM itemShelvingSale iss
- JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
- WHERE iss.itemShelvingFk = vItemShelvingFk
- AND ish.itemFk = vItemFk
- AND NOT iss.isPicked;
-
- DELETE iss
- FROM itemShelvingSale iss
- JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
- WHERE iss.itemShelvingFk = vItemShelvingFk
- AND ish.itemFk = vItemFk
- AND NOT iss.isPicked;
- COMMIT;
-
- CALL itemShelvingSale_doReserve();
+BEGIN
+/**
+ * Elimina reservas de un itemShelving e intenta reservar en otra ubicación
+ *
+ * @param vItemShelvingFk Id itemShelving
+ * @param vItemFk Id del artículo
+ * @param vSectorFk Id del sector
+ */
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ START TRANSACTION;
+
+ UPDATE itemShelving
+ SET visible = 0,
+ available = 0
+ WHERE id = vItemShelvingFk
+ AND itemFk = vItemFk;
+
+ SELECT iss.id
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND ish.itemFk = vItemFk
+ AND NOT iss.isPicked
+ FOR UPDATE;
+
+ INSERT INTO itemShelvingSaleReserve (saleFk, sectorFk)
+ SELECT DISTINCT iss.saleFk, vSectorFk
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND ish.itemFk = vItemFk
+ AND NOT iss.isPicked;
+
+ DELETE iss
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND ish.itemFk = vItemFk
+ AND NOT iss.isPicked;
+ COMMIT;
+
+ CALL itemShelvingSale_doReserve();
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -60601,7 +61154,8 @@ DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_setQuantity`(
vItemShelvingSaleFk INT(10),
vQuantity DECIMAL(10,0),
- vIsItemShelvingSaleEmpty BOOLEAN
+ vIsItemShelvingSaleEmpty BOOLEAN,
+ vSectorFk INT
)
BEGIN
/**
@@ -60613,6 +61167,7 @@ BEGIN
* @param vQuantity Cantidad real que se ha cogido de la ubicación
* @param vIsItemShelvingSaleEmpty determina si la ubicación itemShelvingSale se ha
* quedado vacio tras el movimiento
+ * @param vSectorFk Id del sector
*/
DECLARE vSaleFk INT;
DECLARE vItemShelvingFk INT;
@@ -60620,6 +61175,7 @@ BEGIN
DECLARE vRemainingQuantity INT;
DECLARE vItemFk INT;
DECLARE vTotalQuantity INT;
+ DECLARE vStateCode VARCHAR(45);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
@@ -60627,21 +61183,35 @@ BEGIN
RESIGNAL;
END;
+ IF vQuantity > vReservedQuantity
+ OR (vQuantity < vReservedQuantity AND NOT vIsItemShelvingSaleEmpty)
+ OR (vQuantity = vReservedQuantity AND vIsItemShelvingSaleEmpty) THEN
+ CALL util.throw('The quantity cannot be different from the reserved');
+ END IF;
+
IF (SELECT isPicked FROM itemShelvingSale WHERE id = vItemShelvingSaleFk) THEN
CALL util.throw('Reservation completed');
END IF;
- SELECT s.itemFk, iss.saleFk, iss.itemShelvingFk, SUM(IFNULL(iss.quantity,0))
- INTO vItemFk, vSaleFk, vItemShelvingFk, vReservedQuantity
+ SELECT s.itemFk,
+ iss.saleFk,
+ iss.itemShelvingFk,
+ SUM(IFNULL(iss.quantity,0)),
+ IF(sgd.id, 'PREVIOUS_PREPARATION', 'PREPARED')
+ INTO vItemFk,
+ vSaleFk,
+ vItemShelvingFk,
+ vReservedQuantity,
+ vStateCode
FROM itemShelvingSale iss
JOIN sale s ON s.id = iss.saleFk
+ LEFT JOIN vn.saleGroupDetail sgd ON sgd.saleFk = iss.saleFk
WHERE iss.id = vItemShelvingSaleFk
AND NOT iss.isPicked;
IF vQuantity > vReservedQuantity
- OR (vQuantity < vReservedQuantity AND
- (NOT vIsItemShelvingSaleEmpty OR vIsItemShelvingSaleEmpty IS NULL))
- OR (vIsItemShelvingSaleEmpty IS NOT NULL AND vQuantity = vReservedQuantity) THEN
+ OR (vQuantity < vReservedQuantity AND NOT vIsItemShelvingSaleEmpty)
+ OR (vQuantity = vReservedQuantity AND vIsItemShelvingSaleEmpty) THEN
CALL util.throw('The quantity cannot be different from the reserved');
END IF;
@@ -60661,7 +61231,7 @@ BEGIN
SET visible = GREATEST(0, visible - vQuantity)
WHERE id = vItemShelvingFk;
- SELECT SUM(IF(isPicked, 0, quantity)), SUM(quantity)
+ SELECT SUM(IF(isPicked OR id = vItemShelvingSaleFk, 0, quantity)), SUM(quantity)
INTO vRemainingQuantity, vTotalQuantity
FROM itemShelvingSale
WHERE saleFk = vSaleFk;
@@ -60673,7 +61243,7 @@ BEGIN
vTotalQuantity,
`account`.`myUser_getId`(),
NULL,
- 'PREPARED',
+ vStateCode,
TRUE);
UPDATE sale s
@@ -60685,9 +61255,9 @@ BEGIN
COMMIT;
IF vIsItemShelvingSaleEmpty AND vQuantity <> vReservedQuantity THEN
- INSERT INTO itemShelvingSaleReserve (saleFk)
- SELECT vSaleFk;
- CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk);
+ INSERT INTO itemShelvingSaleReserve (saleFk, sectorFk)
+ SELECT vSaleFk, vSectorFk;
+ CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk, vSectorFk);
END IF;
END ;;
DELIMITER ;
@@ -60880,7 +61450,7 @@ BEGIN
JOIN ticket t ON t.id = c.ticketFk
WHERE c.id = vClaimFk;
- CALL buyUltimate (vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(NULL, vWarehouseFk, util.VN_CURDATE());
INSERT INTO itemShelving (itemFk, shelvingFk, packing, `grouping`, visible)
SELECT s.itemFk, vShelvingFk, b.packing, b.`grouping`, cb.quantity AS visible
@@ -61083,7 +61653,8 @@ BEGIN
ish.id,
s.priority,
ish.isChecked,
- ic.url
+ ic.url,
+ ish.available
FROM itemShelving ish
JOIN item i ON i.id = ish.itemFk
JOIN shelving s ON vSelf = s.code COLLATE utf8_unicode_ci
@@ -61202,7 +61773,7 @@ BEGIN
FROM operator
WHERE workerFk = account.myUser_getId();
- CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(vBarcodeItem, vWarehouseFk, util.VN_CURDATE());
SELECT buyFk INTO vBuyFk
FROM tmp.buyUltimate
@@ -61484,6 +62055,8 @@ BEGIN
WHERE p.pickingOrder BETWEEN vPickingOrderFrom AND vPickingOrderTo
AND p.sectorFk = vSectorFk
ORDER BY p.pickingOrder;
+
+ DROP TEMPORARY TABLE tmp.stockMisfit;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -62006,6 +62579,81 @@ SET tag8 = t.name, value8 = it.value
WHERE it.priority = 4
AND (vItem IS NULL OR vItem = it.itemFk);
+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_calcVisible` */;
+/*!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 `item_calcVisible`(
+ vSelf INT,
+ vWarehouseFk INT
+)
+BEGIN
+/**
+ * Calcula el visible de un artículo o de todos.
+ *
+ * @param vWarehouse Warehouse id
+ * @param vSelf Item id
+ * @param tmp.itemVisible(item_id, stock, visible)
+ */
+ DECLARE vDated DATE DEFAULT util.VN_CURDATE();
+ DECLARE vTomorrow DATETIME DEFAULT util.tomorrow();
+
+ INSERT INTO tmp.itemVisible(item_id, visible)
+ SELECT itemFk, SUM(quantity)
+ FROM (
+ SELECT i.itemFk, i.quantity
+ FROM itemTicketOut i
+ LEFT JOIN ticketState ts ON ts.ticketFk = i.ticketFk
+ JOIN `state` s ON s.id = ts.stateFk
+ JOIN warehouse w ON w.id = i.warehouseFk
+ LEFT JOIN (
+ SELECT DISTINCT st.saleFk
+ FROM saleTracking st
+ JOIN state s ON s.id = st.stateFk
+ WHERE st.created > vDated
+ AND (s.isPicked OR st.isChecked)
+ ) stPrevious ON `stPrevious`.`saleFk` = i.saleFk
+ WHERE (vWarehouseFk IS NULL OR i.warehouseFk = vWarehouseFk)
+ AND (vSelf IS NULL OR i.itemFk = vSelf)
+ AND (s.isPicked OR i.reserved OR stPrevious.saleFk)
+ AND i.shipped >= vDated AND i.shipped < vTomorrow
+ AND w.isComparative
+ UNION ALL
+ SELECT iei.itemFk, iei.quantity
+ FROM itemEntryIn iei
+ JOIN warehouse w ON w.id = iei.warehouseInFk
+ WHERE iei.isReceived
+ AND iei.landed >= vDated AND iei.landed < vTomorrow
+ AND (vWarehouseFk IS NULL OR iei.warehouseInFk = vWarehouseFk)
+ AND (vSelf IS NULL OR iei.itemFk = vSelf)
+ AND NOT iei.isVirtualStock
+ AND w.isComparative
+ UNION ALL
+ SELECT ieo.itemFk, ieo.quantity
+ FROM itemEntryOut ieo
+ JOIN warehouse w ON w.id = ieo.warehouseOutFk
+ WHERE ieo.isDelivered
+ AND ieo.shipped >= vDated
+ AND ieo.shipped < vTomorrow
+ AND (vWarehouseFk IS NULL OR ieo.warehouseOutFk = vWarehouseFk)
+ AND (vSelf IS NULL OR ieo.itemFk = vSelf)
+ AND w.isComparative
+ ) t
+ GROUP BY itemFk
+ ON DUPLICATE KEY UPDATE
+ visible = IFNULL(stock, 0) + VALUES(visible);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -62246,19 +62894,20 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `item_comparative`(
)
proc: BEGIN
/**
- * Genera una tabla de comparativa de artículos por itemType/comprador/fecha.
- * Los datos se calculan en función de los parámetros proporcionados.
+ * Generates a comparison table of items by itemType/buyer/date.
+ * The data is calculated based on the provided parameters.
*
- * @param vDate La fecha para la cual se generará la comparativa.
- * @param vDayRange El rango de días a considerar para la comparativa.
- * @param vWarehouseFk El identificador del almacén para filtrar los artículos.
- * @param vAvailableSince La fecha de disponibilidad desde la cual se consideran los artículos disponibles.
- * @param vBuyerFk El identificador del comprador para filtrar los artículos.
- * @param vIsFloramondo Indica si se deben incluir solo los artículos de Floramondo (opcional).
- * @param vCountryFk El identificador del país.
- * @param tmp.comparativeFilterType(filterFk INT ,itemTypeFk INT)
+ * @param vDate The date for which the comparison will be generated.
+ * @param vDayRange The range of days to consider for the comparison.
+ * @param vWarehouseFk The warehouse identifier to filter the items.
+ * @param vAvailableSince The availability date from which the items are considered available.
+ * @param vBuyerFk The buyer identifier to filter the items.
+ * @param vIsFloramondo Indicates whether only Floramondo items should be included (optional).
+ * @param vCountryFk The country identifier.
+ * @param tmp.comparativeFilterType(filterFk INT, itemTypeFk INT)
* @return tmp.comparative
*/
+
DECLARE vDayRangeStart DATE;
DECLARE vDayRangeEnd DATE;
DECLARE w1, w2, w3, w4, w5, w6, w7 INT;
@@ -62631,7 +63280,7 @@ BEGIN
END IF;
SELECT warehouseFk INTO vWarehouseFk
- FROM userConfig
+ FROM userMultiConfig
WHERE userFk = account.myUser_getId();
IF NOT vWarehouseFk OR vWarehouseFk IS NULL THEN
@@ -62682,7 +63331,7 @@ BEGIN
ORDER BY created DESC
LIMIT 1;
- CALL buyUltimate(vWarehouseFk, vCurdate);
+ CALL buy_getUltimate(vSelf, vWarehouseFk, vCurdate);
SELECT b.entryFk, bu.buyFk,IFNULL(b.buyingValue, 0) INTO vLastEntryFk, vLastBuyFk, vBuyingValueOriginal
FROM tmp.buyUltimate bu
@@ -63073,94 +63722,84 @@ DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `item_getBalance`(
vItemFk INT,
vWarehouseFk INT,
- vDate DATETIME
+ vDated DATETIME
)
BEGIN
/**
- * @vItemFk item a buscar
- * @vWarehouseFk almacen donde buscar
- * @vDate Si la fecha es null, muestra el histórico desde el inventario.
- * Si la fecha no es null, muestra histórico desde la fecha de vDate.
+ * Calcula el balance de un artículo.
+ *
+ * @vItemFk Id de artículo
+ * @vWarehouseFk Id de almacén
+ * @vDated Fecha a calcular, si es NULL muestra el histórico desde el inventario
*/
- DECLARE vDateInventory DATETIME;
+ DECLARE vDateInventory DATETIME
+ DEFAULT (
+ SELECT IF(vDated, uc.mockUtcTime, c.inventoried)
+ FROM config c
+ JOIN util.config uc
+ );
+ DECLARE vSupplierInventoryFk INT
+ DEFAULT (SELECT supplierFk FROM inventoryConfig);
- IF vDate IS NULL THEN
- SELECT inventoried INTO vDateInventory
- FROM config;
- ELSE
- SELECT mockUtcTime INTO vDateInventory
- FROM util.config;
+ IF NOT vSupplierInventoryFk OR NOT vDateInventory THEN
+ CALL util.throw('Config variables are not set');
END IF;
- CREATE OR REPLACE TEMPORARY TABLE tItemDiary(
- shipped DATE,
- `in` INT(11),
- `out` INT(11),
- alertLevel INT(11),
- stateName VARCHAR(20),
- `name` VARCHAR(50),
- reference VARCHAR(50),
- origin INT(11),
- clientFk INT(11),
- isPicked INT(11),
- isTicket TINYINT(1),
- lineFk INT(11),
- `order` TINYINT(3) UNSIGNED,
- clientType VARCHAR(20),
- claimFk INT(10) UNSIGNED,
- inventorySupplierFk INT(10)
- );
-
- INSERT INTO tItemDiary
+ CREATE OR REPLACE TEMPORARY TABLE tItemDiary
+ ENGINE = MEMORY
WITH entriesIn AS (
- SELECT tr.landed shipped,
+ SELECT 'entry' originType,
+ e.id originId,
+ tr.landed shipped,
b.quantity `in`,
NULL `out`,
st.alertLevel ,
st.name stateName,
- s.name `name`,
e.invoiceNumber reference,
- e.id origin,
- s.id clientFk,
+ 'supplier' entityType,
+ s.id entityId,
+ s.name entityName,
IF(st.`code` = 'DELIVERED', TRUE, FALSE) isPicked,
FALSE isTicket,
b.id lineFk,
NULL `order`,
NULL clientType,
NULL claimFk,
- ec.inventorySupplierFk
+ vSupplierInventoryFk inventorySupplierFk
FROM vn.buy b
JOIN vn.entry e ON e.id = b.entryFk
JOIN vn.travel tr ON tr.id = e.travelFk
JOIN vn.supplier s ON s.id = e.supplierFk
- JOIN vn.state st ON st.`code` = IF( tr.landed < util.VN_CURDATE()
+ JOIN vn.state st ON st.`code` = IF(tr.landed < util.VN_CURDATE()
OR (util.VN_CURDATE() AND tr.isReceived),
'DELIVERED',
'FREE')
- JOIN vn.entryConfig ec
WHERE tr.landed >= vDateInventory
- AND vWarehouseFk = tr.warehouseInFk
- AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
+ AND tr.warehouseInFk = vWarehouseFk
+ AND (s.id <> vSupplierInventoryFk OR vDated IS NULL)
AND b.itemFk = vItemFk
AND NOT e.isExcludedFromAvailable
AND NOT e.isRaid
- ), entriesOut AS (
- SELECT tr.shipped,
+ ),
+ entriesOut AS (
+ SELECT 'entry',
+ e.id originType,
+ tr.shipped,
NULL,
b.quantity,
st.alertLevel,
st.name stateName,
- s.name ,
e.invoiceNumber,
- e.id entryFk,
- s.id supplierFk,
+ 'supplier' entityType,
+ s.id entityId,
+ s.name,
IF(st.`code` = 'DELIVERED' , TRUE, FALSE),
FALSE isTicket,
b.id,
NULL `order`,
NULL clientType,
NULL claimFk,
- ec.inventorySupplierFk
+ vSupplierInventoryFk
FROM vn.buy b
JOIN vn.entry e ON e.id = b.entryFk
JOIN vn.travel tr ON tr.id = e.travelFk
@@ -63170,86 +63809,108 @@ BEGIN
OR (tr.shipped = util.VN_CURDATE() AND tr.isReceived),
'DELIVERED',
'FREE')
- JOIN vn.entryConfig ec
WHERE tr.shipped >= vDateInventory
- AND vWarehouseFk = tr.warehouseOutFk
- AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
+ AND tr.warehouseOutFk = vWarehouseFk
+ AND (s.id <> vSupplierInventoryFk OR vDated IS NULL)
AND b.itemFk = vItemFk
AND NOT e.isExcludedFromAvailable
AND NOT w.isFeedStock
AND NOT e.isRaid
- ), sales AS (
- SELECT DATE(t.shipped) shipped,
- s.quantity,
- st2.alertLevel,
- st2.name,
- t.nickname,
- t.refFk,
- t.id ticketFk,
- t.clientFk,
- s.id saleFk,
- st.`order`,
- c.typeFk,
- cb.claimFk
- FROM vn.sale s
- JOIN vn.ticket t ON t.id = s.ticketFk
- LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
- LEFT JOIN vn.state st ON st.`code` = ts.`code`
- JOIN vn.client c ON c.id = t.clientFk
- JOIN vn.state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
- 'DELIVERED',
- IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
- 'FREE',
- IFNULL(ts.code, 'FREE')))
- LEFT JOIN vn.claimBeginning cb ON s.id = cb.saleFk
- WHERE t.shipped >= vDateInventory
- AND s.itemFk = vItemFk
- AND vWarehouseFk = t.warehouseFk
- ),sale AS (
- SELECT s.shipped,
+ ),
+ sales AS (
+ WITH itemSales AS (
+ SELECT DATE(t.shipped) shipped,
+ s.quantity,
+ st2.alertLevel,
+ st2.name,
+ t.refFk,
+ t.id ticketFk,
+ 'client' entityType,
+ t.clientFk entityId,
+ t.nickname,
+ s.id saleFk,
+ st.`order`,
+ c.typeFk,
+ cb.claimFk
+ FROM vn.sale s
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
+ LEFT JOIN vn.state st ON st.code = ts.code
+ JOIN vn.client c ON c.id = t.clientFk
+ JOIN vn.state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
+ 'DELIVERED',
+ IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
+ 'FREE',
+ IFNULL(st.code, 'FREE')))
+ LEFT JOIN vn.claimBeginning cb ON cb.saleFk = s.id
+ WHERE t.shipped >= vDateInventory
+ AND s.itemFk = vItemFk
+ AND t.warehouseFk = vWarehouseFk
+ )
+ SELECT 'ticket',
+ s.ticketFk,
+ s.shipped,
NULL `in`,
s.quantity,
s.alertLevel,
s.name,
- s.nickname,
s.refFk,
- s.ticketFk,
- s.clientFk,
- IF(stk.saleFk, TRUE, NULL),
+ s.entityType,
+ s.entityId,
+ s.nickname,
+ IF(stk.saleFk, TRUE, FALSE),
TRUE,
s.saleFk,
s.`order`,
s.typeFk,
s.claimFk,
NULL
- FROM sales s
+ FROM itemSales s
LEFT JOIN vn.state stPrep ON stPrep.`code` = 'PREPARED'
LEFT JOIN vn.saleTracking stk ON stk.saleFk = s.saleFk
AND stk.stateFk = stPrep.id
GROUP BY s.saleFk
- ) SELECT shipped,
- `in`,
- `out`,
- alertLevel,
- stateName,
- `name`,
- reference,
- origin,
- clientFk,
- isPicked,
- isTicket,
- lineFk,
- `order`,
- clientType,
- claimFk,
- inventorySupplierFk
- FROM entriesIn
+ ),
+ orders AS (
+ SELECT 'order' originType,
+ o.id originId,
+ r.shipment,
+ NULL 'in',
+ r.amount,
+ NULL alertLevel,
+ NULL stateName,
+ NULL invoiceNumber,
+ 'client' entityType,
+ c.id,
+ c.name,
+ FALSE,
+ FALSE isTicket,
+ NULL buyFk,
+ NULL 'order',
+ c.typeFk,
+ NULL claimFk,
+ NULL
+ FROM hedera.orderRow r
+ JOIN hedera.`order` o ON o.id = r.orderFk
+ JOIN vn.client c ON c.id = o.customer_id
+ WHERE r.shipment >= vDateInventory
+ AND r.warehouseFk = vWarehouseFk
+ AND r.created >= (
+ SELECT SUBTIME(util.VN_NOW(), reserveTime)
+ FROM hedera.orderConfig
+ )
+ AND NOT o.confirmed
+ AND r.itemFk = vItemFk
+ )
+ SELECT * FROM entriesIn
UNION ALL
SELECT * FROM entriesOut
UNION ALL
- SELECT * FROM sale
+ SELECT * FROM sales
+ UNION ALL
+ SELECT * FROM orders
ORDER BY shipped,
- (inventorySupplierFk = clientFk) DESC,
+ (inventorySupplierFk = entityId) DESC,
alertLevel DESC,
isTicket,
`order` DESC,
@@ -63257,19 +63918,20 @@ BEGIN
`in` DESC,
`out` DESC;
- IF vDate IS NULL THEN
-
+ IF vDated IS NULL THEN
SET @a := 0;
SET @currentLineFk := 0;
SET @shipped := '';
- SELECT DATE(@shipped:= t.shipped) shipped,
+ SELECT t.originType,
+ t.originId,
+ DATE(@shipped:= t.shipped) shipped,
t.alertLevel,
t.stateName,
- t.origin,
t.reference,
- t.clientFk,
- t.name,
+ t.entityType,
+ t.entityId,
+ t.entityName,
t.`in` invalue,
t.`out`,
@a := @a + IFNULL(t.`in`, 0) - IFNULL(t.`out`, 0) balance,
@@ -63285,37 +63947,41 @@ BEGIN
t.`order`
FROM tItemDiary t
LEFT JOIN alertLevel a ON a.id = t.alertLevel;
-
ELSE
SELECT IFNULL(SUM(IFNULL(`in`, 0)) - SUM(IFNULL(`out`, 0)), 0) INTO @a
FROM tItemDiary
- WHERE shipped < vDate;
+ WHERE shipped < vDated;
- SELECT vDate shipped,
- 0 alertLevel,
- 0 stateName,
- 0 origin,
- '' reference,
- 0 clientFk,
+ SELECT NULL originType,
+ NULL originId,
+ vDated shipped,
+ NULL alertLevel,
+ NULL stateName,
+ NULL reference,
+ NULL entityType,
+ NULL entityId,
'Inventario calculado',
@a invalue,
NULL `out`,
@a balance,
- 0 lastPreparedLineFk,
- 0 isTicket,
- 0 lineFk,
- 0 isPicked,
- 0 clientType,
- 0 claimFk,
+ NULL lastPreparedLineFk,
+ NULL isTicket,
+ NULL lineFk,
+ NULL isPicked,
+ NULL clientType,
+ NULL claimFk,
NULL `order`
UNION ALL
- SELECT shipped,
+ SELECT originType,
+ originId,
+ shipped,
alertlevel,
stateName,
- origin,
- reference,
- clientFk,
- name, `in`,
+ reference,
+ entityType,
+ entityId,
+ entityName,
+ `in`,
`out`,
@a := @a + IFNULL(`in`, 0) - IFNULL(`out`, 0),
0,
@@ -63326,7 +63992,7 @@ BEGIN
claimFk,
`order`
FROM tItemDiary
- WHERE shipped >= vDate;
+ WHERE shipped >= vDated;
END IF;
DROP TEMPORARY TABLE tItemDiary;
@@ -63346,7 +64012,10 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `item_getInfo`(IN `vBarcode` VARCHAR(22), IN `vWarehouseFk` INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `item_getInfo`(
+ `vBarcode` VARCHAR(22),
+ `vWarehouseFk` INT
+)
BEGIN
/**
* Devuelve información relativa al item correspondiente del vBarcode pasado
@@ -63358,12 +64027,14 @@ BEGIN
DECLARE vCacheAvailableFk INT;
DECLARE vVisibleItemShelving INT;
DECLARE vItemFk INT;
+ DECLARE vDated DATE;
+
+ SELECT barcodeToItem(vBarcode), util.VN_CURDATE() INTO vItemFk, vDated;
CALL cache.visible_refresh(vCacheVisibleFk, FALSE, vWarehouseFk);
- CALL cache.available_refresh(vCacheAvailableFk, FALSE, vWarehouseFk, util.VN_CURDATE());
- CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
-
- SELECT barcodeToItem(vBarcode) INTO vItemFk;
+ CALL cache.available_refresh(vCacheAvailableFk, FALSE, vWarehouseFk, vDated);
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, vDated);
+
SELECT SUM(visible) INTO vVisibleItemShelving
FROM itemShelvingStock
WHERE itemFk = vItemFk
@@ -63501,39 +64172,42 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `item_getMinacum`(IN vWarehouseFk TINYINT, IN vDatedFrom DATETIME, IN vRange INT, IN vItemFk INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `item_getMinacum`(
+ vWarehouseFk TINYINT,
+ vDated DATE,
+ vRange INT,
+ vItemFk INT
+)
BEGIN
/**
- * Cálculo del mínimo acumulado, para un item/almacén especificado, en caso de
- * NULL para todo.
+ * Cálculo del mínimo acumulado, para un item/almacén
+ * especificado, en caso de NULL para todos.
*
- * @param vWarehouseFk -> warehouseFk
- * @param vDatedFrom -> fecha inicio
- * @param vRange -> número de días a considerar
- * @param vItemFk -> Identificador de item
+ * @param vWarehouseFk Id warehouse
+ * @param vDated Fecha inicio
+ * @param vRange Número de días a considerar
+ * @param vItemFk Id de artículo
* @return tmp.itemMinacum
*/
- DECLARE vDatedTo DATETIME;
+ DECLARE vDatedTo DATETIME DEFAULT util.dayEnd(vDated + INTERVAL vRange DAY);
- SET vDatedFrom = TIMESTAMP(DATE(vDatedFrom), '00:00:00');
- SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, vRange, vDatedFrom), '23:59:59');
-
- DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
- CREATE TEMPORARY TABLE tmp.itemCalc
+ CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
(INDEX (itemFk, warehouseFk))
+ ENGINE = MEMORY
SELECT sub.itemFk,
sub.dated,
CAST(SUM(sub.quantity) AS SIGNED) quantity,
sub.warehouseFk
- FROM (SELECT s.itemFk,
+ FROM (
+ SELECT s.itemFk,
DATE(t.shipped) dated,
-s.quantity quantity,
t.warehouseFk
FROM sale s
JOIN ticket t ON t.id = s.ticketFk
- WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
+ WHERE t.shipped BETWEEN vDated AND vDatedTo
AND t.warehouseFk
- AND s.quantity != 0
+ AND s.quantity <> 0
AND (vItemFk IS NULL OR s.itemFk = vItemFk)
AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
UNION ALL
@@ -63544,10 +64218,10 @@ BEGIN
FROM buy b
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vDatedFrom AND vDatedTo
+ WHERE t.landed BETWEEN vDated AND vDatedTo
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND !e.isExcludedFromAvailable
- AND b.quantity != 0
+ AND NOT e.isExcludedFromAvailable
+ AND b.quantity <> 0
AND (vItemFk IS NULL OR b.itemFk = vItemFk)
UNION ALL
SELECT b.itemFk,
@@ -63557,27 +64231,46 @@ BEGIN
FROM buy b
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
- WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
+ WHERE t.shipped BETWEEN vDated AND vDatedTo
AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
- AND !e.isExcludedFromAvailable
- AND b.quantity != 0
+ AND NOT e.isExcludedFromAvailable
+ AND b.quantity <> 0
AND (vItemFk IS NULL OR b.itemFk = vItemFk)
- AND !e.isRaid
+ AND NOT e.isRaid
+ UNION ALL
+ SELECT r.itemFk,
+ r.shipment,
+ -r.amount,
+ r.warehouseFk
+ FROM hedera.orderRow r
+ JOIN hedera.`order` o ON o.id = r.orderFk
+ JOIN client c ON c.id = o.customer_id
+ WHERE r.shipment BETWEEN vDated AND vDatedTo
+ AND (vWarehouseFk IS NULL OR r.warehouseFk = vWarehouseFk)
+ AND r.created >= (
+ SELECT util.VN_NOW() - INTERVAL TIME_TO_SEC(reserveTime) SECOND
+ FROM hedera.orderConfig
+ )
+ AND NOT o.confirmed
+ AND (vItemFk IS NULL OR r.itemFk = vItemFk)
+ AND r.amount <> 0
) sub
GROUP BY sub.itemFk, sub.warehouseFk, sub.dated;
- CALL item_getAtp(vDatedFrom);
- DROP TEMPORARY TABLE tmp.itemCalc;
+ CALL item_getAtp(vDated);
- DROP TEMPORARY TABLE IF EXISTS tmp.itemMinacum;
- CREATE TEMPORARY TABLE tmp.itemMinacum
+ CREATE OR REPLACE TEMPORARY TABLE tmp.itemMinacum
(INDEX(itemFk))
ENGINE = MEMORY
- SELECT i.itemFk,
- i.warehouseFk,
- i.quantity amount
- FROM tmp.itemAtp i
- HAVING amount != 0;
+ SELECT itemFk,
+ warehouseFk,
+ quantity amount
+ FROM tmp.itemAtp
+ WHERE quantity <> 0;
+
+ DROP TEMPORARY TABLE
+ tmp.itemAtp,
+ tmp.itemCalc;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -63695,7 +64388,7 @@ BEGIN
WHEN b.groupingMode = 'grouping' THEN b.grouping
WHEN b.groupingMode = 'packing' THEN b.packing
ELSE 1
- END AS minQuantity,
+ END minQuantity,
v.visible located,
b.price2
FROM vn.item i
@@ -63820,62 +64513,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 `item_GetVisible` */;
-/*!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 `item_GetVisible`(vWarehouse SMALLINT, vItem INT)
-BEGIN
- DECLARE vTomorrow DATETIME DEFAULT TIMESTAMPADD(DAY, 1, util.VN_CURDATE());
-
- INSERT INTO tmp.itemVisible (item_id, visible)
- SELECT item_id, SUM(amount) amount
- FROM (
- SELECT i.itemFk AS item_id, quantity AS amount
- FROM itemTicketOut i
- LEFT JOIN ticketState ts ON ts.ticketFk = i.ticketFk
- JOIN state s ON s.id = ts.stateFk
- LEFT JOIN (SELECT DISTINCT saleFk
- FROM saleTracking st
- JOIN state s ON s.id = st.stateFk
- WHERE st.created > util.VN_CURDATE()
- AND (s.isPicked OR st.isChecked)
- ) stPrevious ON `stPrevious`.`saleFk` = i.saleFk
- WHERE i.warehouseFk = vWarehouse
- AND (vItem IS NULL OR i.itemFk = vItem)
- AND (s.isPicked OR i.reserved OR stPrevious.saleFk )
- AND i.shipped >= util.VN_CURDATE() AND i.shipped < vTomorrow
- UNION ALL
- SELECT iei.itemFk, quantity
- FROM itemEntryIn iei
- WHERE (iei.isReceived != FALSE /*OR ip.modificationDate > util.VN_CURDATE()*/)
- AND iei.landed >= util.VN_CURDATE() AND iei.landed < vTomorrow
- AND iei.warehouseInFk = vWarehouse
- AND (vItem IS NULL OR iei.itemFk = vItem)
- AND iei.isVirtualStock is FALSE
- UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryOut
- WHERE isDelivered != FALSE
- AND shipped >= util.VN_CURDATE() AND shipped < vTomorrow
- AND warehouseOutFk = vWarehouse
- AND (vItem IS NULL OR itemFk = vItem)
- ) t
- GROUP BY item_id
- ON DUPLICATE KEY UPDATE
- visible = IFNULL(stock,0) + VALUES(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_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `item_multipleBuy` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -63898,7 +64535,7 @@ BEGIN
*/
ALTER TABLE tmp.itemInventory ADD IF NOT EXISTS buy_id INT;
- CALL buyUltimate(vWarehouseFk, vDate);
+ CALL buy_getUltimate (NULL, vWarehouseFk, vDate);
CREATE OR REPLACE TEMPORARY TABLE tmp
(KEY (itemFk))
@@ -64033,12 +64670,18 @@ BEGIN
i.tag8 = JSON_VALUE(vTags, '$.8'),
i.tag9 = JSON_VALUE(vTags, '$.9'),
i.tag10 = JSON_VALUE(vTags, '$.10'),
+ i.tag11 = JSON_VALUE(vTags, '$.11'),
+ i.tag12 = JSON_VALUE(vTags, '$.12'),
+ i.tag13 = JSON_VALUE(vTags, '$.13'),
i.value5 = JSON_VALUE(vValues, '$.5'),
i.value6 = JSON_VALUE(vValues, '$.6'),
i.value7 = JSON_VALUE(vValues, '$.7'),
i.value8 = JSON_VALUE(vValues, '$.8'),
i.value9 = JSON_VALUE(vValues, '$.9'),
i.value10 = JSON_VALUE(vValues, '$.10'),
+ i.value11 = JSON_VALUE(vValues, '$.11'),
+ i.value12 = JSON_VALUE(vValues, '$.12'),
+ i.value13 = JSON_VALUE(vValues, '$.13'),
i.producerFk = p.id,
i.inkFk = k.id,
i.originFk = IFNULL(o.id, i.originFk)
@@ -64211,7 +64854,8 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `item_setVisibleDiscard`(
vAddressFk INT)
BEGIN
/**
- * Procedimiento para dar dar de baja/alta un item, si vAddressFk es NULL se entiende que se da de alta y se toma el addressFk de la configuración
+ * Procedimiento para dar dar de baja/alta un item, si vAdressFk es NULL
+ * se entiende que se da de alta y se toma el addressFk de la configuración
*
* @param vItemFk Identificador del ítem
* @param vWarehouseFk id del warehouse
@@ -64313,232 +64957,256 @@ DELIMITER ;
/*!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 = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `item_valuateInventory` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `item_valuateInventory`(
-vDated DATE
+ vDated DATE,
+ vItemTypeFk INT,
+ vItemCategoryFk INT
)
BEGIN
-DECLARE vInventoried DATE;
-DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
-DECLARE vInventoryClone DATE;
-DECLARE vDateDayEnd DATETIME;
-DECLARE vInventorySupplierFk INT;
+ DECLARE vInventoried DATE;
+ DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
+ DECLARE vInventoryClone DATE;
+ DECLARE vDateDayEnd DATETIME;
+ DECLARE vInventorySupplierFk INT;
-SELECT inventorySupplierFk INTO vInventorySupplierFk
-FROM entryConfig;
+ SELECT inventorySupplierFk INTO vInventorySupplierFk
+ FROM entryConfig;
-SET vDateDayEnd = util.dayEnd(vDated);
+ SET vDateDayEnd = util.dayEnd(vDated);
-SELECT tr.landed INTO vInventoried
-FROM travel tr
-JOIN `entry` e ON e.travelFk = tr.id
-WHERE tr.landed <= vDateDayEnd
-AND e.supplierFk = vInventorySupplierFk
-ORDER BY tr.landed DESC
-LIMIT 1;
+ SELECT tr.landed INTO vInventoried
+ FROM travel tr
+ JOIN `entry` e ON e.travelFk = tr.id
+ WHERE tr.landed <= vDateDayEnd
+ AND e.supplierFk = vInventorySupplierFk
+ ORDER BY tr.landed DESC
+ LIMIT 1;
-SET vHasNotInventory = (vInventoried IS NULL);
+ SET vHasNotInventory = (vInventoried IS NULL);
+
+ IF vHasNotInventory THEN
+ SELECT landed INTO vInventoryClone
+ FROM travel tr
+ JOIN `entry` e ON e.travelFk = tr.id
+ WHERE tr.landed >= vDated
+ AND e.supplierFk = vInventorySupplierFk
+ ORDER BY landed ASC
+ LIMIT 1;
-IF vHasNotInventory THEN
-SELECT landed INTO vInventoryClone
-FROM travel tr
-JOIN `entry` e ON e.travelFk = tr.id
-WHERE tr.landed >= vDated
-AND e.supplierFk = vInventorySupplierFk
-ORDER BY landed ASC
-LIMIT 1;
+ SET vInventoried = vDated + INTERVAL 1 DAY;
+ SET vDateDayEnd = vInventoryClone;
+ END IF;
-SET vInventoried = vDated + INTERVAL 1 DAY;
-SET vDateDayEnd = vInventoryClone;
-END IF;
+ CREATE OR REPLACE TEMPORARY TABLE tInventory(
+ warehouseFk SMALLINT,
+ itemFk BIGINT,
+ quantity INT,
+ volume DECIMAL(10,2),
+ cost DOUBLE DEFAULT 0,
+ total DOUBLE DEFAULT 0,
+ warehouseInventory VARCHAR(20),
+ PRIMARY KEY (warehouseInventory, itemFk) USING HASH
+ )
+ ENGINE = MEMORY;
+
+ -- Inventario inicial
+ IF vHasNotInventory THEN
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT tr.warehouseInFk,
+ b.itemFk,
+ SUM(b.quantity),
+ w.name
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
+ JOIN warehouse w ON w.id = tr.warehouseInFk
+ WHERE tr.landed = vDateDayEnd
+ AND e.supplierFk = vInventorySupplierFk
+ AND w.valuatedInventory
+ AND t.isInventory
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ GROUP BY tr.warehouseInFk, b.itemFk;
+ ELSE
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT tr.warehouseInFk,
+ b.itemFk,
+ SUM(b.quantity),
+ w.name
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
+ JOIN warehouse w ON w.id = tr.warehouseInFk
+ WHERE tr.landed = vInventoried
+ AND e.supplierFk = vInventorySupplierFk
+ AND w.valuatedInventory
+ AND t.isInventory
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ GROUP BY tr.warehouseInFk, b.itemFk;
+ END IF;
-CREATE OR REPLACE TEMPORARY TABLE tInventory(
-warehouseFk SMALLINT,
-itemFk BIGINT,
-quantity INT,
-volume DECIMAL(10,2),
-cost DOUBLE DEFAULT 0,
-total DOUBLE DEFAULT 0,
-warehouseInventory VARCHAR(20),
-PRIMARY KEY (warehouseInventory, itemFk) USING HASH
-)
-ENGINE = MEMORY;
+ -- Añadimos las entradas
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT tr.warehouseInFk,
+ b.itemFk,
+ b.quantity * IF(vHasNotInventory, -1, 1),
+ w.name
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
+ JOIN warehouse w ON w.id = tr.warehouseInFk
+ WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
+ AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
+ AND NOT e.isRaid
+ AND w.valuatedInventory
+ AND t.isInventory
+ AND e.supplierFk <> vInventorySupplierFk
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity * IF(vHasNotInventory, -1, 1));
+ -- Descontamos las salidas
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT tr.warehouseOutFk,
+ b.itemFk,
+ b.quantity * IF(vHasNotInventory, 1, -1),
+ w.name
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
+ JOIN warehouse w ON w.id = tr.warehouseOutFk
+ WHERE tr.shipped BETWEEN vInventoried AND vDateDayEnd
+ AND NOT e.isRaid
+ AND w.valuatedInventory
+ AND t.isInventory
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity * IF(vHasNotInventory,1,-1));
-IF vHasNotInventory THEN
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT tr.warehouseInFk,
-b.itemFk,
-SUM(b.quantity),
-w.name
-FROM buy b
-JOIN item i ON i.id = b.itemFk
-JOIN `entry` e ON e.id = b.entryFk
-JOIN travel tr ON tr.id = e.travelFk
-JOIN itemType t ON t.id = i.typeFk
-JOIN warehouse w ON w.id = tr.warehouseInFk
-WHERE tr.landed = vDateDayEnd
-AND e.supplierFk = vInventorySupplierFk
-AND w.valuatedInventory
-AND t.isInventory
-GROUP BY tr.warehouseInFk, b.itemFk;
-ELSE
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT tr.warehouseInFk,
-b.itemFk,
-SUM(b.quantity),
-w.name
-FROM buy b
-JOIN item i ON i.id = b.itemFk
-JOIN `entry` e ON e.id = b.entryFk
-JOIN travel tr ON tr.id = e.travelFk
-JOIN itemType t ON t.id = i.typeFk
-JOIN warehouse w ON w.id = tr.warehouseInFk
-WHERE tr.landed = vInventoried
-AND e.supplierFk = vInventorySupplierFk
-AND w.valuatedInventory
-AND t.isInventory
-GROUP BY tr.warehouseInFk, b.itemFk;
-END IF;
+ -- Descontamos las lineas de venta
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT w.id,
+ s.itemFk,
+ s.quantity * IF(vHasNotInventory, 1, -1),
+ w.name
+ FROM sale s
+ JOIN ticket t ON t.id = s.ticketFk
+ JOIN `client` c ON c.id = t.clientFk
+ 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 warehouse w ON w.id = t.warehouseFk
+ WHERE t.shipped BETWEEN vInventoried AND vDateDayEnd
+ AND w.valuatedInventory
+ AND it.isInventory
+ AND (it.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + s.quantity * IF(vHasNotInventory, 1, -1);
+ -- Volver a poner lo que esta aun en las estanterias
+ IF vDated = util.VN_CURDATE() THEN
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT w.id,
+ s.itemFk,
+ s.quantity * IF(vHasNotInventory, 0, 1),
+ w.name
+ FROM sale s
+ JOIN ticket t ON t.id = s.ticketFk
+ JOIN `client` c ON c.id = t.clientFk
+ 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 warehouse w ON w.id = t.warehouseFk
+ WHERE t.shipped BETWEEN vDated AND vDateDayEnd
+ AND NOT (s.isPicked OR t.isLabeled)
+ AND w.valuatedInventory
+ AND it.isInventory
+ AND (it.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + s.quantity * IF(vHasNotInventory, 0, 1);
+ END IF;
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT tr.warehouseInFk,
-b.itemFk,
-b.quantity * IF(vHasNotInventory, -1, 1),
-w.name
-FROM buy b
-JOIN item i ON i.id = b.itemFk
-JOIN `entry` e ON e.id = b.entryFk
-JOIN travel tr ON tr.id = e.travelFk
-JOIN itemType t ON t.id = i.typeFk
-JOIN warehouse w ON w.id = tr.warehouseInFk
-WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
-AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
-AND NOT e.isRaid
-AND w.valuatedInventory
-AND t.isInventory
-AND e.supplierFk <> vInventorySupplierFk
-ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity * IF(vHasNotInventory, -1, 1));
+ -- Mercancia en transito
+ INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
+ SELECT tr.warehouseInFk,
+ b.itemFk,
+ b.quantity,
+ CONCAT(wOut.`name`, ' - ', wIn.`name`)
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ JOIN `entry` e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
+ JOIN warehouse wIn ON wIn.id = tr.warehouseInFk
+ JOIN warehouse wOut ON wOut.id = tr.warehouseOutFk
+ WHERE vDated >= tr.shipped AND vDated < tr.landed
+ AND NOT isRaid
+ AND wIn.valuatedInventory
+ AND t.isInventory
+ AND e.isConfirmed
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
+ ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
+
+ CALL buy_getUltimate (NULL, NULL, vDateDayEnd);
+ DELETE FROM tInventory WHERE quantity IS NULL OR NOT quantity;
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT tr.warehouseOutFk,
-b.itemFk,
-b.quantity * IF(vHasNotInventory, 1, -1),
-w.name
-FROM buy b
-JOIN item i ON i.id = b.itemFk
-JOIN `entry` e ON e.id = b.entryFk
-JOIN travel tr ON tr.id = e.travelFk
-JOIN itemType t ON t.id = i.typeFk
-JOIN warehouse w ON w.id = tr.warehouseOutFk
-WHERE tr.shipped BETWEEN vInventoried AND vDateDayEnd
-AND NOT e.isRaid
-AND w.valuatedInventory
-AND t.isInventory
-ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity * IF(vHasNotInventory,1,-1));
+ UPDATE tInventory i
+ JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.itemFk = bu.itemFk
+ JOIN buy b ON b.id = bu.buyFk
+ LEFT JOIN itemCost ic ON ic.itemFk = i.itemFk
+ AND ic.warehouseFk = i.warehouseFk
+ SET i.total = i.quantity * (IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)),
+ i.cost = IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0),
+ i.volume = i.quantity * ic.cm3delivery / 1000000;
+ SELECT ti.warehouseFk,
+ i.id,
+ i.longName,
+ i.size,
+ ti.quantity,
+ ti.volume,
+ tp.name itemTypeName,
+ ic.name itemCategoryName,
+ ti.cost,
+ ti.total,
+ ti.warehouseInventory,
+ ic.display
+ FROM tInventory ti
+ JOIN warehouse w ON w.id = warehouseFk
+ JOIN item i ON i.id = ti.itemFk
+ JOIN itemType tp ON tp.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = tp.categoryFk
+ WHERE w.valuatedInventory
+ AND ti.total > 0;
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT w.id,
-s.itemFk,
-s.quantity * IF(vHasNotInventory, 1, -1),
-w.name
-FROM sale s
-JOIN ticket t ON t.id = s.ticketFk
-JOIN `client` c ON c.id = t.clientFk
-JOIN item i ON i.id = s.itemFk
-JOIN itemType it ON it.id = i.typeFk
-JOIN warehouse w ON w.id = t.warehouseFk
-WHERE t.shipped BETWEEN vInventoried AND vDateDayEnd
-AND w.valuatedInventory
-AND it.isInventory
-ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + s.quantity * IF(vHasNotInventory, 1, -1);
-
-
-IF vDated = util.VN_CURDATE() THEN
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT w.id,
-s.itemFk,
-s.quantity * IF(vHasNotInventory, 0, 1),
-w.name
-FROM sale s
-JOIN ticket t ON t.id = s.ticketFk
-JOIN `client` c ON c.id = t.clientFk
-JOIN item i ON i.id = s.itemFk
-JOIN itemType it ON it.id = i.typeFk
-JOIN warehouse w ON w.id = t.warehouseFk
-WHERE t.shipped BETWEEN vDated AND vDateDayEnd
-AND NOT (s.isPicked OR t.isLabeled)
-AND w.valuatedInventory
-AND it.isInventory
-ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + s.quantity * IF(vHasNotInventory, 0, 1);
-END IF;
-
-
-INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
-SELECT tr.warehouseInFk,
-b.itemFk,
-b.quantity,
-CONCAT(wOut.`name`, ' - ', wIn.`name`)
-FROM buy b
-JOIN item i ON i.id = b.itemFk
-JOIN `entry` e ON e.id = b.entryFk
-JOIN travel tr ON tr.id = e.travelFk
-JOIN itemType t ON t.id = i.typeFk
-JOIN warehouse wIn ON wIn.id = tr.warehouseInFk
-JOIN warehouse wOut ON wOut.id = tr.warehouseOutFk
-WHERE vDated >= tr.shipped AND vDated < tr.landed
-AND NOT isRaid
-AND wIn.valuatedInventory
-AND t.isInventory
-AND e.isConfirmed
-ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
-
-CALL buyUltimate(NULL, vDateDayEnd);
-
-DELETE FROM tInventory WHERE quantity IS NULL OR NOT quantity;
-
-UPDATE tInventory i
-JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.itemFk = bu.itemFk
-JOIN buy b ON b.id = bu.buyFk
-LEFT JOIN itemCost ic ON ic.itemFk = i.itemFk
-AND ic.warehouseFk = i.warehouseFk
-SET i.total = i.quantity * (IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)),
-i.cost = IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0),
-i.volume = i.quantity * ic.cm3delivery / 1000000;
-
-SELECT ti.warehouseFk,
-i.id,
-i.longName,
-i.size,
-ti.quantity,
-ti.volume,
-tp.name itemTypeName,
-ic.name itemCategoryName,
-ti.cost,
-ti.total,
-ti.warehouseInventory
-FROM tInventory ti
-JOIN warehouse w ON w.id = warehouseFk
-JOIN item i ON i.id = ti.itemFk
-JOIN itemType tp ON tp.id = i.typeFk
-JOIN itemCategory ic ON ic.id = tp.categoryFk
-WHERE w.valuatedInventory
-AND ti.total > 0;
-
-DROP TEMPORARY TABLE
-tmp.buyUltimate,
-tInventory;
+ DROP TEMPORARY TABLE
+ tmp.buyUltimate,
+ tInventory;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -65228,6 +65896,7 @@ proc: BEGIN
DECLARE vDateTo DATETIME;
DECLARE vDateToTomorrow DATETIME;
DECLARE vDefaultDayRange INT;
+ DECLARE vCalcFk INT;
IF vDate < util.VN_CURDATE() THEN
LEAVE proc;
@@ -65292,58 +65961,23 @@ proc: BEGIN
) sub
GROUP BY itemFk;
- UPDATE tmp.itemInventory ai
- JOIN tItemInventoryCalc iic ON iic.itemFk = ai.id
- SET ai.inventory = iic.quantity,
- ai.visible = iic.quantity,
- ai.avalaible = iic.quantity,
- ai.sd = iic.quantity;
-
-- Cálculo del visible
- CREATE OR REPLACE TEMPORARY TABLE tItemVisibleCalc
- (PRIMARY KEY (itemFk))
- ENGINE = MEMORY
- SELECT itemFk, SUM(quantity) visible
- FROM (
- SELECT s.itemFk, s.quantity
- FROM sale s
- JOIN ticket t ON t.id = s.ticketFk
- JOIN warehouse w ON w.id = t.warehouseFk
- WHERE t.shipped >= vDate
- AND t.shipped < vDateTomorrow
- AND (NOT isPicked AND NOT t.isLabeled AND t.refFk IS NULL)
- AND IFNULL(vWarehouseFk, t.warehouseFk) = t.warehouseFk
- AND w.isComparative
- UNION ALL
- SELECT b.itemFk, - b.quantity
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- JOIN warehouse w ON w.id = t.warehouseInFk
- WHERE t.landed = vDate
- AND NOT t.isReceived
- AND NOT e.isExcludedFromAvailable
- AND NOT e.isRaid
- AND IFNULL(vWarehouseFk, t.warehouseInFk) = t.warehouseInFk
- AND w.isComparative
- UNION ALL
- SELECT b.itemFk, b.quantity
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- JOIN warehouse w ON w.id = t.warehouseOutFk
- WHERE t.shipped = vDate
- AND NOT t.isReceived
- AND NOT e.isExcludedFromAvailable
- AND NOT e.isRaid
- AND IFNULL(vWarehouseFk, t.warehouseOutFk) = t.warehouseOutFk
- AND w.isComparative
- ) sub2
- GROUP BY itemFk;
+ CALL cache.visible_refresh(vCalcFk, FALSE, vWarehouseFk);
- UPDATE tmp.itemInventory ai
- JOIN tItemVisibleCalc ivc ON ivc.itemFk = ai.id
- SET ai.visible = ai.visible + ivc.visible;
+ CREATE OR REPLACE TEMPORARY TABLE tItemVisibleCalc
+ (PRIMARY KEY (item_id))
+ ENGINE = MEMORY
+ SELECT item_id, visible
+ FROM cache.visible
+ WHERE calc_id = vCalcFk;
+
+ UPDATE tmp.itemInventory it
+ LEFT JOIN tItemInventoryCalc iic ON iic.itemFk = it.id
+ LEFT JOIN tItemVisibleCalc ivc ON ivc.item_id = it.id
+ SET it.inventory = iic.quantity,
+ it.visible = ivc.visible,
+ it.avalaible = iic.quantity,
+ it.sd = iic.quantity;
-- Calculo del disponible
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
@@ -65391,32 +66025,36 @@ proc: BEGIN
CALL item_getAtp(vDate);
CALL travel_upcomingArrivals(vWarehouseFk, vDate);
- UPDATE tmp.itemInventory ai
- JOIN (
- SELECT it.itemFk,
- SUM(it.quantity) quantity,
- im.quantity minQuantity
- FROM tmp.itemCalc it
- JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
- JOIN item i ON i.id = it.itemFk
- LEFT JOIN origin o ON o.id = i.originFk
- LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
- WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
- t.landing,
- vDateToTomorrow)
- GROUP BY it.itemFk
- ) sub ON sub.itemFk = ai.id
- SET ai.avalaible = IF(sub.minQuantity > 0,
- ai.avalaible,
- ai.avalaible + sub.minQuantity),
- ai.sd = ai.inventory + sub.quantity;
+ CREATE OR REPLACE TEMPORARY TABLE tItemAvailableCalc
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT it.itemFk,
+ SUM(it.quantity) quantity,
+ im.quantity minQuantity
+ FROM tmp.itemCalc it
+ JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
+ JOIN item i ON i.id = it.itemFk
+ LEFT JOIN origin o ON o.id = i.originFk
+ LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
+ WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
+ t.landing,
+ vDateToTomorrow)
+ GROUP BY it.itemFk;
+
+ UPDATE tmp.itemInventory it
+ JOIN tItemAvailableCalc iac ON iac.itemFk = it.id
+ SET it.avalaible = IF(iac.minQuantity > 0,
+ it.avalaible,
+ it.avalaible + iac.minQuantity),
+ it.sd = it.inventory + iac.quantity;
DROP TEMPORARY TABLE
tmp.itemTravel,
tmp.itemCalc,
+ tmp.itemAtp,
tItemInventoryCalc,
tItemVisibleCalc,
- tmp.itemAtp;
+ tItemAvailableCalc;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -66506,27 +67144,30 @@ proc: BEGIN
WHERE NOT `lines`;
-- Lineas por linea de encajado
+ CREATE OR REPLACE TEMPORARY TABLE tItemPackingType
+ (PRIMARY KEY(ticketFk))
+ ENGINE = MEMORY
+ SELECT ticketFk,
+ SUM(sub.H) H,
+ SUM(sub.V) V,
+ SUM(sub.N) N
+ FROM (
+ SELECT t.ticketFk,
+ SUM(i.itemPackingTypeFk = 'H') H,
+ SUM(i.itemPackingTypeFk = 'V') V,
+ SUM(i.itemPackingTypeFk IS NULL) N
+ FROM tmp.productionTicket t
+ JOIN sale s ON s.ticketFk = t.ticketFk
+ JOIN item i ON i.id = s.itemFk
+ GROUP BY t.ticketFk, i.itemPackingTypeFk
+ ) sub
+ GROUP BY ticketFk;
+
UPDATE tmp.productionBuffer pb
- JOIN (
- SELECT ticketFk,
- SUM(sub.H) H,
- SUM(sub.V) V,
- SUM(sub.N) N
- FROM (
- SELECT t.ticketFk,
- SUM(i.itemPackingTypeFk = 'H') H,
- SUM(i.itemPackingTypeFk = 'V') V,
- SUM(i.itemPackingTypeFk IS NULL) N
- FROM tmp.productionTicket t
- JOIN sale s ON s.ticketFk = t.ticketFk
- JOIN item i ON i.id = s.itemFk
- GROUP BY t.ticketFk, i.itemPackingTypeFk
- ) sub
- GROUP BY ticketFk
- ) sub2 ON sub2.ticketFk = pb.ticketFk
- SET pb.H = sub2.H,
- pb.V = sub2.V,
- pb.N = sub2.N;
+ JOIN tItemPackingType ti ON ti.ticketFk = pb.ticketFk
+ SET pb.H = ti.H,
+ pb.V = ti.V,
+ pb.N = ti.N;
-- Colecciones segun tipo de encajado
UPDATE tmp.productionBuffer pb
@@ -66605,7 +67246,8 @@ proc: BEGIN
tmp.risk,
tmp.ticket_problems,
tmp.ticketWithPrevia,
- tItemShelvingStock;
+ tItemShelvingStock,
+ tItemPackingType;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -66964,6 +67606,7 @@ BEGIN
) sub;
DROP TEMPORARY TABLE tmp.whiteTicket;
DROP TEMPORARY TABLE tmp.sectorTypeTicket;
+ DROP TEMPORARY TABLE tmp.productionBuffer;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -67983,17 +68626,21 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `route_updateM3`(vRoute INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `route_updateM3`(
+ vSelf INT
+)
BEGIN
+/**
+ * Actualiza el volumen de la ruta.
+ *
+ * @param vSelf Id ruta
+ */
+ DECLARE vVolume DECIMAL(10,1)
+ DEFAULT (SELECT SUM(volume) FROM saleVolume WHERE routeFk = vSelf);
- UPDATE vn.route r
- LEFT JOIN (
- SELECT routeFk, SUM(volume) AS m3
- FROM saleVolume
- WHERE routeFk = vRoute
- ) v ON v.routeFk = r.id
- SET r.m3 = IFNULL(v.m3,0)
- WHERE r.id =vRoute;
+ UPDATE `route`
+ SET m3 = IFNULL(vVolume, 0)
+ WHERE id = vSelf;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -68078,20 +68725,23 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `saleGroup_setParking`(IN `vSaleGroupFk` VARCHAR(8), IN `vParkingFk` INT)
-proc: BEGIN
+CREATE DEFINER=`root`@`localhost` PROCEDURE `saleGroup_setParking`(
+ vSaleGroupFk VARCHAR(8),
+ vParkingFk INT
+)
+BEGIN
/**
- * Aparca una preparación previa en un parking
+ * Aparca una preparación previa en un parking.
*
* @param vSaleGroupFk id de la preparación previa
* @param vParkingFk id del parking
*/
- UPDATE vn.saleGroup sg
+ UPDATE saleGroup sg
SET sg.parkingFk = vParkingFk
- WHERE sg.id = vSaleGroupFk
- AND sg.created >= TIMESTAMPADD(WEEK,-1,util.VN_CURDATE());
+ WHERE sg.id = vSaleGroupFk
+ AND sg.created >= util.VN_CURDATE() - INTERVAL 1 WEEK;
- CALL vn.ticket_setNextState(vn.ticket_get(vSaleGroupFk));
+ CALL ticket_setNextState(ticket_get(vSaleGroupFk));
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -68919,21 +69569,20 @@ BEGIN
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
(saleFk INT PRIMARY KEY)
- SELECT
- s.ticketFk,
- s.id saleFk,
- s.itemFk,
- s.concept,
- s.quantity,
- MAKETIME(pb.HH,pb.mm,0) etd,
- pb.routeFk,
- FLOOR(s.quantity / IF(i.isBoxPickingMode, ish.packing, i.packingOut)) stickers,
- IF(i.isBoxPickingMode, ish.packing, i.packingOut) packing,
- b.packagingFk
+ SELECT s.ticketFk,
+ s.id saleFk,
+ s.itemFk,
+ s.concept,
+ s.quantity,
+ MAKETIME(pb.HH,pb.mm,0) etd,
+ pb.routeFk,
+ FLOOR(s.quantity / IF(i.isBoxPickingMode, ish.packing, i.packingOut)) stickers,
+ IF(i.isBoxPickingMode, ish.packing, i.packingOut) packing,
+ IF(pa.isPackageReturnable, pc.defaultBigPackageFk, b.packagingFk) packagingFk
FROM sale s
JOIN item i ON i.id = s.itemFk
JOIN itemShelving ish ON ish.itemFk = s.itemFk
- LEFT JOIN ( SELECT iss.itemShelvingFk,
+ LEFT JOIN ( SELECT iss.itemShelvingFk,
s.itemFk,
SUM(iss.quantity) reserve
FROM itemShelvingSale iss
@@ -68952,6 +69601,8 @@ BEGIN
LEFT JOIN ticketState ts ON ts.ticketFk = s.ticketFk
LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = vWarehouseFk
LEFT JOIN buy b ON b.id = lb.buy_id
+ LEFT JOIN packaging pa ON pa.id = b.packagingFk
+ JOIN packagingConfig pc
WHERE IF(i.isBoxPickingMode, ish.packing, i.packingOut)
<= LEAST(s.quantity, ish.visible - IFNULL(tISS.reserve,0))
AND NOT pb.problem
@@ -69131,7 +69782,7 @@ BEGIN
DECLARE vAvailableCache INT;
DECLARE vVisibleCache INT;
DECLARE vDone BOOL;
- DECLARE vComponentCount INT;
+ DECLARE vRequiredComponent INT;
DECLARE vCursor CURSOR FOR
SELECT DISTINCT tt.warehouseFk, IF(vIsTodayRelative, util.VN_CURDATE(), DATE(tt.shipped))
@@ -69172,7 +69823,7 @@ BEGIN
SELECT ticketFk, clientFk
FROM tmp.sale_getProblems;
- SELECT COUNT(*) INTO vComponentCount
+ SELECT COUNT(*) INTO vRequiredComponent
FROM component
WHERE isRequired;
@@ -69214,20 +69865,18 @@ BEGIN
-- Faltan componentes
INSERT INTO tmp.sale_problems(ticketFk, hasComponentLack, saleFk)
- SELECT ticketFk, (vComponentCount > nComp) hasComponentLack, saleFk
- FROM (
- SELECT COUNT(s.id) nComp, tl.ticketFk, s.id saleFk
- FROM tmp.ticket_list tl
- JOIN sale s ON s.ticketFk = tl.ticketFk
- LEFT JOIN saleComponent sc ON sc.saleFk = s.id
- LEFT JOIN component c ON c.id = sc.componentFk AND c.isRequired
- JOIN ticket t ON t.id = tl.ticketFk
- JOIN agencyMode am ON am.id = t.agencyModeFk
- JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
- WHERE dm.code IN ('AGENCY','DELIVERY','PICKUP')
- AND s.quantity > 0
- GROUP BY s.id
- ) sub
+ SELECT t.id, COUNT(c.id) < vRequiredComponent hasComponentLack, s.id
+ FROM tmp.ticket_list tl
+ JOIN ticket t ON t.id = tl.ticketFk
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN agencyMode am ON am.id = t.agencyModeFk
+ JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
+ LEFT JOIN saleComponent sc ON sc.saleFk = s.id
+ LEFT JOIN component c ON c.id = sc.componentFk
+ AND c.isRequired
+ WHERE dm.code IN ('AGENCY','DELIVERY','PICKUP')
+ AND s.quantity > 0
+ GROUP BY s.id
HAVING hasComponentLack;
-- Cliente congelado
@@ -69394,7 +70043,7 @@ BEGIN
ON DUPLICATE KEY UPDATE itemDelay = sub.problem, saleFk = sub.saleFk;
-- Redondeo: Cantidad pedida incorrecta en al grouping de la última compra
- CALL buyUltimate(vWarehouseFk, vDate);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vDate);
INSERT INTO tmp.sale_problems(ticketFk, hasRounding, saleFk)
SELECT ticketFk, problem ,saleFk
FROM (
@@ -69490,7 +70139,7 @@ BEGIN
JOIN vn.component c ON c.id = sc.componentFk
JOIN vn.componentType ct ON ct.id = c.typeFk
WHERE s.ticketFk = vTicketFk
- AND ct.`type` = 'otros';
+ AND ct.code = 'other';
UPDATE vn.sale s
JOIN (
@@ -69507,14 +70156,14 @@ DELIMITER ;
/*!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 = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `sale_recalcComponent` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sale_recalcComponent`(vOption VARCHAR(25))
proc: BEGIN
@@ -69595,7 +70244,7 @@ proc: BEGIN
DROP TEMPORARY TABLE tmp.zoneGetLanded;
-- rellena la tabla buyUltimate con la ultima compra
- CALL buyUltimate (vWarehouseFk, vShipped);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vShipped);
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
@@ -69698,7 +70347,7 @@ BEGIN
JOIN ticket t ON t.id = s.ticketFk
WHERE s.id = vSaleFk;
- CALL buyUltimate(vWarehouseFk, vDate);
+ CALL buy_getUltimate(vNewItemFk, vWarehouseFk, vDate);
SELECT `grouping`, groupingMode, packing
INTO vGrouping,vGroupingMode,vPacking
@@ -69706,6 +70355,8 @@ BEGIN
JOIN tmp.buyUltimate tmp ON b.id = tmp.buyFk
WHERE tmp.itemFk = vNewItemFk AND tmp.WarehouseFk = vWarehouseFk;
+ DROP TEMPORARY TABLE tmp.buyUltimate;
+
IF vGroupingMode = 'packing' AND vPacking > 0 THEN
SET vRoundQuantity = vPacking;
END IF;
@@ -69795,15 +70446,38 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `sale_setProblem`(
BEGIN
/**
* Update column sale.problem with a problem code
+ *
* @param vProblemCode Code to set or unset
- * @table tmp.sale(saleFk, hasProblem)
+ * @table tmp.sale(saleFk, hasProblem, isProblemCalcNeeded)
*/
- UPDATE sale s
- JOIN tmp.sale ts ON ts.saleFk = s.id
- SET s.problem = CONCAT(
- IF(ts.hasProblem,
- CONCAT(s.problem, ',', vProblemCode),
- REPLACE(s.problem, vProblemCode , '')));
+ DECLARE vSaleFk INT;
+ DECLARE vHasProblem INT;
+ DECLARE vIsProblemCalcNeeded BOOL;
+ DECLARE vDone BOOL;
+ DECLARE vSaleList CURSOR FOR
+ SELECT saleFk, hasProblem, isProblemCalcNeeded
+ FROM tmp.sale;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vSaleList;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vSaleList INTO vSaleFk, vHasProblem, vIsProblemCalcNeeded;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ UPDATE sale
+ SET problem = IF (vIsProblemCalcNeeded,
+ CONCAT(
+ IF(vHasProblem,
+ CONCAT(problem, ',', vProblemCode),
+ REPLACE(problem, vProblemCode , ''))),
+ NULL)
+ WHERE id = vSaleFk;
+ END LOOP;
+ CLOSE vSaleList;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -69831,9 +70505,13 @@ BEGIN
* @param vSelf Id del sale
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
- (INDEX(saleFk))
+ (INDEX(saleFk, isProblemCalcNeeded))
ENGINE = MEMORY
- SELECT vSelf saleFk, sale_hasComponentLack(vSelf) hasProblem;
+ SELECT vSelf saleFk,
+ sale_hasComponentLack(vSelf) hasProblem,
+ (ticket_isProblemCalcNeeded(ticketFk) AND quantity > 0) isProblemCalcNeeded
+ FROM sale
+ WHERE id = vSelf;
CALL sale_setProblem('hasComponentLack');
@@ -69865,11 +70543,13 @@ BEGIN
* @param vComponentFk Id component
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
- (INDEX(saleFk))
+ (INDEX(saleFk, isProblemCalcNeeded))
ENGINE = MEMORY
- SELECT saleFk, sale_hasComponentLack(saleFk)hasProblem
+ SELECT saleFk,
+ sale_hasComponentLack(saleFk) hasProblem,
+ (ticket_isProblemCalcNeeded(ticketFk) AND quantity > 0) isProblemCalcNeeded
FROM (
- SELECT s.id saleFk
+ SELECT s.id saleFk, s.ticketFk, s.quantity
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
@@ -69908,17 +70588,20 @@ BEGIN
DECLARE vWarehouseFk INT;
DECLARE vShipped DATE;
DECLARE vQuantity INT;
+ DECLARE vIsProblemCalcNeeded BOOL;
- SELECT s.itemFk, t.warehouseFk, t.shipped, s.quantity
- INTO vItemFk, vWarehouseFk, vShipped, vQuantity
+ SELECT s.itemFk, t.warehouseFk, t.shipped, s.quantity, ticket_isProblemCalcNeeded(t.id)
+ INTO vItemFk, vWarehouseFk, vShipped, vQuantity, vIsProblemCalcNeeded
FROM sale s
JOIN ticket t ON t.id = s.ticketFk
WHERE s.id = vSelf;
- CALL buyUltimate(vWarehouseFk, vShipped);
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, vShipped);
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
- SELECT vSelf saleFk, MOD(vQuantity, b.`grouping`) hasProblem
+ SELECT vSelf saleFk,
+ MOD(vQuantity, b.`grouping`) hasProblem,
+ vIsProblemCalcNeeded isProblemCalcNeeded
FROM tmp.buyUltimate bu
JOIN buy b ON b.id = bu.buyFk
WHERE bu.itemFk = vItemFk;
@@ -70275,8 +70958,11 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `setParking`(IN `vParam` VARCHAR(8), IN `vParkingCode` VARCHAR(8))
-proc: BEGIN
+CREATE DEFINER=`root`@`localhost` PROCEDURE `setParking`(
+ vParam VARCHAR(8),
+ vParkingCode VARCHAR(8)
+)
+BEGIN
/**
* Aparca una colección, un ticket, un saleGroup o un shelving en un parking
*
@@ -70284,56 +70970,31 @@ proc: BEGIN
* @param vParkingCode código del parking
*/
DECLARE vParkingFk INT;
- DECLARE vIsSaleGroup BOOL;
- DECLARE vIsTicket BOOL;
- DECLARE vIsCollection BOOL;
+ DECLARE vLastWeek DATE;
- SET vParkingCode = replace(vParkingCode,' ','');
+ SET vParkingCode = REPLACE(vParkingCode, ' ', '');
SELECT id INTO vParkingFk
- FROM vn.parking
+ FROM parking
WHERE code = vParkingCode COLLATE utf8_unicode_ci;
IF vParkingFk IS NULL THEN
CALL util.throw('parkingNotExist');
- LEAVE proc;
END IF;
-
- IF vParam REGEXP '^[0-9]+$' THEN
- -- Se comprueba si es una preparación previa
- SELECT COUNT(*) INTO vIsSaleGroup
- FROM vn.saleGroup sg
- WHERE sg.id = vParam;
- IF vIsSaleGroup THEN
- CALL vn.saleGroup_setParking(vParam, vParkingFk);
- LEAVE proc;
- END IF;
+ SET vLastWeek = util.VN_CURDATE() - INTERVAL 1 WEEK;
- -- Se comprueba si es un ticket
- SELECT COUNT(*) INTO vIsTicket
- FROM vn.ticket t
- WHERE t.id = vParam
- AND t.shipped >= TIMESTAMPADD(WEEK,-1,util.VN_CURDATE());
-
- IF vIsTicket THEN
- CALL vn.ticket_setParking(vParam, vParkingFk);
- LEAVE proc;
- END IF;
-
- -- Se comprueba si es una coleccion de tickets
- SELECT COUNT(*) INTO vIsCollection
- FROM vn.collection c
- WHERE c.id = vParam
- AND c.created >= TIMESTAMPADD(WEEK,-1,util.VN_CURDATE());
-
- IF vIsCollection THEN
- CALL vn.collection_setParking(vParam, vParkingFk);
- LEAVE proc;
- END IF;
+ -- Comprobamos si es una prep. previa, ticket, colección o shelving
+ IF (SELECT TRUE FROM saleGroup WHERE id = vParam) THEN
+ CALL saleGroup_setParking(vParam, vParkingFk);
+ ELSEIF (SELECT TRUE FROM ticket WHERE id = vParam AND shipped >= vLastWeek) THEN
+ CALL ticket_setParking(vParam, vParkingFk);
+ ELSEIF (SELECT TRUE FROM `collection` WHERE id = vParam AND created >= vLastWeek) THEN
+ CALL collection_setParking(vParam, vParkingFk);
+ ELSEIF (SELECT TRUE FROM shelving WHERE code = vParam COLLATE utf8_unicode_ci) THEN
+ CALL shelving_setParking(vParam, vParkingFk);
ELSE
- -- Por descarte, se considera una matrícula
- CALL vn.shelving_setParking(vParam, vParkingFk);
+ CALL util.throw('paramNotExist');
END IF;
END ;;
DELIMITER ;
@@ -70611,21 +71272,21 @@ DELIMITER ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `shelving_setParking`(IN `vShelvingCode` VARCHAR(8), IN `vParkingFk` INT)
-proc: BEGIN
+BEGIN
/**
* Aparca una matrícula en un parking
*
* @param vShelvingCode code de la matrícula
* @param vParkingFk id del parking
*/
- INSERT INTO vn.shelvingLog (originFk, userFk, action , description,changedModel,changedModelId)
+ INSERT INTO shelvingLog (originFk, userFk, action , description,changedModel,changedModelId)
SELECT s.id, account.myUser_getId(), 'update', CONCAT("Cambio parking ",vShelvingCode," de ", p.code," a ", pNew.code),'Shelving',s.id
FROM parking p
JOIN shelving s ON s.parkingFk = p.id
JOIN parking pNew ON pNew.id = vParkingFk
WHERE s.code = vShelvingCode COLLATE utf8_unicode_ci;
- UPDATE vn.shelving
+ UPDATE shelving
SET parkingFk = vParkingFk,
parked = util.VN_NOW(),
isPrinted = TRUE
@@ -70875,7 +71536,7 @@ BEGIN
WHERE warehouse_id = vAuctionWarehouseFk
ON DUPLICATE KEY UPDATE quantity = tmp.item.quantity + VALUES(quantity);
- CALL buyUltimate(vAuctionWarehouseFk, vDated);
+ CALL buy_getUltimate(NULL, vAuctionWarehouseFk, vDated);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -72760,14 +73421,14 @@ DELIMITER ;
/*!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 = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `ticket_add` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_add`(
vClientId INT
@@ -72835,6 +73496,8 @@ BEGIN
IF (vZoneFk IS NULL OR vZoneFk = 0) AND vIsRequiredZone THEN
CALL util.throw ('NOT_ZONE_WITH_THIS_PARAMETERS');
END IF;
+
+ DROP TEMPORARY TABLE tmp.zoneGetShipped;
END IF;
INSERT INTO ticket (
@@ -73236,14 +73899,14 @@ DELIMITER ;
/*!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 = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `ticket_checkNoComponents` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_checkNoComponents`(vShippedFrom DATETIME, vShippedTo DATETIME)
BEGIN
@@ -73266,7 +73929,8 @@ BEGIN
JOIN itemCategory ic ON ic.id = tp.categoryFk
JOIN saleComponent sc ON sc.saleFk = s.id
JOIN component c ON c.id = sc.componentFk
- JOIN componentType ct ON ct.id = c.typeFk AND ct.id = 1
+ JOIN componentType ct ON ct.id = c.typeFk
+ AND ct.code = 'cost'
WHERE t.shipped BETWEEN vShippedFrom AND vShippedTo
AND ic.merchandise;
@@ -73664,7 +74328,7 @@ BEGIN
END;
END LOOP;
CLOSE rsTicket;
- DROP TEMPORARY TABLE IF EXISTS tmp.time;
+ DROP TEMPORARY TABLE IF EXISTS tmp.time, tmp.zoneGetLanded;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -73726,14 +74390,14 @@ BEGIN
t.shipped,
IFNULL(a.hasDailyInvoice, co.hasDailyInvoice),
w.isManaged,
- c.hasToInvoice
+ c.hasToInvoice
INTO vClientFk,
vIsTaxDataChecked,
vCompanyFk,
vShipped,
vHasDailyInvoice,
vWithPackage,
- vHasToInvoice
+ vHasToInvoice
FROM ticket t
JOIN `client` c ON c.id = t.clientFk
JOIN province p ON p.id = c.provinceFk
@@ -73746,8 +74410,12 @@ BEGIN
(SELECT vCurTicketFk, p.id, COUNT(*)
FROM expedition e
JOIN packaging p ON p.id = e.packagingFk
+ JOIN ticket t ON t.id = e.ticketFk
+ LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
+ LEFT JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable
AND vWithPackage
+ AND NOT dm.`code`= 'PICKUP'
GROUP BY p.itemFk);
-- No retornables o no catalogados
@@ -74005,13 +74673,12 @@ BEGIN
FROM zone
WHERE id = vZoneFk;
- CALL buyUltimate(vWarehouseFk, vShipped);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vShipped);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY (
- SELECT
- vWarehouseFk AS warehouseFk,
- NULL AS available,
+ SELECT vWarehouseFk warehouseFk,
+ NULL available,
s.itemFk,
bu.buyFk,
vZoneFk zoneFk
@@ -74066,14 +74733,14 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_DelayTruck`(vWarehouserFk IN
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE vTicketFk INT;
- DECLARE cur1 CURSOR FOR SELECT ticketFk FROM tmp.ticket;
+ DECLARE cur1 CURSOR FOR SELECT ticketFk FROM tTicket;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CALL vn.productionControl(vWarehouserFk,0) ;
- DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
- CREATE TEMPORARY TABLE tmp.ticket
+ DROP TEMPORARY TABLE IF EXISTS tTicket;
+ CREATE TEMPORARY TABLE tTicket
SELECT ticketFk
FROM tmp.productionBuffer
JOIN alertLevel al ON al.code = 'FREE'
@@ -74094,6 +74761,7 @@ BEGIN
END LOOP;
CLOSE cur1;
+ DROP TEMPORARY TABLE tTicket, tmp.productionBuffer;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -74344,7 +75012,7 @@ BEGIN
JOIN vn.componentType ct ON ct.id = c.typeFk
JOIN vn.sale s ON s.id = sc.saleFk
JOIN tmp.ticket t ON t.ticketFk = s.ticketFk
- WHERE ct.code = 'FREIGHT'
+ WHERE ct.code = 'freight'
GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
SET tf.freight = sb.freight;
@@ -74366,7 +75034,7 @@ BEGIN
-- Margin
UPDATE tmp.ticketFloramondo tf
- JOIN (SELECT SUM(IF(ct.code = 'COST',sc.value, 0)) cost,
+ JOIN (SELECT SUM(IF(ct.code = 'cost',sc.value, 0)) cost,
SUM(IF(ct.isMargin, sc.value, 0)) margin,
t.ticketFk
FROM vn.saleComponent sc
@@ -75228,25 +75896,32 @@ DELIMITER ;
/*!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 = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `ticket_setNextState` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setNextState`(vSelf INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setNextState`(
+ vSelf INT
+)
BEGIN
/**
- * Cambia el estado del ticket al siguiente estado según la tabla state
+ * Cambia el estado del ticket al siguiente estado según la tabla state.
*
- * @param vSelf id dle ticket
+ * @param vSelf Id ticket
*/
DECLARE vStateFk INT;
DECLARE vNewStateFk INT;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ RESIGNAL;
+ END;
+
SELECT stateFk INTO vStateFk
FROM ticketState
WHERE ticketFk = vSelf;
@@ -75255,6 +75930,10 @@ BEGIN
FROM state
WHERE id = vStateFk;
+ IF vNewStateFk IS NULL THEN
+ CALL util.throw('The ticket not have next state');
+ END IF;
+
INSERT INTO ticketTracking(stateFk, ticketFk, userFk)
VALUES (vNewStateFk, vSelf, account.myUser_getId());
END ;;
@@ -75273,13 +75952,16 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setParking`(IN `vTicketFk` VARCHAR(8), IN `vParkingFk` INT)
-proc: BEGIN
+CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setParking`(
+ vSelf INT,
+ vParkingFk INT
+)
+BEGIN
/**
- * Aparca un ticket en un parking
+ * Aparca un ticket en un parking.
*
- * @param vTicketFk id del ticket
- * @param vParkingFk id del parking
+ * @param vSelf Id ticket
+ * @param vParkingFk Id parking
*/
DECLARE vDone INT DEFAULT FALSE;
DECLARE vCollectionTicketFk INT;
@@ -75288,7 +75970,7 @@ proc: BEGIN
FROM ticket t
LEFT JOIN ticketCollection tc1 ON tc1.ticketFk = t.id
LEFT JOIN ticketCollection tc2 ON tc2.collectionFk = tc1.collectionFk
- WHERE t.id = vTicketFk;
+ WHERE t.id = vSelf;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
@@ -75297,7 +75979,7 @@ proc: BEGIN
FROM ticket t
LEFT JOIN ticketCollection tc1 ON tc1.ticketFk = t.id
LEFT JOIN ticketCollection tc2 ON tc2.collectionFk = tc1.collectionFk
- WHERE t.id = vTicketFk
+ WHERE t.id = vSelf
ON DUPLICATE KEY UPDATE parkingFk = vParkingFk;
OPEN vCursor;
@@ -75378,17 +76060,39 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setProblem`(
)
BEGIN
/**
- * Update column ticket.problem with a problem code
+ * Update column ticket.problem with a problem code and SET NULL when
+ * the problem is not requiered
*
* @param vProblemCode Code to set or unset
- * @table tmp.ticket(ticketFk, hasProblem)
+ * @table tmp.ticket(ticketFk, hasProblem, isProblemCalcNeeded)
*/
- UPDATE ticket t
- JOIN tmp.ticket tt ON tt.ticketFk = t.id
- SET t.problem = CONCAT(
- IF(tt.hasProblem,
- CONCAT(problem, ',', vProblemCode),
- REPLACE(problem, vProblemCode , '')));
+ DECLARE vTicketFk INT;
+ DECLARE vHasProblem INT;
+ DECLARE vIsProblemCalcNeeded BOOL;
+ DECLARE vDone BOOL;
+ DECLARE vTicketList CURSOR FOR
+ SELECT ticketFk, hasProblem, isProblemCalcNeeded
+ FROM tmp.ticket;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vTicketList;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vTicketList INTO vTicketFk, vHasProblem, vIsProblemCalcNeeded;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ UPDATE ticket
+ SET problem = IF(vIsProblemCalcNeeded,
+ CONCAT(IF(vHasProblem,
+ CONCAT(problem, ',', vProblemCode),
+ REPLACE(problem, vProblemCode , ''))),
+ NULL)
+ WHERE id = vTicketFk;
+ END LOOP;
+ CLOSE vTicketList;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -75415,9 +76119,11 @@ BEGIN
* @param vClientFk Id Cliente, if NULL all clients
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- (INDEX(ticketFk))
+ (INDEX(ticketFk, isProblemCalcNeeded))
ENGINE = MEMORY
- SELECT t.id ticketFk, FALSE hasProblem
+ SELECT t.id ticketFk,
+ FALSE hasProblem,
+ ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
FROM ticket t
WHERE t.shipped >= util.VN_CURDATE()
AND (vClientFk IS NULL OR t.clientFk = vClientFk);
@@ -75427,7 +76133,7 @@ BEGIN
JOIN client c ON c.id = ti.clientFk
SET t.hasProblem = TRUE
WHERE c.isFreezed;
-
+
CALL ticket_setProblem('isFreezed');
DROP TEMPORARY TABLE tmp.ticket;
@@ -75457,9 +76163,11 @@ BEGIN
* @param vSelf Id ticket, if NULL ALL tickets
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- (INDEX(ticketFk))
+ (INDEX(ticketFk, isProblemCalcNeeded))
ENGINE = MEMORY
- SELECT t.id ticketFk, FALSE hasProblem
+ SELECT t.id ticketFk,
+ FALSE hasProblem,
+ ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
FROM ticket t
WHERE t.shipped >= util.VN_CURDATE()
AND (vSelf IS NULL OR t.id = vSelf);
@@ -75499,21 +76207,30 @@ BEGIN
*/
DECLARE vHasRisk BOOL;
DECLARE vHasHighRisk BOOL;
+ DECLARE vIsProblemCalcNeeded BOOL;
- SELECT t.risk > (c.credit + 10), ((t.risk - cc.riskTolerance) > (c.credit + 10))
- INTO vHasRisk, vHasHighRisk
+ SELECT t.risk > (c.credit + 10),
+ (t.risk - cc.riskTolerance) > (c.credit + 10),
+ ticket_isProblemCalcNeeded(t.id)
+ INTO vHasRisk, vHasHighRisk, vIsProblemCalcNeeded
FROM client c
JOIN ticket t ON t.clientFk = c.id
JOIN clientConfig cc
WHERE t.id = vSelf;
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- SELECT vSelf ticketFk, vHasRisk hasProblem;
+ ENGINE = MEMORY
+ SELECT vSelf ticketFk,
+ vHasRisk hasProblem,
+ vIsProblemCalcNeeded isProblemCalcNeeded;
CALL ticket_setProblem('hasRisk');
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- SELECT vSelf ticketFk, vHasHighRisk hasProblem;
+ ENGINE = MEMORY
+ SELECT vSelf ticketFk,
+ vHasHighRisk hasProblem,
+ vIsProblemCalcNeeded isProblemCalcNeeded;
CALL ticket_setProblem('hasHighRisk');
@@ -75526,6 +76243,54 @@ 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 `ticket_setProblemRiskByClient` */;
+/*!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 `ticket_setProblemRiskByClient`(
+ vClientFk INT
+)
+BEGIN
+/**
+ * Updates future ticket risk for a client.
+ *
+ * @param vClientFk Id client
+ */
+ DECLARE vDone INT DEFAULT FALSE;
+ DECLARE vTicketFk INT;
+ DECLARE vTickets CURSOR FOR
+ SELECT id
+ FROM ticket
+ WHERE clientFk = vClientFk
+ AND shipped >= util.VN_CURDATE()
+ AND refFk IS NULL;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vTickets;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vTickets INTO vTicketFk;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ CALL vn.ticket_setProblemRisk(vTicketFk);
+ END LOOP;
+ CLOSE vTickets;
+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 `ticket_setProblemRounding` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -75551,10 +76316,13 @@ BEGIN
FROM ticket
WHERE id = vSelf;
- CALL buyUltimate(vWarehouseFk, vDated);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vDated);
- CREATE OR REPLACE TEMPORARY TABLE tmp.sale
- SELECT s.id saleFk , MOD(s.quantity, b.`grouping`) hasProblem
+ CREATE OR REPLACE TEMPORARY TABLE tmp.sale
+ (INDEX(saleFk, isProblemCalcNeeded))
+ SELECT s.id saleFk ,
+ MOD(s.quantity, b.`grouping`) hasProblem,
+ ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
@@ -75590,9 +76358,11 @@ BEGIN
* @param vClientFk Id cliente, if NULL all clients
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- (INDEX(ticketFk))
+ (INDEX(ticketFk, isProblemCalcNeeded))
ENGINE = MEMORY
- SELECT t.id ticketFk, IF(c.isTaxDataChecked, FALSE, TRUE) hasProblem
+ SELECT t.id ticketFk,
+ IF(c.isTaxDataChecked, FALSE, TRUE) hasProblem,
+ ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
FROM ticket t
JOIN client c ON c.id = t.clientFk
WHERE t.shipped >= util.VN_CURDATE()
@@ -75626,14 +76396,18 @@ BEGIN
*
* @param vSelf Id del ticket
*/
+
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- (INDEX(ticketFk))
+ (INDEX(ticketFk, isProblemCalcNeeded))
ENGINE = MEMORY
- SELECT vSelf ticketFk, ticket_isTooLittle(vSelf) hasProblem;
+ SELECT vSelf ticketFk,
+ ticket_isTooLittle(vSelf) hasProblem,
+ ticket_isProblemCalcNeeded(vSelf) isProblemCalcNeeded;
CALL ticket_setProblem('isTooLittle');
DROP TEMPORARY TABLE tmp.ticket;
+
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -75661,7 +76435,7 @@ BEGIN
* @param vItemFk Id del item, NULL ALL items
*/
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
- (INDEX(ticketFk))
+ (INDEX(ticketFk, isProblemCalcNeeded))
ENGINE = MEMORY
WITH tickets AS(
SELECT t.id ticketFk
@@ -75670,7 +76444,9 @@ BEGIN
WHERE t.shipped >= util.VN_CURDATE()
AND (s.itemFk = vItemFk OR vItemFk IS NULL)
GROUP BY t.id
- )SELECT ticketFk, ticket_isTooLittle(ticketFk) hasProblem
+ )SELECT ticketFk,
+ ticket_isTooLittle(ticketFk) hasProblem,
+ ticket_isProblemCalcNeeded(ticketFk) isProblemCalcNeeded
FROM tickets;
CALL ticket_setProblem('isTooLittle');
@@ -75693,89 +76469,85 @@ DELIMITER ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_setRisk`(
- vClientFk INT)
+ vClientFk INT
+)
BEGIN
/**
- * Update the risk for a client with pending tickets
+ * Update the risk for a client with pending tickets.
*
* @param vClientFk Id cliente
*/
- DECLARE vHasDebt BOOL;
-
- SELECT COUNT(*) INTO vHasDebt
- FROM `client`
- WHERE id = vClientFk
- AND typeFk = 'normal';
-
- IF vHasDebt THEN
-
+ IF (SELECT COUNT(*) FROM client WHERE id = vClientFk AND typeFk = 'normal') THEN
CREATE OR REPLACE TEMPORARY TABLE tTicketRisk
- (KEY (ticketFk))
+ (PRIMARY KEY (ticketFk))
ENGINE = MEMORY
- WITH ticket AS(
- SELECT id ticketFk, companyFk, DATE(shipped) dated
- FROM vn.ticket t
- WHERE clientFk = vClientFk
- AND refFk IS NULL
- AND NOT isDeleted
- AND totalWithoutVat <> 0
- ), dated AS(
- SELECT t.companyFk, MIN(DATE(t.dated) - INTERVAL cc.riskScope MONTH) started,
- MAX(DATE(t.dated)) ended
- FROM ticket t
- JOIN vn.clientConfig cc
- GROUP BY t.companyFk
- ), balance AS(
- SELECT SUM(amount)amount, companyFk
- FROM (
- SELECT amount, companyFk
- FROM vn.clientRisk
- WHERE clientFk = vClientFk
- UNION ALL
- SELECT -(SUM(amount) / 100) amount, tm.companyFk
- FROM hedera.tpvTransaction t
- JOIN hedera.tpvMerchant tm ON t.id = t.merchantFk
- WHERE clientFk = vClientFk
- AND receiptFk IS NULL
- AND status = 'ok'
- ) sub
- WHERE companyFk
+ WITH ticket AS (
+ SELECT t.id ticketFk,
+ t.companyFk,
+ DATE(t.shipped) dated,
+ t.totalWithVat,
+ ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
+ FROM vn.ticket t
+ JOIN vn.clientConfig cc
+ WHERE t.clientFk = vClientFk
+ AND t.refFk IS NULL
+ AND NOT t.isDeleted
+ AND IFNULL(t.totalWithVat, 0) <> 0
+ AND t.shipped > (util.VN_CURDATE() - INTERVAL cc.riskScope MONTH)
+ ), uninvoiced AS (
+ SELECT companyFk, dated, SUM(totalWithVat) amount
+ FROM ticket
+ GROUP BY companyFk, dated
+ ), companies AS (
+ SELECT DISTINCT companyFk FROM uninvoiced
+ ), balance AS (
+ SELECT SUM(IFNULL(amount, 0))amount, companyFk
+ FROM (
+ SELECT cr.amount, c.companyFk
+ FROM companies c
+ LEFT JOIN vn.clientRisk cr ON cr.companyFk = c.companyFk
+ AND cr.clientFk = vClientFk
+ UNION ALL
+ SELECT -(SUM(t.amount) / 100) amount, c.companyFk
+ FROM companies c
+ LEFT JOIN hedera.tpvMerchant tm ON tm.companyFk = c.companyFk
+ LEFT JOIN hedera.tpvTransaction t ON t.merchantFk = tm.id
+ AND t.clientFk = vClientFk
+ AND t.receiptFk IS NULL
+ AND t.`status` = 'ok'
+ ) sub
+ WHERE companyFk
GROUP BY companyFk
- ), uninvoiced AS(
- SELECT t.companyFk, DATE(t.shipped) dated, SUM(IFNULL(t.totalWithVat, 0)) amount
- FROM vn.ticket t
- JOIN dated d
- WHERE t.clientFk = vClientFk
- AND t.refFk IS NULL
- AND t.shipped BETWEEN d.started AND d.ended
- GROUP BY t.companyFk, DATE(t.shipped)
- ), receipt AS(
- SELECT companyFk,DATE(payed) dated, SUM(amountPaid) amount
- FROM vn.receipt
- WHERE clientFk = vClientFk
- AND payed > util.VN_CURDATE()
- GROUP BY companyFk, DATE(payed)
- ), risk AS(
+ ), receipt AS (
+ SELECT r.companyFk, DATE(r.payed) dated, SUM(r.amountPaid) amount
+ FROM vn.receipt r
+ JOIN companies c ON c.companyFk = r.companyFk
+ WHERE r.clientFk = vClientFk
+ AND r.payed > util.VN_CURDATE()
+ GROUP BY r.companyFk, DATE(r.payed)
+ ), risk AS (
SELECT b.companyFk,
- ui.dated,
- SUM(ui.amount) OVER (PARTITION BY b.companyFk ORDER BY ui.dated ) +
+ ui.dated,
+ SUM(ui.amount) OVER (PARTITION BY b.companyFk ORDER BY ui.dated) +
b.amount +
SUM(IFNULL(r.amount, 0)) amount
FROM balance b
JOIN uninvoiced ui ON ui.companyFk = b.companyFk
- LEFT JOIN receipt r ON r.dated > ui.dated AND r.companyFk = ui.companyFk
+ LEFT JOIN receipt r ON r.dated > ui.dated
+ AND r.companyFk = ui.companyFk
GROUP BY b.companyFk, ui.dated
- )
- SELECT ti.ticketFk, r.amount
- FROM ticket ti
- JOIN risk r ON r.dated = ti.dated AND r.companyFk = ti.companyFk;
+ )
+ SELECT ti.ticketFk, r.amount, ti.isProblemCalcNeeded
+ FROM ticket ti
+ JOIN risk r ON r.dated = ti.dated
+ AND r.companyFk = ti.companyFk;
UPDATE ticket t
JOIN tTicketRisk tr ON tr.ticketFk = t.id
- SET t.risk = tr.amount;
+ SET t.risk = IF(tr.isProblemCalcNeeded, tr.amount, NULL);
DROP TEMPORARY TABLE tTicketRisk;
- END IF;
+ END IF;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -75951,7 +76723,7 @@ DELIMITER ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_splitItemPackingType`(
- vTicketFk INT,
+ vSelf INT,
vOriginalItemPackingTypeFk VARCHAR(1)
)
BEGIN
@@ -75959,7 +76731,7 @@ BEGIN
* Clona y reparte las ventas de un ticket en funcion del tipo de empaquetado.
* Respeta el id inicial para el tipo propuesto.
*
- * @param vTicketFk Identificador de vn.ticket
+ * @param vSelf Id ticket
* @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
*/
@@ -75967,10 +76739,12 @@ BEGIN
DECLARE vNewTicketFk INT;
DECLARE vPackingTypesToSplit INT;
DECLARE vDone INT DEFAULT FALSE;
+ DECLARE vErrorNumber INT;
+ DECLARE vErrorMsg TEXT;
- DECLARE cur1 CURSOR FOR
+ DECLARE vSaleGroup CURSOR FOR
SELECT itemPackingTypeFk
- FROM tmp.saleGroup
+ FROM tSaleGroup
WHERE itemPackingTypeFk IS NOT NULL
ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
@@ -75978,33 +76752,51 @@ BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
+ GET DIAGNOSTICS CONDITION 1
+ vErrorNumber = MYSQL_ERRNO,
+ vErrorMsg = MESSAGE_TEXT;
+
+ CALL util.debugAdd('ticket_splitItemPackingType', JSON_OBJECT(
+ 'errorNumber', vErrorNumber,
+ 'errorMsg', vErrorMsg,
+ 'ticketFk', vSelf
+ )); -- Tmp
+ ROLLBACK;
RESIGNAL;
END;
- DELETE FROM vn.sale
- WHERE quantity = 0
- AND ticketFk = vTicketFk;
+ START TRANSACTION;
- CREATE OR REPLACE TEMPORARY TABLE tmp.sale
+ 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 vn.sale s
- JOIN vn.item i ON i.id = s.itemFk
- LEFT JOIN vn.saleVolume sv ON sv.saleFk = s.id
- WHERE s.ticketFk = vTicketFk;
+ 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 tmp.saleGroup
+ CREATE OR REPLACE TEMPORARY TABLE tSaleGroup
ENGINE = MEMORY
SELECT itemPackingTypeFk, SUM(litros) totalLitros
- FROM tmp.sale
+ FROM tSale
GROUP BY itemPackingTypeFk;
SELECT COUNT(*) INTO vPackingTypesToSplit
- FROM tmp.saleGroup
+ FROM tSaleGroup
WHERE itemPackingTypeFk IS NOT NULL;
- CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT (
+ CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
ticketFk INT,
itemPackingTypeFk VARCHAR(1)
) ENGINE = MEMORY;
@@ -76012,56 +76804,64 @@ BEGIN
CASE vPackingTypesToSplit
WHEN 0 THEN
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- VALUES(vTicketFk, vItemPackingTypeFk);
+ VALUES(vSelf, vItemPackingTypeFk);
WHEN 1 THEN
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- SELECT vTicketFk, itemPackingTypeFk
- FROM tmp.saleGroup
+ SELECT vSelf, itemPackingTypeFk
+ FROM tSaleGroup
WHERE itemPackingTypeFk IS NOT NULL;
ELSE
- OPEN cur1;
-
- FETCH cur1 INTO vItemPackingTypeFk;
+ OPEN vSaleGroup;
+ FETCH vSaleGroup INTO vItemPackingTypeFk;
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
- VALUES(vTicketFk, vItemPackingTypeFk);
+ VALUES(vSelf, vItemPackingTypeFk);
- read_loop: LOOP
- FETCH cur1 INTO vItemPackingTypeFk;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vSaleGroup INTO vItemPackingTypeFk;
IF vDone THEN
- LEAVE read_loop;
+ LEAVE l;
END IF;
- CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
+ CALL ticket_Clone(vSelf, vNewTicketFk);
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
VALUES(vNewTicketFk, vItemPackingTypeFk);
END LOOP;
- CLOSE cur1;
+ CLOSE vSaleGroup;
- UPDATE vn.sale s
- JOIN tmp.sale ts ON ts.id = s.id
+ 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 sale s
+ JOIN tSale ts ON ts.id = s.id
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
SET s.ticketFk = t.ticketFk;
SELECT itemPackingTypeFk INTO vItemPackingTypeFk
- FROM tmp.saleGroup sg
+ FROM tSaleGroup sg
WHERE sg.itemPackingTypeFk IS NOT NULL
ORDER BY sg.itemPackingTypeFk
LIMIT 1;
- UPDATE vn.sale s
- JOIN tmp.sale ts ON ts.id = s.id
+ 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;
+ COMMIT;
+
DROP TEMPORARY TABLE
- tmp.sale,
- tmp.saleGroup;
+ tSale,
+ tSaleGroup;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -79671,6 +80471,8 @@ BEGIN
*/
DECLARE vLastIn DATETIME ;
DECLARE vIsMiddleOdd BOOLEAN ;
+ DECLARE vMailTo VARCHAR(50) DEFAULT NULL;
+ DECLARE vUserName VARCHAR(50) DEFAULT NULL;
IF (vTimed IS NULL) THEN
SET vTimed = util.VN_NOW();
@@ -79719,6 +80521,19 @@ BEGIN
VALUES('in', NULL);
END IF;
+ IF (SELECT option1 IS NULL AND option2 IS NULL FROM tmp.workerTimeControlDirection) THEN
+ SELECT CONCAT(u.name, '@verdnatura.es'), CONCAT(w.firstName, ' ', w.lastName)
+ INTO vMailTo, vUserName
+ FROM account.user u
+ JOIN worker w ON w.bossFk = u.id
+ WHERE w.id = vWorkerFk;
+
+ CALL mail_insert(
+ vMailTo,
+ vMailTo,
+ 'Error al fichar',
+ CONCAT(vUserName, ' tiene problemas para fichar'));
+ END IF;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -80670,19 +81485,6 @@ BEGIN
* identificando y notificando los asientos descuadrados
* y ajustando los saldos en caso necesario.
*/
- INSERT INTO mail (receiver, subject, body)
- SELECT 'cau@verdnatura.es',
- 'Asientos descuadrados',
- GROUP_CONCAT(CONCAT(' Asiento: ', ASIEN, ' - Importe:', recon) SEPARATOR ' | \n')
- FROM (
- SELECT ASIEN,
- SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0)) recon
- FROM XDiario
- WHERE NOT enlazado
- GROUP BY ASIEN
- HAVING ABS(SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0))) > 0.01
- ) sub
- HAVING COUNT(*);
UPDATE XDiario xd
JOIN (
@@ -81462,7 +82264,8 @@ BEGIN
DROP TEMPORARY TABLE
geoCollision,
tmp.zone,
- tmp.zoneNodes;
+ tmp.zoneNodes,
+ tmp.zoneOption;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -83166,16 +83969,11 @@ SET character_set_client = utf8;
1 AS `Id_Trabajador`,
1 AS `life`,
1 AS `isPackaging`,
- 1 AS `density`,
1 AS `inventory`,
1 AS `odbc_date`,
1 AS `confeccion`,
1 AS `Temperatura`,
- 1 AS `promo`,
- 1 AS `maneuver`,
- 1 AS `target`,
- 1 AS `top_margin`,
- 1 AS `profit` */;
+ 1 AS `promo` */;
SET character_set_client = @saved_cs_client;
--
@@ -83654,8 +84452,7 @@ SET character_set_client = utf8;
1 AS `packingOut`,
1 AS `itemOriginalFk`,
1 AS `itemOriginalName`,
- 1 AS `gramsMax`,
- 1 AS `minQuantity` */;
+ 1 AS `gramsMax` */;
SET character_set_client = @saved_cs_client;
--
@@ -83668,7 +84465,6 @@ SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `buy_edi` AS SELECT
1 AS `id`,
- 1 AS `barcode`,
1 AS `entry_year`,
1 AS `delivery_number`,
1 AS `fec`,
@@ -85241,7 +86037,7 @@ USE `bi`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `tarifa_componentes_series` AS select `ct`.`id` AS `tarifa_componentes_series_id`,`ct`.`type` AS `Serie`,`ct`.`isBase` AS `base`,`ct`.`isMargin` AS `margen` from `vn`.`componentType` `ct` */;
+/*!50001 VIEW `tarifa_componentes_series` AS select `ct`.`id` AS `tarifa_componentes_series_id`,`ct`.`name` AS `Serie`,`ct`.`isBase` AS `base`,`ct`.`isMargin` AS `margen` from `vn`.`componentType` `ct` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -85373,7 +86169,7 @@ USE `edi`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `ektRecent` AS select `e`.`id` AS `id`,`e`.`barcode` AS `barcode`,`e`.`entryYear` AS `entryYear`,`e`.`batchNumber` AS `batchNumber`,`e`.`deliveryNumber` AS `deliveryNumber`,`e`.`vendorOrderNumber` AS `vendorOrderNumber`,`e`.`fec` AS `fec`,`e`.`hor` AS `hor`,`e`.`now` AS `now`,`e`.`ptj` AS `ptj`,`e`.`ref` AS `ref`,`e`.`item` AS `item`,`e`.`pac` AS `pac`,`e`.`qty` AS `qty`,`e`.`ori` AS `ori`,`e`.`cat` AS `cat`,`e`.`agj` AS `agj`,`e`.`kop` AS `kop`,`e`.`ptd` AS `ptd`,`e`.`sub` AS `sub`,`e`.`pro` AS `pro`,`e`.`pri` AS `pri`,`e`.`package` AS `package`,`e`.`auction` AS `auction`,`e`.`klo` AS `klo`,`e`.`k1` AS `k1`,`e`.`k2` AS `k2`,`e`.`k3` AS `k3`,`e`.`k4` AS `k4`,`e`.`s1` AS `s1`,`e`.`s2` AS `s2`,`e`.`s3` AS `s3`,`e`.`s4` AS `s4`,`e`.`s5` AS `s5`,`e`.`s6` AS `s6`,`e`.`ok` AS `ok`,`e`.`trolleyFk` AS `trolleyFk`,`e`.`putOrderFk` AS `putOrderFk`,`e`.`scanned` AS `scanned`,`e`.`cps` AS `cps`,`e`.`dp` AS `dp`,`e`.`sender` AS `sender`,`ec`.`usefulAuctionLeftSegmentLength` AS `usefulAuctionLeftSegmentLength`,`ec`.`standardBarcodeLength` AS `standardBarcodeLength`,`ec`.`floridayBarcodeLength` AS `floridayBarcodeLength`,`ec`.`floramondoBarcodeLength` AS `floramondoBarcodeLength`,`ec`.`defaultKlo` AS `defaultKlo`,`ec`.`ektRecentScopeDays` AS `ektRecentScopeDays` from (`ekt` `e` join `ektConfig` `ec`) where `e`.`entryYear` = year(`util`.`VN_CURDATE`()) and `e`.`fec` >= `util`.`VN_CURDATE`() + interval -`ec`.`ektRecentScopeDays` day */;
+/*!50001 VIEW `ektRecent` AS select `e`.`id` AS `id`,`e`.`entryYear` AS `entryYear`,`e`.`batchNumber` AS `batchNumber`,`e`.`deliveryNumber` AS `deliveryNumber`,`e`.`vendorOrderNumber` AS `vendorOrderNumber`,`e`.`fec` AS `fec`,`e`.`hor` AS `hor`,`e`.`now` AS `now`,`e`.`ptj` AS `ptj`,`e`.`ref` AS `ref`,`e`.`item` AS `item`,`e`.`pac` AS `pac`,`e`.`qty` AS `qty`,`e`.`ori` AS `ori`,`e`.`cat` AS `cat`,`e`.`agj` AS `agj`,`e`.`kop` AS `kop`,`e`.`ptd` AS `ptd`,`e`.`sub` AS `sub`,`e`.`pro` AS `pro`,`e`.`pri` AS `pri`,`e`.`package` AS `package`,`e`.`auction` AS `auction`,`e`.`klo` AS `klo`,`e`.`k1` AS `k1`,`e`.`k2` AS `k2`,`e`.`k3` AS `k3`,`e`.`k4` AS `k4`,`e`.`s1` AS `s1`,`e`.`s2` AS `s2`,`e`.`s3` AS `s3`,`e`.`s4` AS `s4`,`e`.`s5` AS `s5`,`e`.`s6` AS `s6`,`e`.`ok` AS `ok`,`e`.`trolleyFk` AS `trolleyFk`,`e`.`putOrderFk` AS `putOrderFk`,`e`.`scanned` AS `scanned`,`e`.`cps` AS `cps`,`e`.`dp` AS `dp`,`e`.`sender` AS `sender`,`ec`.`usefulAuctionLeftSegmentLength` AS `usefulAuctionLeftSegmentLength`,`ec`.`standardBarcodeLength` AS `standardBarcodeLength`,`ec`.`floridayBarcodeLength` AS `floridayBarcodeLength`,`ec`.`floramondoBarcodeLength` AS `floramondoBarcodeLength`,`ec`.`defaultKlo` AS `defaultKlo`,`ec`.`ektRecentScopeDays` AS `ektRecentScopeDays` from (`ekt` `e` join `ektConfig` `ec`) where `e`.`entryYear` = year(`util`.`VN_CURDATE`()) and `e`.`fec` >= `util`.`VN_CURDATE`() + interval -`ec`.`ektRecentScopeDays` day */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -85829,7 +86625,7 @@ USE `pbx`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `queueConf` AS select `q`.`name` AS `name`,`c`.`strategy` AS `strategy`,`c`.`timeout` AS `timeout`,`c`.`retry` AS `retry`,`c`.`weight` AS `weight`,`c`.`maxLen` AS `maxlen`,`c`.`ringInUse` AS `ringinuse` from (`queue` `q` join `queueConfig` `c` on(`q`.`config` = `c`.`id`)) */;
+/*!50001 VIEW `queueConf` AS select `q`.`name` AS `name`,`c`.`strategy` AS `strategy`,`c`.`timeout` AS `timeout`,`c`.`retry` AS `retry`,`c`.`weight` AS `weight`,`c`.`maxLen` AS `maxlen`,`c`.`ringInUse` AS `ringinuse` from (`queue` `q` join `queueMultiConfig` `c` on(`q`.`config` = `c`.`id`)) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -87533,7 +88329,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `saleCost` AS select `s`.`itemFk` AS `itemFk`,`s`.`ticketFk` AS `ticketFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,`s`.`discount` AS `discount`,`s`.`price` AS `price`,`c`.`name` AS `component`,`sc`.`value` AS `coste` from (((`sale` `s` join `saleComponent` `sc` on(`sc`.`saleFk` = `s`.`id`)) join `component` `c` on(`c`.`id` = `sc`.`componentFk`)) join `componentType` `ct` on(`ct`.`id` = `c`.`typeFk`)) where `ct`.`type` = 'coste' */;
+/*!50001 VIEW `saleCost` AS select `s`.`itemFk` AS `itemFk`,`s`.`ticketFk` AS `ticketFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,`s`.`discount` AS `discount`,`s`.`price` AS `price`,`c`.`name` AS `component`,`sc`.`value` AS `coste` from (((`sale` `s` join `saleComponent` `sc` on(`sc`.`saleFk` = `s`.`id`)) join `component` `c` on(`c`.`id` = `sc`.`componentFk`)) join `componentType` `ct` on(`ct`.`id` = `c`.`typeFk`)) where `ct`.`code` = 'cost' */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -87659,7 +88455,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `sale_freightComponent` AS select `t`.`id` AS `ticketFk`,`sc`.`value` * `s`.`quantity` AS `amount`,`t`.`shipped` AS `shipped` from ((((`ticket` `t` straight_join `sale` `s` on(`t`.`id` = `s`.`ticketFk`)) join `saleComponent` `sc` on(`sc`.`saleFk` = `s`.`id`)) join `component` `c` on(`c`.`id` = `sc`.`componentFk`)) join `componentType` `ct` on(`ct`.`id` = `c`.`typeFk` and `ct`.`type` = 'agencia')) */;
+/*!50001 VIEW `sale_freightComponent` AS select `t`.`id` AS `ticketFk`,`sc`.`value` * `s`.`quantity` AS `amount`,`t`.`shipped` AS `shipped` from ((((`ticket` `t` straight_join `sale` `s` on(`t`.`id` = `s`.`ticketFk`)) join `saleComponent` `sc` on(`sc`.`saleFk` = `s`.`id`)) join `component` `c` on(`c`.`id` = `sc`.`componentFk`)) join `componentType` `ct` on(`ct`.`id` = `c`.`typeFk` and `ct`.`code` = 'freight')) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -88835,7 +89631,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `Tipos` AS select `it`.`id` AS `tipo_id`,`it`.`code` AS `Id_Tipo`,`it`.`name` AS `Tipo`,`it`.`order` AS `Orden`,`it`.`categoryFk` AS `reino_id`,`it`.`workerFk` AS `Id_Trabajador`,`it`.`life` AS `life`,`it`.`isPackaging` AS `isPackaging`,`it`.`density` AS `density`,`it`.`isInventory` AS `inventory`,`it`.`created` AS `odbc_date`,`it`.`making` AS `confeccion`,`it`.`temperatureFk` AS `Temperatura`,`it`.`promo` AS `promo`,`it`.`maneuver` AS `maneuver`,`it`.`target` AS `target`,`it`.`topMargin` AS `top_margin`,`it`.`profit` AS `profit` from `vn`.`itemType` `it` */;
+/*!50001 VIEW `Tipos` AS select `it`.`id` AS `tipo_id`,`it`.`code` AS `Id_Tipo`,`it`.`name` AS `Tipo`,`it`.`order` AS `Orden`,`it`.`categoryFk` AS `reino_id`,`it`.`workerFk` AS `Id_Trabajador`,`it`.`life` AS `life`,`it`.`isPackaging` AS `isPackaging`,`it`.`isInventory` AS `inventory`,`it`.`created` AS `odbc_date`,`it`.`making` AS `confeccion`,`it`.`temperatureFk` AS `Temperatura`,`it`.`promo` AS `promo` from `vn`.`itemType` `it` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89267,7 +90063,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `buySource` AS select `b`.`entryFk` AS `Id_Entrada`,`b`.`isPickedOff` AS `isPickedOff`,NULL AS `tarifa0`,`e`.`kop` AS `kop`,`b`.`id` AS `Id_Compra`,`i`.`typeFk` AS `tipo_id`,`b`.`itemFk` AS `Id_Article`,`i`.`size` AS `Medida`,`i`.`stems` AS `Tallos`,`b`.`stickers` AS `Etiquetas`,`b`.`packagingFk` AS `Id_Cubo`,`b`.`buyingValue` AS `Costefijo`,`b`.`packing` AS `Packing`,`b`.`grouping` AS `Grouping`,`b`.`quantity` AS `Cantidad`,`b`.`price2` AS `Tarifa2`,`b`.`price3` AS `Tarifa3`,`b`.`isChecked` AS `Punteo`,`b`.`groupingMode` AS `Caja`,`i`.`isToPrint` AS `Imprimir`,`i`.`name` AS `Article`,`vn`.`ink`.`picture` AS `Tinta`,`i`.`originFk` AS `id_origen`,`i`.`minPrice` AS `PVP`,NULL AS `Id_Accion`,`s`.`company_name` AS `pro`,`i`.`hasMinPrice` AS `Min`,`b`.`isIgnored` AS `Novincular`,`b`.`freightValue` AS `Portefijo`,round(`b`.`buyingValue` * `b`.`quantity`,2) AS `Importe`,`b`.`printedStickers` AS `Vida`,`i`.`comment` AS `reference`,`b`.`workerFk` AS `Id_Trabajador`,`e`.`s1` AS `S1`,`e`.`s2` AS `S2`,`e`.`s3` AS `S3`,`e`.`s4` AS `S4`,`e`.`s5` AS `S5`,`e`.`s6` AS `S6`,0 AS `price_fixed`,`i`.`producerFk` AS `producer_id`,`i`.`subName` AS `tag1`,`i`.`value5` AS `tag2`,`i`.`value6` AS `tag3`,`i`.`value7` AS `tag4`,`i`.`value8` AS `tag5`,`i`.`value9` AS `tag6`,`i`.`value10` AS `tag7`,`s`.`company_name` AS `company_name`,`b`.`weight` AS `weightPacking`,`i`.`packingOut` AS `packingOut`,`b`.`itemOriginalFk` AS `itemOriginalFk`,`io`.`longName` AS `itemOriginalName`,`it`.`gramsMax` AS `gramsMax`,`i`.`minQuantity` AS `minQuantity` from ((((((`vn`.`item` `i` join `vn`.`itemType` `it` on(`it`.`id` = `i`.`typeFk`)) left join `vn`.`ink` on(`vn`.`ink`.`id` = `i`.`inkFk`)) left join `vn`.`buy` `b` on(`b`.`itemFk` = `i`.`id`)) left join `vn`.`item` `io` on(`io`.`id` = `b`.`itemOriginalFk`)) left join `edi`.`ekt` `e` on(`e`.`id` = `b`.`ektFk`)) left join `edi`.`supplier` `s` on(`e`.`pro` = `s`.`supplier_id`)) */;
+/*!50001 VIEW `buySource` AS select `b`.`entryFk` AS `Id_Entrada`,`b`.`isPickedOff` AS `isPickedOff`,NULL AS `tarifa0`,`e`.`kop` AS `kop`,`b`.`id` AS `Id_Compra`,`i`.`typeFk` AS `tipo_id`,`b`.`itemFk` AS `Id_Article`,`i`.`size` AS `Medida`,`i`.`stems` AS `Tallos`,`b`.`stickers` AS `Etiquetas`,`b`.`packagingFk` AS `Id_Cubo`,`b`.`buyingValue` AS `Costefijo`,`b`.`packing` AS `Packing`,`b`.`grouping` AS `Grouping`,`b`.`quantity` AS `Cantidad`,`b`.`price2` AS `Tarifa2`,`b`.`price3` AS `Tarifa3`,`b`.`isChecked` AS `Punteo`,`b`.`groupingMode` AS `Caja`,`i`.`isToPrint` AS `Imprimir`,`i`.`name` AS `Article`,`vn`.`ink`.`picture` AS `Tinta`,`i`.`originFk` AS `id_origen`,`i`.`minPrice` AS `PVP`,NULL AS `Id_Accion`,`s`.`company_name` AS `pro`,`i`.`hasMinPrice` AS `Min`,`b`.`isIgnored` AS `Novincular`,`b`.`freightValue` AS `Portefijo`,round(`b`.`buyingValue` * `b`.`quantity`,2) AS `Importe`,`b`.`printedStickers` AS `Vida`,`i`.`comment` AS `reference`,`b`.`workerFk` AS `Id_Trabajador`,`e`.`s1` AS `S1`,`e`.`s2` AS `S2`,`e`.`s3` AS `S3`,`e`.`s4` AS `S4`,`e`.`s5` AS `S5`,`e`.`s6` AS `S6`,0 AS `price_fixed`,`i`.`producerFk` AS `producer_id`,`i`.`subName` AS `tag1`,`i`.`value5` AS `tag2`,`i`.`value6` AS `tag3`,`i`.`value7` AS `tag4`,`i`.`value8` AS `tag5`,`i`.`value9` AS `tag6`,`i`.`value10` AS `tag7`,`s`.`company_name` AS `company_name`,`b`.`weight` AS `weightPacking`,`i`.`packingOut` AS `packingOut`,`b`.`itemOriginalFk` AS `itemOriginalFk`,`io`.`longName` AS `itemOriginalName`,`it`.`gramsMax` AS `gramsMax` from ((((((`vn`.`item` `i` join `vn`.`itemType` `it` on(`it`.`id` = `i`.`typeFk`)) left join `vn`.`ink` on(`vn`.`ink`.`id` = `i`.`inkFk`)) left join `vn`.`buy` `b` on(`b`.`itemFk` = `i`.`id`)) left join `vn`.`item` `io` on(`io`.`id` = `b`.`itemOriginalFk`)) left join `edi`.`ekt` `e` on(`e`.`id` = `b`.`ektFk`)) left join `edi`.`supplier` `s` on(`e`.`pro` = `s`.`supplier_id`)) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -89285,7 +90081,7 @@ USE `vn2008`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
-/*!50001 VIEW `buy_edi` AS select `t`.`id` AS `id`,`t`.`barcode` AS `barcode`,`t`.`entryYear` AS `entry_year`,`t`.`deliveryNumber` AS `delivery_number`,`t`.`fec` AS `fec`,`t`.`hor` AS `hor`,`t`.`now` AS `now`,`t`.`ptj` AS `ptj`,`t`.`ref` AS `ref`,`t`.`item` AS `item`,`t`.`pac` AS `pac`,`t`.`qty` AS `qty`,`t`.`ori` AS `ori`,`t`.`cat` AS `cat`,`t`.`agj` AS `agj`,`t`.`kop` AS `kop`,`t`.`ptd` AS `ptd`,`t`.`sub` AS `sub`,`t`.`pro` AS `pro`,`t`.`pri` AS `pri`,`t`.`package` AS `package`,`t`.`auction` AS `auction`,`t`.`klo` AS `klo`,`t`.`k1` AS `k01`,`t`.`k2` AS `k02`,`t`.`k3` AS `k03`,`t`.`k4` AS `k04`,`t`.`s1` AS `s1`,`t`.`s2` AS `s2`,`t`.`s3` AS `s3`,`t`.`s4` AS `s4`,`t`.`s5` AS `s5`,`t`.`s6` AS `s6`,`t`.`ok` AS `ok`,`t`.`trolleyFk` AS `trolley_id`,`t`.`putOrderFk` AS `putOrderFk`,`t`.`scanned` AS `scanned` from `edi`.`ekt` `t` */;
+/*!50001 VIEW `buy_edi` AS select `t`.`id` AS `id`,`t`.`entryYear` AS `entry_year`,`t`.`deliveryNumber` AS `delivery_number`,`t`.`fec` AS `fec`,`t`.`hor` AS `hor`,`t`.`now` AS `now`,`t`.`ptj` AS `ptj`,`t`.`ref` AS `ref`,`t`.`item` AS `item`,`t`.`pac` AS `pac`,`t`.`qty` AS `qty`,`t`.`ori` AS `ori`,`t`.`cat` AS `cat`,`t`.`agj` AS `agj`,`t`.`kop` AS `kop`,`t`.`ptd` AS `ptd`,`t`.`sub` AS `sub`,`t`.`pro` AS `pro`,`t`.`pri` AS `pri`,`t`.`package` AS `package`,`t`.`auction` AS `auction`,`t`.`klo` AS `klo`,`t`.`k1` AS `k01`,`t`.`k2` AS `k02`,`t`.`k3` AS `k03`,`t`.`k4` AS `k04`,`t`.`s1` AS `s1`,`t`.`s2` AS `s2`,`t`.`s3` AS `s3`,`t`.`s4` AS `s4`,`t`.`s5` AS `s5`,`t`.`s6` AS `s6`,`t`.`ok` AS `ok`,`t`.`trolleyFk` AS `trolley_id`,`t`.`putOrderFk` AS `putOrderFk`,`t`.`scanned` AS `scanned` from `edi`.`ekt` `t` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -90559,4 +91355,4 @@ USE `vn2008`;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-07-09 5:48:04
+-- Dump completed on 2024-08-06 6:02:57
diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql
index 41525b2eb..014bce729 100644
--- a/db/dump/.dump/triggers.sql
+++ b/db/dump/.dump/triggers.sql
@@ -175,6 +175,70 @@ 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 `account`.`mailAliasAccount_beforeInsert`
+ BEFORE INSERT ON `mailAliasAccount`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `account`.`mailAliasAccount_beforeUpdate`
+ BEFORE UPDATE ON `mailAliasAccount`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `account`.`mailAliasAccount_afterDelete`
+ AFTER DELETE ON `mailAliasAccount`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO userLog
+ SET `action` = 'delete',
+ `changedModel` = 'MailAliasAccount',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `account`.`mailForward_beforeInsert`
BEFORE INSERT ON `mailForward`
FOR EACH ROW
@@ -4084,29 +4148,22 @@ DELIMITER ;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`delivery_beforeInsert`
BEFORE INSERT ON `delivery`
FOR EACH ROW
BEGIN
-
- IF (NEW.longitude IS NOT NULL AND NEW.latitude IS NOT NULL AND NEW.ticketFK IS NOT NULL)
+ IF (NEW.longitude IS NOT NULL
+ AND NEW.latitude IS NOT NULL
+ AND NEW.ticketFK IS NOT NULL)
THEN
- UPDATE address
- SET longitude = NEW.longitude,
- latitude = NEW.latitude
- WHERE id IN (
- SELECT addressFK
- FROM ticket
- WHERE id = NEW.ticketFk
- );
+ CALL address_updateCoordinates(NEW.ticketFk, NEW.longitude, NEW.latitude);
END IF;
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -4116,29 +4173,22 @@ DELIMITER ;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
-/*!50003 SET character_set_client = utf8mb3 */ ;
-/*!50003 SET character_set_results = utf8mb3 */ ;
-/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
-/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`delivery_beforeUpdate`
BEFORE UPDATE ON `delivery`
FOR EACH ROW
BEGIN
-
-IF (NEW.longitude IS NOT NULL AND NEW.latitude IS NOT NULL AND NEW.ticketFK IS NOT NULL)
+ IF (NEW.longitude IS NOT NULL
+ AND NEW.latitude IS NOT NULL
+ AND NEW.ticketFK IS NOT NULL)
THEN
- UPDATE address
- SET longitude = NEW.longitude,
- latitude = NEW.latitude
- WHERE id IN (
- SELECT addressFK
- FROM ticket
- WHERE id = NEW.ticketFk
- );
+ CALL address_updateCoordinates(NEW.ticketFk, NEW.longitude, NEW.latitude);
END IF;
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -6176,6 +6226,72 @@ 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`.`itemMinimumQuantity_beforeInsert`
+ BEFORE INSERT ON `itemMinimumQuantity`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+ CALL itemMinimumQuantity_check(NEW.id, NEW.itemFk, NEW.started, NEW.ended, NEW.warehouseFk);
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`itemMinimumQuantity_beforeUpdate`
+ BEFORE UPDATE ON `itemMinimumQuantity`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+ CALL itemMinimumQuantity_check(NEW.id, NEW.itemFk, NEW.started, NEW.ended, NEW.warehouseFk);
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`itemMinimumQuantity_afterDelete`
+ AFTER DELETE ON `itemMinimumQuantity`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO itemLog
+ SET `action` = 'delete',
+ `changedModel` = 'ItemMinimumQuantity',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`itemShelving_beforeInsert`
BEFORE INSERT ON `itemShelving`
FOR EACH ROW
@@ -6209,10 +6325,6 @@ BEGIN
SET NEW.userFk = account.myUser_getId();
END IF;
- IF (NEW.visible <> OLD.visible) THEN
- SET NEW.available = GREATEST(NEW.available + NEW.visible - OLD.visible, 0);
- END IF;
-
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -6309,6 +6421,30 @@ 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`.`itemShelving_afterDelete`
+ AFTER DELETE ON `itemShelving`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO shelvingLog
+ SET `action` = 'delete',
+ `changedModel` = 'itemShelving',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`itemShelvingSale_afterInsert`
AFTER INSERT ON `itemShelvingSale`
FOR EACH ROW
@@ -7162,6 +7298,70 @@ 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`.`productionConfig_beforeInsert`
+ BEFORE INSERT ON `productionConfig`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`productionConfig_beforeUpdate`
+ BEFORE UPDATE ON `productionConfig`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`productionConfig_afterDelete`
+ AFTER DELETE ON `productionConfig`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO productionConfig
+ SET `action` = 'delete',
+ `changedModel` = 'ProductionConfig',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`projectNotes_beforeInsert`
BEFORE INSERT ON `projectNotes`
FOR EACH ROW
@@ -9020,13 +9220,16 @@ BEGIN
SET NEW.editorFk = account.myUser_getId();
IF NOT (NEW.routeFk <=> OLD.routeFk) THEN
- INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`)
- SELECT r.id
- FROM vn.route r
- WHERE r.isOk = FALSE
- AND r.id IN (OLD.routeFk,NEW.routeFk)
- AND r.created >= util.VN_CURDATE()
- GROUP BY r.id;
+ IF NEW.isSigned THEN
+ CALL util.throw('A signed ticket cannot be rerouted');
+ END IF;
+ INSERT IGNORE INTO routeRecalc(routeFk)
+ SELECT id
+ FROM `route`
+ WHERE NOT isOk
+ AND id IN (OLD.routeFk, NEW.routeFk)
+ AND created >= util.VN_CURDATE()
+ GROUP BY id;
END IF;
IF NOT (DATE(NEW.shipped) <=> DATE(OLD.shipped)) THEN
@@ -10939,4 +11142,4 @@ USE `vn2008`;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-07-09 5:48:24
+-- Dump completed on 2024-08-06 6:03:19
diff --git a/db/dump/fixtures.after.sql b/db/dump/fixtures.after.sql
index 84ce0d940..59730d592 100644
--- a/db/dump/fixtures.after.sql
+++ b/db/dump/fixtures.after.sql
@@ -10,9 +10,6 @@ SET foreign_key_checks = 0;
INSERT INTO util.config (id, environment, mockTime, mockUtcTime, mockEnabled)
VALUES (1, 'local', '2001-01-01 12:00:00', '2001-01-01 11:00:00', TRUE);
-INSERT INTO util.binlogQueue (code,logName, `position`)
- VALUES ('mylogger', 'bin.000001', 4);
-
/* #5483
INSERT INTO vn.entryConfig (defaultEntry, mailToNotify, inventorySupplierFk, maxLockTime, defaultSupplierFk)
VALUES(1, NULL, 1, 300, 1);
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index fffdcf7df..60c96abb4 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -1516,23 +1516,23 @@ INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed
(9, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 9', 1, 1, ''),
(10, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 9', 1, 1, '');
-INSERT INTO `bs`.`waste`(`buyer`, `year`, `week`, `family`, `itemFk`, `itemTypeFk`, `saleTotal`, `saleWaste`, `rate`)
+INSERT INTO `bs`.`waste`(`buyerFk`, `year`, `week`, `itemFk`, `itemTypeFk`, `saleTotal`, `saleQuantity`, `saleInternalWaste`, `saleExternalWaste`)
VALUES
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation', 1, 1, '1062', '51', '4.8'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation Colombia', 2, 1, '35074', '687', '2.0'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation Mini', 3, 1, '1777', '13', '0.7'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation Short', 4, 1, '3182', '59', '0.6'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Crisantemo', 5, 1, '1747', '13', '0.7'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Lilium Oriental', 6, 1, '7182', '59', '0.6'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Alstroemeria', 7, 1, '1777', '13', '0.7'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Cymbidium', 1, 1, '4181', '59', '0.6'),
- ('CharlesXavier', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Cymbidium', 2, 1, '7268', '59', '0.6'),
- ('DavidCharlesHaller', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Containers', 2, 1, '-74', '0', '0.0'),
- ('DavidCharlesHaller', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Packagings', 3, 1, '-7', '0', '0.0'),
- ('DavidCharlesHaller', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Freight', 4, 1, '1100', '0', '0.0'),
- ('HankPym', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Funeral Accessories', 5, 1, '848', '-187', '-22.1'),
- ('HankPym', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Miscellaneous Accessories', 6, 1, '186', '0', '0.0'),
- ('HankPym', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 'Adhesives', 7, 1, '277', '0', '0.0');
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 1, 1, '1062', '51', '56.20', '56.20'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 2, 1, '35074', '687', '53.12', '89.69'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 3, 1, '1777', '13', '12.02', '53.12'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 4, 1, '3182', '59', '51', '56.20'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 5, 1, '1747', '13', '53.12', '53.12'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 6, 1, '7182', '59', '51', '53.12'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 7, 1, '1777', '13', '89.69', '89.69'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 8, 1, '4181', '59', '53.12', '53.12'),
+ ('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 9, 1, '7268', '59', '12.02', '56.20'),
+ ('103', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 2, 1, '-74', '0', '51', '89.69'),
+ ('103', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 3, 1, '-7', '0', '12.02', '53.12'),
+ ('103', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 4, 1, '1100', '0', '51', '56.20'),
+ ('103', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 5, 1, '848', '-187', '12.02', '89.69'),
+ ('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'),
+ ('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');
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
diff --git a/db/routines/bs/procedures/waste_addSales.sql b/db/routines/bs/procedures/waste_addSales.sql
index 0ab328b49..3e189d2e6 100644
--- a/db/routines/bs/procedures/waste_addSales.sql
+++ b/db/routines/bs/procedures/waste_addSales.sql
@@ -1,31 +1,50 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`waste_addSales`()
BEGIN
- DECLARE vWeek INT;
- DECLARE vYear INT;
+ DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY;
+ DECLARE vDateTo DATE DEFAULT vDateFrom + INTERVAL 6 DAY;
+
+ CALL cache.last_buy_refresh(FALSE);
- SELECT week, year
- INTO vWeek, vYear
- FROM vn.time
- WHERE dated = util.VN_CURDATE();
-
REPLACE bs.waste
- SELECT *, 100 * mermas / total as porcentaje
- FROM (
- SELECT buyer,
- year,
- week,
- family,
- itemFk,
- itemTypeFk,
- floor(sum(value)) as total,
- floor(sum(IF(typeFk = 'loses', value, 0))) as mermas
- FROM vn.saleValue
- where year = vYear and week = vWeek
-
- GROUP BY family, itemFk
-
- ) sub
- ORDER BY mermas DESC;
+ SELECT YEAR(t.shipped),
+ WEEK(t.shipped, 4),
+ it.workerFk,
+ it.id,
+ s.itemFk,
+ SUM(s.quantity),
+ SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity) `value`,
+ SUM (
+ IF(
+ aw.`type` = 'internal',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ 0
+ )
+ ) internalWaste,
+ SUM (
+ IF(
+ aw.`type` = 'external',
+ (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
+ IF(c.code = 'manaClaim',
+ sc.value * s.quantity,
+ 0
+ )
+ )
+ ) externalWaste
+ FROM vn.sale s
+ JOIN vn.item i ON i.id = s.itemFk
+ JOIN vn.itemType it ON it.id = i.typeFk
+ JOIN vn.ticket t ON t.id = s.ticketFk
+ JOIN vn.address a FORCE INDEX (PRIMARY) ON a.id = t.addressFk
+ LEFT JOIN vn.addressWaste aw ON aw.addressFk = a.id
+ JOIN vn.warehouse w ON w.id = t.warehouseFk
+ JOIN cache.last_buy lb ON lb.item_id = i.id
+ AND lb.warehouse_id = w.id
+ JOIN vn.buy b ON b.id = lb.buy_id
+ LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id
+ LEFT JOIN vn.component c ON c.id = sc.componentFk
+ WHERE t.shipped BETWEEN vDateFrom AND vDateTo
+ AND w.isManaged
+ GROUP BY it.id, i.id;
END$$
DELIMITER ;
diff --git a/db/routines/cache/procedures/last_buy_refresh.sql b/db/routines/cache/procedures/last_buy_refresh.sql
index 49ef4ee5e..555ae0b8d 100644
--- a/db/routines/cache/procedures/last_buy_refresh.sql
+++ b/db/routines/cache/procedures/last_buy_refresh.sql
@@ -30,7 +30,7 @@ proc: BEGIN
SELECT inventoried INTO started FROM vn.config LIMIT 1;
SET ended = util.VN_CURDATE(); -- TIMESTAMPADD(DAY, -1, util.VN_CURDATE());
- CALL vn.buyUltimateFromInterval(NULL, started, ended);
+ CALL vn.buy_getUltimateFromInterval(NULL, NULL, started, ended);
DELETE FROM last_buy;
diff --git a/db/routines/cache/procedures/visible_refresh.sql b/db/routines/cache/procedures/visible_refresh.sql
index 78d23dbfb..a673969d2 100644
--- a/db/routines/cache/procedures/visible_refresh.sql
+++ b/db/routines/cache/procedures/visible_refresh.sql
@@ -20,9 +20,12 @@ proc:BEGIN
CREATE OR REPLACE TEMPORARY TABLE tmp.itemVisible
(PRIMARY KEY (item_id))
ENGINE = MEMORY
- SELECT item_id, amount stock, amount visible
- FROM cache.stock
- WHERE warehouse_id = v_warehouse;
+ SELECT s.item_id, SUM(s.amount) stock, SUM(s.amount) visible
+ FROM stock s
+ JOIN vn.warehouse w ON w.id = s.warehouse_id
+ WHERE (v_warehouse IS NULL OR s.warehouse_id = v_warehouse)
+ AND w.isComparative
+ GROUP BY s.item_id;
-- Calculamos los movimientos confirmados de hoy
CALL vn.item_calcVisible(NULL, v_warehouse);
diff --git a/db/routines/hedera/procedures/order_confirmWithUser.sql b/db/routines/hedera/procedures/order_confirmWithUser.sql
index 9c932aaa1..2b033b704 100644
--- a/db/routines/hedera/procedures/order_confirmWithUser.sql
+++ b/db/routines/hedera/procedures/order_confirmWithUser.sql
@@ -1,59 +1,62 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_confirmWithUser`(vSelf INT, vUserId INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_confirmWithUser`(
+ vSelf INT,
+ vUserFk INT
+)
BEGIN
/**
- * Confirms an order, creating each of its tickets on the corresponding
- * date, store and user.
+ * Confirms an order, creating each of its tickets
+ * on the corresponding date, store and user.
*
* @param vSelf The order identifier
* @param vUser The user identifier
*/
- DECLARE vOk BOOL;
- DECLARE vDone BOOL DEFAULT FALSE;
- DECLARE vWarehouse INT;
+ DECLARE vHasRows BOOL;
+ DECLARE vDone BOOL;
+ DECLARE vWarehouseFk INT;
DECLARE vShipment DATE;
- DECLARE vTicket INT;
+ DECLARE vShipmentDayEnd DATETIME;
+ DECLARE vTicketFk INT;
DECLARE vNotes VARCHAR(255);
- DECLARE vItem INT;
+ DECLARE vItemFk INT;
DECLARE vConcept VARCHAR(30);
DECLARE vAmount INT;
+ DECLARE vAvailable INT;
DECLARE vPrice DECIMAL(10,2);
- DECLARE vSale INT;
- DECLARE vRate INT;
- DECLARE vRowId INT;
+ DECLARE vSaleFk INT;
+ DECLARE vRowFk INT;
DECLARE vPriceFixed DECIMAL(10,2);
- DECLARE vDelivery DATE;
- DECLARE vAddress INT;
- DECLARE vIsConfirmed BOOL;
- DECLARE vClientId INT;
- DECLARE vCompanyId INT;
- DECLARE vAgencyModeId INT;
- DECLARE TICKET_FREE INT DEFAULT 2;
- DECLARE vCalc INT;
- DECLARE vIsLogifloraItem BOOL;
- DECLARE vOldQuantity INT;
- DECLARE vNewQuantity INT;
+ DECLARE vLanded DATE;
+ DECLARE vAddressFk INT;
+ DECLARE vClientFk INT;
+ DECLARE vCompanyFk INT;
+ DECLARE vAgencyModeFk INT;
+ DECLARE vCalcFk INT;
DECLARE vIsTaxDataChecked BOOL;
- DECLARE cDates CURSOR FOR
- SELECT zgs.shipped, r.warehouse_id
+ DECLARE vDates CURSOR FOR
+ SELECT zgs.shipped, r.warehouseFk
FROM `order` o
- JOIN order_row r ON r.order_id = o.id
- LEFT JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = r.warehouse_id
- WHERE o.id = vSelf AND r.amount != 0
- GROUP BY r.warehouse_id;
+ JOIN orderRow r ON r.orderFk = o.id
+ LEFT JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = r.warehouseFk
+ WHERE o.id = vSelf
+ AND r.amount
+ GROUP BY r.warehouseFk;
- DECLARE cRows CURSOR FOR
- SELECT r.id, r.item_id, i.name, r.amount, r.price, r.rate, i.isFloramondo
- FROM order_row r
- JOIN vn.item i ON i.id = r.item_id
- WHERE r.amount != 0
- AND r.warehouse_id = vWarehouse
- AND r.order_id = vSelf
+ DECLARE vRows CURSOR FOR
+ SELECT r.id,
+ r.itemFk,
+ i.name,
+ r.amount,
+ r.price
+ FROM orderRow r
+ JOIN vn.item i ON i.id = r.itemFk
+ WHERE r.amount
+ AND r.warehouseFk = vWarehouseFk
+ AND r.orderFk = vSelf
ORDER BY r.rate DESC;
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
@@ -62,26 +65,36 @@ BEGIN
END;
-- Carga los datos del pedido
- SELECT o.date_send, o.address_id, o.note, a.clientFk,
- o.company_id, o.agency_id, c.isTaxDataChecked
- INTO vDelivery, vAddress, vNotes, vClientId,
- vCompanyId, vAgencyModeId, vIsTaxDataChecked
- FROM hedera.`order` o
+ SELECT o.date_send,
+ o.address_id,
+ o.note,
+ a.clientFk,
+ o.company_id,
+ o.agency_id,
+ c.isTaxDataChecked
+ INTO vLanded,
+ vAddressFk,
+ vNotes,
+ vClientFk,
+ vCompanyFk,
+ vAgencyModeFk,
+ vIsTaxDataChecked
+ FROM `order` o
JOIN vn.address a ON a.id = o.address_id
JOIN vn.client c ON c.id = a.clientFk
WHERE o.id = vSelf;
-- Verifica si el cliente tiene los datos comprobados
IF NOT vIsTaxDataChecked THEN
- CALL util.throw ('clientNotVerified');
+ CALL util.throw('clientNotVerified');
END IF;
-- Carga las fechas de salida de cada almacen
- CALL vn.zone_getShipped (vDelivery, vAddress, vAgencyModeId, FALSE);
+ CALL vn.zone_getShipped(vLanded, vAddressFk, vAgencyModeFk, FALSE);
-- Trabajador que realiza la accion
- IF vUserId IS NULL THEN
- SELECT employeeFk INTO vUserId FROM orderConfig;
+ IF vUserFk IS NULL THEN
+ SELECT employeeFk INTO vUserFk FROM orderConfig;
END IF;
START TRANSACTION;
@@ -89,207 +102,188 @@ BEGIN
CALL order_checkEditable(vSelf);
-- Check order is not empty
+ SELECT COUNT(*) > 0 INTO vHasRows
+ FROM orderRow
+ WHERE orderFk = vSelf
+ AND amount > 0;
- SELECT COUNT(*) > 0 INTO vOk
- FROM order_row WHERE order_id = vSelf AND amount > 0;
-
- IF NOT vOk THEN
- CALL util.throw ('ORDER_EMPTY');
+ IF NOT vHasRows THEN
+ CALL util.throw('ORDER_EMPTY');
END IF;
-- Crea los tickets del pedido
-
- OPEN cDates;
-
- lDates:
- LOOP
- SET vTicket = NULL;
+ OPEN vDates;
+ lDates: LOOP
+ SET vTicketFk = NULL;
SET vDone = FALSE;
- FETCH cDates INTO vShipment, vWarehouse;
+ FETCH vDates INTO vShipment, vWarehouseFk;
IF vDone THEN
LEAVE lDates;
END IF;
- -- Busca un ticket existente que coincida con los parametros
- WITH tPrevia AS
- (SELECT DISTINCT s.ticketFk
+ SET vShipmentDayEnd = util.dayEnd(vShipment);
+
+ -- Busca un ticket libre disponible
+ WITH tPrevia AS (
+ SELECT DISTINCT s.ticketFk
FROM vn.sale s
JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
JOIN vn.ticket t ON t.id = s.ticketFk
- WHERE t.shipped BETWEEN vShipment AND util.dayend(vShipment)
- )
- SELECT t.id INTO vTicket
+ WHERE t.shipped BETWEEN vShipment AND vShipmentDayEnd
+ )
+ SELECT t.id INTO vTicketFk
FROM vn.ticket t
JOIN vn.alertLevel al ON al.code = 'FREE'
LEFT JOIN tPrevia tp ON tp.ticketFk = t.id
- LEFT JOIN vn.ticketState tls on tls.ticketFk = t.id
- JOIN hedera.`order` o
- ON o.address_id = t.addressFk
- AND vWarehouse = t.warehouseFk
- AND o.date_send = t.landed
- AND DATE(t.shipped) = vShipment
+ LEFT JOIN vn.ticketState tls ON tls.ticketFk = t.id
+ JOIN hedera.`order` o ON o.address_id = t.addressFk
+ AND t.shipped BETWEEN vShipment AND vShipmentDayEnd
+ AND t.warehouseFk = vWarehouseFk
+ AND o.date_send = t.landed
WHERE o.id = vSelf
AND t.refFk IS NULL
AND tp.ticketFk IS NULL
AND (tls.alertLevel IS NULL OR tls.alertLevel = al.id)
LIMIT 1;
+ -- Comprobamos si hay un ticket de previa disponible
+ IF vTicketFk IS NULL THEN
+ WITH tItemPackingTypeOrder AS (
+ SELECT GROUP_CONCAT(
+ DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk
+ ) distinctItemPackingTypes,
+ o.address_id
+ FROM vn.item i
+ JOIN hedera.orderRow oro ON oro.itemFk = i.id
+ JOIN hedera.`order` o ON o.id = oro.orderFk
+ WHERE oro.orderFk = vSelf
+ ),
+ tItemPackingTypeTicket AS (
+ SELECT t.id,
+ GROUP_CONCAT(
+ DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk
+ ) distinctItemPackingTypes
+ FROM vn.ticket t
+ JOIN vn.ticketState tls ON tls.ticketFk = t.id
+ JOIN vn.alertLevel al ON al.id = tls.alertLevel
+ JOIN vn.sale s ON s.ticketFk = t.id
+ JOIN vn.item i ON i.id = s.itemFk
+ JOIN tItemPackingTypeOrder ipto
+ WHERE t.shipped BETWEEN vShipment AND vShipmentDayEnd
+ AND t.refFk IS NULL
+ AND t.warehouseFk = vWarehouseFk
+ AND t.addressFk = ipto.address_id
+ AND al.code = 'ON_PREVIOUS'
+ GROUP BY t.id
+ )
+ SELECT iptt.id INTO vTicketFk
+ FROM tItemPackingTypeTicket iptt
+ JOIN tItemPackingTypeOrder ipto
+ WHERE INSTR(iptt.distinctItemPackingTypes, ipto.distinctItemPackingTypes)
+ LIMIT 1;
+ END IF;
+
-- Crea el ticket en el caso de no existir uno adecuado
- IF vTicket IS NULL
- THEN
-
+ IF vTicketFk IS NULL THEN
SET vShipment = IFNULL(vShipment, util.VN_CURDATE());
-
CALL vn.ticket_add(
- vClientId,
+ vClientFk,
vShipment,
- vWarehouse,
- vCompanyId,
- vAddress,
- vAgencyModeId,
+ vWarehouseFk,
+ vCompanyFk,
+ vAddressFk,
+ vAgencyModeFk,
NULL,
- vDelivery,
- vUserId,
+ vLanded,
+ vUserFk,
TRUE,
- vTicket
+ vTicketFk
);
ELSE
INSERT INTO vn.ticketTracking
- SET ticketFk = vTicket,
- userFk = vUserId,
- stateFk = TICKET_FREE;
+ SET ticketFk = vTicketFk,
+ userFk = vUserFk,
+ stateFk = (SELECT id FROM vn.state WHERE code = 'FREE');
END IF;
INSERT IGNORE INTO vn.orderTicket
SET orderFk = vSelf,
- ticketFk = vTicket;
+ ticketFk = vTicketFk;
-- Añade las notas
-
- IF vNotes IS NOT NULL AND vNotes != ''
- THEN
- INSERT INTO vn.ticketObservation SET
- ticketFk = vTicket,
- observationTypeFk = 4 /* salesperson */ ,
+ IF vNotes IS NOT NULL AND vNotes <> '' THEN
+ INSERT INTO vn.ticketObservation
+ SET ticketFk = vTicketFk,
+ observationTypeFk = (SELECT id FROM vn.observationType WHERE code = 'salesPerson'),
`description` = vNotes
ON DUPLICATE KEY UPDATE
`description` = CONCAT(VALUES(`description`),'. ', `description`);
END IF;
-- Añade los movimientos y sus componentes
-
- OPEN cRows;
-
+ OPEN vRows;
lRows: LOOP
+ SET vSaleFk = NULL;
SET vDone = FALSE;
- FETCH cRows INTO vRowId, vItem, vConcept, vAmount, vPrice, vRate, vIsLogifloraItem;
+ FETCH vRows INTO vRowFk, vItemFk, vConcept, vAmount, vPrice;
IF vDone THEN
LEAVE lRows;
END IF;
- SET vSale = NULL;
-
- SELECT s.id, s.quantity INTO vSale, vOldQuantity
+ SELECT s.id INTO vSaleFk
FROM vn.sale s
- WHERE ticketFk = vTicket
+ WHERE ticketFk = vTicketFk
AND price = vPrice
- AND itemFk = vItem
+ AND itemFk = vItemFk
AND discount = 0
LIMIT 1;
- IF vSale THEN
+ IF vSaleFk THEN
UPDATE vn.sale
SET quantity = quantity + vAmount,
originalQuantity = quantity
- WHERE id = vSale;
-
- SELECT s.quantity INTO vNewQuantity
- FROM vn.sale s
- WHERE id = vSale;
+ WHERE id = vSaleFk;
ELSE
-- Obtiene el coste
SELECT SUM(rc.`price`) valueSum INTO vPriceFixed
FROM orderRowComponent rc
JOIN vn.component c ON c.id = rc.componentFk
- JOIN vn.componentType ct ON ct.id = c.typeFk AND ct.isBase
- WHERE rc.rowFk = vRowId;
+ JOIN vn.componentType ct ON ct.id = c.typeFk
+ AND ct.isBase
+ WHERE rc.rowFk = vRowFk;
INSERT INTO vn.sale
- SET itemFk = vItem,
- ticketFk = vTicket,
+ SET itemFk = vItemFk,
+ ticketFk = vTicketFk,
concept = vConcept,
quantity = vAmount,
price = vPrice,
priceFixed = vPriceFixed,
isPriceFixed = TRUE;
- SET vSale = LAST_INSERT_ID();
+ SET vSaleFk = LAST_INSERT_ID();
- INSERT INTO vn.saleComponent
- (saleFk, componentFk, `value`)
- SELECT vSale, rc.componentFk, rc.price
+ INSERT INTO vn.saleComponent (saleFk, componentFk, `value`)
+ SELECT vSaleFk, rc.componentFk, rc.price
FROM orderRowComponent rc
JOIN vn.component c ON c.id = rc.componentFk
- WHERE rc.rowFk = vRowId
- GROUP BY vSale, rc.componentFk;
+ WHERE rc.rowFk = vRowFk
+ GROUP BY vSaleFk, rc.componentFk;
END IF;
- UPDATE order_row SET Id_Movimiento = vSale
- WHERE id = vRowId;
-
- -- Inserta en putOrder si la compra es de Floramondo
- IF vIsLogifloraItem THEN
- CALL cache.availableNoRaids_refresh(vCalc,FALSE,vWarehouse,vShipment);
-
- SET @available := 0;
-
- SELECT GREATEST(0,available) INTO @available
- FROM cache.availableNoRaids
- WHERE calc_id = vCalc
- AND item_id = vItem;
-
- UPDATE cache.availableNoRaids
- SET available = GREATEST(0,available - vAmount)
- WHERE item_id = vItem
- AND calc_id = vCalc;
-
- INSERT INTO edi.putOrder (
- deliveryInformationID,
- supplyResponseId,
- quantity ,
- EndUserPartyId,
- EndUserPartyGLN,
- FHAdminNumber,
- saleFk
- )
- SELECT di.ID,
- i.supplyResponseFk,
- CEIL((vAmount - @available)/ sr.NumberOfItemsPerCask),
- o.address_id ,
- vClientId,
- IFNULL(ca.fhAdminNumber, fhc.defaultAdminNumber),
- vSale
- FROM edi.deliveryInformation di
- JOIN vn.item i ON i.supplyResponseFk = di.supplyResponseID
- JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
- LEFT JOIN edi.clientFHAdminNumber ca ON ca.clientFk = vClientId
- JOIN edi.floraHollandConfig fhc
- JOIN hedera.`order` o ON o.id = vSelf
- WHERE i.id = vItem
- AND di.LatestOrderDateTime > util.VN_NOW()
- AND vAmount > @available
- LIMIT 1;
- END IF;
+ UPDATE orderRow
+ SET saleFk = vSaleFk
+ WHERE id = vRowFk;
END LOOP;
-
- CLOSE cRows;
+ CLOSE vRows;
END LOOP;
+ CLOSE vDates;
- CLOSE cDates;
-
- UPDATE `order` SET confirmed = TRUE, confirm_date = util.VN_NOW()
+ UPDATE `order`
+ SET confirmed = TRUE,
+ confirm_date = util.VN_NOW()
WHERE id = vSelf;
COMMIT;
diff --git a/db/routines/salix/triggers/ACL_afterDelete.sql b/db/routines/salix/triggers/ACL_afterDelete.sql
new file mode 100644
index 000000000..18689dfb0
--- /dev/null
+++ b/db/routines/salix/triggers/ACL_afterDelete.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `salix`.`ACL_afterDelete`
+ AFTER DELETE ON `ACL`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO ACL
+ SET `action` = 'delete',
+ `changedModel` = 'Acl',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/salix/triggers/ACL_beforeInsert.sql b/db/routines/salix/triggers/ACL_beforeInsert.sql
new file mode 100644
index 000000000..94fb51ada
--- /dev/null
+++ b/db/routines/salix/triggers/ACL_beforeInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `salix`.`ACL_beforeInsert`
+ BEFORE INSERT ON `ACL`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/salix/triggers/ACL_beforeUpdate.sql b/db/routines/salix/triggers/ACL_beforeUpdate.sql
new file mode 100644
index 000000000..b214fc9f6
--- /dev/null
+++ b/db/routines/salix/triggers/ACL_beforeUpdate.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `salix`.`ACL_beforeUpdate`
+ BEFORE UPDATE ON `ACL`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/events/travel_setDelivered.sql b/db/routines/vn/events/travel_setDelivered.sql
new file mode 100644
index 000000000..769ee9d24
--- /dev/null
+++ b/db/routines/vn/events/travel_setDelivered.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`travel_setDelivered`
+ ON SCHEDULE EVERY 1 DAY
+ STARTS '2024-07-12 00:10:00.000'
+ ON COMPLETION PRESERVE
+ ENABLE
+DO BEGIN
+ UPDATE travel t
+ SET t.isDelivered = TRUE
+ WHERE t.shipped < util.VN_CURDATE();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/available_traslate.sql b/db/routines/vn/procedures/available_traslate.sql
index d33a8e10e..e4ba13d79 100644
--- a/db/routines/vn/procedures/available_traslate.sql
+++ b/db/routines/vn/procedures/available_traslate.sql
@@ -47,7 +47,7 @@ proc: BEGIN
-- Tabla con el ultimo dia de last_buy para cada producto
-- que hace un replace de la anterior.
- CALL buyUltimate(vWarehouseShipment, util.VN_CURDATE());
+ CALL buy_getUltimate (NULL, vWarehouseShipment, util.VN_CURDATE());
INSERT INTO tItemRange
SELECT t.itemFk, tr.landed
diff --git a/db/routines/vn/procedures/buyUltimate.sql b/db/routines/vn/procedures/buyUltimate.sql
index 98b16cbc0..e743b8c90 100644
--- a/db/routines/vn/procedures/buyUltimate.sql
+++ b/db/routines/vn/procedures/buyUltimate.sql
@@ -5,39 +5,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buyUltimate`(
)
BEGIN
/**
- * Calcula las últimas compras realizadas hasta una fecha
+ * @deprecated Usar buy_getUltimate
+ * Calcula las últimas compras realizadas hasta una fecha.
*
+ * @param vItemFk Id del artículo
* @param vWarehouseFk Id del almacén
* @param vDated Compras hasta fecha
* @return tmp.buyUltimate
*/
- CALL cache.last_buy_refresh (FALSE);
-
- DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimate;
- CREATE TEMPORARY TABLE tmp.buyUltimate
- (PRIMARY KEY (itemFk, warehouseFk),
- INDEX(itemFk))
- ENGINE = MEMORY
- SELECT item_id itemFk, buy_id buyFk, warehouse_id warehouseFk, landing
- FROM cache.last_buy
- WHERE warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL;
-
- IF vDated >= util.VN_CURDATE() THEN
- CALL buyUltimateFromInterval(vWarehouseFk, util.VN_CURDATE(), vDated);
-
- REPLACE INTO tmp.buyUltimate
- SELECT itemFk, buyFk, warehouseFk, landed landing
- FROM tmp.buyUltimateFromInterval
- WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
- AND landed <= vDated
- AND NOT isIgnored;
-
- INSERT IGNORE INTO tmp.buyUltimate
- SELECT itemFk, buyFk, warehouseFk, landed landing
- FROM tmp.buyUltimateFromInterval
- WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
- AND landed > vDated
- ORDER BY isIgnored = FALSE DESC;
- END IF;
+ CALL buy_getUltimate(NULL, vWarehouseFk, vDated);
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/buyUltimateFromInterval.sql b/db/routines/vn/procedures/buyUltimateFromInterval.sql
index 5879b58e1..acb6282de 100644
--- a/db/routines/vn/procedures/buyUltimateFromInterval.sql
+++ b/db/routines/vn/procedures/buyUltimateFromInterval.sql
@@ -6,6 +6,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buyUltimateFromInte
)
BEGIN
/**
+ * @deprecated Usar buy_getUltimateFromInterval
* Calcula las últimas compras realizadas
* desde un rango de fechas.
*
@@ -14,153 +15,6 @@ BEGIN
* @param vEnded Fecha fin
* @return tmp.buyUltimateFromInterval
*/
- IF vEnded IS NULL THEN
- SET vEnded = vStarted;
- END IF;
-
- IF vEnded < vStarted THEN
- SET vStarted = TIMESTAMPADD(MONTH, -1, vEnded);
- END IF;
-
- -- Item
- DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimateFromInterval;
- CREATE TEMPORARY TABLE tmp.buyUltimateFromInterval
- (PRIMARY KEY (itemFk, warehouseFk),
- INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
- ENGINE = MEMORY
- SELECT itemFk,
- warehouseFk,
- buyFk,
- landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
-
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT itemFk,
- warehouseFk,
- buyFk,
- landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed > vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- AND NOT b.isIgnored
- ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT itemFk,
- warehouseFk,
- buyFk,
- landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.quantity = 0
- ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
-
- -- ItemOriginal
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT itemFk,
- warehouseFk,
- buyFk,
- landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- itemOriginalFk,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- AND NOT b.isIgnored
- AND b.quantity > 0
- AND itemOriginalFk
- ORDER BY t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT itemFk,
- warehouseFk,
- buyFk,
- landed,
- isIgnored
- FROM (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed > vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.price2 > 0
- AND NOT b.isIgnored
- AND itemOriginalFk
- ORDER BY t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
-
- INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
- SELECT itemFk,
- warehouseFk,
- buyFk,
- landed,
- isIgnored
- FROM
- (SELECT b.itemFk,
- t.warehouseInFk warehouseFk,
- b.id buyFk,
- t.landed,
- b.isIgnored
- FROM buy b
- JOIN entry e ON e.id = b.entryFk
- JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vStarted AND vEnded
- AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND b.quantity = 0
- AND itemOriginalFk
- ORDER BY t.landed DESC, b.id DESC
- LIMIT 10000000000000000000) sub
- GROUP BY itemFk, warehouseFk;
+ CALL vn.buy_getUltimateFromInterval(NULL, vWarehouseFk, vStarted, vEnded);
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/buy_getUltimate.sql b/db/routines/vn/procedures/buy_getUltimate.sql
new file mode 100644
index 000000000..023e81774
--- /dev/null
+++ b/db/routines/vn/procedures/buy_getUltimate.sql
@@ -0,0 +1,47 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_getUltimate`(
+ vItemFk INT,
+ vWarehouseFk SMALLINT,
+ vDated DATE
+)
+BEGIN
+/**
+ * Calcula las últimas compras realizadas hasta una fecha.
+ *
+ * @param vItemFk Id del artículo
+ * @param vWarehouseFk Id del almacén
+ * @param vDated Compras hasta fecha
+ * @return tmp.buyUltimate
+ */
+ CALL cache.last_buy_refresh(FALSE);
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.buyUltimate
+ (PRIMARY KEY (itemFk, warehouseFk),
+ INDEX(itemFk))
+ ENGINE = MEMORY
+ SELECT item_id itemFk, buy_id buyFk, warehouse_id warehouseFk, landing
+ FROM cache.last_buy
+ WHERE (warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL)
+ AND (item_id = vItemFk OR vItemFk IS NULL);
+
+ IF vDated >= util.VN_CURDATE() THEN
+ CALL buy_getUltimateFromInterval(vItemFk, vWarehouseFk, util.VN_CURDATE(), vDated);
+
+ REPLACE INTO tmp.buyUltimate
+ SELECT itemFk, buyFk, warehouseFk, landed landing
+ FROM tmp.buyUltimateFromInterval
+ WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
+ AND (itemFk = vItemFk OR vItemFk IS NULL)
+ AND landed <= vDated
+ AND NOT isIgnored;
+
+ INSERT IGNORE INTO tmp.buyUltimate
+ SELECT itemFk, buyFk, warehouseFk, landed landing
+ FROM tmp.buyUltimateFromInterval
+ WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
+ AND (itemFk = vItemFk OR vItemFk IS NULL)
+ AND landed > vDated
+ ORDER BY isIgnored = FALSE DESC;
+ END IF;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/buy_getUltimateFromInterval.sql b/db/routines/vn/procedures/buy_getUltimateFromInterval.sql
new file mode 100644
index 000000000..2115beb95
--- /dev/null
+++ b/db/routines/vn/procedures/buy_getUltimateFromInterval.sql
@@ -0,0 +1,175 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_getUltimateFromInterval`(
+ vItemFk INT,
+ vWarehouseFk SMALLINT,
+ vStarted DATE,
+ vEnded DATE
+)
+BEGIN
+/**
+ * Calcula las últimas compras realizadas
+ * desde un rango de fechas.
+ *
+ * @param vItemFk Id del artículo
+ * @param vWarehouseFk Id del almacén si es NULL se actualizan todos
+ * @param vStarted Fecha inicial
+ * @param vEnded Fecha fin
+ * @return tmp.buyUltimateFromInterval
+ */
+ IF vEnded IS NULL THEN
+ SET vEnded = vStarted;
+ END IF;
+
+ IF vEnded < vStarted THEN
+ SET vStarted = vEnded - INTERVAL 1 MONTH;
+ END IF;
+
+ -- Item
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.buyUltimateFromInterval
+ (PRIMARY KEY (itemFk, warehouseFk),
+ INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
+ ENGINE = MEMORY
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed > vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ AND NOT b.isIgnored
+ ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.quantity = 0
+ ORDER BY NOT b.isIgnored DESC, t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+ -- ItemOriginal
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ itemOriginalFk,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ AND NOT b.isIgnored
+ AND b.quantity > 0
+ AND itemOriginalFk
+ ORDER BY t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed > vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.price2 > 0
+ AND NOT b.isIgnored
+ AND itemOriginalFk
+ ORDER BY t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+
+ INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed, isIgnored)
+ SELECT itemFk,
+ warehouseFk,
+ buyFk,
+ landed,
+ isIgnored
+ FROM
+ (SELECT b.itemFk,
+ t.warehouseInFk warehouseFk,
+ b.id buyFk,
+ t.landed,
+ b.isIgnored
+ FROM buy b
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel t ON t.id = e.travelFk
+ WHERE t.landed BETWEEN vStarted AND vEnded
+ AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
+ AND (b.itemFk = vItemFk OR vItemFk IS NULL)
+ AND b.quantity = 0
+ AND itemOriginalFk
+ ORDER BY t.landed DESC, b.id DESC
+ LIMIT 10000000000000000000) sub
+ GROUP BY itemFk, warehouseFk;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/buy_updateGrouping.sql b/db/routines/vn/procedures/buy_updateGrouping.sql
index fb7adc0a3..e589fbd2a 100644
--- a/db/routines/vn/procedures/buy_updateGrouping.sql
+++ b/db/routines/vn/procedures/buy_updateGrouping.sql
@@ -1,5 +1,9 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_updateGrouping`(vWarehouseFk INT, vItemFk INT, vGrouping INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_updateGrouping`(
+ vWarehouseFk INT,
+ vItemFk INT,
+ vGrouping INT
+)
BEGIN
/**
* Actualiza el grouping de las últimas compras de un artículo
@@ -8,9 +12,9 @@ BEGIN
* @param vItemFk Id del Artículo
* @param vGrouping Cantidad de grouping
*/
- CALL vn.buyUltimate(vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, util.VN_CURDATE());
- UPDATE vn.buy b
+ UPDATE buy b
JOIN tmp.buyUltimate bu ON b.id = bu.buyFk
SET b.`grouping` = vGrouping
WHERE bu.warehouseFk = vWarehouseFk
diff --git a/db/routines/vn/procedures/buy_updatePacking.sql b/db/routines/vn/procedures/buy_updatePacking.sql
index d86edc98f..0ee9d4c80 100644
--- a/db/routines/vn/procedures/buy_updatePacking.sql
+++ b/db/routines/vn/procedures/buy_updatePacking.sql
@@ -8,7 +8,7 @@ BEGIN
* @param vItemFk id del item
* @param vPacking packing a actualizar
*/
- CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, util.VN_CURDATE());
UPDATE buy b
JOIN tmp.buyUltimate bu ON b.id = bu.buyFk
diff --git a/db/routines/vn/procedures/catalog_calculate.sql b/db/routines/vn/procedures/catalog_calculate.sql
index 963e33507..2a0157881 100644
--- a/db/routines/vn/procedures/catalog_calculate.sql
+++ b/db/routines/vn/procedures/catalog_calculate.sql
@@ -29,7 +29,7 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- CALL vn.zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, vShowExpiredZones);
+ CALL zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, vShowExpiredZones);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot(
@@ -72,9 +72,9 @@ BEGIN
LEAVE l;
END IF;
- CALL `cache`.available_refresh (vAvailableCalc, FALSE, vWarehouseFk, vShipped);
- CALL `cache`.availableNoRaids_refresh (vAvailableNoRaidsCalc, FALSE, vWarehouseFk, vShipped);
- CALL vn.buyUltimate(vWarehouseFk, vShipped);
+ CALL `cache`.available_refresh(vAvailableCalc, FALSE, vWarehouseFk, vShipped);
+ CALL `cache`.availableNoRaids_refresh(vAvailableNoRaidsCalc, FALSE, vWarehouseFk, vShipped);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vShipped);
INSERT INTO tmp.ticketLot (warehouseFk, itemFk, available, buyFk, zoneFk)
SELECT vWarehouseFk,
@@ -86,17 +86,17 @@ BEGIN
LEFT JOIN cache.availableNoRaids anr ON anr.item_id = a.item_id
AND anr.calc_id = vAvailableNoRaidsCalc
JOIN tmp.item i ON i.itemFk = a.item_id
- JOIN vn.item it ON it.id = i.itemFk
- JOIN vn.`zone` z ON z.id = vZoneFk
+ JOIN item it ON it.id = i.itemFk
+ JOIN `zone` z ON z.id = vZoneFk
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = a.item_id
LEFT JOIN edi.supplyResponse sr ON sr.ID = it.supplyResponseFk
LEFT JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
LEFT JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID
LEFT JOIN (SELECT isVNHSupplier, isEarlyBird, TRUE AS itemAllowed
- FROM vn.addressFilter af
+ FROM addressFilter af
JOIN (SELECT ad.provinceFk, p.countryFk, ad.isLogifloraAllowed
- FROM vn.address ad
- JOIN vn.province p ON p.id = ad.provinceFk
+ FROM address ad
+ JOIN province p ON p.id = ad.provinceFk
WHERE ad.id = vAddressFk
) sub2 ON sub2.provinceFk <=> IFNULL(af.provinceFk, sub2.provinceFk)
AND sub2.countryFk <=> IFNULL(af.countryFk, sub2.countryFk)
@@ -108,18 +108,18 @@ BEGIN
OR ISNULL(af.afterDated))
) sub ON sub.isVNHSupplier = v.isVNHSupplier
AND (sub.isEarlyBird = mp.isEarlyBird OR ISNULL(sub.isEarlyBird))
- JOIN vn.agencyMode am ON am.id = vAgencyModeFk
- JOIN vn.agency ag ON ag.id = am.agencyFk
- JOIN vn.itemType itt ON itt.id = it.typeFk
- JOIN vn.itemCategory itc on itc.id = itt.categoryFk
- JOIN vn.address ad ON ad.id = vAddressFk
- LEFT JOIN vn.clientItemType cit
+ JOIN agencyMode am ON am.id = vAgencyModeFk
+ JOIN agency ag ON ag.id = am.agencyFk
+ JOIN itemType itt ON itt.id = it.typeFk
+ JOIN itemCategory itc on itc.id = itt.categoryFk
+ JOIN address ad ON ad.id = vAddressFk
+ LEFT JOIN clientItemType cit
ON cit.clientFk = ad.clientFk
AND cit.itemTypeFk = itt.id
- LEFT JOIN vn.zoneItemType zit
+ LEFT JOIN zoneItemType zit
ON zit.zoneFk = vZoneFk
AND zit.itemTypeFk = itt.id
- LEFT JOIN vn.agencyModeItemType ait
+ LEFT JOIN agencyModeItemType ait
ON ait.agencyModeFk = vAgencyModeFk
AND ait.itemTypeFk = itt.id
WHERE a.calc_id = vAvailableCalc
@@ -133,7 +133,7 @@ BEGIN
DROP TEMPORARY TABLE tmp.buyUltimate;
- CALL vn.catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
+ CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
INSERT INTO tmp.ticketCalculateItem(
itemFk,
diff --git a/db/routines/vn/procedures/clean.sql b/db/routines/vn/procedures/clean.sql
index 6645b9cb2..f479d5b3e 100644
--- a/db/routines/vn/procedures/clean.sql
+++ b/db/routines/vn/procedures/clean.sql
@@ -28,6 +28,10 @@ BEGIN
DELETE FROM ticketDown WHERE created < util.yesterday();
DELETE FROM entryLog WHERE creationDate < v2Months;
DELETE IGNORE FROM expedition WHERE created < v26Months;
+ DELETE cs
+ FROM sms s
+ JOIN clientSms cs ON cs.smsFk = s.id
+ WHERE s.created < v18Months;
DELETE FROM sms WHERE created < v18Months;
DELETE FROM saleTracking WHERE created < v1Years;
DELETE FROM productionError WHERE dated < v1Years;
diff --git a/db/routines/vn/procedures/collection_addWithReservation.sql b/db/routines/vn/procedures/collection_addWithReservation.sql
index e3f4eb8d2..18a3e8ab2 100644
--- a/db/routines/vn/procedures/collection_addWithReservation.sql
+++ b/db/routines/vn/procedures/collection_addWithReservation.sql
@@ -3,7 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_addWithR
vItemFk INT,
vQuantity INT,
vTicketFk INT,
- vSaleGroupFk INT
+ vSaleGroupFk INT,
+ vSectorFk INT
)
BEGIN
/**
@@ -67,7 +68,7 @@ BEGIN
SELECT LAST_INSERT_ID() INTO vSaleFk;
CALL sale_calculateComponent(vSaleFk, NULL);
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
IF NOT EXISTS (SELECT TRUE FROM itemShelvingSale WHERE saleFk = vSaleFk LIMIT 1) THEN
SET vHasThrow = TRUE;
diff --git a/db/routines/vn/procedures/duaInvoiceInBooking.sql b/db/routines/vn/procedures/duaInvoiceInBooking.sql
index 10c0714e5..4570de332 100644
--- a/db/routines/vn/procedures/duaInvoiceInBooking.sql
+++ b/db/routines/vn/procedures/duaInvoiceInBooking.sql
@@ -12,6 +12,7 @@ BEGIN
DECLARE vInvoiceFk INT;
DECLARE vBookEntry INT;
DECLARE vFiscalYear INT;
+ DECLARE vIncorrectInvoiceInDueDay INT;
DECLARE vInvoicesIn CURSOR FOR
SELECT DISTINCT e.invoiceInFk
@@ -24,6 +25,19 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ SELECT GROUP_CONCAT(ii.id) INTO vIncorrectInvoiceInDueDay
+ FROM invoiceInDueDay iidd
+ JOIN invoiceIn ii ON iidd.invoiceInFk = ii.id
+ JOIN `entry` e ON e.invoiceInFk = ii.id
+ JOIN duaEntry de ON de.entryFk = e.id
+ JOIN invoiceInConfig iic
+ WHERE de.duaFk = vDuaFk
+ AND iidd.dueDated < util.VN_CURDATE() + INTERVAL iic.dueDateMarginDays DAY;
+
+ IF vIncorrectInvoiceInDueDay THEN
+ CALL util.throw(CONCAT('Incorrect due date, invoice: ', vIncorrectInvoiceInDueDay));
+ END IF;
+
UPDATE invoiceIn ii
JOIN entry e ON e.invoiceInFk = ii.id
JOIN duaEntry de ON de.entryFk = e.id
diff --git a/db/routines/vn/procedures/entry_getTransfer.sql b/db/routines/vn/procedures/entry_getTransfer.sql
index 165c87dc7..5bf049b6e 100644
--- a/db/routines/vn/procedures/entry_getTransfer.sql
+++ b/db/routines/vn/procedures/entry_getTransfer.sql
@@ -97,7 +97,7 @@ BEGIN
FROM tmp.itemList;
END IF;
- CALL buyUltimateFromInterval(vWarehouseIn,vInventoryDate, vDateLanded);
+ CALL buy_getUltimateFromInterval(NULL, vWarehouseIn,vInventoryDate, vDateLanded);
CREATE OR REPLACE TEMPORARY TABLE tTransfer
ENGINE = MEMORY
diff --git a/db/routines/vn/procedures/entry_splitByShelving.sql b/db/routines/vn/procedures/entry_splitByShelving.sql
index eb07c12b7..f46278e5a 100644
--- a/db/routines/vn/procedures/entry_splitByShelving.sql
+++ b/db/routines/vn/procedures/entry_splitByShelving.sql
@@ -110,7 +110,7 @@ BEGIN
UPDATE itemShelving
SET isSplit = TRUE
- WHERE shelvingFk = vShelvingFk;
+ WHERE shelvingFk = vShelvingFk COLLATE utf8_general_ci;
END LOOP;
CLOSE cur;
END$$
diff --git a/db/routines/vn/procedures/expeditionPallet_build.sql b/db/routines/vn/procedures/expeditionPallet_build.sql
index bea56eae6..e917c5eb2 100644
--- a/db/routines/vn/procedures/expeditionPallet_build.sql
+++ b/db/routines/vn/procedures/expeditionPallet_build.sql
@@ -1,5 +1,10 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`expeditionPallet_build`(IN vExpeditions JSON, IN vArcId INT, IN vWorkerFk INT, OUT vPalletFk INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`expeditionPallet_build`(
+ vExpeditions JSON,
+ vArcId INT,
+ vWorkerFk INT,
+ OUT vPalletFk INT
+)
BEGIN
/** Construye un pallet de expediciones.
*
@@ -7,28 +12,22 @@ BEGIN
* en cuyo caso actualiza ese pallet.
*
* @param vExpeditions JSON_ARRAY con esta estructura [exp1, exp2, exp3, ...]
- * @param vArcId INT Identificador de vn.arcRead
- * @param vWorkerFk INT Identificador de vn.worker
- * @param out vPalletFk Identificador de vn.expeditionPallet
+ * @param vArcId INT Identificador de arcRead
+ * @param vWorkerFk INT Identificador de worker
+ * @param out vPalletFk Identificador de expeditionPallet
*/
DECLARE vCounter INT;
DECLARE vExpeditionFk INT;
DECLARE vTruckFk INT;
DECLARE vPrinterFk INT;
+ DECLARE vExpeditionStateTypeFk INT;
- DROP TEMPORARY TABLE IF EXISTS tExpedition;
- CREATE TEMPORARY TABLE tExpedition
- SELECT
- e.id expeditionFk,
- r.id routeFk,
- ep.id palletFk
- FROM
- vn.expedition e,
- vn.route r,
- vn.expeditionPallet ep
- LIMIT 0;
-
- ALTER TABLE tExpedition ADD PRIMARY KEY (expeditionFk);
+ CREATE OR REPLACE TEMPORARY TABLE tExpedition (
+ expeditionFk INT,
+ routeFk INT,
+ palletFk INT,
+ PRIMARY KEY (expeditionFk)
+ );
SET vCounter = JSON_LENGTH(vExpeditions);
@@ -39,53 +38,58 @@ BEGIN
INSERT IGNORE INTO tExpedition(expeditionFk, routeFk, palletFk)
SELECT vExpeditionFk, t.routeFk, es.palletFk
- FROM vn.expedition e
- LEFT JOIN vn.ticket t ON t.id = e.ticketFk
- LEFT JOIN vn.expeditionScan es ON es.expeditionFk = e.id
+ FROM expedition e
+ LEFT JOIN ticket t ON t.id = e.ticketFk
+ LEFT JOIN expeditionScan es ON es.expeditionFk = e.id
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
+ SELECT palletFk, count(*) n
+ FROM tExpedition
+ WHERE palletFk > 0
+ GROUP BY palletFk
+ ORDER BY n DESC
+ LIMIT 100
+ ) sub
LIMIT 1;
IF vPalletFk IS NULL THEN
- SELECT roadmapStopFk
- INTO vTruckFk
- FROM (
- SELECT rm.roadmapStopFk, count(*) n
- FROM vn.routesMonitor rm
- JOIN tExpedition e ON e.routeFk = rm.routeFk
- GROUP BY roadmapStopFk
- ORDER BY n DESC
- LIMIT 1) sub;
+ 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;
IF vTruckFk IS NULL THEN
CALL util.throw ('TRUCK_NOT_AVAILABLE');
END IF;
- INSERT INTO vn.expeditionPallet(truckFk)
- VALUES(vTruckFk);
+ INSERT INTO expeditionPallet SET truckFk = vTruckFk;
SET vPalletFk = LAST_INSERT_ID();
END IF;
- INSERT INTO vn.expeditionScan(expeditionFk, palletFk, workerFk)
+ INSERT INTO expeditionScan(expeditionFk, palletFk, workerFk)
SELECT expeditionFk, vPalletFk, vWorkerFk
FROM tExpedition
ON DUPLICATE KEY UPDATE palletFk = vPalletFk, workerFk = vWorkerFk;
- SELECT printerFk INTO vPrinterFk
- FROM vn.arcRead
- WHERE id = vArcId;
+ SELECT id INTO vExpeditionStateTypeFk
+ FROM expeditionStateType
+ WHERE code = 'PALLETIZED';
- CALL vn.report_print(
+ INSERT INTO expeditionState(expeditionFk, typeFk)
+ SELECT expeditionFk, vExpeditionStateTypeFk FROM tExpedition;
+
+ SELECT printerFk INTO vPrinterFk FROM arcRead WHERE id = vArcId;
+
+ CALL report_print(
'LabelPalletExpedition',
vPrinterFk,
account.myUser_getId(),
@@ -93,7 +97,7 @@ BEGIN
'high'
);
- UPDATE vn.expeditionPallet SET isPrint = TRUE WHERE id = vPalletFk;
+ UPDATE expeditionPallet SET isPrint = TRUE WHERE id = vPalletFk;
DROP TEMPORARY TABLE tExpedition;
END$$
diff --git a/db/routines/vn/procedures/expeditionScan_Put.sql b/db/routines/vn/procedures/expeditionScan_Put.sql
index 9744a7cd7..cbc76d317 100644
--- a/db/routines/vn/procedures/expeditionScan_Put.sql
+++ b/db/routines/vn/procedures/expeditionScan_Put.sql
@@ -1,11 +1,18 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`expeditionScan_Put`(vPalletFk INT, vExpeditionFk INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`expeditionScan_Put`(
+ vPalletFk INT,
+ vExpeditionFk INT
+)
BEGIN
-
- REPLACE vn.expeditionScan(expeditionFk, palletFk)
- VALUES(vExpeditionFk, vPalletFk);
-
- SELECT LAST_INSERT_ID() INTO vPalletFk;
-
+ IF NOT (SELECT TRUE FROM expedition WHERE id = vExpeditionFk LIMIT 1) THEN
+ CALL util.throw('Expedition not exists');
+ END IF;
+
+ IF NOT (SELECT TRUE FROM expeditionPallet WHERE id = vPalletFk LIMIT 1) THEN
+ CALL util.throw('Pallet not exists');
+ END IF;
+
+ REPLACE expeditionScan(expeditionFk, palletFk)
+ VALUES(vExpeditionFk, vPalletFk);
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/invoiceInDueDay_calculate.sql b/db/routines/vn/procedures/invoiceInDueDay_calculate.sql
index e51b5f64d..7929bee6f 100644
--- a/db/routines/vn/procedures/invoiceInDueDay_calculate.sql
+++ b/db/routines/vn/procedures/invoiceInDueDay_calculate.sql
@@ -1,5 +1,7 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInDueDay_calculate`(vInvoiceInFk INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInDueDay_calculate`(
+vInvoiceInFk INT
+)
BEGIN
/**
* Calcula los vctos. de una factura recibida
@@ -56,12 +58,13 @@ BEGIN
COUNT(DISTINCT(pdd.detail)) cont,
s.payDay,
ii.issued,
- DATE(ii.created) + INTERVAL 2 DAY created
+ DATE(ii.created) + INTERVAL iic.dueDateMarginDays DAY created
FROM invoiceIn ii
JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva= iit.taxTypeSageFk
JOIN supplier s ON s.id = ii.supplierFk
- JOIN payDemDetail pdd ON pdd.id = s.payDemFk
+ JOIN payDemDetail pdd ON pdd.id = s.payDemFk
+ JOIN invoiceInConfig iic
WHERE ii.id = vInvoiceInFk
GROUP BY ii.id
)sub
diff --git a/db/routines/vn/procedures/invoiceIn_booking.sql b/db/routines/vn/procedures/invoiceIn_booking.sql
index c194a774d..a5dd3a5f1 100644
--- a/db/routines/vn/procedures/invoiceIn_booking.sql
+++ b/db/routines/vn/procedures/invoiceIn_booking.sql
@@ -13,30 +13,18 @@ BEGIN
* @param vBookEntry Id de asiento, si es NULL se genera uno nuevo
*/
DECLARE vFiscalYear INT;
- DECLARE vDistinctTransactions INT;
DECLARE vHasRepeatedTransactions BOOL;
- SELECT COUNT(DISTINCT iit.transactionTypeSageFk) INTO vDistinctTransactions
- FROM invoiceIn ii
- JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
- JOIN invoiceInSerial iis ON iis.code = ii.serial
- WHERE iit.invoiceInFk = vSelf
- AND iis.taxAreaFk = 'CEE'
- AND iit.transactionTypeSageFk;
-
- IF vDistinctTransactions > 1 THEN
- CALL util.throw ('This invoice does not allow different types of transactions');
- END IF;
-
SELECT TRUE INTO vHasRepeatedTransactions
- FROM invoiceInTax
- WHERE invoiceInFk = vSelf
- GROUP BY transactionTypeSageFk
- HAVING COUNT(transactionTypeSageFk) > 1
+ FROM invoiceInTax iit
+ JOIN invoiceIn ii ON ii.id = iit.invoiceInFk
+ WHERE ii.id = vSelf
+ AND ii.serial = 'E'
+ HAVING COUNT(DISTINCT iit.transactionTypeSageFk) > 1
LIMIT 1;
IF vHasRepeatedTransactions THEN
- CALL util.throw ('This invoice contains repeated types of transactions');
+ CALL util.throw ('This invoice contains different types of transactions');
END IF;
CREATE OR REPLACE TEMPORARY TABLE tInvoiceIn
diff --git a/db/routines/vn/procedures/itemMinimumQuantity_check.sql b/db/routines/vn/procedures/itemMinimumQuantity_check.sql
new file mode 100644
index 000000000..fef7cdbdb
--- /dev/null
+++ b/db/routines/vn/procedures/itemMinimumQuantity_check.sql
@@ -0,0 +1,28 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemMinimumQuantity_check`(
+ vSelf INT,
+ vItemFk INT,
+ vStarted DATE,
+ vEnded DATE,
+ vWarehouseFk INT
+)
+BEGIN
+ DECLARE vHasCollision BOOL;
+
+ IF vStarted IS NULL THEN
+ CALL util.throw('The field "started" cannot be null');
+ END IF;
+
+ SELECT COUNT(*) INTO vHasCollision
+ FROM itemMinimumQuantity
+ WHERE vItemFk = itemFk
+ AND ((vStarted <= ended OR ended IS NULL)
+ AND (vStarted >= `started` OR vEnded IS NULL))
+ AND (vWarehouseFk <=> warehouseFk)
+ AND vSelf <> id;
+
+ IF vHasCollision THEN
+ CALL util.throw('A line with the same configuration already exists');
+ END IF;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/itemShelvingSale_addByCollection.sql b/db/routines/vn/procedures/itemShelvingSale_addByCollection.sql
index 7f9cc6616..a6f9b3e8c 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addByCollection.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addByCollection.sql
@@ -44,7 +44,7 @@ BEGIN
LEAVE l;
END IF;
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, NULL);
END LOOP;
CLOSE vSales;
END$$
diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySale.sql b/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
index 909ce5155..454ea877f 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
@@ -1,6 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySale`(
- vSaleFk INT
+ vSaleFk INT,
+ vSectorFk INT
)
proc: BEGIN
/**
@@ -8,6 +9,7 @@ proc: BEGIN
*
* @param vSaleFk Id de sale
* @param vItemShelvingSaleFk Id de reserva
+ * @param vSectorFk Id del sector del operator
*/
DECLARE vLastPickingOrder INT;
DECLARE vDone INT DEFAULT FALSE;
@@ -30,6 +32,7 @@ proc: BEGIN
JOIN productionConfig pc
WHERE s.id = vSaleFk
AND NOT sc.isHideForPickers
+ AND (sc.id = vSectorFk OR vSectorFk IS NULL)
ORDER BY s.id,
p.pickingOrder >= vLastPickingOrder,
sh.priority DESC,
@@ -95,11 +98,13 @@ proc: BEGIN
itemShelvingFk,
saleFk,
quantity,
- userFk)
+ userFk,
+ isPicked)
SELECT vItemShelvingFk,
vSaleFk,
vReservedQuantity,
- vUserFk;
+ vUserFk,
+ FALSE;
UPDATE itemShelving
SET available = available - vReservedQuantity
diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql b/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql
new file mode 100644
index 000000000..285b9f93f
--- /dev/null
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySaleGroup.sql
@@ -0,0 +1,46 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySaleGroup`(
+ vSaleGroupFk INT(11)
+)
+BEGIN
+/**
+ * Reserva cantidades con ubicaciones para el contenido de una preparación previa
+ * a través del saleGroup
+ *
+ * @param vSaleGroupFk Identificador de saleGroup
+ */
+ DECLARE vDone BOOL DEFAULT FALSE;
+ DECLARE vSaleFk INT;
+ DECLARE vSectorFk INT;
+ DECLARE vSales CURSOR FOR
+ SELECT s.id
+ FROM saleGroupDetail sgd
+ JOIN sale s ON sgd.saleFk = s.id
+ JOIN saleTracking str ON str.saleFk = s.id
+ JOIN `state` st ON st.id = str.stateFk
+ AND st.code = 'PREVIOUS_PREPARATION'
+ LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
+ WHERE sgd.saleGroupFk = vSaleGroupFk
+ AND str.workerFk = account.myUser_getId()
+ AND iss.id IS NULL;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ SELECT sectorFk INTO vSectorFk
+ FROM operator
+ WHERE workerFk = account.myUser_getId();
+
+ OPEN vSales;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vSales INTO vSaleFk;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
+ END LOOP;
+ CLOSE vSales;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql b/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql
index 442abcf5d..c359c7c8d 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql
@@ -10,6 +10,7 @@ BEGIN
*/
DECLARE vDone BOOL DEFAULT FALSE;
DECLARE vSaleFk INT;
+ DECLARE vSectorFk INT;
DECLARE vSales CURSOR FOR
SELECT s.id
FROM sectorCollectionSaleGroup sc
@@ -25,6 +26,10 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ SELECT sectorFk INTO vSectorFk
+ FROM operator
+ WHERE workerFk = account.myUser_getId();
+
OPEN vSales;
l: LOOP
SET vDone = FALSE;
@@ -34,7 +39,7 @@ BEGIN
LEAVE l;
END IF;
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
END LOOP;
CLOSE vSales;
END$$
diff --git a/db/routines/vn/procedures/itemShelvingSale_doReserve.sql b/db/routines/vn/procedures/itemShelvingSale_doReserve.sql
index 629e303b3..d38a787a1 100644
--- a/db/routines/vn/procedures/itemShelvingSale_doReserve.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_doReserve.sql
@@ -6,9 +6,10 @@ proc: BEGIN
*/
DECLARE vDone BOOL;
DECLARE vSaleFk INT;
+ DECLARE vSectorFk INT;
DECLARE vSales CURSOR FOR
- SELECT DISTINCT saleFk FROM tSale;
+ SELECT DISTINCT saleFk, sectorFk FROM tSale;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
@@ -26,24 +27,25 @@ proc: BEGIN
CREATE OR REPLACE TEMPORARY TABLE tSale
ENGINE = MEMORY
- SELECT id, saleFk FROM itemShelvingSaleReserve;
+ SELECT id, saleFk, sectorFk FROM itemShelvingSaleReserve;
OPEN vSales;
myLoop: LOOP
SET vDone = FALSE;
- FETCH vSales INTO vSaleFk;
+ FETCH vSales INTO vSaleFk, vSectorFk;
IF vDone THEN
LEAVE myLoop;
END IF;
- CALL itemShelvingSale_addBySale (vSaleFk);
+ CALL itemShelvingSale_addBySale (vSaleFk, vSectorFk);
END LOOP;
CLOSE vSales;
- DELETE iss FROM itemShelvingSaleReserve iss JOIN tSale s ON s.id = iss.id;
+ DELETE iss FROM itemShelvingSaleReserve iss
+ JOIN tSale s ON s.id = iss.id AND s.sectorFk = iss.sectorFk;
DROP TEMPORARY TABLE tSale;
diff --git a/db/routines/vn/procedures/itemShelvingSale_reallocate.sql b/db/routines/vn/procedures/itemShelvingSale_reallocate.sql
index 85230a386..d5b89c373 100644
--- a/db/routines/vn/procedures/itemShelvingSale_reallocate.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_reallocate.sql
@@ -1,49 +1,55 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reallocate`(
- vItemShelvingFk INT(10),
- vItemFk INT(10)
-)
-BEGIN
-/**
- * Elimina reservas de un itemShelving e intenta reservar en otra ubicación
- *
- * @param vItemShelvingFk Id itemShelving
- */
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
- START TRANSACTION;
-
- SELECT id INTO vItemShelvingFk
- FROM itemShelving
- WHERE id = vItemShelvingFk
- FOR UPDATE;
-
- UPDATE itemShelving
- SET visible = 0,
- available = 0
- WHERE id = vItemShelvingFk
- AND itemFk = vItemFk;
-
- INSERT INTO itemShelvingSaleReserve (saleFk)
- SELECT DISTINCT iss.saleFk
- FROM itemShelvingSale iss
- JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
- WHERE iss.itemShelvingFk = vItemShelvingFk
- AND ish.itemFk = vItemFk
- AND NOT iss.isPicked;
-
- DELETE iss
- FROM itemShelvingSale iss
- JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
- WHERE iss.itemShelvingFk = vItemShelvingFk
- AND ish.itemFk = vItemFk
- AND NOT iss.isPicked;
- COMMIT;
-
- CALL itemShelvingSale_doReserve();
-END$$
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reallocate`(
+ vItemShelvingFk INT(10),
+ vItemFk INT(10),
+ vSectorFk INT
+)
+BEGIN
+/**
+ * Elimina reservas de un itemShelving e intenta reservar en otra ubicación
+ *
+ * @param vItemShelvingFk Id itemShelving
+ * @param vItemFk Id del artículo
+ * @param vSectorFk Id del sector
+ */
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ START TRANSACTION;
+
+ UPDATE itemShelving
+ SET visible = 0,
+ available = 0
+ WHERE id = vItemShelvingFk
+ AND itemFk = vItemFk;
+
+ SELECT iss.id
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND ish.itemFk = vItemFk
+ AND NOT iss.isPicked
+ FOR UPDATE;
+
+ INSERT INTO itemShelvingSaleReserve (saleFk, sectorFk)
+ SELECT DISTINCT iss.saleFk, vSectorFk
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND ish.itemFk = vItemFk
+ AND NOT iss.isPicked;
+
+ DELETE iss
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND ish.itemFk = vItemFk
+ AND NOT iss.isPicked;
+ COMMIT;
+
+ CALL itemShelvingSale_doReserve();
+END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql b/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
index 85f56ee68..9d21e6a6f 100644
--- a/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
@@ -2,7 +2,8 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_setQuantity`(
vItemShelvingSaleFk INT(10),
vQuantity DECIMAL(10,0),
- vIsItemShelvingSaleEmpty BOOLEAN
+ vIsItemShelvingSaleEmpty BOOLEAN,
+ vSectorFk INT
)
BEGIN
/**
@@ -14,6 +15,7 @@ BEGIN
* @param vQuantity Cantidad real que se ha cogido de la ubicación
* @param vIsItemShelvingSaleEmpty determina si la ubicación itemShelvingSale se ha
* quedado vacio tras el movimiento
+ * @param vSectorFk Id del sector
*/
DECLARE vSaleFk INT;
DECLARE vItemShelvingFk INT;
@@ -29,6 +31,12 @@ BEGIN
RESIGNAL;
END;
+ IF vQuantity > vReservedQuantity
+ OR (vQuantity < vReservedQuantity AND NOT vIsItemShelvingSaleEmpty)
+ OR (vQuantity = vReservedQuantity AND vIsItemShelvingSaleEmpty) THEN
+ CALL util.throw('The quantity cannot be different from the reserved');
+ END IF;
+
IF (SELECT isPicked FROM itemShelvingSale WHERE id = vItemShelvingSaleFk) THEN
CALL util.throw('Reservation completed');
END IF;
@@ -50,9 +58,8 @@ BEGIN
AND NOT iss.isPicked;
IF vQuantity > vReservedQuantity
- OR (vQuantity < vReservedQuantity AND
- (NOT vIsItemShelvingSaleEmpty OR vIsItemShelvingSaleEmpty IS NULL))
- OR (vIsItemShelvingSaleEmpty IS NOT NULL AND vQuantity = vReservedQuantity) THEN
+ OR (vQuantity < vReservedQuantity AND NOT vIsItemShelvingSaleEmpty)
+ OR (vQuantity = vReservedQuantity AND vIsItemShelvingSaleEmpty) THEN
CALL util.throw('The quantity cannot be different from the reserved');
END IF;
@@ -72,7 +79,7 @@ BEGIN
SET visible = GREATEST(0, visible - vQuantity)
WHERE id = vItemShelvingFk;
- SELECT SUM(IF(isPicked, 0, quantity)), SUM(quantity)
+ SELECT SUM(IF(isPicked OR id = vItemShelvingSaleFk, 0, quantity)), SUM(quantity)
INTO vRemainingQuantity, vTotalQuantity
FROM itemShelvingSale
WHERE saleFk = vSaleFk;
@@ -96,9 +103,9 @@ BEGIN
COMMIT;
IF vIsItemShelvingSaleEmpty AND vQuantity <> vReservedQuantity THEN
- INSERT INTO itemShelvingSaleReserve (saleFk)
- SELECT vSaleFk;
- CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk);
+ INSERT INTO itemShelvingSaleReserve (saleFk, sectorFk)
+ SELECT vSaleFk, vSectorFk;
+ CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk, vSectorFk);
END IF;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/itemShelving_addByClaim.sql b/db/routines/vn/procedures/itemShelving_addByClaim.sql
index 851162952..4ff2955c7 100644
--- a/db/routines/vn/procedures/itemShelving_addByClaim.sql
+++ b/db/routines/vn/procedures/itemShelving_addByClaim.sql
@@ -15,7 +15,7 @@ BEGIN
JOIN ticket t ON t.id = c.ticketFk
WHERE c.id = vClaimFk;
- CALL buyUltimate (vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(NULL, vWarehouseFk, util.VN_CURDATE());
INSERT INTO itemShelving (itemFk, shelvingFk, packing, `grouping`, visible)
SELECT s.itemFk, vShelvingFk, b.packing, b.`grouping`, cb.quantity AS visible
diff --git a/db/routines/vn/procedures/itemShelving_get.sql b/db/routines/vn/procedures/itemShelving_get.sql
index 1be762f09..d42446b06 100644
--- a/db/routines/vn/procedures/itemShelving_get.sql
+++ b/db/routines/vn/procedures/itemShelving_get.sql
@@ -16,7 +16,8 @@ BEGIN
ish.id,
s.priority,
ish.isChecked,
- ic.url
+ ic.url,
+ ish.available
FROM itemShelving ish
JOIN item i ON i.id = ish.itemFk
JOIN shelving s ON vSelf = s.code COLLATE utf8_unicode_ci
diff --git a/db/routines/vn/procedures/itemShelving_getItemDetails.sql b/db/routines/vn/procedures/itemShelving_getItemDetails.sql
index c01bc348c..b097c2d17 100644
--- a/db/routines/vn/procedures/itemShelving_getItemDetails.sql
+++ b/db/routines/vn/procedures/itemShelving_getItemDetails.sql
@@ -23,7 +23,7 @@ BEGIN
FROM operator
WHERE workerFk = account.myUser_getId();
- CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
+ CALL buy_getUltimate(vBarcodeItem, vWarehouseFk, util.VN_CURDATE());
SELECT buyFk INTO vBuyFk
FROM tmp.buyUltimate
diff --git a/db/routines/vn/procedures/item_calcVisible.sql b/db/routines/vn/procedures/item_calcVisible.sql
index 820e73a7e..32adfdfa3 100644
--- a/db/routines/vn/procedures/item_calcVisible.sql
+++ b/db/routines/vn/procedures/item_calcVisible.sql
@@ -21,6 +21,7 @@ BEGIN
FROM itemTicketOut i
LEFT JOIN ticketState ts ON ts.ticketFk = i.ticketFk
JOIN `state` s ON s.id = ts.stateFk
+ JOIN warehouse w ON w.id = i.warehouseFk
LEFT JOIN (
SELECT DISTINCT st.saleFk
FROM saleTracking st
@@ -28,26 +29,31 @@ BEGIN
WHERE st.created > vDated
AND (s.isPicked OR st.isChecked)
) stPrevious ON `stPrevious`.`saleFk` = i.saleFk
- WHERE IFNULL(vWarehouseFk, i.warehouseFk) = i.warehouseFk
+ WHERE (vWarehouseFk IS NULL OR i.warehouseFk = vWarehouseFk)
AND (vSelf IS NULL OR i.itemFk = vSelf)
AND (s.isPicked OR i.reserved OR stPrevious.saleFk)
AND i.shipped >= vDated AND i.shipped < vTomorrow
+ AND w.isComparative
UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryIn
- WHERE isReceived
- AND landed >= vDated AND landed < vTomorrow
- AND IFNULL(vWarehouseFk, warehouseInFk) = warehouseInFk
- AND (vSelf IS NULL OR itemFk = vSelf)
- AND NOT isVirtualStock
+ SELECT iei.itemFk, iei.quantity
+ FROM itemEntryIn iei
+ JOIN warehouse w ON w.id = iei.warehouseInFk
+ WHERE iei.isReceived
+ AND iei.landed >= vDated AND iei.landed < vTomorrow
+ AND (vWarehouseFk IS NULL OR iei.warehouseInFk = vWarehouseFk)
+ AND (vSelf IS NULL OR iei.itemFk = vSelf)
+ AND NOT iei.isVirtualStock
+ AND w.isComparative
UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryOut
- WHERE isDelivered
- AND shipped >= vDated
- AND shipped < vTomorrow
- AND IFNULL(vWarehouseFk, warehouseOutFk) = warehouseOutFk
- AND (vSelf IS NULL OR itemFk = vSelf)
+ SELECT ieo.itemFk, ieo.quantity
+ FROM itemEntryOut ieo
+ JOIN warehouse w ON w.id = ieo.warehouseOutFk
+ WHERE ieo.isDelivered
+ AND ieo.shipped >= vDated
+ AND ieo.shipped < vTomorrow
+ AND (vWarehouseFk IS NULL OR ieo.warehouseOutFk = vWarehouseFk)
+ AND (vSelf IS NULL OR ieo.itemFk = vSelf)
+ AND w.isComparative
) t
GROUP BY itemFk
ON DUPLICATE KEY UPDATE
diff --git a/db/routines/vn/procedures/item_devalueA2.sql b/db/routines/vn/procedures/item_devalueA2.sql
index 5b03fc872..5b19b1522 100644
--- a/db/routines/vn/procedures/item_devalueA2.sql
+++ b/db/routines/vn/procedures/item_devalueA2.sql
@@ -93,7 +93,7 @@ BEGIN
ORDER BY created DESC
LIMIT 1;
- CALL buyUltimate(vWarehouseFk, vCurdate);
+ CALL buy_getUltimate(vSelf, vWarehouseFk, vCurdate);
SELECT b.entryFk, bu.buyFk,IFNULL(b.buyingValue, 0) INTO vLastEntryFk, vLastBuyFk, vBuyingValueOriginal
FROM tmp.buyUltimate bu
diff --git a/db/routines/vn/procedures/item_getBalance.sql b/db/routines/vn/procedures/item_getBalance.sql
index 0de59b478..3a594c81c 100644
--- a/db/routines/vn/procedures/item_getBalance.sql
+++ b/db/routines/vn/procedures/item_getBalance.sql
@@ -240,7 +240,7 @@ BEGIN
NULL reference,
NULL entityType,
NULL entityId,
- 'Inventario calculado',
+ 'Inventario calculado' entityName,
@a invalue,
NULL `out`,
@a balance,
diff --git a/db/routines/vn/procedures/item_getInfo.sql b/db/routines/vn/procedures/item_getInfo.sql
index 50ab880a0..5cd4fb31e 100644
--- a/db/routines/vn/procedures/item_getInfo.sql
+++ b/db/routines/vn/procedures/item_getInfo.sql
@@ -1,5 +1,8 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getInfo`(IN `vBarcode` VARCHAR(22), IN `vWarehouseFk` INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getInfo`(
+ `vBarcode` VARCHAR(22),
+ `vWarehouseFk` INT
+)
BEGIN
/**
* Devuelve información relativa al item correspondiente del vBarcode pasado
@@ -11,12 +14,14 @@ BEGIN
DECLARE vCacheAvailableFk INT;
DECLARE vVisibleItemShelving INT;
DECLARE vItemFk INT;
+ DECLARE vDated DATE;
+
+ SELECT barcodeToItem(vBarcode), util.VN_CURDATE() INTO vItemFk, vDated;
CALL cache.visible_refresh(vCacheVisibleFk, FALSE, vWarehouseFk);
- CALL cache.available_refresh(vCacheAvailableFk, FALSE, vWarehouseFk, util.VN_CURDATE());
- CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
-
- SELECT barcodeToItem(vBarcode) INTO vItemFk;
+ CALL cache.available_refresh(vCacheAvailableFk, FALSE, vWarehouseFk, vDated);
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, vDated);
+
SELECT SUM(visible) INTO vVisibleItemShelving
FROM itemShelvingStock
WHERE itemFk = vItemFk
diff --git a/db/routines/vn/procedures/item_getMinacum.sql b/db/routines/vn/procedures/item_getMinacum.sql
index a3ebedb12..1decf881d 100644
--- a/db/routines/vn/procedures/item_getMinacum.sql
+++ b/db/routines/vn/procedures/item_getMinacum.sql
@@ -1,37 +1,40 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getMinacum`(IN vWarehouseFk TINYINT, IN vDatedFrom DATETIME, IN vRange INT, IN vItemFk INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getMinacum`(
+ vWarehouseFk TINYINT,
+ vDated DATE,
+ vRange INT,
+ vItemFk INT
+)
BEGIN
/**
- * Cálculo del mínimo acumulado, para un item/almacén especificado, en caso de
- * NULL para todo.
+ * Cálculo del mínimo acumulado, para un item/almacén
+ * especificado, en caso de NULL para todos.
*
- * @param vWarehouseFk -> warehouseFk
- * @param vDatedFrom -> fecha inicio
- * @param vRange -> número de días a considerar
- * @param vItemFk -> Identificador de item
+ * @param vWarehouseFk Id warehouse
+ * @param vDated Fecha inicio
+ * @param vRange Número de días a considerar
+ * @param vItemFk Id de artículo
* @return tmp.itemMinacum
*/
- DECLARE vDatedTo DATETIME;
+ DECLARE vDatedTo DATETIME DEFAULT util.dayEnd(vDated + INTERVAL vRange DAY);
- SET vDatedFrom = TIMESTAMP(DATE(vDatedFrom), '00:00:00');
- SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, vRange, vDatedFrom), '23:59:59');
-
- DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
- CREATE TEMPORARY TABLE tmp.itemCalc
+ CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
(INDEX (itemFk, warehouseFk))
+ ENGINE = MEMORY
SELECT sub.itemFk,
sub.dated,
CAST(SUM(sub.quantity) AS SIGNED) quantity,
sub.warehouseFk
- FROM (SELECT s.itemFk,
+ FROM (
+ SELECT s.itemFk,
DATE(t.shipped) dated,
-s.quantity quantity,
t.warehouseFk
FROM sale s
JOIN ticket t ON t.id = s.ticketFk
- WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
+ WHERE t.shipped BETWEEN vDated AND vDatedTo
AND t.warehouseFk
- AND s.quantity != 0
+ AND s.quantity <> 0
AND (vItemFk IS NULL OR s.itemFk = vItemFk)
AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
UNION ALL
@@ -42,10 +45,10 @@ BEGIN
FROM buy b
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
- WHERE t.landed BETWEEN vDatedFrom AND vDatedTo
+ WHERE t.landed BETWEEN vDated AND vDatedTo
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
- AND !e.isExcludedFromAvailable
- AND b.quantity != 0
+ AND NOT e.isExcludedFromAvailable
+ AND b.quantity <> 0
AND (vItemFk IS NULL OR b.itemFk = vItemFk)
UNION ALL
SELECT b.itemFk,
@@ -55,28 +58,45 @@ BEGIN
FROM buy b
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
- WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
+ WHERE t.shipped BETWEEN vDated AND vDatedTo
AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
- AND !e.isExcludedFromAvailable
- AND b.quantity != 0
+ AND NOT e.isExcludedFromAvailable
+ AND b.quantity <> 0
AND (vItemFk IS NULL OR b.itemFk = vItemFk)
- AND !e.isRaid
+ AND NOT e.isRaid
+ UNION ALL
+ SELECT r.itemFk,
+ r.shipment,
+ -r.amount,
+ r.warehouseFk
+ FROM hedera.orderRow r
+ JOIN hedera.`order` o ON o.id = r.orderFk
+ JOIN client c ON c.id = o.customer_id
+ WHERE r.shipment BETWEEN vDated AND vDatedTo
+ AND (vWarehouseFk IS NULL OR r.warehouseFk = vWarehouseFk)
+ AND r.created >= (
+ SELECT util.VN_NOW() - INTERVAL TIME_TO_SEC(reserveTime) SECOND
+ FROM hedera.orderConfig
+ )
+ AND NOT o.confirmed
+ AND (vItemFk IS NULL OR r.itemFk = vItemFk)
+ AND r.amount <> 0
) sub
GROUP BY sub.itemFk, sub.warehouseFk, sub.dated;
- CALL item_getAtp(vDatedFrom);
- DROP TEMPORARY TABLE tmp.itemCalc;
+ CALL item_getAtp(vDated);
- DROP TEMPORARY TABLE IF EXISTS tmp.itemMinacum;
- CREATE TEMPORARY TABLE tmp.itemMinacum
+ CREATE OR REPLACE TEMPORARY TABLE tmp.itemMinacum
(INDEX(itemFk))
ENGINE = MEMORY
- SELECT i.itemFk,
- i.warehouseFk,
- i.quantity amount
- FROM tmp.itemAtp i
- HAVING amount != 0;
+ SELECT itemFk,
+ warehouseFk,
+ quantity amount
+ FROM tmp.itemAtp
+ WHERE quantity <> 0;
- DROP TEMPORARY TABLE tmp.itemAtp;
+ DROP TEMPORARY TABLE
+ tmp.itemAtp,
+ tmp.itemCalc;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/item_multipleBuy.sql b/db/routines/vn/procedures/item_multipleBuy.sql
index ba49f8d36..0a08f5015 100644
--- a/db/routines/vn/procedures/item_multipleBuy.sql
+++ b/db/routines/vn/procedures/item_multipleBuy.sql
@@ -13,7 +13,7 @@ BEGIN
*/
ALTER TABLE tmp.itemInventory ADD IF NOT EXISTS buy_id INT;
- CALL buyUltimate(vWarehouseFk, vDate);
+ CALL buy_getUltimate (NULL, vWarehouseFk, vDate);
CREATE OR REPLACE TEMPORARY TABLE tmp
(KEY (itemFk))
diff --git a/db/routines/vn/procedures/item_valuateInventory.sql b/db/routines/vn/procedures/item_valuateInventory.sql
index 18aefdf7b..5f3131c9f 100644
--- a/db/routines/vn/procedures/item_valuateInventory.sql
+++ b/db/routines/vn/procedures/item_valuateInventory.sql
@@ -1,6 +1,8 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_valuateInventory`(
- vDated DATE
+ vDated DATE,
+ vItemTypeFk INT,
+ vItemCategoryFk INT
)
BEGIN
DECLARE vInventoried DATE;
@@ -61,11 +63,14 @@ BEGIN
JOIN `entry` e ON e.id = b.entryFk
JOIN travel tr ON tr.id = e.travelFk
JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
JOIN warehouse w ON w.id = tr.warehouseInFk
WHERE tr.landed = vDateDayEnd
AND e.supplierFk = vInventorySupplierFk
AND w.valuatedInventory
AND t.isInventory
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
GROUP BY tr.warehouseInFk, b.itemFk;
ELSE
INSERT INTO tInventory(warehouseFk, itemFk, quantity, warehouseInventory)
@@ -78,11 +83,14 @@ BEGIN
JOIN `entry` e ON e.id = b.entryFk
JOIN travel tr ON tr.id = e.travelFk
JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
JOIN warehouse w ON w.id = tr.warehouseInFk
WHERE tr.landed = vInventoried
AND e.supplierFk = vInventorySupplierFk
AND w.valuatedInventory
AND t.isInventory
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
GROUP BY tr.warehouseInFk, b.itemFk;
END IF;
@@ -97,6 +105,7 @@ BEGIN
JOIN `entry` e ON e.id = b.entryFk
JOIN travel tr ON tr.id = e.travelFk
JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
JOIN warehouse w ON w.id = tr.warehouseInFk
WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
@@ -104,6 +113,8 @@ BEGIN
AND w.valuatedInventory
AND t.isInventory
AND e.supplierFk <> vInventorySupplierFk
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity * IF(vHasNotInventory, -1, 1));
-- Descontamos las salidas
@@ -117,11 +128,14 @@ BEGIN
JOIN `entry` e ON e.id = b.entryFk
JOIN travel tr ON tr.id = e.travelFk
JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
JOIN warehouse w ON w.id = tr.warehouseOutFk
WHERE tr.shipped BETWEEN vInventoried AND vDateDayEnd
AND NOT e.isRaid
AND w.valuatedInventory
AND t.isInventory
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity * IF(vHasNotInventory,1,-1));
-- Descontamos las lineas de venta
@@ -135,10 +149,13 @@ BEGIN
JOIN `client` c ON c.id = t.clientFk
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 warehouse w ON w.id = t.warehouseFk
WHERE t.shipped BETWEEN vInventoried AND vDateDayEnd
AND w.valuatedInventory
AND it.isInventory
+ AND (it.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + s.quantity * IF(vHasNotInventory, 1, -1);
-- Volver a poner lo que esta aun en las estanterias
@@ -153,11 +170,14 @@ BEGIN
JOIN `client` c ON c.id = t.clientFk
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 warehouse w ON w.id = t.warehouseFk
WHERE t.shipped BETWEEN vDated AND vDateDayEnd
AND NOT (s.isPicked OR t.isLabeled)
AND w.valuatedInventory
AND it.isInventory
+ AND (it.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + s.quantity * IF(vHasNotInventory, 0, 1);
END IF;
@@ -172,6 +192,7 @@ BEGIN
JOIN `entry` e ON e.id = b.entryFk
JOIN travel tr ON tr.id = e.travelFk
JOIN itemType t ON t.id = i.typeFk
+ JOIN itemCategory ic ON ic.id = t.categoryFk
JOIN warehouse wIn ON wIn.id = tr.warehouseInFk
JOIN warehouse wOut ON wOut.id = tr.warehouseOutFk
WHERE vDated >= tr.shipped AND vDated < tr.landed
@@ -179,9 +200,11 @@ BEGIN
AND wIn.valuatedInventory
AND t.isInventory
AND e.isConfirmed
+ AND (t.id = vItemTypeFk OR vItemTypeFk IS NULL)
+ AND (ic.id = vItemCategoryFk OR vItemCategoryFk IS NULL)
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
- CALL buyUltimate(NULL, vDateDayEnd);
+ CALL buy_getUltimate (NULL, NULL, vDateDayEnd);
DELETE FROM tInventory WHERE quantity IS NULL OR NOT quantity;
@@ -204,7 +227,8 @@ BEGIN
ic.name itemCategoryName,
ti.cost,
ti.total,
- ti.warehouseInventory
+ ti.warehouseInventory,
+ ic.display
FROM tInventory ti
JOIN warehouse w ON w.id = warehouseFk
JOIN item i ON i.id = ti.itemFk
diff --git a/db/routines/vn/procedures/multipleInventory.sql b/db/routines/vn/procedures/multipleInventory.sql
index 6cd584c6e..99fb92cc8 100644
--- a/db/routines/vn/procedures/multipleInventory.sql
+++ b/db/routines/vn/procedures/multipleInventory.sql
@@ -75,13 +75,6 @@ proc: BEGIN
) sub
GROUP BY itemFk;
- UPDATE tmp.itemInventory ai
- JOIN tItemInventoryCalc iic ON iic.itemFk = ai.id
- SET ai.inventory = iic.quantity,
- ai.visible = iic.quantity,
- ai.avalaible = iic.quantity,
- ai.sd = iic.quantity;
-
-- Cálculo del visible
CALL cache.visible_refresh(vCalcFk, FALSE, vWarehouseFk);
@@ -93,8 +86,12 @@ proc: BEGIN
WHERE calc_id = vCalcFk;
UPDATE tmp.itemInventory it
- JOIN tItemVisibleCalc ivc ON ivc.item_id = it.id
- SET it.visible = it.visible + ivc.visible;
+ LEFT JOIN tItemInventoryCalc iic ON iic.itemFk = it.id
+ LEFT JOIN tItemVisibleCalc ivc ON ivc.item_id = it.id
+ SET it.inventory = iic.quantity,
+ it.visible = ivc.visible,
+ it.avalaible = iic.quantity,
+ it.sd = iic.quantity;
-- Calculo del disponible
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
@@ -142,31 +139,35 @@ proc: BEGIN
CALL item_getAtp(vDate);
CALL travel_upcomingArrivals(vWarehouseFk, vDate);
- UPDATE tmp.itemInventory ai
- JOIN (
- SELECT it.itemFk,
- SUM(it.quantity) quantity,
- im.quantity minQuantity
- FROM tmp.itemCalc it
- JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
- JOIN item i ON i.id = it.itemFk
- LEFT JOIN origin o ON o.id = i.originFk
- LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
- WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
- t.landing,
- vDateToTomorrow)
- GROUP BY it.itemFk
- ) sub ON sub.itemFk = ai.id
- SET ai.avalaible = IF(sub.minQuantity > 0,
- ai.avalaible,
- ai.avalaible + sub.minQuantity),
- ai.sd = ai.inventory + sub.quantity;
+ CREATE OR REPLACE TEMPORARY TABLE tItemAvailableCalc
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT it.itemFk,
+ SUM(it.quantity) quantity,
+ im.quantity minQuantity
+ FROM tmp.itemCalc it
+ JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
+ JOIN item i ON i.id = it.itemFk
+ LEFT JOIN origin o ON o.id = i.originFk
+ LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
+ WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
+ t.landing,
+ vDateToTomorrow)
+ GROUP BY it.itemFk;
+
+ UPDATE tmp.itemInventory it
+ JOIN tItemAvailableCalc iac ON iac.itemFk = it.id
+ SET it.avalaible = IF(iac.minQuantity > 0,
+ it.avalaible,
+ it.avalaible + iac.minQuantity),
+ it.sd = it.inventory + iac.quantity;
DROP TEMPORARY TABLE
tmp.itemTravel,
tmp.itemCalc,
tmp.itemAtp,
tItemInventoryCalc,
- tItemVisibleCalc;
+ tItemVisibleCalc,
+ tItemAvailableCalc;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/productionControl.sql b/db/routines/vn/procedures/productionControl.sql
index dad46393d..af6d929d7 100644
--- a/db/routines/vn/procedures/productionControl.sql
+++ b/db/routines/vn/procedures/productionControl.sql
@@ -174,27 +174,30 @@ proc: BEGIN
WHERE NOT `lines`;
-- Lineas por linea de encajado
+ CREATE OR REPLACE TEMPORARY TABLE tItemPackingType
+ (PRIMARY KEY(ticketFk))
+ ENGINE = MEMORY
+ SELECT ticketFk,
+ SUM(sub.H) H,
+ SUM(sub.V) V,
+ SUM(sub.N) N
+ FROM (
+ SELECT t.ticketFk,
+ SUM(i.itemPackingTypeFk = 'H') H,
+ SUM(i.itemPackingTypeFk = 'V') V,
+ SUM(i.itemPackingTypeFk IS NULL) N
+ FROM tmp.productionTicket t
+ JOIN sale s ON s.ticketFk = t.ticketFk
+ JOIN item i ON i.id = s.itemFk
+ GROUP BY t.ticketFk, i.itemPackingTypeFk
+ ) sub
+ GROUP BY ticketFk;
+
UPDATE tmp.productionBuffer pb
- JOIN (
- SELECT ticketFk,
- SUM(sub.H) H,
- SUM(sub.V) V,
- SUM(sub.N) N
- FROM (
- SELECT t.ticketFk,
- SUM(i.itemPackingTypeFk = 'H') H,
- SUM(i.itemPackingTypeFk = 'V') V,
- SUM(i.itemPackingTypeFk IS NULL) N
- FROM tmp.productionTicket t
- JOIN sale s ON s.ticketFk = t.ticketFk
- JOIN item i ON i.id = s.itemFk
- GROUP BY t.ticketFk, i.itemPackingTypeFk
- ) sub
- GROUP BY ticketFk
- ) sub2 ON sub2.ticketFk = pb.ticketFk
- SET pb.H = sub2.H,
- pb.V = sub2.V,
- pb.N = sub2.N;
+ JOIN tItemPackingType ti ON ti.ticketFk = pb.ticketFk
+ SET pb.H = ti.H,
+ pb.V = ti.V,
+ pb.N = ti.N;
-- Colecciones segun tipo de encajado
UPDATE tmp.productionBuffer pb
@@ -273,6 +276,7 @@ proc: BEGIN
tmp.risk,
tmp.ticket_problems,
tmp.ticketWithPrevia,
- tItemShelvingStock;
+ tItemShelvingStock,
+ tItemPackingType;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/route_updateM3.sql b/db/routines/vn/procedures/route_updateM3.sql
index 92d26b753..98fdae5dd 100644
--- a/db/routines/vn/procedures/route_updateM3.sql
+++ b/db/routines/vn/procedures/route_updateM3.sql
@@ -1,14 +1,18 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`route_updateM3`(vRoute INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`route_updateM3`(
+ vSelf INT
+)
BEGIN
+/**
+ * Actualiza el volumen de la ruta.
+ *
+ * @param vSelf Id ruta
+ */
+ DECLARE vVolume DECIMAL(10,1)
+ DEFAULT (SELECT SUM(volume) FROM saleVolume WHERE routeFk = vSelf);
- UPDATE vn.route r
- LEFT JOIN (
- SELECT routeFk, SUM(volume) AS m3
- FROM saleVolume
- WHERE routeFk = vRoute
- ) v ON v.routeFk = r.id
- SET r.m3 = IFNULL(v.m3,0)
- WHERE r.id =vRoute;
+ UPDATE `route`
+ SET m3 = IFNULL(vVolume, 0)
+ WHERE id = vSelf;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/saleGroup_setParking.sql b/db/routines/vn/procedures/saleGroup_setParking.sql
index 551ca6386..fffe5e154 100644
--- a/db/routines/vn/procedures/saleGroup_setParking.sql
+++ b/db/routines/vn/procedures/saleGroup_setParking.sql
@@ -10,15 +10,10 @@ BEGIN
* @param vSaleGroupFk id de la preparación previa
* @param vParkingFk id del parking
*/
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- RESIGNAL;
- END;
-
UPDATE saleGroup sg
SET sg.parkingFk = vParkingFk
- WHERE sg.id = vSaleGroupFk
- AND sg.created >= util.VN_CURDATE() - INTERVAL 1 WEEK;
+ WHERE sg.id = vSaleGroupFk
+ AND sg.created >= util.VN_CURDATE() - INTERVAL 1 WEEK;
CALL ticket_setNextState(ticket_get(vSaleGroupFk));
END$$
diff --git a/db/routines/vn/procedures/sale_getProblems.sql b/db/routines/vn/procedures/sale_getProblems.sql
index ba4ff5857..c881bcf92 100644
--- a/db/routines/vn/procedures/sale_getProblems.sql
+++ b/db/routines/vn/procedures/sale_getProblems.sql
@@ -13,7 +13,7 @@ BEGIN
DECLARE vAvailableCache INT;
DECLARE vVisibleCache INT;
DECLARE vDone BOOL;
- DECLARE vComponentCount INT;
+ DECLARE vRequiredComponent INT;
DECLARE vCursor CURSOR FOR
SELECT DISTINCT tt.warehouseFk, IF(vIsTodayRelative, util.VN_CURDATE(), DATE(tt.shipped))
@@ -54,7 +54,7 @@ BEGIN
SELECT ticketFk, clientFk
FROM tmp.sale_getProblems;
- SELECT COUNT(*) INTO vComponentCount
+ SELECT COUNT(*) INTO vRequiredComponent
FROM component
WHERE isRequired;
@@ -96,20 +96,18 @@ BEGIN
-- Faltan componentes
INSERT INTO tmp.sale_problems(ticketFk, hasComponentLack, saleFk)
- SELECT ticketFk, (vComponentCount > nComp) hasComponentLack, saleFk
- FROM (
- SELECT COUNT(s.id) nComp, tl.ticketFk, s.id saleFk
- FROM tmp.ticket_list tl
- JOIN sale s ON s.ticketFk = tl.ticketFk
- LEFT JOIN saleComponent sc ON sc.saleFk = s.id
- LEFT JOIN component c ON c.id = sc.componentFk AND c.isRequired
- JOIN ticket t ON t.id = tl.ticketFk
- JOIN agencyMode am ON am.id = t.agencyModeFk
- JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
- WHERE dm.code IN ('AGENCY','DELIVERY','PICKUP')
- AND s.quantity > 0
- GROUP BY s.id
- ) sub
+ SELECT t.id, COUNT(c.id) < vRequiredComponent hasComponentLack, s.id
+ FROM tmp.ticket_list tl
+ JOIN ticket t ON t.id = tl.ticketFk
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN agencyMode am ON am.id = t.agencyModeFk
+ JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
+ LEFT JOIN saleComponent sc ON sc.saleFk = s.id
+ LEFT JOIN component c ON c.id = sc.componentFk
+ AND c.isRequired
+ WHERE dm.code IN ('AGENCY','DELIVERY','PICKUP')
+ AND s.quantity > 0
+ GROUP BY s.id
HAVING hasComponentLack;
-- Cliente congelado
@@ -276,7 +274,7 @@ BEGIN
ON DUPLICATE KEY UPDATE itemDelay = sub.problem, saleFk = sub.saleFk;
-- Redondeo: Cantidad pedida incorrecta en al grouping de la última compra
- CALL buyUltimate(vWarehouseFk, vDate);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vDate);
INSERT INTO tmp.sale_problems(ticketFk, hasRounding, saleFk)
SELECT ticketFk, problem ,saleFk
FROM (
diff --git a/db/routines/vn/procedures/sale_recalcComponent.sql b/db/routines/vn/procedures/sale_recalcComponent.sql
index 54297571a..f3c188404 100644
--- a/db/routines/vn/procedures/sale_recalcComponent.sql
+++ b/db/routines/vn/procedures/sale_recalcComponent.sql
@@ -78,7 +78,7 @@ proc: BEGIN
DROP TEMPORARY TABLE tmp.zoneGetLanded;
-- rellena la tabla buyUltimate con la ultima compra
- CALL buyUltimate (vWarehouseFk, vShipped);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vShipped);
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
diff --git a/db/routines/vn/procedures/sale_replaceItem.sql b/db/routines/vn/procedures/sale_replaceItem.sql
index a4aefc088..573d5b488 100644
--- a/db/routines/vn/procedures/sale_replaceItem.sql
+++ b/db/routines/vn/procedures/sale_replaceItem.sql
@@ -53,7 +53,7 @@ BEGIN
JOIN ticket t ON t.id = s.ticketFk
WHERE s.id = vSaleFk;
- CALL buyUltimate(vWarehouseFk, vDate);
+ CALL buy_getUltimate(vNewItemFk, vWarehouseFk, vDate);
SELECT `grouping`, groupingMode, packing
INTO vGrouping,vGroupingMode,vPacking
@@ -61,6 +61,8 @@ BEGIN
JOIN tmp.buyUltimate tmp ON b.id = tmp.buyFk
WHERE tmp.itemFk = vNewItemFk AND tmp.WarehouseFk = vWarehouseFk;
+ DROP TEMPORARY TABLE tmp.buyUltimate;
+
IF vGroupingMode = 'packing' AND vPacking > 0 THEN
SET vRoundQuantity = vPacking;
END IF;
diff --git a/db/routines/vn/procedures/sale_setProblem.sql b/db/routines/vn/procedures/sale_setProblem.sql
index b0870089f..b343c0b8c 100644
--- a/db/routines/vn/procedures/sale_setProblem.sql
+++ b/db/routines/vn/procedures/sale_setProblem.sql
@@ -11,24 +11,29 @@ BEGIN
*/
DECLARE vSaleFk INT;
DECLARE vHasProblem INT;
+ DECLARE vIsProblemCalcNeeded BOOL;
DECLARE vDone BOOL;
- DECLARE vSaleList CURSOR FOR SELECT saleFk, hasProblem FROM tmp.sale;
+ DECLARE vSaleList CURSOR FOR
+ SELECT saleFk, hasProblem, isProblemCalcNeeded
+ FROM tmp.sale;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
OPEN vSaleList;
l: LOOP
SET vDone = FALSE;
- FETCH vSaleList INTO vSaleFk, vHasProblem;
+ FETCH vSaleList INTO vSaleFk, vHasProblem, vIsProblemCalcNeeded;
IF vDone THEN
LEAVE l;
END IF;
UPDATE sale
- SET problem = CONCAT(
- IF(vHasProblem,
- CONCAT(problem, ',', vProblemCode),
- REPLACE(problem, vProblemCode , '')))
+ SET problem = IF (vIsProblemCalcNeeded,
+ CONCAT(
+ IF(vHasProblem,
+ CONCAT(problem, ',', vProblemCode),
+ REPLACE(problem, vProblemCode , ''))),
+ NULL)
WHERE id = vSaleFk;
END LOOP;
CLOSE vSaleList;
diff --git a/db/routines/vn/procedures/sale_setProblemComponentLack.sql b/db/routines/vn/procedures/sale_setProblemComponentLack.sql
index aa5f5f1be..23eb77c2e 100644
--- a/db/routines/vn/procedures/sale_setProblemComponentLack.sql
+++ b/db/routines/vn/procedures/sale_setProblemComponentLack.sql
@@ -14,7 +14,7 @@ BEGIN
ENGINE = MEMORY
SELECT vSelf saleFk,
sale_hasComponentLack(vSelf) hasProblem,
- ticket_isProblemCalcNeeded(ticketFk) isProblemCalcNeeded
+ (ticket_isProblemCalcNeeded(ticketFk) AND quantity > 0) isProblemCalcNeeded
FROM sale
WHERE id = vSelf;
diff --git a/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql b/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql
index 2ee49b656..cdf28ac09 100644
--- a/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql
+++ b/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql
@@ -14,9 +14,9 @@ BEGIN
ENGINE = MEMORY
SELECT saleFk,
sale_hasComponentLack(saleFk) hasProblem,
- ticket_isProblemCalcNeeded(ticketFk) isProblemCalcNeeded
+ (ticket_isProblemCalcNeeded(ticketFk) AND quantity > 0) isProblemCalcNeeded
FROM (
- SELECT s.id saleFk, s.ticketFk
+ SELECT s.id saleFk, s.ticketFk, s.quantity
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
diff --git a/db/routines/vn/procedures/sale_setProblemRounding.sql b/db/routines/vn/procedures/sale_setProblemRounding.sql
index f58d00799..894749c7b 100644
--- a/db/routines/vn/procedures/sale_setProblemRounding.sql
+++ b/db/routines/vn/procedures/sale_setProblemRounding.sql
@@ -19,7 +19,7 @@ BEGIN
JOIN ticket t ON t.id = s.ticketFk
WHERE s.id = vSelf;
- CALL buyUltimate(vWarehouseFk, vShipped);
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, vShipped);
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
SELECT vSelf saleFk,
diff --git a/db/routines/vn/procedures/setParking.sql b/db/routines/vn/procedures/setParking.sql
index 1aa4f920a..b3edf350d 100644
--- a/db/routines/vn/procedures/setParking.sql
+++ b/db/routines/vn/procedures/setParking.sql
@@ -13,12 +13,6 @@ BEGIN
DECLARE vParkingFk INT;
DECLARE vLastWeek DATE;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
SET vParkingCode = REPLACE(vParkingCode, ' ', '');
SELECT id INTO vParkingFk
@@ -29,8 +23,6 @@ BEGIN
CALL util.throw('parkingNotExist');
END IF;
- START TRANSACTION;
-
SET vLastWeek = util.VN_CURDATE() - INTERVAL 1 WEEK;
-- Comprobamos si es una prep. previa, ticket, colección o shelving
@@ -45,7 +37,5 @@ BEGIN
ELSE
CALL util.throw('paramNotExist');
END IF;
-
- COMMIT;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/shelving_setParking.sql b/db/routines/vn/procedures/shelving_setParking.sql
index 0ff07ef5d..3e8717197 100644
--- a/db/routines/vn/procedures/shelving_setParking.sql
+++ b/db/routines/vn/procedures/shelving_setParking.sql
@@ -1,20 +1,20 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`shelving_setParking`(IN `vShelvingCode` VARCHAR(8), IN `vParkingFk` INT)
-proc: BEGIN
+BEGIN
/**
* Aparca una matrícula en un parking
*
* @param vShelvingCode code de la matrícula
* @param vParkingFk id del parking
*/
- INSERT INTO vn.shelvingLog (originFk, userFk, action , description,changedModel,changedModelId)
+ INSERT INTO shelvingLog (originFk, userFk, action , description,changedModel,changedModelId)
SELECT s.id, account.myUser_getId(), 'update', CONCAT("Cambio parking ",vShelvingCode," de ", p.code," a ", pNew.code),'Shelving',s.id
FROM parking p
JOIN shelving s ON s.parkingFk = p.id
JOIN parking pNew ON pNew.id = vParkingFk
WHERE s.code = vShelvingCode COLLATE utf8_unicode_ci;
- UPDATE vn.shelving
+ UPDATE shelving
SET parkingFk = vParkingFk,
parked = util.VN_NOW(),
isPrinted = TRUE
diff --git a/db/routines/vn/procedures/stockTraslation.sql b/db/routines/vn/procedures/stockTraslation.sql
index c681112f1..f9175dc2a 100644
--- a/db/routines/vn/procedures/stockTraslation.sql
+++ b/db/routines/vn/procedures/stockTraslation.sql
@@ -36,6 +36,6 @@ BEGIN
WHERE warehouse_id = vAuctionWarehouseFk
ON DUPLICATE KEY UPDATE quantity = tmp.item.quantity + VALUES(quantity);
- CALL buyUltimate(vAuctionWarehouseFk, vDated);
+ CALL buy_getUltimate(NULL, vAuctionWarehouseFk, vDated);
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_componentPreview.sql b/db/routines/vn/procedures/ticket_componentPreview.sql
index 729e3a743..4bcd8c8ec 100644
--- a/db/routines/vn/procedures/ticket_componentPreview.sql
+++ b/db/routines/vn/procedures/ticket_componentPreview.sql
@@ -56,13 +56,12 @@ BEGIN
FROM zone
WHERE id = vZoneFk;
- CALL buyUltimate(vWarehouseFk, vShipped);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vShipped);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY (
- SELECT
- vWarehouseFk AS warehouseFk,
- NULL AS available,
+ SELECT vWarehouseFk warehouseFk,
+ NULL available,
s.itemFk,
bu.buyFk,
vZoneFk zoneFk
diff --git a/db/routines/vn/procedures/ticket_setParking.sql b/db/routines/vn/procedures/ticket_setParking.sql
index 7935e0d60..bd2a5370a 100644
--- a/db/routines/vn/procedures/ticket_setParking.sql
+++ b/db/routines/vn/procedures/ticket_setParking.sql
@@ -21,11 +21,6 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- RESIGNAL;
- END;
-
INSERT INTO vn.ticketParking(ticketFk, parkingFk)
SELECT IFNULL(tc2.ticketFk, t.id), vParkingFk
FROM ticket t
diff --git a/db/routines/vn/procedures/ticket_setProblem.sql b/db/routines/vn/procedures/ticket_setProblem.sql
index 66d244d5a..fea6d9b7d 100644
--- a/db/routines/vn/procedures/ticket_setProblem.sql
+++ b/db/routines/vn/procedures/ticket_setProblem.sql
@@ -12,24 +12,28 @@ BEGIN
*/
DECLARE vTicketFk INT;
DECLARE vHasProblem INT;
+ DECLARE vIsProblemCalcNeeded BOOL;
DECLARE vDone BOOL;
- DECLARE vTicketList CURSOR FOR SELECT ticketFk, hasProblem FROM tmp.ticket;
+ DECLARE vTicketList CURSOR FOR
+ SELECT ticketFk, hasProblem, isProblemCalcNeeded
+ FROM tmp.ticket;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
OPEN vTicketList;
l: LOOP
SET vDone = FALSE;
- FETCH vTicketList INTO vTicketFk, vHasProblem;
+ FETCH vTicketList INTO vTicketFk, vHasProblem, vIsProblemCalcNeeded;
IF vDone THEN
LEAVE l;
END IF;
UPDATE ticket
- SET problem = CONCAT(
- IF(vHasProblem,
+ SET problem = IF(vIsProblemCalcNeeded,
+ CONCAT(IF(vHasProblem,
CONCAT(problem, ',', vProblemCode),
- REPLACE(problem, vProblemCode , '')))
+ REPLACE(problem, vProblemCode , ''))),
+ NULL)
WHERE id = vTicketFk;
END LOOP;
CLOSE vTicketList;
diff --git a/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql b/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql
new file mode 100644
index 000000000..8479550de
--- /dev/null
+++ b/db/routines/vn/procedures/ticket_setProblemRiskByClient.sql
@@ -0,0 +1,35 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setProblemRiskByClient`(
+ vClientFk INT
+)
+BEGIN
+/**
+ * Updates future ticket risk for a client.
+ *
+ * @param vClientFk Id client
+ */
+ DECLARE vDone INT DEFAULT FALSE;
+ DECLARE vTicketFk INT;
+ DECLARE vTickets CURSOR FOR
+ SELECT id
+ FROM ticket
+ WHERE clientFk = vClientFk
+ AND shipped >= util.VN_CURDATE()
+ AND refFk IS NULL;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vTickets;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vTickets INTO vTicketFk;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ CALL vn.ticket_setProblemRisk(vTicketFk);
+ END LOOP;
+ CLOSE vTickets;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/ticket_setProblemRounding.sql b/db/routines/vn/procedures/ticket_setProblemRounding.sql
index fb580eacf..551cf67d1 100644
--- a/db/routines/vn/procedures/ticket_setProblemRounding.sql
+++ b/db/routines/vn/procedures/ticket_setProblemRounding.sql
@@ -16,7 +16,7 @@ BEGIN
FROM ticket
WHERE id = vSelf;
- CALL buyUltimate(vWarehouseFk, vDated);
+ CALL buy_getUltimate(NULL, vWarehouseFk, vDated);
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
(INDEX(saleFk, isProblemCalcNeeded))
diff --git a/db/routines/vn/procedures/ticket_setRisk.sql b/db/routines/vn/procedures/ticket_setRisk.sql
index bd5d1e9f9..e3cbaf231 100644
--- a/db/routines/vn/procedures/ticket_setRisk.sql
+++ b/db/routines/vn/procedures/ticket_setRisk.sql
@@ -1,94 +1,83 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setRisk`(
- vClientFk INT)
+ vClientFk INT
+)
BEGIN
/**
- * Update the risk for a client with pending tickets
+ * Update the risk for a client with pending tickets.
*
* @param vClientFk Id cliente
*/
- DECLARE vHasDebt BOOL;
- DECLARE vStarted DATETIME;
-
- SELECT COUNT(*) INTO vHasDebt
- FROM `client`
- WHERE id = vClientFk
- AND typeFk = 'normal';
-
- IF vHasDebt THEN
-
- SELECT util.VN_CURDATE() - INTERVAL riskScope MONTH INTO vStarted
- FROM clientConfig;
-
+ IF (SELECT COUNT(*) FROM client WHERE id = vClientFk AND typeFk = 'normal') THEN
CREATE OR REPLACE TEMPORARY TABLE tTicketRisk
- (KEY (ticketFk))
+ (PRIMARY KEY (ticketFk))
ENGINE = MEMORY
- WITH ticket AS(
- SELECT id ticketFk,
- companyFk,
- DATE(shipped) dated,
- totalWithVat,
- ticket_isProblemCalcNeeded(id) isProblemCalcNeeded
- FROM vn.ticket
- WHERE clientFk = vClientFk
- AND refFk IS NULL
- AND NOT isDeleted
- AND IFNULL(totalWithVat, 0) <> 0
- AND shipped > vStarted
- ), balance AS(
- SELECT SUM(amount)amount, companyFk
- FROM (
- SELECT amount, companyFk
- FROM vn.clientRisk
- WHERE clientFk = vClientFk
- UNION ALL
- SELECT -(SUM(amount) / 100) amount, tm.companyFk
- FROM hedera.tpvTransaction t
- JOIN hedera.tpvMerchant tm ON t.id = t.merchantFk
- WHERE clientFk = vClientFk
- AND receiptFk IS NULL
- AND status = 'ok'
- ) sub
- WHERE companyFk
- GROUP BY companyFk
- ), uninvoiced AS(
+ WITH ticket AS (
+ SELECT t.id ticketFk,
+ t.companyFk,
+ DATE(t.shipped) dated,
+ t.totalWithVat,
+ ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
+ FROM vn.ticket t
+ JOIN vn.clientConfig cc
+ WHERE t.clientFk = vClientFk
+ AND t.refFk IS NULL
+ AND NOT t.isDeleted
+ AND IFNULL(t.totalWithVat, 0) <> 0
+ AND t.shipped > (util.VN_CURDATE() - INTERVAL cc.riskScope MONTH)
+ ), uninvoiced AS (
SELECT companyFk, dated, SUM(totalWithVat) amount
FROM ticket
- GROUP BY companyFk, dated
- ), receipt AS(
- SELECT companyFk, DATE(payed) dated, SUM(amountPaid) amount
- FROM vn.receipt
- WHERE clientFk = vClientFk
- AND payed > util.VN_CURDATE()
- GROUP BY companyFk, DATE(payed)
- ), risk AS(
+ GROUP BY companyFk, dated
+ ), companies AS (
+ SELECT DISTINCT companyFk FROM uninvoiced
+ ), balance AS (
+ SELECT SUM(IFNULL(amount, 0))amount, companyFk
+ FROM (
+ SELECT cr.amount, c.companyFk
+ FROM companies c
+ LEFT JOIN vn.clientRisk cr ON cr.companyFk = c.companyFk
+ AND cr.clientFk = vClientFk
+ UNION ALL
+ SELECT -(SUM(t.amount) / 100) amount, c.companyFk
+ FROM companies c
+ LEFT JOIN hedera.tpvMerchant tm ON tm.companyFk = c.companyFk
+ LEFT JOIN hedera.tpvTransaction t ON t.merchantFk = tm.id
+ AND t.clientFk = vClientFk
+ AND t.receiptFk IS NULL
+ AND t.`status` = 'ok'
+ ) sub
+ WHERE companyFk
+ GROUP BY companyFk
+ ), receipt AS (
+ SELECT r.companyFk, DATE(r.payed) dated, SUM(r.amountPaid) amount
+ FROM vn.receipt r
+ JOIN companies c ON c.companyFk = r.companyFk
+ WHERE r.clientFk = vClientFk
+ AND r.payed > util.VN_CURDATE()
+ GROUP BY r.companyFk, DATE(r.payed)
+ ), risk AS (
SELECT b.companyFk,
- ui.dated,
- SUM(ui.amount) OVER (PARTITION BY b.companyFk ORDER BY ui.dated ) +
+ ui.dated,
+ SUM(ui.amount) OVER (PARTITION BY b.companyFk ORDER BY ui.dated) +
b.amount +
SUM(IFNULL(r.amount, 0)) amount
FROM balance b
JOIN uninvoiced ui ON ui.companyFk = b.companyFk
- LEFT JOIN receipt r ON r.dated > ui.dated AND r.companyFk = ui.companyFk
+ LEFT JOIN receipt r ON r.dated > ui.dated
+ AND r.companyFk = ui.companyFk
GROUP BY b.companyFk, ui.dated
- )
- SELECT ti.ticketFk, r.amount, ti.isProblemCalcNeeded
- FROM ticket ti
- JOIN risk r ON r.dated = ti.dated AND r.companyFk = ti.companyFk;
+ )
+ SELECT ti.ticketFk, r.amount, ti.isProblemCalcNeeded
+ FROM ticket ti
+ JOIN risk r ON r.dated = ti.dated
+ AND r.companyFk = ti.companyFk;
UPDATE ticket t
JOIN tTicketRisk tr ON tr.ticketFk = t.id
- SET t.risk = tr.amount
- WHERE tr.isProblemCalcNeeded
- ORDER BY t.id;
-
- UPDATE ticket t
- JOIN tTicketRisk tr ON tr.ticketFk = t.id
- SET t.risk = NULL
- WHERE tr.isProblemCalcNeeded
- ORDER BY t.id;
+ SET t.risk = IF(tr.isProblemCalcNeeded, tr.amount, NULL);
DROP TEMPORARY TABLE tTicketRisk;
- END IF;
+ END IF;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/ticket_splitItemPackingType.sql b/db/routines/vn/procedures/ticket_splitItemPackingType.sql
index c2ec50fd9..5ae9fb9bc 100644
--- a/db/routines/vn/procedures/ticket_splitItemPackingType.sql
+++ b/db/routines/vn/procedures/ticket_splitItemPackingType.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_splitItemPackingType`(
vSelf INT,
- vItemPackingTypeFk VARCHAR(1)
+ vOriginalItemPackingTypeFk VARCHAR(1)
)
BEGIN
/**
@@ -9,7 +9,7 @@ BEGIN
* Respeta el id inicial para el tipo propuesto.
*
* @param vSelf Id ticket
- * @param vItemPackingTypeFk Tipo para el que se reserva el número de ticket original
+ * @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
*/
DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
@@ -23,7 +23,7 @@ BEGIN
SELECT itemPackingTypeFk
FROM tSaleGroup
WHERE itemPackingTypeFk IS NOT NULL
- ORDER BY (itemPackingTypeFk = vItemPackingTypeFk) DESC;
+ ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
diff --git a/db/routines/vn/procedures/zone_getAddresses.sql b/db/routines/vn/procedures/zone_getAddresses.sql
index ce7b0204e..0622ece1b 100644
--- a/db/routines/vn/procedures/zone_getAddresses.sql
+++ b/db/routines/vn/procedures/zone_getAddresses.sql
@@ -1,55 +1,57 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zone_getAddresses`(
vSelf INT,
- vLanded DATE
+ vShipped DATE,
+ vDepartmentFk INT
)
BEGIN
/**
* Devuelve un listado de todos los clientes activos
* con consignatarios a los que se les puede
- * vender producto para esa zona y no tiene un ticket
- * para ese día.
+ * vender producto para esa zona.
*
* @param vSelf Id de zona
- * @param vDated Fecha de entrega
+ * @param vShipped Fecha de envio
+ * @param vDepartmentFk Id de departamento
* @return Un select
*/
CALL zone_getPostalCode(vSelf);
- WITH notHasTicket AS (
- SELECT id
- FROM vn.client
- WHERE id NOT IN (
- SELECT clientFk
- FROM vn.ticket
- WHERE landed BETWEEN vLanded AND util.dayEnd(vLanded)
- )
+ WITH clientWithTicket AS (
+ SELECT clientFk
+ FROM vn.ticket
+ WHERE shipped BETWEEN vShipped AND util.dayEnd(vShipped)
)
- SELECT c.id clientFk,
- c.name,
- c.phone,
- bt.description,
- c.salesPersonFk,
- u.name username,
- aai.invoiced,
- cnb.lastShipped
- FROM vn.client c
- JOIN notHasTicket ON notHasTicket.id = c.id
- LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
- JOIN vn.`address` a ON a.clientFk = c.id
- JOIN vn.postCode pc ON pc.code = a.postalCode
- JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
- JOIN vn.zoneGeo zg ON zg.name = a.postalCode
- JOIN tmp.zoneNodes zn ON zn.geoFk = pc.geoFk
- LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
- LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
- JOIN vn.clientType ct ON ct.code = c.typeFk
- JOIN vn.businessType bt ON bt.code = c.businessTypeFk
- WHERE a.isActive
- AND c.isActive
- AND ct.code = 'normal'
- AND bt.code <> 'worker'
- GROUP BY c.id;
+ SELECT c.id,
+ c.name,
+ c.phone,
+ bt.description,
+ c.salesPersonFk,
+ u.name username,
+ aai.invoiced,
+ cnb.lastShipped,
+ cwt.clientFk
+ FROM vn.client c
+ JOIN vn.worker w ON w.id = c.salesPersonFk
+ JOIN vn.workerDepartment wd ON wd.workerFk = w.id
+ JOIN vn.department d ON d.id = wd.departmentFk
+ LEFT JOIN clientWithTicket cwt ON cwt.clientFk = c.id
+ LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
+ JOIN vn.`address` a ON a.clientFk = c.id
+ JOIN vn.postCode pc ON pc.code = a.postalCode
+ JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
+ JOIN vn.zoneGeo zg ON zg.name = a.postalCode
+ JOIN tmp.zoneNodes zn ON zn.geoFk = pc.geoFk
+ LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
+ LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
+ JOIN vn.clientType ct ON ct.code = c.typeFk
+ JOIN vn.businessType bt ON bt.code = c.businessTypeFk
+ WHERE a.isActive
+ AND c.isActive
+ AND ct.code = 'normal'
+ AND bt.code <> 'worker'
+ AND (d.id = vDepartmentFk OR NOT vDepartmentFk)
+ GROUP BY c.id;
DROP TEMPORARY TABLE tmp.zoneNodes;
END$$
diff --git a/db/routines/vn/triggers/itemMinimumQuantity_beforeInsert.sql b/db/routines/vn/triggers/itemMinimumQuantity_beforeInsert.sql
index 8833ac968..3ee6c0b1a 100644
--- a/db/routines/vn/triggers/itemMinimumQuantity_beforeInsert.sql
+++ b/db/routines/vn/triggers/itemMinimumQuantity_beforeInsert.sql
@@ -4,5 +4,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`itemMinimumQuantity_b
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+ CALL itemMinimumQuantity_check(NEW.id, NEW.itemFk, NEW.started, NEW.ended, NEW.warehouseFk);
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/itemMinimumQuantity_beforeUpdate.sql b/db/routines/vn/triggers/itemMinimumQuantity_beforeUpdate.sql
index ef030f9f9..6f082551c 100644
--- a/db/routines/vn/triggers/itemMinimumQuantity_beforeUpdate.sql
+++ b/db/routines/vn/triggers/itemMinimumQuantity_beforeUpdate.sql
@@ -4,5 +4,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`itemMinimumQuantity_b
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
+ CALL itemMinimumQuantity_check(NEW.id, NEW.itemFk, NEW.started, NEW.ended, NEW.warehouseFk);
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/itemShelving_beforeUpdate.sql b/db/routines/vn/triggers/itemShelving_beforeUpdate.sql
index 214c64b45..961d89f65 100644
--- a/db/routines/vn/triggers/itemShelving_beforeUpdate.sql
+++ b/db/routines/vn/triggers/itemShelving_beforeUpdate.sql
@@ -9,9 +9,5 @@ BEGIN
SET NEW.userFk = account.myUser_getId();
END IF;
- IF (NEW.visible <> OLD.visible) THEN
- SET NEW.available = GREATEST(NEW.available + NEW.visible - OLD.visible, 0);
- END IF;
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticket_beforeUpdate.sql b/db/routines/vn/triggers/ticket_beforeUpdate.sql
index 72831bc3d..6d5d7f908 100644
--- a/db/routines/vn/triggers/ticket_beforeUpdate.sql
+++ b/db/routines/vn/triggers/ticket_beforeUpdate.sql
@@ -8,13 +8,22 @@ BEGIN
SET NEW.editorFk = account.myUser_getId();
IF NOT (NEW.routeFk <=> OLD.routeFk) THEN
- INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`)
- SELECT r.id
- FROM vn.route r
- WHERE r.isOk = FALSE
- AND r.id IN (OLD.routeFk,NEW.routeFk)
- AND r.created >= util.VN_CURDATE()
- GROUP BY r.id;
+ IF NEW.isSigned AND NOT (
+ SELECT (COUNT(s.id) = COUNT(cb.saleFk)
+ AND SUM(s.quantity) = SUM(cb.quantity))
+ FROM sale s
+ LEFT JOIN claimBeginning cb ON cb.saleFk = s.id
+ WHERE s.ticketFk = NEW.id
+ ) THEN
+ CALL util.throw('A signed ticket cannot be rerouted');
+ END IF;
+ INSERT IGNORE INTO routeRecalc(routeFk)
+ SELECT id
+ FROM `route`
+ WHERE NOT isOk
+ AND id IN (OLD.routeFk, NEW.routeFk)
+ AND created >= util.VN_CURDATE()
+ GROUP BY id;
END IF;
IF NOT (DATE(NEW.shipped) <=> DATE(OLD.shipped)) THEN
diff --git a/db/versions/11042-turquoiseAspidistra/00-firstScript.sql b/db/versions/11042-turquoiseAspidistra/00-firstScript.sql
new file mode 100644
index 000000000..43038ab6d
--- /dev/null
+++ b/db/versions/11042-turquoiseAspidistra/00-firstScript.sql
@@ -0,0 +1,53 @@
+ALTER TABLE bs.waste ADD buyerFk int(10) unsigned NOT NULL;
+USE vn;
+CREATE OR REPLACE TEMPORARY TABLE tBuyers
+ ENGINE = MEMORY
+ WITH tDistinctBuyers AS (
+ SELECT DISTINCT buyer
+ FROM bs.waste w
+ )
+ SELECT buyer, u.id
+ FROM tDistinctBuyers tdb
+ JOIN account.`user` u ON u.name = tdb.buyer COLLATE utf8mb3_unicode_ci;
+
+UPDATE bs.waste w
+ JOIN tBuyers tb ON tb.buyer = w.buyer
+ SET w.buyerFk = tb.id;
+
+DROP TEMPORARY TABLE tBuyers;
+
+ALTER TABLE bs.waste
+ DROP PRIMARY KEY,
+ DROP COLUMN family,
+ DROP COLUMN rate,
+ DROP COLUMN buyer;
+
+ALTER TABLE bs.waste CHANGE buyerFk buyerFk int(10) unsigned NOT NULL AFTER `week`;
+ALTER TABLE bs.waste ADD CONSTRAINT waste_user_FK FOREIGN KEY (buyerFk) REFERENCES account.user(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
+ALTER TABLE bs.waste ADD saleQuantity int(11) DEFAULT NULL NULL;
+ALTER TABLE bs.waste MODIFY COLUMN saleTotal decimal(10,2) DEFAULT NULL NULL;
+ALTER TABLE bs.waste MODIFY COLUMN saleWaste decimal(10,2) DEFAULT NULL NULL;
+ALTER TABLE bs.waste CHANGE saleWaste saleInternalWaste decimal(10,2) DEFAULT NULL NULL;
+ALTER TABLE bs.waste ADD saleExternalWaste decimal(10,2) DEFAULT NULL NULL;
+ALTER TABLE bs.waste CHANGE saleQuantity saleQuantity decimal(10,2) DEFAULT NULL NULL AFTER itemTypeFk;
+ALTER TABLE bs.waste CHANGE itemFk itemFk int(11) DEFAULT 0 NOT NULL AFTER itemTypeFk;
+
+CREATE OR REPLACE TEMPORARY TABLE tWasteUnique
+ SELECT *
+ FROM bs.waste
+ GROUP BY `year`, `week`, buyerFk, itemTypeFk, itemFk
+ HAVING COUNT(*) > 1;
+
+DELETE w.* FROM bs.waste w
+ JOIN tWasteUnique twu ON twu.`year` = w.`year`
+ AND twu.`week` = w.`week`
+ AND twu.`buyerFk` = w.`buyerFk`
+ AND twu.`itemTypeFk` = w.`itemTypeFk`
+ AND twu.`itemFk` = w.`itemFk`;
+
+INSERT INTO bs.waste
+ SELECT * FROM tWasteUnique;
+
+ALTER TABLE bs.waste ADD CONSTRAINT waste_pk PRIMARY KEY (`year`, `week`, buyerFk, itemTypeFk, itemFk);
+
+DROP TEMPORARY TABLE tWasteUnique;
diff --git a/db/versions/11118-limeCymbidium/00-firstScript.sql b/db/versions/11118-limeCymbidium/00-firstScript.sql
index 3921a8a13..b15dfbd41 100644
--- a/db/versions/11118-limeCymbidium/00-firstScript.sql
+++ b/db/versions/11118-limeCymbidium/00-firstScript.sql
@@ -16,6 +16,4 @@ INSERT IGNORE INTO account.roleInherit (`role`,`inheritsFrom`)
UPDATE salix.ACL
SET principalId='$authenticated'
- WHERE id=264;
-
-
+ WHERE id=(SELECT id FROM salix.ACL WHERE model='StarredModule' and property='*' and `accessType`='*');
diff --git a/db/versions/11152-goldenRaphis/00-firstScript.sql b/db/versions/11152-goldenRaphis/00-firstScript.sql
new file mode 100644
index 000000000..ad58a570a
--- /dev/null
+++ b/db/versions/11152-goldenRaphis/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.ticketSms__ DROP FOREIGN KEY IF EXISTS ticketSms_FK;
+ALTER TABLE vn.ticketSms__ ADD CONSTRAINT ticketSms_FK FOREIGN KEY (smsFk) REFERENCES vn.sms(id) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/db/versions/11155-purpleMoss/00-firstScript.sql b/db/versions/11155-purpleMoss/00-firstScript.sql
new file mode 100644
index 000000000..fec63b193
--- /dev/null
+++ b/db/versions/11155-purpleMoss/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.invoiceInConfig
+ ADD dueDateMarginDays INT UNSIGNED DEFAULT 2 NULL;
diff --git a/db/versions/11157-limeDendro/00-firstScript.sql b/db/versions/11157-limeDendro/00-firstScript.sql
new file mode 100644
index 000000000..fa13f14a2
--- /dev/null
+++ b/db/versions/11157-limeDendro/00-firstScript.sql
@@ -0,0 +1,11 @@
+
+ALTER TABLE IF EXISTS vn.sectorCollectionSaleGroup DROP FOREIGN KEY sectorCollectionSaleGroup_ibfk_3;
+ALTER TABLE IF EXISTS vn.sectorCollectionSaleGroup DROP FOREIGN KEY sectorCollectionSaleGroup_ibfk_2;
+ALTER TABLE IF EXISTS vn.sectorCollectionSaleGroup DROP KEY saleGroupFk;
+
+
+ALTER TABLE IF EXISTS vn.sectorCollectionSaleGroup ADD CONSTRAINT sectorCollectionSaleGroup_saleGroup_FK
+ FOREIGN KEY (saleGroupFk) REFERENCES vn.saleGroup(id) ON DELETE CASCADE ON UPDATE CASCADE;
+
+
+ALTER TABLE IF EXISTS vn.sectorCollectionSaleGroup ADD CONSTRAINT sectorCollectionSaleGroup_unique UNIQUE KEY (sectorCollectionFk,saleGroupFk);
\ No newline at end of file
diff --git a/db/versions/11158-redRaphis/00-firstScript.sql b/db/versions/11158-redRaphis/00-firstScript.sql
new file mode 100644
index 000000000..7fe41b32b
--- /dev/null
+++ b/db/versions/11158-redRaphis/00-firstScript.sql
@@ -0,0 +1,11 @@
+-- Place your SQL code here
+
+ALTER TABLE IF EXISTS vn.itemShelvingSaleReserve
+ADD IF NOT EXISTS sectorFk int(11) NULL;
+
+ALTER TABLE IF EXISTS vn.itemShelvingSaleReserve
+DROP FOREIGN KEY IF EXISTS itemShelvingSaleReserve_sector_FK;
+
+ALTER TABLE IF EXISTS vn.itemShelvingSaleReserve
+ADD CONSTRAINT itemShelvingSaleReserve_sector_FK FOREIGN KEY (id)
+REFERENCES vn.sector(id) ON DELETE RESTRICT ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/db/versions/11159-redIvy/00-firstScript.sql b/db/versions/11159-redIvy/00-firstScript.sql
new file mode 100644
index 000000000..d0b563b7a
--- /dev/null
+++ b/db/versions/11159-redIvy/00-firstScript.sql
@@ -0,0 +1,3 @@
+
+
+ALTER TABLE vn.itemShelvingSale MODIFY COLUMN IF EXISTS isPicked tinyint(1) DEFAULT 1 NOT NULL;
diff --git a/db/versions/11160-blueRoebelini/00-firstScript.sql b/db/versions/11160-blueRoebelini/00-firstScript.sql
new file mode 100644
index 000000000..235eda7fd
--- /dev/null
+++ b/db/versions/11160-blueRoebelini/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.state DROP FOREIGN KEY state_ibfk_1;
+ALTER TABLE vn.state ADD CONSTRAINT state_ibfk_1 FOREIGN KEY (alertLevel) REFERENCES vn.alertLevel(id) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11161-limeOak/00-firstScript.sql b/db/versions/11161-limeOak/00-firstScript.sql
new file mode 100644
index 000000000..aab05fa49
--- /dev/null
+++ b/db/versions/11161-limeOak/00-firstScript.sql
@@ -0,0 +1,8 @@
+
+ALTER TABLE dipole.expedition_PrintOut ADD isChecked BOOL DEFAULT FALSE NOT NULL COMMENT 'Indica si la expedición ha sido revisada por un revisor';
+
+DELETE FROM salix.ACL
+ WHERE model = 'Expedition_PrintOut';
+
+INSERT INTO salix.ACL ( model, property, accessType, permission, principalType, principalId)
+VALUES( 'Expedition_PrintOut', '*', '*', 'ALLOW', 'ROLE', 'production');
\ No newline at end of file
diff --git a/db/versions/11164-turquoiseRoebelini/00-firstScript.sql b/db/versions/11164-turquoiseRoebelini/00-firstScript.sql
new file mode 100644
index 000000000..be45d9e95
--- /dev/null
+++ b/db/versions/11164-turquoiseRoebelini/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.productionConfigLog ADD COLUMN IF NOT EXISTS summaryId varchar(30);
+ALTER TABLE vn.agencyLog ADD COLUMN IF NOT EXISTS summaryId varchar(30);
diff --git a/db/versions/11166-azureDracena/00-firstScript.sql b/db/versions/11166-azureDracena/00-firstScript.sql
new file mode 100644
index 000000000..ba087b5a8
--- /dev/null
+++ b/db/versions/11166-azureDracena/00-firstScript.sql
@@ -0,0 +1,25 @@
+CREATE OR REPLACE TABLE `salix`.`ACLLog` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `originFk` int(11) DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
+ `action` set('insert','update','delete','select') NOT NULL,
+ `creationDate` timestamp NULL DEFAULT current_timestamp(),
+ `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `changedModel` enum('Acl') NOT NULL DEFAULT 'Acl',
+ `oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
+ `newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
+ `changedModelId` int(11) NOT NULL,
+ `changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `logRateuserFk` (`userFk`),
+ KEY `ACLLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
+ KEY `ACLLog_originFk` (`originFk`,`creationDate`),
+ CONSTRAINT `aclUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+
+ALTER TABLE salix.ACL
+ ADD editorFk int(10) unsigned DEFAULT NULL NULL;
+
+ALTER TABLE vn.ticket
+ CHANGE editorFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER risk;
diff --git a/db/versions/11168-redFern/00-firstScript.sql b/db/versions/11168-redFern/00-firstScript.sql
new file mode 100644
index 000000000..f91780e37
--- /dev/null
+++ b/db/versions/11168-redFern/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.calendar
+ ADD CONSTRAINT calendar_user_FK FOREIGN KEY (editorFk) REFERENCES account.`user`(id);
diff --git a/db/versions/11169-azureCyca/00-firstScript.sql b/db/versions/11169-azureCyca/00-firstScript.sql
new file mode 100644
index 000000000..49adcfc05
--- /dev/null
+++ b/db/versions/11169-azureCyca/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE IF EXISTS vn.itemShelving
+MODIFY COLUMN IF EXISTS isSplit tinyint(1) DEFAULT 0 NOT NULL COMMENT 'Este valor cambia al splitar un carro que se ha quedado en holanda';
diff --git a/db/versions/11177-crimsonPaniculata/00-firstScript.sql b/db/versions/11177-crimsonPaniculata/00-firstScript.sql
new file mode 100644
index 000000000..79bcf1291
--- /dev/null
+++ b/db/versions/11177-crimsonPaniculata/00-firstScript.sql
@@ -0,0 +1,6 @@
+-- Place your SQL code here
+
+ALTER TABLE vn.itemShelvingSaleReserve DROP FOREIGN KEY IF EXISTS itemShelvingSaleReserve_sector_FK;
+
+ALTER TABLE vn.itemShelvingSaleReserve ADD CONSTRAINT itemShelvingSaleReserve_sector_FK
+ FOREIGN KEY IF NOT EXISTS (sectorFk) REFERENCES vn.sector(id) ON DELETE RESTRICT ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/db/versions/11179-whiteLaurel/00-firstScript.sql b/db/versions/11179-whiteLaurel/00-firstScript.sql
new file mode 100644
index 000000000..4a4e32c9d
--- /dev/null
+++ b/db/versions/11179-whiteLaurel/00-firstScript.sql
@@ -0,0 +1,2 @@
+RENAME TABLE vn.silexACL TO vn.silexACL__;
+ALTER TABLE vn.silexACL__ COMMENT='@deprecated 2024-08-05 refs #7820';
diff --git a/e2e/paths/08-route/01_summary.spec.js b/e2e/paths/08-route/01_summary.spec.js
deleted file mode 100644
index 44f66ba2d..000000000
--- a/e2e/paths/08-route/01_summary.spec.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route summary path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'route');
- await page.waitToClick(selectors.routeIndex.previewButton);
- await page.waitToClick(selectors.routeSummary.goToRouteSummaryButton);
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the first route summary section', async() => {
- await page.waitForState('route.card.summary');
- });
-
- it(`should display details from the route on the header`, async() => {
- await page.waitForTextInElement(selectors.routeSummary.header, 'first route');
- const result = await page.waitToGetProperty(selectors.routeSummary.header, 'innerText');
-
- expect(result).toContain('first route');
- });
-
- it('should display some route details like the cost', async() => {
- const result = await page.waitToGetProperty(selectors.routeSummary.cost, 'innerText');
-
- expect(result).toContain('€10.00');
- });
-
- it('should click on the first ticket ID making the descriptor popover visible', async() => {
- await page.waitForState('route.card.summary');
- await page.waitForTimeout(250);
- await page.waitToClick(selectors.routeSummary.firstTicketID);
- await page.waitForSelector(selectors.routeSummary.firstTicketDescriptor);
- const visible = await page.isVisible(selectors.routeSummary.firstTicketDescriptor);
-
- expect(visible).toBe(true);
- });
-
- it('should close the ticket descriptor', async() => {
- await page.closePopup();
- });
-
- it('should click on the first alias making the client descriptor popover visible', async() => {
- await page.waitToClick(selectors.routeSummary.firstAlias);
- await page.waitForSelector(selectors.routeSummary.firstClientDescriptor);
- const visible = await page.isVisible(selectors.routeSummary.firstClientDescriptor);
-
- expect(visible).toBe(true);
- });
-
- it('should close the client descriptor', async() => {
- await page.closePopup();
- });
-});
diff --git a/e2e/paths/08-route/02_basic_data.spec.js b/e2e/paths/08-route/02_basic_data.spec.js
deleted file mode 100644
index 7ab7dda42..000000000
--- a/e2e/paths/08-route/02_basic_data.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route basic Data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('delivery', 'route');
- await page.accessToSearchResult('1');
- await page.accessToSection('route.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should edit the route basic data and confirm the route was edited', async() => {
- const nextMonth = Date.vnNew();
- nextMonth.setMonth(nextMonth.getMonth() + 1);
- nextMonth.setUTCHours(0, 0, 0, 0);
-
- const form = 'vn-route-basic-data form';
- const values = {
- worker: 'adminBossNick',
- vehicle: '1111-IMK',
- created: nextMonth,
- kmStart: 1,
- kmEnd: 2,
- started: '08:00',
- finished: '12:30',
- };
-
- const message = await page.sendForm(form, values);
- await page.reloadSection('route.card.basicData');
- const formValues = await page.fetchForm(form, Object.keys(values));
-
- expect(message.isSuccess).toBeTrue();
- expect(formValues).toEqual(values);
- });
-});
diff --git a/e2e/paths/08-route/03_create_and_clone.spec.js b/e2e/paths/08-route/03_create_and_clone.spec.js
deleted file mode 100644
index 31c0cfc18..000000000
--- a/e2e/paths/08-route/03_create_and_clone.spec.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route create path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'route');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- describe('as employee', () => {
- it('should click on the add new route button and open the creation form', async() => {
- await page.waitToClick(selectors.routeIndex.addNewRouteButton);
- await page.waitForState('route.create');
- });
-
- it(`should attempt to create a new route but fail since employee has no access rights`, async() => {
- await page.write(selectors.createRouteView.description, 'faster faster!!');
- await page.waitToClick(selectors.createRouteView.submitButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Access Denied');
- });
- });
-
- describe('as delivery', () => {
- beforeAll(async() => {
- await page.login('delivery');
- await page.selectModule('route');
- });
-
- it('should again click on the add new route button and open the creation form', async() => {
- await page.waitToClick(selectors.routeIndex.addNewRouteButton);
- await page.waitForState('route.create');
- });
-
- it(`should create a new route`, async() => {
- await page.autocompleteSearch(selectors.createRouteView.worker, 'teamManagerNick');
- await page.pickDate(selectors.createRouteView.createdDatePicker);
- await page.autocompleteSearch(selectors.createRouteView.vehicleAuto, '4444-IMK');
- await page.autocompleteSearch(selectors.createRouteView.agency, 'Teleportation device');
- await page.write(selectors.createRouteView.description, 'faster faster!!');
- await page.waitToClick(selectors.createRouteView.submitButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should confirm the redirection to the created route summary`, async() => {
- await page.waitForState('route.card.summary');
- });
-
- it(`should navigate back to the route index`, async() => {
- await page.waitToClick(selectors.globalItems.returnToModuleIndexButton);
- await page.waitForState('route.index');
- });
-
- let count;
- it(`should count the amount of routes before clonation`, async() => {
- await page.waitForFunction(selector => {
- return document.querySelectorAll(selector).length > 6;
- }, {}, selectors.routeIndex.anyResult);
- count = await page.countElement(selectors.routeIndex.anyResult);
-
- expect(count).toBeGreaterThanOrEqual(7);
- });
-
- it(`should clone the first route`, async() => {
- await page.waitToClick(selectors.routeIndex.firstRouteCheckbox);
- await page.waitToClick(selectors.routeIndex.cloneButton);
- await page.waitToClick(selectors.routeIndex.submitClonationButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should reload the section and count the amount of routes after clonation`, async() => {
- await page.waitForNumberOfElements(selectors.routeIndex.anyResult, count + 1);
- const result = await page.countElement(selectors.routeIndex.anyResult);
-
- expect(result).toEqual(count + 1);
- });
- });
-});
diff --git a/e2e/paths/08-route/04_tickets.spec.js b/e2e/paths/08-route/04_tickets.spec.js
deleted file mode 100644
index c890162a1..000000000
--- a/e2e/paths/08-route/04_tickets.spec.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route tickets path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('delivery', 'route');
- await page.accessToSearchResult('2');
- await page.accessToSection('route.card.tickets');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should modify the first ticket priority', async() => {
- await page.writeOnEditableTD(selectors.routeTickets.firstTicketPriority, '9');
- await page.keyboard.press('Enter');
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should confirm the buscaman button is disabled', async() => {
- await page.waitForSelector(`${selectors.routeTickets.buscamanButton}.disabled`);
- });
-
- it('should check the first ticket checkbox and confirm the buscamanButton button is no longer disabled', async() => {
- await page.waitForSelector(`${selectors.routeTickets.buscamanButton}.disabled`, {visible: false});
- });
-
- it('should check the route volume on the descriptor', async() => {
- const result = await page.waitToGetProperty(selectors.routeDescriptor.volume, 'innerText');
-
- expect(result).toEqual('0.2 / 50 m³');
- });
-
- it('should count how many tickets are in route', async() => {
- const result = await page.countElement(selectors.routeTickets.anyTicket);
-
- expect(result).toEqual(1);
- });
-
- it('should delete the first ticket in route', async() => {
- await page.waitToClick(selectors.routeTickets.firstTicketDeleteButton);
- await page.waitToClick(selectors.routeTickets.confirmButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Ticket removed from route');
- });
-
- it('should now count how many tickets are in route to find one less', async() => {
- await page.waitForNumberOfElements(selectors.routeTickets.anyTicket, 0);
- });
-});
diff --git a/front/salix/routes.js b/front/salix/routes.js
index be210b749..2c6f1b848 100644
--- a/front/salix/routes.js
+++ b/front/salix/routes.js
@@ -4,7 +4,17 @@ import getMainRoute from 'core/lib/get-main-route';
config.$inject = ['$stateProvider', '$urlRouterProvider'];
function config($stateProvider, $urlRouterProvider) {
$urlRouterProvider
- .otherwise('/');
+ .otherwise(async($injector, {$location}) => {
+ const prefix = '#!';
+ if (!$location.$$path) return window.location.href = `/${prefix}/`;
+
+ const url = $location.$$absUrl
+ .replace('5000', '9000')
+ .replace('salix', 'lilium')
+ .replace(prefix, '#')
+ .replace('client', 'customer');
+ window.location.href = url;
+ });
$stateProvider
.state('layout', {
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index 382a2824c..06538a524 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -233,5 +233,7 @@
"It has been invoiced but the PDF could not be generated": "It has been invoiced but the PDF could not be generated",
"It has been invoiced but the PDF of refund not be generated": "It has been invoiced but the PDF of refund not be generated",
"Cannot add holidays on this day": "Cannot add holidays on this day",
- "Cannot send mail": "Cannot send mail"
+ "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"
}
\ No newline at end of file
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index e2be5d013..e1f7fd655 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -367,5 +367,7 @@
"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": "Não é possível enviar o email",
- "CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos"
-}
+ "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"
+}
\ No newline at end of file
diff --git a/modules/client/back/methods/client/hasCustomerRole.js b/modules/client/back/methods/client/hasCustomerRole.js
index e790d6e3a..08e90077e 100644
--- a/modules/client/back/methods/client/hasCustomerRole.js
+++ b/modules/client/back/methods/client/hasCustomerRole.js
@@ -29,7 +29,7 @@ module.exports = Self => {
SELECT COUNT(*) > 0 isCustomer
FROM salix.Account A
JOIN salix.Role r ON r.id = A.roleFK
- WHERE r.name = 'customer'
+ WHERE r.name IN ('customer', 'supplier')
AND A.id IN (?)`;
const [result] = await Self.rawSql(query, [id], myOptions);
const {isCustomer} = result;
diff --git a/modules/client/back/methods/defaulter/filter.js b/modules/client/back/methods/defaulter/filter.js
index 0bfa7659b..40756b236 100644
--- a/modules/client/back/methods/defaulter/filter.js
+++ b/modules/client/back/methods/defaulter/filter.js
@@ -85,6 +85,7 @@ module.exports = Self => {
LEFT JOIN (
SELECT MAX(started), clientFk, finished
FROM recovery
+ GROUP BY clientFk
) r ON r.clientFk = c.id
LEFT JOIN workerDepartment wd ON wd.workerFk = u.id
JOIN department dp ON dp.id = wd.departmentFk
diff --git a/modules/entry/back/methods/entry/addFromBuy.js b/modules/entry/back/methods/entry/addFromBuy.js
index e5cc427a8..c75c1935a 100644
--- a/modules/entry/back/methods/entry/addFromBuy.js
+++ b/modules/entry/back/methods/entry/addFromBuy.js
@@ -52,8 +52,8 @@ module.exports = Self => {
else {
const userConfig = await models.UserConfig.findById(userId, {fields: ['warehouseFk']}, myOptions);
await Self.rawSql(
- 'CALL vn.buyUltimate(?,?)',
- [userConfig.warehouseFk, null],
+ 'CALL buy_getUltimate(?, ?, ?)',
+ [args.item, userConfig.warehouseFk, null],
myOptions
);
let buyUltimate = await Self.rawSql(
diff --git a/modules/entry/back/methods/entry/buyLabel.js b/modules/entry/back/methods/entry/buyLabel.js
index d9b0ebf1d..919f7c4d7 100644
--- a/modules/entry/back/methods/entry/buyLabel.js
+++ b/modules/entry/back/methods/entry/buyLabel.js
@@ -1,6 +1,6 @@
module.exports = Self => {
Self.remoteMethodCtx('buyLabel', {
- description: 'Returns the entry buys labels',
+ description: 'Returns the entry buy labels',
accessType: 'READ',
accepts: [
{
diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js
index 5963e9c72..dcb1e3158 100644
--- a/modules/entry/back/methods/entry/filter.js
+++ b/modules/entry/back/methods/entry/filter.js
@@ -95,6 +95,16 @@ module.exports = Self => {
type: 'date',
description: `The to date filter`
},
+ {
+ arg: 'fromShipped',
+ type: 'date',
+ description: `The from shipped date filter`
+ },
+ {
+ arg: 'toShipped',
+ type: 'date',
+ description: `The to shipped date filter`
+ },
{
arg: 'days',
type: 'number',
@@ -133,8 +143,12 @@ module.exports = Self => {
return {'e.created': {gte: value}};
case 'from':
return {'t.landed': {gte: value}};
+ case 'fromShipped':
+ return {'t.shipped': {gte: value}};
case 'to':
return {'t.landed': {lte: value}};
+ case 'toShipped':
+ return {'t.shipped': {lte: value}};
case 'id':
case 'isBooked':
case 'isConfirmed':
diff --git a/modules/entry/back/methods/entry/getBuys.js b/modules/entry/back/methods/entry/getBuys.js
index b6809c8c5..245dada09 100644
--- a/modules/entry/back/methods/entry/getBuys.js
+++ b/modules/entry/back/methods/entry/getBuys.js
@@ -1,5 +1,4 @@
const UserError = require('vn-loopback/util/user-error');
-
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
module.exports = Self => {
@@ -102,7 +101,8 @@ module.exports = Self => {
'groupingMode',
'inkFk',
'originFk',
- 'producerFk'
+ 'producerFk',
+ 'comment'
],
include: [
{
diff --git a/modules/entry/back/methods/entry/importBuys.js b/modules/entry/back/methods/entry/importBuys.js
index 812775a1b..e3fd653bb 100644
--- a/modules/entry/back/methods/entry/importBuys.js
+++ b/modules/entry/back/methods/entry/importBuys.js
@@ -73,7 +73,8 @@ module.exports = Self => {
}, myOptions);
const travel = entry.travel();
- await Self.rawSql('CALL buyUltimate(?, ?)', [
+ await Self.rawSql('CALL buy_getUltimate(?, ?, ?)', [
+ null,
travel.warehouseInFk,
travel.landed
], myOptions);
diff --git a/modules/entry/back/methods/entry/lastItemBuys.js b/modules/entry/back/methods/entry/lastItemBuys.js
index 63e6d38f2..012b99d17 100644
--- a/modules/entry/back/methods/entry/lastItemBuys.js
+++ b/modules/entry/back/methods/entry/lastItemBuys.js
@@ -50,7 +50,8 @@ module.exports = Self => {
const stmts = [];
let stmt;
- stmt = new ParameterizedSQL(`CALL buyUltimate(?, ?)`, [
+ stmt = new ParameterizedSQL(`CALL buy_getUltimate(?, ?, ?)`, [
+ null,
travel.warehouseInFk,
travel.landed
]);
diff --git a/modules/entry/back/methods/entry/print.js b/modules/entry/back/methods/entry/print.js
new file mode 100644
index 000000000..c155c3d8b
--- /dev/null
+++ b/modules/entry/back/methods/entry/print.js
@@ -0,0 +1,58 @@
+const UserError = require('vn-loopback/util/user-error');
+module.exports = Self => {
+ Self.remoteMethodCtx('print', {
+ description: 'Print stickers of all entries',
+ accessType: 'READ',
+ accepts: [
+ {
+ arg: 'id',
+ type: 'number',
+ required: true,
+ description: 'The entry id',
+ http: {source: 'path'}
+ }
+ ],
+ returns: [
+ {
+ arg: 'body',
+ type: 'file',
+ root: true
+ }, {
+ arg: 'Content-Type',
+ type: 'String',
+ http: {target: 'header'}
+ }, {
+ arg: 'Content-Disposition',
+ type: 'String',
+ http: {target: 'header'}
+ }
+ ],
+ http: {
+ path: '/:id/print',
+ verb: 'GET'
+ },
+ accessScopes: ['DEFAULT', 'read:multimedia']
+ });
+
+ Self.print = async function(ctx, id, options) {
+ const models = Self.app.models;
+ const myOptions = {};
+ if (typeof options == 'object')
+ Object.assign(myOptions, options);
+
+ // Importación dinámica porque no admite commonjs
+ const PDFMerger = ((await import('pdf-merger-js')).default);
+ const merger = new PDFMerger();
+ const buys = await models.Buy.find({where: {entryFk: id}}, myOptions);
+
+ for (const buy of buys) {
+ if (buy.stickers < 1) continue;
+ ctx.args.id = buy.id;
+ const pdfBuffer = await models.Entry.buyLabel(ctx, myOptions);
+ await merger.add(new Uint8Array(pdfBuffer[0]));
+ }
+
+ if (!merger._doc) throw new UserError('The entry not have stickers');
+ return [await merger.saveAsBuffer(), 'application/pdf', `filename="entry-${id}.pdf"`];
+ };
+};
diff --git a/modules/entry/back/models/entry.js b/modules/entry/back/models/entry.js
index 6e27e1ece..b11d64415 100644
--- a/modules/entry/back/models/entry.js
+++ b/modules/entry/back/models/entry.js
@@ -10,6 +10,7 @@ module.exports = Self => {
require('../methods/entry/addFromPackaging')(Self);
require('../methods/entry/addFromBuy')(Self);
require('../methods/entry/buyLabel')(Self);
+ require('../methods/entry/print')(Self);
Self.observe('before save', async function(ctx, options) {
if (ctx.isNewInstance) return;
diff --git a/modules/invoiceIn/back/methods/invoice-in/filter.js b/modules/invoiceIn/back/methods/invoice-in/filter.js
index 0d3b5f14a..d72d7fc63 100644
--- a/modules/invoiceIn/back/methods/invoice-in/filter.js
+++ b/modules/invoiceIn/back/methods/invoice-in/filter.js
@@ -82,7 +82,15 @@ module.exports = Self => {
{
arg: 'correctedFk',
type: 'number',
- description: 'The corrected invoice',
+ description: 'The rectified invoice',
+ },
+ {
+ arg: 'correctingFk',
+ type: 'Boolean',
+ },
+ {
+ arg: 'supplierActivityFk',
+ type: 'string',
}
],
returns: {
@@ -111,6 +119,7 @@ module.exports = Self => {
}
let correctings;
+ let correcteds;
if (args.correctedFk) {
correctings = await models.InvoiceInCorrection.find({
fields: ['correctingFk'],
@@ -118,6 +127,9 @@ module.exports = Self => {
});
}
+ if (args.correctingFk || args.correctingFk === false)
+ correcteds = await models.InvoiceInCorrection.find();
+
const where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
@@ -141,8 +153,14 @@ module.exports = Self => {
return {[`ii.${param}`]: value};
case 'awbCode':
return {'sub.code': value};
+ case 'correctingFk':
+ return args.correctingFk
+ ? {'ii.id': {inq: correcteds.map(x => x.correctingFk)}}
+ : {'ii.id': {nin: correcteds.map(x => x.correctingFk)}};
case 'correctedFk':
return {'ii.id': {inq: correctings.map(x => x.correctingFk)}};
+ case 'supplierActivityFk':
+ return {'s.supplierActivityFk': value};
}
});
diff --git a/modules/invoiceIn/front/intrastat/index.html b/modules/invoiceIn/front/intrastat/index.html
index fc0139303..b15fdf543 100644
--- a/modules/invoiceIn/front/intrastat/index.html
+++ b/modules/invoiceIn/front/intrastat/index.html
@@ -10,7 +10,7 @@
auto-load="true"
url="Countries"
data="countries"
- order="country">
+ order="name">
{
Self.remoteMethodCtx('itemShelvingSaleSetQuantity', {
- description: 'Set quanitity of a sale in itemShelvingSale',
+ description: 'Set quantity of a sale in itemShelvingSale',
accessType: 'WRITE',
accepts: [
{
@@ -20,6 +20,12 @@ module.exports = Self => {
type: 'boolean',
required: true,
description: 'True if the shelvingFk is empty ',
+ },
+ {
+ arg: 'sectorFk',
+ type: 'number',
+ required: true,
+ description: 'Sector Id',
}
],
http: {
@@ -28,14 +34,14 @@ module.exports = Self => {
}
});
- Self.itemShelvingSaleSetQuantity = async(ctx, id, quantity, isItemShelvingSaleEmpty, options) => {
+ Self.itemShelvingSaleSetQuantity = async(ctx, id, quantity, isItemShelvingSaleEmpty, sectorFk, options) => {
const myOptions = {userId: ctx.req.accessToken.userId};
if (typeof options == 'object')
Object.assign(myOptions, options);
- await Self.rawSql(`CALL vn.itemShelvingSale_setQuantity(?, ?, ? )`,
- [id, quantity, isItemShelvingSaleEmpty],
+ await Self.rawSql(`CALL vn.itemShelvingSale_setQuantity(?, ?, ?, ?)`,
+ [id, quantity, isItemShelvingSaleEmpty, sectorFk],
myOptions);
};
};
diff --git a/modules/item/back/methods/item-shelving/updateFromSale.js b/modules/item/back/methods/item-shelving/updateFromSale.js
index 2b9f49cae..167509074 100644
--- a/modules/item/back/methods/item-shelving/updateFromSale.js
+++ b/modules/item/back/methods/item-shelving/updateFromSale.js
@@ -1,3 +1,4 @@
+const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethod('updateFromSale', {
description: 'Update the visible items',
@@ -32,6 +33,9 @@ module.exports = Self => {
include: {relation: 'itemShelving'}
}, myOptions);
+ if (!itemShelvingSale?.itemShelving())
+ throw new UserError('The sale not exists in the item shelving');
+
const itemShelving = itemShelvingSale.itemShelving();
const quantity = itemShelving.visible + itemShelvingSale.quantity;
diff --git a/modules/item/back/methods/item/getWasteByItem.js b/modules/item/back/methods/item/getWasteByItem.js
index 56b90b04a..548f28008 100644
--- a/modules/item/back/methods/item/getWasteByItem.js
+++ b/modules/item/back/methods/item/getWasteByItem.js
@@ -27,28 +27,42 @@ module.exports = Self => {
});
Self.getWasteByItem = async(buyer, family, options) => {
+ const models = Self.app.models;
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
+ const user = await models.VnUser.findOne({
+ fields: ['id'],
+ where: {name: buyer}
+ });
+
+ const itemType = await models.ItemType.findOne({
+ fields: ['id'],
+ where: {name: family}
+ }, options);
+
const date = Date.vnNew();
date.setHours(0, 0, 0, 0);
const wastes = await Self.rawSql(`
- SELECT *, 100 * dwindle / total AS percentage
- FROM (
- SELECT buyer,
- ws.family,
- ws.itemFk,
- sum(ws.saleTotal) AS total,
- sum(ws.saleWaste) AS dwindle
- FROM bs.waste ws
- WHERE buyer = ? AND family = ?
- AND year = YEAR(TIMESTAMPADD(WEEK,-1, ?))
- AND week = WEEK(TIMESTAMPADD(WEEK,-1, ?), 1)
- GROUP BY buyer, itemFk
- ) sub
- ORDER BY family, percentage DESC`, [buyer, family, date, date], myOptions);
+ SELECT *, 100 * dwindle / total percentage
+ FROM (
+ SELECT u.name buyer,
+ it.name family,
+ w.itemFk,
+ SUM(w.saleTotal) total,
+ SUM(w.saleInternalWaste + w.saleExternalWaste) dwindle
+ FROM bs.waste w
+ JOIN account.user u ON u.id = w.buyerFk
+ JOIN vn.itemType it ON it.id = w.itemTypeFk
+ WHERE w.buyerFk = ? AND w.itemTypeFk = ?
+ AND w.year = YEAR(TIMESTAMPADD(WEEK, -1, ?))
+ AND w.week = WEEK(TIMESTAMPADD(WEEK, -1, ?), 1)
+ GROUP BY w.buyerFk, w.itemFk
+ ) sub
+ ORDER BY family, percentage DESC
+ `, [user.id, itemType.id, date, date], myOptions);
const details = [];
diff --git a/modules/item/back/methods/item/getWasteByWorker.js b/modules/item/back/methods/item/getWasteByWorker.js
index 8fa351eed..9af49478f 100644
--- a/modules/item/back/methods/item/getWasteByWorker.js
+++ b/modules/item/back/methods/item/getWasteByWorker.js
@@ -22,31 +22,37 @@ module.exports = Self => {
const date = Date.vnNew();
date.setHours(0, 0, 0, 0);
const wastes = await Self.rawSql(`
- SELECT *, 100 * dwindle / total AS percentage
- FROM (
- SELECT buyer,
- ws.family,
- sum(ws.saleTotal) AS total,
- sum(ws.saleWaste) AS dwindle
- FROM bs.waste ws
- WHERE year = YEAR(TIMESTAMPADD(WEEK,-1, ?))
- AND week = WEEK(TIMESTAMPADD(WEEK,-1, ?), 1)
- GROUP BY buyer, family
- ) sub
- ORDER BY percentage DESC`, [date, date], myOptions);
+ SELECT *, 100 * dwindle / total percentage
+ FROM (
+ SELECT u.name buyer,
+ it.name family,
+ w.itemFk,
+ SUM(w.saleTotal) total,
+ SUM(w.saleInternalWaste + w.saleExternalWaste) dwindle
+ FROM bs.waste w
+ JOIN account.user u ON u.id = w.buyerFk
+ JOIN vn.itemType it ON it.id = w.itemTypeFk
+ WHERE year = YEAR(TIMESTAMPADD(WEEK, -1, ?))
+ AND week = WEEK(TIMESTAMPADD(WEEK, -1, ?), 1)
+ GROUP BY buyerFk, itemTypeFk
+ ) sub
+ ORDER BY percentage DESC
+ `, [date, date], myOptions);
const wastesTotal = await Self.rawSql(`
- SELECT *, 100 * dwindle / total AS percentage
+ SELECT *, 100 * dwindle / total percentage
FROM (
- SELECT buyer,
- sum(ws.saleTotal) AS total,
- sum(ws.saleWaste) AS dwindle
- FROM bs.waste ws
- WHERE year = YEAR(TIMESTAMPADD(WEEK,-1, ?))
- AND week = WEEK(TIMESTAMPADD(WEEK,-1, ?), 1)
- GROUP BY buyer
+ SELECT u.name buyer,
+ SUM(w.saleTotal) total,
+ SUM(w.saleInternalWaste + w.saleExternalWaste) dwindle
+ FROM bs.waste w
+ JOIN account.user u ON u.id = w.buyerFk
+ WHERE w.year = YEAR(TIMESTAMPADD(WEEK, -1, ?))
+ AND w.week = WEEK(TIMESTAMPADD(WEEK, -1, ?), 1)
+ GROUP BY w.buyerFk
) sub
- ORDER BY percentage DESC`, [date, date], myOptions);
+ ORDER BY percentage DESC
+ `, [date, date], myOptions);
const details = [];
diff --git a/modules/item/back/methods/item/specs/getWasteByItem.spec.js b/modules/item/back/methods/item/specs/getWasteByItem.spec.js
index 68ba02887..51ee28a33 100644
--- a/modules/item/back/methods/item/specs/getWasteByItem.spec.js
+++ b/modules/item/back/methods/item/specs/getWasteByItem.spec.js
@@ -6,13 +6,13 @@ describe('Item getWasteByItem()', () => {
const options = {transaction: tx};
try {
- const result = await models.Item.getWasteByItem('CharlesXavier', 'Cymbidium', options);
+ const result = await models.Item.getWasteByItem('buyer', 'Crisantemo', options);
const length = result.length;
const anyResult = result[Math.floor(Math.random() * Math.floor(length))];
- expect(anyResult.buyer).toEqual('CharlesXavier');
- expect(anyResult.family).toEqual('Cymbidium');
+ expect(anyResult.buyer).toEqual('buyer');
+ expect(anyResult.family).toEqual('Crisantemo');
expect(anyResult.lines.length).toBeGreaterThanOrEqual(2);
await tx.rollback();
diff --git a/modules/item/back/methods/item/specs/getWasteByWorker.spec.js b/modules/item/back/methods/item/specs/getWasteByWorker.spec.js
index 52f806bd3..fba35d716 100644
--- a/modules/item/back/methods/item/specs/getWasteByWorker.spec.js
+++ b/modules/item/back/methods/item/specs/getWasteByWorker.spec.js
@@ -11,9 +11,9 @@ describe('Item getWasteByWorker()', () => {
const length = result.length;
const anyResult = result[Math.floor(Math.random() * Math.floor(length))];
- expect(anyResult.buyer).toMatch(/(CharlesXavier|HankPym|DavidCharlesHaller)/);
+ expect(anyResult.buyer).toMatch(/(buyer|it)/);
expect(anyResult.total).toBeGreaterThanOrEqual(1000);
- expect(anyResult.lines.length).toBeGreaterThanOrEqual(3);
+ expect(anyResult.lines.length).toBeGreaterThanOrEqual(1);
await tx.rollback();
} catch (e) {
diff --git a/modules/item/back/models/item-shelving.json b/modules/item/back/models/item-shelving.json
index 893a1f81d..5df3b0703 100644
--- a/modules/item/back/models/item-shelving.json
+++ b/modules/item/back/models/item-shelving.json
@@ -1,9 +1,9 @@
{
"name": "ItemShelving",
"base": "VnModel",
- "mixins": {
- "Loggable": true
- },
+ "mixins": {
+ "Loggable": true
+ },
"options": {
"mysql": {
"table": "itemShelving"
@@ -17,27 +17,30 @@
},
"shelvingFk": {
"type": "string"
- },
+ },
"itemFk": {
"type": "number"
- },
+ },
"created": {
"type": "date"
- },
+ },
"grouping": {
"type": "number"
- },
- "isChecked": {
- "type": "boolean"
+ },
+ "isChecked": {
+ "type": "number"
},
"packing": {
"type": "number"
- },
- "visible": {
- "type": "number"
},
- "userFk": {
- "type": "number"
+ "visible": {
+ "type": "number"
+ },
+ "userFk": {
+ "type": "number"
+ },
+ "available": {
+ "type": "number"
}
},
"relations": {
@@ -56,6 +59,6 @@
"model": "Shelving",
"foreignKey": "shelvingFk",
"primaryKey": "code"
- }
+ }
}
-}
+}
\ No newline at end of file
diff --git a/modules/item/back/models/specs/itemMinimumQuantity.spec.js b/modules/item/back/models/specs/itemMinimumQuantity.spec.js
index 072a80f94..7d1e19def 100644
--- a/modules/item/back/models/specs/itemMinimumQuantity.spec.js
+++ b/modules/item/back/models/specs/itemMinimumQuantity.spec.js
@@ -2,9 +2,10 @@ const {models} = require('vn-loopback/server/server');
describe('itemMinimumQuantity model', () => {
const itemFk = 5;
+ const quantity = 100;
const warehouseFk = 60;
- beforeAll(async() => {
+ beforeEach(async() => {
await models.ItemMinimumQuantity.destroyAll({where: {itemFk: itemFk}});
});
@@ -12,7 +13,7 @@ describe('itemMinimumQuantity model', () => {
it('should create a new itemMinimumQuantity record', async() => {
const newRecord = {
itemFk: itemFk,
- quantity: 100,
+ quantity: quantity,
started: Date.vnNew(),
ended: new Date(Date.vnNew().setFullYear(Date.vnNew().getFullYear() + 1)),
warehouseFk: warehouseFk
@@ -27,7 +28,7 @@ describe('itemMinimumQuantity model', () => {
it('should read an existing itemMinimumQuantity record', async() => {
const newRecord = {
itemFk: itemFk,
- quantity: 100,
+ quantity: quantity,
started: Date.vnNew(),
ended: new Date(Date.vnNew().setFullYear(Date.vnNew().getFullYear() + 2)),
warehouseFk: warehouseFk
@@ -44,7 +45,7 @@ describe('itemMinimumQuantity model', () => {
it('should update an existing itemMinimumQuantity record', async() => {
const newRecord = {
itemFk: itemFk,
- quantity: 100,
+ quantity: quantity,
started: Date.vnNew(),
ended: new Date(Date.vnNew().setFullYear(Date.vnNew().getFullYear() + 3)),
warehouseFk: warehouseFk
@@ -67,7 +68,7 @@ describe('itemMinimumQuantity model', () => {
it('should enforce unique constraint on itemFk, started, ended, and warehouseFk', async() => {
const newRecord = {
itemFk: itemFk,
- quantity: 100,
+ quantity: quantity,
started: Date.vnNew(),
ended: Date.vnNew().setFullYear(Date.vnNew().getFullYear() + 5),
warehouseFk: warehouseFk
@@ -78,14 +79,14 @@ describe('itemMinimumQuantity model', () => {
await models.ItemMinimumQuantity.create(newRecord);
} catch (e) {
expect(e).toBeDefined();
- expect(e.code).toContain('ER_DUP_ENTRY');
+ expect(e.code).toContain('ER_SIGNAL_EXCEPTION');
}
});
it('should allow null values for ended and warehouseFk', async() => {
const newRecord = {
itemFk: itemFk,
- quantity: 100,
+ quantity: quantity,
started: Date.vnNew(),
ended: null,
warehouseFk: null
diff --git a/modules/item/front/diary/index.html b/modules/item/front/diary/index.html
index 8eb486385..7fb3b870e 100644
--- a/modules/item/front/diary/index.html
+++ b/modules/item/front/diary/index.html
@@ -1,121 +1,2 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Date
- Id
- State
- Reference
- Client
- In
- Out
- Balance
-
-
-
-
-
-
-
-
-
-
-
-
- {{::sale.shipped | date:'dd/MM/yyyy' }}
-
-
-
-
- {{::sale.origin | dashIfEmpty}}
-
-
- {{::sale.stateName | dashIfEmpty}}
- {{::sale.reference | dashIfEmpty}}
-
-
-
- {{::sale.name | dashIfEmpty}}
-
-
- {{::sale.name | dashIfEmpty}}
-
-
-
- {{::sale.invalue | dashIfEmpty}}
- {{::sale.out | dashIfEmpty}}
-
-
- {{::sale.balance | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/modules/item/front/diary/index.js b/modules/item/front/diary/index.js
index 199682a77..3d86b0b60 100644
--- a/modules/item/front/diary/index.js
+++ b/modules/item/front/diary/index.js
@@ -1,111 +1,21 @@
import ngModule from '../module';
import Section from 'salix/components/section';
-import './style.scss';
class Controller extends Section {
- constructor($element, $scope, $anchorScroll, $location) {
- super($element, $scope);
- this.$anchorScroll = $anchorScroll;
- this.$location = $location;
- let today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
- this.today = today.toJSON();
+ constructor($element, $) {
+ super($element, $);
}
- get item() {
- return this._item;
- }
-
- set item(value) {
- this._item = value;
-
- this.filter = {
- where: {itemFk: this.$params.id}
- };
-
- this.$.$applyAsync(() => {
- if (this.$params.warehouseFk)
- this.warehouseFk = this.$params.warehouseFk;
- else if (value)
- this.warehouseFk = this.vnConfig.warehouseFk;
-
- if (this.$params.lineFk)
- this.lineFk = this.$params.lineFk;
- });
- }
-
- set warehouseFk(value) {
- if (value && value != this._warehouseFk) {
- this._warehouseFk = value;
- this.card.warehouseFk = value;
- this.filter.where.warehouseFk = this.warehouseFk;
-
- this.$.model.refresh();
- }
- }
-
- get warehouseFk() {
- return this._warehouseFk;
- }
-
- set date(value) {
- this._date = value;
- this.filter.where.date = value;
- this.filter.where.warehouseFk = this.warehouseFk;
-
- this.$.model.refresh();
- }
-
- get date() {
- return this._date;
- }
-
- set showOld(value) {
- this._showOld = value;
- if (!this._showOld) this.date = null;
- else this.date = new Date();
- }
-
- get showOld() {
- return this._showOld;
- }
-
- scrollToLine(lineFk) {
- this.$.$applyAsync(() => {
- const hashFk = this.lineFk || lineFk;
- const hash = `vnItemDiary-${hashFk}`;
- this.$location.hash(hash);
- this.$anchorScroll();
- });
- }
-
- showDescriptor(event, sale) {
- let descriptor = 'entryDescriptor';
- if (sale.isTicket)
- descriptor = 'ticketDescriptor';
-
- this.$[descriptor].show(event.target, sale.origin);
- }
-
- $onDestroy() {
- if (this.$state.getCurrentPath()[2].state.name === 'item')
- this.card.reload();
- }
-
- async goToLilium(section, id) {
- window.location.href = await this.vnApp.getUrl(`claim/${id}/${section}`);
+ async $onInit() {
+ this.$state.go('item.card.summary', {id: this.$params.id});
+ window.location.href = await this.vnApp.getUrl(`item/${this.$params.id}/diary`);
}
}
-Controller.$inject = ['$element', '$scope', '$anchorScroll', '$location'];
-
ngModule.vnComponent('vnItemDiary', {
template: require('./index.html'),
controller: Controller,
bindings: {
item: '<'
- },
- require: {
- card: '?^vnItemCard'
}
});
diff --git a/modules/item/front/diary/index.spec.js b/modules/item/front/diary/index.spec.js
deleted file mode 100644
index a6302346d..000000000
--- a/modules/item/front/diary/index.spec.js
+++ /dev/null
@@ -1,99 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Item', () => {
- describe('Component vnItemDiary', () => {
- let $scope;
- let controller;
-
- beforeEach(ngModule('item'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- const $element = angular.element(' ');
- controller = $componentController('vnItemDiary', {$element, $scope});
- controller.$.model = crudModel;
- controller.$params = {id: 1};
- controller.card = {};
- }));
-
- describe('set item()', () => {
- it('should set warehouseFk property based on itemType warehouseFk', () => {
- jest.spyOn(controller.$, '$applyAsync');
- controller.vnConfig = {warehouseFk: 1};
- controller.item = {id: 1};
-
- expect(controller.$.$applyAsync).toHaveBeenCalledWith(jasmine.any(Function));
- $scope.$apply();
-
- expect(controller.warehouseFk).toEqual(1);
- expect(controller.item.id).toEqual(1);
- });
-
- it(`should set warehouseFk property based on url query warehouseFk`, () => {
- jest.spyOn(controller.$, '$applyAsync');
- controller.$params.warehouseFk = 4;
- controller.item = {id: 1, itemType: {warehouseFk: 1}};
-
- expect(controller.$.$applyAsync).toHaveBeenCalledWith(jasmine.any(Function));
- $scope.$apply();
-
- expect(controller.warehouseFk).toEqual(4);
- expect(controller.item.id).toEqual(1);
- });
- });
-
- describe('scrollToLine ()', () => {
- it('should assign $location then call anchorScroll using controller value', () => {
- jest.spyOn(controller, '$anchorScroll');
- controller.lineFk = 1;
- controller.scrollToLine('invalidValue');
-
- $scope.$apply();
-
- expect(controller.$location.hash()).toEqual(`vnItemDiary-${1}`);
- expect(controller.$anchorScroll).toHaveBeenCalledWith();
- });
-
- it('should assign $location then call anchorScroll using received value', () => {
- jest.spyOn(controller, '$anchorScroll');
- controller.lineFk = undefined;
- controller.scrollToLine(1);
-
- $scope.$apply();
-
- expect(controller.$location.hash()).toEqual(`vnItemDiary-${1}`);
- expect(controller.$anchorScroll).toHaveBeenCalledWith();
- });
- });
-
- describe('showDescriptor ()', () => {
- it('should call to the entryDescriptor show() method', () => {
- controller.$.entryDescriptor = {};
- controller.$.entryDescriptor.show = jest.fn();
-
- const $event = new Event('click');
- const target = document.createElement('div');
- target.dispatchEvent($event);
- const data = {id: 1, origin: 1};
- controller.showDescriptor($event, data);
-
- expect(controller.$.entryDescriptor.show).toHaveBeenCalledWith($event.target, data.origin);
- });
-
- it('should call to the ticketDescriptor show() method', () => {
- controller.$.ticketDescriptor = {};
- controller.$.ticketDescriptor.show = jest.fn();
-
- const $event = new Event('click');
- const target = document.createElement('div');
- target.dispatchEvent($event);
- const data = {id: 1, origin: 1, isTicket: true};
- controller.showDescriptor($event, data);
-
- expect(controller.$.ticketDescriptor.show).toHaveBeenCalledWith($event.target, data.origin);
- });
- });
- });
-});
-
diff --git a/modules/item/front/diary/locale/es.yml b/modules/item/front/diary/locale/es.yml
deleted file mode 100644
index a312da774..000000000
--- a/modules/item/front/diary/locale/es.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-In: Entrada
-Out: Salida
-Visible quantity: Cantidad visible
-Ticket/Entry: Ticket/Entrada
-Show what's before the inventory: Mostrar lo anterior al inventario
diff --git a/modules/item/front/diary/style.scss b/modules/item/front/diary/style.scss
deleted file mode 100644
index 0a6cafcb9..000000000
--- a/modules/item/front/diary/style.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-@import "variables";
-
-vn-item-diary {
- & > vn-vertical {
- display: block;
- }
- vn-horizontal {
- justify-content: center;
- }
- vn-autocomplete > div {
- width: 400px;
- }
- .balanceNegative .balance {
- color: $color-alert;
- }
- .isIn .in {
- color: $color-success;
- font-weight: bold;
- }
- .isToday .date {
- color: white;
- background-color: $color-main;
- }
- .truncate {
- max-width: 250px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .table-check{
- justify-content: center;
- }
-}
diff --git a/modules/order/back/methods/order/getItemTypeAvailable.js b/modules/order/back/methods/order/getItemTypeAvailable.js
index b84863953..fd7be5d57 100644
--- a/modules/order/back/methods/order/getItemTypeAvailable.js
+++ b/modules/order/back/methods/order/getItemTypeAvailable.js
@@ -44,16 +44,14 @@ module.exports = Self => {
]);
stmts.push(stmt);
- stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.item');
-
stmt = new ParameterizedSQL(
- `CREATE TEMPORARY TABLE tmp.item
+ `CREATE OR REPLACE TEMPORARY TABLE tmp.item
(PRIMARY KEY (itemFk)) ENGINE = MEMORY
SELECT DISTINCT
- i.id AS itemFk,
- it.id AS typeFk,
+ i.id itemFk,
+ it.id typeFk,
it.name,
- ic.name AS categoryName
+ ic.name categoryName
FROM tmp.availableCalc ac
JOIN cache.available a ON a.calc_id = ac.calcFk
JOIN vn.item i ON i.id = a.item_id
@@ -64,7 +62,7 @@ module.exports = Self => {
stmts.push(stmt);
stmt = new ParameterizedSQL(
- 'CALL vn.catalog_calculate(?, ?, ?,?)', [
+ 'CALL vn.catalog_calculate(?, ?, ?, ?)', [
order.landed,
order.addressFk,
order.agencyModeFk,
@@ -74,7 +72,7 @@ module.exports = Self => {
stmts.push(stmt);
stmt = new ParameterizedSQL(`
- SELECT i.typeFk AS id, i.name, i.categoryName
+ SELECT i.typeFk id, i.name, i.categoryName
FROM tmp.item i
JOIN tmp.ticketCalculateItem tci ON tci.itemFk = i.itemFk
GROUP BY i.typeFk`
@@ -85,7 +83,6 @@ module.exports = Self => {
const sql = ParameterizedSQL.join(stmts, ';');
const result = await Self.rawStmt(sql, myOptions);
-
return result[categoriesIndex];
};
};
diff --git a/modules/route/back/methods/route/cmrs.js b/modules/route/back/methods/route/cmrs.js
index 0c25cbca5..6f271a4cf 100644
--- a/modules/route/back/methods/route/cmrs.js
+++ b/modules/route/back/methods/route/cmrs.js
@@ -91,11 +91,13 @@ module.exports = Self => {
SELECT t.cmrFk,
t.id ticketFk,
t.routeFk,
- co.name country,
+ co.id countryFk,
+ co.name countryName,
t.clientFk,
IF(sub.id, TRUE, FALSE) hasCmrDms,
DATE(t.shipped) shipped,
- t.warehouseFk
+ t.warehouseFk,
+ w.name warehouseName
FROM ticket t
JOIN ticketState ts ON ts.ticketFk = t.id
JOIN state s ON s.id = ts.stateFk
diff --git a/modules/route/back/methods/route/filter.js b/modules/route/back/methods/route/filter.js
index 5b13a9004..925927cc8 100644
--- a/modules/route/back/methods/route/filter.js
+++ b/modules/route/back/methods/route/filter.js
@@ -91,25 +91,20 @@ module.exports = Self => {
let where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
- return {'r.id': value};
+ return {'id': value};
case 'from':
- return {'r.created': {gte: value}};
+ return {'created': {gte: value}};
case 'to':
- return {'r.created': {lte: value}};
- case 'm3':
- return {'r.m3': value};
+ return {'created': {lte: value}};
case 'description':
- return {'r.description': {like: `%${value}%`}};
+ return {'description': {like: `%${value}%`}};
+ case 'isOk':
+ case 'm3':
case 'warehouseFk':
- param = `v.${param}`;
- return {[param]: value};
case 'workerFk':
case 'vehicleFk':
case 'agencyModeFk':
- param = `r.${param}`;
return {[param]: value};
- case 'isOk':
- return {'r.isOk': value};
}
});
@@ -119,34 +114,38 @@ module.exports = Self => {
let stmt;
stmt = new ParameterizedSQL(
- `SELECT
- r.id,
- r.workerFk,
- r.created,
- r.vehicleFk,
- r.agencyModeFk,
- r.time,
- r.isOk,
- r.kmStart,
- r.kmEnd,
- r.started,
- r.finished,
- r.gestdocFk,
- r.cost,
- r.m3,
- r.description,
- am.name agencyName,
- u.name AS workerUserName,
- v.numberPlate AS vehiclePlateNumber,
- Date_format(r.time, '%H:%i') hour,
- eu.email
- FROM route r
- LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
- LEFT JOIN agency a ON a.id = am.agencyFk
- LEFT JOIN vehicle v ON v.id = r.vehicleFk
- LEFT JOIN worker w ON w.id = r.workerFk
- LEFT JOIN account.user u ON u.id = w.id
- LEFT JOIN account.emailUser eu ON eu.userFk = r.workerFk`
+ `SELECT *
+ FROM(
+ SELECT
+ r.id,
+ r.workerFk,
+ r.created,
+ r.vehicleFk,
+ r.agencyModeFk,
+ r.time,
+ r.isOk,
+ r.kmStart,
+ r.kmEnd,
+ r.started,
+ r.finished,
+ r.gestdocFk,
+ r.cost,
+ r.m3,
+ r.description,
+ am.name agencyName,
+ u.name workerUserName,
+ v.numberPlate vehiclePlateNumber,
+ Date_format(r.time, '%H:%i') hour,
+ eu.email,
+ v.warehouseFk
+ FROM route r
+ LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
+ LEFT JOIN agency a ON a.id = am.agencyFk
+ LEFT JOIN vehicle v ON v.id = r.vehicleFk
+ LEFT JOIN worker w ON w.id = r.workerFk
+ LEFT JOIN account.user u ON u.id = w.id
+ LEFT JOIN account.emailUser eu ON eu.userFk = r.workerFk
+ ) sub`
);
stmt.merge(conn.makeSuffix(filter));
diff --git a/modules/route/back/methods/route/getByWorker.js b/modules/route/back/methods/route/getByWorker.js
index 9243cfbfb..5d1881c20 100644
--- a/modules/route/back/methods/route/getByWorker.js
+++ b/modules/route/back/methods/route/getByWorker.js
@@ -28,11 +28,11 @@ module.exports = Self => {
if (canViewAll) {
const userConfig = await models.UserConfig.getUserConfig(ctx, myOptions);
filterGrant = {
- where: {'a.warehouseFk': userConfig.warehouseFk}
+ where: {'warehouseFk': userConfig.warehouseFk}
};
} else {
filterGrant = {
- where: {'r.workerFk': userId}
+ where: {'workerFk': userId}
};
}
@@ -46,16 +46,16 @@ module.exports = Self => {
and: [
{
or: [
- {'r.created': currentDate},
- {'r.created': nextDay}
+ {'created': currentDate},
+ {'created': nextDay}
]
}
]
},
order: [
- 'r.created ASC',
- 'r.time ASC',
- 'am.name ASC'
+ 'created ASC',
+ 'time ASC',
+ 'agencyName ASC'
]
};
diff --git a/modules/route/front/agency-term-search-panel/index.html b/modules/route/front/agency-term-search-panel/index.html
deleted file mode 100644
index fdd6b649b..000000000
--- a/modules/route/front/agency-term-search-panel/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/agency-term-search-panel/index.js b/modules/route/front/agency-term-search-panel/index.js
deleted file mode 100644
index d5d8ea7a6..000000000
--- a/modules/route/front/agency-term-search-panel/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- get filter() {
- return this.$.filter;
- }
-
- set filter(value = {}) {
- this.$.filter = value;
- }
-}
-
-ngModule.vnComponent('vnAgencyTermSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/agency-term-search-panel/locale/es.yml b/modules/route/front/agency-term-search-panel/locale/es.yml
deleted file mode 100644
index 74336a03b..000000000
--- a/modules/route/front/agency-term-search-panel/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Search by invoiceIn id or autonomous name: Buscar por id de recibida o por nombre de autónomo
-Search autonomous: Buscar autónomos
\ No newline at end of file
diff --git a/modules/route/front/agency-term/createInvoiceIn/index.html b/modules/route/front/agency-term/createInvoiceIn/index.html
deleted file mode 100644
index 8f270378f..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/index.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/agency-term/createInvoiceIn/index.js b/modules/route/front/agency-term/createInvoiceIn/index.js
deleted file mode 100644
index 0198ab80f..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/index.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.dms = {
- files: [],
- hasFile: false,
- hasFileAttached: false
- };
- }
-
- get route() {
- return this._route;
- }
-
- set route(value) {
- this._route = value;
-
- this.setDefaultParams();
- this.getAllowedContentTypes();
- }
-
- $onChanges() {
- if (this.$params && this.$params.q)
- this.params = JSON.parse(this.$params.q);
- }
-
- 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: 'invoiceIn'}
- }};
- this.$http.get('DmsTypes/findOne', {params}).then(res => {
- const dmsType = res.data && res.data;
- const companyId = this.vnConfig.companyFk;
- const warehouseId = this.vnConfig.warehouseFk;
- const defaultParams = {
- warehouseId: warehouseId,
- companyId: companyId,
- dmsTypeId: dmsType.id,
- description: this.params.supplierName
- };
-
- this.dms = Object.assign(this.dms, defaultParams);
- });
- }
-
- onSubmit() {
- if (this.dms.files.length > 1) throw new UserError('You cannot attach more than one document');
- const query = `dms/uploadFile`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
- formData.append(files[0].name, files[0]);
- return formData;
- },
- data: this.dms.files
- };
- this.$http(options).then(res => {
- if (res) {
- const addedDms = res.data;
- this.$.watcher.updateOriginalData();
-
- const params = {
- rows: this.params.rows,
- dms: addedDms
- };
-
- this.$http.post('AgencyTerms/createInvoiceIn', params)
- .then(() => {
- this.$state.go('route.agencyTerm.index');
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
- });
- }
-
- onFileChange(files) {
- let hasFileAttached = false;
-
- if (files.length > 0)
- hasFileAttached = true;
-
- this.$.$applyAsync(() => {
- this.dms.hasFileAttached = hasFileAttached;
- });
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnAgencyTermCreateInvoiceIn', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- route: '<'
- }
-});
diff --git a/modules/route/front/agency-term/createInvoiceIn/index.spec.js b/modules/route/front/agency-term/createInvoiceIn/index.spec.js
deleted file mode 100644
index d6d9883a7..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/index.spec.js
+++ /dev/null
@@ -1,107 +0,0 @@
-import './index';
-import watcher from 'core/mocks/watcher.js';
-
-describe('AgencyTerm', () => {
- describe('Component vnAgencyTermCreateInvoiceIn', () => {
- let controller;
- let $scope;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- const $element = angular.element(' ');
- controller = $componentController('vnAgencyTermCreateInvoiceIn', {$element});
- controller._route = {
- id: 1
- };
- }));
-
- describe('$onChanges()', () => {
- it('should update the params data when $params.q is defined', () => {
- controller.$params = {q: '{"supplierName": "Plants SL","rows": null}'};
-
- const params = {q: '{"supplierName": "Plants SL", "rows": null}'};
- const json = JSON.parse(params.q);
-
- controller.$onChanges();
-
- expect(controller.params).toEqual(json);
- });
- });
-
- describe('route() setter', () => {
- it('should set the ticket data and then call setDefaultParams() and getAllowedContentTypes()', () => {
- jest.spyOn(controller, 'setDefaultParams');
- jest.spyOn(controller, 'getAllowedContentTypes');
- controller.route = {
- id: 1
- };
-
- expect(controller.route).toBeDefined();
- expect(controller.setDefaultParams).toHaveBeenCalledWith();
- expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
- });
- });
-
- 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('setDefaultParams()', () => {
- it('should perform a GET query and define the dms property on controller', () => {
- const params = {filter: {
- where: {code: 'invoiceIn'}
- }};
- const serializedParams = $httpParamSerializer(params);
- $httpBackend.expect('GET', `DmsTypes/findOne?${serializedParams}`).respond({id: 1, code: 'invoiceIn'});
- controller.params = {supplierName: 'Plants SL'};
- controller.setDefaultParams();
- $httpBackend.flush();
-
- expect(controller.dms).toBeDefined();
- expect(controller.dms.dmsTypeId).toEqual(1);
- });
- });
-
- describe('onSubmit()', () => {
- it('should make an HTTP POST request to save the form data', () => {
- controller.$.watcher = watcher;
-
- jest.spyOn(controller.$.watcher, 'updateOriginalData');
- const files = [{id: 1, name: 'MyFile'}];
- controller.dms = {files};
- const serializedParams = $httpParamSerializer(controller.dms);
- const query = `dms/uploadFile?${serializedParams}`;
- controller.params = {rows: null};
-
- $httpBackend.expect('POST', query).respond({});
- $httpBackend.expect('POST', 'AgencyTerms/createInvoiceIn').respond({});
- controller.onSubmit();
- $httpBackend.flush();
- });
- });
-
- describe('onFileChange()', () => {
- it('should set dms hasFileAttached property to true if has any files', () => {
- const files = [{id: 1, name: 'MyFile'}];
- controller.onFileChange(files);
- $scope.$apply();
-
- expect(controller.dms.hasFileAttached).toBeTruthy();
- });
- });
- });
-});
diff --git a/modules/route/front/agency-term/createInvoiceIn/style.scss b/modules/route/front/agency-term/createInvoiceIn/style.scss
deleted file mode 100644
index 73f136fc1..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/style.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
-
diff --git a/modules/route/front/agency-term/index/index.html b/modules/route/front/agency-term/index/index.html
deleted file mode 100644
index 0d8ea40e7..000000000
--- a/modules/route/front/agency-term/index/index.html
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id
-
-
- Date
-
-
- Agency route
-
-
- Agency Agreement
-
-
- Packages
-
-
- M3
-
-
- Km
-
-
- Price
-
-
- Received
-
-
- Autonomous
-
-
-
-
-
-
-
-
-
-
-
-
- {{::agencyTerm.routeFk}}
-
-
- {{::agencyTerm.created | date:'dd/MM/yyyy'}}
- {{::agencyTerm.agencyModeName | dashIfEmpty}}
- {{::agencyTerm.agencyAgreement | dashIfEmpty}}
- {{::agencyTerm.packages | dashIfEmpty}}
- {{::agencyTerm.m3 | dashIfEmpty}}
- {{::agencyTerm.kmTotal | dashIfEmpty}}
- {{::agencyTerm.price | dashIfEmpty}}
-
-
- {{::agencyTerm.invoiceInFk}}
-
-
-
-
- {{::agencyTerm.supplierName}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/agency-term/index/index.js b/modules/route/front/agency-term/index/index.js
deleted file mode 100644
index 6c3bafc9a..000000000
--- a/modules/route/front/agency-term/index/index.js
+++ /dev/null
@@ -1,121 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
-
- this.smartTableOptions = {
- activeButtons: {
- search: true
- },
- columns: [
- {
- field: 'agencyModeFk',
- autocomplete: {
- url: 'AgencyModes',
- showField: 'name',
- valueField: 'id'
- }
- },
- {
- field: 'agencyFk',
- autocomplete: {
- url: 'Agencies',
- showField: 'name',
- valueField: 'id'
- }
- },
- {
- field: 'supplierFk',
- autocomplete: {
- url: 'Suppliers',
- showField: 'name',
- valueField: 'name',
- }
- }
- ]
- };
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'agencyModeFk':
- return {'a.agencyModeFk': value};
- case 'supplierFk':
- return {'a.supplierName': value};
- case 'routeFk':
- return {'a.routeFk': value};
- case 'created':
- case 'agencyFk':
- case 'packages':
- case 'm3':
- case 'kmTotal':
- case 'price':
- case 'invoiceInFk':
- return {[`a.${param}`]: value};
- }
- }
-
- get checked() {
- const agencyTerms = this.$.model.data || [];
- const checkedAgencyTerms = [];
- for (let agencyTerm of agencyTerms) {
- if (agencyTerm.checked)
- checkedAgencyTerms.push(agencyTerm);
- }
-
- return checkedAgencyTerms;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- get totalPrice() {
- let totalPrice = 0;
-
- if (this.checked.length > 0) {
- for (let agencyTerm of this.checked)
- totalPrice += agencyTerm.price;
-
- return totalPrice;
- }
-
- return totalPrice;
- }
-
- preview(route) {
- this.routeSelected = route;
- this.$.summary.show();
- }
-
- createInvoiceIn() {
- const rowsToCreateInvoiceIn = [];
- const supplierFk = this.checked[0].supplierFk;
-
- for (let agencyTerm of this.checked) {
- let hasSameSupplier = supplierFk == agencyTerm.supplierFk;
- if (hasSameSupplier) {
- rowsToCreateInvoiceIn.push({
- routeFk: agencyTerm.routeFk,
- supplierFk: agencyTerm.supplierFk,
- created: agencyTerm.created,
- totalPrice: this.totalPrice});
- } else {
- this.vnApp.showError(this.$t('Two autonomous cannot be counted at the same time'));
- return false;
- }
- }
- const params = JSON.stringify({
- supplierName: this.checked[0].supplierName,
- rows: rowsToCreateInvoiceIn
- });
- this.$state.go('route.agencyTerm.createInvoiceIn', {q: params});
- }
-}
-
-ngModule.vnComponent('vnAgencyTermIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/agency-term/index/index.spec.js b/modules/route/front/agency-term/index/index.spec.js
deleted file mode 100644
index 55c40daa5..000000000
--- a/modules/route/front/agency-term/index/index.spec.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('AgencyTerm', () => {
- describe('Component vnAgencyTermIndex', () => {
- let controller;
- let $window;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, _$window_) => {
- $window = _$window_;
- const $element = angular.element(' ');
- controller = $componentController('vnAgencyTermIndex', {$element});
- controller.$.model = crudModel;
- controller.$.model.data = [
- {supplierFk: 1, totalPrice: null},
- {supplierFk: 1},
- {supplierFk: 2}
- ];
- }));
-
- describe('checked() getter', () => {
- it('should return the checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
-
- const checkedRows = controller.checked;
-
- const firstCheckedRow = checkedRows[0];
-
- expect(firstCheckedRow.supplierFk).toEqual(1);
- });
- });
-
- describe('totalCheked() getter', () => {
- it('should return the total checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
-
- const checkedRows = controller.totalChecked;
-
- expect(checkedRows).toEqual(1);
- });
- });
-
- describe('preview()', () => {
- it('should show the summary dialog', () => {
- controller.$.summary = {show: () => {}};
- jest.spyOn(controller.$.summary, 'show');
-
- let event = new MouseEvent('click', {
- view: $window,
- bubbles: true,
- cancelable: true
- });
- const route = {id: 1};
-
- controller.preview(event, route);
-
- expect(controller.$.summary.show).toHaveBeenCalledWith();
- });
- });
-
- describe('createInvoiceIn()', () => {
- it('should throw an error if more than one autonomous are checked', () => {
- jest.spyOn(controller.vnApp, 'showError');
- const data = controller.$.model.data;
- data[0].checked = true;
- data[2].checked = true;
-
- controller.createInvoiceIn();
-
- expect(controller.vnApp.showError).toHaveBeenCalled();
- });
-
- it('should call the function go() on $state to go to the file management', () => {
- jest.spyOn(controller.$state, 'go');
- const data = controller.$.model.data;
- data[0].checked = true;
-
- controller.createInvoiceIn();
-
- delete data[0].checked;
- const params = JSON.stringify({
- supplierName: data[0].supplierName,
- rows: [data[0]]
- });
-
- expect(controller.$state.go).toHaveBeenCalledWith('route.agencyTerm.createInvoiceIn', {q: params});
- });
- });
- });
-});
diff --git a/modules/route/front/agency-term/locale/es.yml b/modules/route/front/agency-term/locale/es.yml
deleted file mode 100644
index 0f6797188..000000000
--- a/modules/route/front/agency-term/locale/es.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-Agency route: Agencia ruta
-Agency Agreement: Acuerdo agencia
-Autonomous: Autónomos
-Two autonomous cannot be counted at the same time: Dos autonónomos no pueden ser contabilizados al mismo tiempo
-You cannot attach more than one document: No puedes adjuntar más de un documento
\ No newline at end of file
diff --git a/modules/route/front/basic-data/index.html b/modules/route/front/basic-data/index.html
deleted file mode 100644
index 7f9aef0d0..000000000
--- a/modules/route/front/basic-data/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
diff --git a/modules/route/front/basic-data/index.js b/modules/route/front/basic-data/index.js
deleted file mode 100644
index f051e23c5..000000000
--- a/modules/route/front/basic-data/index.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- $onInit() {
- this.$http.post(`Vehicles/sorted`, {warehouseFk: this.vnConfig.warehouseFk})
- .then(res => {
- this.vehicles = res.data;
- });
- }
-
- onSubmit() {
- this.$.watcher.submit().then(() =>
- this.card.reload()
- );
- }
-}
-
-ngModule.vnComponent('vnRouteBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- route: '<'
- },
- require: {
- card: '^vnRouteCard'
- }
-});
diff --git a/modules/route/front/basic-data/locale/es.yml b/modules/route/front/basic-data/locale/es.yml
deleted file mode 100644
index 9dcacbe9a..000000000
--- a/modules/route/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-Date finished: Fecha fin
-Date started: Fecha inicio
-Km start: Km de inicio
-Km end: Km de fin
-Description: Descripción
-Hour started: Hora inicio
-Hour finished: Hora fin
-Is served: Se ha servido
diff --git a/modules/route/front/card/index.html b/modules/route/front/card/index.html
deleted file mode 100644
index 9e0ae4e8c..000000000
--- a/modules/route/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/card/index.js b/modules/route/front/card/index.js
deleted file mode 100644
index 07b5a547c..000000000
--- a/modules/route/front/card/index.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- fields: [
- 'id',
- 'workerFk',
- 'agencyModeFk',
- 'created',
- 'm3',
- 'warehouseFk',
- 'description',
- 'vehicleFk',
- 'kmStart',
- 'kmEnd',
- 'started',
- 'finished',
- 'cost',
- 'zoneFk',
- 'isOk'
- ],
- include: [
- {
- relation: 'agencyMode',
- scope: {
- fields: ['id', 'name']
- }
- }, {
- relation: 'vehicle',
- scope: {
- fields: ['id', 'm3']
- }
- }, {
- relation: 'zone',
- scope: {
- fields: ['id', 'name']
- }
- },
- {
- relation: 'worker',
- scope: {
- fields: ['id'],
- include: {
- relation: 'user',
- scope: {
- fields: ['id'],
- include: {
- relation: 'emailUser',
- scope: {
- fields: ['email']
- }
- }
- }
- }
- }
- }
- ]
- };
-
- this.$http.get(`Routes/${this.$params.id}`, {filter})
- .then(res => this.route = res.data);
- }
-}
-
-ngModule.vnComponent('vnRouteCard', {
- template: require('./index.html'),
- controller: Controller
-});
-
diff --git a/modules/route/front/create/index.html b/modules/route/front/create/index.html
deleted file mode 100644
index de341220e..000000000
--- a/modules/route/front/create/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
diff --git a/modules/route/front/create/index.js b/modules/route/front/create/index.js
deleted file mode 100644
index c81394c10..000000000
--- a/modules/route/front/create/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSubmit() {
- this.$.watcher.submit().then(
- res => {
- this.$http.post(`Routes/${res.data.id}/updateWorkCenter`, null)
- .then(() => {
- this.$state.go('route.card.summary', {id: res.data.id});
- });
- }
- );
- }
-}
-
-ngModule.vnComponent('vnRouteCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/index.js b/modules/route/front/index.js
index 803fc1045..0f2208862 100644
--- a/modules/route/front/index.js
+++ b/modules/route/front/index.js
@@ -1,19 +1,6 @@
export * from './module';
import './main';
-import './index/';
-import './search-panel';
import './descriptor';
import './descriptor-popover';
import './summary';
-import './card';
-import './create';
-import './basic-data';
-import './log';
-import './tickets';
-import './agency-term/index';
-import './agency-term/createInvoiceIn';
-import './agency-term-search-panel';
-import './ticket-popup';
-import './sms';
-import './roadmap';
diff --git a/modules/route/front/index/index.html b/modules/route/front/index/index.html
deleted file mode 100644
index 9384af6be..000000000
--- a/modules/route/front/index/index.html
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id
-
-
- Worker
-
-
- Agency
-
-
- Vehicle
-
-
- Date
-
-
- m³
-
-
- Description
-
-
- Hour started
-
-
- Hour finished
-
-
-
-
-
-
-
-
-
-
- {{::route.id | dashIfEmpty}}
-
-
-
- {{name}} - {{nickname}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{::route.m3 | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Clone
-
-
diff --git a/modules/route/front/index/index.js b/modules/route/front/index/index.js
deleted file mode 100644
index bb32e1f13..000000000
--- a/modules/route/front/index/index.js
+++ /dev/null
@@ -1,151 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $, vnReport) {
- super($element, $);
- this.vnReport = vnReport;
- this.droppableElement = 'a.vn-tr';
- }
-
- preview(route) {
- this.routeSelected = route;
- this.$.summary.show();
- }
-
- showTicketPopup(route) {
- this.routeSelected = route;
- this.$.ticketPopup.show();
- }
-
- get checked() {
- const rows = this.$.model.data || [];
- const checkedRows = [];
- for (let row of rows) {
- if (row.checked)
- checkedRows.push(row);
- }
-
- return checkedRows;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- showRouteReport() {
- const routesIds = [];
- const access_token = this.vnToken.tokenMultimedia;
-
- for (let route of this.checked)
- routesIds.push(route.id);
- const stringRoutesIds = routesIds.join(',');
-
- if (this.checked.length <= 1) {
- const url = `api/Routes/${stringRoutesIds}/driver-route-pdf?access_token=${access_token}`;
- window.open(url, '_blank');
- } else {
- const serializedParams = this.$httpParamSerializer({
- access_token,
- id: stringRoutesIds
- });
- const url = `api/Routes/downloadZip?${serializedParams}`;
- window.open(url, '_blank');
- }
- }
-
- openClonationDialog() {
- this.$.clonationDialog.show();
- this.createdDate = Date.vnNew();
- }
-
- cloneSelectedRoutes() {
- try {
- if (!this.createdDate)
- throw new Error(`The date can't be empty`);
-
- const routesIds = [];
- for (let route of this.checked)
- routesIds.push(route.id);
-
- return this.$http.post('Routes/clone', {ids: routesIds, created: this.createdDate}).then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-
- onDrop($event) {
- const target = $event.target;
- const droppable = target.closest(this.droppableElement);
- const ticketId = $event.dataTransfer.getData('Text');
- const routeId = droppable.id;
-
- if (isNaN(ticketId)) {
- const regexp = new RegExp(/\/ticket\/([0-9]+)\//i);
- const matches = ticketId.match(regexp);
-
- if (matches && matches.length)
- this.insert(routeId, matches[1]);
- else
- this.vnApp.showError(this.$t('Ticket not found'));
- }
-
- if (!isNaN(ticketId))
- this.insert(routeId, ticketId);
- }
-
- insert(routeId, ticketId) {
- routeId = parseInt(routeId);
- ticketId = parseInt(ticketId);
-
- const query = `Routes/${routeId}/insertTicket`;
- return this.$http.patch(query, {ticketId}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- }).catch(error => {
- if (error.status == 404)
- return this.vnApp.showError(this.$t('Ticket not found'));
- throw error;
- });
- }
-
- updateAttributes(route) {
- if (route.started == null || route.finished == null)
- return this.vnApp.showError(this.$t('You must select a valid time'));
- if (route.created == null)
- return this.vnApp.showError(this.$t('You must select a valid date'));
- const params = {
- workerFk: route.workerFk,
- agencyModeFk: route.agencyModeFk,
- vehicleFk: route.vehicleFk,
- created: route.created,
- description: route.description,
- started: route.started,
- finished: route.finished
- };
- const query = `Routes/${route.id}/`;
- this.$http.patch(query, params).then(res => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- markAsServed() {
- const routes = [];
- for (let route of this.checked)
- routes.push(route.id);
-
- const params = {isOk: true};
- for (let routeId of routes)
- this.$http.patch(`Routes/${routeId}`, params);
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnReport'];
-
-ngModule.vnComponent('vnRouteIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/index/index.spec.js b/modules/route/front/index/index.spec.js
deleted file mode 100644
index 399ece714..000000000
--- a/modules/route/front/index/index.spec.js
+++ /dev/null
@@ -1,156 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Component vnRouteIndex', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element(' ');
- controller = $componentController('vnRouteIndex', {$element});
- controller.$.model = crudModel;
- controller.$.model.data = [{id: 1, checked: true}, {id: 2}, {id: 3}];
- }));
-
- describe('checked() getter', () => {
- it('should return the checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
- data[2].checked = true;
-
- const checkedRows = controller.checked;
-
- const firstCheckedRow = checkedRows[0];
- const secondCheckedRow = checkedRows[1];
-
- expect(firstCheckedRow.id).toEqual(1);
- expect(secondCheckedRow.id).toEqual(3);
- });
- });
-
- describe('totalCheked() getter', () => {
- it('should return the total checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
-
- const checkedRows = controller.totalChecked;
-
- expect(checkedRows).toEqual(1);
- });
- });
-
- describe('showRouteReport()', () => {
- it('should call to the vnReport show method', () => {
- jest.spyOn(window, 'open').mockReturnThis();
-
- const data = controller.$.model.data;
- data[0].checked = true;
- data[2].checked = true;
-
- controller.showRouteReport();
-
- expect(window.open).toHaveBeenCalled();
- });
- });
-
- describe('cloneSelectedRoutes()', () => {
- it('should perform an http request to Routes/clone', () => {
- controller.createdDate = Date.vnNew();
-
- $httpBackend.expect('POST', 'Routes/clone').respond();
- controller.cloneSelectedRoutes();
- $httpBackend.flush();
- });
- });
-
- describe('onDrop()', () => {
- it('should call the insert method when dragging a ticket number', () => {
- jest.spyOn(controller, 'insert');
-
- const routeId = '1';
- const expectedTicketId = '16';
- const draggedElement = '16';
- const droppable = document.createElement('a');
- droppable.setAttribute('id', 1);
- droppable.classList.add('vn-tr');
-
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- },
- target: droppable
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(routeId, expectedTicketId);
- });
-
- it('should call the insert method when dragging a ticket link', () => {
- jest.spyOn(controller, 'insert');
-
- const routeId = '1';
- const expectedTicketId = '11';
- const draggedElement = 'http://arkamcity.com/#!/ticket/11/summary';
- const droppable = document.createElement('a');
- droppable.setAttribute('id', 1);
- droppable.classList.add('vn-tr');
-
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- },
- target: droppable
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(routeId, expectedTicketId);
- });
-
- it('should throw an error when dragging an invalid ticket link', () => {
- jest.spyOn(controller.vnApp, 'showError');
-
- const draggedElement = 'http://arkamcity.com/#!/item/11/summary';
- const droppable = document.createElement('a');
- droppable.setAttribute('id', 1);
- droppable.classList.add('vn-tr');
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- },
- target: droppable
- };
- controller.onDrop($event);
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith('Ticket not found');
- });
- });
-
- describe('insert()', () => {
- it('should perform a HTTP patch query and then call both refresh and showSuccess methods', () => {
- jest.spyOn(controller.$.model, 'refresh').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const routeId = 1;
- const ticketId = 11;
- const data = {ticketId};
- $httpBackend.expect('PATCH', `Routes/1/insertTicket`, data).respond();
- controller.insert(routeId, ticketId);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('markAsServed()', () => {
- it('should perform a HTTP patch query', () => {
- const data = {isOk: true};
- $httpBackend.expect('PATCH', `Routes/1`, data).respond();
- controller.markAsServed();
- $httpBackend.flush();
- });
- });
-});
diff --git a/modules/route/front/index/locale/es.yml b/modules/route/front/index/locale/es.yml
deleted file mode 100644
index 3db84d81e..000000000
--- a/modules/route/front/index/locale/es.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-Vehicle: Vehículo
-Download selected routes as PDF: Descargar rutas seleccionadas como PDF
-Clone selected routes: Clonar rutas seleccionadas
-The date can't be empty: La fecha no puede estar vacía
-Starting date: Fecha de inicio
-Hour started: Hora inicio
-Hour finished: Hora fin
-Go to route: Ir a la ruta
-You must select a valid time: Debe seleccionar una hora válida
-You must select a valid date: Debe seleccionar una fecha válida
-Mark as served: Marcar como servidas
-Retrieving data from the routes: Recuperando datos de las rutas
-Send SMS to all clients: Mandar sms a todos los clientes de las rutas
\ No newline at end of file
diff --git a/modules/route/front/locale/en.yml b/modules/route/front/locale/en.yml
deleted file mode 100644
index 0e5302b14..000000000
--- a/modules/route/front/locale/en.yml
+++ /dev/null
@@ -1 +0,0 @@
-Unlink zone: Unlink zone {{zoneName}} from agency {{agencyName}}
\ No newline at end of file
diff --git a/modules/route/front/locale/es.yml b/modules/route/front/locale/es.yml
deleted file mode 100644
index 74ab2cd61..000000000
--- a/modules/route/front/locale/es.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-Routes: Rutas
-Search routes by id: Buscar rutas por identificador
-New route: Nueva ruta
-route: ruta
-Unlink zone: Desvincular zona {{zoneName}} de agencia {{agencyName}}
\ No newline at end of file
diff --git a/modules/route/front/log/index.html b/modules/route/front/log/index.html
deleted file mode 100644
index 7df2e30ae..000000000
--- a/modules/route/front/log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/route/front/log/index.js b/modules/route/front/log/index.js
deleted file mode 100644
index c1a7052a9..000000000
--- a/modules/route/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnRouteLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/route/front/main/index.html b/modules/route/front/main/index.html
index f1bed84ff..e69de29bb 100644
--- a/modules/route/front/main/index.html
+++ b/modules/route/front/main/index.html
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/main/index.js b/modules/route/front/main/index.js
index 8c57bbad6..a567e3072 100644
--- a/modules/route/front/main/index.js
+++ b/modules/route/front/main/index.js
@@ -2,36 +2,12 @@ import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
export default class Route extends ModuleMain {
- $postLink() {
- const to = Date.vnNew();
- to.setDate(to.getDate() + 1);
- to.setHours(0, 0, 0, 0);
-
- const from = Date.vnNew();
- from.setDate(from.getDate());
- from.setHours(0, 0, 0, 0);
-
- this.filterParams = {from, to};
- this.$.model.applyFilter(null, this.filterParams);
+ constructor($element, $) {
+ super($element, $);
}
-
- fetchParams($params) {
- const hasEntries = Object.entries($params).length;
- if (!hasEntries)
- $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;
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`route/`);
}
}
diff --git a/modules/route/front/main/index.spec.js b/modules/route/front/main/index.spec.js
deleted file mode 100644
index 0c16a7b1f..000000000
--- a/modules/route/front/main/index.spec.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import './index.js';
-
-describe('Route Component vnRoute', () => {
- let controller;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject($componentController => {
- let $element = angular.element(`
`);
- controller = $componentController('vnRoute', {$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);
- });
- });
-});
diff --git a/modules/route/front/roadmap/basic-data/index.html b/modules/route/front/roadmap/basic-data/index.html
deleted file mode 100644
index 28c67eb47..000000000
--- a/modules/route/front/roadmap/basic-data/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
diff --git a/modules/route/front/roadmap/basic-data/index.js b/modules/route/front/roadmap/basic-data/index.js
deleted file mode 100644
index d5b39b76e..000000000
--- a/modules/route/front/roadmap/basic-data/index.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSubmit() {
- this.$.watcher.submit();
- }
-}
-
-ngModule.component('vnRoadmapBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/card/index.html b/modules/route/front/roadmap/card/index.html
deleted file mode 100644
index 97ca40f95..000000000
--- a/modules/route/front/roadmap/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/roadmap/card/index.js b/modules/route/front/roadmap/card/index.js
deleted file mode 100644
index ff2d13616..000000000
--- a/modules/route/front/roadmap/card/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import ngModule from '../../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- const filter = {
- include: [
- {relation: 'supplier'}
- ]
- };
- this.$http.get(`Roadmaps/${this.$params.id}`, {filter})
- .then(res => this.roadmap = res.data);
- }
-}
-
-ngModule.vnComponent('vnRoadmapCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/roadmap/create/index.html b/modules/route/front/roadmap/create/index.html
deleted file mode 100644
index f5a26566e..000000000
--- a/modules/route/front/roadmap/create/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
diff --git a/modules/route/front/roadmap/create/index.js b/modules/route/front/roadmap/create/index.js
deleted file mode 100644
index 7e638da94..000000000
--- a/modules/route/front/roadmap/create/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, $, $transclude, vnReport, vnEmail) {
- super($element, $, $transclude);
- this.roadmap = {etd: Date.vnNew()};
- }
-
- onSubmit() {
- this.$.watcher.submit().then(
- res => this.$state.go('route.roadmap.card.summary', {id: res.data.id})
- );
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnRoadmapCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/roadmap/create/style.scss b/modules/route/front/roadmap/create/style.scss
deleted file mode 100644
index 8ee7ecb09..000000000
--- a/modules/route/front/roadmap/create/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
diff --git a/modules/route/front/roadmap/descriptor/index.html b/modules/route/front/roadmap/descriptor/index.html
deleted file mode 100644
index 92ae8eab1..000000000
--- a/modules/route/front/roadmap/descriptor/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- Delete roadmap
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.roadmap.supplier.nickname}}
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/roadmap/descriptor/index.js b/modules/route/front/roadmap/descriptor/index.js
deleted file mode 100644
index 2846b073a..000000000
--- a/modules/route/front/roadmap/descriptor/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get roadmap() {
- return this.entity;
- }
-
- set roadmap(value) {
- this.entity = value;
- }
-
- onDelete() {
- return this.$http.delete(`Roadmaps/${this.roadmap.id}`)
- .then(() => this.$state.go('route.roadmap'))
- .then(() => this.vnApp.showSuccess(this.$t('Roadmap removed')));
- }
-}
-
-ngModule.component('vnRoadmapDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/descriptor/locale/es.yml b/modules/route/front/roadmap/descriptor/locale/es.yml
deleted file mode 100644
index 376209694..000000000
--- a/modules/route/front/roadmap/descriptor/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Delete roadmap: Eliminar troncal
-The roadmap will be removed: La troncal será eliminada
-Roadmap removed: Troncal eliminada
diff --git a/modules/route/front/roadmap/index.js b/modules/route/front/roadmap/index.js
deleted file mode 100644
index 91b782a9b..000000000
--- a/modules/route/front/roadmap/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import './main';
-import './index/';
-import './summary';
-import './card';
-import './descriptor';
-import './create';
-import './basic-data';
-import './search-panel';
-import './stops';
diff --git a/modules/route/front/roadmap/index/index.html b/modules/route/front/roadmap/index/index.html
deleted file mode 100644
index 6f8cbecc4..000000000
--- a/modules/route/front/roadmap/index/index.html
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Roadmap
- ETD
- Carrier
- Plate
- Price
- Observations
-
-
-
-
-
-
-
-
-
- {{::roadmap.name}}
- {{::roadmap.etd | date:'dd/MM/yyyy HH:mm'}}
-
-
- {{::roadmap.supplier.nickname}}
-
-
- {{::roadmap.tractorPlate | dashIfEmpty}}
- {{::roadmap.price | currency: 'EUR':2 | dashIfEmpty}}
- {{::roadmap.observations | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Clone
-
-
-
-
diff --git a/modules/route/front/roadmap/index/index.js b/modules/route/front/roadmap/index/index.js
deleted file mode 100644
index c5f5ef9d1..000000000
--- a/modules/route/front/roadmap/index/index.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- get checked() {
- const roadmaps = this.$.model.data || [];
- const checkedRoadmap = [];
- for (let roadmap of roadmaps) {
- if (roadmap.checked)
- checkedRoadmap.push(roadmap);
- }
-
- return checkedRoadmap;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- preview(roadmap) {
- this.roadmapSelected = roadmap;
- this.$.summary.show();
- }
-
- openClonationDialog() {
- this.$.clonationDialog.show();
- this.etd = Date.vnNew();
- }
-
- cloneSelectedRoadmaps() {
- try {
- if (!this.etd)
- throw new Error(`The date can't be empty`);
-
- const roadmapsIds = [];
- for (let roadmap of this.checked)
- roadmapsIds.push(roadmap.id);
-
- return this.$http.post('Roadmaps/clone', {ids: roadmapsIds, etd: this.etd}).then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-
- deleteRoadmaps() {
- for (const roadmap of this.checked) {
- this.$http.delete(`Roadmaps/${roadmap.id}`)
- .then(() => this.$.model.refresh())
- .then(() => this.vnApp.showSuccess(this.$t('Roadmaps removed')));
- }
- }
-}
-
-ngModule.vnComponent('vnRoadmapIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/roadmap/index/locale/es.yml b/modules/route/front/roadmap/index/locale/es.yml
deleted file mode 100644
index dd93eac6e..000000000
--- a/modules/route/front/roadmap/index/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Delete roadmap(s): Eliminar troncal(es)
-Selected roadmaps will be removed: Los troncales seleccionados serán eliminados
-Roadmaps removed: Troncales eliminados
diff --git a/modules/route/front/roadmap/locale/es.yml b/modules/route/front/roadmap/locale/es.yml
deleted file mode 100644
index e136eca31..000000000
--- a/modules/route/front/roadmap/locale/es.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-Roadmaps: Troncales
-Roadmap: Troncal
-Driver name: Nombre conductor
-Plate: Matrícula
-Price: Precio
-Observations: Observaciones
-Clone selected roadmaps: Clonar troncales seleccionadas
-Select the estimated time of departure (ETD): Seleccione la hora estimada de salida (ETD)
-Create roadmap: Crear troncal
-Tractor plate: Matrícula tractor
-Trailer plate: Matrícula trailer
-Carrier: Transportista
-ETD date: Fecha ETD
-ETD hour: Hora ETD
diff --git a/modules/route/front/roadmap/main/index.html b/modules/route/front/roadmap/main/index.html
deleted file mode 100644
index 3a8eb2599..000000000
--- a/modules/route/front/roadmap/main/index.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/roadmap/main/index.js b/modules/route/front/roadmap/main/index.js
deleted file mode 100644
index e7b3366f2..000000000
--- a/modules/route/front/roadmap/main/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import ngModule from '../../module';
-import ModuleMain from 'salix/components/module-main';
-
-export default class Roadmap extends ModuleMain {
- constructor($element, $) {
- super($element, $);
-
- this.include = {
- relation: 'supplier',
- scope: {
- fields: ['nickname']
- }
- };
- }
-
- $postLink() {
- const from = Date.vnNew();
- from.setHours(0, 0, 0, 0);
-
- const to = Date.vnNew();
- to.setHours(23, 59, 59, 999);
-
- this.filterParams = {
- from: from,
- to: to
- };
-
- this.$.model.addFilter({where: {
- and: [
- {etd: {gte: from}},
- {etd: {lte: to}}
- ]
- }});
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return /^\d+$/.test(value)
- ? {id: value}
- : {name: {like: `%${value}%`}};
- case 'from':
- return {etd: {gte: value}};
- case 'to':
- return {etd: {lte: value}};
- case 'supplierFk':
- case 'price':
- return {[param]: value};
- case 'tractorPlate':
- case 'trailerPlate':
- case 'phone':
- case 'driverName':
- return {[param]: {like: `%${value}%`}};
- }
- }
-}
-
-ngModule.vnComponent('vnRoadmap', {
- controller: Roadmap,
- template: require('./index.html')
-});
diff --git a/modules/route/front/roadmap/main/locale/es.yml b/modules/route/front/roadmap/main/locale/es.yml
deleted file mode 100644
index 78342bce8..000000000
--- a/modules/route/front/roadmap/main/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Search roadmap by id or trunk: Buscar troncales por id o troncal
diff --git a/modules/route/front/roadmap/search-panel/index.html b/modules/route/front/roadmap/search-panel/index.html
deleted file mode 100644
index 53fd37344..000000000
--- a/modules/route/front/roadmap/search-panel/index.html
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
diff --git a/modules/route/front/roadmap/search-panel/index.js b/modules/route/front/roadmap/search-panel/index.js
deleted file mode 100644
index 499027d14..000000000
--- a/modules/route/front/roadmap/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.component('vnRoadmapSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/route/front/roadmap/stops/index.html b/modules/route/front/roadmap/stops/index.html
deleted file mode 100644
index 82f30c326..000000000
--- a/modules/route/front/roadmap/stops/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
diff --git a/modules/route/front/roadmap/stops/index.js b/modules/route/front/roadmap/stops/index.js
deleted file mode 100644
index 075a1c8a4..000000000
--- a/modules/route/front/roadmap/stops/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- add() {
- const filter = {
- fields: ['etd']
- };
- this.$http.get(`Roadmaps/${this.$params.id}`, {filter})
- .then(res => {
- this.roadmap = res.data;
-
- const eta = new Date(this.roadmap.etd);
- eta.setDate(eta.getDate() + 1);
-
- this.$.model.insert({
- roadmapFk: this.$params.id,
- eta: eta
- });
- });
- }
-
- onSubmit() {
- this.$.watcher.check();
- this.$.model.save().then(() => {
- this.$.watcher.notifySaved();
- this.$.watcher.updateOriginalData();
- this.$.model.refresh();
- });
- }
-}
-
-ngModule.component('vnRoadmapStops', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/stops/locale/es.yml b/modules/route/front/roadmap/stops/locale/es.yml
deleted file mode 100644
index 1db275949..000000000
--- a/modules/route/front/roadmap/stops/locale/es.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-Remove stop: Eliminar parada
-Add stop: Añadir parada
-ETA date: Fecha ETA
-ETA hour: Hora ETA
diff --git a/modules/route/front/roadmap/summary/index.html b/modules/route/front/roadmap/summary/index.html
deleted file mode 100644
index abf5ff90a..000000000
--- a/modules/route/front/roadmap/summary/index.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
- {{summary.id}} - {{summary.name}}
-
-
-
-
-
- {{summary.supplier.nickname}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wharehouse
- ETA
-
-
-
-
- {{roadmapStop.warehouse.name}}
- {{roadmapStop.eta | date:'dd/MM/yyyy HH:mm'}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Confirm
-
-
diff --git a/modules/route/front/roadmap/summary/index.js b/modules/route/front/roadmap/summary/index.js
deleted file mode 100644
index 46abe5ca2..000000000
--- a/modules/route/front/roadmap/summary/index.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import ngModule from '../../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-class Controller extends Component {
- set roadmap(value) {
- this._roadmap = value;
- this.$.summary = null;
- if (!value) return;
-
- this.loadData();
- }
-
- get roadmap() {
- return this._roadmap;
- }
-
- loadData() {
- const filter = {
- include: [
- {relation: 'supplier'},
- {relation: 'worker'},
- {relation: 'roadmapStop',
- scope: {
- include: [
- {relation: 'warehouse'}
- ]
- }}
- ]
- };
- this.$http.get(`Roadmaps/${this.roadmap.id}`, {filter})
- .then(res => this.$.summary = res.data);
- }
-
- getETD() {
- const eta = new Date(this.roadmap.etd);
- eta.setDate(eta.getDate() + 1);
-
- this.roadmapStop = {eta: eta};
- }
-
- onAddAccept() {
- try {
- const data = {
- roadmapFk: this.roadmap.id,
- warehouseFk: this.roadmapStop.warehouseFk,
- eta: this.roadmapStop.eta,
- description: this.roadmapStop.description
- };
-
- this.$http.post(`RoadmapStops`, data)
- .then(() => {
- this.loadData();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-}
-
-ngModule.component('vnRoadmapSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/summary/locale/es.yml b/modules/route/front/roadmap/summary/locale/es.yml
deleted file mode 100644
index f2d82438a..000000000
--- a/modules/route/front/roadmap/summary/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Stops: Paradas
-Wharehouse: Almacén
-You must fill all the fields: Debes rellenar todos los campos
diff --git a/modules/route/front/roadmap/summary/style.scss b/modules/route/front/roadmap/summary/style.scss
deleted file mode 100644
index 743500cef..000000000
--- a/modules/route/front/roadmap/summary/style.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@import "variables";
-
-vn-roadmap-summary .summary {
- a:not(vn-link-phone a) {
- display: flex;
- align-items: center;
- height: 18.328px;
- }
-}
diff --git a/modules/route/front/routes.json b/modules/route/front/routes.json
index 3b866581d..00fedc259 100644
--- a/modules/route/front/routes.json
+++ b/modules/route/front/routes.json
@@ -6,18 +6,7 @@
"dependencies": ["client", "worker", "ticket", "supplier", "invoiceIn"],
"menus": {
"main": [
- {"state": "route.index", "icon": "icon-delivery"},
- {"state": "route.agencyTerm.index", "icon": "icon-agency-term"},
- {"state": "route.roadmap", "icon": "icon-trailer"}
- ],
- "card": [
- {"state": "route.card.basicData", "icon": "settings"},
- {"state": "route.card.tickets", "icon": "icon-ticket"},
- {"state": "route.card.log", "icon": "history"}
- ],
- "roadmap": [
- {"state": "route.roadmap.card.basicData", "icon": "settings"},
- {"state": "route.roadmap.card.stops", "icon": "icon-lines"}
+ {"state": "route.index", "icon": "icon-delivery"}
]
},
"routes": [
@@ -33,108 +22,6 @@
"state": "route.index",
"component": "vn-route-index",
"description": "Routes"
- }, {
- "url": "/create",
- "state": "route.create",
- "component": "vn-route-create",
- "description": "New route"
- }, {
- "url": "/:id",
- "state": "route.card",
- "abstract": true,
- "component": "vn-route-card"
- }, {
- "url": "/agency-term?q",
- "abstract": true,
- "state": "route.agencyTerm",
- "component": "ui-view"
- }, {
- "url": "/index",
- "state": "route.agencyTerm.index",
- "component": "vn-agency-term-index",
- "description": "Autonomous",
- "acl": ["administrative"]
- },{
- "url": "/createInvoiceIn?q",
- "state": "route.agencyTerm.createInvoiceIn",
- "component": "vn-agency-term-create-invoice-in",
- "description": "File management",
- "params": {
- "route": "$ctrl.route"
- },
- "acl": ["administrative"]
- }, {
- "url": "/summary",
- "state": "route.card.summary",
- "component": "vn-route-summary",
- "description": "Summary",
- "params": {
- "route": "$ctrl.route"
- }
- }, {
- "url": "/basic-data",
- "state": "route.card.basicData",
- "component": "vn-route-basic-data",
- "description": "Basic data",
- "params": {
- "route": "$ctrl.route"
- },
- "acl": ["delivery"]
- }, {
- "url" : "/log",
- "state": "route.card.log",
- "component": "vn-route-log",
- "description": "Log",
- "acl": ["delivery"]
- }, {
- "url": "/tickets",
- "state": "route.card.tickets",
- "component": "vn-route-tickets",
- "description": "Tickets",
- "params": {
- "route": "$ctrl.route"
- },
- "acl": ["delivery"]
- }, {
- "url": "/roadmap?q",
- "state": "route.roadmap",
- "component": "vn-roadmap",
- "description": "Roadmaps"
- }, {
- "url": "/create",
- "state": "route.roadmap.create",
- "component": "vn-roadmap-create",
- "description": "Create roadmap"
- },{
- "url": "/:id",
- "state": "route.roadmap.card",
- "component": "vn-roadmap-card",
- "abstract": true,
- "description": "Detail"
- },{
- "url": "/summary",
- "state": "route.roadmap.card.summary",
- "component": "vn-roadmap-summary",
- "description": "Summary",
- "params": {
- "roadmap": "$ctrl.roadmap"
- }
- },{
- "url": "/basic-data",
- "state": "route.roadmap.card.basicData",
- "component": "vn-roadmap-basic-data",
- "description": "Basic data",
- "params": {
- "roadmap": "$ctrl.roadmap"
- }
- }, {
- "url": "/stops",
- "state": "route.roadmap.card.stops",
- "component": "vn-roadmap-stops",
- "description": "Stops",
- "params": {
- "route": "$ctrl.roadmap"
- }
}
]
}
diff --git a/modules/route/front/search-panel/index.html b/modules/route/front/search-panel/index.html
deleted file mode 100644
index f3d392580..000000000
--- a/modules/route/front/search-panel/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/search-panel/index.js b/modules/route/front/search-panel/index.js
deleted file mode 100644
index b5abbd94a..000000000
--- a/modules/route/front/search-panel/index.js
+++ /dev/null
@@ -1,43 +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 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('vnRouteSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/search-panel/index.spec.js b/modules/route/front/search-panel/index.spec.js
deleted file mode 100644
index ae15e16e4..000000000
--- a/modules/route/front/search-panel/index.spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import './index';
-
-describe('Route Component vnRouteSearchPanel', () => {
- let controller;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject($componentController => {
- controller = $componentController('vnRouteSearchPanel', {$element: null});
- controller.$t = () => {};
- controller.filter = {};
- }));
-
- 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/route/front/sms/index.html b/modules/route/front/sms/index.html
deleted file mode 100644
index 0d7dd7c11..000000000
--- a/modules/route/front/sms/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{'Characters remaining' | translate}}:
-
- {{$ctrl.charactersRemaining()}}
-
-
-
-
-
-
-
- Send
-
-
\ No newline at end of file
diff --git a/modules/route/front/sms/index.js b/modules/route/front/sms/index.js
deleted file mode 100644
index f466adea7..000000000
--- a/modules/route/front/sms/index.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-class Controller extends Component {
- open() {
- this.$.SMSDialog.show();
- }
-
- charactersRemaining() {
- const element = this.$.message;
- const value = element.input.value;
-
- const maxLength = 160;
- const textAreaLength = new Blob([value]).size;
- return maxLength - textAreaLength;
- }
-
- onResponse() {
- try {
- if (!this.sms.destination)
- throw new Error(`The destination can't be empty`);
- if (!this.sms.message)
- throw new Error(`The message can't be empty`);
- if (this.charactersRemaining() < 0)
- throw new Error(`The message it's too long`);
-
- this.$http.post(`Routes/sendSms`, this.sms).then(res => {
- this.vnApp.showMessage(this.$t('SMS sent'));
-
- if (res.data) this.emit('send', {response: res.data});
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- return true;
- }
-}
-
-ngModule.vnComponent('vnRouteSms', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- sms: '<',
- }
-});
diff --git a/modules/route/front/sms/index.spec.js b/modules/route/front/sms/index.spec.js
deleted file mode 100644
index 8bf35e673..000000000
--- a/modules/route/front/sms/index.spec.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import './index';
-
-describe('Route', () => {
- describe('Component vnRouteSms', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- let $scope = $rootScope.$new();
- const $element = angular.element(' ');
- controller = $componentController('vnRouteSms', {$element, $scope});
- controller.$.message = {
- input: {
- value: 'My SMS'
- }
- };
- }));
-
- describe('onResponse()', () => {
- it('should perform a POST query and show a success snackbar', () => {
- let params = {destinationFk: 1101, destination: 111111111, message: 'My SMS'};
- controller.sms = {destinationFk: 1101, destination: 111111111, message: 'My SMS'};
-
- jest.spyOn(controller.vnApp, 'showMessage');
- $httpBackend.expect('POST', `Routes/sendSms`, params).respond(200, params);
-
- controller.onResponse();
- $httpBackend.flush();
-
- expect(controller.vnApp.showMessage).toHaveBeenCalledWith('SMS sent');
- });
-
- it('should call onResponse without the destination and show an error snackbar', () => {
- controller.sms = {destinationFk: 1101, message: 'My SMS'};
-
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.onResponse();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The destination can't be empty`);
- });
-
- it('should call onResponse without the message and show an error snackbar', () => {
- controller.sms = {destinationFk: 1101, destination: 222222222};
-
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.onResponse();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The message can't be empty`);
- });
- });
-
- describe('charactersRemaining()', () => {
- it('should return the characters remaining in a element', () => {
- controller.$.message = {
- input: {
- value: 'My message 0€'
- }
- };
-
- let result = controller.charactersRemaining();
-
- expect(result).toEqual(145);
- });
- });
- });
-});
diff --git a/modules/route/front/sms/locale/es.yml b/modules/route/front/sms/locale/es.yml
deleted file mode 100644
index 0168a6eb6..000000000
--- a/modules/route/front/sms/locale/es.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-Send SMS to the selected tickets: Enviar SMS a los tickets seleccionados
-Routes to notify: Rutas a notificar
-Message: Mensaje
-SMS sent!: ¡SMS enviado!
-Characters remaining: Carácteres restantes
-The destination can't be empty: El destinatario no puede estar vacio
-The message can't be empty: El mensaje no puede estar vacio
-The message it's too long: El mensaje es demasiado largo
-Special characters like accents counts as a multiple: Carácteres especiales como los acentos cuentan como varios
\ No newline at end of file
diff --git a/modules/route/front/sms/style.scss b/modules/route/front/sms/style.scss
deleted file mode 100644
index 84571a5f4..000000000
--- a/modules/route/front/sms/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-@import "variables";
-
-.SMSDialog {
- min-width: 400px
-}
\ No newline at end of file
diff --git a/modules/route/front/ticket-popup/index.html b/modules/route/front/ticket-popup/index.html
deleted file mode 100644
index 5046d5e43..000000000
--- a/modules/route/front/ticket-popup/index.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
- Tickets to add
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ticket
- Client
- Province
-
-
- Population
-
-
- PC
- Address
- Zone
-
-
-
-
-
-
-
-
-
-
- {{::ticket.id}}
-
-
-
-
- {{::ticket.nickname}}
-
-
- {{::ticket.address.province.name}}
- {{::ticket.address.city}}
- {{::ticket.address.postalCode}}
- {{::ticket.address.street}}
-
- {{::ticket.zone.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/ticket-popup/index.js b/modules/route/front/ticket-popup/index.js
deleted file mode 100644
index 8fd7b5d71..000000000
--- a/modules/route/front/ticket-popup/index.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import ngModule from '../module';
-import Dialog from 'core/components/dialog';
-import './style.scss';
-
-class Controller extends Dialog {
- constructor($element, $, $transclude) {
- super($element, $, $transclude);
- }
-
- getSelectedTickets(tickets) {
- const selectedTickets = [];
-
- if (tickets) {
- for (let i = 0; i < tickets.length; i++) {
- if (tickets[i].checked)
- selectedTickets.push(tickets[i]);
- }
- }
- return selectedTickets;
- }
-
- updateVolume() {
- let url = `Routes/${this.route.id}/updateVolume`;
- this.$http.post(url).then(() => {
- this.$.model.refresh();
- if (this.parentReload)
- this.parentReload();
- });
- }
-
- setTicketsRoute() {
- const tickets = this.getSelectedTickets(this.possibleTickets);
- if (tickets.length === 0) return;
-
- const updates = [];
-
- for (let ticket of tickets) {
- delete ticket.checked;
- const update = {
- where: {id: ticket.id},
- data: {routeFk: this.route.id}
- };
-
- updates.push(update);
- }
-
- const data = {creates: [], updates: updates, deletes: []};
- return this.$http.post(`Tickets/crud`, data)
- .then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.updateVolume();
- this.hide();
- });
- }
-
- unlinkZone(ticket) {
- const params = {
- agencyModeId: this.route.agencyModeFk,
- zoneId: ticket.zoneFk,
- };
-
- const query = `Routes/unlink`;
- this.$http.post(query, params).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- this.hide();
- });
- }
-}
-Controller.$inject = ['$element', '$scope', '$transclude'];
-
-ngModule.vnComponent('vnRouteTicketPopup', {
- slotTemplate: require('./index.html'),
- controller: Controller,
- bindings: {
- route: '<',
- model: '',
- parentReload: '&'
- }
-});
diff --git a/modules/route/front/ticket-popup/index.spec.js b/modules/route/front/ticket-popup/index.spec.js
deleted file mode 100644
index b4313024b..000000000
--- a/modules/route/front/ticket-popup/index.spec.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/* eslint max-len: ["error", { "code": 150 }]*/
-import './index';
-
-describe('Route', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(' ');
- const $transclude = {
- $$boundTransclude: {
- $$slots: []
- }
- };
- controller = $componentController('vnRouteTicketPopup', {$element, $scope, $transclude});
- controller.route = {id: 1};
- controller.$.model = {
- refresh: () => {},
- remove: () => {}
- };
- controller.card = {reload: () => {}};
- }));
-
- describe('unlink()', () => {
- it('should call the route unlink endpoint with the agency and zone ids', () => {
- controller.$.model = {refresh: jest.fn()};
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller, 'hide');
-
- controller.route = {
- agencyModeFk: 1
- };
-
- const ticket = {
- zoneFk: 2,
- };
- const params = {
- agencyModeId: controller.route.agencyModeFk,
- zoneId: ticket.zoneFk,
- };
-
- $httpBackend.expectPOST(`Routes/unlink`, params).respond('ok');
- controller.unlinkZone(ticket);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.hide).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('setTicketsRoute()', () => {
- it('should perform a POST query to add tickets to the route', () => {
- controller.$.model = {refresh: jest.fn()};
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller, 'hide');
-
- controller.route = {id: 111};
-
- controller.possibleTickets = [
- {id: 2, checked: false},
- {id: 3, checked: true},
- {id: 4, checked: false},
- {id: 5, checked: true},
- ];
-
- $httpBackend.whenPOST(`Routes/${controller.route.id}/updateVolume`).respond(200);
- $httpBackend.expectPOST('Tickets/crud').respond();
- controller.setTicketsRoute();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.hide).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/route/front/ticket-popup/style.scss b/modules/route/front/ticket-popup/style.scss
deleted file mode 100644
index 77fa48f20..000000000
--- a/modules/route/front/ticket-popup/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-@import "variables";
-
-.dialog{
- padding: $float-spacing
-}
\ No newline at end of file
diff --git a/modules/route/front/tickets/__snapshots__/index.spec.js.snap b/modules/route/front/tickets/__snapshots__/index.spec.js.snap
deleted file mode 100644
index 9476a8e09..000000000
--- a/modules/route/front/tickets/__snapshots__/index.spec.js.snap
+++ /dev/null
@@ -1,18 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Route getSelectedItems() should return the selected items 1`] = `
-Array [
- Object {
- "checked": true,
- "id": 1,
- },
- Object {
- "checked": true,
- "id": 3,
- },
- Object {
- "checked": true,
- "id": 5,
- },
-]
-`;
diff --git a/modules/route/front/tickets/index.html b/modules/route/front/tickets/index.html
deleted file mode 100644
index 7fafeb0ba..000000000
--- a/modules/route/front/tickets/index.html
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/tickets/index.js b/modules/route/front/tickets/index.js
deleted file mode 100644
index a1b97005e..000000000
--- a/modules/route/front/tickets/index.js
+++ /dev/null
@@ -1,201 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- get isChecked() {
- if (this.tickets) {
- for (let instance of this.tickets)
- if (instance.checked) return true;
- }
-
- return false;
- }
-
- getHighestPriority() {
- let highestPriority = Math.max(...this.$.model.data.map(tag => {
- return tag.priority;
- }));
- return highestPriority + 1;
- }
-
- setHighestPriority(ticket) {
- const highestPriority = this.getHighestPriority();
- if (highestPriority - 1 != ticket.priority) {
- const params = {priority: highestPriority};
- const query = `Tickets/${ticket.id}/`;
- this.$http.patch(query, params).then(res => {
- ticket.priority = res.data.priority;
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
- }
-
- setPriority(id, priority) {
- let params = {priority: priority};
- let query = `Tickets/${id}/`;
- this.$http.patch(query, params).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- deletePriority() {
- const lines = this.getSelectedItems(this.tickets);
-
- for (const line of lines) {
- this.$http.patch(`Tickets/${line.id}/`, {priority: null}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- });
- }
- }
-
- setOrderedPriority(lines) {
- let priority = 1;
- for (const line of lines) {
- this.$http.patch(`Tickets/${line.id}/`, {priority: priority}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- });
- priority++;
- }
- }
-
- getSelectedItems(items) {
- const selectedItems = [];
-
- if (items) {
- for (let i = 0; i < items.length; i++) {
- if (items[i].checked)
- selectedItems.push(items[i]);
- }
- }
- return selectedItems;
- }
-
- goToBuscaman(ticket) {
- if (!this.route.vehicleFk)
- throw new UserError(`The route doesn't have a vehicle`);
-
- this.$http.get(`Routes/${this.route.vehicleFk}/getDeliveryPoint`).then(res => {
- if (!res.data)
- throw new UserError(`The route's vehicle doesn't have a delivery point`);
-
- let addresses = res.data;
- const lines = ticket ? [ticket] : this.getSelectedItems(this.tickets);
- lines.forEach((line, index) => {
- const previousLine = lines[index - 1] ? lines[index - 1].street : null;
- if (previousLine != line.street)
- addresses = addresses + '+to:' + line.postalCode + ' ' + line.city + ' ' + line.street;
- });
-
- const url = 'http://gps.buscalia.com/usuario/localizar.aspx?bmi=true&addr=';
- window.open(url + encodeURI(addresses), '_blank');
- });
- }
-
- showDeleteConfirm(id) {
- this.selectedTicket = id;
- this.$.confirm.show();
- }
-
- removeTicketFromRoute($index) {
- let params = {routeFk: null};
- let query = `Tickets/${this.selectedTicket}/`;
- this.$http.patch(query, params).then(() => {
- this.$.model.remove($index);
- this.vnApp.showSuccess(this.$t('Ticket removed from route'));
- this.updateVolume();
- });
- }
-
- updateVolume() {
- let url = `Routes/${this.$params.id}/updateVolume`;
- this.$http.post(url).then(() => {
- this.card.reload();
- this.$.model.refresh();
- });
- }
-
- guessPriority() {
- let query = `Routes/${this.$params.id}/guessPriority/`;
- this.$http.patch(query).then(() => {
- this.vnApp.showSuccess(this.$t('Order changed'));
- this.$.model.refresh();
- });
- }
-
- onDrop($event) {
- const ticketId = $event.dataTransfer.getData('Text');
-
- if (isNaN(ticketId)) {
- const regexp = new RegExp(/\/ticket\/([0-9]+)\//i);
- const matches = ticketId.match(regexp);
-
- if (matches && matches.length)
- this.insert(matches[1]);
- else
- this.vnApp.showError(this.$t('Ticket not found'));
- }
-
- if (!isNaN(ticketId))
- this.insert(ticketId);
- }
-
- insert(ticketId) {
- ticketId = parseInt(ticketId);
-
- const query = `Routes/${this.route.id}/insertTicket`;
- return this.$http.patch(query, {ticketId}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.updateVolume();
- }).catch(error => {
- if (error.status == 404)
- return this.vnApp.showError(this.$t('Ticket not found'));
- throw error;
- });
- }
-
- async sendSms() {
- try {
- const clientsFk = [];
- const clientsName = [];
- const clients = [];
-
- const selectedTickets = this.getSelectedItems(this.$.$ctrl.tickets);
-
- for (let ticket of selectedTickets) {
- clientsFk.push(ticket.clientFk);
- let userContact = await this.$http.get(`Clients/${ticket.clientFk}`);
- clientsName.push(userContact.data.name);
- clients.push(userContact.data.phone);
- }
-
- const destinationFk = String(clientsFk);
- const destination = String(clients);
-
- this.newSMS = Object.assign({
- destinationFk: destinationFk,
- destination: destination
- });
-
- this.$.sms.open();
- return true;
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- }
-}
-
-ngModule.vnComponent('vnRouteTickets', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnRouteCard'
- },
- bindings: {
- route: '<'
- }
-});
diff --git a/modules/route/front/tickets/index.spec.js b/modules/route/front/tickets/index.spec.js
deleted file mode 100644
index fef4b8331..000000000
--- a/modules/route/front/tickets/index.spec.js
+++ /dev/null
@@ -1,277 +0,0 @@
-/* eslint max-len: ["error", { "code": 150 }]*/
-import './index';
-
-describe('Route', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(' ');
- controller = $componentController('vnRouteTickets', {$element, $scope});
- controller.route = {id: 1};
- controller.$.model = {
- refresh: () => {},
- remove: () => {}
- };
- controller.card = {reload: () => {}};
- }));
-
- describe('route setter/getter', () => {
- it('should return the route id', () => {
- controller.route = 2;
-
- expect(controller.route).toEqual(2);
- });
- });
-
- describe('isChecked getter', () => {
- it('should return false if none of the tickets is checked or there are no tickets', () => {
- expect(controller.isChecked).toBeFalsy();
- });
-
- it('should return true if any of the tickets is checked', () => {
- controller.tickets = [{checked: true}];
-
- expect(controller.isChecked).toBeTruthy();
- });
- });
-
- describe('getHighestPriority()', () => {
- it('should return the highest value found in priorities plus 1', () => {
- controller.$.model = {data: [
- {priority: 99},
- {priority: 1},
- {priority: 2},
- {priority: 3},
- {priority: 4},
- {priority: 5},
- ]};
-
- let result = controller.getHighestPriority();
-
- expect(result).toEqual(100);
- });
- });
-
- describe('setHighestPriority()', () => {
- it('should set a ticket highest priority', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- controller.$.model.data = [{priority: 3}];
- const ticket = {id: 1, priority: 2};
- const res = {data: {priority: 4}};
-
- $httpBackend.expectPATCH(`Tickets/${ticket.id}/`).respond(res);
- controller.setHighestPriority(ticket);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('setPriority()', () => {
- it('should set a ticket priority', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- const ticketId = 1;
- const priority = 999;
-
- $httpBackend.expectPATCH(`Tickets/${ticketId}/`).respond('ok');
- controller.setPriority(ticketId, priority);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('deletePriority()', () => {
- it('should delete priority of all tickets', () => {
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.vnApp, 'showSuccess');
- controller.tickets = [{id: 1, checked: true}];
-
- $httpBackend.expectPATCH(`Tickets/${controller.tickets[0].id}/`).respond();
- controller.deletePriority();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('setOrderedPriority()', () => {
- it('should set priority of all tickets starting by 1', () => {
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.vnApp, 'showSuccess');
- const tickets = [{id: 1, checked: true}];
-
- $httpBackend.expectPATCH(`Tickets/${tickets[0].id}/`).respond();
- controller.setOrderedPriority(tickets);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('getSelectedItems()', () => {
- it('should return the selected items', () => {
- let items = [
- {id: 1, checked: true},
- {id: 2, checked: false},
- {id: 3, checked: true},
- {id: 4, checked: false},
- {id: 5, checked: true},
- ];
-
- let selectedItems = controller.getSelectedItems(items);
-
- expect(selectedItems).toMatchSnapshot();
- });
- });
-
- describe('goToBuscaman()', () => {
- it('should open buscaman with the given arguments', () => {
- jest.spyOn(window, 'open').mockReturnThis();
- const expectedUrl = 'http://gps.buscalia.com/usuario/localizar.aspx?bmi=true&addr=46460%20Av%20Espioca%20100+to:n19%20London%20my%20street';
- controller.route = {vehicleFk: 1};
- const url = `Routes/${controller.route.vehicleFk}/getDeliveryPoint`;
- $httpBackend.expectGET(url).respond('46460 Av Espioca 100');
-
- controller.tickets = [
- {
- id: 1,
- checked: true,
- street: 'my street',
- postalCode: 'n19',
- city: 'London'
- },
- ];
-
- controller.goToBuscaman();
- $httpBackend.flush();
-
- expect(window.open).toHaveBeenCalledWith(expectedUrl, '_blank');
- });
- });
-
- describe('showDeleteConfirm()', () => {
- it('should open a confirm dialog after setting the selected ticket into the controller', () => {
- controller.$.confirm = {show: () => {}};
- jest.spyOn(controller.$.confirm, 'show');
- let ticketId = 1;
-
- controller.showDeleteConfirm(ticketId);
-
- expect(controller.selectedTicket).toEqual(ticketId);
- expect(controller.$.confirm.show).toHaveBeenCalledWith();
- });
- });
-
- describe('removeTicketFromRoute()', () => {
- it('should perform a patch query then call showSuccess and updateVolume methods', () => {
- controller.$params = {id: 1101};
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$.model, 'remove');
-
- let ticketId = 1;
- controller.selectedTicket = ticketId;
-
- $httpBackend.whenPOST(`Routes/${controller.$params.id}/updateVolume`).respond(200);
- $httpBackend.expectPATCH(`Tickets/${ticketId}/`).respond('ok');
- controller.removeTicketFromRoute();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Ticket removed from route');
- });
- });
-
- describe('updateVolume()', () => {
- it('should perform a POST query then call both reload and refresh methods', () => {
- controller.$params = {id: 999};
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.card, 'reload');
-
- let ticketId = 1;
- controller.selectedTicket = ticketId;
-
- const url = `Routes/${controller.$params.id}/updateVolume`;
- $httpBackend.expectPOST(url).respond('ok');
- controller.updateVolume();
- $httpBackend.flush();
-
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- expect(controller.card.reload).toHaveBeenCalledWith();
- });
- });
-
- describe('onDrop()', () => {
- it('should call the insert method when dragging a ticket number', () => {
- jest.spyOn(controller, 'insert');
-
- const expectedTicketId = '11';
- const draggedElement = '11';
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- }
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(expectedTicketId);
- });
-
- it('should call the insert method when dragging a ticket link', () => {
- jest.spyOn(controller, 'insert');
-
- const expectedTicketId = '11';
- const draggedElement = 'http://arkamcity.com/#!/ticket/11/summary';
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- }
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(expectedTicketId);
- });
-
- it('should throw an error when dragging an invalid ticket link', () => {
- jest.spyOn(controller.vnApp, 'showError');
-
- const draggedElement = 'http://arkamcity.com/#!/item/11/summary';
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- }
- };
- controller.onDrop($event);
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith('Ticket not found');
- });
- });
-
- describe('insert()', () => {
- it('should make a HTTP patch query and then call both refresh and showSuccess methods', () => {
- controller.$params = {id: 1101};
-
- jest.spyOn(controller.$.model, 'refresh').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const ticketId = 11;
- const data = {ticketId};
-
- $httpBackend.whenPOST(`Routes/${controller.$params.id}/updateVolume`).respond(200);
- $httpBackend.expect('PATCH', `Routes/1/insertTicket`, data).respond();
- controller.insert(ticketId);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/route/front/tickets/locale/es.yml b/modules/route/front/tickets/locale/es.yml
deleted file mode 100644
index e7f483d2f..000000000
--- a/modules/route/front/tickets/locale/es.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-Remove ticket: Eliminar ticket
-Open buscaman: Abrir buscaman
-Ticket removed from route: Ticket quitado de la ruta
-Order changed: Orden cambiado
-Delete ticket from route?: ¿Quitar el ticket de la ruta?
-Sort routes: Ordenar rutas
-Add ticket: Añadir ticket
-Tickets to add: Tickets a añadir
-Ticket not found: No se ha encontrado el ticket
-The selected ticket is not suitable for this route: El ticket seleccionado no es apto para esta ruta
-PC: CP
-The route's vehicle doesn't have a delivery point: El vehículo de la ruta no tiene un punto de entrega
-The route doesn't have a vehicle: La ruta no tiene un vehículo
-Population: Población
-Unlink selected zone?: Desvincular zona seleccionada?
-Delete priority: Borrar orden
-Renumber all tickets in the order you see on the screen: Renumerar todos los tickets con el orden que ves por pantalla
-Assign highest priority: Asignar máxima prioridad
\ No newline at end of file
diff --git a/modules/route/front/tickets/style.scss b/modules/route/front/tickets/style.scss
deleted file mode 100644
index 9393a7d59..000000000
--- a/modules/route/front/tickets/style.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@import "variables";
-
-vn-route-tickets form{
- margin: 0 auto;
- max-width: $width-lg;
-
- .order-field {
- max-width: 30px;
- }
-}
-
-.button-right{
- display: block;
- padding-right: 50px;
- text-align: right;
-}
\ No newline at end of file
diff --git a/modules/ticket/back/methods/expedition/deleteExpeditions.js b/modules/ticket/back/methods/expedition/deleteExpeditions.js
index 90a649425..75993a485 100644
--- a/modules/ticket/back/methods/expedition/deleteExpeditions.js
+++ b/modules/ticket/back/methods/expedition/deleteExpeditions.js
@@ -27,40 +27,33 @@ module.exports = Self => {
const deletedExpeditions = [];
for (let expeditionId of expeditionIds) {
- const filter = {
- fields: [],
- where: {
- id: expeditionId
- },
- include: [
- {
- relation: 'agencyMode',
- scope: {
- fields: ['code'],
+ try {
+ const expedition = await models.Expedition.findById(expeditionId, {
+ include: [
+ {
+ relation: 'agencyMode',
+ scope: {
+ fields: ['code'],
+ }
}
- }
- ]
- };
+ ]
+ });
+ const {code} = expedition.agencyMode();
- const expedition = await models.Expedition.findOne(filter);
- const {code} = expedition.agencyMode();
- let isDeleted = true;
+ if (code?.toLowerCase()?.includes('mrw') && expedition.externalId) {
+ const result = await models.MrwConfig.cancelShipment(expeditionId);
+ if (!result) throw new Error('not deleted');
+ }
- if (code?.toLowerCase()?.includes('mrw')) {
- const result = await models.MrwConfig.cancelShipment(expeditionId);
- isDeleted = result;
- }
+ if (code?.toLowerCase()?.substring(0, 10) == 'viaexpress') {
+ const result = await models.ViaexpressConfig.deleteExpedition(expeditionId);
+ if (result !== 'true') throw new Error('not deleted');
+ }
- if (code?.toLowerCase()?.substring(0, 10) == 'viaexpress') {
- const result = await models.ViaexpressConfig.deleteExpedition(expeditionId);
- if (result !== 'true') isDeleted = false;
- }
-
- if (!isDeleted)
- notDeletedExpeditions.push(expeditionId);
- else {
const deletedExpedition = await models.Expedition.destroyById(expeditionId);
deletedExpeditions.push(deletedExpedition);
+ } catch (e) {
+ notDeletedExpeditions.push(expeditionId);
}
}
diff --git a/modules/ticket/back/methods/ticket/saveSign.js b/modules/ticket/back/methods/ticket/saveSign.js
index a751bd93a..bc0da686c 100644
--- a/modules/ticket/back/methods/ticket/saveSign.js
+++ b/modules/ticket/back/methods/ticket/saveSign.js
@@ -51,23 +51,23 @@ module.exports = Self => {
fields: ['id']
});
- async function setLocation(ticketId) {
+ async function setLocation() {
await models.Delivery.create({
- ticketFk: ticketId,
+ ticketFk: ticket.id,
longitude: location.Longitude,
latitude: location.Latitude,
dated: signedTime || new Date()
}, myOptions);
}
- async function hasSignDms(ticketId) {
+ async function hasSignDms() {
const hasTicketDms = await Self.rawSql(`
SELECT d.id
FROM ticketDms td
JOIN dms d ON d.id = td.dmsFk
WHERE td.ticketFk = ?
AND d.dmsTypeFk = ?
- `, [ticketId, dmsTypeTicket.id], myOptions);
+ `, [ticket.id, dmsTypeTicket.id], myOptions);
if (hasTicketDms.length) return true;
}
@@ -133,9 +133,9 @@ module.exports = Self => {
if (await ticket.isSigned)
throw new UserError('Ticket is already signed');
- if (location) await setLocation(ticketId);
- if (!await hasSignDms(ticketId) && !isSignUploaded)
- await createGestDoc(ticketId);
+ if (location) await setLocation();
+ if (!await hasSignDms() && !isSignUploaded)
+ await createGestDoc();
if (isSignUploaded)
await models.TicketDms.create({ticketFk: ticket.id, dmsFk: dms[0].id}, myOptions);
await ticket.updateAttribute('isSigned', true, myOptions);
diff --git a/modules/ticket/back/methods/ticket/specs/saveSign.spec.js b/modules/ticket/back/methods/ticket/specs/saveSign.spec.js
index 53ab42364..e93408973 100644
--- a/modules/ticket/back/methods/ticket/specs/saveSign.spec.js
+++ b/modules/ticket/back/methods/ticket/specs/saveSign.spec.js
@@ -30,8 +30,6 @@ describe('Ticket saveSign()', () => {
it('should change state for ticket', async() => {
const tx = await models.Ticket.beginTransaction({});
const ticketWithPackedState = 7;
- const ticketStateId = 16;
- const ticketCode = 'PARTIAL_DELIVERED';
spyOn(models.Dms, 'uploadFile').and.returnValue([{id: 1}]);
let ticketTrackingAfter;
@@ -39,16 +37,11 @@ describe('Ticket saveSign()', () => {
const options = {transaction: tx};
const tickets = [ticketWithPackedState];
- const state = await models.State.findById(ticketStateId, null, options);
- await state.updateAttributes({
- code: ticketCode,
- name: ticketCode
- }, options);
+ const expedition = await models.Expedition.findById(3, null, options);
+ expedition.updateAttribute('ticketFk', ticketWithPackedState, options);
await models.Ticket.saveSign(ctx, tickets, null, null, options);
- ticketTrackingAfter = await models.TicketLastState.findOne({
- where: {ticketFk: ticketWithPackedState}
- }, options);
+ ticketTrackingAfter = await models.TicketLastState.findById(ticketWithPackedState, null, options);
await tx.rollback();
} catch (e) {
@@ -56,6 +49,6 @@ describe('Ticket saveSign()', () => {
throw e;
}
- expect(ticketTrackingAfter.name).toBe('PARTIAL_DELIVERED');
+ expect(ticketTrackingAfter.name).toBe('Entregado en parte');
});
});
diff --git a/modules/ticket/back/methods/ticket/transferSales.js b/modules/ticket/back/methods/ticket/transferSales.js
index 54306510c..5f5fdde67 100644
--- a/modules/ticket/back/methods/ticket/transferSales.js
+++ b/modules/ticket/back/methods/ticket/transferSales.js
@@ -83,12 +83,12 @@ module.exports = Self => {
for (const sale of sales) {
const originalSale = map.get(sale.id);
- if (sale.quantity == originalSale.quantity) {
+ if (sale.quantity == originalSale?.quantity) {
query = `UPDATE sale
SET ticketFk = ?
WHERE id = ?`;
await Self.rawSql(query, [ticketId, sale.id], myOptions);
- } else if (sale.quantity != originalSale.quantity) {
+ } else if (sale.quantity != originalSale?.quantity) {
await transferPartialSale(
ticketId, originalSale, sale, myOptions);
}
diff --git a/modules/ticket/front/advance/index.js b/modules/ticket/front/advance/index.js
index 1f47d8242..15ad303e3 100644
--- a/modules/ticket/front/advance/index.js
+++ b/modules/ticket/front/advance/index.js
@@ -62,8 +62,11 @@ export default class Controller extends Section {
setDefaultFilter() {
let today = Date.vnNew();
+ today.setHours(0, 0, 0, 0);
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
+ tomorrow.setHours(23, 59, 59, 999);
+
this.$http.get(`UserConfigs/getUserConfig`)
.then(res => {
this.filterParams = {
@@ -86,15 +89,6 @@ export default class Controller extends Section {
return checkedLines;
}
- 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];
- }
-
totalPriceColor(totalWithVat) {
return this.isLessThan50(totalWithVat) ? 'warning' : '';
}
diff --git a/modules/ticket/front/advance/index.spec.js b/modules/ticket/front/advance/index.spec.js
index 883993c1c..5caca742c 100644
--- a/modules/ticket/front/advance/index.spec.js
+++ b/modules/ticket/front/advance/index.spec.js
@@ -36,24 +36,6 @@ describe('Component vnTicketAdvance', () => {
});
});
- 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('moveTicketsAdvance()', () => {
it('should make an HTTP Post query', () => {
jest.spyOn(controller.$.model, 'refresh');
diff --git a/modules/worker/back/methods/worker-time-control/sendMail.js b/modules/worker/back/methods/worker-time-control/sendMail.js
index e43f4a8ab..2e1e00d83 100644
--- a/modules/worker/back/methods/worker-time-control/sendMail.js
+++ b/modules/worker/back/methods/worker-time-control/sendMail.js
@@ -165,8 +165,8 @@ module.exports = Self => {
const sql = ParameterizedSQL.join(stmts, ';');
const days = await conn.executeStmt(sql, myOptions);
- let previousWorkerFk = days[index][0].workerFk;
- let previousReceiver = days[index][0].receiver;
+ let previousWorkerFk = days[index][0]?.workerFk;
+ let previousReceiver = days[index][0]?.receiver;
const workerTimeControlConfig = await models.WorkerTimeControlConfig.findOne(null, myOptions);
diff --git a/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js b/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js
index f19ab17e1..e352eb3cb 100644
--- a/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js
+++ b/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js
@@ -61,7 +61,7 @@ module.exports = Self => {
const url = `${salix.url}worker/${args.workerId}/time-control?timestamp=${timestamp}`;
ctx.args.url = url;
- await models.WorkerTimeControl.updateMailState(ctx, ctx.workerId, myOptions);
+ await models.WorkerTimeControl.updateMailState(ctx, ctx.args.workerId, myOptions);
return Self.sendTemplate(ctx, 'weekly-hour-record');
};
diff --git a/modules/worker/back/models/calendar.json b/modules/worker/back/models/calendar.json
index 40d29c519..4c68c7793 100644
--- a/modules/worker/back/models/calendar.json
+++ b/modules/worker/back/models/calendar.json
@@ -1,9 +1,8 @@
{
"name": "Calendar",
"base": "VnModel",
- "log": {
- "model": "WorkerLog",
- "relation": "labour"
+ "mixins": {
+ "Loggable": true
},
"options": {
"mysql": {
diff --git a/modules/worker/front/time-control/index.js b/modules/worker/front/time-control/index.js
index 7f7bad137..2993e3986 100644
--- a/modules/worker/front/time-control/index.js
+++ b/modules/worker/front/time-control/index.js
@@ -380,7 +380,6 @@ class Controller extends Section {
updateWorkerTimeControlMail(state, reason) {
const params = {
- workerId: this.worker.id,
year: this.date.getFullYear(),
week: this.weekNumber,
state
@@ -389,7 +388,7 @@ class Controller extends Section {
if (reason)
params.reason = reason;
- const query = `WorkerTimeControls/updateWorkerTimeControlMail`;
+ const query = `WorkerTimeControls/${this.worker.id}/updateMailState`;
this.$http.post(query, params).then(() => {
this.getMailStates(this.date);
this.getWeekData();
diff --git a/modules/worker/front/time-control/index.spec.js b/modules/worker/front/time-control/index.spec.js
index 42df4ba9b..3868ded75 100644
--- a/modules/worker/front/time-control/index.spec.js
+++ b/modules/worker/front/time-control/index.spec.js
@@ -201,7 +201,7 @@ describe('Component vnWorkerTimeControl', () => {
controller.date = today;
controller.weekNumber = 1;
- $httpBackend.expect('POST', 'WorkerTimeControls/updateWorkerTimeControlMail').respond();
+ $httpBackend.expect('POST', 'WorkerTimeControls/1/updateMailState').respond();
controller.isSatisfied();
$httpBackend.flush();
@@ -236,7 +236,7 @@ describe('Component vnWorkerTimeControl', () => {
controller.weekNumber = 1;
controller.reason = 'reason';
- $httpBackend.expect('POST', 'WorkerTimeControls/updateWorkerTimeControlMail').respond();
+ $httpBackend.expect('POST', 'WorkerTimeControls/1/updateMailState').respond();
controller.isSatisfied();
$httpBackend.flush();
diff --git a/myt.config.yml b/myt.config.yml
index 116e3668a..ffa4188b2 100755
--- a/myt.config.yml
+++ b/myt.config.yml
@@ -66,7 +66,6 @@ fixtures:
- siiTrascendencyInvoiceIn
- siiTypeInvoiceIn
- siiTypeInvoiceOut
- - silexACL
- state
- ticketUpdateAction
- volumeConfig
diff --git a/package.json b/package.json
index 9016f74a6..5e7040f36 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "salix-back",
- "version": "24.32.0",
+ "version": "24.34.0",
"author": "Verdnatura Levante SL",
"description": "Salix backend",
"license": "GPL-3.0",
@@ -43,6 +43,7 @@
"mysql": "2.18.1",
"node-ssh": "^11.0.0",
"object.pick": "^1.3.0",
+ "pdf-merger-js": "^5.1.2",
"puppeteer": "21.11.0",
"read-chunk": "^3.2.0",
"require-yaml": "0.0.1",
@@ -80,10 +81,10 @@
"gulp-merge-json": "^1.3.1",
"gulp-nodemon": "^2.5.0",
"gulp-print": "^2.0.1",
- "gulp-wrap": "^0.15.0",
- "gulp-yaml": "^1.0.1",
"gulp-rename": "^2.0.0",
"gulp-replace": "^1.1.4",
+ "gulp-wrap": "^0.15.0",
+ "gulp-yaml": "^1.0.1",
"html-loader": "^0.4.5",
"html-loader-jest": "^0.2.1",
"html-webpack-plugin": "^5.5.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 22d5b46f1..b4030d779 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -95,6 +95,9 @@ dependencies:
object.pick:
specifier: ^1.3.0
version: 1.3.0
+ pdf-merger-js:
+ specifier: ^5.1.2
+ version: 5.1.2
puppeteer:
specifier: 21.11.0
version: 21.11.0(typescript@5.4.4)
@@ -2090,6 +2093,18 @@ packages:
rimraf: 3.0.2
dev: true
+ /@pdf-lib/standard-fonts@1.0.0:
+ resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==}
+ dependencies:
+ pako: 1.0.11
+ dev: false
+
+ /@pdf-lib/upng@1.0.1:
+ resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==}
+ dependencies:
+ pako: 1.0.11
+ dev: false
+
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -4486,6 +4501,11 @@ packages:
engines: {node: '>=14'}
dev: true
+ /commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+ dev: false
+
/commander@2.17.1:
resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==}
dev: true
@@ -11323,6 +11343,24 @@ packages:
pinkie-promise: 2.0.1
dev: true
+ /pdf-lib@1.17.1:
+ resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==}
+ dependencies:
+ '@pdf-lib/standard-fonts': 1.0.0
+ '@pdf-lib/upng': 1.0.1
+ pako: 1.0.11
+ tslib: 1.14.1
+ dev: false
+
+ /pdf-merger-js@5.1.2:
+ resolution: {integrity: sha512-RCBjLQILZ8UA4keO/Ip2/gjUuxigMMoK7mO5eJg6zjlnyymboFnRTgzKwOs/FiU9ornS2m72Qr95oARX1C24fw==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dependencies:
+ commander: 11.1.0
+ pdf-lib: 1.17.1
+ dev: false
+
/pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
dev: false
@@ -13836,6 +13874,10 @@ packages:
resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==}
dev: false
+ /tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: false
+
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
diff --git a/print/templates/email/buyer-week-waste/sql/wasteWeekly.sql b/print/templates/email/buyer-week-waste/sql/wasteWeekly.sql
index 943c085d0..1b486a004 100644
--- a/print/templates/email/buyer-week-waste/sql/wasteWeekly.sql
+++ b/print/templates/email/buyer-week-waste/sql/wasteWeekly.sql
@@ -1,11 +1,13 @@
-SELECT *, 100 * dwindle / total AS percentage
+SELECT *, 100 * dwindle / total `percentage`
FROM (
- SELECT buyer,
- sum(saleTotal) as total,
- sum(saleWaste) as dwindle
+ SELECT u.name buyer,
+ SUM(saleTotal) total,
+ SUM(w.saleInternalWaste + w.saleExternalWaste) dwindle
FROM bs.waste w
- JOIN vn.time t ON w.year = t.year AND w.week = t.week
- WHERE t.dated = DATE_ADD(CURDATE(), INTERVAL -1 WEEK)
- GROUP BY buyer
+ JOIN account.user u ON u.id = w.buyerFk
+ JOIN vn.itemType it ON it.id = w.itemTypeFk
+ WHERE w.year = YEAR(util.VN_CURDATE() - INTERVAL 1 WEEK)
+ AND w.week = WEEK(util.VN_CURDATE() - INTERVAL 1 WEEK, 4)
+ GROUP BY buyerFk
) sub
- ORDER BY percentage DESC;
\ No newline at end of file
+ ORDER BY `percentage` DESC;
diff --git a/print/templates/email/printer-setup/locale/fr.yml b/print/templates/email/printer-setup/locale/fr.yml
new file mode 100644
index 000000000..0c9f7031a
--- /dev/null
+++ b/print/templates/email/printer-setup/locale/fr.yml
@@ -0,0 +1,39 @@
+subject: Instalation et configuration de l'imprimante
+title: "Merci pour votre confiance !"
+description:
+ dear: Cher client
+ instructions: Veuillez suivre les instructions spécifiées dans cet e-mail pour procéder à l'installation de l'imprimante.
+ followGuide: Vous pouvez utiliser comme guide la vidéo du montage du ruban et de la bande.
+ https://www.youtube.com/watch?v=qhb0kgQF3o8 . Vous
+ aurez également besoin de GoLabel, le programme pour imprimer les bandes.
+ downloadFrom: Vous pouvez le télécharger depuis ce lien. https://cdn.verdnatura.es/public/GoLabel.zip
+ downloadDriver: Vous pouvez télécharger le pilote de l'imprimante depuis ce lien. https://es.seagullscientific.com/support/downloads/drivers/godex/download/
+sections:
+ GoLabel:
+ title: Utilisation de GoLabel
+ description: Pour utiliser le programme d'impression des bandes, suivez ces étapes
+ steps:
+ - Ci-joint à cet e-mail, vous trouverez le fichier 'model.ezp' (le modèle de bandes de corona standard). Téléchargez-le et vous le trouverez probablement dans le dossier 'Téléchargements'.
+ - Ouvrez le programme GoLabel.
+ - Cliquez sur l'icône de la barre supérieure en forme de dossier avec une feuille.
+ - Sélectionnez le fichier nommé 'model.ezp' (qui se trouve probablement dans 'Téléchargements'), puis cliquez sur Ouvrir.
+ - Une fois le fichier ouvert, double-cliquez sur le texte. Dans la boîte qui s'ouvre, cliquez sur le texte d'exemple (dans ce cas "TUS HERMANOS") et il apparaîtra dans la même zone à gauche pour que vous puissiez l'éditer et écrire ce que vous souhaitez.
+ - Lorsque vous avez le texte souhaité, cliquez sur le bouton 'OK'.
+ - Allez dans 'Fichier' → 'Enregistrer sous' et enregistrez-le sur le bureau sous un autre nom.
+ - Ensuite, pour imprimer, vous devez d'abord configurer l'imprimante.
+ - Cliquez sur la huitième icône de la barre supérieure, qui sera ici une imprimante avec un engrenage orange.
+ - Une fois là, cliquez sur le menu déroulant du modèle d'imprimante et choisissez le modèle qui correspond au vôtre 'G***'.
+ - Cliquez sur 'Enregistrer' et notre imprimante sera configurée et prête.
+ - Et enfin, pour imprimer, cliquez sur la neuvième icône, qui correspond à une imprimante bleue.
+ help:
+ title: "Avez-vous besoin d'aide ?"
+ description: Si vous avez besoin d'aide, téléchargez notre programme de support afin que nous puissions nous connecter à distance à votre ordinateur et effectuer l'installation. Veuillez nous fournir un horaire de contact pour vous assister, et nous vous contacterons.
+ remoteSupport: Vous pouvez télécharger le programme depuis ce lien. http://soporte.verdnatura.es .
+help: Pour toute question que vous pourriez avoir, n'hésitez pas à nous la poser. Nous sommes là pour vous aider !
+salesPersonName: Je suis votre commercial et mon nom est
+salesPersonPhone: Téléphone et WhatsApp.
+salesPersonEmail: Adresse e-mail.
diff --git a/print/templates/email/sepa-core/locale/en.yml b/print/templates/email/sepa-core/locale/en.yml
new file mode 100644
index 000000000..c6cc4dab4
--- /dev/null
+++ b/print/templates/email/sepa-core/locale/en.yml
@@ -0,0 +1,16 @@
+subject: Bank Direct Debit Request
+title: SEPA CORE Direct Debit
+description:
+ dear: Dear Customer
+ instructions: Given the excellent relationship between our two companies
+ and to facilitate the payment processes of our invoices, we suggest the use
+ of the SEPA CORE direct debit system.
+ This service involves issuing our receipts to your company in an automated
+ and electronic manner, which represents a substantial reduction in costs for you
+ in terms of fees and bank charges.
+ If you accept our proposal, on the due date of each payment, it will be automatically
+ debited from your account through your bank.
+ This system is based on the electronic transmission of data; the handling of
+ physical documents has been eliminated.
+ We appreciate your cooperation,
+ conclusion: Thank you for your attention!
diff --git a/print/templates/email/sepa-core/locale/es.yml b/print/templates/email/sepa-core/locale/es.yml
index 10a1d32fe..a8dd9032e 100644
--- a/print/templates/email/sepa-core/locale/es.yml
+++ b/print/templates/email/sepa-core/locale/es.yml
@@ -9,9 +9,7 @@ description:
forma automatizada y electrónicamente, lo que supone para usted una reducción
sustancial de costos en términos de honorarios y gastos bancarios.
En caso de que acepte nuestra propuesta, a la fecha de vencimiento de cada efecto,
- se debitará a su cuenta automáticamente a través de su entidad bancaria.
- Por tanto, le pedimos que firme y envíe a su banco la autorización original adjunta,
- debidamente cumplimentada, y nos devuelva una fotocopia de dicha autorización.
+ se debitará a su cuenta automáticamente a través de su entidad bancaria.
Este sistema se basa en la transmisión electrónica de datos;
el manejo de documentos físicos ha sido eliminado.
Le agradecemos su cooperación,
diff --git a/print/templates/email/sepa-core/locale/fr.yml b/print/templates/email/sepa-core/locale/fr.yml
index 98bd7593a..6d76ef24f 100644
--- a/print/templates/email/sepa-core/locale/fr.yml
+++ b/print/templates/email/sepa-core/locale/fr.yml
@@ -14,11 +14,7 @@ description:
et commissions bancaires.
Dans le cas où vous accepteriez notre proposition, à
l’échéance de chaque effet, votre compte sera débité
- automatiquement par votre Banque.
- Ainsi, nous vous demandons de signer et envoyer à votre
- Banque l'original de l'autorisation pour débit en annexe,
- dûment remplie, et de nous retourner une photocopie de la
- dite autorisation.
+ automatiquement par votre Banque.
Ce système étant basé sur la transmission de données de
manière électronique, le maniement de documents
physiques á été éliminé
diff --git a/print/templates/reports/buy-label/assets/css/style.css b/print/templates/reports/buy-label/assets/css/style.css
index 0d4a2891d..3b1f2f91e 100644
--- a/print/templates/reports/buy-label/assets/css/style.css
+++ b/print/templates/reports/buy-label/assets/css/style.css
@@ -33,9 +33,6 @@ span {
.barcode {
text-align: center;
}
-#variant {
+.one-third {
width: 314px;
-}
-#producer {
- width: 471px;
}
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/buy-label.html b/print/templates/reports/buy-label/buy-label.html
index b14e54759..5777d34de 100644
--- a/print/templates/reports/buy-label/buy-label.html
+++ b/print/templates/reports/buy-label/buy-label.html
@@ -4,7 +4,7 @@
-
+
{{$t('variety')}}
{{buy.name}}
@@ -63,24 +63,30 @@
-
-
+
+
{{$t('producer')}}
{{buy.producer}}
+
+
+ {{$t('control')}}
+ {{`${weekNum} / ${dayNum}`}}
+
+
-
-
{{$t('control')}}
- {{`${weekNum} / ${dayNum}`}}
+
+ {{$t('reference')}}
+ {{buy.comment}}
{{$t('boxNum')}}
- {{`${buy.labelNum} / ${maxLabelNum}`}}
+ {{`${buy.labelNum} / ${buy.maxLabelNum}`}}
diff --git a/print/templates/reports/buy-label/buy-label.js b/print/templates/reports/buy-label/buy-label.js
index 7d626c052..289483051 100755
--- a/print/templates/reports/buy-label/buy-label.js
+++ b/print/templates/reports/buy-label/buy-label.js
@@ -1,5 +1,6 @@
const vnReport = require('../../../core/mixins/vn-report.js');
const {DOMImplementation, XMLSerializer} = require('xmldom');
+const {models} = require('vn-loopback/server/server');
const jsBarcode = require('jsbarcode');
const moment = require('moment');
@@ -7,15 +8,14 @@ module.exports = {
name: 'buy-label',
mixins: [vnReport],
async serverPrefetch() {
- this.buys = await this.rawSqlFromDef('buys', [this.id, this.id]);
- this.maxLabelNum = Math.max(...this.buys.map(buy => buy.labelNum));
+ const buy = await models.Buy.findById(this.id, null);
+ this.buys = await this.rawSqlFromDef('buy', [buy.entryFk, buy.entryFk, buy.entryFk, this.id]);
const date = new Date();
this.weekNum = moment(date).isoWeek();
this.dayNum = moment(date).day();
},
methods: {
getBarcode(id) {
- const xmlSerializer = new XMLSerializer();
const document = new DOMImplementation().createDocument('http://www.w3.org/1999/xhtml', 'html', null);
const svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
@@ -26,7 +26,7 @@ module.exports = {
width: 3.8,
height: 115,
});
- return xmlSerializer.serializeToString(svgNode);
+ return new XMLSerializer().serializeToString(svgNode);
}
},
props: {
diff --git a/print/templates/reports/buy-label/locale/en.yml b/print/templates/reports/buy-label/locale/en.yml
index d48d00771..333282759 100644
--- a/print/templates/reports/buy-label/locale/en.yml
+++ b/print/templates/reports/buy-label/locale/en.yml
@@ -9,4 +9,5 @@ grouping: Grouping
unitSale: Un. sale
producer: Producer
control: Control
-boxNum: Box no.
\ No newline at end of file
+boxNum: Box no.
+reference: Reference
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/locale/es.yml b/print/templates/reports/buy-label/locale/es.yml
index 33a4a499d..af1d9aa1c 100644
--- a/print/templates/reports/buy-label/locale/es.yml
+++ b/print/templates/reports/buy-label/locale/es.yml
@@ -9,4 +9,5 @@ grouping: Grouping
saleUnit: Sale un.
producer: Productor
control: Control
-boxNum: Caja nº
\ No newline at end of file
+boxNum: Caja nº
+reference: Referencia
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/sql/buy.sql b/print/templates/reports/buy-label/sql/buy.sql
new file mode 100644
index 000000000..72765baa9
--- /dev/null
+++ b/print/templates/reports/buy-label/sql/buy.sql
@@ -0,0 +1,38 @@
+WITH RECURSIVE numbers AS (
+ SELECT 1 n
+ UNION ALL
+ SELECT n + 1
+ FROM numbers
+ WHERE n < (
+ SELECT MAX(stickers)
+ FROM buy
+ WHERE entryFk = ?
+ )
+),
+labels AS (
+ SELECT ROW_NUMBER() OVER(ORDER BY b.id, num.n) labelNum,
+ i.name,
+ i.`size`,
+ i.category,
+ ink.id color,
+ o.code,
+ b.packing,
+ b.`grouping`,
+ i.stems,
+ b.id,
+ b.itemFk,
+ p.name producer,
+ IF(i2.id, i2.comment, i.comment) comment
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ LEFT JOIN producer p ON p.id = i.producerFk
+ LEFT JOIN ink ON ink.id = i.inkFk
+ LEFT JOIN origin o ON o.id = i.originFk
+ LEFT JOIN item i2 ON i2.id = b.itemOriginalFk
+ JOIN numbers num
+ WHERE b.entryFk = ?
+ AND num.n <= b.stickers
+)
+SELECT *, (SELECT SUM(stickers) FROM buy WHERE entryFk = ?) maxLabelNum
+ FROM labels
+ WHERE id = ?
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/sql/buys.sql b/print/templates/reports/buy-label/sql/buys.sql
deleted file mode 100644
index e05ca2a66..000000000
--- a/print/templates/reports/buy-label/sql/buys.sql
+++ /dev/null
@@ -1,31 +0,0 @@
-WITH RECURSIVE numbers AS (
- SELECT 1 n
- UNION ALL
- SELECT n + 1
- FROM numbers
- WHERE n < (
- SELECT MAX(stickers)
- FROM buy
- WHERE entryFk = ?
- )
-)
-SELECT ROW_NUMBER() OVER(ORDER BY b.id, num.n) labelNum,
- i.name,
- i.`size`,
- i.category,
- ink.id color,
- o.code,
- b.packing,
- b.`grouping`,
- i.stems,
- b.id,
- b.itemFk,
- p.name producer
- FROM buy b
- JOIN item i ON i.id = b.itemFk
- LEFT JOIN producer p ON p.id = i.producerFk
- LEFT JOIN ink ON ink.id = i.inkFk
- LEFT JOIN origin o ON o.id = i.originFk
- JOIN numbers num
- WHERE b.entryFk = ?
- AND num.n <= b.stickers
\ No newline at end of file
diff --git a/print/templates/reports/sepa-core/locale/en.yml b/print/templates/reports/sepa-core/locale/en.yml
new file mode 100644
index 000000000..6d7e23501
--- /dev/null
+++ b/print/templates/reports/sepa-core/locale/en.yml
@@ -0,0 +1,46 @@
+reportName: direct-debit-order
+title: SEPA CORE Direct Debit Order
+description: By signing this direct debit order, the debtor authorizes (A) the creditor
+ to send instructions to the debtor's bank to debit their account and (B) the bank to debit
+ their account according to the creditor's instructions. As part of their rights,
+ the debtor is entitled to a refund by their bank under the terms and conditions
+ of the contract signed with the bank. The refund request must be made within
+ eight weeks of the debit. You can obtain additional information about your rights
+ from your financial institution.
+documentCopy: You must take a signed copy of this document to your Bank for registration to avoid returns.
+mandatoryFields: ALL FIELDS MUST BE COMPLETED.
+sendOrder: ONCE THIS DIRECT DEBIT ORDER IS SIGNED, IT MUST BE SENT TO THE CREDITOR
+ FOR SAFEGUARDING AND IT IS RECOMMENDED TO PROVIDE A COPY TO YOUR BANK.
+supplier:
+ toCompleteBySupplier: To be completed by the creditor
+ orderReference: Direct debit order reference
+ identifier: Creditor identifier
+ name: Creditor's name
+ street: Address
+ location: Postal Code - City - Province
+ country: Country
+client:
+ toCompleteByClient: To be completed by the debtor
+ name: Debtor's name(s)
+ fiscalId: NIF
+ street: Debtor's address
+ location: Postal Code - City - Province
+ country: Debtor's country
+ swift: Swift BIC
+ accountNumber: IBAN
+ accountHolder: "(Account holder(s))"
+ accountNumberFormat: In {0}, the IBAN consists of {1} characters always starting with {2}
+ paymentType: Payment type
+ recurrent: Recurrent
+ unique: Unique
+ signLocation: Date - City
+ sign: Debtor's signature and stamp
+order: Direct Debit Order {0}
+Francia: France
+España: Spain
+Portugal: Portugal
+instructions:
+ title: Instructions
+ accountFields: Fill in the fields related to the bank account
+ signDocument: Sign and stamp the document. For it to be valid, the stamp must show the CIF/NIF. If not, the request must be accompanied by an account ownership certificate.
+ thanks: Thank you for your cooperation!
\ No newline at end of file
diff --git a/print/templates/reports/sepa-core/sepa-core.js b/print/templates/reports/sepa-core/sepa-core.js
index 6b941556e..8c4e4911c 100755
--- a/print/templates/reports/sepa-core/sepa-core.js
+++ b/print/templates/reports/sepa-core/sepa-core.js
@@ -1,13 +1,12 @@
const vnReport = require('../../../core/mixins/vn-report.js');
-const db = require('../../../core/database');
module.exports = {
name: 'sepa-core',
mixins: [vnReport],
async serverPrefetch() {
- this.client = await this.findOneFromDef('client', [this.companyId, this.companyId, this.id]);
+ this.client = await this.findOneFromDef('client', [this.id]);
this.checkMainEntity(this.client);
- const suppliers = await this.rawSqlFromDef('supplier', [this.companyId, this.companyId, this.id]);
+ const suppliers = await this.rawSqlFromDef('supplier', [this.companyId, this.id]);
this.supplier = {
...suppliers[0],
accountDetailValue: suppliers.map(val => val?.accountDetailValue)
@@ -23,16 +22,5 @@ module.exports = {
type: Number,
required: true
}
- },
- methods: {
- getSupplierCif() {
- return db.findOne(`
- SELECT DISTINCT ad.value
- FROM supplierAccount sa
- JOIN accountDetail ad ON ad.supplierAccountFk = sa.id
- JOIN accountDetailType adt ON adt.id = ad.accountDetailTypeFk AND adt.id = 3
- WHERE sa.supplierFk = ?`) [this.companyId];
- }
}
-
};
diff --git a/print/templates/reports/sepa-core/sql/client.sql b/print/templates/reports/sepa-core/sql/client.sql
index b3ba180b3..6e0ec89eb 100644
--- a/print/templates/reports/sepa-core/sql/client.sql
+++ b/print/templates/reports/sepa-core/sql/client.sql
@@ -1,19 +1,14 @@
-SELECT
- c.id,
- m.code mandateCode,
+SELECT c.id,
c.socialName,
c.street,
c.postcode,
c.city,
c.fi,
- p.name AS province,
+ p.name province,
ct.name country,
- ct.code AS countryCode,
- ct.ibanLength AS ibanLength
-FROM client c
- JOIN country ct ON ct.id = c.countryFk
- LEFT JOIN mandate m ON m.clientFk = c.id
- AND m.companyFk = ? AND m.finished IS NULL
- LEFT JOIN province p ON p.id = c.provinceFk
-WHERE (m.companyFk = ? OR m.companyFk IS NULL) AND c.id = ?
-ORDER BY m.created DESC LIMIT 1
\ No newline at end of file
+ ct.code countryCode,
+ ct.ibanLength ibanLength
+ FROM client c
+ JOIN country ct ON ct.id = c.countryFk
+ JOIN province p ON p.id = c.provinceFk
+ WHERE c.id = ?
\ No newline at end of file
diff --git a/print/templates/reports/sepa-core/sql/supplier.sql b/print/templates/reports/sepa-core/sql/supplier.sql
index 1276f2437..da543147a 100644
--- a/print/templates/reports/sepa-core/sql/supplier.sql
+++ b/print/templates/reports/sepa-core/sql/supplier.sql
@@ -1,29 +1,24 @@
-SELECT
- m.code mandateCode,
- s.name,
- s.street,
- sc.name country,
- s.postCode,
- s.city,
- sp.name province,
- s.nif,
- sa.supplierFk,
- be.name bankName,
- ad.value accountDetailValue
-FROM
- client c
- LEFT JOIN mandate m ON m.clientFk = c.id AND m.companyFk = ? AND m.finished IS NULL
- LEFT JOIN supplier s ON s.id = m.companyFk
- LEFT JOIN country sc ON sc.id = s.countryFk
- LEFT JOIN province sp ON sp.id = s.provinceFk
- LEFT JOIN province p ON p.id = c.provinceFk
- LEFT JOIN supplierAccount sa ON sa.supplierFk = s.id
- LEFT JOIN bankEntity be ON sa.bankEntityFk = be.id
- LEFT JOIN accountDetail ad ON ad.supplierAccountFk = sa.id
- JOIN accountDetailType adt ON adt.id = ad.accountDetailTypeFk AND adt.id = 3
-WHERE
- (m.companyFk = ? OR m.companyFk IS NULL)
- AND (c.id = ? OR (c.id IS NULL AND c.countryFk = sa.countryFk))
-GROUP BY ad.value
-ORDER BY
-m.created DESC;
+SELECT m.code mandateCode,
+ s.name,
+ s.street,
+ sc.name country,
+ s.postCode,
+ s.city,
+ sp.name province,
+ ad.value accountDetailValue
+ FROM client c
+ JOIN mandate m ON m.clientFk = c.id
+ JOIN mandateType mt ON mt.id = m.mandateTypeFk
+ JOIN supplier s ON s.id = m.companyFk
+ LEFT JOIN country sc ON sc.id = s.countryFk
+ LEFT JOIN province sp ON sp.id = s.provinceFk
+ JOIN supplierAccount sa ON sa.supplierFk = s.id
+ JOIN accountDetail ad ON ad.supplierAccountFk = sa.id
+ JOIN accountDetailType adt ON adt.id = ad.accountDetailTypeFk
+ WHERE m.companyFk = ?
+ AND m.finished IS NULL
+ AND c.id = ?
+ AND mt.name = 'CORE'
+ AND adt.description = 'Referencia Remesas'
+ GROUP BY m.id, ad.value
+ ORDER BY m.created DESC
\ No newline at end of file