
set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

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

commit;
go



set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*****************************************
* STORED stp_DtMtrx_import
*
* Recupera dati Gitterbox/DataMatrix partendo leggendo dati successivi all'ultimo import e importanto in tab GMW
*
* Steamware, S.E.L.
* mod: 2011.04.29
*
****************************************/
alter PROCEDURE stp_DtMtrx_import
(
	@CodCS VARCHAR(2),
	@IdxPosizione INT,
	@CodSoggetto VARCHAR(17)
)
AS

SET XACT_ABORT ON;
SET NOCOUNT ON;
/****   NON PRESENTE IN TEKAL 
------------------------------------------------------------------------------------------------------
-- leggo data ultimo import (o creo record...)
------------------------------------------------------------------------------------------------------
DECLARE		@nomeFlusso AS NVARCHAR(50)
DECLARE		@lastImport AS DATETIME
DECLARE		@trovati AS INT

-- imposto valori
SET		@nomeFlusso = 'DataMatrix'
SET		@lastImport = DATEADD(yy,-10,GETDATE()) -- inizializzo a -10 anni ...
-- sistemo tab registrazione import...
BEGIN TRAN
	-- cerco nella tab log ultima data caricamento
	SET @trovati = (
		SELECT	COUNT(*)
		FROM	logImportFlussi
		WHERE	NomeFlusso = @nomeFlusso
	)
	-- controllo se record c'è...
	IF(@trovati > 0)
		BEGIN
			SET	@lastImport = ( SELECT LastImport FROM LogImportFlussi WHERE	NomeFlusso	= @nomeFlusso )
		END
	ELSE
		BEGIN
			-- lo creo!
			INSERT INTO LogImportFlussi(NomeFlusso, LastImport)
			VALUES (@nomeFlusso, @lastImport)
		END		
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- ora gestisco il vero caricamento...
------------------------------------------------------------------------------------------------------
	-- filtro e salvo in tabella... gitterbox validi SOLO se iniziano per "U"
	-- verifico già se esite già l'UDC/Gitterbox in ElencoCartellini
	DECLARE @newData TABLE
	(
		RowNumber int,
		CodDataMatrix numeric(23, 0) ,
		CodGitterbox varchar(10) ,
		NumConchiglia int ,
		NumDisegno numeric(7, 0) ,
		EsponenteDisegno tinyint ,
		CodDifettoScarto varchar(5) ,
		InizioPreparazione smalldatetime ,
		FinePreparazione smalldatetime ,
		InizioIniezione smalldatetime ,
		FineIniezione smalldatetime ,
		MagDestinazione varchar(2) ,
		DataImport smalldatetime ,
		UDC varchar(50)
	)
    INSERT INTO @newData	
    SELECT 
           ROW_NUMBER() OVER(PARTITION BY CodGitterbox ORDER BY InizioIniezione ASC),
           dm.CodDataMatrix, LTRIM(RTRIM(dm.CodGitterbox)), dm.NumConchiglia, dm.NumDisegno, dm.EsponenteDisegno,dm.CodDifettoScarto, dm.InizioPreparazione, dm.FinePreparazione, dm.InizioIniezione, dm.FineIniezione, dm.MagDestinazione, dm.DataImport,
           ec.UDC
    FROM dbo.v_trasfDataMatrix AS dm
    LEFT JOIN dbo.ElencoCartellini AS ec 
	 ON dm.CodGitterbox = ec.UDC
	WHERE DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U'
	AND CodDifettoScarto = '00' -- non importa gli scarti!!!
		
	/* INIZIO MODIFICA  

		   Note GCarlo : 
		   
           Se il Gitterbox è già stato trasferito e/o cmq già presente non viene caricato, al 
           limite vengono caricati i Datamatrix non ancora presenti ma con Gitterbox = EmptyGBox

		   Se non trovo il Particolare in dbo.v_transcParticolari i datamatrix non vengono importati
		   Posso reimportarli spostando la data di import indietro in LogImportFlussi
		   
		   ATTENZIONE! Si presuppone che i DataMatrix siano coerenti ovvero stesso Particolare ecc. ecc.
    */
    BEGIN TRAN;
        
		-- creo UDC da gitterbox nuovi ( Se UDC già presenti non li carico )
        -- GCARLO messo un RowCount prima e prendo solo il primo DataMatrix
	    INSERT INTO ElencoCartellini(UDC,CodCS, Particolare, DescParticolare, DisegnoGrezzo, Esponente, DataFus, Qta, 
	                CodSoggetto, CodStato, IdxPosizione,CreateDate, ModDate, Figura, CodImballo, Tara, PesoTot, PesoCad, NumCont, TurnoFus )
		SELECT DISTINCT  nd.CodGitterbox, @CodCS, tp.Particolare, an.DescParticolare, an.DisegnoGrezzo, an.EsponenteModifica 
		                ,InizioIniezione, dbo.getNumDatamatrix(nd.CodGitterbox), @CodSoggetto As CodSoggetto, 'Fin' AS CodStato
		                ,@IdxPosizione, GETDATE(), GETDATE()
		                ,'' AS Figura, '' AS CodImballo,0 AS Tara,0 AS PesoTot,0 AS PesoCad,1 AS NumCont,0 AS TurnoFus
		FROM @newData nd
		INNER JOIN dbo.v_transcParticolari tp           -- solo se PArticolare è presente in Trascodifica
		    ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno
		LEFT JOIN RilPro.AnagParticolari an             -- Leggo il disegno in anagrafica
		    ON tp.Particolare = an.Particolare
		WHERE nd.RowNumber = 1                          -- Prendo solo i dati del First DataMatrix ( data iniezione )
		  AND nd.UDC IS NULL                            -- solo Gitterbox Nuovi

        
		DECLARE @udc NVARCHAR(50)
		DECLARE @Particolare NVARCHAR(50)
		DECLARE @NumDisegno NVARCHAR(50)
		DECLARE @EsponenteDisegno NVARCHAR(50)
		DECLARE @IdxCellaTo INT
		DECLARE @adesso DATETIME
		DECLARE @posTrovate INT
		
		SET		@adesso = GETDATE()
		SET		@posTrovate = 0

        -- indico cella UDC corrente... calcolo la prima cella della nuova posizione...
		SET		@IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) )
		
		DECLARE cursoreImport CURSOR FOR
		SELECT DISTINCT CodGitterbox
		FROM @newData
		WHERE UDC IS NULL                            -- solo x Gitterbox Nuovi
		
		OPEN cursoreImport
		FETCH NEXT FROM cursoreImport INTO @udc

		WHILE @@FETCH_STATUS = 0
		BEGIN
		
			-- controllo se posizione non ancora creata...
			SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc )
			IF( @posTrovate = 0)
			BEGIN
				INSERT INTO PosizioneUdcCorrente
				VALUES (@udc, @IdxCellaTo, @CodCS, @adesso)
			END
			
			FETCH NEXT FROM cursoreImport INTO @udc
		END

		CLOSE cursoreImport
		DEALLOCATE cursoreImport

	    -- CARICAMENTO DATAMATRIX -- 
		
		-- Carico i datamatrix se UDC/Gitterbox nuovi
		INSERT INTO dbo.ElencoDataMatrix
        SELECT  nw.CodDataMatrix
               ,nw.CodGitterbox
               ,nw.NumConchiglia
               ,nw.NumDisegno
               ,nw.EsponenteDisegno
               ,nw.CodDifettoScarto
               ,nw.InizioPreparazione
               ,nw.FinePreparazione
               ,nw.InizioIniezione
               ,nw.FineIniezione
               ,nw.MagDestinazione
               ,nw.DataImport
        FROM @newData AS nw
        LEFT JOIN dbo.ElencoDataMatrix AS el
          ON nw.CodDataMatrix = el.CodDataMatrix
        WHERE el.CodDataMatrix IS NULL              -- Nuovi Datamatrix 
              AND nw.UDC IS NULL                    -- Solo per Gitterbox nuovi

        -- Se esistono Datamatrix di UDC già caricati in precedenza li inserisco ma senza 
        -- assegnare l'UDC ma lo metto a EmptyGBox perchè potrebbero essere UDC già spediti o
        -- movimentati e dovrei anche aggiornare la giacenza in ElencoCartellini
        INSERT INTO dbo.ElencoDataMatrix
        SELECT  nw.CodDataMatrix
               ,'EmptyGBox' AS CodGitterbox
               ,nw.NumConchiglia
               ,nw.NumDisegno
               ,nw.EsponenteDisegno
               ,nw.CodDifettoScarto
               ,nw.InizioPreparazione
               ,nw.FinePreparazione
               ,nw.InizioIniezione
               ,nw.FineIniezione
               ,nw.MagDestinazione
               ,nw.DataImport
        FROM @newData AS nw
        LEFT JOIN dbo.ElencoDataMatrix AS el
          ON nw.CodDataMatrix = el.CodDataMatrix
        WHERE el.CodDataMatrix IS NULL
          AND nw.UDC IS NOT NULL

	    -- aggiorno dati ultimo caricamento
	    SET		@lastImport = ( SELECT ISNULL(MAX(DataImport),@lastImport) FROM @newData )
	    UPDATE	LogImportFlussi
	    SET		LastImport = @lastImport
	    WHERE	NomeFlusso = @nomeFlusso
   COMMIT TRAN;
