
/***************************************
* 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
*
****************************************/
CREATE 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

SET @UDC_parent = UPPER(@UDC_parent) -- nel caso sia passato in minuscolo

-- metto il particolare in Maiuscolo ( il campo è Case Insensitive )
SET @Particolare = UPPER(@Particolare);

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

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

-- se non lo trova provo anche nell'anagrafica leghe
IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null)
	BEGIN
		SET @DescParticolare = ISNULL(
		(
			SELECT DescLega
			FROM   RilPro.AnagLeghe
			WHERE  ('L'+CodLega = @Particolare)
		)
		, '')
	END
-- cerco codice disegno grezzo
SET @DisegnoGrezzo = ISNULL(
(
	SELECT DisegnoGrezzo
	FROM   RilPro.AnagParticolari
	WHERE  (Particolare = @Particolare)
)
, '')

-- cerco descrizione Impianto
SET @DescImpianto = ISNULL(
(
	SELECT 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, CodEvento)
	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, @CodEvento)

	-- 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
	
	-- cerco in TabTranPosizEventi record x calcolare cella
	DECLARE @IdxBloccoTo INT
	SET @IdxBloccoTo = 0

	/* da testare...*/
	SET @IdxBloccoTo =	(
						SELECT ISNULL(
							(
							SELECT	IdxBloccoTo
							FROM	TabTranPosizEventi
							WHERE	CodEvento = @CodEvento
							AND		IdxPosizione = 0
							AND		IdxPosizioneTo = @IdxPosizione
							AND		CodStatoTo	= @CodStato
							), 0)
						)
	-- se non lo trovo cerco con CodStatoTo null...
	IF(@IdxBloccoTo = 0)
	BEGIN
		SET @IdxBloccoTo =	(
							SELECT ISNULL(
								(
								SELECT	IdxBloccoTo
								FROM	TabTranPosizEventi
								WHERE	CodEvento = @CodEvento
								AND		IdxPosizione = 0
								AND		IdxPosizioneTo = @IdxPosizione
								), 0)
						)
	END
	/* fine test */

	-- se NON HO trovato una conf x @IdxBloccoTo utilizzo questo valore utilizzo modalità "vecchia"
	IF(@IdxBloccoTo = 0)
		BEGIN
			-- 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))
							)
		END
	ELSE
		BEGIN
			-- calcolo la prima cella della posizione indicata..
			SET @IdxCella = (
							SELECT TOP 1 c.IdxCella 
								FROM Celle c 
								WHERE c.IdxBlocco = @IdxBloccoTo
							)
		END

	-- inserisco il cartellino nella prima cella della posizione indicata..
	INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto)
	VALUES(@Udc, @IdxCella, @CodCs, GETDATE(), @CodSoggetto)
------------------------------------------------------------------------------------------------------

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

RETURN


