-- svuoto tab x procedere...
delete from AS400_BatchMovimenti
GO



set xact_abort on
go

begin transaction
go

alter table AS400_BatchMovimenti drop
  constraint FK_AS400_BatchMovimenti_AS400_MagCont ,
  constraint FK_AS400_BatchMovimenti_AnagTipoEvento 
go

exec sp_rename 'PK_AS400_BatchMovimenti', 'tmp__PK_AS400_BatchMovimenti', 'OBJECT'
go

exec sp_rename 'AS400_BatchMovimenti', 'tmp__AS400_BatchMovimenti_1', 'OBJECT'
go

create table AS400_BatchMovimenti(
  DataIns      datetime      not null,
  CodEvento    nvarchar(10)  not null,
  Particolare  nvarchar(15)  not null,
  UDC          nvarchar(50)  not null,
  CodMagAS     nvarchar(50)  not null,
  Quantita     decimal(10,2) not null,
  DataBatch    datetime,
  DataVerifica datetime,

  constraint PK_AS400_BatchMovimenti primary key(DataIns,CodEvento,Particolare,UDC,CodMagAS)
)
go

alter table AS400_BatchMovimenti add
  constraint FK_AS400_BatchMovimenti_AnagTipoEvento foreign key(CodEvento) references AnagTipoEvento(CodEvento) on update cascade,
  constraint FK_AS400_BatchMovimenti_AS400_MagCont foreign key(CodMagAS) references AS400_MagCont(CodMagAS) on update cascade
go

exec sp_addextendedproperty 'MS_Description', 'dataora inserimento in coda caricamento', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'DataIns'
go

exec sp_addextendedproperty 'MS_Description', 'NON MODIFICARE: nel codice si usano questi campi x chiamate...', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'CodEvento'
go

exec sp_addextendedproperty 'MS_Description', 'dataora di caricamento batch verso AS', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'DataBatch'
go

exec sp_addextendedproperty 'MS_Description', N'dataora in cui è stato verificato il caricamento su AS', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'DataVerifica'
go

insert into AS400_BatchMovimenti(DataIns,CodEvento,Particolare,UDC,CodMagAS,Quantita,DataBatch,DataVerifica) select DataIns,CodEvento,Particolare,N'',CodMagAS,Quantita,DataBatch,DataVerifica from tmp__AS400_BatchMovimenti_1
go

drop table tmp__AS400_BatchMovimenti_1
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20
-- Description:	trigger x inserimento movimenti
--				nella coda di trasferimento batch
--				verso AS400 x UPDATE UDC
-- =============================================
alter TRIGGER trg_updMovAS 
   ON ElencoCartellini
   AFTER UPDATE
AS 
BEGIN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	DECLARE @partOk AS BIT
	DECLARE @IdxPosFrom AS INT
	DECLARE @IdxPosTo AS INT
	DECLARE @magFrom AS NVARCHAR(50)
	DECLARE @magTo AS NVARCHAR(50)
	DECLARE @qta AS DECIMAL(10,2)
	
	-- controllo che CI SIA il particolare (altrimenti non eseguo)
	SET @partOk = (SELECT CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END FROM deleted)
	
	IF(@partOk = 1)
		SET @qta = (SELECT Qta FROM inserted)
		-- se c'è stata modifica di quantità inizio a rettificare quella
		IF UPDATE(Qta)
		BEGIN
			INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
				(
					SELECT	GETDATE(), 'UDC_MOD', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), @qta-Qta
					FROM	deleted
					WHERE	CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
				)
		END
	
		-- controllo poi se sia cambiato il magazzino, altrimenti non lo inserisco
		IF UPDATE(IdxPosizione)
		BEGIN
			-- Prendo le posizioni di magazzino precedente e nuova 
			SET @IdxPosFrom = (SELECT IdxPosizione FROM deleted)
			SET @IdxPosTo	= (SELECT IdxPosizione FROM inserted)
			-- Le trasformo nelle equivalenti stringhe del codMag SE attive
			SET @magFrom	= (SELECT ISNULL(CodMagAS,'---') FROM AS400_MagCont WHERE Attivo = 1 AND CodMagAs = CAST(@IdxPosFrom AS NVARCHAR(50)))
			SET @magTo		= (SELECT ISNULL(CodMagAS,'---') FROM AS400_MagCont WHERE Attivo = 1 AND CodMagAs = CAST(@IdxPosTo AS NVARCHAR(50)))
			
			-- inserisco un movimento di deposito verso mag nuovo (SE attivo)
			IF (@magFrom <> '---')
				BEGIN
					INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
					(
						SELECT	GETDATE(), 'UDC_MOV', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), -@qta
						FROM	deleted
						WHERE	CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
					)
				END
			-- inserisco un movimento di prelievo verso mag vecchio (SE attivo)
			IF (@magTo <> '---')
				BEGIN
					INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
					(
						SELECT	GETDATE(), 'UDC_MOV', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), @qta
						FROM	inserted
						WHERE	CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
					)
				END
		END

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20
-- Description:	trigger x inserimento movimenti
--				nella coda di trasferimento batch
--				verso AS400 x INSERT UDC
-- =============================================
alter TRIGGER trg_InsMovAS 
   ON ElencoCartellini
   AFTER INSERT
