83 lines
3.6 KiB
Transact-SQL
83 lines
3.6 KiB
Transact-SQL
/* Solo copia locale di test HOMESERVER. Non distribuire come patch produzione.
|
|
Riattiva 233,234,240,241 conservando date, righe, UDC e posizioni attuali.
|
|
Salva i valori di testata per un rollback mirato; non e' un backup dei DB.
|
|
*/
|
|
USE Mediseawall;
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
IF CONVERT(nvarchar(128), SERVERPROPERTY('MachineName')) <> N'HOMESERVER'
|
|
THROW 51000, 'Script riservato alla copia di test su HOMESERVER.', 1;
|
|
|
|
BEGIN TRY
|
|
BEGIN TRANSACTION;
|
|
|
|
IF OBJECT_ID('dbo.py_TestPickingListReactivation_20261001', 'U') IS NOT NULL
|
|
THROW 51001, 'Preparazione gia eseguita: controllare il backup prima di ripetere.', 1;
|
|
|
|
DECLARE @Targets TABLE (ID int PRIMARY KEY, Documento int NOT NULL);
|
|
INSERT INTO @Targets VALUES (11882,233),(11883,234),(11890,240),(11891,241);
|
|
|
|
IF (SELECT COUNT(*) FROM SAMA1.dbo.BAMTES b WITH (UPDLOCK,HOLDLOCK)
|
|
JOIN @Targets t ON b.ID=t.ID AND b.NUMDOC=t.Documento
|
|
WHERE b.ANNDOC=2026 AND b.STATO='D'
|
|
AND b.DATDOC>CAST(GETDATE()-30 AS int)) <> 4
|
|
THROW 51002, 'Le quattro testate non corrispondono allo scenario atteso.', 1;
|
|
|
|
IF EXISTS (
|
|
SELECT 1 FROM dbo.py_XMag_ViewPackingListStorico h
|
|
JOIN dbo.XMag_GiacenzaPallet g ON g.IDCella=h.Cella
|
|
WHERE h.Documento IN (233,234,240,241,244) AND h.Cella NOT IN (1000,9999)
|
|
AND LTRIM(RTRIM(g.BarcodePallet)) COLLATE Latin1_General_CI_AS <>
|
|
h.Pallet COLLATE Latin1_General_CI_AS
|
|
) THROW 51003, 'Cella fisica con altre UDC: preparazione annullata.', 1;
|
|
|
|
IF EXISTS (
|
|
SELECT Pallet FROM dbo.py_XMag_ViewPackingListStorico
|
|
WHERE Documento IN (233,234,240,241,244) AND Cella<>9999
|
|
GROUP BY Pallet HAVING COUNT(DISTINCT Documento)>1
|
|
) THROW 51004, 'Una UDC residua appartiene a piu liste candidate.', 1;
|
|
|
|
IF EXISTS (SELECT 1 FROM dbo.py_BarcodePickingListSkip
|
|
WHERE Documento IN ('233','234','240','241') AND Risolto=0)
|
|
OR EXISTS (SELECT 1 FROM dbo.py_PickingListPrelievoSequenza
|
|
WHERE Documento IN ('233','234','240','241') AND DelDataOra IS NULL)
|
|
OR EXISTS (SELECT 1 FROM dbo.PyPickingListReservation
|
|
WHERE NULLIF(LTRIM(RTRIM(Documento)),'') IS NOT NULL)
|
|
THROW 51005, 'Prenotazioni, skip o sequenze attive: verificare prima del test.', 1;
|
|
|
|
CREATE TABLE dbo.py_TestPickingListReactivation_20261001 (
|
|
BamtesID int NOT NULL PRIMARY KEY,
|
|
Anno smallint NOT NULL,
|
|
Documento int NOT NULL,
|
|
StatoOriginale char(1) NOT NULL,
|
|
DataDocumentoOriginale float NOT NULL,
|
|
ApplicataIl datetime2 NOT NULL,
|
|
RipristinataIl datetime2 NULL
|
|
);
|
|
INSERT INTO dbo.py_TestPickingListReactivation_20261001
|
|
(BamtesID,Anno,Documento,StatoOriginale,DataDocumentoOriginale,ApplicataIl)
|
|
SELECT b.ID,b.ANNDOC,b.NUMDOC,b.STATO,b.DATDOC,SYSDATETIME()
|
|
FROM SAMA1.dbo.BAMTES b JOIN @Targets t ON t.ID=b.ID;
|
|
|
|
UPDATE b SET STATO='P'
|
|
FROM SAMA1.dbo.BAMTES b JOIN @Targets t ON t.ID=b.ID;
|
|
IF @@ROWCOUNT<>4 THROW 51006, 'Numero di testate aggiornate inatteso.', 1;
|
|
|
|
IF (SELECT COUNT(DISTINCT Documento) FROM dbo.py_ViewPackingListPrelievo
|
|
WHERE Documento IN (233,234,240,241,244)
|
|
AND DataDocumento>CAST(GETDATE()-30 AS int))<>5
|
|
THROW 51007, 'Le cinque liste non risultano tutte visibili. Rollback.', 1;
|
|
|
|
COMMIT TRANSACTION;
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION;
|
|
THROW;
|
|
END CATCH;
|
|
|
|
SELECT Documento,COUNT(DISTINCT Pallet) AS UdcResidue
|
|
FROM dbo.py_ViewPackingListPrelievo
|
|
WHERE Documento IN (233,234,240,241,244)
|
|
GROUP BY Documento ORDER BY Documento;
|