set ANSI_NULLS on;
go

/***************************************
* FUNCTION f_calcDestOdette
*
* Compongo il primo campo delle odette ( campo_2 ) x il destinatario/molo
*
* Steamware, S.E.L.
* mod: 14/05/2013
*
****************************************/
create FUNCTION f_odetteCalcDest (@INEND VARCHAR(50) , @CCDMOL VARCHAR(50), @CCDPTR VARCHAR(50), @CDINB VARCHAR(50),
                   @CRAGCL VARCHAR(50) , @TELND VARCHAR(50) 
)
RETURNS NVARCHAR(50) AS
BEGIN

    DECLARE @answ          NVARCHAR(50) = ''
    DECLARE @destP1A       NVARCHAR(50) = ''
    DECLARE @destP2A       NVARCHAR(50) = ''
    DECLARE @destP1        NVARCHAR(50) = ''
    DECLARE @destP2        NVARCHAR(50) = ''
    DECLARE @destP3        NVARCHAR(50) = ''

    -- Se il campo INEND è vuoto devo prendere sempre gli altri campi CCDMOL e CCDPTR
    SET @destP1A    = CASE WHEN (SUBSTRING(@INEND,1,30)) = '' THEN (@CCDMOL) ELSE dbo.f_trim(SUBSTRING(@INEND,16,15)) END
    SET @destP2A    = CASE WHEN (SUBSTRING(@INEND,1,30)) = '' THEN (@CCDPTR) ELSE dbo.f_trim(SUBSTRING(@INEND,1,15))  END

    SET @destP1	= CASE WHEN (@CDINB) <> '' THEN @destP1A ELSE (@CCDMOL) END
    SET @destP2	= CASE WHEN (@CDINB) <> '' THEN @destP2A ELSE (@CCDPTR) END
    
    -- solo se BMW metto /S
    SET @destP3     = CASE WHEN @CRAGCL = '13' OR ( @CDINB <> '' AND SUBSTRING(@TELND,19,2) = '13') THEN '/S' ELSE '' END

    IF @destP1 + @destP2 <> ''
       SET @answ =  @destP1 + '/' + @destP2 + @destP3
    ELSE 
       SET @answ = ''

RETURN @answ

END
go

/***************************************
* FUNCTION f_odetteCalcNAEL
*
* Compongo il primo campo delle odette campo 14 ( Change Index ) o codice NAEL + esponente di modifica particolare )
*
* Steamware, S.E.L.
* mod: 14/05/2013
*
****************************************/
create FUNCTION f_odetteCalcNAEL (@CRAGCL VARCHAR(50) , @TELND VARCHAR(50), @ECDNAE VARCHAR(50),@ECDNA1 VARCHAR(50)
                                           ,@EESPMD VARCHAR(50), @OCDODM VARCHAR(50)
)
RETURNS NVARCHAR(50) AS
BEGIN

    DECLARE @answ       NVARCHAR(50) = ''
    DECLARE @codNaelP1  NVARCHAR(50) = ''
    DECLARE @codNaelP2  NVARCHAR(50) = ''
    DECLARE @codNaelP3  NVARCHAR(50) = ''

    -- Se il cliente è BMW calcolo campi x NAEL
    SET @codNaelP1  = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN dbo.f_trim(@ECDNAE) ELSE '' END
    SET @codNaelP2  = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN dbo.f_trim(@ECDNA1) ELSE '' END
    SET @codNaelP3  = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13' THEN dbo.f_trim(@EESPMD) ELSE '' END

        
    SET @answ       = CASE WHEN dbo.f_trim(@CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(@TELND,19,2)) = '13'         
                           THEN 'ZI:'+ @codNaelP1 + ' ' + @codNaelP2 + ' AI:'+ @codNaelP3 
                            ELSE @OCDODM   -- se non BMW
                      END

RETURN @answ

END
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
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),
	@codAQP 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,
		Campo16_5 = ISNULL(@codAQP,'')