AS 
BEGIN
	
	-- setup variabili e verbosità
	SET NOCOUNT ON;
	DECLARE @partOk AS BIT
	
	-- controllo che CI SIA il particoalre (altrimenti non eseguo)
	SET @partOk = (SELECT CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END FROM inserted)
	
	IF(@partOk = 1)
		BEGIN
			-- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO
			INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
			(
				SELECT	GETDATE(), 'UDC_NEW', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), Qta
				FROM	inserted
				WHERE	CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
			)
		END

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20
-- Description:	trigger x inserimento movimenti
--				nella coda di trasferimento batch
--				verso AS400 x DELETE UDC
-- =============================================
alter TRIGGER trg_DelMovAS 
   ON ElencoCartellini
   AFTER DELETE
AS 
BEGIN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco movimenti AS
	INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
	(
		SELECT	GETDATE(), 'UDC_DEL', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), -Qta
		FROM	deleted
		WHERE	CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1) AND ((CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END) = 1)
	)

END
go

commit
go

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_batch_RapQual_S01
*
* Esegue lo step 1 (caricamento dati RAW da AS400) per la tab dei rapporti di qualità
*
* Steamware, S.E.L.
* mod: 2010.09.23
*
****************************************/
alter PROCEDURE BatchQueue.stp_batch_RapQual_S01
(
	@minData DATETIME
)
AS
	-- BOZZA DA COMPLETARE A CURA MAZZUCCONI!!!

	DECLARE @SQL AS NVARCHAR(1000)
	DECLARE @dataAs400 AS VARCHAR(8)
	
	SET @dataAs400 = (SELECT dbo.dateToAsFormat(@minData))

	-- svuoto tab raw attuale
	/*
	DELETE FROM RawData.XOGIX00F
	*/


	-- INSERISCO DA AS400
	/*
	INSERT INTO RawData.XOGIX00F 
	(
		SET @SQL = 
		N'SELECT 
				XRPQLN
			   ,XRPQLD
			   ,XNRETI
			   ,XCDFOR
			   ,XCDTER
			   ,XCDPAR
			   ,XDTPRO
			   ,XTRPRO
			   ,XQTPRO
			   ,XDESMT
			   ,XMATSC
			   ,XBENQL
		FROM OPENQUERY( P65220DC,  ''SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLD >= '
		SET @SQL = @SQL + @dataAs400 + ''' )'

		EXEC dbo.sp_executesql @SQL
	)
	*/

RETURN
go

commit
go



set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_rappQualSuntoGetByDataRange
*
* Ottiene l'elenco dei record di rapp qualità di AS dato il range delle date
*
* Steamware, S.E.L.
* mod: 2010.09.29
*
****************************************/
create PROCEDURE stp_rappQualSuntoGetByDataRange
(
	@dataFrom DATETIME,
	@dataTo DATETIME
)
AS
	-- restituisce le righe richieste
	SELECT			*
		FROM        v_RapQualSunto
		WHERE		(DataRapQual > dbo.dateToAsFormat(@dataFrom)) AND (DataRapQual < dbo.dateToAsFormat(@dataTo))
		ORDER BY nRapQual
RETURN
go

/***************************************
* STORED stp_rappQualSuntoGetByNumRap
*
* Ottiene il record di rapp qualità di AS dato il numero del rapporto di qualità
*
* Steamware, S.E.L.
* mod: 2010.09.29
*
****************************************/
create PROCEDURE stp_rappQualSuntoGetByNumRap
(
	@nRapQual NVARCHAR(20)
)
AS
	-- restituisce le righe richieste
	SELECT			*
		FROM        v_RapQualSunto
		WHERE	(nRapQual = @nRapQual)
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
)
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
	
	-- 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










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