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_0', 'OBJECT'
go

create table AS400_BatchMovimenti(
  IdxBatch     int           not null identity constraint PK_AS400_BatchMovimenti primary key,
  DataIns      datetime      not null,
  numOp        int,
  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
)
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

set identity_insert AS400_BatchMovimenti on
go

insert into AS400_BatchMovimenti(IdxBatch,DataIns,CodEvento,Particolare,UDC,CodMagAS,Quantita,DataBatch,DataVerifica) select IdxBatch,DataIns,CodEvento,Particolare,UDC,CodMagAS,Quantita,DataBatch,DataVerifica from tmp__AS400_BatchMovimenti_0
go

set identity_insert AS400_BatchMovimenti off
go

drop table tmp__AS400_BatchMovimenti_0
go

commit
go


set xact_abort on
go

begin transaction
go

create table GiornaleMagazzino(
  numOp            int           not null identity constraint PK_GiornaleMagazzino primary key,
  OP               nchar(1)      not null,
  DataOra          datetime      not null,
  UDC              nvarchar(50)  not null,
  Particolare      nvarchar(15)  not null,
  CodStatoFrom     nvarchar(50)  not null,
  CodStatoTo       nvarchar(50)  not null,
  IdxPosizioneFrom int           not null,
  IdxPosizioneTo   int           not null,
  QtaFrom          decimal(10,2) not null,
  QtaTo            decimal(10,2) not null,
  DataOraProc      datetime
)
go

exec sp_addextendedproperty 'MS_Description', 'tipo operazione I(nsert), U(pdate), D(elete)', 'SCHEMA', 'dbo', 'TABLE', 'GiornaleMagazzino', 'COLUMN', 'OP'
go

commit
go


alter table AS400_MagCont drop
  column Attivo,
  constraint DF_AS400_MagCont_CodMagAS_compensaz ,
  column CodMagAS_compensaz
go


set xact_abort on
go

begin transaction
go

create table TabSyncMovMag(
  CodCS            nchar(2)      not null,
  CodStatoFrom     nvarchar(50)  not null,
  CodStatoTo       nvarchar(50)  not null,
  IdxPosizioneFrom int           not null,
  IdxPosizioneTo   int           not null,
  toExt            bit           not null constraint DF_TabSyncMovMag_toAs400 default (1),
  codMagExtFrom    nvarchar(50),
  codMagExtTo      nvarchar(50),
  codMagExtComp    nvarchar(50),
  note             nvarchar(500),

  constraint PK_TabSyncMovMag primary key(CodCS,CodStatoFrom,CodStatoTo,IdxPosizioneFrom,IdxPosizioneTo)
)
go

exec sp_addextendedproperty 'MS_Description', 'posizione (stato) logica di partenza', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'IdxPosizioneFrom'
go

exec sp_addextendedproperty 'MS_Description', 'posizione (stato) logica di arrivo', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'IdxPosizioneTo'
go

exec sp_addextendedproperty 'MS_Description', 'determina se inviare l''informazione al sistema esterno', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'toExt'
go

exec sp_addextendedproperty 'MS_Description', 'cod magazzino from, NULL significa non valido e non utilizzato', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'codMagExtFrom'
go

exec sp_addextendedproperty 'MS_Description', 'cod magazzino from, NULL significa non valido e non utilizzato', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'codMagExtTo'
go

exec sp_addextendedproperty 'MS_Description', 'cod magazzino from, 0 o null significa non valido', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'codMagExtComp'
go

exec sp_addextendedproperty 'MS_Description', 'descrizione della regola', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'note'
go

commit
go


set xact_abort on
go

begin transaction
go

alter table TabTranPosizEventi add
  CodStatoTo nvarchar(50),
  Note nvarchar(500)
go

exec sp_addextendedproperty 'MS_Description', 'descrizione della regola', 'SCHEMA', 'dbo', 'TABLE', 'TabTranPosizEventi', 'COLUMN', 'Note'
go

