﻿set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*************************************
* STORED PROCEDURE stp_MSE_refresh
* 	AGGIORNA tabella stato attuale macchine x macchina indicata
*
* modif.:	S.E.L. - 2013.02.28
**************************************/
create PROCEDURE stp_MSE_refresh
(
    @IdxMacchina  NVARCHAR(50) -- macchina da aggiornare
)
AS

--init variabili!
DECLARE @adesso DATETIME = GETDATE()
DECLARE @trovate INT = 0
DECLARE @tvStato TABLE (
	idxStato    INT NULL,
    DescrizioneStato    NVARCHAR(50),
    Semaforo    NVARCHAR(50),
	Minuti      INT NULL
) 
DECLARE @tvODL TABLE (
	IdxODL      INT NULL,
	CodArticolo NVARCHAR(50),
	DescArticolo NVARCHAR(50),
    IdxMacchina INT NULL,
	CodMacchina NVARCHAR(50),
    Nome        NVARCHAR(50),
    NumPezzi    INT NULL,
    TCAssegnato DECIMAL(18,8),
    DataInizio  DATETIME,
    DataFine    DATETIME
) 
DECLARE @tvProd TABLE (
	CodArticolo NVARCHAR(50),
    PezziLanciati INT NULL,
    PezziProd   INT NULL,
    PezziConf   INT NULL,
    TCAssegnato DECIMAL(18,8),
    CodOperatore INT NULL,
    TempoOn     DECIMAL(18,8),
    TempoAuto   DECIMAL(18,8),
    TempoRun    DECIMAL(18,8),
    TCMedio     DECIMAL(18,8),
    TCLav       DECIMAL(18,8),
    TCEff       DECIMAL(18,8),
    TCMedioRT   DECIMAL(18,8),
    TCLavRT     DECIMAL(18,8),
    TCEffRT     DECIMAL(18,8)
) 

