From bbcf71619ce2f80be8dcfb8c1dff604d9b88651a Mon Sep 17 00:00:00 2001 From: sergiodt Date: Wed, 2 Oct 2024 09:56:36 +0200 Subject: [PATCH 1/4] fix: refs #6861 duplicatedTicketsInReserve --- .../vn/procedures/collection_getTickets.sql | 7 +-- .../itemShelvingSale_addBySale copy.sql | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql diff --git a/db/routines/vn/procedures/collection_getTickets.sql b/db/routines/vn/procedures/collection_getTickets.sql index 0f675041a..1391c27d4 100644 --- a/db/routines/vn/procedures/collection_getTickets.sql +++ b/db/routines/vn/procedures/collection_getTickets.sql @@ -46,7 +46,7 @@ BEGIN LEFT JOIN observation ob ON ob.ticketFk = t.id WHERE t.id = vParamFk AND t.shipped >= vYesterday - UNION ALL + UNION SELECT t.id ticketFk, IF(NOT(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`, am.name agencyName, @@ -67,7 +67,7 @@ BEGIN LEFT JOIN vn.worker w ON w.id = c.salesPersonFk LEFT JOIN observation ob ON ob.ticketFk = t.id WHERE tc.collectionFk = vParamFk - UNION ALL + UNION SELECT sg.ticketFk, NULL `level`, am.name agencyName, @@ -84,6 +84,7 @@ BEGIN LEFT JOIN observation ob ON ob.ticketFk = t.id LEFT JOIN vn.client c ON c.id = t.clientFk WHERE sc.id = vParamFk - AND t.shipped >= vYesterday; + AND t.shipped >= vYesterday + GROUP BY ticketFk; END$$ DELIMITER ; diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql b/db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql new file mode 100644 index 000000000..7da1a82fa --- /dev/null +++ b/db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql @@ -0,0 +1,48 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemShelvingSale_deleteAdded`( + vSelf INT(11) +) +proc: BEGIN +/** + * Borra una reservea devolviendo la cantidad al itemShelving + * + * @param vSelf Identificador del itemShelvingSale + */ + DECLARE vSaleFk INT; + DECLARE vHasSalesPicked BOOL; + + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + ROLLBACK; + RESIGNAL; + END; + + SELECT iss.saleFk INTO vSaleFk + FROM itemShelvingSale iss + JOIN sale s ON s.id = iss.saleFk + WHERE iss.id = vSelf AND s.isAdded ; + + IF vSaleFk IS NULL THEN + CALL util.throw('The sale can not be deleted'); + END IF; + + SELECT COUNT(*) INTO vHasSalesPicked + FROM itemShelvingSale + WHERE saleFk = vSaleFk AND isPicked; + + IF vHasSalesPicked THEN + CALL util.throw('The sale can not be deleted with sales picked'); + END IF; + + START TRANSACTION; + + UPDATE itemShelvingSale iss + JOIN itemShelving ish ON ish.id = iss.itemShelvingFk + SET ish.available = ish.available + iss.quantity + WHERE iss.saleFk = vSaleFk; + + DELETE FROM sale WHERE id = vSaleFk; + + COMMIT; +END$$ +DELIMITER ; \ No newline at end of file From 324875ec1f779f049b996b821418470378a627b0 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Fri, 4 Oct 2024 10:42:33 +0200 Subject: [PATCH 2/4] fix: refs #6861 deleteAdded --- .../vn/procedures/collection_getTickets.sql | 5 ++--- ...copy.sql => itemShelvingSale_deleteAdded.sql} | 16 ++++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) rename db/routines/vn/procedures/{itemShelvingSale_addBySale copy.sql => itemShelvingSale_deleteAdded.sql} (85%) diff --git a/db/routines/vn/procedures/collection_getTickets.sql b/db/routines/vn/procedures/collection_getTickets.sql index 1391c27d4..fed7a3eb6 100644 --- a/db/routines/vn/procedures/collection_getTickets.sql +++ b/db/routines/vn/procedures/collection_getTickets.sql @@ -21,9 +21,8 @@ BEGIN SELECT tob.ticketFk, tob.description FROM vn.ticketObservation tob JOIN vn.ticketCollection tc ON tc.ticketFk = tob.ticketFk - LEFT JOIN vn.observationType ot ON ot.id = tob.observationTypeFk - WHERE ot.`code` = 'itemPicker' - AND tc.collectionFk = vParamFk + JOIN vn.observationType ot ON ot.id = tob.observationTypeFk AND ot.`code` = 'itemPicker' + WHERE tc.collectionFk = vParamFk OR tc.ticketFk = vParamFk ) SELECT t.id ticketFk, IF(!(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`, diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql b/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql similarity index 85% rename from db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql rename to db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql index 7da1a82fa..0de523127 100644 --- a/db/routines/vn/procedures/itemShelvingSale_addBySale copy.sql +++ b/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql @@ -12,15 +12,17 @@ proc: BEGIN DECLARE vHasSalesPicked BOOL; DECLARE EXIT HANDLER FOR SQLEXCEPTION - BEGIN - ROLLBACK; - RESIGNAL; - END; + BEGIN + ROLLBACK; + RESIGNAL; + END; + + START TRANSACTION; SELECT iss.saleFk INTO vSaleFk FROM itemShelvingSale iss JOIN sale s ON s.id = iss.saleFk - WHERE iss.id = vSelf AND s.isAdded ; + WHERE iss.id = vSelf AND s.isAdded; IF vSaleFk IS NULL THEN CALL util.throw('The sale can not be deleted'); @@ -31,11 +33,9 @@ proc: BEGIN WHERE saleFk = vSaleFk AND isPicked; IF vHasSalesPicked THEN - CALL util.throw('The sale can not be deleted with sales picked'); + CALL util.throw('A sale with picked sales cannot be deleted'); END IF; - START TRANSACTION; - UPDATE itemShelvingSale iss JOIN itemShelving ish ON ish.id = iss.itemShelvingFk SET ish.available = ish.available + iss.quantity From 5d7d9f8d9e4e9c4e5a6562c49b6a48adc45e038e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Fri, 4 Oct 2024 13:07:54 +0200 Subject: [PATCH 3/4] fix: refs #6861 deleteAdded --- db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql b/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql index 0de523127..9b15e82d1 100644 --- a/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql +++ b/db/routines/vn/procedures/itemShelvingSale_deleteAdded.sql @@ -22,9 +22,10 @@ proc: BEGIN SELECT iss.saleFk INTO vSaleFk FROM itemShelvingSale iss JOIN sale s ON s.id = iss.saleFk - WHERE iss.id = vSelf AND s.isAdded; + WHERE iss.id = vSelf AND s.isAdded + FOR UPDATE; - IF vSaleFk IS NULL THEN + IF vSaleFk IS NULL THEN CALL util.throw('The sale can not be deleted'); END IF; @@ -32,7 +33,7 @@ proc: BEGIN FROM itemShelvingSale WHERE saleFk = vSaleFk AND isPicked; - IF vHasSalesPicked THEN + IF vHasSalesPicked THEN CALL util.throw('A sale with picked sales cannot be deleted'); END IF; From 3cf7591206eb6ee02c3c3ab846f9e2e49d377dde Mon Sep 17 00:00:00 2001 From: alexm Date: Tue, 8 Oct 2024 17:03:27 +0200 Subject: [PATCH 4/4] fix(closeAll): not use transaction --- modules/ticket/back/methods/ticket/closeAll.js | 2 +- modules/ticket/back/methods/ticket/closure.js | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js index 143c0a3f0..8869f9464 100644 --- a/modules/ticket/back/methods/ticket/closeAll.js +++ b/modules/ticket/back/methods/ticket/closeAll.js @@ -54,7 +54,7 @@ module.exports = Self => { JOIN country co ON co.id = p.countryFk LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered')) - AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?) + AND DATE(t.shipped) BETWEEN ? - INTERVAL 7 DAY AND util.dayEnd(?) AND t.refFk IS NULL GROUP BY t.id `, [toDate, toDate]); diff --git a/modules/ticket/back/methods/ticket/closure.js b/modules/ticket/back/methods/ticket/closure.js index a75596bac..892c1ddc6 100644 --- a/modules/ticket/back/methods/ticket/closure.js +++ b/modules/ticket/back/methods/ticket/closure.js @@ -12,16 +12,18 @@ module.exports = async function(ctx, Self, tickets, options) { Object.assign(myOptions, options); let tx; - if (!myOptions.transaction) { - tx = await Self.beginTransaction({}); - myOptions.transaction = tx; - } + // if (!myOptions.transaction) { + // tx = await Self.beginTransaction({}); + // myOptions.transaction = tx; + // } if (tickets.length == 0) return; const failedtickets = []; for (const ticket of tickets) { try { + await Self.rawSql(`CALL util.debugAdd('invoicingTicket', ?)`, [ticket.id], {userId}); + await Self.app.models.InvoiceOut.getSerial(ticket.clientFk, ticket.companyFk, ticket.addressFk, 'quick'); await Self.rawSql( `CALL vn.ticket_closeByTicket(?)`, @@ -149,6 +151,10 @@ module.exports = async function(ctx, Self, tickets, options) { myOptions); } } catch (error) { + await Self.rawSql(` + INSERT INTO util.debug (variable, value) + VALUES ('invoicingTicketError', ?) + `, [ticket.id + ' - ' + error]); if (error.responseCode == 450) { await invalidEmail(ticket); continue;