*/
RETURN
go

commit;
go

set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*****************************************
* STORED stp_EDM_spostaDataMtx
*
* Sposta un datamatrix in un nuovo gitterbox
*
* Steamware, S.E.L.
* mod: 2011.05.05
*
****************************************/
alter PROCEDURE stp_EDM_spostaDataMtx
(
	@CodDataMatrix NUMERIC(23),
	@CodGitterbox NVARCHAR(10),
	@CodSoggetto VARCHAR(17)
)
AS

-- salvo codice gitterbox di partenza
DECLARE @CodGitterboxFrom AS NVARCHAR(10)
SET		@CodGitterboxFrom = ( SELECT CodGitterbox FROM ElencoDataMatrix WHERE CodDataMatrix = @CodDataMatrix ) 

UPDATE	ElencoDataMatrix
SET		CodGitterbox = @CodGitterbox
WHERE	CodDataMatrix = @CodDataMatrix

-- aggiorno valori QTA gitterbox di partenza...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterboxFrom )
WHERE	UDC = @CodGitterboxFrom
-- aggiorno valoti QTA gitterbox destinazione e modificatore...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox ), CodSoggetto = @CodSoggetto, ModDate = GETDATE()
WHERE	UDC = @CodGitterbox

-- aggiorno righe liste di prelievo...
UPDATE	RigheListePrelievo
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterboxFrom )
WHERE	UDC = @CodGitterboxFrom
-- aggiorno valoti QTA gitterbox destinazione...
UPDATE	RigheListePrelievo
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox

