ALTER
PROCEDURE [FCS].[Insert_CS_Header] (
@CS_Header_JSON AS NVARCHAR(max)
,@BrandItemJSON AS NVARCHAR(max)
,@PrimaryEmail AS VARCHAR(100)
,@DB AS VARCHAR(25)
)
AS
SET NOCOUNT ON;
DECLARE @statement AS NVARCHAR(MAX)
,@HeaderId INT
,@insertid INT
,@ProjectId VARCHAR(10)
,@RoleId INT
,@CountBrndItems INT;
BEGIN
SELECT *
INTO #CS_Header
FROM OPENJSON(@CS_Header_JSON) WITH (
HeaderId INT
,RoleId INT
,ProjectTitle VARCHAR(150)
,ProjectTypeId INT
,ProjectPhaseId INT
,ImplmntChncGT50Ptct BIT
,OwnerContactId INT
,ProjectOriginId INT
,ProjectDescription VARCHAR(2000)
,InBudgetCOGSId INT
,TotSavingsLowEnd VARCHAR(9)
,TotSavingsHighEnd VARCHAR(9)
,EstTotalSavings VARCHAR(9)
,IsTBD BIT
,EstStartDate [DATE]
,EstCompletionDate [DATE]
,SavingsPriceTypesId INT
,HowIsSavingsMeasured VARCHAR(2000)
,KED_MfgrItemCodes VARCHAR(2000)
,AppUser VARCHAR(100)
);
SELECT *
INTO #BrandItems
FROM OPENJSON(@BrandItemJSON) WITH (
[BrandItemNumber] VARCHAR(15)
,[ItemDesc] VARCHAR(75)
);
SELECT @CountBrndItems = COUNT(*)
FROM #BrandItems;
SELECT @HeaderId = HeaderId
FROM OPENJSON(@CS_Header_JSON) WITH (HeaderId INT);
SELECT @RoleId = RoleId
FROM OPENJSON(@CS_Header_JSON) WITH (RoleId INT);
BEGIN TRY
BEGIN TRANSACTION MergeCS_Header
IF NULLIF(@HeaderId, '') IS NULL
BEGIN
SET @statement = '
INSERT INTO [' + @DB +
'].[FCS].[CS_Header] (
[ProjectTitle]
,[ProjectTypeId]
,[ProjectPhaseId]
,[ImplmntChncGT50Ptct]
,[OwnerContactId]
,[ProjectOriginId]
,[ProjectDescription]
,[InBudgetCOGSId]
,[TotSavingsLowEnd]
,[TotSavingsHighEnd]
,[EstTotalSavings]
,[IsTBD]
,[EstStartDate]
,[EstCompletionDate]
,[SavingsPriceTypesId]
,[HowIsSavingsMeasured]
,[KED_MfgrItemCodes]
,[Created]
,[Creator]
,[Modified]
,[Modifier]
)
SELECT NULLIF(csh.ProjectTitle, '''') as ProjectTitle
,TRY_CAST(NULLIF(csh.ProjectTypeId, '''') AS INT) as ProjectTypeId
,TRY_CAST(NULLIF(csh.ProjectPhaseId, '''') AS INT) as ProjectPhaseId
,csh.ImplmntChncGT50Ptct as ImplmntChncGT50Ptct
,TRY_CAST(NULLIF(csh.OwnerContactId, '''') AS INT) as OwnerContactId
,TRY_CAST(NULLIF(csh.ProjectOriginId, '''') AS INT) as ProjectOriginId
,NULLIF(csh.ProjectDescription, '''') as ProjectDescription
,TRY_CAST(NULLIF(csh.InBudgetCOGSId, '''') AS INT) as InBudgetCOGSId
,TRY_CAST(NULLIF(csh.TotSavingsLowEnd, '''') AS DECIMAL(9,0)) as TotSavingsLowEnd
,TRY_CAST(NULLIF(csh.TotSavingsHighEnd, '''')AS DECIMAL(9,0)) as TotSavingsHighEnd
,TRY_CAST(NULLIF(csh.EstTotalSavings, '''')AS DECIMAL(9,0)) as EstTotalSavings
,csh.IsTBD as IsTBD
,NULLIF(csh.EstStartDate, '''') as EstStartDate
,NULLIF(csh.EstCompletionDate, '''') as EstCompletionDate
,TRY_CAST(NULLIF(csh.SavingsPriceTypesId, '''') AS INT) as SavingsPriceTypesId
,NULLIF(csh.HowIsSavingsMeasured, '''') as HowIsSavingsMeasured
,NULLIF(csh.KED_MfgrItemCodes, '''') as KED_MfgrItemCodes
,GETDATE() as Created
,csh.AppUser as Creator
,GETDATE() as Modified
,csh.AppUser as Modifier
FROM #CS_Header csh; SELECT @insertid = SCOPE_IDENTITY()'
EXECUTE sp_executesql @statement
,N'@insertid INTEGER OUTPUT'
,@insertid OUTPUT
IF @insertid > 0
BEGIN
SET @statement = 'SELECT @P = [Identifier] + CAST([Value] AS VARCHAR) FROM [' + @DB + '].[FCS].[CS_SmartNumber] WHERE RoleId = @RoleId'
EXEC sp_executesql @Statement
,N'@RoleId INT,@P VARCHAR(10) OUTPUT'
,@RoleId = @RoleId
,@P = @ProjectId OUTPUT
SET @statement = 'UPDATE [' + @DB + '].[FCS].[CS_Header] SET [ProjectId] = @ProjectId WHERE [HeaderId] = @insertid AND [ProjectId] IS NULL;'
EXEC sp_executesql @statement
,N'@ProjectId VARCHAR(10), @insertid INT'
,@ProjectId = @ProjectId
,@insertid = @insertid
SET @statement = 'UPDATE [' + @DB + '].[FCS].[CS_SmartNumber] SET [Value] = [Value] + 1 WHERE RoleId = @RoleId'
EXEC sp_executesql @statement
,N'@RoleId INT'
,@RoleId = @RoleId
IF @CountBrndItems > 0
BEGIN
SET @statement = 'INSERT INTO [' + @DB + '].[FCS].[CS_BrandItems] (
[HeaderId]
,[BrandItemNumber]
,[ItemDesc]
)
SELECT @insertid
,[BrandItemNumber]
,[ItemDesc]
FROM #BrandItems;'
EXEC sp_executesql @statement
,N'@insertid INT'
,@insertid = @insertid
END
END
END;
COMMIT TRANSACTION MergeCS_Header
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
ROLLBACK TRANSACTION MergeCS_Header;
THROW;
END CATCH
SELECT @ProjectId as ProjectId, @insertid as HeaderId;
END