alter table TabTranPosizEventi drop
  constraint DF_TabTranPosizEventi_toAs400 ,
  column toAs400
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
-- Mod Date:	2012-05-25
-- Description:	trigger x movimenti di inserimento
--				nella tab GiornaleMagazzino
-- =============================================
alter TRIGGER trg_InsMovAS 
   ON ElencoCartellini
   AFTER INSERT
AS 
BEGIN
	
	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- metto in Giornale Magazzino i record inseriti
	INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
	(
		SELECT	'I', GETDATE(), UDC, ISNULL(Particolare,''), 'NEW', CodStato, 0, IdxPosizione, 0, Qta
		FROM	inserted
	)

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20  
-- Mod Date:	2012-05-25
-- Description:	trigger x movimenti di cancellazione
--				nella tab GiornaleMagazzino
-- =============================================
alter TRIGGER trg_DelMovAS 
   ON ElencoCartellini
   AFTER DELETE
AS 
BEGIN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco movimenti AS
	INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
	(
		SELECT	'D', GETDATE(), UDC, ISNULL(Particolare,''), CodStato, 'DEL', IdxPosizione, 0, Qta, 0
		FROM	deleted
	)

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20 mod. 2012-03-14
-- Description:	trigger x inserimento movimenti
--				nella tab GiornaleMagazzino
-- =============================================
alter TRIGGER trg_updMovAS
   ON ElencoCartellini
   AFTER UPDATE
AS
BEGIN


	/*******************************************************************************
	* Gestione UPDATE ElencoCartellini --> GiornaleMagazzino
	*
	* regola1: si fanno registrazioni solo se varia ALMENO UNO tra
	* - quantità
	* - IdxPosizione
	* - CodStato
	*
	* regola 2:
	* - Particolare deve essere valorizzato ALMENO a '' (blank)
	*
	* regola3: in caso di update SIA di quantità che di posizione/stato
	* - si genera UN PRIMO RECORD di modifica quantità a posizione e stato FISSI
	* - si genera UN SECONDO RECORD con variazione posizione/stato
	*
	*******************************************************************************/

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	DECLARE	@dataOra AS DATETIME
	SET		@dataOra = GETDATE()
	
	-- PRIMO STEP: quantità!
	IF( UPDATE(Qta) )
	BEGIN
	
		INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
		(
			SELECT	'U', @dataOra, i.UDC, ISNULL(d.Particolare,''), d.CodStato, d.CodStato, d.IdxPosizione, d.IdxPosizione, d.Qta, i.Qta
			FROM inserted AS i
			INNER JOIN deleted AS d ON i.UDC = d.UDC
			WHERE ( (i.Qta <> d.Qta) )
		)
	
	END
	
	-- ora controllo in caso di modifica di stato o posizione
	IF(UPDATE(CodStato) OR UPDATE(IdxPosizione))
	BEGIN
	
		INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
		(
			SELECT	'U', @dataOra, i.UDC, ISNULL(d.Particolare,''), d.CodStato, i.CodStato, d.IdxPosizione, i.IdxPosizione, i.Qta, i.Qta
			FROM inserted AS i
			INNER JOIN deleted AS d ON i.UDC = d.UDC
			WHERE ( ( i.IdxPosizione <> d.IdxPosizione) OR (i.CodStato <> d.CodStato) )
		)
	
	END
	
END
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_processaGiornaleMagazzino
*
* processa il giornale del magazzino, in modo da controlalre tutte le righe non processate (o eventualmente solo quelle nuove)
* e spostare nella coda di trasferimento con AS400 SOLO i movimenti che soddisfano i criteri specificati nella tabella
* "TabSyncMovMag" 
*
* Steamware, S.E.L.
* mod: 2012.05.25
*
****************************************/
create PROCEDURE BatchQueue.stp_processaGiornaleMagazzino
(
	@CodCS NCHAR(2),
	@lastInsDate DATETIME -- data-ora da cui cercare i record, se non viene passata è l'ultimo movimento registrato
)
AS