-- select finale!
SELECT	*
FROM	ElencoDataMatrix
WHERE	CodDataMatrix = @CodDataMatrix

RETURN
go

commit;
go

set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*****************************************
* STORED stp_EDM_svuotaGitterbox
*
* Elimina il codice gitterbox dai datamatrix associati (svuotandolo...)
*
* Steamware, S.E.L.
* mod: 2011.05.06
*
****************************************/
alter PROCEDURE stp_EDM_svuotaGitterbox
(
	@CodGitterbox NVARCHAR(10),
	@CodSoggetto VARCHAR(17)
)
AS

UPDATE	ElencoDataMatrix
SET		CodGitterbox = 'EmptyGBox'
WHERE	CodGitterbox = @CodGitterbox

-- aggiorno valoti QTA gitterbox originale...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox
-- aggiorno valoti QTA gitterbox 'EmptyGBox
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = 'EmptyGBox' ), CodSoggetto = @CodSoggetto, ModDate = GETDATE()
WHERE	UDC = 'EmptyGBox'

-- aggiorno righe liste di prelievo...
UPDATE	RigheListePrelievo
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox



RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_prtCartAnimeByUDC
*
* ottiene il record del Cartellino ANIME dato l'UDC richiesto x la stampa
*
* Steamware, G.A.R.
* mod: 2012.02.27
*
****************************************/
alter PROCEDURE stp_prtCartAnimeByUDC
(
	@UDC NVARCHAR(50)
)
AS

    -- estraggo i trattamenti nelle note ( x max 10 trattamenti )
    -- NON SERVE PER I CARTELLINI ANIME MA TENGO DATASET IDENTICO
	DECLARE @tmp		NVARCHAR(500)
	DECLARE @NoteTratt	NVARCHAR(500)
	SET @NoteTratt = ''

	-- SET @NoteTratt = (SELECT SUBSTRING(@tmp, 0, LEN(@tmp)))

	-- ora seleziono i dati veri e propri
	SELECT
		ElencoCartellini.UDC, ElencoCartellini.CodCS, ISNULL(ElencoCartellini.CodCliente, N'') AS codcliente, 
		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.CodImpianto, N'') AS CodImpianto,
		ISNULL(ElencoCartellini.DescImpianto, N'') AS DescImpianto, ISNULL(ElencoCartellini.CodStampo, N'') AS codstampo, 
		ISNULL(ElencoCartellini.Figura, N'') AS figura, ISNULL(ElencoCartellini.DataFus, N'') AS datafus,
		ISNULL(ElencoCartellini.TurnoFus, N'') AS turnofus, ISNULL(ElencoCartellini.CodImballo, N'') AS CodImballo, 
		ISNULL(ElencoCartellini.CodSoggetto, N'') AS CodSoggetto, ISNULL(ElencoCartellini.NumCont, N'') AS NumCont,
		ISNULL(ElencoCartellini.Tara, N'') AS tara, ISNULL(ElencoCartellini.Qta, N'') AS qta, ISNULL(ElencoCartellini.CodStato, N'') AS CodStato, 
		ISNULL(ElencoCartellini.IdxPosizione, N'') AS IdxPosizione,
		ISNULL(ElencoCartellini.PesoTot, N'') AS PesoTot, ISNULL(ElencoCartellini.PesoCad, N'') AS PesoCad, ElencoCartellini.CreateDate, 
		ElencoCartellini.ModDate, ISNULL(RilPro.AnagOperatori.Cognome, N'') AS cognome,
		ISNULL(RilPro.AnagOperatori.Nome, N'') AS nome, ISNULL(AnagStatiProdotto.DescStato, N'') AS DescStato, 
		ISNULL(RilPro.AnagImballi.DescImballo, N'') AS DescImballo, RilPro.AnagParticolari.CodFamiglia, RilPro.AnagFamiglie.DescFamiglia,
		ISNULL(ElencoCartellini.Note, N'') AS Note, @NoteTratt AS NoteTratt
	FROM
		RilPro.AnagParticolari 
	LEFT OUTER JOIN
		RilPro.AnagFamiglie 
	ON
		RilPro.AnagParticolari.CodFamiglia = RilPro.AnagFamiglie.CodFamiglia 
	RIGHT OUTER JOIN
		ElencoCartellini 
	ON
		RilPro.AnagParticolari.Particolare = ElencoCartellini.Particolare 
	LEFT OUTER JOIN
		AnagStatiProdotto 
	ON
		ElencoCartellini.CodStato = AnagStatiProdotto.CodStato 
	LEFT OUTER JOIN
		RilPro.AnagOperatori 
	ON
		ElencoCartellini.CodSoggetto = RilPro.AnagOperatori.CodSoggetto 
	LEFT OUTER JOIN
		RilPro.AnagImballi 
	ON
		ElencoCartellini.CodImballo = RilPro.AnagImballi.CodImballo 
	WHERE
		(ElencoCartellini.UDC = @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

commit;
go

set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_rappQualGetByUDC
*
* Ottiene l'elenco dei record di rapp qualità di AS dato UDC
*
* Steamware, S.E.L.
* mod: 2011.03.30
*
****************************************/
alter PROCEDURE stp_rappQualGetByUDC
(
	@UDC NVARCHAR(50)
)
AS
	-- restituisce le righe richieste
	SELECT	* 
	FROM	RilPro.RapQual 
	WHERE	(UDC = @UDC)
		
RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

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

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

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

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
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

-- Batch submitted through debugger: GMW_00401.sql|679|0|C:\Progetti\GMW\2011-12-14 vers test 401\Vers 401\GMW_00401.sql

/***************************************
* 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),
	@IdxPosizione INT
)
AS

BEGIN TRAN
	-- libero la posizione attuale dell'UDC (se c'è...)
	DELETE
	FROM	PosizioneUdcCorrente
	WHERE	UDC = @UDC
	
	-- aggiorno l'UDC come posizione finale...
	UPDATE	ElencoCartellini
	SET		IdxPosizione = @IdxPosizione, ModDate = GETDATE()
	WHERE	UDC = @UDC	
	
COMMIT TRAN

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_spostaUdc
*
* sposta un UDC, salvandone la posizione precedente (se esiste) nella tab storica
*
* Steamware, S.E.L.
* mod: 2010.06.11
*
****************************************/
alter PROCEDURE stp_spostaUdc
(
	@CodCS VARCHAR(2),
	@UDC VARCHAR(50),
	@IdxCellaTo INT,
	@resetRLP BIT
)
AS

BEGIN TRAN
	
	-- DICHIARAZIONI iniziali variabili
	DECLARE @IdxCellaFrom INT
	DECLARE @capienza INT
	DECLARE @numUdc INT
	
	-- controllo cella di partenza
	SET		@IdxCellaFrom = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC)
	-- controllo se la cella di dest vada indicata come piena
	SET		@capienza = (
							SELECT tc.Capienza 
								FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella
								WHERE c.IdxCella = @IdxCellaFrom	
						)
	SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaFrom)
	-- se capienza raggiunta aggiorno...
	IF(@numUdc -1 < @capienza)
		BEGIN
			EXEC stp_celle_updPiena @IdxCellaFrom, 0
		END
		
	-- cancello posizione occupata
	DELETE
	FROM	PosizioneUdcCorrente
	WHERE	UDC = @UDC
	
	-- SE RICHIESTO cancello eventuali righe liste di prelievo FUSI per l'UDC
	IF(@resetRLP = 1)
	BEGIN
		DELETE FROM RigheListePrelievo
			WHERE UDC = @UDC AND CodLista IN ( 
				SELECT CodLista FROM ElencoListePrelievo 
				--WHERE CodTipoLista='01-PreFus'
				WHERE CodStatoLista < 4
			)
	END

	
	
	-- creo una nuova posizione per l'UDC
	INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif)
	VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE())
	
	-- controllo se la cella di dest vada indicata come piena
	SET		@capienza = (
							SELECT tc.Capienza 
								FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella
								WHERE c.IdxCella = @IdxCellaTo	
						)
	SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaTo)
	-- se capienza raggiunta aggiorno...
	IF(@numUdc >= @capienza)
		BEGIN
			EXEC stp_celle_updPiena @IdxCellaTo, 1
		END
	