BEGIN
    -- controllo: se c'è riga macchina richiesta...
    SELECT  @trovate=COUNT(*) FROM MappaStatoExpl WHERE IdxMacchina = @IdxMacchina
    
    -- se NON c'è la creo...
    IF(@trovate = 0)
        BEGIN
            -- calcolo ODL
            ;WITH cteODL AS
            (
	            SELECT * FROM ODL
                WHERE IdxODL IN
                (
                SELECT IdxODL
                FROM ODL
                WHERE DataFine IS NULL
                AND (IdxMacchina = @IdxMacchina)

                UNION

                SELECT MAX(IdxODL)
                FROM ODL
                WHERE IdxMacchina = @IdxMacchina
                )
            )
            -- inserisco i nuovi dati
            INSERT INTO MappaStatoExpl(lastUpdate, IdxMacchina, CodMacchina, Nome, url, IdxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL)
            SELECT      @adesso, ma.IdxMacchina, ma.CodMacchina, ma.Nome, url, ISNULL(o.IdxODL,0), ISNULL(o.CodArticolo,'-'), ISNULL(o.NumPezzi,0), ISNULL(o.TCAssegnato,0), ISNULL(o.DataInizio,'2000/01/01')
            FROM	    Macchine ma LEFT OUTER JOIN cteODL o ON ma.IdxMacchina=o.IdxMacchina
            WHERE       ma.IdxMacchina = @IdxMacchina
                        AND NOT (locazione IS NULL) 
                        AND ( (ISNULL(o.IdxODL,0) = 0) OR ((o.DataFine IS NULL) AND NOT (o.DataInizio IS NULL)) )
            ORDER BY    ma.locazione          
        END

    -- popolo tab stati
    INSERT  @tvStato(idxStato, Minuti)
    EXEC    stp_repDonati_getLastStatoDurataMacchina @IdxMacchina, 0.1
    -- fix dati mancanti
    UPDATE  tvs
    SET     tvs.Semaforo = s.Semaforo
            ,tvs.DescrizioneStato = s.Descrizione
    FROM    @tvStato tvs INNER JOIN AnagraficaStati s ON tvs.idxStato=s.IdxStato
                
    -- popolo tab ODL
    INSERT  @tvODL
    EXEC    stp_ODL_getByMacchina @IdxMacchina

    -- popolo tab pezzi/tempi
    INSERT  @tvProd(CodArticolo,PezziLanciati,PezziProd,PezziConf,TCAssegnato,CodOperatore,TempoOn,TempoAuto,TempoRun,TCMedio,TCLav,TCEff,TCMedioRT,TCLavRT,TCEffRT )
    EXEC    stp_repDonati_getDatiProdMacchina @IdxMacchina
    
    -- aggiorno in blocco i valori
    UPDATE  mse
    SET     mse.lastUpdate = @adesso
            ,mse.idxStato = ISNULL(tvs.idxStato,0)
            ,mse.durata = ISNULL(tvs.Minuti,0)
            ,mse.Semaforo = ISNULL(tvs.Semaforo,'')
            ,mse.DescrizioneStato = ISNULL(tvs.DescrizioneStato,'')
            ,mse.TCAssegnato = ISNULL(tvo.TCAssegnato,0)
            ,mse.NumPezzi = ISNULL(tvo.NumPezzi,0)
            ,mse.DataInizioODL = ISNULL(tvo.DataInizio,'2000/01/01')
            ,mse.PezziProd = ISNULL(tvp.PezziProd,0)
            ,mse.PezziConf = ISNULL(tvp.PezziConf,0)
            ,mse.TempoOn = ISNULL(tvp.TempoOn,0)
            ,mse.TempoAuto = ISNULL(tvp.TempoAuto,0)
            ,mse.TempoRun = ISNULL(tvp.TempoRun,0)
            ,mse.TCMedio = ISNULL(tvp.TCMedio,0)
            ,mse.TCLav = ISNULL(tvp.TCLav,0)
            ,mse.TCEff = ISNULL(tvp.TCEff,0)
            ,mse.TCMedioRT = ISNULL(tvp.TCMedioRT,0)
            ,mse.TCLavRT = ISNULL(tvp.TCLavRT,0)
            ,mse.TCEffRT = ISNULL(tvp.TCEffRT,0)
    FROM    MappaStatoExpl mse 
            CROSS JOIN @tvStato tvs
            CROSS JOIN @tvODL tvo 
            CROSS JOIN @tvProd tvp
    WHERE   mse.Idxmacchina = @IdxMacchina

END

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*************************************
* STORED PROCEDURE InsEvento
* 	inserimento di un evento nel db (tab EventList)
*	inerimento in anagrafica a "nd" dell'operatore se matricola mancasse
*
* modif.:	S.E.L.
* il:		2008.08.07
**************************************/
alter PROCEDURE stp_EL_InsEvento 
(
	@IdxMacchina varchar(50),
	@IdxTipo int,
	@MatricolaKanban varchar(50),
	@Value varchar(50),
	@MatrOpr int,
	@pallet varchar(20)
)
AS
	/*************************************
	* verifico se esista operatore
	**************************************/
	SELECT     *
	FROM         AnagraficaOperatori
	WHERE     (MatrOpr = @MatrOpr)
	IF(@@ROWCOUNT = 0 ) 
	BEGIN
		/* inserisco nuovo record */
		INSERT INTO AnagraficaOperatori(MatrOpr, Cognome, Nome, isAdmin, authKey)
		VALUES     (@MatrOpr,'nd (cognome)','nd (nome)', 0, '12345')
	END
	
	/* inserisco evento*/
	INSERT INTO EventList
	                      (IdxMacchina, InizioStato, IdxTipo, MatricolaKanban, Value, MatrOpr, pallet)
	VALUES     (@IdxMacchina, GETDATE(), @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet) 
	
	RETURN
go

/*************************************
* STORED PROCEDURE stp_MSE_getData
* 	tabella stato attuale macchine (da mostrare)
*
* modif.:	S.E.L. - 2013.02.28
**************************************/
alter PROCEDURE stp_MSE_getData
(
    @maxAgeSec  INT -- soglia di "vecchiaia" del dato massima accettabile dopo cui parte ricalcolo, in millisec, se < 1000 ignoro!
)
AS