BEGIN TRAN

	/**********************************************************************************
	*
	* PROCEDURA in 4 step:
	* - STEP 1: registro rettifiche QUANTITA' in FROM
	* - STEP 2: registro prelievi da mag ext "from" (cambio mag)
	* - STEP 3: registro depositi a mag ext "to" (cambio mag)
	* - STEP 4: registro compensazioni: se from e to corrispondono e mag comp è NON NULLO metto in comp!
	**********************************************************************************/

	-- in primis: se è nulla la data calcolo l'ultim data di processing...
	IF ( @lastInsDate IS NULL )
	BEGIN
		SET	@lastInsDate = ( SELECT ISNULL(MAX(DataOra), '19000101') FROM GiornaleMagazzino WHERE NOT (DataOraProc IS NULL) )
	END
	
	-- ATTENZIONE!!! DEVE ESSERCI UN PARTICOLARE NON NULLO e != "n.d."
	
	-- ora prendo tutte le righe che mi interessano e cerco match sulla tab TabSyncMovMag e le inserisco in batch...
		
	-- STEP 1: rettifico quantità!
	INSERT INTO	AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita)
	SELECT	DataOra, numOp, 'UDC_MOD', gm.Particolare, gm.UDC, tsmm.codMagExtFrom , gm.QtaTo - gm.QtaFrom
	FROM	GiornaleMagazzino gm 
	INNER JOIN TabSyncMovMag tsmm ON 
			tsmm.CodCS = @CodCS AND
			gm.CodStatoFrom		= tsmm.CodStatoFrom AND
			gm.CodStatoTo		= tsmm.CodStatoTo AND
			gm.IdxPosizioneFrom	= tsmm.IdxPosizioneFrom AND
			gm.IdxPosizioneTo	= tsmm.IdxPosizioneTo
	WHERE	(gm.DataOra		>= @lastInsDate)	
	AND		(gm.DataOraProc	IS NULL)
	AND		(tsmm.toExt		= 1)
	AND		gm.Particolare <> '' -- particolare deve essere disponibile!!!!
	AND		(tsmm.codMagExtFrom = codMagExtTo)-- NON VARIA MAG ESTERNO...
	
	-- STEP 2: genero ora casi con 2 mag ext che cambiano: tolgo da FROM
	INSERT INTO	AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita)
	SELECT	DataOra, numOp, 'UDC_MOV', gm.Particolare, gm.UDC, tsmm.codMagExtFrom , - gm.QtaTo
	FROM	GiornaleMagazzino gm 
	INNER JOIN TabSyncMovMag tsmm ON 
			tsmm.CodCS = @CodCS AND
			gm.CodStatoFrom		= tsmm.CodStatoFrom AND
			gm.CodStatoTo		= tsmm.CodStatoTo AND
			gm.IdxPosizioneFrom	= tsmm.IdxPosizioneFrom AND
			gm.IdxPosizioneTo	= tsmm.IdxPosizioneTo
	WHERE	(gm.DataOra		>= @lastInsDate)	
	AND		(gm.DataOraProc	IS NULL)
	AND		(tsmm.toExt		= 1)
	AND		gm.Particolare <> '' -- particolare deve essere disponibile!!!!
	AND		(tsmm.codMagExtFrom <> codMagExtTo)-- VARIA MAG ESTERNO...
	AND		(tsmm.codMagExtFrom IS NOT NULL ) -- magazzino non nullo
	AND		(tsmm.codMagExtTo IS NOT NULL )  -- magazzino non nullo
	
	-- STEP 3: genero ora casi con 2 mag ext che cambiano: metto in TO
	INSERT INTO	AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita)
	SELECT	DataOra, numOp, 'UDC_MOV',  gm.Particolare, gm.UDC, tsmm.codMagExtTo  , gm.QtaTo
	FROM	GiornaleMagazzino gm INNER JOIN TabSyncMovMag tsmm ON 
			tsmm.CodCS = @CodCS AND
			gm.CodStatoFrom		= tsmm.CodStatoFrom AND
			gm.CodStatoTo		= tsmm.CodStatoTo AND
			gm.IdxPosizioneFrom	= tsmm.IdxPosizioneFrom AND
			gm.IdxPosizioneTo	= tsmm.IdxPosizioneTo
	WHERE	(gm.DataOra		>= @lastInsDate)	
	AND		(gm.DataOraProc	IS NULL)
	AND		(tsmm.toExt		= 1)
	AND		gm.Particolare <> '' -- particolare deve essere disponibile!!!!
	AND		(tsmm.codMagExtFrom <> codMagExtTo)-- VARIA MAG ESTERNO...
	AND		(tsmm.codMagExtFrom IS NOT NULL ) -- magazzino non nullo
	AND		(tsmm.codMagExtTo IS NOT NULL )  -- magazzino non nullo
	
	
	-- STEP 4: cerco prima casi con magazzini ext origine = destinazione e compensazioni
	INSERT INTO	AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita)
	SELECT	DataOra, numOp, 'UDC_COMP',  gm.Particolare, gm.UDC, tsmm.codMagExtComp, gm.QtaFrom - gm.QtaTo 
	FROM	GiornaleMagazzino gm 
	INNER JOIN TabSyncMovMag tsmm ON 
			tsmm.CodCS = @CodCS AND
			gm.CodStatoFrom		= tsmm.CodStatoFrom AND
			gm.CodStatoTo		= tsmm.CodStatoTo AND
			gm.IdxPosizioneFrom	= tsmm.IdxPosizioneFrom AND
			gm.IdxPosizioneTo	= tsmm.IdxPosizioneTo
	WHERE	(gm.DataOra		>= @lastInsDate)	
	AND		(gm.DataOraProc	IS NULL)
	AND		(tsmm.toExt		= 1)
	AND		gm.Particolare <> '' -- particolare deve essere disponibile!!!!
	AND		(tsmm.codMagExtComp IS NOT NULL) -- HO compensazioni!!!
	AND		(tsmm.codMagExtFrom = codMagExtTo)-- E NON VARIA MAG ESTERNO...
	
	-- ora aggiorno le stesse righe riportate indicando la data ora di processing...
	UPDATE	gm
	SET		DataOraProc = GETDATE()
	FROM	GiornaleMagazzino gm INNER JOIN AS400_BatchMovimenti abm ON 
			CAST(gm.numOp AS NVARCHAR(10)) = abm.CodEvento 
	WHERE	(gm.DataOra		>= @lastInsDate)	
	AND		(gm.DataOraProc	IS NULL)
	
