From 455a86c17c4b19e4e3dd14d994374bb1d559489d Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 21 Jan 2026 16:43:48 +0100 Subject: [PATCH] Aggiunta e refresh stored --- .../Stored/stp_ProdBatch_insert.sql | 40 ++++++++++++++++ .../Stored/stp_ProdOdl_UpdateTag.sql | 46 +++++++++++++++++++ .../SqlScripts/Stored/stp_counterGetNext.sql | 2 +- .../Stored/stp_counterGetNextBlock.sql | 1 + 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdBatch_insert.sql create mode 100644 EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdOdl_UpdateTag.sql diff --git a/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdBatch_insert.sql b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdBatch_insert.sql new file mode 100644 index 00000000..467f04e1 --- /dev/null +++ b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdBatch_insert.sql @@ -0,0 +1,40 @@ +DROP PROCEDURE IF EXISTS `stp_ProdBatch_insert`; + +CREATE PROCEDURE `stp_ProdBatch_insert`( + IN `pDescription` VARCHAR(255), + IN `pDueDate` DATETIME, + IN `pPrefix` VARCHAR(10), -- prefisso x Batch + IN `pYear` INT -- anno di riferimento x Tag +) +LANGUAGE SQL +NOT DETERMINISTIC +CONTAINS SQL +SQL SECURITY DEFINER +COMMENT 'Insert di una colonna Batch con calcolo contestuale del relativo TAG' +BEGIN + DECLARE vIdx INT; + DECLARE vYear INT; + DECLARE vNewBatchTag VARCHAR(50); + DECLARE vNewID INT; + + SET vYear = IF(pYear IS NULL OR pYear = 0, YEAR(CURDATE()), pYear); + + -- 1. Recuperiamo il contatore (riutilizzando la tua GetNextCounter) + CALL stp_counterGetNext(vYear, pPrefix, vIdx); + + -- Costruiamo il BatchTag finale (BC.202600000001) + SET vNewBatchTag = UPPER(CONCAT(pPrefix, vYear, LPAD(HEX(vIdx), 8, '0'))); + + -- 2. Inserimento del record + INSERT INTO production_batch (Description, DueDate, BatchTag) + VALUES (pDescription, pDueDate, vNewBatchTag); + + -- 3. Recuperiamo l'ID appena generato (Auto Increment) + SET vNewID = LAST_INSERT_ID(); + + -- 4. Restituzione del record completo (i nomi colonne devono coincidere col Modello C#) + SELECT * + FROM production_batch + WHERE ProdBatchID = vNewID; + +END; \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdOdl_UpdateTag.sql b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdOdl_UpdateTag.sql new file mode 100644 index 00000000..a60fb287 --- /dev/null +++ b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_ProdOdl_UpdateTag.sql @@ -0,0 +1,46 @@ +DROP PROCEDURE IF EXISTS `stp_ProdOdl_UpdateTag`; + +CREATE PROCEDURE `stp_ProdOdl_UpdateTag`( + IN pProdBatchID INT, + IN pPrefix VARCHAR(10), -- prefisso x ODL + IN pYear INT +) +LANGUAGE SQL +NOT DETERMINISTIC +CONTAINS SQL +SQL SECURITY DEFINER +COMMENT 'Fix colonna calcolata OdlTag nel nuovo formato con contatori annuali, dopo creazione x ricerca e indicizzazione' +main_block: BEGIN + DECLARE vYear INT; + DECLARE vCount INT; + DECLARE vStart INT; + + SET vYear = IF(pYear IS NULL OR pYear = 0, YEAR(CURDATE()), pYear); + + SELECT COUNT(*) INTO vCount + FROM production_odl + WHERE OdlTag IS NULL + OR OdlTag = '' + OR (ProdBatchID = pProdBatchID AND pProdBatchID > 0); + + IF vCount = 0 THEN + LEAVE main_block; + END IF; + + CALL stp_counterGetNextBlock(vYear, pPrefix, vCount, vStart); + + UPDATE production_odl po + JOIN ( + SELECT PrododlID, + ROW_NUMBER() OVER (ORDER BY ProdODLID) AS rn + FROM production_odl + WHERE OdlTag IS NULL + OR OdlTag = '' + OR (ProdBatchID = pProdBatchID AND pProdBatchID > 0) + ) AS x ON x.ProdODLID = po.ProdODLID + SET po.OdlTag = CONCAT( + pPrefix, vYear, '.', + LPAD(HEX(vStart + x.rn -1), 8, '0') + ); + +END main_block; diff --git a/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNext.sql b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNext.sql index eec617b4..f0534f91 100644 --- a/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNext.sql +++ b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNext.sql @@ -35,7 +35,7 @@ BEGIN UPDATE utils_counter SET Counter = vOld WHERE RefYear = pYear AND CountName = pName; - END IF; + SET pValue = vOld; END diff --git a/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNextBlock.sql b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNextBlock.sql index 8c12cae6..440ec6e4 100644 --- a/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNextBlock.sql +++ b/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNextBlock.sql @@ -27,6 +27,7 @@ BEGIN INSERT INTO utils_counter (RefYear, CountName, Counter) VALUES (pYear, pName, vNew) ON DUPLICATE KEY UPDATE Counter = VALUES(Counter); + ELSE -- Incremento esistente SET vNew = vOld + pCount;