-- cerco dato + recente
DECLARE @adesso DATETIME = GETDATE()
DECLARE @lastUpdate DATETIME

SELECT TOP 1 @lastUpdate=ISNULL(lastUpdate, '2000/01/01') FROM MappaStatoExpl ORDER BY lastUpdate DESC
SELECT @lastUpdate= ISNULL(@lastUpdate, '2000/01/01')

-- solo se sup ai 1000 ms! oppure zero...
IF(@maxAgeSec > 1000 OR @maxAgeSec=0)
    BEGIN
        -- dato vecchio! aggiorno!
        IF(DATEDIFF(s,@lastUpdate,@adesso)*1000 > @maxAgeSec)
            BEGIN
                -- truncate table precedente
                TRUNCATE TABLE MappaStatoExpl
        
                ;WITH cteODL AS
                (
	                SELECT * FROM ODL
                    WHERE IdxODL IN
                    (
                    SELECT IdxODL
                    FROM ODL
                    WHERE DataFine IS NULL

                    UNION

                    SELECT MAX(IdxODL)
                    FROM ODL
                    GROUP BY IdxMacchina
                    )
                )
                -- inserisco di nuovo i dati
                INSERT INTO MappaStatoExpl(lastUpdate, IdxMacchina, CodMacchina, Nome, url, IdxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL)
                SELECT      @adesso, ma.IdxMacchina, ma.CodMacchina, ma.Nome, url, ISNULL(o.IdxODL,0), ISNULL(o.CodArticolo,'-'), ISNULL(o.NumPezzi,0), ISNULL(o.TCAssegnato,0), ISNULL(o.DataInizio,'2000/01/01')
                FROM	    Macchine ma LEFT OUTER JOIN cteODL o ON ma.IdxMacchina=o.IdxMacchina
                WHERE       NOT (locazione IS NULL) AND ( (ISNULL(o.IdxODL,0) = 0) OR ((o.DataFine IS NULL) AND NOT (o.DataInizio IS NULL)) )
                ORDER BY    ma.locazione

                -- dichiaro le 2 table variables che userò x caricare i dati di stato
                DECLARE @tvStato TABLE (
	                IdxMacchina INT NULL,
	                idxStato    INT NULL,
                    DescrizioneStato    NVARCHAR(50),
                    Semaforo    NVARCHAR(50),
	                Minuti      INT NULL
                ) 
                DECLARE @tvODL TABLE (
	                IdxODL      INT NULL,
	                CodArticolo NVARCHAR(50),
	                DescArticolo NVARCHAR(50),
                    IdxMacchina INT NULL,
	                CodMacchina NVARCHAR(50),
                    Nome        NVARCHAR(50),
                    NumPezzi    INT NULL,
                    TCAssegnato DECIMAL(18,8),
                    DataInizio  DATETIME,
                    DataFine    DATETIME
                ) 
                DECLARE @tvProd TABLE (
	                IdxMacchina INT NULL,
	                CodArticolo NVARCHAR(50),
                    PezziLanciati INT NULL,
                    PezziProd   INT NULL,
                    PezziConf   INT NULL,
                    TCAssegnato DECIMAL(18,8),
                    CodOperatore INT NULL,
                    TempoOn     DECIMAL(18,8),
                    TempoAuto   DECIMAL(18,8),
                    TempoRun    DECIMAL(18,8),
                    TCMedio     DECIMAL(18,8),
                    TCLav       DECIMAL(18,8),
                    TCEff       DECIMAL(18,8),
                    TCMedioRT   DECIMAL(18,8),
                    TCLavRT     DECIMAL(18,8),
                    TCEffRT     DECIMAL(18,8)
                ) 

                DECLARE @numRows INT = 0
                DECLARE @currRow INT = 1
                DECLARE @IdxMacchina INT = 0

                SET @numRows = ISNULL((SELECT COUNT(*) FROM MappaStatoExpl),0)

                -- carico altri dati con ciclo while
                WHILE (@currRow <= @numRows)
                    BEGIN
                        -- macchina corrente!
                        SELECT @IdxMacchina = IdxMacchina FROM MappaStatoExpl WHERE RowNum = @currRow

                        -- popolo tab stati
                        INSERT  @tvStato(idxStato, Minuti)
                        EXEC    stp_repDonati_getLastStatoDurataMacchina @IdxMacchina, 0.1
                        -- fix dati mancanti
                        UPDATE  tvs
                        SET     tvs.IdxMacchina = @IdxMacchina
                               ,tvs.Semaforo = s.Semaforo
                               ,tvs.DescrizioneStato = s.Descrizione
                        FROM    @tvStato tvs INNER JOIN AnagraficaStati s ON tvs.idxStato=s.IdxStato
                        WHERE   tvs.IdxMacchina IS NULL
                
                        -- popolo tab ODL
                        INSERT  @tvODL
                        EXEC    stp_ODL_getByMacchina @IdxMacchina

                        -- popolo tab pezzi/tempi
                        INSERT  @tvProd(CodArticolo,PezziLanciati,PezziProd,PezziConf,TCAssegnato,CodOperatore,TempoOn,TempoAuto,TempoRun,TCMedio,TCLav,TCEff,TCMedioRT,TCLavRT,TCEffRT )
                        EXEC    stp_repDonati_getDatiProdMacchina @IdxMacchina
                        -- fix dati mancanti
                        UPDATE  tvp
                        SET     tvp.IdxMacchina = @IdxMacchina
                        FROM    @tvProd tvp
                        WHERE   tvp.IdxMacchina IS NULL

                        -- aggiorno contatore
                        SET @currRow = @currRow + 1
                    END
                -- aggiorno in blocco i valori x stato e pezzi prodotti
                UPDATE  mse
                SET     mse.idxStato = ISNULL(tvs.idxStato,0)
                       ,mse.durata = ISNULL(tvs.Minuti,0)
                       ,mse.Semaforo = ISNULL(tvs.Semaforo,'')
                       ,mse.DescrizioneStato = ISNULL(tvs.DescrizioneStato,'')
                FROM    MappaStatoExpl mse INNER JOIN @tvStato tvs ON mse.IdxMacchina=tvs.IdxMacchina

                -- aggiorno in blocco i valori x ODL
                UPDATE  mse
                SET     mse.TCAssegnato = ISNULL(tvo.TCAssegnato,0)
                       ,mse.NumPezzi = ISNULL(tvo.NumPezzi,0)
                       ,mse.DataInizioODL = ISNULL(tvo.DataInizio,'2000/01/01')
                FROM    MappaStatoExpl mse INNER JOIN @tvODL tvo ON mse.IdxMacchina=tvo.IdxMacchina

                -- aggiorno in blocco i valori x produzione
                UPDATE  mse
                SET     mse.PezziProd = ISNULL(tvp.PezziProd,0)
                       ,mse.PezziConf = ISNULL(tvp.PezziConf,0)
                       ,mse.TempoOn = ISNULL(tvp.TempoOn,0)
                       ,mse.TempoAuto = ISNULL(tvp.TempoAuto,0)
                       ,mse.TempoRun = ISNULL(tvp.TempoRun,0)
                       ,mse.TCMedio = ISNULL(tvp.TCMedio,0)
                       ,mse.TCLav = ISNULL(tvp.TCLav,0)
                       ,mse.TCEff = ISNULL(tvp.TCEff,0)
                       ,mse.TCMedioRT = ISNULL(tvp.TCMedioRT,0)
                       ,mse.TCLavRT = ISNULL(tvp.TCLavRT,0)
                       ,mse.TCEffRT = ISNULL(tvp.TCEffRT,0)
                FROM    MappaStatoExpl mse INNER JOIN @tvProd tvp ON mse.IdxMacchina=tvp.IdxMacchina

            END
        END
