-- FIX della lunghezza di @UDC & co

set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

-- Batch submitted through debugger: GMW_00335.sql|486|0|C:\Users\RottGian\AppData\Local\Temp\2\Temp1_GMW_00335.zip\GMW_00335.sql

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

BEGIN TRAN
    
    -- faccio update
    UPDATE      ElencoCartellini
    SET         IdxPosizione = 0, ModDate = GETDATE()
    WHERE		UDC = @UDC
    
    
COMMIT TRAN

RETURN
go

/*****************************************
* STORED stp_BORI_caricaDatiBolla
*
* richiama la stored di caricamento da AS400 x la bolla indicata
*
* Steamware, S.E.L.
* mod: 2011.04.28
*
****************************************/
alter PROCEDURE stp_BORI_caricaDatiBolla
(
    @RaggrMagazz NVARCHAR(2)  ,
    @GruppoBolle NVARCHAR(1)  ,
    @NumeroBolla NVARCHAR(6)  ,
    @DataBolla   NVARCHAR(8)  ,
    @Particolare NVARCHAR(15) 
)
AS
/*
    SET NOCOUNT ON;

    --DECLARE @RaggrMagazz AS NVARCHAR(2)  = N'SP'
    --DECLARE @GruppoBolle AS NVARCHAR(1)  = N'0'
    --DECLARE @NumeroBolla AS NVARCHAR(6)  = N'678'
    --DECLARE @DataBolla   AS NVARCHAR(8)  = N'20110421'
    --DECLARE @Particolare AS NVARCHAR(15) = N'P00528536146'

    -- Prima cancello i dati della se già presenti bolla poi li carico
    DELETE RawData.BORI202J
    WHERE  CDMFS = @RaggrMagazz
       AND GRBOS = @GruppoBolle
       AND NRBOS = @NumeroBolla
       AND DTBOS = @DataBolla
       AND CDARS = @Particolare

    DECLARE @SQL AS NVARCHAR(4000)
    DECLARE @SqlOK AS INT;

    SET  @SqlOK = 0;

    -- ATTENZIONE!!! i parametri non devono essere nulli altrimenti la stringa ritornata è nulla

    /*
       Prima estraggo i dati della bolla dal file in AS400 in una tabella temporanea
       Poi va letta la tabella temporanea per creare i dati per la stampa Odette
       NON VA BENE, SE ESEGUONO IN DUE LA STAMPA PUO ANDARE IN CONFLITTO
    */

    --IF OBJECT_ID(N'tempdb..##TabTemp') IS NOT NULL   -- ##TabTemp Tabella temporanea globale altrimenti non riesco ad usarla
    --  DROP TABLE ##TabTemp;
    -- SET @SQL = 'SELECT * INTO ##TabTemp FROM OPENQUERY(AS400TEKAL,

    BEGIN TRY
        SET @SQL = 'INSERT INTO RawData.BORI202J SELECT * FROM OPENQUERY(AS400TEKAL,
        ''SELECT 
                 CDMFS
                ,GRBOS
                ,DTBOS
                ,NRBOS
                ,CDARS
                ,NRRGS
                ,CDINB
                ,RA1ND
                ,RA2ND
                ,CAPND
                ,CITND
                ,RASCL
                ,INDCL
                ,CAPCL
                ,LOCCL
                ,PROCL
                ,INEND
                ,CRAGCL
                ,TELND
                ,CCDMOL
                ,CCDPTR
                ,EPLAVO
                ,NRC1B   
                ,ECMM01
                ,DEPAR
                ,RCARTC
                ,PERND
                ,CCDET1
                ,ECDNAE
                ,ECDNA1
                ,EESPMD
                ,PELDB
                ,QTCNS
        FROM POSN_AZI.BORI202J
        WHERE ATV08 <> ''''A''''
        '

        -- commemntare le righe successive per estrarre tutto
        -- Parametri di selezione della bolla
        SET @SQL = @SQL + ' AND CDMFS = '''''  + @RaggrMagazz  + ''''' '
        SET @SQL = @SQL + ' AND GRBOS = '''''  + @GruppoBolle  + ''''' '
        SET @SQL = @SQL + ' AND NRBOS = '      + @NumeroBolla  + ' '
        SET @SQL = @SQL + ' AND DTBOS = '      + @DataBolla    + ' '
        SET @SQL = @SQL + ' AND CDARS = '''''  + @Particolare  + ''''' '

        SET @SQL = @SQL + ''' )';

        EXEC dbo.sp_executesql @SQL

    END TRY
    BEGIN CATCH
      -- PRINT ERROR_NUMBER()
      SET @SqlOK = ERROR_NUMBER();
  
      -- Uso RAISERROR mandare in errore la procedura e x per tornare le info 
      -- sull'errore originale che ha portato l'esecuzione nel blocco CATCH
      --DECLARE @ErrorMessage NVARCHAR(4000);
      --DECLARE @ErrorSeverity INT;
      --DECLARE @ErrorState INT;
      --SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
      --RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState);  -- Se non uso RAISERROR la procedura non mi da errore es. se schedulata      
    END CATCH

    -- MANCA IL TEST SE VA IN ERRORE E IL SALVATAGGIO NEL LOG AS400

    -- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK

    INSERT INTO RawData.AS400_Comandi
    SELECT GETDATE(), 'stp_BORI_caricaDatiBolla', @SQL, @SqlOK;

    -- Carico i dati della Temp table nel file di appoggio
    -- INSERT INTO RawData.BORI202J
    -- SELECT * FROM ##TabTemp
    
    
*/
RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*****************************************
* STORED stp_ODETTE_getByUDC
*
* Recupera etichette odette da stampare (dato un codice UDC)
*
* Steamware, S.E.L.
* mod: 2011.12.19
*
****************************************/
alter PROCEDURE stp_ODETTE_getByUDC
(
    @UDC NVARCHAR(50)
)
AS
 
/* calcolo il codice di raggrupp bolla da passare x generazione cartellino al report partendo da CodCS */
 
SELECT  Od.CampoUDC
       ,Od.Campo1_1
       ,Od.Campo1_2
       ,Od.Campo1_3
       ,Od.Campo1_4
       ,Od.Campo1_5
 
       ,Od.Campo2_1
       ,Od.Campo2_2
       ,Od.Campo2_3
       ,Od.Campo2_4
       ,Od.Campo2_5
 
       ,Od.Campo3_1
 
       -- Formatto il numero bolla in base alla tabella di decodifica
       ,  dbo.f_padLeft( ISNULL(dec.NumRaggrMag,''), 2, '0' )
        + dbo.f_padLeft( ISNULL(Od.GrpBolla    ,''), 1, '0' )
        + dbo.f_padLeft( ISNULL(Od.Campo3_2    ,''), 6, '0' ) AS Campo3_2
 
       ,Od.Campo3_3
       ,Od.Campo3_4
       ,Od.Campo3_5
 
       ,Od.Campo4_1
       ,Od.Campo4_2
       ,Od.Campo4_3
       ,Od.Campo4_4
       ,Od.Campo4_5
 
       ,Od.Campo5_1
       ,Od.Campo5_2
       ,Od.Campo5_3
       ,Od.Campo5_4
       ,Od.Campo5_5
 
       ,Od.Campo6_1
       ,Od.Campo6_2
       ,Od.Campo6_3
       ,Od.Campo6_4
       ,Od.Campo6_5
 
       ,Od.Campo7_1
       ,Od.Campo7_2
       ,Od.Campo7_3
       ,Od.Campo7_4
       ,Od.Campo7_5
 
       ,Od.Campo8_1
       ,Od.Campo8_2
       ,Od.Campo8_3
       ,Od.Campo8_4
       ,Od.Campo8_5
 
       ,Od.Campo9_1
       ,Od.Campo9_2
       ,Od.Campo9_3
       ,Od.Campo9_4
       ,Od.Campo9_5
 
       ,Od.Campo10_1
       ,Od.Campo10_2
       ,Od.Campo10_3
       ,Od.Campo10_4
       ,Od.Campo10_5
 
       ,Od.Campo11_1_1
       ,Od.Campo11_1_2
       ,Od.Campo11_1_3
       ,Od.Campo11_1_4
       ,Od.Campo11_1_5
       ,Od.Campo11_2_1
       ,Od.Campo11_2_2
       ,Od.Campo11_2_3
       ,Od.Campo11_2_4
       ,Od.Campo11_2_5
 
       ,Od.Campo12_1
       ,Od.Campo12_2
       ,Od.Campo12_3
       ,Od.Campo12_4
       ,Od.Campo12_5
 
       ,Od.Campo13_1
       ,Od.Campo13_2
       ,Od.Campo13_3
       ,Od.Campo13_4
       ,Od.Campo13_5
 
       ,Od.Campo14_1
       ,Od.Campo14_2
       ,Od.Campo14_3
       ,Od.Campo14_4
       ,Od.Campo14_5
 
       ,Od.Campo15_1
       ,Od.Campo15_2
       ,Od.Campo15_3
       ,Od.Campo15_4
       ,Od.Campo15_5
 
       ,Od.Campo16_1
       ,Od.Campo16_2
       ,Od.Campo16_3
       ,Od.Campo16_4
       ,Od.Campo16_5
 
       ,Od.StatoOk
       ,Od.CodCS
       ,Od.CodMag
       ,Od.GrpBolla
       ,Od.DataBolla
       ,Od.NumBolla
       ,Od.Particolare
       ,Od.CodLista
 
FROM     Odette AS Od
INNER JOIN RilPro.TabDecodBolla AS dec
ON Od.CodMag = dec.CodRaggrMag
WHERE ( Od.CampoUDC = @UDC )
RETURN
go

/*****************************************
* STORED stp_ODETTE_setStato
*
* aggiorna stato etichetta Odette
*
* Steamware, S.E.L.
* mod: 2011.04.29
*
****************************************/
alter PROCEDURE stp_ODETTE_setStato
(
    @UDC NVARCHAR(50),
    @StatoOk BIT
)
AS

-- update valori (sovrascrivo...)
UPDATE	Odette
SET		StatoOk = @StatoOk
WHERE	CampoUDC = @UDC

RETURN
go

/*****************************************
* STORED stp_ODETTE_updateLingua
*
* Salva nell'etichetta ODETTE indicata le stringhe della lingua desiderata
*
* Steamware, S.E.L.
* mod: 2010.10.22
*
****************************************/
alter PROCEDURE stp_ODETTE_updateLingua
(
    @UDC NVARCHAR(50),
    @Campo1_1 NVARCHAR(50),
    @Campo2_1 NVARCHAR(50),
    @Campo3_1 NVARCHAR(50),
    @Campo4_1 NVARCHAR(50),
    @Campo5_1 NVARCHAR(50),
    @Campo6_1 NVARCHAR(50),
    @Campo7_1 NVARCHAR(50),
    @Campo8_1 NVARCHAR(50),
    @Campo9_1 NVARCHAR(50),
    @Campo10_1 NVARCHAR(50),
    @Campo11_1_1 NVARCHAR(50),
    @Campo11_2_1 NVARCHAR(50),
    @Campo12_1 NVARCHAR(50),
    @Campo13_1 NVARCHAR(50),
    @Campo14_1 NVARCHAR(50),
    @Campo15_1 NVARCHAR(50),
    @Campo16_1 NVARCHAR(50)
)
AS

UPDATE	Odette
SET		Campo1_1 = @Campo1_1,
        Campo2_1 = @Campo2_1,
        Campo3_1 = @Campo3_1,
        Campo4_1 = @Campo4_1,
        Campo5_1 = @Campo5_1,
        Campo6_1 = @Campo6_1,
        Campo7_1 = @Campo7_1,
        Campo8_1 = @Campo8_1,
        Campo9_1 = @Campo9_1,
        Campo10_1 = @Campo10_1,
        Campo11_1_1 = @Campo11_1_1,
        Campo11_2_1 = @Campo11_2_1,
        Campo12_1 = @Campo12_1,
        Campo13_1 = @Campo13_1,
        Campo14_1 = @Campo14_1,
        Campo15_1 = @Campo15_1,
        Campo16_1 = @Campo16_1
WHERE	CampoUDC = @UDC	

RETURN
go

/*****************************************
* STORED stp_ODETTE_updateVal
*
* effettua aggiornamento valori etichetta Odette
*
* Steamware, S.E.L.
* mod: 2011.04.28
*
****************************************/
alter PROCEDURE stp_ODETTE_updateVal
(
    @UDC NVARCHAR(50),
    @ragSocCli NVARCHAR(50),
    @indirCli NVARCHAR(50),
    @capCittCli NVARCHAR(50),
    @ragSocDest NVARCHAR(50),
    @indirDest NVARCHAR(50),
    @capCittDest NVARCHAR(50),
    @pesoNetto NVARCHAR(50),
    @pesoLordo NVARCHAR(50),
    @numColli NVARCHAR(50),
    @disPart NVARCHAR(50),
    @descPart NVARCHAR(50),
    @codPart NVARCHAR(50),
    @codImb NVARCHAR(50),
    @codMaz NVARCHAR(50),
    @codNael NVARCHAR(50)	
)
AS

COMMIT TRAN


-- update valori (sovrascrivo...)
UPDATE	Odette
SET		Campo1_2 = @ragSocCli,
        Campo1_3 = @indirCli,
        Campo1_4 = @capCittCli,
        Campo2_2 = @ragSocDest,
        Campo2_3 = @indirDest,
        Campo2_4 = @capCittDest,
        Campo5_2 = @pesoNetto,
        Campo6_2 = @pesoLordo,
        Campo7_2 = @numColli,
        Campo8_2 = @disPart,
        Campo8_3 = @disPart,
        Campo10_2 = @descPart,
        Campo11_1_2 = @codPart,
        Campo11_1_3 = @codPart,
        Campo11_2_2 = @codImb,
        Campo11_2_3 = @codImb,
        Campo12_2 = @codMaz,
        Campo12_3 = @codMaz,
        Campo14_2 = @codNael

WHERE	CampoUDC = @UDC

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_rappQualAssociaUdc
*
* Associa l'UDC (creato) ad un rapp qualità di AS esistente SOLO SE UDC è NULL
*
* Steamware, S.E.L.
* mod: 2010.09.23
*
****************************************/
alter PROCEDURE stp_rappQualAssociaUdc
(
    @ProgUDC NVARCHAR(10),
    @UDC NVARCHAR(50)
)
AS
    UPDATE	RilPro.RapQual
    SET		UDC = @UDC
    WHERE	(ProgUDC = @ProgUDC) AND (UDC IS NULL)
    
    -- restituisce la riga aggiornata
    SELECT * 
    FROM RilPro.RapQual 
    WHERE	ProgUDC = @ProgUDC
        
RETURN
go

alter PROCEDURE stp_rappQualGetByUDC
(
    @UDC NVARCHAR(50)
)
AS
    -- restituisce le righe richieste
    SELECT	* 
    FROM	RilPro.RapQual 
    WHERE	(UDC = @UDC)
        
RETURN
go

-- Batch submitted through debugger: GMW_00315.sql|69|0|C:\Users\RottGian\AppData\Local\Temp\2\Temp1_GMW_00315.zip\GMW_00315.sql

/***************************************
* STORED stp_rettMovAs400
*
* inserisce nella tabella per i trasferimenti batch verso magazzino AS una quantità di rettifica (con segno - )per UDC eventualmente già scaricati a sistema
*
* Steamware, S.E.L.
* mod: 2010.11.02
*
****************************************/
alter PROCEDURE stp_rettMovAs400
(
    @Particolare NVARCHAR(50),
    @UDC NVARCHAR(50),
    @CodMagAS NVARCHAR(50),
    @Qta DECIMAL(10,2),
    @CodEvento NVARCHAR(10)
)
AS

BEGIN
    
    INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
    VALUES (GETDATE(), @CodEvento, @Particolare, @UDC, @CodMagAS, -@Qta)

END

RETURN
go

-- Batch submitted through debugger: GMW_00310.sql|133|0|C:\Users\RottGian\AppData\Local\Temp\2\Temp1_GMW_00310.zip\GMW_00310.sql

/***************************************
* STORED stp_riattivaUdc
*
* riattiva un dato UDC (da mag consumato negativo a corrispettivo positivo) --> se era positivo NON FA NULLA!!! (perchè uso ABS e controllo sia < 0)
*
* Steamware, S.E.L.
* mod: 2010.11.04
*
****************************************/
alter PROCEDURE stp_riattivaUdc
(
    @UDC VARCHAR(50),
    @CodSoggetto NVARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
DECLARE @CodTipoDichiaraz VARCHAR(1)
DECLARE @IdxCella INT
DECLARE @CodCS NVARCHAR(2)

SET @CodEvento = 'UDC_RIA'
SET @CodTipoDichiaraz = 'U'

BEGIN TRAN
    
    -- faccio update posizione
    UPDATE      ElencoCartellini
    SET         IdxPosizione = ABS(IdxPosizione), ModDate=GETDATE(), CodSoggetto = @CodSoggetto
    WHERE		UDC = @UDC AND IdxPosizione IN (SELECT IdxPosizione FROM AnagPosizioni WHERE (IsRiattivaEnabled = 1)
)
    
    -- lo elimino da eventuali precedenti liste di prelievo sennò poi non potrei + prelevarlo
    DELETE FROM RigheListePrelievo
    WHERE UDC = @UDC
    
    -- imposto posizione CELLA corrente x l'udc nella prima libera 
    SET @IdxCella = (SELECT c.IdxCella FROM Celle c inner join Blocchi b ON c.IdxBlocco=b.IdxBlocco INNER JOIN ElencoCartellini e ON b.CodMag = CAST(e.IdxPosizione AS NVARCHAR(50)) WHERE e.UDC = @UDC)
    SET @CodCS = (SELECT CodCS FROM ElencoCartellini WHERE UDC = @UDC)
    INSERT INTO PosizioneUdcCorrente
    VALUES(@Udc, @IdxCella, @CodCS, GETDATE())

    
COMMIT TRAN

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(50),
    @CodSoggetto NVARCHAR(17)
)
AS

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

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

BEGIN TRAN
    
    -- faccio update
    UPDATE      ElencoCartellini
    SET         ModDate = GETDATE(), CodSoggetto = @CodSoggetto
    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(50)
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

/***************************************
* 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(50),
    @DoDeleteUdcParent BIT,
    @Note NVARCHAR(500)
)
AS

-- DECLARE iniziali
DECLARE @UDC AS VARCHAR(50)
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, Note)
    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(), @Note)

    -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido
    IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = ''))
    BEGIN
        INSERT INTO RelazUDC(UDC_parent, UDC_child)
        VALUES (@UDC_parent, @UDC)
    END
COMMIT TRAN

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

------------------------------------------------------------------------------------------------------
-- Ciclo secondario x eventuale cancellazione 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_insNewFull_fixUDC
*
* crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) avendo in entrata il codice UDC da utilizzare
*
* Steamware, S.E.L.
* mod: 2011.12.07
*
****************************************/
alter PROCEDURE stp_UDC_insNewFull_fixUDC
(
    @UDC AS NVARCHAR(50),
    @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(50),
    @DoDeleteUdcParent BIT,
    @Note NVARCHAR(500)
)
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
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)	
)


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


------------------------------------------------------------------------------------------------------
-- Ciclo principale x inserimento nuovo record
------------------------------------------------------------------------------------------------------
BEGIN TRAN
        
    -- 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, Note)
    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(), @Note)

    -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido
    IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = ''))
    BEGIN
        INSERT INTO RelazUDC(UDC_parent, UDC_child)
        VALUES (@UDC_parent, @UDC)
    END
COMMIT TRAN

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

------------------------------------------------------------------------------------------------------
-- Ciclo secondario x eventuale cancellazione 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())
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- 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(50),
    @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(50),
    @Note NVARCHAR(500)
)
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
    
    -- 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(), Note = @Note 
    WHERE	UDC = @UDC_edit

    -- inserisco relazione parent-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(50),
    @IdxPosizione INT
)
AS


------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN	
    
    -- 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(50),
    @CodSoggetto VARCHAR(17),
    @CodTipoDichiaraz CHAR(1),
    @CodEvento VARCHAR(10),
    @Qta DECIMAL(10,2)
)
AS


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

    -- 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

/***************************************
* STORED stp_updateByBilancia
*
* aggiorna i dati a partire dalla segnalazione conteggio pezzi della bilancia
*
* Steamware, S.E.L.
* mod: 2010.03.19
*
****************************************/
alter PROCEDURE stp_updateByBilancia
(
    @CodCompany VARCHAR(4),
    @UDC VARCHAR(50),
    @CodArticolo VARCHAR(50),
    @qta INT
)
AS

------------------------------------------------------------------------------------------------------
-- Articoli
------------------------------------------------------------------------------------------------------
DECLARE @numArt AS INT
-- controllo se esista il cod articolo o lo creo
SET @numArt = (
    SELECT count(*)
    FROM AnagArticoli
    WHERE	CodArticolo	=	@CodArticolo
)
-- ...sennò lo creo...
IF(@numArt = 0)
    BEGIN
        INSERT INTO AnagArticoli(CodArticolo, DescrArticolo, Figura)
        VALUES (@CodArticolo, @CodArticolo, 'ND')
    END
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- ODP = articolo
------------------------------------------------------------------------------------------------------
DECLARE @numOdp AS INT
-- controllo se esiste l'ODP = articolo...
SET @numOdp = (
    SELECT count(*)
    FROM AnagOdp
    WHERE	CodCompany	=	@CodCompany
    AND		ODP		=	@CodArticolo
)
-- ...sennò lo creo...
IF(@numOdp = 0)
    BEGIN
        -- se c'è inserisco in tab
        INSERT INTO AnagOdp(CodCompany, ODP, CodArticolo, Esponente, CodDisegno, Magazzino, Ubicazione, CreateDate, ModDate)
        VALUES (@CodCompany, @CodArticolo, @CodArticolo, 'ND', 'ND', 'WIP', 'ND', GETDATE(), GETDATE())
    END
------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------
-- UDC
------------------------------------------------------------------------------------------------------
-- aggiorno lo stato UDC
UPDATE	TabStatoOdpUdc
SET		Qta = @Qta, ODP = @CodArticolo
WHERE	UDC = @UDC
------------------------------------------------------------------------------------------------------


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

RETURN
go

commit;
go







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