WHERE	CampoUDC = @UDC

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*****************************************
* STORED stp_ODETTE_caricaDatiBollaEtichettaOdette
*
* carica i dati x odette dai valori delel tab lette da as400 (rimpiazza procedura c#)
*
* Steamware, S.E.L.
* mod: 2011.04.28
*
****************************************/
alter PROCEDURE stp_ODETTE_caricaDatiBollaEtichettaOdette
(
	@CodCS         NVARCHAR(2),
	@UDC           NVARCHAR(50),
	@numBolla      NVARCHAR(6),
	@dataBolla     NVARCHAR(8),
	@CodMag        NVARCHAR(2),
     @GrpBolla      NVARCHAR(1),
     @Particolare   NVARCHAR(15)
)

AS

SET NOCOUNT ON
/* Dichiarazione variabili iniziale */

DECLARE @ragSocCli		NVARCHAR(50)	= ''
DECLARE @indirCli		NVARCHAR(50)	= ''
DECLARE @capCittCli		NVARCHAR(50)	= ''
DECLARE @destinatario	NVARCHAR(50)	= ''
DECLARE @ragSocDest	     NVARCHAR(50)	= ''
DECLARE @indirDest       NVARCHAR(50)   = ''
DECLARE @capCittDest     NVARCHAR(50)   = ''
DECLARE @peso			NUMERIC(7,3)	= 0
DECLARE @pesoNetto		NVARCHAR(50)	= ''
DECLARE @pesoLordo		NVARCHAR(50)	= ''
DECLARE @numColli		NVARCHAR(50)	= ''
DECLARE @disPart		NVARCHAR(50)	= ''
DECLARE @descPart		NVARCHAR(50)	= ''
DECLARE @codPart		NVARCHAR(50)	= ''
DECLARE @codImb		NVARCHAR(50)	= ''
DECLARE @codMaz		NVARCHAR(50)	= ''
DECLARE @codNael		NVARCHAR(50)	= ''
DECLARE @codNaelP1		NVARCHAR(50)	= ''
DECLARE @codNaelP2		NVARCHAR(50)	= ''
DECLARE @codNaelP3		NVARCHAR(50)	= ''
DECLARE @codAQP		NVARCHAR(50)	= ''

-- altre variabili accessorie
DECLARE @trovati        INT    = 0
DECLARE @qtaUdc         INT    = 1

-- in primis recupero la riga di dati da AS400...
SELECT	@trovati = COUNT(*)
FROM	RawData.BORI202J
WHERE		CDMFS = @CodMag 
	AND		GRBOS = @GrpBolla
	AND		NRBOS = @numBolla
	AND		DTBOS = @DataBolla
	AND		CDARS = @Particolare

-- carico i dati dell'UDC
SELECT @qtaUdc = Qta
FROM	ElencoCartellini
WHERE UDC = @UDC

-- proseguo solo se ho trovato la bolla!
IF(@trovati > 0)
BEGIN

	SELECT TOP 1
		 -- campo 1   indirizzo destinazione cliente ( Receiver )
		 @ragSocCli	= CASE WHEN dbo.f_trim(CDINB) <> '' AND @CodCS <> 'TK' THEN dbo.f_trim(RA1ND) ELSE dbo.f_trim(RASCL) END
		,@indirCli	= CASE WHEN dbo.f_trim(CDINB) <> '' AND @CodCS <> 'TK' THEN dbo.f_trim(RA2ND) ELSE dbo.f_trim(INDCL) END
		,@capCittCli	= CASE WHEN dbo.f_trim(CDINB) <> '' AND @CodCS <> 'TK' THEN dbo.f_trim(CAPND) + ' ' + dbo.f_trim(CITND) 
                           ELSE dbo.f_trim(CAPCL) + ' ' + dbo.f_trim(LOCCL) + ' ' +dbo.f_trim(PROCL) END

		-- campo 2    punto di rifornimento / molo / uso ( Destination )
          -- ATTENZIONE NON POSSO TESTARE QUI LE VARIABILI MA SOLO ASSEGNARLE!!! NEL CASE LE VALUTA SEMPRE VUOTE
          ,@destinatario	=  dbo.f_odetteCalcDest( dbo.f_trim(INEND), dbo.f_trim(CCDMOL), dbo.f_trim(CCDPTR), dbo.f_trim(CDINB),
                                                  dbo.f_trim(CRAGCL), dbo.f_trim(TELND) ) 

          -- Leggo i dati che mi servono dopo nel caso il destinatario sia vuoto ( VEDI DOPO SELECT )
          ,@ragSocDest   = dbo.f_trim(RA1ND)
          ,@indirDest    = dbo.f_trim(RA2ND)
		,@capCittDest  = dbo.f_trim(CAPND) + ' ' + dbo.f_trim(CITND)

		-- campo 5_2  peso netto ( Net Weight )
		,@peso		= CASE WHEN ISNULL(EPLAVO,0) <= 0 THEN EPNETT ELSE EPLAVO END
		,@pesoNetto	= CONVERT(NVARCHAR(50), CONVERT(INT , FLOOR( @peso * @qtaUdc  ) ) )

		-- campo 6_2  peso lordo (Gross Weight) 
		,@pesoLordo	= CONVERT(NVARCHAR(50), CONVERT(INT, FLOOR( PELDB / NRC1B ) ) ) 

		-- campo 7    numero colli (Nr. Boxes)
          ,@numColli	= CONVERT(NVARCHAR(50), 1)  -- imposto n. colli del cartellino odette fisso = 1
--		,@numColli	= CONVERT(NVARCHAR(50), NRC1B)

		-- campo 8    disegno particolare ( Part Number )  
		,@disPart		= dbo.f_trim(ECMM01)

		-- campo 10   Descrizione particolare ( Description )
		,@descPart	= dbo.f_trim(DEPAR)
		
		-- campo 11_1 Codice particolare (non stampato)  
		,@codPart		= dbo.f_trim(CDARS)
		-- campo 11_2 Codice imballo per il cliente ( Logistics Reference ) 
		,@codImb		= dbo.f_trim(FCDI01)

		-- campo 12   Codice Mazzucconi/Tekal/Possidonio per il cliente ( Supplier )
		,@codMaz		= CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN 
                                CASE WHEN dbo.f_trim(CDINB) <> '' AND dbo.f_trim(PERND)  <> '' THEN dbo.f_trim(PERND)
                                     WHEN dbo.f_trim(CDINB)  = '' AND dbo.f_trim(CCDET1) <> '' THEN dbo.f_trim(CCDET1)
                                    ELSE dbo.f_trim(CCFOE1) END
                           ELSE dbo.f_trim(CCFOE1) END

		-- campo 14   codice NAEL + esponente di modifica particolare ( Change Index )
          ,@codNael		= dbo.f_odetteCalcNAEL ( dbo.f_trim(CRAGCL),dbo.f_trim(TELND),dbo.f_trim(ECDNAE),dbo.f_trim(ECDNA1),
                                                  dbo.f_trim(EESPMD),dbo.f_trim(OCDODM) )

		--,@codNaelP1	= CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN dbo.f_trim(ECDNAE) ELSE '' END
		--,@codNaelP2	= CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN dbo.f_trim(ECDNA1) ELSE '' END
		--,@codNaelP3	= CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN dbo.f_trim(EESPMD) ELSE '' END
		--,@codNael		= CASE WHEN dbo.f_trim(CRAGCL) = '13' OR dbo.f_trim(SUBSTRING(TELND,19,2)) = '13' THEN 'ZI:'+ @codNaelP1 + ' ' + @codNaelP2 + ' AI:'+ @codNaelP3 ELSE OCDODM END

		-- campo 16_5  AQP ( controllo qualità )
		,@codAQP		= dbo.f_trim(ECLAQP)

	FROM	RawData.BORI202J
	WHERE		CDMFS = @CodMag 
		AND		GRBOS = @GrpBolla
		AND		NRBOS = @numBolla
		AND		DTBOS = @DataBolla
		AND		CDARS = @Particolare

     -- Se nella destinazione non trovo nulla utilizzo i dati in RA1ND RA2ND CAPND CITND ( simile indirizzo cliente )
     IF @destinatario = ''
          SET @destinatario = @ragSocDest
     ELSE
        BEGIN                     -- vuoto i campi necessari solo se destinatario NON è vuoto ( in questo caso compilo solo prima riga )
           SET @indirDest    = ''
           SET @capCittDest  = ''
        END

     -- SELECT @UDC, @ragSocCli, @indirCli, @capCittCli, @destinatario, @indirDest, @capCittDest, @pesoNetto, @pesoLordo, @numColli, @disPart, @descPart, @codPart, @codImb, @codMaz, @codNael, @codAQP
	EXEC stp_ODETTE_updateVal @UDC, @ragSocCli, @indirCli, @capCittCli, @destinatario, @indirDest, @capCittDest, @pesoNetto, @pesoLordo, @numColli, @disPart, @descPart, @codPart, @codImb, @codMaz, @codNael, @codAQP

END
     
RETURN
go

commit;
go





-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(550, GETDATE())
GO
SELECT TOP 5 * FROM LogUpdateDb ORDER BY Versione DESC
GO
