create table ListValues(
  TableName nvarchar(50) not null,
  FieldName nvarchar(50) not null,
  value     nvarchar(10) not null,
  label     nvarchar(50),
  ordinal   int          constraint DF_ListValues_ordinal default ((0)),

  constraint PK_ListValues_1 primary key(TableName,FieldName,value)
);
go


set xact_abort on
go

begin transaction
go

INSERT INTO dbo.ListValues
  VALUES (N'*', N'PageSize', N'10', N'10', 1)
INSERT INTO dbo.ListValues
  VALUES (N'*', N'PageSize', N'15', N'15', 2)
INSERT INTO dbo.ListValues
  VALUES (N'*', N'PageSize', N'20', N'20', 3)
INSERT INTO dbo.ListValues
  VALUES (N'*', N'PageSize', N'35', N'35', 4)
INSERT INTO dbo.ListValues
  VALUES (N'*', N'PageSize', N'50', N'50', 5)
go

commit transaction
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/*----------------------------------
* Trigger su insert/update
*
* Aggiorna giustificativi nella tab TimbratureExpl
*
* creato da:		S.E. Locatelli - 2012.12.04
* ultima modifica:	
*----------------------------------*/
alter TRIGGER trg_giustUpdateTimbr
ON Giustificativi
FOR INSERT, UPDATE
AS

-- controllo se rescord esista altrimenti lo creo!!!
DECLARE @trovate INT = 0
DECLARE @idxDipendente INT
DECLARE @dataRif DATETIME
SET     @trovate = ISNULL( ( SELECT COUNT(*) FROM	TimbratureExpl te INNER JOIN inserted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav) ,0)
IF(@trovate = 0)
BEGIN
    SELECT  @idxDipendente = idxDipendente, @dataRif=dataLav FROM inserted
    EXEC stp_ricalcolaTimbratureExpl @idxDipendente, @dataRif
END

-- CONTROLLO SE IL RECORD NON SIA BLOCCATO con where nell'update
-- prendo tutte le "vecchie" righe (deleted) e x le giornate relative TOLGO i minuti dei giustificativi
UPDATE	TimbratureExpl
SET		minMal	= CASE WHEN g.codGiust='MAL'	THEN 0 ELSE minMal	END,
		minFer	= CASE WHEN g.codGiust='FER'	THEN 0 ELSE minFer	END,
		minFest	= CASE WHEN g.codGiust='FEST'	THEN 0 ELSE minFest END,
		minPerm	= CASE WHEN g.codGiust='PERM'	THEN 0 ELSE minPerm END
FROM	TimbratureExpl te INNER JOIN deleted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE   te.block = 0

-- prendo le "nuove" righe (inserted) e x le giornate relative AGGIUNGO i minuti dei giustificativi 
UPDATE	TimbratureExpl
SET		minMal	= CASE WHEN g.codGiust='MAL'	THEN g.minuti ELSE minMal	END,
		minFer	= CASE WHEN g.codGiust='FER'	THEN g.minuti ELSE minFer	END,
		minFest	= CASE WHEN g.codGiust='FEST'	THEN g.minuti ELSE minFest	END,
		minPerm	= CASE WHEN g.codGiust='PERM'	THEN g.minuti ELSE minPerm	END
FROM	TimbratureExpl te INNER JOIN inserted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE   te.block = 0
go

/*----------------------------------
* Trigger su delete
*
* Aggiorna giustificativi nella tab TimbratureExpl
*
* creato da:		S.E. Locatelli - 2012.12.04
* ultima modifica:	
*----------------------------------*/
alter TRIGGER trg_giustDelUpdTimbr
ON Giustificativi
FOR DELETE
AS

-- controllo se rescord esista altrimenti lo creo!!!
DECLARE @trovate INT = 0
DECLARE @idxDipendente INT
DECLARE @dataRif DATETIME

-- CONTROLLO SE IL RECORD NON SIA BLOCCATO in update con where
-- prendo tutte le "vecchie" righe (deleted) e x le giornate relative TOLGO i minuti dei giustificativi
UPDATE	TimbratureExpl
SET		minMal	= CASE WHEN g.codGiust='MAL'	THEN 0 ELSE minMal	END,
		minFer	= CASE WHEN g.codGiust='FER'	THEN 0 ELSE minFer	END,
		minFest	= CASE WHEN g.codGiust='FEST'	THEN 0 ELSE minFest END,
		minPerm	= CASE WHEN g.codGiust='PERM'	THEN 0 ELSE minPerm END
FROM	TimbratureExpl te INNER JOIN deleted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE   te.block = 0
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

create VIEW v_selPageSize
AS
SELECT        TOP (100) PERCENT value, label, ordinal
FROM            dbo.ListValues
WHERE        (TableName = N'*') AND (FieldName = N'PageSize')
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 = "ListValues"
            Begin Extent = 
               Top = 6
               Left = 38
               Bottom = 187
               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_selPageSize';
go

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

commit;
go







-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(325, GETDATE())
GO
SELECT * FROM LogUpdateDb ORDER BY Versione DESC