-- restituisco la tabella finale
SELECT	* 
FROM	MappaStatoExpl

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************************
* Trigger trg_ODL_updateMSE
*
* fa un refresh completo della MSE ad ogni intervento sull'ODL
*
* modificato: S.E.L.
* 2013.03.14
*
***************************************************/
create TRIGGER trg_ODL_updateMSE
ON ODL
FOR INSERT, UPDATE
AS

-- eseguo RICALCOLO tabella stato expl
 EXEC stp_MSE_getData 0
go

commit;
go

set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************************
* Trigger trg_doActions
*
* processa eventuali azioni legate ad un inserimento evento
*
* modificato: S.E.L.
* 2011.05.18
*
***************************************************/
alter TRIGGER trg_doActions
ON EventList
FOR INSERT
AS 	/* dichiarazione variabili */
	DECLARE @IdxTipo INT
	DECLARE @TabAzione NVARCHAR(50)
	DECLARE @Azione NVARCHAR(50)
	DECLARE @IdxMacchina NVARCHAR(50)
	DECLARE @MatricolaKanban NVARCHAR(50)
	DECLARE @MatricolaKanbanOk NVARCHAR(50)
	DECLARE @CodArticolo NVARCHAR(50)
	DECLARE @TCMedio DECIMAL(18,8)
	DECLARE @DataOra DATETIME
	DECLARE @DataOraPrec DATETIME
	DECLARE @NumPz INT

	/* recupero valori dell'INSERT */
	SET @IdxTipo		= ( SELECT i.IdxTipo FROM inserted i )
	SET @IdxMacchina	= ( SELECT i.IdxMacchina FROM inserted i )
	/* recupero altri valori */
	SET @TabAzione	= ( SELECT ISNULL(TabAzione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo )
	SET @Azione		= ( SELECT ISNULL(Azione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo )
	/* controllo se l'evento richieda azioni successive */
	IF(@TabAzione <> '' AND @Azione <> '')
		BEGIN
			/* azioni richieste: seconda dei casi eseguo... */
			
			/******************************************
			*
			* Calcolo tempo ciclo per INIZIO
			*
			******************************************/		
			IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Insert')
				BEGIN
					/* calcolo valori */
					SET @DataOra			= ( SELECT i.InizioStato FROM inserted i )
					SET @MatricolaKanban	= ( SELECT i.MatricolaKanban FROM inserted i )
					SET @NumPz				= ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i )
					SET @CodArticolo		= ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanban )
					/* calcolo tempo tra gli ultimi 2 eventi "contapezzi" */
					SET @DataOraPrec		= ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) )
					BEGIN TRY
						/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
						SET @TCMedio			= ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
					END TRY
					BEGIN CATCH
						SET @TCMedio			= ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
					END CATCH
					/* inserisco riga di tempo ciclo */
					INSERT INTO TempiCicloRilevati
						VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
				END
			/******************************************
			*
			* Calcolo tempo ciclo con logica stop/start
			*
			******************************************/
			ELSE IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Stop2StartCiclo')
				BEGIN				
					/* calcolo valori */
					SET @DataOra			= ( SELECT i.InizioStato FROM inserted i )
					SET @MatricolaKanban	= ( SELECT i.MatricolaKanban FROM inserted i )
					/* prendo la matricola dall'evento inizio (precedente) */
					SET @MatricolaKanbanOk	= ( SELECT ISNULL((SELECT Top 1 MatricolaKanban FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo - 1 AND InizioStato < @DataOra ORDER BY InizioStato DESC), @MatricolaKanban ) )
					
					-- calcolare num pezzi da codice...
					SET @NumPz				= ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i )
					SET @CodArticolo		= ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
					/* calcolo tempo tra eventi "contapezzi" inizio - fine NB: idxEvento per fine è idxEvento inizio + 1 ... HARD CODED!!! */
					SET @DataOraPrec		= ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo - 1 AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) )
					BEGIN TRY
						/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
						SET @TCMedio			= ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
					END TRY
					BEGIN CATCH
						SET @TCMedio			= ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) -- calcolo in secondi
					END CATCH
					/* inserisco riga di tempo ciclo */
					INSERT INTO TempiCicloRilevati
						VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
				END
			/******************************************
			*
			* calcolo tempo ciclo con logica stop/stop
			*
			******************************************/
			ELSE IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Stop2StopCiclo')
				BEGIN				
					/* calcolo valori */
					SET @DataOra			= ( SELECT i.InizioStato FROM inserted i )
					SET @MatricolaKanban	= ( SELECT i.MatricolaKanban FROM inserted i )
					/* prendo la matricola dall'evento inizio (precedente) */
					SET @MatricolaKanbanOk	= ( SELECT ISNULL((SELECT Top 1 MatricolaKanban FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @MatricolaKanban ) )
					
					-- calcolare num pezzi da codice...
					SET @NumPz				= ( SELECT PzPallet FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
					SET @CodArticolo		= ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
					/* calcolo tempo tra eventi "contapezzi" fine - fine NB: idxEvento per fine è idxEvento inizio + 1 ... HARD CODED!!! */
					SET @DataOraPrec		= ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) )
					BEGIN TRY
						/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
						SET @TCMedio			= ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
					END TRY
					BEGIN CATCH
						SET @TCMedio			= ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) -- calcolo in secondi
					END CATCH
					/* inserisco riga di tempo ciclo */
                    BEGIN TRY
					    INSERT INTO TempiCicloRilevati
						    VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
                    END TRY
                    BEGIN CATCH
						-- dovrei loggare...
					END CATCH
				END
			/******************************************
			*
			* Aggiorno kanban in dati macchine per
			* INIZIO ATTREZZAGGIO
			*
			******************************************/
			ELSE IF(@TabAzione = 'DatiMacchine' AND @Azione = 'Inizio')
				BEGIN				
					/* calcolo valori */
					SET @MatricolaKanban	= ( SELECT i.MatricolaKanban FROM inserted i )
					/* aggiorno riga di dati macchina */
					UPDATE DatiMacchine
						SET		kanban_A	= @MatricolaKanban,
								kanban_B	= @MatricolaKanban
						WHERE	idxMacchina = @IdxMacchina
					/* aggiorno stato macchina */
					UPDATE StatoMacchine
						SET		MatricolaKanban	= @MatricolaKanban
						WHERE	idxMacchina = @IdxMacchina
					/* aggiorno dati kanban statoMacchine... 	*/
					UPDATE    StatoMacchine
						SET              KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
						FROM         Kanban AS k INNER JOIN StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
						WHERE     (StatoMacchine.idxMacchina = @IdxMacchina)
				END
			/******************************************
			*
			* Aggiorno kanban in dati macchine per
			* FINE PRODUZIONE
			*
			******************************************/
			ELSE IF(@TabAzione = 'DatiMacchine' AND @Azione = 'Fine')
				BEGIN				
					/* calcolo valori */
					SET @MatricolaKanban	= 'KAND' -- kanban non definito !!!HARD CODED!!!
					/* aggiorno riga di dati macchina */
					UPDATE DatiMacchine
						SET		kanban_A	= @MatricolaKanban,
								kanban_B	= @MatricolaKanban
						WHERE	idxMacchina = @IdxMacchina
					/* aggiorno stato macchina */
					UPDATE StatoMacchine
						SET		MatricolaKanban	= @MatricolaKanban
						WHERE	idxMacchina = @IdxMacchina
					/* aggiorno dati kanban statoMacchine... 	*/
					UPDATE    StatoMacchine
						SET              KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
						FROM         Kanban AS k INNER JOIN StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
						WHERE     (StatoMacchine.idxMacchina = @IdxMacchina)
					
				END
		END
    
    -- INFINE CHIAMO REFRESH TAB STATO...
    EXEC stp_MSE_refresh @IdxMacchina
go

commit;
go









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

SELECT  TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
GO