COMMIT TRAN

RETURN
go

commit;
go

set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
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


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_elencoPostaziont_getByCod
*
* ottiene il una postazione dato il codice
*
* Steamware, S.E.L.
* mod: 2010.11.17
*
****************************************/
create PROCEDURE stp_elencoPostaziont_getByCod
(
	@codPostazione NVARCHAR(250)
)
AS

SELECT      *
FROM        ElencoPostazioni
WHERE       codPostazione = @codPostazione

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*****************************************
* STORED stp_RQN_getByRQ
*
* Recupera dati Rapporto Qualità + note da cod rapporto qualità
*
* Steamware, S.E.L.
* mod: 2012.02.14
*
****************************************/
create PROCEDURE stp_RQN_getByRQ
(
	@nRapQual NUMERIC(6,0)
)
AS

SELECT	nRapQual, DataRapQual, ProgUDC, CodFor, DestTerz, CodLega, DataPrelFus, TurnoPrelFus, Qta, DestLega, LegaScaric, BenesQual, UDC, Note
FROM    v_RapQualNote
WHERE   (nRapQual = @nRapQual)

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

-- Batch submitted through debugger: GMW_00401.sql|723|0|C:\Progetti\GMW\2011-12-14 vers test 401\Vers 401\GMW_00401.sql

