Aggiungi sequenza prelievo e gestisci destinazioni senza nazione
This commit is contained in:
136
apply_pickinglist_sequence_patch.sql
Normal file
136
apply_pickinglist_sequence_patch.sql
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
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
|
||||
Reference in New Issue
Block a user