﻿set xact_abort on;
go

begin transaction;
go

alter table AnagraficaOperatori add
  authKey nvarchar(50) constraint DF_AnagraficaOperatori_authCode default ('12345');
go

update AnagraficaOperatori set authKey=('12345');
go

commit;
go


set xact_abort on
go

begin transaction
go

INSERT INTO dbo.AnagraficaOperatori
  VALUES (-1, N'nd (cognome)', N'nd (nome)', NULL, N'12345')
UPDATE dbo.AnagraficaOperatori SET 
  isAdmin=1
  WHERE MatrOpr=0
go

commit transaction
go


create table LinkMenuJQM(
  idxLink     int          not null identity constraint PK_linkMenuJQM primary key,
  TipoLink    nvarchar(50),
  ordine      int,
  Testo       nvarchar(50),
  NavigateUrl nvarchar(50),
  icona       nvarchar(50)
);
go


set xact_abort on
go

begin transaction
go

set identity_insert dbo.LinkMenuJQM on
go

INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (1, N'DetMacc', 1, N'MappaStato', N'~/MappaStato.aspx', N'grid')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (2, N'DetMacc', 2, N'ODL / Attrezzaggio', N'~/ODL.aspx', N'check')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (3, N'DetMacc', 3, N'Gest Turni', N'~/Turni.aspx', N'gear')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (4, N'DetMacc', 4, N'Dich Fermi', N'~/Dichiarazione.aspx', N'alert')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (5, N'-', 1, N'MappaStato', N'~/MappaStato.aspx', N'grid')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (6, N'-', 2, N'Logout', N'~/Logout.aspx', N'delete')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (8, N'EditMacch', 1, N'Dettaglio', N'~/DettaglioMacchina.aspx', N'home')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (9, N'EditMacch', 2, N'ODL / Attrezzaggio', N'~/ODL.aspx', N'check')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (10, N'EditMacch', 3, N'Gest Turni', N'~/Turni.aspx', N'gear')
INSERT INTO dbo.LinkMenuJQM
  (idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
  VALUES (11, N'EditMacch', 4, N'Dich Fermi', N'~/Dichiarazione.aspx', N'alert')
go

set identity_insert dbo.LinkMenuJQM off
go

commit transaction
go


create table MappaStatoExpl(
  RowNum           int           not null identity constraint PK_MappaStatoExpl primary key,
  lastUpdate       datetime,
  IdxMacchina      nvarchar(50),
  CodMacchina      nvarchar(50),
  Nome             nvarchar(50),
  url              nvarchar(250),
  idxODL           int,
  CodArticolo      nvarchar(50)  constraint DF_MappaStatoExpl_CodArticolo default ('-'),
  NumPezzi         int,
  TCAssegnato      decimal(18,8) constraint DF_MappaStatoExpl_TCAssegnato default ((1)),
  DataInizioODL    datetime,
  Semaforo         nvarchar(50)  constraint DF_MappaStatoExpl_Semaforo default (''),
  idxStato         int           constraint DF_MappaStatoExpl_idxStato default ((0)),
  DescrizioneStato nvarchar(50)  constraint DF_MappaStatoExpl_DescrizioneStato default ('n.d.'),
  durata           float         constraint DF_MappaStatoExpl_durata default ((0)),
  PezziProd        int           constraint DF_MappaStatoExpl_PezziProd default ((0)),
  PezziConf        int           constraint DF_MappaStatoExpl_PezziConf default ((0)),
  TempoOn          decimal(18,8) constraint DF_MappaStatoExpl_TempoOn default ((0)),
  TempoAuto        decimal(18,8) constraint DF_MappaStatoExpl_TempoAuto default ((0)),
  TempoRun         decimal(18,8) constraint DF_MappaStatoExpl_TempoRun default ((0)),
  TCMedio          decimal(18,8) constraint DF_MappaStatoExpl_TempoMedioRT1 default ((0)),
  TCLav            decimal(18,8) constraint DF_MappaStatoExpl_TempoLavRT1 default ((0)),
  TCEff            decimal(18,8) constraint DF_MappaStatoExpl_TempoEffRT1 default ((0)),
  TCMedioRT        decimal(18,8) constraint DF_MappaStatoExpl_TempoOnRT default ((0)),
  TCLavRT          decimal(18,8) constraint DF_MappaStatoExpl_TempoAutoRT default ((0)),
  TCEffRT          decimal(18,8) constraint DF_MappaStatoExpl_TempoRunRT default ((0))
);
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

create VIEW v_selEventiBCode
AS
SELECT        IdxTipo AS value, REPLACE(Nome, 'Barcode - ', '') AS label
FROM            dbo.AnagraficaEventi
WHERE        (Nome LIKE N'Barcode%')
go

exec sp_addextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties = 
   Begin PaneConfigurations = 
      Begin PaneConfiguration = 0
         NumPanes = 4
         Configuration = "(H (1[40] 4[20] 2[20] 3) )"
      End
      Begin PaneConfiguration = 1
         NumPanes = 3
         Configuration = "(H (1 [50] 4 [25] 3))"
      End
      Begin PaneConfiguration = 2
         NumPanes = 3
         Configuration = "(H (1 [50] 2 [25] 3))"
      End
      Begin PaneConfiguration = 3
         NumPanes = 3
         Configuration = "(H (4 [30] 2 [40] 3))"
      End
      Begin PaneConfiguration = 4
         NumPanes = 2
         Configuration = "(H (1 [56] 3))"
      End
      Begin PaneConfiguration = 5
         NumPanes = 2
         Configuration = "(H (2 [66] 3))"
      End
      Begin PaneConfiguration = 6
         NumPanes = 2
         Configuration = "(H (4 [50] 3))"
      End
      Begin PaneConfiguration = 7
         NumPanes = 1
         Configuration = "(V (3))"
      End
      Begin PaneConfiguration = 8
         NumPanes = 3
         Configuration = "(H (1[56] 4[18] 2) )"
      End
      Begin PaneConfiguration = 9
         NumPanes = 2
         Configuration = "(H (1 [75] 4))"
      End
      Begin PaneConfiguration = 10
         NumPanes = 2
         Configuration = "(H (1[66] 2) )"
      End
      Begin PaneConfiguration = 11
         NumPanes = 2
         Configuration = "(H (4 [60] 2))"
      End
      Begin PaneConfiguration = 12
         NumPanes = 1
         Configuration = "(H (1) )"
      End
      Begin PaneConfiguration = 13
         NumPanes = 1
         Configuration = "(V (4))"
      End
      Begin PaneConfiguration = 14
         NumPanes = 1
         Configuration = "(V (2))"
      End
      ActivePaneConfig = 0
   End
   Begin DiagramPane = 
      Begin Origin = 
         Top = 0
         Left = 0
      End
      Begin Tables = 
         Begin Table = "AnagraficaEventi"
            Begin Extent = 
               Top = 6
               Left = 38
               Bottom = 136
               Right = 208
            End
            DisplayFlags = 280
            TopColumn = 0
         End
      End
   End
   Begin SQLPane = 
   End
   Begin DataPane = 
      Begin ParameterDefaults = ""
      End
      Begin ColumnWidths = 9
         Width = 284
         Width = 1500
         Width = 3765
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
      End
   End
   Begin CriteriaPane = 
      Begin ColumnWidths = 11
         Column = 1440
         Alias = 900
         Table = 1170
         Output = 720
         Append = 1400
         NewValue = 1170
         SortType = 1350
         SortOrder = 1410
         GroupBy = 1350
         Filter = 1350
         Or = 1350
         Or = 1350
         Or = 1350
      End
   End
End
', 'SCHEMA', 'dbo', 'VIEW', 'v_selEventiBCode';
go

exec sp_addextendedproperty 'MS_DiagramPaneCount', 1, 'SCHEMA', 'dbo', 'VIEW', 'v_selEventiBCode';
go

create VIEW v_selODL
AS
SELECT        IdxODL AS value, 'ODL ' + CAST(IdxODL AS NVARCHAR(50)) + ' - art.' + CodArticolo + ' (' + CAST(NumPezzi AS NVARCHAR(10)) 
                         + ' pz, tempo ciclo: ' + CAST(CAST(TCAssegnato AS DECIMAL(9, 2)) AS NVARCHAR(10)) + ')' AS label, DataInizio AS conditio
FROM            dbo.ODL
go

exec sp_addextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties = 
   Begin PaneConfigurations = 
      Begin PaneConfiguration = 0
         NumPanes = 4
         Configuration = "(H (1[40] 4[20] 2[20] 3) )"
      End
      Begin PaneConfiguration = 1
         NumPanes = 3
         Configuration = "(H (1 [50] 4 [25] 3))"
      End
      Begin PaneConfiguration = 2
         NumPanes = 3
         Configuration = "(H (1 [50] 2 [25] 3))"
      End
      Begin PaneConfiguration = 3
         NumPanes = 3
         Configuration = "(H (4 [30] 2 [40] 3))"
      End
      Begin PaneConfiguration = 4
         NumPanes = 2
         Configuration = "(H (1 [56] 3))"
      End
      Begin PaneConfiguration = 5
         NumPanes = 2
         Configuration = "(H (2 [66] 3))"
      End
      Begin PaneConfiguration = 6
         NumPanes = 2
         Configuration = "(H (4 [50] 3))"
      End
      Begin PaneConfiguration = 7
         NumPanes = 1
         Configuration = "(V (3))"
      End
      Begin PaneConfiguration = 8
         NumPanes = 3
         Configuration = "(H (1[56] 4[18] 2) )"
      End
      Begin PaneConfiguration = 9
         NumPanes = 2
         Configuration = "(H (1 [75] 4))"
      End
      Begin PaneConfiguration = 10
         NumPanes = 2
         Configuration = "(H (1[66] 2) )"
      End
      Begin PaneConfiguration = 11
         NumPanes = 2
         Configuration = "(H (4 [60] 2))"
      End
      Begin PaneConfiguration = 12
         NumPanes = 1
         Configuration = "(H (1) )"
      End
      Begin PaneConfiguration = 13
         NumPanes = 1
         Configuration = "(V (4))"
      End
      Begin PaneConfiguration = 14
         NumPanes = 1
         Configuration = "(V (2))"
      End
      ActivePaneConfig = 0
   End
   Begin DiagramPane = 
      Begin Origin = 
         Top = 0
         Left = 0
      End
      Begin Tables = 
         Begin Table = "ODL"
            Begin Extent = 
               Top = 6
               Left = 38
               Bottom = 239
               Right = 208
            End
            DisplayFlags = 280
            TopColumn = 0
         End
      End
   End
   Begin SQLPane = 
   End
   Begin DataPane = 
      Begin ParameterDefaults = ""
      End
      Begin ColumnWidths = 9
         Width = 284
         Width = 1500
         Width = 4635
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
      End
   End
   Begin CriteriaPane = 
      Begin ColumnWidths = 11
         Column = 1440
         Alias = 900
         Table = 1170
         Output = 720
         Append = 1400
         NewValue = 1170
         SortType = 1350
         SortOrder = 1410
         GroupBy = 1350
         Filter = 1350
         Or = 1350
         Or = 1350
         Or = 1350
      End
   End
End
', 'SCHEMA', 'dbo', 'VIEW', 'v_selODL';
go

exec sp_addextendedproperty 'MS_DiagramPaneCount', 1, 'SCHEMA', 'dbo', 'VIEW', 'v_selODL';
go

create VIEW v_selOperatori
AS
SELECT        MatrOpr AS value, Cognome + ' ' + Nome AS label
FROM            dbo.AnagraficaOperatori
WHERE        (MatrOpr > 0)
go

exec sp_addextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties = 
   Begin PaneConfigurations = 
      Begin PaneConfiguration = 0
         NumPanes = 4
         Configuration = "(H (1[40] 4[20] 2[20] 3) )"
      End
      Begin PaneConfiguration = 1
         NumPanes = 3
         Configuration = "(H (1 [50] 4 [25] 3))"
      End
      Begin PaneConfiguration = 2
         NumPanes = 3
         Configuration = "(H (1 [50] 2 [25] 3))"
      End
      Begin PaneConfiguration = 3
         NumPanes = 3
         Configuration = "(H (4 [30] 2 [40] 3))"
      End
      Begin PaneConfiguration = 4
         NumPanes = 2
         Configuration = "(H (1 [56] 3))"
      End
      Begin PaneConfiguration = 5
         NumPanes = 2
         Configuration = "(H (2 [66] 3))"
      End
      Begin PaneConfiguration = 6
         NumPanes = 2
         Configuration = "(H (4 [50] 3))"
      End
      Begin PaneConfiguration = 7
         NumPanes = 1
         Configuration = "(V (3))"
      End
      Begin PaneConfiguration = 8
         NumPanes = 3
         Configuration = "(H (1[56] 4[18] 2) )"
      End
      Begin PaneConfiguration = 9
         NumPanes = 2
         Configuration = "(H (1 [75] 4))"
      End
      Begin PaneConfiguration = 10
         NumPanes = 2
         Configuration = "(H (1[66] 2) )"
      End
      Begin PaneConfiguration = 11
         NumPanes = 2
         Configuration = "(H (4 [60] 2))"
      End
      Begin PaneConfiguration = 12
         NumPanes = 1
         Configuration = "(H (1) )"
      End
      Begin PaneConfiguration = 13
         NumPanes = 1
         Configuration = "(V (4))"
      End
      Begin PaneConfiguration = 14
         NumPanes = 1
         Configuration = "(V (2))"
      End
      ActivePaneConfig = 0
   End
   Begin DiagramPane = 
      Begin Origin = 
         Top = 0
         Left = 0
      End
      Begin Tables = 
         Begin Table = "AnagraficaOperatori"
            Begin Extent = 
               Top = 6
               Left = 38
               Bottom = 306
               Right = 208
            End
            DisplayFlags = 280
            TopColumn = 0
         End
      End
   End
   Begin SQLPane = 
   End
   Begin DataPane = 
      Begin ParameterDefaults = ""
      End
      Begin ColumnWidths = 9
         Width = 284
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
      End
   End
   Begin CriteriaPane = 
      Begin ColumnWidths = 11
         Column = 1440
         Alias = 900
         Table = 1170
         Output = 720
         Append = 1400
         NewValue = 1170
         SortType = 1350
         SortOrder = 1410
         GroupBy = 1350
         Filter = 1350
         Or = 1350
         Or = 1350
         Or = 1350
      End
   End
End
', 'SCHEMA', 'dbo', 'VIEW', 'v_selOperatori';
go

exec sp_addextendedproperty 'MS_DiagramPaneCount', 1, 'SCHEMA', 'dbo', 'VIEW', 'v_selOperatori';
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*************************************
* STORED PROCEDURE stp_AO_getByMatr
* 	recupera operatore data matricola
*
* modif.:	S.E.L.
* il:		2013.02.27
**************************************/
create PROCEDURE stp_AO_getByMatr
(
	@MatrOpr INT = 0
)
AS


SELECT  *
FROM    AnagraficaOperatori 
WHERE   MatrOpr = @MatrOpr

RETURN
go

/*************************************
* STORED PROCEDURE stp_AO_getByMatrAuthKey
* 	recupera operatore data matricola + AuthKey
*
* modif.:	S.E.L.
* il:		2013.02.27
**************************************/
create PROCEDURE stp_AO_getByMatrAuthKey
(
	@MatrOpr    INT = 0,
    @authKey    NVARCHAR(50)=''
)
AS


SELECT  *
FROM    AnagraficaOperatori 
WHERE   MatrOpr = @MatrOpr
AND     authKey = @authKey

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*************************************
* STORED PROCEDURE stp_LMJ_getByTipo
* 	elenco link menù da tipo x JQM
*
* modif.:	S.E.L. - 2013.02.27
**************************************/
create PROCEDURE stp_LMJ_getByTipo
(
	@TipoLink nvarchar(50)
)
AS
	SET NOCOUNT ON;
SELECT  *
FROM    dbo.LinkMenuJQM
WHERE   TipoLink=@TipoLink
go

/*************************************
* STORED PROCEDURE stp_MSE_getData
* 	tabella stato attuale macchine (da mostrare)
*
* modif.:	S.E.L. - 2013.02.28
**************************************/
create PROCEDURE stp_MSE_getData
(
    @maxAgeSec  INT -- soglia di "vecchiaia" del dato massima accettabile dopo cui parte ricalcolo
)
AS

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

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

-- dato vecchio! aggiorno!
IF(DATEDIFF(s,@lastUpdate,@adesso) > @maxAgeSec)
    BEGIN
        -- truncate table precedente
        TRUNCATE TABLE MappaStatoExpl
        
        ;WITH cteODL AS
        (
	        SELECT	*
	        FROM	ODL
	        WHERE	DataFine IS NULL
        )
        -- 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,'1900/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,'1900/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
-- restituisco la tabella finale
SELECT	* 
FROM	MappaStatoExpl

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*************************************
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
* 	restituisce i dati di produzione di una macchina per l'ULTIMO ODL
*
* modif.:	S.E.L. - 2012.03.08
**************************************/
alter PROCEDURE stp_repDonati_getDatiProdMacchina
(
	@idxMacchina NVARCHAR(50)
)
AS


-- calcolo codice articolo
DECLARE @CodArticolo NVARCHAR (50)
SET @CodArticolo = ISNULL(( 
					SELECT CodArticolo FROM Kanban k
					INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
					WHERE sm.IdxMacchina = @idxMacchina
					),'-')
-- calcolo il codice operatore
DECLARE @CodOperatore INT
SET @CodOperatore = ISNULL(( 
					SELECT MatrOpr FROM StatoMacchine 
					WHERE IdxMacchina = @idxMacchina
					),0)
-- calcolo il codice ODL
DECLARE @idxODL INT
SET @idxODL =	( 
					SELECT ISNULL(idxODL,'') FROM ODL
					WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
				)

					
DECLARE @PezziConf INT
SET @PezziConf =	( 
					SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione 
					WHERE idxODL = @idxOdl
					)
										
DECLARE @PezziLanciati INT
SET @PezziLanciati =( 
					SELECT ISNULL(SUM(NumPezzi),0) FROM ODL 
					WHERE idxODL = @idxOdl
					)

DECLARE @TCAss DECIMAL(18,8)
SET @TCAss =		( 
					SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL 
					WHERE idxODL = @idxOdl
					)

-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
DECLARE @inizioOdl DATETIME
SET @inizioOdl =	( 
					SELECT DataInizio FROM ODL 
					WHERE idxODL = @idxOdl
					)

DECLARE @PezziProd INT
SET @PezziProd =	( 
					SELECT COUNT(*) FROM TempiCicloRilevati
					WHERE	DataOraRif >= @inizioOdl
					AND		idxMacchina = @idxMacchina
					)
					

/****************************************************
* Calcolo tempi apertura confermati
****************************************************/
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
DECLARE @TempoOn DECIMAL(18,8)
SET @TempoOn =		( 
					SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione 
					WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
					)
					
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
DECLARE @TempoAuto DECIMAL(18,8)
SET @TempoAuto =	( 
					SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione 
					WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
					)
					
-- calcolo i tempi di apertura: TempoRun (Verde)
DECLARE @TempoRun DECIMAL(18,8)
SET @TempoRun =		( 
					SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione 
					WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
					)

/****************************************************
* Calcolo tempi apertura realtime
****************************************************/
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
DECLARE @TempoOnRT DECIMAL(18,8)
SET @TempoOnRT =	( 
					SELECT	ISNULL(SUM(DurataMinuti),0) 
					FROM	DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
					WHERE	AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl 
					AND		IdxMacchina = @idxMacchina
					)
					
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
DECLARE @TempoAutoRT DECIMAL(18,8)
SET @TempoAutoRT =	( 
					SELECT @TempoOnRT - ISNULL(SUM(DurataMinuti),0) 
					FROM	DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
					WHERE	AnSt.ClasseTempo = 'T_FermoRosso' AND InizioStato >= @inizioOdl 
					AND		IdxMacchina = @idxMacchina
					)
					
-- calcolo i tempi di apertura: TempoRun (Verde)
DECLARE @TempoRunRT DECIMAL(18,8)
SET @TempoRunRT =	(
					SELECT ISNULL(SUM(DurataMinuti),0) 
					FROM	DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
					WHERE	AnSt.ClasseTempo = 'T_AutoRun' AND InizioStato >= @inizioOdl 
					AND		IdxMacchina = @idxMacchina
					)

DECLARE @numPezzi INT

/****************************************************
* Calcolo i TEMPI CICLO confermati
****************************************************/

-- DIVISIONE PER ZERO: controllo pezzi conf > 0
SET @numPezzi = @PezziConf - 1 -- divido per n-1 per avere numIntervalli = numPezzi
IF(@numPezzi < 1) SET @numPezzi = 1

DECLARE @TCMed DECIMAL(18,8)
SET @TCMed =		( 
					SELECT @TempoOn * 60 / @numPezzi -- tempo in ore
					)	
DECLARE @TCLav DECIMAL(18,8)
SET @TCLav =		( 
					SELECT @TempoAuto * 60 / @numPezzi -- tempo in ore
					)	
DECLARE @TCEff DECIMAL(18,8) -- è la media degli ultimi 10 migliori tempi minimi nell'ultima giornata
SET @TCEff =		( 
						SELECT @TempoRun * 60 / @numPezzi -- tempo in ore
					)					

/****************************************************
* Calcolo i TEMPI CICLO realtime (anche non confermati)
****************************************************/

-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
SET @numPezzi = @PezziProd - 1 -- divido per n-1 per avere numIntervalli = numPezzi
IF(@numPezzi < 1) SET @numPezzi = 1

DECLARE @TCMedRT DECIMAL(18,8)
SET @TCMedRT =		( 
					SELECT @TempoOnRT / @numPezzi
					)	
DECLARE @TCLavRT DECIMAL(18,8)
SET @TCLavRT =		( 
					SELECT @TempoAutoRT / @numPezzi
					)					
DECLARE @TCEffRT DECIMAL(18,8)
SET @TCEffRT =		ISNULL(( SELECT dbo.f_lastTempoTecnico(@idxMacchina, 2) ), -1) -- provo a calcolare ultimi tempi tecnici
IF (@TCEffRT =-1) 
BEGIN
	SET @TCEffRT =		( 
					SELECT @TempoRunRT / @numPezzi
						)					
END
							
					
SELECT @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT


RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*************************************
* STORED PROCEDURE stp_vsODL_getUnused
* 	ottiene elenco ODL non ancora impiegati
*
* modif.:	S.E.L. - 2013.03.01
**************************************/
create PROCEDURE stp_vsODL_getUnused
AS

SELECT 0 as value, 'Selezionare ODL' as label, NULL as conditio

UNION

SELECT	*
FROM	v_selODL
WHERE	conditio IS NULL

RETURN
go

commit;
go



set xact_abort on;
go

begin transaction;
go

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

-- dato vecchio! aggiorno!
IF(DATEDIFF(s,@lastUpdate,@adesso) > @maxAgeSec)
    BEGIN
        -- truncate table precedente
        TRUNCATE TABLE MappaStatoExpl
        
        ;WITH cteODL AS
        (
	        SELECT	*
	        FROM	ODL
	        WHERE	DataFine IS NULL
        )
        -- 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,'1900/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,'1900/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
-- restituisco la tabella finale
SELECT	* 
FROM	MappaStatoExpl

RETURN
go

commit;
go








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

SELECT  TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
GO