/***************************************
* STORED stp_UDC_associaParent
*
* crea un nuovo record nella di associazione UDC/parent
*
* Steamware, S.E.L.
* mod: 2011.12.06
*
****************************************/
create PROCEDURE stp_UDC_associaParent
(
	@UDC NVARCHAR(50),
	@UDC_parent NVARCHAR(50)
)
AS

	-- elimino partent vuoti...
	DELETE 
	FROM RelazUDC
	WHERE ISNULL(UDC_parent,'') = ''
	-- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa)
	INSERT INTO RelazUDC(UDC_parent, UDC_child)
	VALUES (@UDC_parent, @UDC)

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_UDC_getLast_ByParticolare
*
* elenco cartellini ULTIMO creati x particolare
*
* Steamware, S.E.L.
* mod: 2011.11.14
*
****************************************/
create PROCEDURE stp_UDC_getLast_ByParticolare
(
	@CodCS VARCHAR(2),
	@Particolare VARCHAR(15)
)
AS

	-- prendo ultimo UDC creato x il particolare
	SELECT		TOP 1 * FROM ElencoCartellini 
	WHERE		(Particolare= @Particolare) AND CodCS = @CodCS
	ORDER BY	CreateDate DESC

RETURN
go

commit;
go


set ANSI_NULLS on;
go

/***************************************
* FUNCTION f_padLeft
*
* fornisce una stringa della lunghezza desiderata aggiungendo a sx il carattere richiesto alla @string originale
*
* Steamware, S.E.L.
* mod: 2010.03.19
*
****************************************/
create FUNCTION f_padRight (@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1))
RETURNS VARCHAR(255) AS  
BEGIN

 -- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character
 RETURN CASE
          WHEN LEN(@string) < @desired_length
            THEN @string + REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character)
          ELSE @string
        END

END
go