COMMIT TRAN

RETURN
go

commit
go


drop procedure stp_rettMovAs400
go

set xact_abort on
go

begin transaction
go

alter table ElencoCartellini add
  CodEvento nvarchar(10)
go

commit
go


set xact_abort on
go

begin transaction
go

exec sp_rename 'PK_GiornaleMagazzino', 'tmp__PK_GiornaleMagazzino', 'OBJECT'
go

exec sp_rename 'GiornaleMagazzino', 'tmp__GiornaleMagazzino_1', 'OBJECT'
go

create table GiornaleMagazzino(
  numOp            int           not null identity constraint PK_GiornaleMagazzino primary key,
  OP               nchar(1)      not null,
  DataOra          datetime      not null,
  CodEvento        nvarchar(10),
  ModDate          datetime,
  UDC              nvarchar(50)  not null,
  Particolare      nvarchar(15)  not null,
  CodStatoFrom     nvarchar(50)  not null,
  CodStatoTo       nvarchar(50)  not null,
  IdxPosizioneFrom int           not null,
  IdxPosizioneTo   int           not null,
  QtaFrom          decimal(10,2) not null,
  QtaTo            decimal(10,2) not null,
  DataOraProc      datetime
)
go

exec sp_addextendedproperty 'MS_Description', 'tipo operazione I(nsert), U(pdate), D(elete)', 'SCHEMA', 'dbo', 'TABLE', 'GiornaleMagazzino', 'COLUMN', 'OP'
go

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

set identity_insert GiornaleMagazzino on
go

