diff --git a/PROMS/VEPROMS User Interface/DlgAnnotationsSelect.cs b/PROMS/VEPROMS User Interface/DlgAnnotationsSelect.cs index 5083cd84..cf77407b 100644 --- a/PROMS/VEPROMS User Interface/DlgAnnotationsSelect.cs +++ b/PROMS/VEPROMS User Interface/DlgAnnotationsSelect.cs @@ -101,14 +101,17 @@ namespace VEPROMS // dltFlg flag is used to notify SQL SP to deleted all the entries for the user before entering the annotation type selections. int dltFlg = 1; - foreach (AnnotataionItem item in lstSelected.Items.OfType()) - { - AnnotationTypeID = item.TypeID; - AnnotationNameStr = item.NameStr; + //foreach (AnnotataionItem item in lstSelected.Items.OfType()) + //{ + // AnnotationTypeID = item.TypeID; + // AnnotationNameStr = item.NameStr; + + DataTable dt2 = coverToTable(UserID); + + VEPROMS.CSLA.Library.AnnotationstypeSelections.Update2(dt2); + // dltFlg = 0; + //} - VEPROMS.CSLA.Library.AnnotationstypeSelections.Update(UserID, AnnotationTypeID, dltFlg, AnnotationNameStr); - dltFlg = 0; - } } public class AnnotataionItem { @@ -172,6 +175,20 @@ namespace VEPROMS { this.Close(); } + + private DataTable coverToTable(string userid) + { + DataTable dt = new DataTable(); + dt.Columns.Add("TypeID", typeof(Int32)); + dt.Columns.Add("NameStr", typeof(string)); + dt.Columns.Add("UserID", typeof(string)); + + foreach (AnnotataionItem item in lstSelected.Items.OfType()) + { + dt.Rows.Add(item.TypeID, item.NameStr, userid); + } + return dt; + } } } diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 0dc8511a..60e92399 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -1,5 +1,3 @@ - - Set NoCount On; If (db_name() in('master','model','msdn','tempdb')) @@ -24076,16 +24074,72 @@ ELSE GO + + + + +-- C2025-027 Annotation Type Filtering +IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AnnotationTypeSelections]') AND type in (N'U')) +DROP TABLE [dbo].[AnnotationTypeSelections] +GO + +/****** Object: Table [dbo].[AnnotationTypeSelections] Script Date: 7/10/2025 2:38:23 PM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +-- ============================================= +-- Author: Paul Larsen +-- Create date: 07/10/2025 +-- Description: Store user Annotation selections for annotation filter. +-- ============================================= + +CREATE TABLE [dbo].[AnnotationTypeSelections]( + [ASTypeID] [int] IDENTITY(1,1) NOT NULL, + [TypeID] [int] NULL, + [UsrID] [varchar](50) NULL, + [Name] [nvarchar](100) NULL, + [Config] [nvarchar](max) NULL, + [DTS] [datetime] NULL, + [UserID] [nvarchar](100) NULL, + [LastChanged] [timestamp] NULL, + [IsEPAnnotationType] [bit] NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +--CREATE UNIQUE INDEX idx_AnnotationTypeSelections_Usrid +--ON AnnotationTypeSelections (TypeID, Name, UsrID); +--GO + +IF EXISTS (SELECT * FROM sys.indexes WHERE name='idx_AnnotationTypeSelections_UsrID' +AND object_id = OBJECT_ID('[dbo].[AnnotationTypeSelections]')) +begin +DROP INDEX [idx_AnnotationTypeSelections_UsrID] ON [dbo].[AnnotationTypeSelections]; +end + +CREATE NONCLUSTERED INDEX idx_AnnotationTypeSelections_UsrID + ON [dbo].[AnnotationTypeSelections] (UsrID) +INCLUDE (TypeID, Name) +GO + +--CREATE NONCLUSTERED INDEX [idx_AnnotationTypeSelections_Usrid] ON [dbo].[AnnotationTypeSelections] +--( +-- [UsrID] ASC +--)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +--GO +--CREATE NONCLUSTERED INDEX [idx_AnnotationTypeSelections_TypeID] ON [dbo].[AnnotationTypeSelections] +--( +-- [TypeID] ASC +--)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +--GO + -- C2025-027 Annotation Type Filtering IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAnnotationSelectListTypes]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) DROP PROCEDURE [getAnnotationSelectListTypes]; GO -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO - -- ============================================= -- Author: Paul Larsen -- Create date: 7/10/2025 @@ -24104,13 +24158,10 @@ AS [DTS], [UserID], [LastChanged], - (SELECT COUNT(*) FROM [Annotations] WHERE [Annotations].[TypeID]= [TypeID]) [AnnotationCount] - --[IsEPAnnotationType] + (SELECT COUNT(*) FROM [Annotations] WHERE [Annotations].[TypeID]= [TypeID]) [AnnotationCount], + [IsEPAnnotationType] FROM [AnnotationTypes] --A - --JOIN AnnotationTypeSelections S ON S.TypeID = A.TypeID - WHERE TypeID NOT IN (SELECT TypeID FROM AnnotationTypeSelections WHERE UsrID = @UserID) --S.ItemID = @ItemID AND S.TypeID != A.TypeID - - RETURN + WHERE TypeID NOT IN (SELECT TypeID FROM AnnotationTypeSelections WHERE UsrID = @UserID) GO @@ -24154,7 +24205,6 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAnnotationsty GO SET ANSI_NULLS ON GO - SET QUOTED_IDENTIFIER ON GO @@ -24198,12 +24248,42 @@ BEGIN END END +GO -- C2025-027 Annotation Type Filtering -IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AnnotationTypeSelections]') AND type in (N'U')) -DROP TABLE [dbo].[AnnotationTypeSelections] +--IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[TableValAnnotTypeSelections]') AND OBJECTPROPERTY(id,N'IsType') = 1) + +-- Type -- + +--IF NOT EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name ='TableValAnnotTypeSelections') +-- DROP PROCEDURE [TableValAnnotTypeSelections]; +--GO + +--/****** Object: UserDefinedTableType [dbo].[TableValAnnotTypeSelections] Script Date: 7/21/2025 8:06:11 PM ******/ +--CREATE TYPE [dbo].[TableValAnnotTypeSelections] AS TABLE( +-- [TypeID] [int] NOT NULL, +-- [NameStr] [varchar](200) NULL, +-- [UserID] [varchar](50) NULL +--) +--GO + +-- C2025-027 Annotation Type Filtering +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[UpdateAnnotationstypeSelections2]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [UpdateAnnotationstypeSelections2]; + +-- Need to drop UpdateAnnotationstypeSelections2 SP first so script can drop and recreate the TableValAnnotTypeSelections table type + +IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.DOMAINS WHERE Domain_Name = 'TableValAnnotTypeSelections' ) + DROP TYPE [dbo].[TableValAnnotTypeSelections] + +CREATE TYPE [dbo].[TableValAnnotTypeSelections] AS TABLE( + [TypeID] [int] NOT NULL, + [NameStr] [varchar](200) NULL, + [UserID] [varchar](50) NULL +) GO -/****** Object: Table [dbo].[AnnotationTypeSelections] Script Date: 7/10/2025 2:38:23 PM ******/ + +/****** Object: StoredProcedure [dbo].[UpdateAnnotationstypeSelections2] Script Date: 7/21/2025 8:51:42 PM ******/ SET ANSI_NULLS ON GO @@ -24212,33 +24292,51 @@ GO -- ============================================= -- Author: Paul Larsen --- Create date: 07/10/2025 --- Description: Store user Annotation selections for annotation filter. +-- Create date: 07/21/2025 +-- Description: Manage user choice annotation types -- ============================================= - -CREATE TABLE [dbo].[AnnotationTypeSelections]( - [ASTypeID] [int] IDENTITY(1,1) NOT NULL, - [TypeID] [int] NULL, - [UsrID] [varchar](50) NULL, - [Name] [nvarchar](100) NOT NULL, - [Config] [nvarchar](max) NULL, - [DTS] [datetime] NOT NULL, - [UserID] [nvarchar](100) NOT NULL, - [LastChanged] [timestamp] NOT NULL, - [IsEPAnnotationType] [bit] NOT NULL -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] -GO -CREATE NONCLUSTERED INDEX [idx_AnnotationTypeSelections_Usrid] ON [dbo].[AnnotationTypeSelections] +CREATE PROC [dbo].[UpdateAnnotationstypeSelections2] ( - [UsrID] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] -GO -CREATE NONCLUSTERED INDEX [idx_AnnotationTypeSelections_TypeID] ON [dbo].[AnnotationTypeSelections] -( - [TypeID] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] -GO + @TempTable AS dbo.TableValAnnotTypeSelections READONLY +) +AS +BEGIN + --INSERT INTO CUSTOMER (CustomerId,CustomerName ,Isdeleted ) + --SELECT CustomerId, CustomerName, 0 AS Isdeleted FROM @TempTable + +MERGE AnnotationTypeSelections AS TARGET + USING @TempTable AS SOURCE + + /* 1. Performing the UPDATE operation */ + + /* If the P_ID is same, + check for change in P_NAME or P_PRICE */ + ON (TARGET.TypeID = SOURCE.TypeID) + WHEN MATCHED + AND TARGET.Name <> SOURCE.NameStr + + /* Update the records in TARGET */ + THEN UPDATE + SET TARGET.Name = SOURCE.NameStr, + TARGET.UsrID = SOURCE.UserID + + /* 2. Performing the INSERT operation */ + + /* When no records are matched with TARGET table + Then insert the records in the target table */ + WHEN NOT MATCHED BY TARGET + THEN INSERT (TypeID, Name, UsrID) + VALUES (SOURCE.TypeID, SOURCE.NameStr,SOURCE.UserID) + + /* 3. Performing the DELETE operation */ + + /* When no records are matched with SOURCE table + Then delete the records from the target table */ + WHEN NOT MATCHED BY SOURCE + THEN DELETE; +END +GO IF (@@Error = 0) PRINT 'Running vesp_UpdateEPFormat Succeeded' ELSE PRINT 'Running vesp_UpdateEPFormat Failed to Execute' diff --git a/PROMS/VEPROMS.CSLA.Library/Minimal/AnnotationstypeSections.cs b/PROMS/VEPROMS.CSLA.Library/Minimal/AnnotationstypeSections.cs index 9caba8a6..e120ccd9 100644 --- a/PROMS/VEPROMS.CSLA.Library/Minimal/AnnotationstypeSections.cs +++ b/PROMS/VEPROMS.CSLA.Library/Minimal/AnnotationstypeSections.cs @@ -169,7 +169,32 @@ namespace VEPROMS.CSLA.Library } } } - } + + } + public static void Update2(DataTable dt) + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + try + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "UpdateAnnotationstypeSelections2"; + cm.CommandTimeout = Database.DefaultTimeout; + + //Pass table Valued parameter to Store Procedure + SqlParameter sqlParam = cm.Parameters.AddWithValue("@TempTable", dt); + sqlParam.SqlDbType = SqlDbType.Structured; + cm.ExecuteNonQuery(); + } + catch (Exception ex) + { + + } + } + } + } } }