Files
GMW/GMW_DB/dbo/Stored Procedures/stp_UAL_insertNewAL.sql
T

169 lines
5.1 KiB
Transact-SQL

/***************************************
* STORED stp_UAL_insertNewAL
*
* Stored completa x gestione postazione RxNt e AL:
* - crea un nuovo record nella tab ElencoAssiemi di tipo Rx NT (non tracciati dtmx)
* - associa tutti gli UDC della cella della postazione
* - sposta gli UDC da posizione temporanea a posizione reale
* - restituisce il codice AL appena creato in output
*
* Steamware, S.E.L.
* mod: 2010.04.04
*
****************************************/
CREATE PROCEDURE stp_UAL_insertNewAL
(
@CodCS VARCHAR(2),
@Anno VARCHAR(2),
@Cesta VARCHAR(4),
@PostFlux VARCHAR(10), -- RxNt / RxDt / ...
@Flusso CHAR(2),
@TipoAl CHAR(1),
@DataCreaz DATETIME,
@CodSoggetto VARCHAR(17),
@CodDtxStart VARCHAR(50),
@CodDtxEnd VARCHAR(50),
@CodCella VARCHAR(50), -- CodCella che contiene UDC da associare
@CodEvento VARCHAR(10), -- evento
@Note NVARCHAR(500),
@AL VARCHAR(50) OUTPUT
)
AS
-- DECLARE iniziali
DECLARE @numFlu INT,
@numUdc INT,
@idxCellaTo INT = 0,
@idxPosizioneTo INT = 0
------------------------------------------------------------------------------------------------------
-- Gestione Flusso
------------------------------------------------------------------------------------------------------
-- controllo se esiste il flusso...
SET @numFlu = (
SELECT count(*)
FROM AnagBilance
WHERE CodBilancia = @Flusso
)
-- ...sennò lo creo...
IF(@numFlu = 0)
BEGIN
-- se c'è inserisco in tab
INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS)
VALUES (@Flusso, @Flusso, @CodCS)
END
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
-- Gestione contatore incrementale x flusso...
------------------------------------------------------------------------------------------------------
-- controllo se ci sia già un UDC per company / flusso anno
BEGIN TRAN
-- cerco nella tab contatori se esiste contatore x il flusso
-- controllo se record c'è...
IF EXISTS( SELECT TOP 1 Flusso FROM ContatoriUdc
WHERE CodCS = @CodCS
AND Flusso = @Flusso
AND Anno = @Anno )
BEGIN
-- se c'è incremento di 1 in tab
UPDATE ContatoriUdc
SET LastIdx = LastIdx + 1
WHERE CodCS = @CodCS
AND Flusso = @Flusso
AND Anno = @Anno
END
ELSE
BEGIN
-- lo creo!
INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx)
VALUES (@CodCS, @Flusso, @Anno, 1)
END
-- aggiorno numero UDC
SET @numUdc = (
SELECT LastIdx
FROM ContatoriUdc
WHERE CodCS = @CodCS
AND Flusso = @Flusso
AND Anno = @Anno
)
COMMIT TRAN
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
-- Ciclo calcolo idxPosizione e idxCella di destinazione
------------------------------------------------------------------------------------------------------
-- cerco in TabTranPosizEventi record x calcolare cella
DECLARE @IdxBloccoTo INT
SET @IdxBloccoTo = 0
-- ricavo al volo blocco e idxPosizione
SELECT TOP 1 @IdxPosizioneTo = ttpe.IdxPosizioneTo
, @IdxBloccoTo = ttpe.IdxBloccoTo
FROM PosizioneUdcCorrente puc
INNER JOIN ElencoCartellini udc
ON puc.UDC = udc.UDC
INNER JOIN TabTranPosizEventi ttpe
ON ttpe.IdxPosizione = udc.IdxPosizione
INNER JOIN Celle c
ON puc.IdxCella = c.IdxCella
WHERE CodCella = @CodCella
SELECT TOP 1 @idxCellaTo = c.IdxCella
FROM Celle c
WHERE c.IdxBlocco = @IdxBloccoTo
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
-- Ciclo principale x inserimento nuovo record, associazione UDC, spostamenti
------------------------------------------------------------------------------------------------------
BEGIN TRAN
-- ottengo il nuovo codice AL completo
SET @AL = dbo.f_componiAL(@TipoAl, @Flusso, @Anno, @numUdc, @Cesta)
-- inserisco un nuovo record
INSERT INTO ElencoAssiemi(AL, Attivo, DataCreaz, CodSoggetto, CodDtx_start, CodDtx_end)
VALUES (@AL, 1, @DataCreaz, @CodSoggetto, @CodDtxStart, @CodDtxEnd)
-- associo tutti gli UDC della cella indicata al nuovo AL
INSERT INTO AL2UDC(AL, UDC, DataCreaz, CodSoggetto)
SELECT @AL, UDC, @DataCreaz, @CodSoggetto
FROM PosizioneUdcCorrente puc
INNER JOIN Celle c
ON puc.IdxCella = c.IdxCella
WHERE CodCella = @CodCella
-- aggiorno gli UDC x idxPosizione!
UPDATE udc
SET idxPosizione = @IdxPosizioneTo
, Note = @Note
FROM ElencoCartellini udc
INNER JOIN PosizioneUdcCorrente puc
ON puc.UDC = udc.UDC
INNER JOIN Celle c
ON puc.IdxCella = c.IdxCella
WHERE CodCella = @CodCella
-- sposto gli UDC come cella!
UPDATE puc
SET IdxCella = @idxCellaTo
, DataRif = @DataCreaz
, CodSoggetto = @CodSoggetto
FROM PosizioneUdcCorrente puc
INNER JOIN Celle c
ON puc.IdxCella = c.IdxCella
WHERE CodCella = @CodCella
COMMIT TRAN
------------------------------------------------------------------------------------------------------
RETURN