insert into GiornaleMagazzino(numOp,OP,DataOra,UDC,Particolare,CodStatoFrom,CodStatoTo,IdxPosizioneFrom,IdxPosizioneTo,QtaFrom,QtaTo,DataOraProc) select numOp,OP,DataOra,UDC,Particolare,CodStatoFrom,CodStatoTo,IdxPosizioneFrom,IdxPosizioneTo,QtaFrom,QtaTo,DataOraProc from tmp__GiornaleMagazzino_1
go

set identity_insert GiornaleMagazzino off
go

drop table tmp__GiornaleMagazzino_1
go

commit
go

set xact_abort on
go

begin transaction
go

exec sp_rename 'PK_StoricoEventi', 'tmp__PK_StoricoEventi', 'OBJECT'
go

exec sp_rename 'StoricoCartellini', 'tmp__StoricoCartellini_2', 'OBJECT'
go

create table StoricoCartellini(
  IdxEv           int           not null identity constraint PK_StoricoEventi primary key,
  DataEv          datetime      not null,
  CodEvento       nvarchar(10),
  ModDate         datetime,
  UDC             nvarchar(50)  not null,
  CodCS           nchar(2),
  CodCliente      nvarchar(6),
  RagSociale      nvarchar(35),
  Particolare     nvarchar(15),
  DescParticolare nvarchar(30),
  DisegnoGrezzo   nvarchar(30),
  Esponente       nvarchar(6),
  CodImpianto     nvarchar(50),
  DescImpianto    nvarchar(50),
  CodStampo       nvarchar(8),
  Figura          nvarchar(4),
  DataFus         datetime,
  TurnoFus        int,
  CodImballo      nvarchar(15),
  CodSoggetto     nchar(17),
  NumCont         int,
  Tara            float,
  Qta             decimal(10,2),
  CodStato        nvarchar(50),
  IdxPosizione    int,
  PesoTot         float,
  PesoCad         float,
  Note            nvarchar(500)
)
go

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

set identity_insert StoricoCartellini on
go

insert into StoricoCartellini(IdxEv,DataEv,UDC,CodCS,CodCliente,RagSociale,Particolare,DescParticolare,DisegnoGrezzo,Esponente,CodImpianto,DescImpianto,CodStampo,Figura,DataFus,TurnoFus,CodImballo,CodSoggetto,NumCont,Tara,Qta,CodStato,IdxPosizione,PesoTot,PesoCad,Note) select IdxEv,DataEv,UDC,CodCS,CodCliente,RagSociale,Particolare,DescParticolare,DisegnoGrezzo,Esponente,CodImpianto,DescImpianto,CodStampo,Figura,DataFus,TurnoFus,CodImballo,CodSoggetto,NumCont,Tara,Qta,CodStato,IdxPosizione,PesoTot,PesoCad,Note from tmp__StoricoCartellini_2
go

set identity_insert StoricoCartellini off
go

drop table tmp__StoricoCartellini_2
go

commit
go


set xact_abort on
go

begin transaction
go

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

set ANSI_NULLS on
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20
-- Mod Date:	2012-05-25
-- Description:	trigger x movimenti di inserimento
--				nella tab GiornaleMagazzino
-- =============================================
alter TRIGGER trg_InsMovAS 
   ON ElencoCartellini
   AFTER INSERT
AS 
BEGIN
	
	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- metto in Giornale Magazzino i record inseriti
	INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
	(
		SELECT	'I', GETDATE(), CodEvento, ModDate, UDC, ISNULL(Particolare,''), 'NEW', CodStato, 0, IdxPosizione, 0, Qta
		FROM	inserted
	)

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20  
-- Mod Date:	2012-05-25
-- Description:	trigger x movimenti di cancellazione
--				nella tab GiornaleMagazzino
-- =============================================
alter TRIGGER trg_DelMovAS 
   ON ElencoCartellini
   AFTER DELETE
AS 
BEGIN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco movimenti AS
	INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
	(
		SELECT	'D', GETDATE(), CodEvento, ModDate, UDC, ISNULL(Particolare,''), CodStato, 'DEL', IdxPosizione, 0, Qta, 0
		FROM	deleted
	)

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20 mod. 2012-03-14
-- Description:	trigger x inserimento movimenti
--				nella tab GiornaleMagazzino
-- =============================================
alter TRIGGER trg_updMovAS
   ON ElencoCartellini
   AFTER UPDATE
