137 lines
4.5 KiB
Transact-SQL
137 lines
4.5 KiB
Transact-SQL
/*
|
|
Patch Python WMS: ordine di prelievo per singola picking list
|
|
|
|
Prerequisito:
|
|
- eseguire prima apply_pickinglist_days_filter_patch.sql, che espone
|
|
DataDocumento nelle viste operative Python.
|
|
|
|
Effetti:
|
|
- crea una tabella Python-only con la sequenza personalizzata per Documento;
|
|
- crea una vista Python-only con l'ordine effettivo condiviso da backoffice e barcode;
|
|
- senza configurazione applica il default: Non scaff. prima degli scaffali;
|
|
- con configurazione applica i gruppi scelti e accoda in modo sicuro quelli mancanti;
|
|
- non modifica tabelle, viste o stored procedure legacy usate dal programma C#.
|
|
*/
|
|
|
|
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.py_PickingListPrelievoSequenza', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.py_PickingListPrelievoSequenza (
|
|
ID bigint IDENTITY(1,1) NOT NULL
|
|
CONSTRAINT PK_py_PickingListPrelievoSequenza PRIMARY KEY,
|
|
Documento varchar(50) NOT NULL,
|
|
GruppoChiave varchar(160) NOT NULL,
|
|
GruppoEtichetta varchar(100) NOT NULL,
|
|
Ordine int NOT NULL,
|
|
InsUtente varchar(50) NULL,
|
|
InsDataOra datetime2(0) NOT NULL
|
|
CONSTRAINT DF_py_PickingListPrelievoSequenza_InsDataOra DEFAULT SYSDATETIME(),
|
|
ModUtente varchar(50) NULL,
|
|
ModDataOra datetime2(0) NULL,
|
|
DelUtente varchar(50) NULL,
|
|
DelDataOra datetime2(0) NULL,
|
|
CONSTRAINT CK_py_PickingListPrelievoSequenza_Ordine CHECK (Ordine >= 0)
|
|
);
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID(N'dbo.py_PickingListPrelievoSequenza', N'U')
|
|
AND name = N'UX_py_PickingListPrelievoSequenza_DocGruppo'
|
|
)
|
|
BEGIN
|
|
CREATE UNIQUE INDEX UX_py_PickingListPrelievoSequenza_DocGruppo
|
|
ON dbo.py_PickingListPrelievoSequenza (Documento, GruppoChiave)
|
|
WHERE DelDataOra IS NULL;
|
|
END
|
|
GO
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID(N'dbo.py_PickingListPrelievoSequenza', N'U')
|
|
AND name = N'UX_py_PickingListPrelievoSequenza_DocOrdine'
|
|
)
|
|
BEGIN
|
|
CREATE UNIQUE INDEX UX_py_PickingListPrelievoSequenza_DocOrdine
|
|
ON dbo.py_PickingListPrelievoSequenza (Documento, Ordine)
|
|
WHERE DelDataOra IS NULL;
|
|
END
|
|
GO
|
|
|
|
CREATE OR ALTER VIEW dbo.py_ViewPackingListPrelievo
|
|
AS
|
|
WITH Gruppi AS (
|
|
SELECT
|
|
pl.*,
|
|
CASE
|
|
WHEN pl.Cella = 1000 THEN 'NON_SCAFF'
|
|
ELSE CONCAT(
|
|
'M:', pl.Magazzino,
|
|
'|A:', pl.Area,
|
|
'|C:',
|
|
LTRIM(RTRIM(
|
|
CASE
|
|
WHEN CHARINDEX(' - ', pl.Ubicazione) > 0
|
|
THEN LEFT(pl.Ubicazione, CHARINDEX(' - ', pl.Ubicazione) - 1)
|
|
ELSE pl.Ubicazione
|
|
END
|
|
))
|
|
)
|
|
END AS GruppoPrelievoChiave,
|
|
CASE
|
|
WHEN pl.Cella = 1000 THEN 'Non scaff.'
|
|
ELSE LTRIM(RTRIM(
|
|
CASE
|
|
WHEN CHARINDEX(' - ', pl.Ubicazione) > 0
|
|
THEN LEFT(pl.Ubicazione, CHARINDEX(' - ', pl.Ubicazione) - 1)
|
|
ELSE pl.Ubicazione
|
|
END
|
|
))
|
|
END AS GruppoPrelievo,
|
|
CASE
|
|
WHEN pl.Cella = 1000 THEN 0
|
|
ELSE 1000 + ISNULL(pl.Ordinamento, 99999)
|
|
END AS OrdineGruppoDefault
|
|
FROM dbo.py_ViewPackingListRestante AS pl
|
|
), Sequenza AS (
|
|
SELECT
|
|
g.*,
|
|
s.Ordine AS OrdineGruppoConfigurato,
|
|
CASE
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM dbo.py_PickingListPrelievoSequenza AS any_s
|
|
WHERE any_s.Documento COLLATE Latin1_General_CI_AS =
|
|
CAST(g.Documento AS varchar(50)) COLLATE Latin1_General_CI_AS
|
|
AND any_s.DelDataOra IS NULL
|
|
) THEN 1
|
|
ELSE 0
|
|
END AS HaSequenzaPersonalizzata
|
|
FROM Gruppi AS g
|
|
LEFT JOIN dbo.py_PickingListPrelievoSequenza AS s
|
|
ON s.Documento COLLATE Latin1_General_CI_AS =
|
|
CAST(g.Documento AS varchar(50)) COLLATE Latin1_General_CI_AS
|
|
AND s.GruppoChiave COLLATE Latin1_General_CI_AS =
|
|
g.GruppoPrelievoChiave COLLATE Latin1_General_CI_AS
|
|
AND s.DelDataOra IS NULL
|
|
)
|
|
SELECT
|
|
Sequenza.*,
|
|
CASE
|
|
WHEN OrdineGruppoConfigurato IS NOT NULL THEN OrdineGruppoConfigurato
|
|
WHEN HaSequenzaPersonalizzata = 1 THEN 100000 + OrdineGruppoDefault
|
|
ELSE OrdineGruppoDefault
|
|
END AS OrdinePrelievoGruppo
|
|
FROM Sequenza;
|
|
GO
|
|
|
|
PRINT 'Patch sequenza prelievo Python applicata.';
|
|
GO
|