-- update stored varie

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_consumaMP
*
* Salva il movimento di consumo dell'UDC di MP indicato
*
* Steamware, S.E.L.
* mod: 2010.09.24
*
****************************************/
create PROCEDURE BatchQueue.stp_consumaMP
(
    @XRPQLN	INT, --è il num rap qualità
    @XNRETI NVARCHAR(10), -- è il numRapQual
    @XDTPRO	INT, -- data 8 cifre aaaammgg
    @XTRPRO NVARCHAR(5) -- turno
)
AS
    -- BOZZA DA COMPLETARE A CURA MAZZUCCONI!!!

    DECLARE @SQL AS NVARCHAR(1000)

    -- Faccio chiamata su AS400
    
    SET @SQL =  N' OPENQUERY( P65220DC,  ''UPDATE MAZZT_DTV3.XOGIX00F' 
    SET @SQL = @SQL + 'SET	XDTPRO =  ' + @XDTPRO  + ', XTRPRO = ' + @XTRPRO
    SET @SQL = @SQL + ', XDESMT = ''F01'', XMATSC=''S'' '
    SET @SQL = @SQL + 'WHERE XRPQLN =' +  @XRPQLN + ' AND XNRETI = ' + @XNRETI + ''' )'

    EXEC dbo.sp_executesql @SQL
    
RETURN
go

/***************************************
* STORED stp_annullaUDC
*
* annulla un UDC
*
* Steamware, S.E.L.
* mod: 2010.04.28
*
****************************************/
alter PROCEDURE stp_annullaUDC
(
    @UDC VARCHAR(20),
    @CodSoggetto VARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
DECLARE @CodTipoDichiaraz VARCHAR(1)

SET @CodEvento = 'UDC_ANN'
SET @CodTipoDichiaraz = 'U'

BEGIN TRAN
    -- registro in StoricoCartellini
    INSERT INTO StoricoCartellini(DataEv, CodEvento, CodTipoDichiaraz, UDC, CodCS,CodCliente, RagSociale, Particolare, DescParticolare,
                        DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, 
                        NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad)
    SELECT		GETDATE() AS DataEv, @CodEvento AS CodEvento, @CodTipoDichiaraz AS CodTipoDichiaraz, UDC, CodCS,
                CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura,
                DataFus, TurnoFus, CodImballo, @CodSoggetto AS CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad
    FROM        ElencoCartellini
    WHERE       (UDC = @UDC)	

    -- faccio update
    UPDATE      ElencoCartellini
    SET         IdxPosizione = 0
    WHERE		UDC = @UDC
    
    
COMMIT TRAN

RETURN
go

commit
go

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_getUdcDetailFullCode
*
* ottiene l'elenco degli UDC con i dati significativi partendo da un codice UDC COMPLETO
*
* Steamware, S.E.L.
* mod: 2010.05.24
*
****************************************/
alter PROCEDURE stp_getUdcDetailFullCode
(
    @UDC VARCHAR(50),
    @CodCS VARCHAR(2)	
)
AS

SELECT        ElencoCartellini.UDC, ISNULL(ElencoCartellini.RagSociale, N'') AS RagSociale, ISNULL(ElencoCartellini.Particolare, N'') AS Particolare,
              ISNULL(ElencoCartellini.DescParticolare, N'') AS DescParticolare, ISNULL(ElencoCartellini.DisegnoGrezzo, N'') AS DisegnoGrezzo, 
              ISNULL(ElencoCartellini.Esponente, N'') AS Esponente, ISNULL(ElencoCartellini.DescImpianto, N'') AS DescImpianto,
              ISNULL(ElencoCartellini.DataFus, N'') AS DataFus, ISNULL(ElencoCartellini.TurnoFus, 0) AS TurnoFus, ElencoCartellini.CodImballo, 
              ElencoCartellini.Qta,  ISNULL(AnagStatiProdotto.DescStato, N'') AS DescStato, ElencoCartellini.ModDate, 
              ISNULL(Blocchi.CodMag, N'') AS CodMag, 
              ISNULL(Blocchi.CodBlocco, N'') AS CodBlocco, ISNULL(Celle.CodCella, N'') AS CodCella, ISNULL(dbo.Celle.IdxCella, 0) AS IdxCella,
              ISNULL(Celle.X, 0) AS X, ISNULL(Celle.Y, 0) AS Y, ISNULL(Celle.Z, 0) AS Z, ElencoCartellini.IdxPosizione
FROM          AnagStatiProdotto RIGHT OUTER JOIN
              ElencoCartellini ON AnagStatiProdotto.CodStato = ElencoCartellini.CodStato AND AnagStatiProdotto.CodStato = ElencoCartellini.CodStato 
              LEFT OUTER JOIN Celle INNER JOIN PosizioneUdcCorrente ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella 
              AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella 
              INNER JOIN Blocchi ON Celle.IdxBlocco = Blocchi.IdxBlocco INNER JOIN AnagMag ON Blocchi.CodMag = AnagMag.CodMag 
              AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag 
              AND Blocchi.CodCS = AnagMag.CodCS ON ElencoCartellini.UDC = PosizioneUdcCorrente.UDC
WHERE        (ElencoCartellini.UDC = @UDC) AND (ElencoCartellini.CodCS = @CodCS)

RETURN
go

/***************************************
* STORED stp_getUdcDetailFullCode
*
* ottiene l'elenco degli UDC con i dati significativi partendo da un valore da cercare come LIKE in 
*  - UDC
*  - Particolare
*
* Steamware, S.E.L.
* mod: 2010.05.24
*
****************************************/
alter PROCEDURE stp_getUdcDetailLikeSearch
(
    @searchVal VARCHAR(50),
    @CodCS VARCHAR(2)	
)
AS

SELECT		ElencoCartellini.UDC, ISNULL(ElencoCartellini.RagSociale, N'') AS RagSociale, ISNULL(ElencoCartellini.Particolare, N'') AS Particolare,
              ISNULL(ElencoCartellini.DescParticolare, N'') AS DescParticolare, ISNULL(ElencoCartellini.DisegnoGrezzo, N'') AS DisegnoGrezzo, 
              ISNULL(ElencoCartellini.Esponente, N'') AS Esponente, ISNULL(ElencoCartellini.DescImpianto, N'') AS DescImpianto,
              ISNULL(ElencoCartellini.DataFus, N'') AS DataFus, ISNULL(ElencoCartellini.TurnoFus, 0) AS TurnoFus, ElencoCartellini.CodImballo, 
              ElencoCartellini.Qta,  ISNULL(AnagStatiProdotto.DescStato, N'') AS DescStato, ElencoCartellini.ModDate, 
              ISNULL(Blocchi.CodMag, N'') AS CodMag, ISNULL(Blocchi.CodBlocco, N'') AS CodBlocco, ISNULL(Celle.CodCella, N'') AS CodCella, 
            ISNULL(dbo.Celle.IdxCella, 0) AS IdxCella, ISNULL(Celle.X, 0) AS X, ISNULL(Celle.Y, 0) AS Y, ISNULL(Celle.Z, 0) AS Z, ElencoCartellini.IdxPosizione
FROM		AnagStatiProdotto RIGHT OUTER JOIN ElencoCartellini
            ON AnagStatiProdotto.CodStato = ElencoCartellini.CodStato AND AnagStatiProdotto.CodStato = ElencoCartellini.CodStato 
            LEFT OUTER JOIN Celle INNER JOIN PosizioneUdcCorrente 
            ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND 
            Celle.IdxCella = PosizioneUdcCorrente.IdxCella INNER JOIN
            Blocchi ON Celle.IdxBlocco = Blocchi.IdxBlocco INNER JOIN
            AnagMag ON Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND 
            Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS ON 
            ElencoCartellini.UDC = PosizioneUdcCorrente.UDC
WHERE       (ElencoCartellini.CodCS = @CodCS) AND 
            ((ElencoCartellini.UDC like '%'+ @searchVal+'%') OR (ElencoCartellini.Particolare like '%'+ @searchVal+'%') OR 
            (ElencoCartellini.RagSociale like '%'+ @searchVal+'%'))

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_rappQualGetByNumRapQual
*
* Ottiene l'elenco dei record di rapp qualità di AS dato il numero del rapporto di qualità che NON HANNO UDC
*
* Steamware, S.E.L.
* mod: 2010.09.23
*
****************************************/
alter PROCEDURE stp_rappQualGetByNumRapQual
(
    @nRapQual INT
)
AS
    -- restituisce le righe richieste
    SELECT	* 
    FROM	RilPro.RapQual 
    WHERE	(nRapQual = @nRapQual)--  AND (UDC IS NULL)
        
RETURN
go

/***************************************
* STORED stp_sbloccaUdc
*
* sblocca un dato UDC per modifica
*
* Steamware, S.E.L.
* mod: 2010.04.28
*
****************************************/
alter PROCEDURE stp_sbloccaUdc
(
    @UDC VARCHAR(20),
    @CodSoggetto VARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
DECLARE @CodTipoDichiaraz VARCHAR(1)

SET @CodEvento = 'UDC_SBL'
SET @CodTipoDichiaraz = 'U'

BEGIN TRAN
    -- registro in StoricoCartellini
    INSERT INTO StoricoCartellini(DataEv, CodEvento, CodTipoDichiaraz, UDC, CodCS,CodCliente, RagSociale, Particolare, DescParticolare,
                        DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, 
                        NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad)
    SELECT		GETDATE() AS DataEv, @CodEvento AS CodEvento, @CodTipoDichiaraz AS CodTipoDichiaraz, UDC, CodCS,
                CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura,
                DataFus, TurnoFus, CodImballo, @CodSoggetto AS CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad
    FROM        ElencoCartellini
    WHERE       (UDC = @UDC)
    
    -- faccio update
    UPDATE      ElencoCartellini
    SET         ModDate = GETDATE()
    WHERE		UDC = @UDC
    
COMMIT TRAN

RETURN
go

/***************************************
* STORED stp_scaricaUdc
*
* elimina dalle posizioni correnti un UDC, salvandone la posizione precedente nella tab storica (per scaricamento / spedizione)
*
* Steamware, S.E.L.
* mod: 2010.09.28
*
****************************************/
alter PROCEDURE stp_scaricaUdc
(
    @UDC VARCHAR(50),
    @IdxCellaFrom INT,
    @IdxPosizione INT
)
AS

BEGIN TRAN
    /*
    -- inizio mettendo in storico la posizione attuale dell'UDC (SE esiste)
    INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine)
    (
        SELECT	UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine
        FROM	PosizioneUdcCorrente
        WHERE	UDC = @UDC AND IdxCella = @IdxCellaFrom
    )
    */
    -- libero la posizione attuale dell'UDC (se c'è...)
    DELETE
    FROM	PosizioneUdcCorrente
    WHERE	UDC = @UDC AND IdxCella = @IdxCellaFrom
    
    -- aggiorno l'UDC come posizione finale...
    UPDATE	ElencoCartellini
    SET		IdxPosizione = @IdxPosizione
    WHERE	UDC = @UDC	
    
COMMIT TRAN

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_UDC_insNew
*
* crea un nuovo record nella TabStatoOdpUdc e restituisce il codice UDC appena creato
*
* Steamware, S.E.L.
* mod: 2010.04.28
*
****************************************/
alter PROCEDURE stp_UDC_insNew
(
    @CodCS VARCHAR(2),
    @Flusso VARCHAR(2),
    @Anno VARCHAR(2),
    @Tara FLOAT,
    @CodImballo AS VARCHAR(50),
    @CodTipoDichiaraz CHAR(1),
    @CodSoggetto VARCHAR(17)
)
AS

-- DECLARE iniziali
DECLARE @UDC AS VARCHAR(20)
DECLARE @numFlu AS INT
DECLARE @numUdc AS INT
DECLARE @nextUdc AS INT
    
------------------------------------------------------------------------------------------------------
-- Flusso
------------------------------------------------------------------------------------------------------
-- controllo se esiste il flusso (bilancia)...
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
------------------------------------------------------------------------------------------------------

        
------------------------------------------------------------------------------------------------------
-- UDC
------------------------------------------------------------------------------------------------------
-- controllo se ci sia già un UDC per company / flusso anno
BEGIN TRAN
    -- cerco nella tab contatori UDC l'ultimo valido
    SET @numUdc = (
        SELECT count(*)
        FROM ContatoriUdc
        WHERE	CodCS		=	@CodCS
        AND		Flusso		=	@Flusso
        AND		Anno		=	@Anno
    )
    -- controllo se record c'è...
    IF(@numUdc > 0)
        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 principale x inserimento nuovo record
------------------------------------------------------------------------------------------------------
-- ottengo il nuovo codice UDC completo
--SET @UDC = 'U' + @CodCS + @Flusso + @Anno + dbo.f_padLeft(CAST(@numUdc AS VARCHAR(6)), 6, '0')
SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc)
    
-- inserisco un nuovo record
INSERT INTO ElencoCartellini(CodCS, UDC, Tara, IdxPosizione, Qta, CodImballo, CreateDate, ModDate)
VALUES	(@CodCS, @UDC, @Tara, 0, 0, @CodImballo, GETDATE(), GETDATE())
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------

RETURN
go

/***************************************
* STORED stp_UDC_insNewFull
*
* crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) e restituisce il codice UDC appena creato
*
* Steamware, S.E.L.
* mod: 2010.04.28
*
****************************************/
alter PROCEDURE stp_UDC_insNewFull
(
    @CodCS VARCHAR(2),
    @Flusso VARCHAR(2),
    @Anno VARCHAR(2),
    @CodCliente VARCHAR(6),
    @Particolare VARCHAR(15),
    @CodImpianto AS VARCHAR(50),
    @CodStampo VARCHAR(8),
    @Esponente VARCHAR(6),
    @Figura VARCHAR(4),
    @DataFus DATETIME,
    @TurnoFus INT,
    @CodImballo VARCHAR(15),
    @CodSoggetto VARCHAR(17),	
    @Tara FLOAT,
    @IdxPosizione INT,
    @CodTipoDichiaraz CHAR(1),
    @CodEvento VARCHAR(10),
    @Qta DECIMAL(10,2),
    @PesoTot FLOAT,
    @PesoCad FLOAT,
    @CodStato VARCHAR(50),
    @UDC_parent VARCHAR(20),
    @DoDeleteUdcParent BIT
)
AS

-- DECLARE iniziali
DECLARE @UDC AS VARCHAR(20)
DECLARE @RagSociale AS VARCHAR(35)
DECLARE @DescParticolare AS VARCHAR(30)
DECLARE @DescImpianto AS VARCHAR(50)
DECLARE @DisegnoGrezzo AS VARCHAR(30)
DECLARE @NumCont AS INT
DECLARE @numFlu AS INT
DECLARE @numUdc AS INT
DECLARE @nextUdc AS INT
DECLARE @IdxCella AS INT

------------------------------------------------------------------------------------------------------
-- Caricamento Dati da anagrafica
------------------------------------------------------------------------------------------------------
-- cerco la ragione sociale...
SET @RagSociale = (
    SELECT        ISNULL(RagSociale, 'ND') AS RagSociale
    FROM            RilPro.AnagClienti
    WHERE        (CodCliente = @CodCliente)
)

-- Cerco descrizione del particolare...
SET @DescParticolare = (
    SELECT        ISNULL(DescParticolare, 'ND') AS DescParticolare
    FROM            RilPro.AnagParticolari
    WHERE        (Particolare = @Particolare)
)

-- cerco codice disegno grezzo
SET @DisegnoGrezzo = (
    SELECT        ISNULL(DisegnoGrezzo, 'ND') AS DescParticolare
    FROM            RilPro.AnagParticolari
    WHERE        (Particolare = @Particolare)
)

-- cerco descrizione Impianto
SET @DescImpianto = (
    SELECT        ISNULL(DescImpianto, 'ND') AS DescImpianto
    FROM            AnagImpianti
    WHERE        (CodImpianto = @CodImpianto)
)



-- Calcolo contatore intero successivo x il contenitore...
SET @NumCont = (
    SELECT      ISNULL(MAX(NumCont), 0) + 1 AS NumCont
    FROM        ElencoCartellini
    WHERE       (Particolare = @Particolare)
    AND			(DataFus = @DataFus)
    AND			(TurnoFus = @TurnoFus)
    AND			(CodImpianto = @CodImpianto)
    AND			(CodStampo = @CodStampo)
    AND			(Figura = @Figura)	
)


------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- Flusso
------------------------------------------------------------------------------------------------------
-- controllo se esiste il flusso (bilancia)...
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
------------------------------------------------------------------------------------------------------

        
------------------------------------------------------------------------------------------------------
-- UDC
------------------------------------------------------------------------------------------------------
-- controllo se ci sia già un UDC per company / flusso anno
BEGIN TRAN
    -- cerco nella tab contatori UDC l'ultimo valido
    SET @numUdc = (
        SELECT count(*)
        FROM ContatoriUdc
        WHERE	CodCS		=	@CodCS
        AND		Flusso		=	@Flusso
        AND		Anno		=	@Anno
    )
    -- controllo se record c'è...
    IF(@numUdc > 0)
        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 principale x inserimento nuovo record
------------------------------------------------------------------------------------------------------
BEGIN TRAN
    -- ottengo il nuovo codice UDC completo
    --SET @UDC = 'U' + @CodCS + @Flusso + @Anno + dbo.f_padLeft(CAST(@numUdc AS VARCHAR(6)), 6, '0')
    SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc)

        
    -- inserisco un nuovo record
    INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate)
    VALUES	(@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE())

    -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa)
    INSERT INTO RelazUDC(UDC_parent, UDC_child)
    VALUES (@UDC_parent, @UDC)
COMMIT TRAN

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- Ciclo secondario x eventuale cancelalzione UDC tara parent e inserimento in posizione
------------------------------------------------------------------------------------------------------
    -- se richiesto elimino l'UDC parent (tara)
    IF(@DoDeleteUdcParent = 1)
        BEGIN
            DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent
        END
    
    -- calcolo la prima cella della posizione indicata..
    SET @IdxCella = (
                    SELECT TOP 1 c.IdxCella 
                        FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco 
                        WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50))
                    )
    -- inserisco il cartellino nella prima cella della posizione indicata..
    INSERT INTO PosizioneUdcCorrente
    VALUES (@UDC, @IdxCella, @CodCS, GETDATE())
------------------------------------------------------------------------------------------------------

/*
------------------------------------------------------------------------------------------------------
-- Salvataggio dati evento in tab StoricoEventi
------------------------------------------------------------------------------------------------------
INSERT INTO StoricoEventi(DataEv, CodEvento, CodOperatore, CodTipoDichiaraz, CodCS, UDC, Qta, PesoTot, PesoCad, Particolare, CodStato, CodStampo, Figura, FiguraIncisa)
VALUES	(GETDATE(), @CodEvento, @CodOperatore, @CodTipoDichiaraz, @CodCS, @UDC, @Qta, @PesoTot, @PesoCad, @Particolare, @CodStato, @CodStampo, @Figura, @FiguraIncisa)
------------------------------------------------------------------------------------------------------
*/

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------

RETURN
go

/***************************************
* STORED stp_UDC_update
*
* aggiorna un cartellino dato il suo codice UDC e tutti i parametri da aggiornare
*
* Steamware, S.E.L.
* mod: 2010.04.30
*
****************************************/
alter PROCEDURE stp_UDC_update
(
    @UDC_edit VARCHAR(20),
    @CodCS VARCHAR(2),
    @Flusso VARCHAR(2),
    @Anno VARCHAR(2),
    @CodCliente VARCHAR(6),
    @Particolare VARCHAR(15),
    @CodImpianto AS VARCHAR(50),
    @CodStampo VARCHAR(8),
    @Esponente VARCHAR(6),
    @Figura VARCHAR(4),
    @DataFus DATETIME,
    @TurnoFus INT,
    @CodImballo VARCHAR(15),
    @CodSoggetto VARCHAR(17),	
    @Tara FLOAT,
    @IdxPosizione INT,
    @CodTipoDichiaraz CHAR(1),
    @CodEvento VARCHAR(10),
    @Qta DECIMAL(10,2),
    @PesoTot FLOAT,
    @PesoCad FLOAT,
    @CodStato VARCHAR(50),
    @UDC_parent VARCHAR(20)
)
AS

-- DECLARE iniziali
DECLARE @RagSociale AS VARCHAR(35)
DECLARE @DescParticolare AS VARCHAR(30)
DECLARE @DescImpianto AS VARCHAR(50)
DECLARE @DisegnoGrezzo AS VARCHAR(30)
DECLARE @NumCont AS INT
DECLARE @numFlu AS INT
DECLARE @numUdc AS INT
DECLARE @nextUdc AS INT

------------------------------------------------------------------------------------------------------
-- Caricamento Dati da anagrafica
------------------------------------------------------------------------------------------------------
-- cerco la ragione sociale...
SET @RagSociale = (
    SELECT        ISNULL(RagSociale, 'ND') AS RagSociale
    FROM            RilPro.AnagClienti
    WHERE        (CodCliente = @CodCliente)
)

-- Cerco descrizione del particolare...
SET @DescParticolare = (
    SELECT        ISNULL(DescParticolare, 'ND') AS DescParticolare
    FROM            RilPro.AnagParticolari
    WHERE        (Particolare = @Particolare)
)

-- cerco codice disegno grezzo
SET @DisegnoGrezzo = (
    SELECT        ISNULL(DisegnoGrezzo, 'ND') AS DescParticolare
    FROM            RilPro.AnagParticolari
    WHERE        (Particolare = @Particolare)
)

-- cerco descrizione Impianto
SET @DescImpianto = (
    SELECT        ISNULL(DescImpianto, 'ND') AS DescImpianto
    FROM            AnagImpianti
    WHERE        (CodImpianto = @CodImpianto)
)



-- Calcolo contatore intero successivo x il contenitore...
SET @NumCont = (
    SELECT      NumCont
    FROM        ElencoCartellini
    WHERE       (UDC = @UDC_edit)	
)


------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- Flusso
------------------------------------------------------------------------------------------------------
-- controllo se esiste il flusso (bilancia)...
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
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN
    -- registro in StoricoCartellini
    INSERT INTO StoricoCartellini(DataEv, CodEvento, CodTipoDichiaraz, UDC, CodCS,CodCliente, RagSociale, Particolare, DescParticolare,
                        DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, 
                        NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad)
    SELECT		GETDATE() AS DataEv, @CodEvento AS CodEvento, @CodTipoDichiaraz AS CodTipoDichiaraz, UDC, CodCS,
                CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura,
                DataFus, TurnoFus, CodImballo, @CodSoggetto AS CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad
    FROM        ElencoCartellini
    WHERE       (UDC = @UDC_edit)
    
    -- elimino vecchio record parent/child
    DELETE FROM RelazUDC
    WHERE (UDC_child = @UDC_edit)
    
    -- modifico il record 
    UPDATE	ElencoCartellini
    SET		CodCS = @CodCS, CodCliente = @CodCliente, RagSociale = @RagSociale, Particolare = @Particolare, DescParticolare = @DescParticolare,
            DisegnoGrezzo = @DisegnoGrezzo, Esponente = @Esponente, CodImpianto = @CodImpianto, DescImpianto = @DescImpianto, CodStampo = @CodStampo,
            Figura = @Figura, DataFus = @DataFus, TurnoFus = @TurnoFus, CodImballo = @CodImballo, CodSoggetto = @CodSoggetto, NumCont = @NumCont,
            Tara = @Tara, Qta = @Qta, CodStato = @CodStato, IdxPosizione = @IdxPosizione, PesoTot = @PesoTot, PesoCad = @PesoCad, ModDate = GETDATE()
    WHERE	UDC = @UDC_edit

    -- inserisco relazione aprent-child tra UDC vecchio (tara) e nuovo (pesa)
    INSERT INTO RelazUDC(UDC_parent, UDC_child)
    VALUES (@UDC_parent, @UDC_edit)
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC_edit
------------------------------------------------------------------------------------------------------

RETURN
go

/***************************************
* STORED stp_UDC_updateIdxPosizione
*
* aggiorna un cartellino x la sua posizione logica
*
* Steamware, S.E.L.
* mod: 2010.06.12
*
****************************************/
alter PROCEDURE stp_UDC_updateIdxPosizione
(
    @UDC VARCHAR(20),
    @CodSoggetto VARCHAR(17),
    @CodTipoDichiaraz CHAR(1),
    @CodEvento VARCHAR(10),
    @IdxPosizione INT
)
AS


------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN

    -- registro in StoricoCartellini
    INSERT INTO StoricoCartellini(DataEv, CodEvento, CodTipoDichiaraz, UDC, CodCS,CodCliente, RagSociale, Particolare, DescParticolare,
                        DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, 
                        NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad)
    SELECT		GETDATE() AS DataEv, @CodEvento AS CodEvento, @CodTipoDichiaraz AS CodTipoDichiaraz, UDC, CodCS,
                CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura,
                DataFus, TurnoFus, CodImballo, @CodSoggetto AS CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad
    FROM        ElencoCartellini
    WHERE       (UDC = @UDC)
        
    -- modifico il record 
    UPDATE	ElencoCartellini
    SET		IdxPosizione = @IdxPosizione, ModDate = GETDATE()
    WHERE	UDC = @UDC
    
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------

RETURN
go

/***************************************
* STORED stp_UDC_updateQty
*
* aggiorna un cartellino x la sua quantità
*
* Steamware, S.E.L.
* mod: 2010.06.12
*
****************************************/
alter PROCEDURE stp_UDC_updateQty
(
    @UDC VARCHAR(20),
    @CodSoggetto VARCHAR(17),
    @CodTipoDichiaraz CHAR(1),
    @CodEvento VARCHAR(10),
    @Qta DECIMAL(10,2)
)
AS


------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN

    -- registro in StoricoCartellini
    INSERT INTO StoricoCartellini(DataEv, CodEvento, CodTipoDichiaraz, UDC, CodCS,CodCliente, RagSociale, Particolare, DescParticolare,
                        DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, 
                        NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad)
    SELECT		GETDATE() AS DataEv, @CodEvento AS CodEvento, @CodTipoDichiaraz AS CodTipoDichiaraz, UDC, CodCS,
                CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura,
                DataFus, TurnoFus, CodImballo, @CodSoggetto AS CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad
    FROM        ElencoCartellini
    WHERE       (UDC = @UDC)
        
    -- modifico il record 
    UPDATE	ElencoCartellini
    SET		Qta = @Qta, ModDate = GETDATE()
    WHERE	UDC = @UDC
    
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------

RETURN
go

commit
go


-- ulteriori fix

set xact_abort on
go

begin transaction
go

INSERT INTO dbo.AnagBilance
  VALUES (N'MP', N'MP', N'MA')
go

commit transaction
go


set xact_abort on
go

begin transaction
go

UPDATE dbo.AnagTipoDelibere SET 
  CodEvento=N'DelWipPost'
  WHERE CodTipoDelibera=N'DelibWipPost'
go

commit transaction
go


set xact_abort on
go

begin transaction
go

DELETE FROM dbo.AS400_MagCont WHERE CodMagAS=N'56'
go

commit transaction
go

set xact_abort on
go

begin transaction
go

INSERT INTO dbo.Permessi
  VALUES ('LAB', 'menu.aspx', 3, 0, 'GestLaboratorioMP', 'GestLaboratorioMPExpl')
INSERT INTO dbo.Permessi
  VALUES ('LAB_consumaUdc', 'LabConsumaUdc.aspx', 3, 2, 'ConsUDC', 'ConsUDCExpl')
INSERT INTO dbo.Permessi
  VALUES ('LAB_stampaUdc', 'LabStampaUdc.aspx', 3, 1, 'AcqPrntUdc', 'AcqPrntUdcExpl')
go

commit transaction
go


set xact_abort on
go

begin transaction
go

INSERT INTO dbo.Permessi2Funzione
  VALUES ('LAB', N'GMW_lab', 'S')
INSERT INTO dbo.Permessi2Funzione
  VALUES ('LAB_consumaUdc', N'GMW_lab', 'S')
INSERT INTO dbo.Permessi2Funzione
  VALUES ('LAB_stampaUdc', N'GMW_lab', 'S')
go

commit transaction
go



/****** Object:  StoredProcedure [dbo].[stp_UDC_insNew]    Script Date: 09/29/2010 14:53:58 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
 
/***************************************
* STORED stp_UDC_insNew
*
* crea un nuovo record nella TabStatoOdpUdc e restituisce il codice UDC appena creato
*
* Steamware, S.E.L.
* mod: 2010.04.28
*
****************************************/
ALTER PROCEDURE [dbo].[stp_UDC_insNew]
(
      @CodCS VARCHAR(2),
      @Flusso VARCHAR(2),
      @Anno VARCHAR(2),
      @Tara FLOAT,
      @CodImballo AS VARCHAR(50),
      @CodTipoDichiaraz CHAR(1),
      @CodSoggetto VARCHAR(17)
)
AS
 
-- DECLARE iniziali
DECLARE @UDC AS VARCHAR(20)
DECLARE @numFlu AS INT
DECLARE @numUdc AS INT
DECLARE @nextUdc AS INT
     
------------------------------------------------------------------------------------------------------
-- Flusso
------------------------------------------------------------------------------------------------------
-- controllo se esiste il flusso (bilancia)...
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
------------------------------------------------------------------------------------------------------
 
           
------------------------------------------------------------------------------------------------------
-- UDC
------------------------------------------------------------------------------------------------------
-- controllo se ci sia già un UDC per company / flusso anno
BEGIN TRAN
      -- cerco nella tab contatori UDC l'ultimo valido
      SET @numUdc = (
            SELECT count(*)
            FROM ContatoriUdc
            WHERE CodCS       =     @CodCS
            AND         Flusso            =     @Flusso
            AND         Anno        =     @Anno
      )
      -- controllo se record c'è...
      IF(@numUdc > 0)
            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 principale x inserimento nuovo record
------------------------------------------------------------------------------------------------------
-- ottengo il nuovo codice UDC completo
--SET @UDC = 'U' + @CodCS + @Flusso + @Anno + dbo.f_padLeft(CAST(@numUdc AS VARCHAR(6)), 6, '0')
SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc)
     
-- inserisco un nuovo record
INSERT INTO ElencoCartellini(CodCS, UDC, Tara, IdxPosizione, Qta, CodImballo, CodSoggetto, CreateDate, ModDate)
VALUES      (@CodCS, @UDC, @Tara, 0, 0, @CodImballo, @CodSoggetto, GETDATE(), GETDATE())
------------------------------------------------------------------------------------------------------
 
------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT *
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------
 
RETURN
 
GO
 




-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(260, GETDATE())
GO