AS
BEGIN


	/*******************************************************************************
	* Gestione UPDATE ElencoCartellini --> GiornaleMagazzino
	*
	* regola1: si fanno registrazioni solo se varia ALMENO UNO tra
	* - quantità
	* - IdxPosizione
	* - CodStato
	*
	* regola 2:
	* - Particolare deve essere valorizzato ALMENO a '' (blank)
	*
	* regola3: in caso di update SIA di quantità che di posizione/stato
	* - si genera UN PRIMO RECORD di modifica quantità a posizione e stato FISSI
	* - si genera UN SECONDO RECORD con variazione posizione/stato
	*
	*******************************************************************************/

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	DECLARE	@dataOra AS DATETIME
	SET		@dataOra = GETDATE()
	
	-- PRIMO STEP: quantità!
	IF( UPDATE(Qta) )
	BEGIN
	
		INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
		(
			SELECT	'U', @dataOra, d.CodEvento, d.ModDate, i.UDC, ISNULL(d.Particolare,''), d.CodStato, d.CodStato, d.IdxPosizione, d.IdxPosizione, d.Qta, i.Qta
			FROM inserted AS i
			INNER JOIN deleted AS d ON i.UDC = d.UDC
			WHERE ( (i.Qta <> d.Qta) )
		)
	
	END
	
	-- ora controllo in caso di modifica di stato o posizione
	IF(UPDATE(CodStato) OR UPDATE(IdxPosizione))
	BEGIN
	
		INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
		(
			SELECT	'U', @dataOra, i.CodEvento, i.ModDate, i.UDC, ISNULL(d.Particolare,''), d.CodStato, i.CodStato, d.IdxPosizione, i.IdxPosizione, i.Qta, i.Qta
			FROM inserted AS i
			INNER JOIN deleted AS d ON i.UDC = d.UDC
			WHERE ( ( i.IdxPosizione <> d.IdxPosizione) OR (i.CodStato <> d.CodStato) )
		)
	
	END
	
END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-10-27
-- Description:	trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato
-- =============================================
alter TRIGGER trg_storicoUDC 
   ON  ElencoCartellini 
   AFTER DELETE,UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO
	INSERT INTO StoricoCartellini(DataEv, CodEvento, ModDate, UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto,
				DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, Note)
	(
		
		SELECT		GETDATE(), CodEvento, ModDate, UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, 
					CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, Note
		FROM	deleted
	)

END
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
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 = 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)	
)


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

------------------------------------------------------------------------------------------------------
-- 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 se esiste contatore x il flusso
    -- controllo se record c'è...
	IF EXISTS(  SELECT TOP 1 Flusso FROM ContatoriUdc 
		        WHERE	CodCS		=	@CodCS
		        AND		Flusso		=	@Flusso
		        AND		Anno		=	@Anno )
	    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 = 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, 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
	
	-- 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_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 = 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
	
	-- 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 = 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      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, CodEvento = @CodEvento 
	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(), CodEvento='UDC_MOV'
	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_updateNoteByRQ
*
* Aggiorna note UDC dato il rapp di qualità cui sono legate
*
* Steamware, S.E.L.
* mod: 2012.02.14
*
****************************************/
alter PROCEDURE stp_UDC_updateNoteByRQ
(
	@nRapQual NUMERIC(6,0),
	@note NVARCHAR(500)
)
AS

UPDATE	ElencoCartellini
SET		note = @note
       ,ModDate=GETDATE(),
       CodEvento = 'UDC_RDQ'
FROM    ElencoCartellini AS ec INNER JOIN v_RapQualNote AS rq ON ec.UDC = rq.UDC
WHERE   (rq.nRapQual = @nRapQual)

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(), CodEvento = @CodEvento
	WHERE	UDC = @UDC
	
COMMIT TRAN
------------------------------------------------------------------------------------------------------

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

RETURN
go

commit
go







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