diff --git a/back/methods/collection/assign.js b/back/methods/collection/assign.js
index 0484eb5a8..718cd48c5 100644
--- a/back/methods/collection/assign.js
+++ b/back/methods/collection/assign.js
@@ -20,9 +20,13 @@ 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 result = await Self.rawSql(`
+ CALL vn.collection_assign(?, @vCollectionFk);
+ SELECT @vCollectionFk collectionFk
+ `, [userId], myOptions);
+
+ // Por si entra en el SELECT FOR UPDATE y retorna un array más
+ const collectionFk = result[2]?.[0]?.collectionFk || result[3]?.[0]?.collectionFk;
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 663b70e94..b79dbc93a 100644
--- a/back/methods/collection/getTickets.js
+++ b/back/methods/collection/getTickets.js
@@ -63,8 +63,7 @@ module.exports = Self => {
iss.isPicked
FROM ticketCollection tc
LEFT JOIN collection c ON c.id = tc.collectionFk
- JOIN ticket t ON t.id = tc.ticketFk
- JOIN sale s ON s.ticketFk = t.id
+ JOIN sale s ON s.ticketFk = tc.ticketFk
LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
LEFT JOIN saleGroup sg ON sg.id = sgd.saleGroupFk
LEFT JOIN parking p2 ON p2.id = sg.parkingFk
@@ -103,9 +102,8 @@ module.exports = Self => {
FROM sectorCollection sc
JOIN sectorCollectionSaleGroup ss ON ss.sectorCollectionFk = sc.id
JOIN saleGroup sg ON sg.id = ss.saleGroupFk
- JOIN ticket t ON t.id = sg.ticketFk
- JOIN sale s ON s.ticketFk = t.id
- LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
+ LEFT JOIN saleGroupDetail sgd ON sgd.saleGroupFk = sg.id
+ JOIN sale s ON s.id = sgd.saleFk
LEFT JOIN parking p2 ON p2.id = sg.parkingFk
JOIN item i ON i.id = s.itemFk
JOIN itemShelvingSale iss ON iss.saleFk = s.id
diff --git a/back/methods/edi/updateData.js b/back/methods/edi/updateData.js
index 6bebad1e4..d8395cbc4 100644
--- a/back/methods/edi/updateData.js
+++ b/back/methods/edi/updateData.js
@@ -24,7 +24,7 @@ module.exports = Self => {
try {
const options = {transaction: tx, userId: ctx.req.accessToken.userId};
- const files = await Self.rawSql('SELECT name, checksum, keyValue FROM edi.fileConfig', null, options);
+ const files = await Self.rawSql('SELECT name, checksum, keyValue FROM edi.fileMultiConfig', null, options);
const updatableFiles = [];
for (const file of files) {
@@ -54,7 +54,7 @@ module.exports = Self => {
const tables = await Self.rawSql(`
SELECT fileName, toTable, file
- FROM edi.tableConfig
+ FROM edi.tableMultiConfig
WHERE file IN (?)`, [fileNames], options);
for (const table of tables) {
@@ -85,9 +85,9 @@ module.exports = Self => {
for (const file of updatableFiles) {
console.log(`Updating file ${file.name} checksum...`);
await Self.rawSql(`
- UPDATE edi.fileConfig
- SET checksum = ?
- WHERE name = ?`,
+ UPDATE edi.fileMultiConfig
+ SET checksum = ?
+ WHERE name = ?`,
[file.checksum, file.name], options);
}
@@ -228,7 +228,7 @@ module.exports = Self => {
await Self.rawSql(sqlTemplate, [filePath], options);
await Self.rawSql(`
- UPDATE edi.tableConfig
+ UPDATE edi.tableMultiConfig
SET updated = ?
WHERE fileName = ?
`, [Date.vnNew(), baseName], options);
diff --git a/back/methods/mrw-config/cancelShipment.ejs b/back/methods/mrw-config/cancelShipment.ejs
index 9ef401bc8..bc0662981 100644
--- a/back/methods/mrw-config/cancelShipment.ejs
+++ b/back/methods/mrw-config/cancelShipment.ejs
@@ -2,7 +2,7 @@
<%= mrw.franchiseCode %>
- <%= mrw.subscriberCode %>
+ <%= clientType %>
<%= mrw.user %>
<%= mrw.password %>
diff --git a/back/methods/mrw-config/cancelShipment.js b/back/methods/mrw-config/cancelShipment.js
index 86bbb7410..0efd00874 100644
--- a/back/methods/mrw-config/cancelShipment.js
+++ b/back/methods/mrw-config/cancelShipment.js
@@ -13,7 +13,7 @@ module.exports = Self => {
required: true
}],
returns: {
- type: ['object'],
+ type: 'boolean',
root: true
},
http: {
@@ -27,9 +27,9 @@ module.exports = Self => {
const mrw = await models.MrwConfig.findOne();
const {externalId} = await models.Expedition.findById(expeditionFk);
-
+ const clientType = await models.MrwConfig.getClientType(expeditionFk);
const template = fs.readFileSync(__dirname + '/cancelShipment.ejs', 'utf-8');
- const renderedXml = ejs.render(template, {mrw, externalId});
+ const renderedXml = ejs.render(template, {mrw, externalId, clientType});
const response = await axios.post(mrw.url, renderedXml, {
headers: {
'Content-Type': 'application/soap+xml; charset=utf-8'
@@ -37,8 +37,10 @@ module.exports = Self => {
});
const xmlString = response.data;
+ console.log('xmlString: ', xmlString);
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
- return xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
+ const result = xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
+ return result.toLowerCase().includes('se ha cancelado correctamente');
};
};
diff --git a/back/methods/mrw-config/createShipment.ejs b/back/methods/mrw-config/createShipment.ejs
index 8e123ddd9..52ccc859c 100644
--- a/back/methods/mrw-config/createShipment.ejs
+++ b/back/methods/mrw-config/createShipment.ejs
@@ -3,7 +3,7 @@
<%= mrw.franchiseCode %>
- <%= expeditionData.clientType %>
+ <%= clientType %>
<%= mrw.user %>
<%= mrw.password %>
@@ -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 9b23cc370..4db0d0c7d 100644
--- a/back/methods/mrw-config/createShipment.js
+++ b/back/methods/mrw-config/createShipment.js
@@ -22,6 +22,7 @@ module.exports = Self => {
Self.createShipment = async expeditionFk => {
const models = Self.app.models;
const mrw = await Self.getConfig();
+ const clientType = await models.MrwConfig.getClientType(expeditionFk);
const today = Date.vnNew();
const [hours, minutes] = mrw?.expeditionDeadLine ? mrw.expeditionDeadLine.split(':').map(Number) : [0, 0];
@@ -46,14 +47,13 @@ module.exports = Self => {
co.code countryCode,
c.fi,
c.name clientName,
- c.phone,
+ a.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,
- LPAD(ms.clientType, mc.clientTypeWidth, '0') clientType
+ oa.description deliveryObservation
FROM expedition e
JOIN ticket t ON e.ticketFk = t.id
JOIN agencyMode am ON am.id = t.agencyModeFk
@@ -63,8 +63,7 @@ module.exports = Self => {
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
- LEFT JOIN observationType ot ON ot.id = oa.observationTypeFk
- AND ot.code = 'delivery'
+ AND oa.observationTypeFk IN (SELECT id FROM observationType ot WHERE ot.code = 'delivery')
JOIN province p ON a.provinceFk = p.id
JOIN country co ON co.id = p.countryFk
JOIN mrwConfig mc
@@ -73,22 +72,19 @@ module.exports = Self => {
const [expeditionData] = await Self.rawSql(query, [expeditionFk]);
- if (!expeditionData)
- throw new UserError(`This expedition is not a MRW shipment`);
-
if (expeditionData?.shipped.setHours(0, 0, 0, 0) < today.setHours(0, 0, 0, 0))
throw new UserError(`This ticket has a shipped date earlier than today`);
const shipmentResponse = await Self.sendXmlDoc(
__dirname + `/createShipment.ejs`,
- {mrw, expeditionData},
+ {mrw, expeditionData, clientType},
'application/soap+xml'
);
const shipmentId = Self.getTextByTag(shipmentResponse, 'NumeroEnvio');
if (!shipmentId) throw new UserError(Self.getTextByTag(shipmentResponse, 'Mensaje'));
- const file = await models.MrwConfig.getLabel(shipmentId);
+ const file = await models.MrwConfig.getLabel(shipmentId, clientType);
return {shipmentId, file};
};
diff --git a/back/methods/mrw-config/getLabel.ejs b/back/methods/mrw-config/getLabel.ejs
index 09bdb3f6c..b0dae17c8 100644
--- a/back/methods/mrw-config/getLabel.ejs
+++ b/back/methods/mrw-config/getLabel.ejs
@@ -2,7 +2,7 @@
<%= mrw.franchiseCode %>
- <%= mrw.subscriberCode %>
+ <%= clientType %>
<%= mrw.user %>
<%= mrw.password %>
diff --git a/back/methods/mrw-config/getLabel.js b/back/methods/mrw-config/getLabel.js
index aa9b87af1..4af3276bb 100644
--- a/back/methods/mrw-config/getLabel.js
+++ b/back/methods/mrw-config/getLabel.js
@@ -6,7 +6,13 @@ module.exports = Self => {
arg: 'shipmentId',
type: 'string',
required: true
- }],
+ },
+ {
+ arg: 'clientType',
+ type: 'string',
+ required: true
+ },
+ ],
returns: {
type: 'string',
root: true
@@ -17,10 +23,14 @@ module.exports = Self => {
}
});
- Self.getLabel = async shipmentId => {
+ Self.getLabel = async(shipmentId, clientType) => {
const mrw = await Self.getConfig();
- const getLabelResponse = await Self.sendXmlDoc(__dirname + `/getLabel.ejs`, {mrw, shipmentId}, 'text/xml');
+ const getLabelResponse = await Self.sendXmlDoc(
+ __dirname + `/getLabel.ejs`,
+ {mrw, shipmentId, clientType},
+ 'text/xml'
+ );
return Self.getTextByTag(getLabelResponse, 'EtiquetaFile');
};
diff --git a/back/methods/mrw-config/specs/createShipment.spec.js b/back/methods/mrw-config/specs/createShipment.spec.js
index 883dd8f6f..1ab77f608 100644
--- a/back/methods/mrw-config/specs/createShipment.spec.js
+++ b/back/methods/mrw-config/specs/createShipment.spec.js
@@ -40,15 +40,12 @@ describe('MRWConfig createShipment()', () => {
);
+ await models.MrwService.create(
+ {'agencyModeCodeFk': 'mrw', 'clientType': '000001', 'serviceType': 105, 'kg': 10}
+ );
+
await createMrwConfig();
- await models.Application.rawSql(
- `INSERT INTO vn.mrwService
- SET agencyModeCodeFk = 'mrw',
- clientType = 1,
- serviceType = 1,
- kg = 1`, null
- );
await models.Ticket.create(ticket1);
await models.Expedition.create(expedition1);
});
@@ -82,7 +79,8 @@ describe('MRWConfig createShipment()', () => {
'user': 'user',
'password': 'password',
'franchiseCode': 'franchiseCode',
- 'subscriberCode': 'subscriberCode'
+ 'subscriberCode': 'subscriberCode',
+ 'clientTypeWidth': 6
}
);
}
@@ -115,10 +113,10 @@ describe('MRWConfig createShipment()', () => {
it('should fail if expeditionFk is not a MrwExpedition', async() => {
let error;
- await models.MrwConfig.createShipment(undefined).catch(e => {
+ await models.MrwConfig.createShipment(15).catch(e => {
error = e;
}).finally(async() => {
- expect(error.message).toEqual(`This expedition is not a MRW shipment`);
+ expect(error.message).toEqual(`ClientType not available`);
});
});
diff --git a/back/methods/viaexpress-config/renderer.js b/back/methods/viaexpress-config/renderer.js
index c8533ea6b..5d83b5870 100644
--- a/back/methods/viaexpress-config/renderer.js
+++ b/back/methods/viaexpress-config/renderer.js
@@ -20,7 +20,7 @@ module.exports = Self => {
}
});
- Self.renderer = async (expeditionFk) => {
+ Self.renderer = async expeditionFk => {
const models = Self.app.models;
const viaexpressConfig = await models.ViaexpressConfig.findOne({
@@ -109,7 +109,7 @@ module.exports = Self => {
const ticket = expedition.ticket();
const sender = ticket.company().client();
const shipped = ticket.shipped.toISOString();
- const isInterdia = (ticket.agencyModeFk === viaexpressConfig.agencyModeFk)
+ const isInterdia = (ticket.agencyModeFk === viaexpressConfig.agencyModeFk);
const data = {
viaexpressConfig,
sender,
diff --git a/back/model-config.json b/back/model-config.json
index 58fa86797..a16fe4e8a 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -192,5 +192,8 @@
},
"RouteConfig": {
"dataSource": "vn"
+ },
+ "MrwService": {
+ "dataSource": "vn"
}
}
\ No newline at end of file
diff --git a/back/models/default-view-config.json b/back/models/default-view-config.json
index 88164692d..e7d856c17 100644
--- a/back/models/default-view-config.json
+++ b/back/models/default-view-config.json
@@ -3,7 +3,7 @@
"base": "VnModel",
"options": {
"mysql": {
- "table": "salix.defaultViewConfig"
+ "table": "salix.defaultViewMultiConfig"
}
},
"properties": {
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/mrw-config.js b/back/models/mrw-config.js
index c738c9c0e..8bb24dbe5 100644
--- a/back/models/mrw-config.js
+++ b/back/models/mrw-config.js
@@ -31,5 +31,30 @@ module.exports = Self => {
});
return parser.parseFromString(data.data, 'text/xml');
};
+
+ Self.getClientType = async function(expeditionFk) {
+ if (!expeditionFk) throw new UserError(`No expeditionFk defined`);
+
+ const {clientTypeWidth} = await Self.getConfig();
+ const result = await Self.app.models.Expedition.findById(expeditionFk,
+ {include: [{
+ relation: 'ticket',
+ scope: {
+ include: {
+ relation: 'agencyMode',
+ scope: {
+ include: {
+ relation: 'mrwService',
+ }
+ }
+ }
+ }
+ }]}
+ );
+ const clientType = result?.ticket()?.agencyMode()?.mrwService()?.clientType;
+ if (!clientType || !clientTypeWidth) throw new UserError(`ClientType not available`);
+
+ return clientType.toString().padStart(clientTypeWidth, '0');
+ };
};
diff --git a/back/models/mrw-config.json b/back/models/mrw-config.json
index c96b68cf3..60c0ca2a2 100644
--- a/back/models/mrw-config.json
+++ b/back/models/mrw-config.json
@@ -45,6 +45,9 @@
},
"notified":{
"type": "date"
+ },
+ "clientTypeWidth": {
+ "type": "number"
}
}
}
diff --git a/back/models/mrw-service.json b/back/models/mrw-service.json
new file mode 100644
index 000000000..1ad72d060
--- /dev/null
+++ b/back/models/mrw-service.json
@@ -0,0 +1,33 @@
+{
+ "name": "MrwService",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "mrwService"
+ }
+ },
+ "properties": {
+ "agencyModeCodeFk": {
+ "id": true,
+ "type": "string",
+ "required": true
+ },
+ "clientType": {
+ "type": "number",
+ "required": true
+ },
+ "serviceType": {
+ "type": "number"
+ },
+ "kg": {
+ "type": "number"
+ }
+ },
+ "relations": {
+ "agency": {
+ "type": "hasOne",
+ "model": "AgencyMode",
+ "foreignKey": "code"
+ }
+ }
+}
diff --git a/back/models/user-config.json b/back/models/user-config.json
index 5c5df1b9e..f8e563dc3 100644
--- a/back/models/user-config.json
+++ b/back/models/user-config.json
@@ -3,7 +3,7 @@
"base": "VnModel",
"options": {
"mysql": {
- "table": "userConfig"
+ "table": "userMultiConfig"
}
},
"properties": {
diff --git a/db/dump/.dump/data.sql b/db/dump/.dump/data.sql
index 43f686022..711524e4c 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','11154','04ff3e0cc79b00272d1ebbde7196292eab651c1d','2024-07-23 09:24:55','11163');
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);
@@ -877,8 +879,31 @@ 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','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','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);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
@@ -1248,6 +1273,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 +1487,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 +1932,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 +2046,13 @@ 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 (896,'Expedition_PrintOut','*','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 `fieldAcl` VALUES (1,'Client','name','update','employee');
INSERT INTO `fieldAcl` VALUES (2,'Client','contact','update','employee');
@@ -2120,9 +2153,9 @@ 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_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 +2354,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 +2373,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,'',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 +2690,38 @@ 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 `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..dc0549de4 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','');
@@ -1389,9 +1392,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','');
@@ -1431,6 +1434,19 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryBoss','albaran_st
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 +1918,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 +2048,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 +2174,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 +2225,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..174471895 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
@@ -7194,7 +7201,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 +7376,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 ;
@@ -7862,14 +7869,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 +7884,23 @@ 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
+ SELECT item_id, amount stock, amount visible
+ FROM cache.stock
WHERE warehouse_id = v_warehouse;
-- 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 ;;
@@ -8456,7 +8464,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`,
@@ -9831,7 +9838,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 +9846,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 +9865,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 ;
@@ -12872,12 +12866,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 +13932,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;
@@ -26427,14 +26429,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 +26491,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`
--
@@ -27641,6 +27657,7 @@ 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`),
@@ -27902,6 +27919,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 +28030,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 +28245,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 +28474,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 +29185,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 */;
@@ -29983,6 +30004,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 +30593,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 +31132,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 +31636,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 +31646,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`),
@@ -32163,6 +32188,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`),
@@ -32505,7 +32531,7 @@ 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,
PRIMARY KEY (`id`),
@@ -32846,11 +32872,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 +32903,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 +33070,7 @@ CREATE TABLE `itemShelving` (
`buyFk` int(11) DEFAULT NULL,
`editorFk` int(10) unsigned DEFAULT NULL,
`available` int(11) DEFAULT NULL,
+ `isSplit` tinyint(1) DEFAULT NULL 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 +33229,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 +33250,10 @@ 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`),
+ CONSTRAINT `itemShelvingSaleReserve_sector_FK` FOREIGN KEY (`id`) 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 +33469,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 +34813,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 +34922,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 +35126,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 +35704,51 @@ 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,
+ 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 +36166,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 +36716,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 +37485,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 +37690,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 +38118,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 +38471,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 +38953,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 +39006,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 +39308,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 +39773,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 +39882,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`),
@@ -39899,6 +39998,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`),
@@ -39980,14 +40080,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 +40969,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 +41747,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 +41782,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 */ ;;
@@ -45891,6 +46025,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 +47022,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 */ ;
@@ -47902,7 +48112,10 @@ 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
@@ -47922,22 +48135,23 @@ BEGIN
FROM cache.last_buy
WHERE warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL;
- CALL buyUltimateFromInterval(vWarehouseFk, util.VN_CURDATE(), vDated);
+ 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;
+ 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;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -47954,7 +48168,11 @@ 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
/**
* Calcula las últimas compras realizadas
@@ -47976,12 +48194,13 @@ BEGIN
-- 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))
+ (PRIMARY KEY (itemFk, warehouseFk),
+ INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
ENGINE = MEMORY
SELECT itemFk,
warehouseFk,
buyFk,
- MAX(landed) landed,
+ landed,
isIgnored
FROM (SELECT b.itemFk,
t.warehouseInFk warehouseFk,
@@ -48000,94 +48219,118 @@ BEGIN
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;
+ 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
- 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;
+ 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,
- 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;
+ 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
- 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;
+ 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;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -48955,8 +49198,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 +49212,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;
@@ -49046,7 +49288,7 @@ BEGIN
CALL vn.catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
- INSERT INTO tmp.ticketCalculateItem (
+ INSERT INTO tmp.ticketCalculateItem(
itemFk,
available,
producer,
@@ -49059,9 +49301,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 +49315,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 +49332,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 +49986,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 +50942,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 +50986,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 +51022,8 @@ BEGIN
credit = vDefaultCredit,
isTaxDataChecked = vIsTaxDataChecked,
hasCoreVnl = vHasCoreVnl,
- isEqualizated = FALSE
+ isEqualizated = FALSE,
+ hasDailyInvoice = vHasDailyInvoice
ON duplicate KEY UPDATE
payMethodFk = vPayMethodFk,
dueDay = vDueDay,
@@ -51455,7 +51724,8 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_addWithReservation`(
vItemFk INT,
vQuantity INT,
vTicketFk INT,
- vSaleGroupFk INT
+ vSaleGroupFk INT,
+ vSectorFk INT
)
BEGIN
/**
@@ -51519,7 +51789,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 +51850,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 +52393,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 +52757,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 */ ;
@@ -53095,9 +53368,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 +53380,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 */ ;
@@ -53978,7 +54252,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
@@ -55078,7 +55352,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 +55688,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 +55777,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;
+ END LOOP;
CLOSE cur;
END ;;
DELIMITER ;
@@ -55724,7 +55986,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 +55999,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 +56025,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 +56084,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 ;;
@@ -57769,18 +58035,16 @@ 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
- WHERE ii.id = vSelf
- AND iis.taxAreaFk = 'CEE'
- AND transactionTypeSageFk;
+ SELECT TRUE INTO vHasRepeatedTransactions
+ FROM invoiceInTax
+ WHERE invoiceInFk = vSelf
+ HAVING COUNT(DISTINCT 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
@@ -59193,6 +59457,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 +60542,7 @@ BEGIN
LEAVE l;
END IF;
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, NULL);
END LOOP;
CLOSE vSales;
END ;;
@@ -60256,105 +60561,121 @@ 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,
+ 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 */ ;
@@ -60381,6 +60702,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 +60718,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 +60731,7 @@ BEGIN
LEAVE l;
END IF;
- CALL itemShelvingSale_addBySale(vSaleFk);
+ CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
END LOOP;
CLOSE vSales;
END ;;
@@ -60431,9 +60757,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 +60778,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;
@@ -60491,13 +60819,16 @@ DELIMITER ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `itemShelvingSale_reallocate`(
vItemShelvingFk INT(10),
- vItemFk 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
@@ -60507,18 +60838,21 @@ BEGIN
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 iss.id
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND iss.itemFk = vItemFk
+ AND NOT iss.isPicked
+ FOR UPDATE;
+
+ INSERT INTO itemShelvingSaleReserve (saleFk, vSectorFk)
SELECT DISTINCT iss.saleFk
FROM itemShelvingSale iss
JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
@@ -60601,7 +60935,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 +60948,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 +60956,7 @@ BEGIN
DECLARE vRemainingQuantity INT;
DECLARE vItemFk INT;
DECLARE vTotalQuantity INT;
+ DECLARE vStateCode VARCHAR(45);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
@@ -60627,21 +60964,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 +61012,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 +61024,7 @@ BEGIN
vTotalQuantity,
`account`.`myUser_getId`(),
NULL,
- 'PREPARED',
+ vStateCode,
TRUE);
UPDATE sale s
@@ -60685,9 +61036,9 @@ BEGIN
COMMIT;
IF vIsItemShelvingSaleEmpty AND vQuantity <> vReservedQuantity THEN
- INSERT INTO itemShelvingSaleReserve (saleFk)
- SELECT vSaleFk;
- CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk);
+ INSERT INTO itemShelvingSaleReserve (saleFk, vSectorFk)
+ SELECT vSaleFk, vSectorFk;
+ CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk, vSectorFk);
END IF;
END ;;
DELIMITER ;
@@ -61484,6 +61835,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 +62359,75 @@ 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
+ 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 IFNULL(vWarehouseFk, i.warehouseFk) = i.warehouseFk
+ 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
+ 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
+ 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)
+ ) t
+ GROUP BY itemFk
+ ON DUPLICATE KEY UPDATE
+ visible = IFNULL(stock, 0) + VALUES(visible);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -63073,94 +63495,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 +63582,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 +63691,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 +63720,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 +63765,7 @@ BEGIN
claimFk,
`order`
FROM tItemDiary
- WHERE shipped >= vDate;
+ WHERE shipped >= vDated;
END IF;
DROP TEMPORARY TABLE tItemDiary;
@@ -63578,6 +64017,8 @@ BEGIN
i.quantity amount
FROM tmp.itemAtp i
HAVING amount != 0;
+
+ DROP TEMPORARY TABLE tmp.itemAtp;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -63695,7 +64136,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 +64261,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 */ ;
@@ -64211,7 +64596,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
@@ -65228,6 +65614,7 @@ proc: BEGIN
DECLARE vDateTo DATETIME;
DECLARE vDateToTomorrow DATETIME;
DECLARE vDefaultDayRange INT;
+ DECLARE vCalcFk INT;
IF vDate < util.VN_CURDATE() THEN
LEAVE proc;
@@ -65300,50 +65687,18 @@ proc: BEGIN
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
+ JOIN tItemVisibleCalc ivc ON ivc.item_id = it.id
+ SET it.visible = it.visible + ivc.visible;
-- Calculo del disponible
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
@@ -65414,9 +65769,9 @@ proc: BEGIN
DROP TEMPORARY TABLE
tmp.itemTravel,
tmp.itemCalc,
+ tmp.itemAtp,
tItemInventoryCalc,
- tItemVisibleCalc,
- tmp.itemAtp;
+ tItemVisibleCalc;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -66964,6 +67319,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 */ ;
@@ -68078,20 +68434,28 @@ 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
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ RESIGNAL;
+ END;
+
+ UPDATE saleGroup sg
SET sg.parkingFk = vParkingFk
WHERE sg.id = vSaleGroupFk
- AND sg.created >= TIMESTAMPADD(WEEK,-1,util.VN_CURDATE());
+ 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 +69283,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 +69315,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
@@ -69490,7 +69855,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 (
@@ -69795,15 +70160,33 @@ 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 vDone BOOL;
+ DECLARE vSaleList CURSOR FOR SELECT saleFk, hasProblem FROM tmp.sale;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vSaleList;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vSaleList INTO vSaleFk, vHasProblem;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ UPDATE sale
+ SET problem = CONCAT(
+ IF(vHasProblem,
+ CONCAT(problem, ',', vProblemCode),
+ REPLACE(problem, vProblemCode , '')))
+ WHERE id = vSaleFk;
+ END LOOP;
+ CLOSE vSaleList;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -69831,9 +70214,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) isProblemCalcNeeded
+ FROM sale
+ WHERE id = vSelf;
CALL sale_setProblem('hasComponentLack');
@@ -69865,11 +70252,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) isProblemCalcNeeded
FROM (
- SELECT s.id saleFk
+ SELECT s.id saleFk, s.ticketFk
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
@@ -69908,9 +70297,10 @@ 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;
@@ -69918,7 +70308,9 @@ BEGIN
CALL buyUltimate(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 +70667,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,57 +70679,42 @@ 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,' ','');
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ 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;
+ START TRANSACTION;
- -- 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());
+ SET vLastWeek = util.VN_CURDATE() - INTERVAL 1 WEEK;
- 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;
+
+ COMMIT;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -72760,14 +73140,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 +73215,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 +73618,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 +73648,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 +74047,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 +74109,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 +74129,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
@@ -74066,14 +74453,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 +74481,7 @@ BEGIN
END LOOP;
CLOSE cur1;
+ DROP TEMPORARY TABLE tTicket, tmp.productionBuffer;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -74344,7 +74732,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 +74754,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 +75616,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 +75650,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 +75672,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,16 +75690,21 @@ 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;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ RESIGNAL;
+ END;
+
INSERT INTO vn.ticketParking(ticketFk, parkingFk)
SELECT IFNULL(tc2.ticketFk, t.id), vParkingFk
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 +75785,35 @@ 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 vDone BOOL;
+ DECLARE vTicketList CURSOR FOR SELECT ticketFk, hasProblem FROM tmp.ticket;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ OPEN vTicketList;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vTicketList INTO vTicketFk, vHasProblem;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ UPDATE ticket
+ SET problem = CONCAT(
+ IF(vHasProblem,
+ CONCAT(problem, ',', vProblemCode),
+ REPLACE(problem, vProblemCode , '')))
+ WHERE id = vTicketFk;
+ END LOOP;
+ CLOSE vTicketList;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -75415,9 +75840,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 +75854,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 +75884,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 +75928,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');
@@ -75553,8 +75991,11 @@ BEGIN
CALL buyUltimate(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 +76031,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 +76069,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 +76108,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 +76117,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');
@@ -75701,6 +76150,7 @@ BEGIN
* @param vClientFk Id cliente
*/
DECLARE vHasDebt BOOL;
+ DECLARE vStarted DATETIME;
SELECT COUNT(*) INTO vHasDebt
FROM `client`
@@ -75709,22 +76159,24 @@ BEGIN
IF vHasDebt THEN
+ SELECT util.VN_CURDATE() - INTERVAL riskScope MONTH INTO vStarted
+ FROM clientConfig;
+
CREATE OR REPLACE TEMPORARY TABLE tTicketRisk
(KEY (ticketFk))
ENGINE = MEMORY
WITH ticket AS(
- SELECT id ticketFk, companyFk, DATE(shipped) dated
- FROM vn.ticket t
+ 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 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
+ AND IFNULL(totalWithVat, 0) <> 0
+ AND shipped > vStarted
), balance AS(
SELECT SUM(amount)amount, companyFk
FROM (
@@ -75742,15 +76194,11 @@ BEGIN
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)
+ SELECT companyFk, dated, SUM(totalWithVat) amount
+ FROM ticket
+ GROUP BY companyFk, dated
), receipt AS(
- SELECT companyFk,DATE(payed) dated, SUM(amountPaid) amount
+ SELECT companyFk, DATE(payed) dated, SUM(amountPaid) amount
FROM vn.receipt
WHERE clientFk = vClientFk
AND payed > util.VN_CURDATE()
@@ -75766,13 +76214,21 @@ BEGIN
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
+ 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 = 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;
DROP TEMPORARY TABLE tTicketRisk;
END IF;
@@ -75951,60 +76407,80 @@ DELIMITER ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_splitItemPackingType`(
- vTicketFk INT,
- vOriginalItemPackingTypeFk VARCHAR(1)
+ vSelf INT,
+ vItemPackingTypeFk VARCHAR(1)
)
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 vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
+ * @param vSelf Id ticket
+ * @param vItemPackingTypeFk Tipo para el que se reserva el número de ticket original
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
*/
DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
DECLARE vNewTicketFk INT;
DECLARE vPackingTypesToSplit INT;
DECLARE vDone INT DEFAULT FALSE;
+ DECLARE 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;
+ ORDER BY (itemPackingTypeFk = vItemPackingTypeFk) DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
+ GET DIAGNOSTICS CONDITION 1
+ vErrorNumber = MYSQL_ERRNO,
+ vErrorMsg = MESSAGE_TEXT;
+
+ CALL util.debugAdd('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 +76488,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 +80155,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 +80205,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 +81169,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 +81948,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 +83653,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 +84136,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 +84149,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 +85721,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 +85853,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 */;
@@ -87533,7 +88013,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 +88139,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 +89315,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 +89747,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 +89765,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 +91039,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-07-23 8:19:18
diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql
index 41525b2eb..1b92f0d43 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
@@ -6309,6 +6425,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 +7302,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
@@ -10939,4 +11143,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-07-23 8:19:41
diff --git a/db/dump/fixtures.after.sql b/db/dump/fixtures.after.sql
index 562ea02d8..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);
@@ -314,5 +311,4 @@ INSERT INTO mysql.roles_mapping (`User`, `Host`, `Role`, `Admin_option`)
SELECT SUBSTR(`User`, @prefixLen + 1), `Host`, `Role`, `Admin_option`
FROM mysql.roles_mapping
WHERE `User` LIKE @prefixedLike AND `Host` = @genRoleHost;
-
FLUSH PRIVILEGES;
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index 9e6fee4cc..985011a7c 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -121,7 +121,7 @@ INSERT INTO hedera.orderConfig (`id`, `employeeFk`, `defaultAgencyFk`, `guestMet
INSERT INTO `account`.`user`(`id`,`name`,`nickname`, `password`,`role`,`active`,`email`,`lang`, `image`)
VALUES
(1101, 'brucewayne', 'Bruce Wayne', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'BruceWayne@mydomain.com', 'es','1101'),
- (1102, 'petterparker', 'Petter Parker', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'PetterParker@mydomain.com', 'en','1102'),
+ (1102, 'petterparker', 'Petter Parker', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 131, 1, 'PetterParker@mydomain.com', 'en','1102'),
(1103, 'clarkkent', 'Clark Kent', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'ClarkKent@mydomain.com', 'fr','1103'),
(1104, 'tonystark', 'Tony Stark', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'TonyStark@mydomain.com', 'es','1104'),
(1105, 'maxeisenhardt', 'Max Eisenhardt', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'MaxEisenhardt@mydomain.com', 'pt','1105'),
@@ -1500,7 +1500,8 @@ INSERT INTO `vn`.`travel`(`id`,`shipped`, `landed`, `warehouseInFk`, `warehouseO
(5, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 3, 3, 1, 50.00, 500, 'fifth travel', 1, 1, 5),
(6, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 4, 4, 1, 50.00, 500, 'sixth travel', 1, 2, 6),
(7, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 4, 1, 50.00, 500, 'seventh travel', 2, 1, 7),
- (8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2, 10);
+ (8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2, 10),
+ (10, DATE_ADD(util.VN_CURDATE(), INTERVAL + 5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 5 DAY), 5, 1, 1, 50.00, 500, 'nineth travel', 1, 2, 10);
INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `isRaid`, `evaNotes`)
VALUES
@@ -1511,25 +1512,27 @@ INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed
(5, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 0, 442, 'IN2005', 'Movement 5', 0, 0, 'observation five'),
(6, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 6, 0, 442, 'IN2006', 'Movement 6', 0, 0, 'observation six'),
(7, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2007', 'Movement 7', 0, 0, 'observation seven'),
- (8, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2008', 'Movement 8', 1, 1, '');
+ (8, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2008', 'Movement 8', 1, 1, ''),
+ (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
@@ -1965,7 +1968,7 @@ INSERT INTO `vn`.`orderTicket`(`orderFk`, `ticketFk`)
(21, 21),
(22, 22);
-INSERT INTO `vn`.`userConfig` (`userFk`, `warehouseFk`, `companyFk`)
+INSERT INTO `vn`.`userMultiConfig` (`userFk`, `warehouseFk`, `companyFk`)
VALUES
(1, 1, 69),
(5, 1, 442),
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/pbx/views/queueConf.sql b/db/routines/pbx/views/queueConf.sql
index 07c241589..107989801 100644
--- a/db/routines/pbx/views/queueConf.sql
+++ b/db/routines/pbx/views/queueConf.sql
@@ -10,5 +10,5 @@ AS SELECT `q`.`name` AS `name`,
`c`.`ringInUse` AS `ringinuse`
FROM (
`pbx`.`queue` `q`
- JOIN `pbx`.`queueConfig` `c` ON(`q`.`config` = `c`.`id`)
+ JOIN `pbx`.`queueMultiConfig` `c` ON(`q`.`config` = `c`.`id`)
)
diff --git a/db/routines/vn/functions/ticket_isProblemCalcNeeded.sql b/db/routines/vn/functions/ticket_isProblemCalcNeeded.sql
new file mode 100644
index 000000000..4974a8c76
--- /dev/null
+++ b/db/routines/vn/functions/ticket_isProblemCalcNeeded.sql
@@ -0,0 +1,27 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`ticket_isProblemCalcNeeded`(
+ vSelf INT
+)
+ RETURNS BOOL
+ 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 ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/buyUltimate.sql b/db/routines/vn/procedures/buyUltimate.sql
index 4346ef640..98b16cbc0 100644
--- a/db/routines/vn/procedures/buyUltimate.sql
+++ b/db/routines/vn/procedures/buyUltimate.sql
@@ -1,5 +1,8 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buyUltimate`(vWarehouseFk SMALLINT, vDated DATE)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buyUltimate`(
+ vWarehouseFk SMALLINT,
+ vDated DATE
+)
BEGIN
/**
* Calcula las últimas compras realizadas hasta una fecha
@@ -19,21 +22,22 @@ BEGIN
FROM cache.last_buy
WHERE warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL;
- CALL buyUltimateFromInterval(vWarehouseFk, util.VN_CURDATE(), vDated);
+ 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;
+ 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;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/buyUltimateFromInterval.sql b/db/routines/vn/procedures/buyUltimateFromInterval.sql
index e264b500d..5879b58e1 100644
--- a/db/routines/vn/procedures/buyUltimateFromInterval.sql
+++ b/db/routines/vn/procedures/buyUltimateFromInterval.sql
@@ -1,5 +1,9 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buyUltimateFromInterval`(vWarehouseFk SMALLINT, vStarted DATE, vEnded DATE)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buyUltimateFromInterval`(
+ vWarehouseFk SMALLINT,
+ vStarted DATE,
+ vEnded DATE
+)
BEGIN
/**
* Calcula las últimas compras realizadas
@@ -21,12 +25,13 @@ BEGIN
-- 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))
+ (PRIMARY KEY (itemFk, warehouseFk),
+ INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
ENGINE = MEMORY
SELECT itemFk,
warehouseFk,
buyFk,
- MAX(landed) landed,
+ landed,
isIgnored
FROM (SELECT b.itemFk,
t.warehouseInFk warehouseFk,
@@ -45,93 +50,117 @@ BEGIN
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;
+ 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
- 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;
+ 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,
- 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;
+ 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
- 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;
+ 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;
END$$
DELIMITER ;
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/client_create.sql b/db/routines/vn/procedures/client_create.sql
index d5d7258a1..f2321e129 100644
--- a/db/routines/vn/procedures/client_create.sql
+++ b/db/routines/vn/procedures/client_create.sql
@@ -34,20 +34,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,
@@ -65,7 +70,8 @@ BEGIN
credit = vDefaultCredit,
isTaxDataChecked = vIsTaxDataChecked,
hasCoreVnl = vHasCoreVnl,
- isEqualizated = FALSE
+ isEqualizated = FALSE,
+ hasDailyInvoice = vHasDailyInvoice
ON duplicate KEY UPDATE
payMethodFk = vPayMethodFk,
dueDay = vDueDay,
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/company_getFiscaldata.sql b/db/routines/vn/procedures/company_getFiscaldata.sql
index 7c56382e9..b59ae38e1 100644
--- a/db/routines/vn/procedures/company_getFiscaldata.sql
+++ b/db/routines/vn/procedures/company_getFiscaldata.sql
@@ -7,7 +7,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
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/invoiceIn_booking.sql b/db/routines/vn/procedures/invoiceIn_booking.sql
index c194a774d..c728085b8 100644
--- a/db/routines/vn/procedures/invoiceIn_booking.sql
+++ b/db/routines/vn/procedures/invoiceIn_booking.sql
@@ -13,30 +13,16 @@ 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
+ HAVING COUNT(DISTINCT 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/invoiceOut_new.sql b/db/routines/vn/procedures/invoiceOut_new.sql
index 42c3f99da..c9b94027e 100644
--- a/db/routines/vn/procedures/invoiceOut_new.sql
+++ b/db/routines/vn/procedures/invoiceOut_new.sql
@@ -216,7 +216,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;
@@ -229,7 +229,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
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 7e836859a..757f880f9 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
@@ -1,102 +1,118 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySale`(
- vSaleFk 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;
-END$$
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`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
+ * @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,
+ 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 ;
\ 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..a60287caa 100644
--- a/db/routines/vn/procedures/itemShelvingSale_reallocate.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_reallocate.sql
@@ -1,13 +1,16 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reallocate`(
vItemShelvingFk INT(10),
- vItemFk 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
@@ -17,18 +20,21 @@ BEGIN
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 iss.id
+ FROM itemShelvingSale iss
+ JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
+ WHERE iss.itemShelvingFk = vItemShelvingFk
+ AND iss.itemFk = vItemFk
+ AND NOT iss.isPicked
+ FOR UPDATE;
+
+ INSERT INTO itemShelvingSaleReserve (saleFk, vSectorFk)
SELECT DISTINCT iss.saleFk
FROM itemShelvingSale iss
JOIN itemShelving ish ON ish.id = iss.itemShelvingFk
diff --git a/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql b/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
index 42f915ead..30abefec8 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;
@@ -21,6 +23,7 @@ BEGIN
DECLARE vRemainingQuantity INT;
DECLARE vItemFk INT;
DECLARE vTotalQuantity INT;
+ DECLARE vStateCode VARCHAR(45);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
@@ -28,21 +31,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;
@@ -62,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;
@@ -74,7 +91,7 @@ BEGIN
vTotalQuantity,
`account`.`myUser_getId`(),
NULL,
- 'PREPARED',
+ vStateCode,
TRUE);
UPDATE sale s
@@ -86,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, vSectorFk)
+ 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/item_comparative.sql b/db/routines/vn/procedures/item_comparative.sql
index d429cf009..2625a87a5 100644
--- a/db/routines/vn/procedures/item_comparative.sql
+++ b/db/routines/vn/procedures/item_comparative.sql
@@ -10,19 +10,20 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`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;
diff --git a/db/routines/vn/procedures/item_devalueA2.sql b/db/routines/vn/procedures/item_devalueA2.sql
index c9f716d8f..5b03fc872 100644
--- a/db/routines/vn/procedures/item_devalueA2.sql
+++ b/db/routines/vn/procedures/item_devalueA2.sql
@@ -42,7 +42,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
diff --git a/db/routines/vn/procedures/item_refreshFromTags.sql b/db/routines/vn/procedures/item_refreshFromTags.sql
index 398c01d8e..35f7c74e7 100644
--- a/db/routines/vn/procedures/item_refreshFromTags.sql
+++ b/db/routines/vn/procedures/item_refreshFromTags.sql
@@ -46,12 +46,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)
diff --git a/db/routines/vn/procedures/item_valuateInventory.sql b/db/routines/vn/procedures/item_valuateInventory.sql
index 18aefdf7b..d1d0573a3 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,6 +200,8 @@ 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);
@@ -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/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/sale_getBoxPickingList.sql b/db/routines/vn/procedures/sale_getBoxPickingList.sql
index 7466eb9be..a95ed5b0c 100644
--- a/db/routines/vn/procedures/sale_getBoxPickingList.sql
+++ b/db/routines/vn/procedures/sale_getBoxPickingList.sql
@@ -19,21 +19,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
@@ -52,6 +51,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
diff --git a/db/routines/vn/procedures/sale_setProblem.sql b/db/routines/vn/procedures/sale_setProblem.sql
index 689090051..b0870089f 100644
--- a/db/routines/vn/procedures/sale_setProblem.sql
+++ b/db/routines/vn/procedures/sale_setProblem.sql
@@ -7,7 +7,7 @@ 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)
*/
DECLARE vSaleFk INT;
DECLARE vHasProblem INT;
diff --git a/db/routines/vn/procedures/sale_setProblemComponentLack.sql b/db/routines/vn/procedures/sale_setProblemComponentLack.sql
index 363663a00..aa5f5f1be 100644
--- a/db/routines/vn/procedures/sale_setProblemComponentLack.sql
+++ b/db/routines/vn/procedures/sale_setProblemComponentLack.sql
@@ -10,9 +10,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) isProblemCalcNeeded
+ FROM sale
+ WHERE id = vSelf;
CALL sale_setProblem('hasComponentLack');
diff --git a/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql b/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql
index b911327dd..2ee49b656 100644
--- a/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql
+++ b/db/routines/vn/procedures/sale_setProblemComponentLackByComponent.sql
@@ -10,11 +10,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) isProblemCalcNeeded
FROM (
- SELECT s.id saleFk
+ SELECT s.id saleFk, s.ticketFk
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 f14cd408f..f58d00799 100644
--- a/db/routines/vn/procedures/sale_setProblemRounding.sql
+++ b/db/routines/vn/procedures/sale_setProblemRounding.sql
@@ -11,9 +11,10 @@ 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;
@@ -21,7 +22,9 @@ BEGIN
CALL buyUltimate(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;
diff --git a/db/routines/vn/procedures/ticket_close.sql b/db/routines/vn/procedures/ticket_close.sql
index 47d748ddf..7f52e81a7 100644
--- a/db/routines/vn/procedures/ticket_close.sql
+++ b/db/routines/vn/procedures/ticket_close.sql
@@ -44,14 +44,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
@@ -64,8 +64,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
diff --git a/db/routines/vn/procedures/ticket_setProblem.sql b/db/routines/vn/procedures/ticket_setProblem.sql
index 3d6e14516..66d244d5a 100644
--- a/db/routines/vn/procedures/ticket_setProblem.sql
+++ b/db/routines/vn/procedures/ticket_setProblem.sql
@@ -4,10 +4,11 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`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)
*/
DECLARE vTicketFk INT;
DECLARE vHasProblem INT;
diff --git a/db/routines/vn/procedures/ticket_setProblemFreeze.sql b/db/routines/vn/procedures/ticket_setProblemFreeze.sql
index 560bce612..1de939ba7 100644
--- a/db/routines/vn/procedures/ticket_setProblemFreeze.sql
+++ b/db/routines/vn/procedures/ticket_setProblemFreeze.sql
@@ -9,9 +9,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);
@@ -21,7 +23,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;
diff --git a/db/routines/vn/procedures/ticket_setProblemRequest.sql b/db/routines/vn/procedures/ticket_setProblemRequest.sql
index 19bba5b76..687facfc7 100644
--- a/db/routines/vn/procedures/ticket_setProblemRequest.sql
+++ b/db/routines/vn/procedures/ticket_setProblemRequest.sql
@@ -9,9 +9,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);
diff --git a/db/routines/vn/procedures/ticket_setProblemRisk.sql b/db/routines/vn/procedures/ticket_setProblemRisk.sql
index 5f73ee838..efa5b10e2 100644
--- a/db/routines/vn/procedures/ticket_setProblemRisk.sql
+++ b/db/routines/vn/procedures/ticket_setProblemRisk.sql
@@ -10,21 +10,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');
diff --git a/db/routines/vn/procedures/ticket_setProblemRounding.sql b/db/routines/vn/procedures/ticket_setProblemRounding.sql
index 81294325c..fb580eacf 100644
--- a/db/routines/vn/procedures/ticket_setProblemRounding.sql
+++ b/db/routines/vn/procedures/ticket_setProblemRounding.sql
@@ -18,8 +18,11 @@ BEGIN
CALL buyUltimate(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
diff --git a/db/routines/vn/procedures/ticket_setProblemTaxDataChecked.sql b/db/routines/vn/procedures/ticket_setProblemTaxDataChecked.sql
index 00918426b..9877b5acc 100644
--- a/db/routines/vn/procedures/ticket_setProblemTaxDataChecked.sql
+++ b/db/routines/vn/procedures/ticket_setProblemTaxDataChecked.sql
@@ -9,9 +9,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()
diff --git a/db/routines/vn/procedures/ticket_setProblemTooLittle.sql b/db/routines/vn/procedures/ticket_setProblemTooLittle.sql
index 98a0787af..48cc47809 100644
--- a/db/routines/vn/procedures/ticket_setProblemTooLittle.sql
+++ b/db/routines/vn/procedures/ticket_setProblemTooLittle.sql
@@ -8,13 +8,17 @@ 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 ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/ticket_setProblemTooLittleItemCost.sql b/db/routines/vn/procedures/ticket_setProblemTooLittleItemCost.sql
index cd1f42783..ac3814c07 100644
--- a/db/routines/vn/procedures/ticket_setProblemTooLittleItemCost.sql
+++ b/db/routines/vn/procedures/ticket_setProblemTooLittleItemCost.sql
@@ -10,7 +10,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
@@ -19,7 +19,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');
diff --git a/db/routines/vn/procedures/ticket_setRisk.sql b/db/routines/vn/procedures/ticket_setRisk.sql
index f5e6cb5a0..bd5d1e9f9 100644
--- a/db/routines/vn/procedures/ticket_setRisk.sql
+++ b/db/routines/vn/procedures/ticket_setRisk.sql
@@ -8,6 +8,7 @@ BEGIN
* @param vClientFk Id cliente
*/
DECLARE vHasDebt BOOL;
+ DECLARE vStarted DATETIME;
SELECT COUNT(*) INTO vHasDebt
FROM `client`
@@ -16,22 +17,24 @@ BEGIN
IF vHasDebt THEN
+ SELECT util.VN_CURDATE() - INTERVAL riskScope MONTH INTO vStarted
+ FROM clientConfig;
+
CREATE OR REPLACE TEMPORARY TABLE tTicketRisk
(KEY (ticketFk))
ENGINE = MEMORY
WITH ticket AS(
- SELECT id ticketFk, companyFk, DATE(shipped) dated
- FROM vn.ticket t
+ 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 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
+ AND IFNULL(totalWithVat, 0) <> 0
+ AND shipped > vStarted
), balance AS(
SELECT SUM(amount)amount, companyFk
FROM (
@@ -49,15 +52,11 @@ BEGIN
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)
+ SELECT companyFk, dated, SUM(totalWithVat) amount
+ FROM ticket
+ GROUP BY companyFk, dated
), receipt AS(
- SELECT companyFk,DATE(payed) dated, SUM(amountPaid) amount
+ SELECT companyFk, DATE(payed) dated, SUM(amountPaid) amount
FROM vn.receipt
WHERE clientFk = vClientFk
AND payed > util.VN_CURDATE()
@@ -73,13 +72,21 @@ BEGIN
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
+ 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 = 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;
DROP TEMPORARY TABLE tTicketRisk;
END IF;
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/ticket_beforeUpdate.sql b/db/routines/vn/triggers/ticket_beforeUpdate.sql
index 72831bc3d..34b6711ff 100644
--- a/db/routines/vn/triggers/ticket_beforeUpdate.sql
+++ b/db/routines/vn/triggers/ticket_beforeUpdate.sql
@@ -8,13 +8,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
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/11126-blueCamellia/00-firstScript.sql b/db/versions/11126-blueCamellia/00-firstScript.sql
new file mode 100644
index 000000000..40c5e2b37
--- /dev/null
+++ b/db/versions/11126-blueCamellia/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `vn`.`client`
+ADD COLUMN `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';
diff --git a/db/versions/11146-maroonCordyline/00-firstScript.sql b/db/versions/11146-maroonCordyline/00-firstScript.sql
new file mode 100644
index 000000000..1b41422f0
--- /dev/null
+++ b/db/versions/11146-maroonCordyline/00-firstScript.sql
@@ -0,0 +1,11 @@
+RENAME TABLE hedera.shelfConfig TO hedera.shelfMultiConfig ;
+RENAME TABLE pbx.queueConfig TO pbx.queueMultiConfig ;
+RENAME TABLE salix.defaultViewConfig TO salix.defaultViewMultiConfig;
+RENAME TABLE edi.fileConfig TO edi.fileMultiConfig;
+RENAME TABLE edi.imapConfig TO edi.imapMultiConfig;
+RENAME TABLE edi.tableConfig TO edi.tableMultiConfig;
+RENAME TABLE vn.invoiceOutTaxConfig TO vn.invoiceOutTaxMultiConfig;
+RENAME TABLE vn.userConfig TO vn.userMultiConfig;
+RENAME TABLE vn.conveyorConfig TO vn.conveyorMultiConfig;
+
+GRANT SELECT ON TABLE hedera.shelfMultiConfig TO employee;
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/11154-greenBamboo/00-firstScript.sql b/db/versions/11154-greenBamboo/00-firstScript.sql
new file mode 100644
index 000000000..72a9389ec
--- /dev/null
+++ b/db/versions/11154-greenBamboo/00-firstScript.sql
@@ -0,0 +1,2 @@
+
+ALTER TABLE vn.ticketLastState MODIFY COLUMN name varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL;
\ No newline at end of file
diff --git a/db/versions/11154-greenBamboo/00-firstScript.vn.sql b/db/versions/11154-greenBamboo/00-firstScript.vn.sql
new file mode 100644
index 000000000..374c9a031
--- /dev/null
+++ b/db/versions/11154-greenBamboo/00-firstScript.vn.sql
@@ -0,0 +1,2 @@
+
+INSERT INTO vn.state ( name, `order`, alertLevel, code, sectorProdPriority, nextStateFk, isPreviousPreparable, isPicked, isPreparable, semaphore, isPrintable, isOK, graphCategory, isNotValidated, classColor) VALUES('Entregado en parte', 13, 3, 'PARTIAL_DELIVERED', NULL, 16, 0, 1, 0, 0, 0, 0, 0, 0, NULL);
\ No newline at end of file
diff --git a/db/versions/11156-tealCordyline/00-firstScript.sql b/db/versions/11156-tealCordyline/00-firstScript.sql
new file mode 100644
index 000000000..18c004b03
--- /dev/null
+++ b/db/versions/11156-tealCordyline/00-firstScript.sql
@@ -0,0 +1,8 @@
+ALTER TABLE vn.item ADD IF NOT EXISTS tag11 varchar(20) DEFAULT NULL NULL;
+ALTER TABLE vn.item ADD IF NOT EXISTS value11 varchar(50) DEFAULT NULL NULL;
+
+ALTER TABLE vn.item ADD IF NOT EXISTS tag12 varchar(20) DEFAULT NULL NULL;
+ALTER TABLE vn.item ADD IF NOT EXISTS value12 varchar(50) DEFAULT NULL NULL;
+
+ALTER TABLE vn.item ADD IF NOT EXISTS tag13 varchar(20) DEFAULT NULL NULL;
+ALTER TABLE vn.item ADD IF NOT EXISTS value13 varchar(50) DEFAULT NULL NULL;
\ No newline at end of file
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/e2e/paths/05-ticket/01-sale/01_list_sales.spec.js b/e2e/paths/05-ticket/01-sale/01_list_sales.spec.js
index 5c8eba571..ad0975889 100644
--- a/e2e/paths/05-ticket/01-sale/01_list_sales.spec.js
+++ b/e2e/paths/05-ticket/01-sale/01_list_sales.spec.js
@@ -57,7 +57,7 @@ describe('Ticket List sale path', () => {
let searchValue = 'Melee weapon heavy shield 100cm';
await page.autocompleteSearch(selectors.ticketSales.secondSaleIdAutocomplete, searchValue);
await page.waitToClick(selectors.ticketSales.secondSaleQuantityCell);
- await page.type(selectors.ticketSales.secondSaleQuantity, '1');
+ await page.type(selectors.ticketSales.secondSaleQuantity, '8');
await page.keyboard.press('Enter');
const message = await page.waitForSnackbar();
diff --git a/modules/client/back/methods/client/updateFiscalData.js b/modules/client/back/methods/client/updateFiscalData.js
index 851648658..8ed55b856 100644
--- a/modules/client/back/methods/client/updateFiscalData.js
+++ b/modules/client/back/methods/client/updateFiscalData.js
@@ -99,6 +99,10 @@ module.exports = Self => {
{
arg: 'hasElectronicInvoice',
type: 'boolean'
+ },
+ {
+ arg: 'hasDailyInvoice',
+ type: 'boolean'
}
],
returns: {
@@ -117,8 +121,6 @@ module.exports = Self => {
const myOptions = {};
const models = Self.app.models;
const args = ctx.args;
- const userId = ctx.req.accessToken.userId;
- const $t = ctx.req.__;
if (typeof options == 'object')
Object.assign(myOptions, options);
diff --git a/modules/client/back/methods/defaulter/filter.js b/modules/client/back/methods/defaulter/filter.js
index ac9504ec2..40756b236 100644
--- a/modules/client/back/methods/defaulter/filter.js
+++ b/modules/client/back/methods/defaulter/filter.js
@@ -60,7 +60,7 @@ module.exports = Self => {
DISTINCT c.id clientFk,
c.name clientName,
c.salesPersonFk,
- c.businessTypeFk,
+ c.businessTypeFk = 'worker' isWorker,
u.name salesPersonName,
d.amount,
co.created,
@@ -71,14 +71,24 @@ module.exports = Self => {
d.defaulterSinced,
cn.name country,
c.countryFk,
- pm.name payMethod
- FROM vn.defaulter d
- JOIN vn.client c ON c.id = d.clientFk
- JOIN vn.country cn ON cn.id = c.countryFk
- JOIN vn.payMethod pm ON pm.id = c.payMethodFk
- LEFT JOIN vn.clientObservation co ON co.clientFk = c.id
+ pm.name payMethod,
+ r.finished IS NULL hasRecovery,
+ dp.id departmentFk,
+ dp.name departmentName
+ FROM defaulter d
+ JOIN client c ON c.id = d.clientFk
+ JOIN country cn ON cn.id = c.countryFk
+ JOIN payMethod pm ON pm.id = c.payMethodFk
+ LEFT JOIN clientObservation co ON co.clientFk = c.id
LEFT JOIN account.user u ON u.id = c.salesPersonFk
LEFT JOIN account.user uw ON uw.id = co.workerFk
+ 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
WHERE
d.created = ?
AND d.amount > 0
diff --git a/modules/client/back/models/client.json b/modules/client/back/models/client.json
index f3eb9919b..f24f69ae7 100644
--- a/modules/client/back/models/client.json
+++ b/modules/client/back/models/client.json
@@ -144,6 +144,9 @@
},
"recommendedCredit": {
"type": "number"
+ },
+ "hasDailyInvoice": {
+ "type": "boolean"
}
},
diff --git a/modules/client/front/postcode/index.html b/modules/client/front/postcode/index.html
index b3dbb74d8..fa0b7870f 100644
--- a/modules/client/front/postcode/index.html
+++ b/modules/client/front/postcode/index.html
@@ -53,7 +53,7 @@
diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js
index f21d9dbc4..5963e9c72 100644
--- a/modules/entry/back/methods/entry/filter.js
+++ b/modules/entry/back/methods/entry/filter.js
@@ -1,4 +1,3 @@
-
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
@@ -95,6 +94,11 @@ module.exports = Self => {
arg: 'to',
type: 'date',
description: `The to date filter`
+ },
+ {
+ arg: 'days',
+ type: 'number',
+ description: `N days interval`
}
],
returns: {
@@ -192,6 +196,15 @@ module.exports = Self => {
JOIN vn.currency cu ON cu.id = e.currencyFk`
);
+ if (ctx.args.days) {
+ stmt.merge({
+ sql: `
+ AND t.shipped <= util.VN_CURDATE() + INTERVAL ? DAY
+ AND t.shipped >= util.VN_CURDATE()
+ `,
+ params: [ctx.args.days]
+ });
+ }
stmt.merge(conn.makeSuffix(filter));
const itemsIndex = stmts.push(stmt) - 1;
diff --git a/modules/entry/back/methods/entry/getBuys.js b/modules/entry/back/methods/entry/getBuys.js
index 0cb71653e..bd9c5db7a 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 => {
@@ -51,6 +50,7 @@ module.exports = Self => {
'stickers',
'packing',
'grouping',
+ 'packing',
'groupingMode',
'quantity',
'packagingFk',
@@ -80,7 +80,9 @@ module.exports = Self => {
fields: [
'id',
'typeFk',
+ 'stems',
'name',
+ 'category',
'subName',
'size',
'minPrice',
@@ -96,14 +98,31 @@ module.exports = Self => {
'value9',
'tag10',
'value10',
- 'groupingMode'
+ 'groupingMode',
+ 'inkFk',
+ 'originFk',
+ 'producerFk'
],
- include: {
- relation: 'itemType',
- scope: {
- fields: ['code', 'description']
+ include: [
+ {
+ relation: 'itemType',
+ scope: {
+ fields: ['code', 'description']
+ }
+ },
+ {
+ relation: 'origin',
+ scope: {
+ fields: ['code']
+ }
+ },
+ {
+ relation: 'producer',
+ scope: {
+ fields: ['name']
+ }
}
- }
+ ]
}
}]
};
diff --git a/modules/entry/back/methods/entry/specs/filter.spec.js b/modules/entry/back/methods/entry/specs/filter.spec.js
index c8a5bd94f..c7156062a 100644
--- a/modules/entry/back/methods/entry/specs/filter.spec.js
+++ b/modules/entry/back/methods/entry/specs/filter.spec.js
@@ -39,7 +39,7 @@ describe('Entry filter()', () => {
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(9);
+ expect(result.length).toEqual(11);
await tx.rollback();
} catch (e) {
@@ -55,13 +55,13 @@ describe('Entry filter()', () => {
try {
const ctx = {
- args: {},
+ args: {days: 6},
req: {accessToken: {userId: 1102}}
};
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(6);
+ expect(result.length).toEqual(2);
await tx.rollback();
} catch (e) {
@@ -84,7 +84,7 @@ describe('Entry filter()', () => {
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(6);
+ expect(result.length).toEqual(8);
await tx.rollback();
} catch (e) {
@@ -107,7 +107,7 @@ describe('Entry filter()', () => {
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(6);
+ expect(result.length).toEqual(8);
await tx.rollback();
} catch (e) {
@@ -131,7 +131,7 @@ describe('Entry filter()', () => {
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(8);
+ expect(result.length).toEqual(10);
await tx.rollback();
} catch (e) {
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/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/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 481cec51a..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 1d2e34a66..3d86b0b60 100644
--- a/modules/item/front/diary/index.js
+++ b/modules/item/front/diary/index.js
@@ -1,107 +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 $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/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/back/methods/route/getExpeditionSummary.js b/modules/route/back/methods/route/getExpeditionSummary.js
index 2bd2ca43a..afe54b030 100644
--- a/modules/route/back/methods/route/getExpeditionSummary.js
+++ b/modules/route/back/methods/route/getExpeditionSummary.js
@@ -48,7 +48,7 @@ module.exports = Self => {
LEFT JOIN vn.expeditionStateType est ON est.id = e.stateTypeFk
JOIN vn.agencyMode am ON am.id = r.agencyModeFk
JOIN vn.agency ag ON ag.id = am.agencyFk
- LEFT JOIN vn.userConfig uc ON uc.userFk = account.myUser_getId()
+ LEFT JOIN vn.userMultiConfig uc ON uc.userFk = account.myUser_getId()
WHERE t.routeFk = ?
GROUP BY t.addressFk, e.itemPackingTypeFk
) sub
diff --git a/modules/route/front/summary/index.html b/modules/route/front/summary/index.html
index 8269bf118..764312d16 100644
--- a/modules/route/front/summary/index.html
+++ b/modules/route/front/summary/index.html
@@ -35,10 +35,10 @@
+ value="{{$ctrl.summary.route.started | date: 'HH:mm'}}">
+ value="{{$ctrl.summary.route.finished | date: 'HH:mm'}}">
diff --git a/modules/ticket/back/methods/expedition/deleteExpeditions.js b/modules/ticket/back/methods/expedition/deleteExpeditions.js
index 55ca474d7..75993a485 100644
--- a/modules/ticket/back/methods/expedition/deleteExpeditions.js
+++ b/modules/ticket/back/methods/expedition/deleteExpeditions.js
@@ -27,34 +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();
+ if (code?.toLowerCase()?.includes('mrw') && expedition.externalId) {
+ const result = await models.MrwConfig.cancelShipment(expeditionId);
+ if (!result) throw new Error('not deleted');
+ }
- if (code && code.toLowerCase().substring(0, 10) == 'viaexpress') {
- const isDeleted = await models.ViaexpressConfig.deleteExpedition(expeditionId);
+ if (code?.toLowerCase()?.substring(0, 10) == 'viaexpress') {
+ const result = await models.ViaexpressConfig.deleteExpedition(expeditionId);
+ if (result !== 'true') throw new Error('not deleted');
+ }
- if (isDeleted === 'true') {
- const deletedExpedition = await models.Expedition.destroyById(expeditionId);
- deletedExpeditions.push(deletedExpedition);
- } else 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-weekly/filter.js b/modules/ticket/back/methods/ticket-weekly/filter.js
index 0bf92d542..a43b5e270 100644
--- a/modules/ticket/back/methods/ticket-weekly/filter.js
+++ b/modules/ticket/back/methods/ticket-weekly/filter.js
@@ -53,13 +53,22 @@ module.exports = Self => {
const stmts = [];
const stmt = new ParameterizedSQL(
- `SELECT t.id AS ticketFk, c.id AS clientFk, c.name AS clientName, tw.weekDay,
- wh.name AS warehouseName, u.id AS workerFk, u.name AS userName, u.nickName, tw.agencyModeFk
+ `SELECT t.id AS ticketFk,
+ c.id AS clientFk,
+ c.name AS clientName,
+ tw.weekDay,
+ wh.name AS warehouseName,
+ u.id AS workerFk,
+ u.name AS userName,
+ u.nickName,
+ tw.agencyModeFk,
+ am.name agencyModeName
FROM ticketWeekly tw
JOIN ticket t ON t.id = tw.ticketFk
JOIN client c ON c.id = t.clientFk
JOIN account.user u ON u.id = c.salesPersonFk
- JOIN warehouse wh ON wh.id = t.warehouseFk`
+ JOIN warehouse wh ON wh.id = t.warehouseFk
+ LEFT JOIN agencyMode am ON am.id = tw.agencyModeFk`
);
stmt.merge(conn.makeSuffix(filter));
diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js
index 35b9b1e37..9d0aa8c13 100644
--- a/modules/ticket/back/methods/ticket/closeAll.js
+++ b/modules/ticket/back/methods/ticket/closeAll.js
@@ -71,7 +71,8 @@ module.exports = Self => {
JSON_ARRAYAGG(
JSON_OBJECT(
'ticketId', ticketFk,
- 'reason', reason
+ 'reason', reason,
+ 'clientId', clientFk
)
)
)errors
@@ -83,7 +84,8 @@ module.exports = Self => {
IF(hasErrorDeleted, 'Eliminado', NULL),
IF(hasErrorItemTaxCountry, 'Impuesto no informado', NULL),
IF(hasErrorAddress, 'Sin dirección', NULL),
- IF(hasErrorInfoTaxAreaWorld, 'Datos exportaciones', NULL)) reason
+ IF(hasErrorInfoTaxAreaWorld, 'Datos exportaciones', NULL)) reason,
+ clientFk
FROM (
SELECT t.id ticketFk,
SUM(NOT c.hasToInvoice) hasErrorToInvoice,
@@ -93,7 +95,8 @@ module.exports = Self => {
SUM(a.id IS NULL) hasErrorAddress,
SUM(ios.code IS NOT NULL
AND(ad.customsAgentFk IS NULL
- OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld
+ OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld,
+ t.clientFk clientFk
FROM ticket t
LEFT JOIN address ad ON ad.id = t.addressFk
JOIN sale s ON s.ticketFk = t.id
diff --git a/modules/ticket/back/methods/ticket/saveSign.js b/modules/ticket/back/methods/ticket/saveSign.js
index ed54a5074..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,14 +133,23 @@ 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);
- await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [ticketId, 'DELIVERED'], myOptions);
+ const [{stateCode}] = await Self.rawSql(`
+ SELECT
+ IF((SUM(CASE WHEN est.code = 'DELIVERED' THEN 1 ELSE 0 END) = COUNT(*)),
+ 'DELIVERED','PARTIAL_DELIVERED') stateCode
+ FROM vn.expedition e
+ JOIN vn.expeditionStateType est ON est.id = e.stateTypeFk
+ WHERE e.ticketFk = ?;
+ `, [ticketId], myOptions);
+
+ await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [ticketId, stateCode], myOptions);
if (ticket?.address()?.province()?.country()?.code != 'ES' && ticket.cmrFk) {
await models.Ticket.saveCmr(ctx, [ticketId], myOptions);
diff --git a/modules/ticket/back/methods/ticket/specs/saveSign.spec.js b/modules/ticket/back/methods/ticket/specs/saveSign.spec.js
index 792e9e824..53ab42364 100644
--- a/modules/ticket/back/methods/ticket/specs/saveSign.spec.js
+++ b/modules/ticket/back/methods/ticket/specs/saveSign.spec.js
@@ -26,4 +26,36 @@ describe('Ticket saveSign()', () => {
expect(error).toBeDefined();
});
+
+ 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;
+
+ try {
+ const options = {transaction: tx};
+ const tickets = [ticketWithPackedState];
+
+ const state = await models.State.findById(ticketStateId, null, options);
+ await state.updateAttributes({
+ code: ticketCode,
+ name: ticketCode
+ }, options);
+
+ await models.Ticket.saveSign(ctx, tickets, null, null, options);
+ ticketTrackingAfter = await models.TicketLastState.findOne({
+ where: {ticketFk: ticketWithPackedState}
+ }, options);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+
+ expect(ticketTrackingAfter.name).toBe('PARTIAL_DELIVERED');
+ });
});
diff --git a/modules/travel/back/methods/travel/specs/extraCommunityFilter.spec.js b/modules/travel/back/methods/travel/specs/extraCommunityFilter.spec.js
index 599851b55..7e90c7681 100644
--- a/modules/travel/back/methods/travel/specs/extraCommunityFilter.spec.js
+++ b/modules/travel/back/methods/travel/specs/extraCommunityFilter.spec.js
@@ -79,7 +79,7 @@ describe('Travel extraCommunityFilter()', () => {
const result = await app.models.Travel.extraCommunityFilter(ctx, filter);
- expect(result.length).toEqual(8);
+ expect(result.length).toEqual(9);
});
it('should return the travel matching "cargoSupplierFk"', async() => {
@@ -110,6 +110,6 @@ describe('Travel extraCommunityFilter()', () => {
const result = await app.models.Travel.extraCommunityFilter(ctx, filter);
- expect(result.length).toEqual(1);
+ expect(result.length).toEqual(2);
});
});
diff --git a/modules/travel/back/methods/travel/specs/filter.spec.js b/modules/travel/back/methods/travel/specs/filter.spec.js
index 1a6ee895c..a608a980e 100644
--- a/modules/travel/back/methods/travel/specs/filter.spec.js
+++ b/modules/travel/back/methods/travel/specs/filter.spec.js
@@ -50,7 +50,7 @@ describe('Travel filter()', () => {
const result = await app.models.Travel.filter(ctx);
- expect(result.length).toEqual(5);
+ expect(result.length).toEqual(6);
});
it('should return the routes matching "shipped from" and "shipped to"', async() => {
@@ -80,6 +80,6 @@ describe('Travel filter()', () => {
const result = await app.models.Travel.filter(ctx);
- expect(result.length).toEqual(5);
+ expect(result.length).toEqual(6);
});
});
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/methods/worker/new.js b/modules/worker/back/methods/worker/new.js
index ba9dc3853..bb43fba99 100644
--- a/modules/worker/back/methods/worker/new.js
+++ b/modules/worker/back/methods/worker/new.js
@@ -171,8 +171,8 @@ module.exports = Self => {
const address = await models.Address.create({
clientFk: user.id,
street: street,
- city: city,
- provinceFk: provinceFk,
+ city,
+ provinceFk,
postalCode: postcode,
mobile: phone,
nickname: nickname,
@@ -193,7 +193,13 @@ module.exports = Self => {
}
await user.updateAttribute('email', email, myOptions);
-
+ let countryFk;
+ if (provinceFk) {
+ const province = await Self.app.models.Province.findById(provinceFk, {
+ fields: ['countryFk']
+ });
+ countryFk = province.countryFk;
+ }
await models.Worker.create({
id: user.id,
firstName,
@@ -202,7 +208,7 @@ module.exports = Self => {
bossFk,
fi,
birth,
-
+ originCountryFk: countryFk
}, myOptions);
if (tx) await tx.commit();
@@ -212,11 +218,8 @@ module.exports = Self => {
const message = e.sqlMessage;
if (e.message && e.message.includes(`Email already exists`)) throw new UserError(`This personal mail already exists`);
-
if (code === 'ER_DUP_ENTRY' && message.includes(`CodigoTrabajador_UNIQUE`)) throw new UserError(`This worker code already exists`);
-
if (code === 'ER_DUP_ENTRY' && message.includes(`PRIMARY`)) throw new UserError(`This worker already exists`);
-
throw e;
}
diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js
index efeac6819..db40db16d 100644
--- a/modules/worker/back/models/worker.js
+++ b/modules/worker/back/models/worker.js
@@ -29,11 +29,10 @@ module.exports = Self => {
});
async function tinIsValid(err, done) {
- const filter = {
+ const country = await Self.app.models.Country.findOne({
fields: ['code'],
- where: {id: this.countryFk}
- };
- const country = await Self.app.models.Country.findOne(filter);
+ where: {id: this.originCountryFk}
+ });
const code = country ? country.code.toLowerCase() : null;
if (!this.fi || !validateTin(this.fi, code))
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/modules/zone/back/models/agency-mode.json b/modules/zone/back/models/agency-mode.json
index 99ed43b97..6033e26c6 100644
--- a/modules/zone/back/models/agency-mode.json
+++ b/modules/zone/back/models/agency-mode.json
@@ -60,6 +60,11 @@
"type": "hasMany",
"model": "Zone",
"foreignKey": "agencyModeFk"
+ },
+ "mrwService": {
+ "type": "belongsTo",
+ "model": "MrwService",
+ "foreignKey": "code"
}
},
"acls": [
diff --git a/myt.config.yml b/myt.config.yml
index 56239ca3c..116e3668a 100755
--- a/myt.config.yml
+++ b/myt.config.yml
@@ -42,7 +42,7 @@ fixtures:
- ACL
- fieldAcl
- module
- - defaultViewConfig
+ - defaultViewMultiConfig
vn:
- alertLevel
- bookingPlanner
@@ -363,7 +363,7 @@ localFixtures:
- travelConfig
- travelRecalc
- travelThermograph
- - userConfig
+ - userMultiConfig
- vehicle
- wagonConfig
- wagonType
diff --git a/package.json b/package.json
index ea126bce3..9016f74a6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "salix-back",
- "version": "24.30.0",
+ "version": "24.32.0",
"author": "Verdnatura Levante SL",
"description": "Salix backend",
"license": "GPL-3.0",
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/invoice-ticket-closure/invoice-ticket-closure.html b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html
index 2effa8917..f72b2177f 100644
--- a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html
+++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html
@@ -7,6 +7,7 @@
{{ $t('ticketId') }}: {{ticket.ticketId}}
{{ $t('reason') }}: {{ticket.reason}}
+
{{ $t('clientId')}}{{ticket.clientId}}
diff --git a/print/templates/email/invoice-ticket-closure/locale/en.yml b/print/templates/email/invoice-ticket-closure/locale/en.yml
index fef73d23f..34f31c8e3 100644
--- a/print/templates/email/invoice-ticket-closure/locale/en.yml
+++ b/print/templates/email/invoice-ticket-closure/locale/en.yml
@@ -1,4 +1,5 @@
subject: Nightly ticket closing process report
title: Nightly ticket closing process report
reason: Reason
-ticketId: Ticket
\ No newline at end of file
+ticketId: Ticket
+clientId: Client
\ No newline at end of file
diff --git a/print/templates/email/invoice-ticket-closure/locale/es.yml b/print/templates/email/invoice-ticket-closure/locale/es.yml
index 7d146b83d..a87311114 100644
--- a/print/templates/email/invoice-ticket-closure/locale/es.yml
+++ b/print/templates/email/invoice-ticket-closure/locale/es.yml
@@ -1,4 +1,5 @@
subject: Informe proceso de cierre de tickets nocturno
title: Informe proceso de cierre de tickets nocturno
reason: Motivo
-ticketId: Ticket
\ No newline at end of file
+ticketId: Ticket
+clientId: Cliente
\ No newline at end of file
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/sql/buys.sql b/print/templates/reports/buy-label/sql/buys.sql
index e05ca2a66..d75366815 100644
--- a/print/templates/reports/buy-label/sql/buys.sql
+++ b/print/templates/reports/buy-label/sql/buys.sql
@@ -28,4 +28,4 @@ SELECT ROW_NUMBER() OVER(ORDER BY b.id, num.n) labelNum,
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
+ AND num.n <= b.stickers
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