IF OBJECT_ID('KAAS_BGIFListGroupDrillEntries',N'IF') IS NOT NULL DROP FUNCTION [dbo].[KAAS_BGIFListGroupDrillEntries] GO CREATE FUNCTION [dbo].[KAAS_BGIFListGroupDrillEntries] (@GroupID UNIQUEIDENTIFIER) RETURNS TABLE AS /****************************************************************** * KAAS_BGIFListGroupDrillEntries * * Modification History: * ????-??-?? ???????????? Created * 2024-03-26 Pino Carafa Imported into KAAS * 2024-03-28 Pino Carafa Corrected Parameter Type * ******************************************************************/ RETURN SELECT CASE WHEN BGD.[IncludeInBill] = 2 THEN 'Exclude' WHEN BGD.[BillNow] = 0 THEN 'Don''t Bill' WHEN ISNULL(BGD.[BillNow], 0) <> (ISNULL(BGD.[CHARGE], 0) - ISNULL(BGD.[BilledAmount], 0)) THEN 'Bill Partially' ELSE 'Bill in Full' END AS [IncludeInBill], RTRIM(ISNULL(BGD.[Type], '')) AS [Type], RTRIM(ISNULL(BGD.[MATTER], '')) AS [MATTER], RTRIM(ISNULL(BGD.[FEEEARN], '')) AS [FEEEARN], RTRIM(ISNULL(BGD.[OUTLAYCODE], '')) AS [OUTLAYCODE], RTRIM(ISNULL(OLC.[Description], '')) AS [OUTLAYDESCRIPTION], RTRIM(ISNULL(HAN.[NAME], '')) AS [HANDLERNAME], RTRIM(ISNULL(TEA.[NAME], '')) AS [TEAMNAME], ISNULL(convert(VARCHAR, BGD.[DATE], 106), '') AS [DATE], RTRIM(ISNULL(BGD.[Narrative], '')) AS [COMMENT], BGD.[InvoiceNo], BGD.[CHARGE], CASE WHEN BGD.[Type] = 'F' THEN IsNull(TIE.[CHARGE], 0) ELSE convert(decimal(19,2), IsNull(MAL.[VALUEO], 0)) END AS [ORIGINALCHARGE], BGD.[BilledAmount], BGD.[CHARGE] - BGD.[BilledAmount] AS [LeftToBill], BGD.[BillNow], BGD.[SeqNo], convert(VARCHAR(38), BGD.[ID]) AS [ItemID], BGD.[OriginalID] FROM [dbo].[BGDetail] BGD LEFT OUTER JOIN [dbo].[OutlayCode] OLC ON OLC.[CODE] = BGD.[OUTLAYCODE] LEFT OUTER JOIN [dbo].[HANDLERS] HAN LEFT OUTER JOIN [dbo].[HANDLERS] TEA ON TEA.[CODE] = HAN.[TEAM] ON HAN.[CODE] = BGD.[FEEEARN] LEFT OUTER JOIN [dbo].[TimeEntry] TIE ON BGD.[Type] = 'F' AND TIE.[RECORDID] = BGD.[OriginalID] LEFT OUTER JOIN [dbo].[MatterLedger] MAL ON BGD.[Type] = 'O' AND MAL.[LREF] = BGD.[OriginalID] WHERE BGD.[BGGroupID] = @GroupID GO --Consistency improvement. Remove earlier version named KAAS_NETBG(etc) IF OBJECT_ID('KAAS_FNBGListGroupedEntries',N'IF') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FNBGListGroupedEntries] GO IF OBJECT_ID('KAAS_BGIFListGroupedEntries',N'IF') IS NOT NULL DROP FUNCTION [dbo].[KAAS_BGIFListGroupedEntries] GO CREATE FUNCTION [dbo].[KAAS_BGIFListGroupedEntries] (@ControlID int) RETURNS TABLE AS /****************************************************************** * KAAS_BGIFListGroupedEntries * * Modification History: * ????-??-?? ???????????? Created * 2024-03-26 Pino Carafa Imported into KAAS * ******************************************************************/ RETURN SELECT CASE WHEN (SUMM.[IncludeInBill] = 2) THEN 'Exclude' WHEN SUMM.[BillNow] = 0 THEN 'Don''t Bill' WHEN SUMM.[AnyIncompleteItems] = 1 THEN 'Bill Partially' ELSE 'Bill in Full' END AS [IncludeInBill], SUMM.[Type], SUMM.[MATTER], SUMM.[FEEEARN], SUMM.[OUTLAYCODE], CASE WHEN SUMM.[OUTLAYCODE] = '(multiple)' THEN '(multiple)' WHEN SUMM.[OUTLAYCODE] = '' THEN '' ELSE ISNULL(OLC.[Description], '') END AS [OUTLAYDESCRIPTION], CASE WHEN SUMM.[FEEEARN] = '(multiple)' THEN '(multiple)' WHEN SUMM.[FEEEARN] = '' THEN '' ELSE ISNULL(HAN.[NAME], '') END AS [HANDLERNAME], CASE WHEN SUMM.[FEEEARN] = '(multiple)' THEN '(multiple)' WHEN SUMM.[FEEEARN] = '' THEN '' ELSE ISNULL(TEA.[NAME], '') END AS [TEAMNAME], SUMM.[DATE], BGG2.[Narrative] AS [COMMENT], SUMM.[InvoiceNo], SUMM.[CHARGE], SUMM.[ORIGINALCHARGE], SUMM.[BilledAmount], SUMM.[LeftToBill], SUMM.[BillNow], BGG2.[SeqNo] AS [GroupNumber], SUMM.[NumberOfDetailItems], CASE WHEN SUMM.[NumberOfDetailItems] = 1 THEN 0 ELSE 1 END AS [Grouped], CONVERT(VARCHAR(38), BGG2.[ID]) AS [GroupID] FROM ( SELECT BGG.[ID], CASE WHEN COUNT(DISTINCT BGD.[Type]) = 1 THEN ISNULL(MAX(BGD.[Type]), '') ELSE '(multiple)' END AS [Type], CASE WHEN COUNT(DISTINCT BGD.[MATTER]) = 1 THEN ISNULL(MAX(BGD.[MATTER]), '') ELSE '(multiple)' END AS [MATTER], CASE WHEN COUNT(DISTINCT BGD.[FEEEARN]) = 1 THEN ISNULL(MAX(BGD.[FEEEARN]), '') ELSE '(multiple)' END AS [FEEEARN], CASE WHEN COUNT(DISTINCT ISNULL(BGD.[OUTLAYCODE], '')) = 1 THEN ISNULL(MAX(BGD.[OUTLAYCODE]), '') ELSE '(multiple)' END AS [OUTLAYCODE], CASE WHEN COUNT(DISTINCT ISNULL(convert(VARCHAR, BGD.[DATE], 106), '')) = 1 THEN ISNULL(MAX(convert(VARCHAR, BGD.[DATE], 106)), '') ELSE '(multiple)' END AS [DATE], CASE WHEN COUNT(DISTINCT ISNULL(BGD.[InvoiceNo], 0)) = 1 THEN ISNULL(MAX(BGD.[InvoiceNo]), 0) ELSE 0 END AS [InvoiceNo], SUM(ISNULL(BGD.[CHARGE], 0)) AS [CHARGE], SUM(CASE WHEN BGD.[Type] = 'F' THEN IsNull(TIE.[CHARGE], 0) ELSE convert(decimal(19,2), IsNull(MAL.[VALUEO], 0)) END) AS [ORIGINALCHARGE], SUM(ISNULL(BGD.[BilledAmount], 0)) AS [BilledAmount], SUM(ISNULL(BGD.[BillNow], 0)) AS [BillNow], SUM(ISNULL(BGD.[CHARGE], 0)) - SUM(ISNULL(BGD.[BilledAmount], 0)) AS [LeftToBill], MAX(CASE WHEN ISNULL(BGD.[CHARGE], 0) = ISNULL(BGD.[BilledAmount], 0) + ISNULL(BGD.[BillNow], 0) THEN 0 ELSE 1 END) AS AnyIncompleteItems, CASE WHEN ISNULL(MIN(BGD.IncludeInBill), 1) <> 2 THEN 1 ELSE 2 END AS [IncludeInBill], COUNT(1) AS [NumberOfDetailItems] FROM [dbo].[BGControl] BGC INNER JOIN [dbo].[BGGroups] BGG INNER JOIN [dbo].[BGDetail] BGD LEFT OUTER JOIN [dbo].[TimeEntry] TIE ON BGD.[Type] = 'F' AND TIE.[RECORDID] = BGD.[OriginalID] LEFT OUTER JOIN [dbo].[MatterLedger] MAL ON BGD.[Type] = 'O' AND MAL.[LREF] = BGD.[OriginalID] ON BGD.[BGGroupID] = BGG.[ID] ON BGG.[BGControlID] = BGC.[ID] WHERE BGC.[ID] = @ControlID GROUP BY BGG.[BGControlID], BGG.[SeqNo], BGG.[ID]) SUMM INNER JOIN [dbo].[BGGroups] BGG2 ON BGG2.[ID] = SUMM.[ID] LEFT OUTER JOIN [dbo].[OutlayCode] OLC ON OLC.[CODE] = SUMM.[OUTLAYCODE] LEFT OUTER JOIN [dbo].[HANDLERS] HAN LEFT OUTER JOIN [dbo].[HANDLERS] TEA ON TEA.[CODE] = HAN.[TEAM] ON HAN.[CODE] = SUMM.[FEEEARN] GO IF [dbo].[ISSAM4]() = 0 BEGIN EXEC (' IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N''KAAS_BGNewBillFeeBreakdown'' AND SO.[type] = ''TF'') BEGIN DROP FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdown] END') EXEC ('CREATE FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdown] (@DraftNo INT) RETURNS @BFEB TABLE ([MATTER] VARCHAR(20), [DRAFTNO] INT, [BILLNO] INT, [FECODE] VARCHAR(10), [TYPE] VARCHAR(1), [PERCENT] DECIMAL(5, 2), [CALCULATION] DECIMAL(9, 5), [VALUE] DECIMAL(11, 2), [VATCODE] VARCHAR(1), [VATAMT] DECIMAL(11, 2), [VATCalculation] DECIMAL(15, 5)) AS /************************************************************************* * * ky_BGNewBillFeeBreakdown * * For specified draft bill, returns a FE breakdown based on the billing guide * * ????-??-?? ???? Created * 2018-08-02 John Ginnane Added SAM4 support * 2019-10-01 John Ginnane KEYD-5953 - Use the handlers FE code if possible * *************************************************************************/ BEGIN DECLARE @TOTALBILLED DECIMAL(23, 7) DECLARE @BILLEDBYFE TABLE ([FECODE] VARCHAR(10), [TOTALBILLED] DECIMAL(23, 7), [CALCULATION] DECIMAL(23, 7), [PERCENT] DECIMAL(23, 7)) SELECT @TOTALBILLED = ISNULL(SUM(BGDT.[BillNow]), 0) FROM [dbo].[BGControl] BGCT INNER JOIN [dbo].[BGGroups] BGGT INNER JOIN [dbo].[BGDetail] BGDT ON BGDT.[BGGroupID] = BGGT.[ID] AND BGDT.[TYPE] = ''F'' ON BGGT.[BGControlID] = BGCT.[ID] WHERE BGCT.[DraftNo] = @DraftNo IF @TOTALBILLED = 0 BEGIN RETURN END INSERT INTO @BILLEDBYFE ([FECODE], [TOTALBILLED]) SELECT CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BGDG.[FEEEARN] END AS [FECODE], SUM(BGDG.[BillNow]) As [TotalBilled] FROM [dbo].[BGControl] BGCG INNER JOIN [dbo].[BGGroups] BGGG ON BGGG.[BGControlID] = BGCG.[ID] INNER JOIN [dbo].[BGDetail] BGDG ON BGDG.[BGGroupID] = BGGG.[ID] AND BGDG.[TYPE] = ''F'' LEFT OUTER JOIN [dbo].[Handlers] AS [HAN] ON [HAN].[CODE] = [BGDG].[FEEEARN] LEFT OUTER JOIN [dbo].[FeeEarnerCodes] AS [FEC] ON [FEC].[Code] = [HAN].[MAILADDRESS] WHERE BGCG.[DraftNo] = @DraftNo GROUP BY BGCG.[ID], CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BGDG.[FEEEARN] END UPDATE BBFE SET BBFE.[CALCULATION] = BF2.[CALCULATION] - BF1.[CALCULATION], BBFE.[PERCENT] = BF2.[PERCENT] - BF1.[PERCENT] FROM @BILLEDBYFE BBFE CROSS APPLY (SELECT ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE1.[TOTALBILLED]), 0)) / @TOTALBILLED, 5) AS [CALCULATION], ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE1.[TOTALBILLED]), 0)) / @TOTALBILLED, 2) AS [PERCENT] FROM @BILLEDBYFE BBFE1 WHERE BBFE1.[FECODE] < BBFE.[FECODE]) BF1 CROSS APPLY (SELECT ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE2.[TOTALBILLED]), 0)) / @TOTALBILLED, 5) AS [CALCULATION], ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE2.[TOTALBILLED]), 0)) / @TOTALBILLED, 2) AS [PERCENT] FROM @BILLEDBYFE BBFE2 WHERE BBFE2.[FECODE] <= BBFE.[FECODE]) BF2 INSERT INTO @BFEB ([MATTER], [DRAFTNO], [BILLNO], [FECODE], [TYPE], [PERCENT], [CALCULATION], [VALUE], [VATCODE], [VATAMT], [VATCalculation]) SELECT BGC.[MATTER], BGC.[DRAFTNO], GG.[InvoiceNo] AS [BILLNO], GG.[FECODE], ''F'' AS [TYPE], BBFE.[PERCENT], BBFE.[CALCULATION], CONVERT(DECIMAL(11, 2), IsNull(GG.[TotalBilled], 0)) AS [VALUE], CON.[DEFAULTVAT] As [VATCODE], CONVERT(DECIMAL(11, 2), (IsNull(GG.[TotalBilled], 0) * IsNull(VCD.[RATE], 0)) / 100) AS [VATAMT], CONVERT(DECIMAL(15, 5), Round((IsNull(GG.[TotalBilled], 0) * IsNull(VCD.[RATE], 0)) / 100, 5)) AS [VATCalculation] FROM ( SELECT BGCG.[ID], CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BGDG.[FEEEARN] END AS [FECODE], Max(BGDG.[InvoiceNo]) As [InvoiceNo], SUM(BGDG.[BillNow]) As [TotalBilled] FROM [dbo].[BGControl] BGCG INNER JOIN [dbo].[BGGroups] BGGG ON BGGG.[BGControlID] = BGCG.[ID] INNER JOIN [dbo].[BGDetail] BGDG ON BGDG.[BGGroupID] = BGGG.[ID] AND BGDG.[TYPE] = ''F'' LEFT OUTER JOIN [dbo].[Handlers] AS [HAN] ON [HAN].[CODE] = [BGDG].[FEEEARN] LEFT OUTER JOIN [dbo].[FeeEarnerCodes] AS [FEC] ON [FEC].[Code] = [HAN].[MAILADDRESS] WHERE BGCG.[DraftNo] = @DraftNo GROUP BY BGCG.[ID], CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BGDG.[FEEEARN] END) GG CROSS JOIN ( SELECT BGCT.[ID], SUM(BGDT.[BillNow]) AS [TotalBilled] FROM [dbo].[BGControl] BGCT INNER JOIN [dbo].[BGGroups] BGGT INNER JOIN [dbo].[BGDetail] BGDT ON BGDT.[BGGroupID] = BGGT.[ID] AND BGDT.[TYPE] = ''F'' ON BGGT.[BGControlID] = BGCT.[ID] WHERE BGCT.[DraftNo] = @DraftNo GROUP BY BGCT.[ID]) GT INNER JOIN [dbo].[BGControl] BGC ON BGC.[ID] = GG.[ID] CROSS JOIN [dbo].[CONTROL] CON INNER JOIN [dbo].[VATCodes] VCD ON VCD.[CODE] = CON.[DEFAULTVAT] INNER JOIN @BILLEDBYFE BBFE ON BBFE.[FECODE] = GG.[FECODE] RETURN END') END GO IF [dbo].[ISSAM4]() = 0 BEGIN EXEC (' IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N''KAAS_BGNewBillFeeBreakdownBD'' AND SO.[type] = ''IF'') BEGIN DROP FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdownBD] END') EXEC ('create function [dbo].[KAAS_BGNewBillFeeBreakdownBD] (@DraftNo int) RETURNS TABLE AS /************************************************************************** * * ky_BGNewBillFeeBreakdownBD * * Generates a new invoice breakdown based on the bill details * * Modification History * ????-??-?? ???? Created * * 2017-10-27 John Fixed potential overflow issues on [VATAMT] - KEYD-4827 * 2020-04-18 Arun copied from ky_BGNewBillFeeBreakdownBD **************************************************************************/ RETURN SELECT GG.[MATTER], GG.[DRAFTNO], GG.[InvoiceNo] AS [BILLNO], GG.[FECODE], ''F'' AS [TYPE], convert(decimal(5, 2), Round(CASE WHEN IsNull(GT.[TotalBilled], 0) = 0 THEN 0 ELSE 100 * (IsNull(GG.[TotalBilled], 0) / GT.[TotalBilled]) END, 5)) AS [PERCENT], convert(decimal(9, 5), Round(CASE WHEN IsNull(GT.[TotalBilled], 0) = 0 THEN 0 ELSE 100 * (IsNull(GG.[TotalBilled], 0) / GT.[TotalBilled]) END, 5)) AS [CALCULATION], CONVERT(decimal(11, 2), IsNull(GG.[TotalBilled], 0)) AS [VALUE], GG.[VATCode] AS [VATCODE], --CON.[DEFAULTVAT] As [VATCODE], CONVERT(decimal(11, 2), (IsNull(GG.[TotalBilled], 0) * IsNull(VCD.[RATE], 0)) / 100) AS [VATAMT], CONVERT(decimal(15, 5), ROUND((IsNull(GG.[TotalBilled], 0) * IsNull(VCD.[RATE], 0)) / 100, 5)) AS [VATCalculation] FROM ( select BDL.[DraftNo] AS [DRAFTNO], BDL.[Matter] AS [MATTER], BDL.[FEEEARNER] AS [FECODE], BDL.[BILLNO] As [InvoiceNo], SUM(BDL.[NET]) As [TotalBilled], BDL.[VATCODE] AS [VATCODE] from [dbo].[BillDetails] BDL WHERE BDL.[DraftNo] = @DraftNo and BDL.[TYPE] = ''F'' GROUP BY BDL.[DraftNo], BDL.[BillNo], BDL.[Matter], BDL.[FEEEARNER], BDL.[VATCODE]) GG CROSS JOIN ( select SUM(BD.[NET]) AS [TotalBilled] from [dbo].[BillDetails] BD WHERE BD.[DraftNo] = @DraftNo AND BD.[Type] = ''F'') GT CROSS JOIN [dbo].[CONTROL] CON INNER JOIN [dbo].[VATCodes] VCD ON VCD.[CODE] = [VATCODE] --CON.[DEFAULTVAT]') END GO IF [dbo].[ISSAM4]() = 1 BEGIN EXEC (' IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N''KAAS_BGNewBillFeeBreakdownBDSAM4'' AND SO.[type] = ''IF'') BEGIN DROP FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdownBDSAM4] END') EXEC ('CREATE FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdownBDSAM4] (@DraftNo int) RETURNS TABLE AS /************************************************************************** * * ky_BGNewBillFeeBreakdownBD * * Generates a new invoice breakdown based on the bill details * * Modification History * 2018-08-02 John Created * 2020-04-18 Arun Copied from ky_BGNewBillFeeBreakdownBD **************************************************************************/ RETURN SELECT GG.[DRAFTNO] AS [BillingNo], GG.[FECODE] AS [FeCode], CONVERT(SMALLMONEY, ROUND(CASE WHEN ISNULL(GT.[TotalBilled], 0) = 0 THEN 0 ELSE 100 * (ISNULL(GG.[TotalBilled], 0) / GT.[TotalBilled]) END, 6)) AS [Percentage], CONVERT(DECIMAL(19, 2), ISNULL(GG.[TotalBilled], 0)) AS [FeeValue], ''F'' AS [LineType], CONVERT(DECIMAL(11, 2), (ISNULL(GG.[TotalBilled], 0) * ISNULL(VCD.[RATE], 0)) / 100) AS [VatValue], GG.[VATCODE] AS [VatCode], ISNULL(VCD.[RATE], 0) AS [VatRate], FEC.[NominalCode], CONVERT(DECIMAL(5, 2), ROUND(CASE WHEN ISNULL(GT.[TotalBilled], 0) = 0 THEN 0 ELSE 100 * (ISNULL(GG.[TotalBilled], 0) / GT.[TotalBilled]) END, 6)) AS [Calculation] FROM ( SELECT BDL.[BillID] AS [DRAFTNO], BDL.[FeCode] AS [FECODE], CONVERT(DECIMAL(19, 2), SUM(ISNULL(BDL.[NetValue], 0))) As [TotalBilled], BDL.[VATCODE] AS [VATCODE] FROM [dbo].[BillDetail] BDL WHERE BDL.[BillID] = @DraftNo AND BDL.[RecordType] = ''F'' GROUP BY BDL.[BillID], BDL.[FeCode], BDL.[VatCode]) AS GG CROSS JOIN ( SELECT CONVERT(DECIMAL(19, 2), SUM(BD.[NetValue])) AS [TotalBilled] FROM [dbo].[BillDetail] BD WHERE BD.[BillID] = @DraftNo AND BD.[RecordType] = ''F'') GT CROSS JOIN (SELECT TOP 1 CTRL.[StrValue] FROM [dbo].[CtrlStr] AS CTRL WHERE CTRL.[Code] = ''DefaultVAT'') AS CON INNER JOIN [dbo].[VATCodes] VCD ON VCD.[CODE] = CON.[StrValue] LEFT OUTER JOIN [dbo].[FeeEarnerCodes] AS FEC ON FEC.[Code] = GG.[FECODE]') END GO IF [dbo].[ISSAM4]() = 1 BEGIN EXEC (' IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N''KAAS_BGNewBillFeeBreakdownSAM4'' AND SO.[type] = ''TF'') BEGIN DROP FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdownSAM4] END') EXEC (' CREATE FUNCTION [dbo].[KAAS_BGNewBillFeeBreakdownSAM4] (@DraftNo INT) RETURNS @BFEB TABLE ([BillingNo] INT, [FECode] VARCHAR(10), [Percentage] SMALLMONEY, [FeeValue] DECIMAL(19, 2), [LineType] VARCHAR(10), [VatValue] DECIMAL(19, 2), [VatCode] VARCHAR(10), [VatRate] DECIMAL(19, 2), [NominalCode] VARCHAR(10), [Calculation] DECIMAL(19, 2)) AS /************************************************************************* * * ky_BGNewBillFeeBreakdown * * For specified draft bill, returns a FE breakdown based on the billing guide * * ????-??-?? ???? Created * 2018-08-02 John Ginnane Added SAM4 support * 2019-10-01 John Ginnane KEYD-5953 - Use the handlers FE code if possible * *************************************************************************/ BEGIN DECLARE @TOTALBILLED DECIMAL(23, 7) DECLARE @BILLEDBYFE TABLE ([FECODE] VARCHAR(10), [TOTALBILLED] DECIMAL(23, 7), [PERCENT] DECIMAL(23, 7), [CALCULATION] DECIMAL(23, 7)) SELECT @TOTALBILLED = ISNULL(SUM(BG.[ChargeValue]), 0) FROM [dbo].[BillingGuide] AS BG WHERE BG.[BillingNo] = @DraftNo AND RTRIM(ISNULL(BG.[Tag], '''')) = ''Y'' AND RTRIM(ISNULL(BG.[ChargeType], '''')) IN (''C'', ''T'') IF @TOTALBILLED = 0 BEGIN RETURN END INSERT INTO @BILLEDBYFE ([FECODE], [TOTALBILLED]) SELECT CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BG.[FeCode] END AS [FECODE], SUM(ISNULL(BG.[ChargeValue], 0)) AS [TotalBilled] FROM [dbo].[BillingGuide] AS BG LEFT OUTER JOIN [dbo].[Handlers] AS [HAN] ON [HAN].[CODE] = [BG].[FeCode] LEFT OUTER JOIN [dbo].[FeeEarnerCodes] AS [FEC] ON [FEC].[Code] = [HAN].[MAILADDRESS] WHERE BG.[BillingNo] = @DraftNo AND RTRIM(ISNULL(BG.[Tag], '''')) = ''Y'' AND RTRIM(ISNULL(BG.[ChargeType], '''')) IN (''C'', ''T'') GROUP BY CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BG.[FeCode] END UPDATE BBFE SET BBFE.[PERCENT] = BF2.[PERCENT] - BF1.[PERCENT], BBFE.[CALCULATION] = BF2.[CALCULATION] - BF1.[CALCULATION] FROM @BILLEDBYFE BBFE CROSS APPLY (SELECT ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE1.[TOTALBILLED]), 0)) / @TOTALBILLED, 2) AS [CALCULATION], ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE1.[TOTALBILLED]), 0)) / @TOTALBILLED, 5) AS [PERCENT] FROM @BILLEDBYFE BBFE1 WHERE BBFE1.[FECODE] < BBFE.[FECODE]) BF1 CROSS APPLY (SELECT ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE2.[TOTALBILLED]), 0)) / @TOTALBILLED, 2) AS [CALCULATION], ROUND((CONVERT(DECIMAL(23, 7), 100) * ISNULL(SUM(BBFE2.[TOTALBILLED]), 0)) / @TOTALBILLED, 5) AS [PERCENT] FROM @BILLEDBYFE BBFE2 WHERE BBFE2.[FECODE] <= BBFE.[FECODE]) BF2 INSERT INTO @BFEB ([BillingNo], [FECode], [Percentage], [FeeValue], [LineType], [VatValue], [VatCode], [VatRate], [NominalCode], [Calculation]) SELECT GG.[ID] AS [BillingNo], GG.[FECODE] AS [FECode], BBFE.[PERCENT] AS [Percentage], ISNULL(GG.[BillNow], 0) AS [FeeValue], ''F'' AS [LineType], CONVERT(DECIMAL(19, 2), ISNULL(GG.[BillNow], 0) * (ISNULL(VCD.[RATE], 0) / 100)) AS [VatValue], CON.[StrValue] AS [VatCode], VCD.[RATE] AS [VatRate], FEC.[NominalCode] AS [NominalCode], CONVERT(DECIMAL(19, 2), BBFE.[CALCULATION]) AS [Calculation] FROM ( SELECT BG.[BillingNo] AS [ID], CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BG.[FeCode] END AS [FECODE], CONVERT(DECIMAL(19, 2), SUM(ISNULL(BG.[ChargeValue], 0))) AS [BillNow] FROM [dbo].[BillingGuide] AS BG LEFT OUTER JOIN [dbo].[Handlers] AS [HAN] ON [HAN].[CODE] = [BG].[FeCode] LEFT OUTER JOIN [dbo].[FeeEarnerCodes] AS [FEC] ON [FEC].[Code] = [HAN].[MAILADDRESS] WHERE BG.[BillingNo] = @DraftNo AND BG.[ChargeType] IN (''T'', ''C'') AND BG.[Tag] = ''Y'' GROUP BY BG.[BillingNo], CASE WHEN [HAN].[CODE] IS NOT NULL AND [FEC].[Code] IS NOT NULL THEN [FEC].[Code] ELSE BG.[FeCode] END) AS GG CROSS JOIN ( SELECT BG.[BillingNo] AS [ID], CONVERT(DECIMAL(19, 2), SUM(ISNULL(BG.[ChargeValue], 0))) AS [TotalBilled] FROM [dbo].[BillingGuide] AS BG WHERE BG.[BillingNo] = @DraftNo AND BG.[ChargeType] IN (''T'', ''C'') AND BG.[Tag] = ''Y'' GROUP BY BG.[BillingNo]) AS GT CROSS JOIN (SELECT TOP 1 CTRL.[StrValue] FROM [dbo].[CtrlStr] AS CTRL WHERE CTRL.[Code] = ''DefaultVAT'') AS CON INNER JOIN [dbo].[VATCodes] VCD ON VCD.[CODE] = CON.[StrValue] INNER JOIN @BILLEDBYFE BBFE ON BBFE.[FECODE] = GG.[FECODE] LEFT OUTER JOIN [dbo].[FeeEarnerCodes] AS FEC ON FEC.[Code] = GG.[FECODE] RETURN END') END GO IF OBJECT_ID('KAAS_ConvertTimeToClarion',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_ConvertTimeToClarion] GO /************************************************************************************** * * * Stored Procedure : [KAAS_ConvertTimeToClarion] * * Copied From : [ky_ConvertTimeToClarion] * * * * converts a SQL Date (ignoring any DATE part in that date) * * to the Clarion Time value, i.e. the number of 1/100 of a second since * * midnight, plus one. * * * * 2019-06-04 Vinodhan Created [KAAS__ConvertTimeToClarion] * * * **************************************************************************************/ create function [dbo].[KAAS_ConvertTimeToClarion] (@datetime datetime) RETURNS int AS BEGIN DECLARE @hour int DECLARE @minute int DECLARE @second int DECLARE @centi int DECLARE @result int SET @centi = convert(int, convert(decimal(4, 1), DATEPART(millisecond, @datetime)) / convert(decimal(4, 1), 10)) SET @second = DATEPART(second, @datetime) SET @minute = DATEPART(minute, @datetime) SET @hour = DATEPART(hour, @datetime) SET @result = @hour SET @result = 60 * @result SET @result = @result + @minute SET @result = 60 * @result SET @result = @result + @second SET @result = 100 * @result SET @result = @result + @centi + 1 RETURN @result END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FNConvertDateToUTC' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FNConvertDateToUTC] END GO DECLARE @Compatible BIT SET @Compatible = CASE WHEN ServerProperty('EngineEdition') = 5 THEN 1 WHEN @@VERSION LIKE '%SQL Server 2008%' THEN 0 WHEN @@VERSION LIKE '%SQL Server 2012%' THEN 0 WHEN @@VERSION LIKE '%SQL Server 2014%' THEN 0 ELSE 1 END IF @Compatible = 1 BEGIN EXEC ('CREATE FUNCTION [dbo].[KAAS_FNConvertDateToUTC] ( @Date DATETIME, @Handler NVARCHAR(10) ) RETURNS DATETIME WITH RETURNS NULL ON NULL INPUT AS /******************************************************************************************************* * This function is used to convert local time to UTC * * * * Function : KAAS_FNGetDateForTimeZone * * * * Modification History : * * 2019-10-29 Arun V Created * * 2022-05-16 Vignesh M Modified Condition added for time conversion * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *******************************************************************************************************/ BEGIN Declare @NewDate DATETIME IF CONVERT(TIME, @Date) <> ''00:00:00:000'' SELECT @NewDate = @Date AT TIME ZONE dbo.KAAS_FNGetHandlerTimeZone(@Handler) AT TIME ZONE ''UTC'' ELSE SELECT @NewDate = @Date RETURN (SELECT @NewDate) End') END ELSE BEGIN EXEC ('CREATE FUNCTION [dbo].[KAAS_FNConvertDateToUTC] ( @Date DATETIME, @Handler NVARCHAR(10) ) RETURNS DATETIME WITH RETURNS NULL ON NULL INPUT AS /******************************************************************************************************* * This function is used to convert local time to UTC * * * * Function : KAAS_FNConvertDateToUTC * * * * Modification History : * * 2019-10-29 Arun V Created * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *******************************************************************************************************/ BEGIN RETURN ( SELECT @Date ) End') END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FNConvertUTCDateToTargetTimeZone' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FNConvertUTCDateToTargetTimeZone] END GO DECLARE @Compatible BIT SET @Compatible = CASE WHEN ServerProperty('EngineEdition') = 5 THEN 1 WHEN @@VERSION LIKE '%SQL Server 2008%' THEN 0 WHEN @@VERSION LIKE '%SQL Server 2012%' THEN 0 WHEN @@VERSION LIKE '%SQL Server 2014%' THEN 0 ELSE 1 END IF @Compatible = 1 BEGIN EXEC ('CREATE FUNCTION [dbo].[KAAS_FNConvertUTCDateToTargetTimeZone] ( @Date DATETIME, @Handler NVARCHAR(10) ) RETURNS DATETIME AS /******************************************************************************************************* * This function is used to convert local time to specified zone time. default is GMT * * * * Function : KAAS_FNGetDateForTimeZone * * * * Modification History : * * 2019-07-03 Rajesh P Created * *******************************************************************************************************/ BEGIN RETURN ( SELECT CONVERT(DATETIME,CONVERT(DATETIMEOFFSET, @Date) AT TIME ZONE (SELECT dbo.KAAS_FNGetHandlerTimeZone(@Handler))) ) End') END ELSE BEGIN EXEC ('CREATE FUNCTION [dbo].[KAAS_FNConvertUTCDateToTargetTimeZone] ( @Date DATETIME, @Handler NVARCHAR(10) ) RETURNS DATETIME AS /******************************************************************************************************* * This function is used to convert local time to specified zone time. default is GMT * * * * Function : KAAS_FNGetDateForTimeZone * * * * Modification History : * * 2019-07-03 Rajesh P Created * *******************************************************************************************************/ BEGIN RETURN ( SELECT @Date ) End') END GO IF EXISTS (SELECT TOP 1 1 FROM sys.objects [SO] WHERE [SO].[name] = 'KAAS_FNGetBigVersionFromVersion' AND [SO].[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FNGetBigVersionFromVersion] END GO CREATE FUNCTION [dbo].[KAAS_FNGetBigVersionFromVersion] (@Version VARCHAR(20)) RETURNS BIGINT AS /************************************************************************************************************* * * * [dbo].[KAAS_FNGetBigVersionFromVersion] * * * * convert a Version Number to a BIGINT * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.9.2.13 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2024-01-29 Pino Carafa Created * * * *************************************************************************************************************/ BEGIN DECLARE @Hotfix VARCHAR(20) DECLARE @MajorVersion INT DECLARE @MinorVersion INT DECLARE @Build INT DECLARE @Revision INT DECLARE @INTPOS INT DECLARE @BIGVERSION BIGINT DECLARE @VERSIONNO VARCHAR(20) SET @Hotfix = ISNULL(@Version, '0.0.0.0') IF CHARINDEX('=', @Hotfix) > 0 BEGIN SET @Hotfix = SUBSTRING(@Hotfix, CHARINDEX('=', @Hotfix) + 1, LEN(@Hotfix) - CHARINDEX('=', @Hotfix)) END IF @Hotfix <> '' BEGIN SET @INTPOS = CHARINDEX('.', @Hotfix) IF @INTPOS < 2 BEGIN SET @MajorVersion = 0 END ELSE BEGIN SET @VERSIONNO = SUBSTRING(@Hotfix, 1, @INTPOS - 1) IF ISNUMERIC(@VERSIONNO) = 0 BEGIN SET @MajorVersion = 0 END ELSE BEGIN SET @MajorVersion = CONVERT(INT, @VERSIONNO) END END IF @INTPOS > 0 BEGIN SET @Hotfix = SUBSTRING(@Hotfix, @INTPOS + 1, LEN(@Hotfix) - @INTPOS) END SET @INTPOS = 0 SET @INTPOS = CHARINDEX('.', @Hotfix) IF @INTPOS < 2 BEGIN SET @MinorVersion = 0 END ELSE BEGIN SET @VERSIONNO = SUBSTRING(@Hotfix, 1, @INTPOS - 1) IF ISNUMERIC(@VERSIONNO) = 0 BEGIN SET @MinorVersion = 0 END ELSE BEGIN SET @MinorVersion = CONVERT(INT, @VERSIONNO) END END IF @INTPOS > 0 BEGIN SET @Hotfix = SUBSTRING(@Hotfix, @INTPOS + 1, LEN(@Hotfix) - @INTPOS) END SET @INTPOS = 0 SET @INTPOS = CHARINDEX('.', @Hotfix) IF @INTPOS < 2 BEGIN SET @Build = 0 END ELSE BEGIN SET @VERSIONNO = SUBSTRING(@Hotfix, 1, @INTPOS - 1) IF ISNUMERIC(@VERSIONNO) = 0 BEGIN SET @Build = 0 END ELSE BEGIN SET @Build = CONVERT(INT, @VERSIONNO) END END IF @INTPOS > 0 BEGIN SET @Hotfix = SUBSTRING(@Hotfix, @INTPOS + 1, LEN(@Hotfix) - @INTPOS) END IF @Hotfix = '' BEGIN SET @Revision = 0 END ELSE IF ISNUMERIC(@Hotfix) = 0 BEGIN SET @Revision = 0 END ELSE BEGIN SET @Revision = CONVERT(INT, @Hotfix) END --SELECT @MajorVersion, @MinorVersion, @Build, @Revision END SET @BIGVERSION = @MajorVersion SET @BIGVERSION = CONVERT(BIGINT, 1000) * @BIGVERSION SET @BIGVERSION = @BIGVERSION + CONVERT(BIGINT, @Minorversion) SET @BIGVERSION = CONVERT(BIGINT, 1000) * @BIGVERSION SET @BIGVERSION = @BIGVERSION + CONVERT(BIGINT, @Build) SET @BIGVERSION = CONVERT(BIGINT, 10000) * @BIGVERSION SET @BIGVERSION = @BIGVERSION + CONVERT(BIGINT, @Revision) RETURN @BIGVERSION END GO IF OBJECT_ID('KAAS_FNGetHandlerTimeZone',N'FN') IS NOT NULL DROP FUNCTION KAAS_FNGetHandlerTimeZone GO CREATE FUNCTION [dbo].[KAAS_FNGetHandlerTimeZone]( @Handler VARCHAR(10) ) RETURNS NVARCHAR(50) AS /******************************************************************************************************* * This function is used to get the handler time zone, for now its default to GMT standard Time * * * * Function : KAAS_FNGetDateForTimeZone * * * * Modification History : * * 2019-07-03 Rajesh P Created * * 2019-09-24 Arun V Handler Code added to get used based time zone, default to GMT * *******************************************************************************************************/ BEGIN DECLARE @HandlerTimeZone NVARCHAR(50) SELECT @HandlerTimeZone = [Value] FROM UserSettings WHERE [Handler] = @Handler AND [Key] = 'TimeZone' SELECT @HandlerTimeZone = ISNULL(@HandlerTimeZone, 'GMT Standard Time') RETURN @HandlerTimeZone End GO IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO WHERE SO.[name] = 'KAAS_FNGetMaxNumericClient' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FNGetMaxNumericClient] END GO CREATE FUNCTION [dbo].[KAAS_FNGetMaxNumericClient] () RETURNS INT WITH RETURNS NULL ON NULL INPUT AS /**************************************************************************************** [dbo].[KAAS_FNGetMaxNumericClient] Description: This stored procedure is used to get the last used Integer contact code. Modification History 2015-06-09 Pino Carafa Make sure that non-integer values that are recognised by IsNumeric as being numeric are excluded. That includes values containing dots, commas or the letter D, e.g. '0D0009' 2015-07-15 Arun Vasu Have added where condition to filter the letter E eg: '0E0009' 2015-12-23 John Ginnane Changed WHERE clause to exclude any codes that contain anything that's not a digit (0 to 9) - KEYD-3088 2019-06-19 Arun Vasu Copied from ky_NETFNGetMaxNumericClient 2023-01-31 Ghayathri.S.V. Modified to include return null when the input is null ****************************************************************************************/ BEGIN DECLARE @LastClient INT DECLARE @LastContact INT SELECT @LastClient = ISNULL(MAX(CONVERT(INT, ISNULL(CLT.[CLCODE], '0'))), 0) FROM [dbo].[client] CLT WHERE CLT.[CLCODE] NOT LIKE '%[^0-9]%' SELECT @LastContact = ISNULL(MAX(CONVERT(INT, ISNULL(CTC.[CODE], '0'))), 0) FROM [dbo].[Contacts] CTC WHERE CTC.[Code] NOT LIKE '%[^0-9]%' IF @LastContact > @LastClient RETURN @LastContact RETURN @LastClient END GO IF OBJECT_ID('KAAS_FN_AddressLine',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_AddressLine] GO CREATE FUNCTION [dbo].[KAAS_FN_AddressLine] (@ADDRESS VARCHAR(MAX), @LINENO INT) RETURNS VARCHAR(MAX) AS /********************************************************************** * * * Returns selected line number from multi-line Address * * * * Stored Procedure : KAAS_FN_AddressLine * * Copied From : [dbo].[KY_NETFNAddressLine] * * * * Scalar function can be used in SELECT statements * * * * Maintenance History * * 2015-08-24 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_AddressLine * * * *********************************************************************/ BEGIN DECLARE @RETURN VARCHAR(MAX) DECLARE @LINES TABLE ([ID] INT IDENTITY(1, 1), [LINE] VARCHAR(MAX)) DECLARE @START INT DECLARE @POS INT SET @ADDRESS = REPLACE(@ADDRESS, CHAR(13) + CHAR(10), CHAR(13)) SET @ADDRESS = REPLACE(@ADDRESS, CHAR(10), CHAR(13)) SET @START = 0 WHILE @START < LEN(@ADDRESS) BEGIN SET @POS = CHARINDEX(CHAR(13), @ADDRESS, @START + 1) IF @POS > 0 BEGIN INSERT INTO @LINES ([LINE]) VALUES(SUBSTRING(@ADDRESS, @START + 1, @POS - @START - 1)) SET @START = @POS END ELSE BEGIN IF @START < LEN(@ADDRESS) BEGIN INSERT INTO @LINES ([LINE]) VALUES(SUBSTRING(@ADDRESS, @START + 1, LEN(@ADDRESS) - @START)) END SET @START = LEN(@ADDRESS) END END SELECT @RETURN = L.[LINE] FROM @LINES L WHERE L.[ID] = @LINENO SET @RETURN = ISNULL(@RETURN, '') RETURN @RETURN END GO IF OBJECT_ID('KAAS_FN_ApplyOperator',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_ApplyOperator] GO CREATE FUNCTION [dbo].[KAAS_FN_ApplyOperator] (@ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Replaces standard operators with the f.Function Equivalents * * * * Stored Procedure : KAAS_FN_ApplyOperator * * Copied From : [dbo].[ky_NETFNApplyOperator] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-18 Pino Carafa Created * * 2019-01-21 Pino Carafa Distinguish addition '+' from concatenation '&'. '+' needs type awareness * * so that, e.g. Today() + 10 is interpreted as "10 days from today", but * * & is a simple string concatenation * * 2019-12-19 Vinodhan Created KAAS_FN_ApplyOperator * * * *************************************************************************************************************/ BEGIN DECLARE @OPERATORPOS INT DECLARE @OPERATORPOS2 INT SET @OPERATORPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('+', @ORIGINAL) SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('&', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('*', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('/', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END WHILE @OPERATORPOS > 0 BEGIN DECLARE @CHAR CHAR(1) SET @CHAR = SUBSTRING(@ORIGINAL, @OPERATORPOS, 1) IF @CHAR = '+' BEGIN SET @ORIGINAL = 'f.DoAdd(' + RTRIM(SUBSTRING(@ORIGINAL, 1, @OPERATORPOS - 1)) + ', ' + [dbo].[KAAS_FN_ApplyOperator](LTRIM(SUBSTRING(@ORIGINAL, @OPERATORPOS + 1, LEN(@ORIGINAL) - @OPERATORPOS))) + ')' END ELSE IF @CHAR = '&' BEGIN SET @ORIGINAL = 'f.Concatenate(' + RTRIM(SUBSTRING(@ORIGINAL, 1, @OPERATORPOS - 1)) + ', ' + [dbo].[KAAS_FN_ApplyOperator](LTRIM(SUBSTRING(@ORIGINAL, @OPERATORPOS + 1, LEN(@ORIGINAL) - @OPERATORPOS))) + ')' END ELSE IF @CHAR = '-' BEGIN SET @ORIGINAL = 'f.DoSubtract(' + RTRIM(SUBSTRING(@ORIGINAL, 1, @OPERATORPOS - 1)) + ', ' + [dbo].[KAAS_FN_ApplyOperator](LTRIM(SUBSTRING(@ORIGINAL, @OPERATORPOS + 1, LEN(@ORIGINAL) - @OPERATORPOS))) + ')' END ELSE IF @CHAR = '*' BEGIN SET @ORIGINAL = 'f.DoMultiply(' + RTRIM(SUBSTRING(@ORIGINAL, 1, @OPERATORPOS - 1)) + ', ' + [dbo].[KAAS_FN_ApplyOperator](LTRIM(SUBSTRING(@ORIGINAL, @OPERATORPOS + 1, LEN(@ORIGINAL) - @OPERATORPOS))) + ')' END ELSE IF @CHAR = '/' BEGIN SET @ORIGINAL = 'f.DoDivide(' + RTRIM(SUBSTRING(@ORIGINAL, 1, @OPERATORPOS - 1)) + ', ' + [dbo].[KAAS_FN_ApplyOperator](LTRIM(SUBSTRING(@ORIGINAL, @OPERATORPOS + 1, LEN(@ORIGINAL) - @OPERATORPOS))) + ')' END SET @OPERATORPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('+', @ORIGINAL) SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('&', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('*', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END SET @OPERATORPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('/', @ORIGINAL) IF (@OPERATORPOS2 > 0) AND (@OPERATORPOS2 < @OPERATORPOS) BEGIN SET @OPERATORPOS = @OPERATORPOS2 END ELSE IF @OPERATORPOS = 0 BEGIN SET @OPERATORPOS = @OPERATORPOS2 END END RETURN @ORIGINAL END GO IF OBJECT_ID('KAAS_FN_ConvertClarionTimeToHHMM',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_ConvertClarionTimeToHHMM] GO create function [dbo].[KAAS_FN_ConvertClarionTimeToHHMM] (@ClarionTime INT) returns VARCHAR(5) WITH RETURNS NULL ON NULL INPUT AS /************************************************************************************** * * converts an integer value between 1 and 8640000, representing a Clarion Time Value * in 1/100 of a Second since Midnight to a Time representation in HH:MM format * * Stored Procedure name : KAAS_FN_ConvertClarionTimeToHHMM * Copied From : ky_NETFNConvertClarionTimeToHHMM * * This function prevents Cardinality Estimate Warnings when used in SELECT statements * 2023-01-31 Ghayathri.S.V. Modified to include return null when the input is null **************************************************************************************/ BEGIN DECLARE @HHMM VARCHAR(5) DECLARE @HOUR INT DECLARE @MINUTE INT IF @ClarionTime IS NULL BEGIN SET @HHMM = '' END ELSE IF @ClarionTime < 1 BEGIN SET @HHMM = '' END ELSE IF @ClarionTime > 8640000 BEGIN SET @HHMM = '' END ELSE BEGIN SET @ClarionTime = @ClarionTime - 1 SET @HOUR = FLOOR(@ClarionTime / 360000) SET @ClarionTime = @ClarionTime - (@HOUR * 360000) SET @MINUTE = FLOOR(@ClarionTime / 6000) SET @HHMM = SUBSTRING(CONVERT(VARCHAR(3), 100 + @HOUR), 2, 2) + ':' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @MINUTE), 2, 2) END RETURN @HHMM END GO IF OBJECT_ID('KAAS_FN_ConvertDate',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_ConvertDate] GO CREATE FUNCTION [dbo].[KAAS_FN_ConvertDate] (@DATE DATETIME, @FORMAT VARCHAR(50)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Stored Procedure Name : KAAS_FN_ConvertDate * * Copied From : [dbo].[ky_NETFNConvertDate] * * * * An extended "Format" function * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-04 Pino Carafa Created * * 2019-01-11 Pino Carafa Added support for @d8 (DD MMM YYYY) format * * 2019-02-06 Pino Carafa Unnecessary space after 'D' format * * 2019-27-07 Vinodhan K Created KAAS_FN_ConvertDate * * * *************************************************************************************************************/ BEGIN IF ISNUMERIC(@FORMAT) = 1 BEGIN RETURN CONVERT(VARCHAR, @DATE, CONVERT(INT, @FORMAT)) END IF @Format = '@d6' BEGIN RETURN CONVERT(VARCHAR, @DATE, 103) END IF @Format = '@d8' BEGIN RETURN CONVERT(VARCHAR, @DATE, 106) END IF @format = '@d18' BEGIN RETURN CONVERT(VARCHAR(2), SUBSTRING(CONVERT(VARCHAR(3), 100 + DAY(@DATE)), 2, 2)) + ' ' + DATENAME(month, @DATE) + ' ' + CONVERT(VARCHAR(4), YEAR(@DATE)) END IF @Format = '@t6' BEGIN RETURN CONVERT(VARCHAR, @DATE, 108) END IF @Format = '@t4' BEGIN RETURN SUBSTRING(CONVERT(VARCHAR, @DATE, 108), 1, 5) END IF @Format = 'sql' BEGIN RETURN CONVERT(VARCHAR, @DATE, 112) END IF @Format LIKE 'verbose%' BEGIN IF @FORMAT = 'verbose' BEGIN SET @FORMAT = 'verbose(1, 1, 1, 1, 1, 0)' END DECLARE @RESULT VARCHAR(200) IF @Format LIKE 'verbose(%' BEGIN DECLARE @UseDayName BIT DECLARE @UseThe BIT DECLARE @UseDay BIT DECLARE @UseOf BIT DECLARE @UseComma BIT DECLARE @Capitalise BIT DECLARE @COMMA INT SET @Format = SUBSTRING(@Format, 9, LEN(@Format) - 8) SET @COMMA = CHARINDEX(',', @Format, 1) IF @COMMA > 0 BEGIN SET @UseDayName = CONVERT(BIT, RTRIM(SUBSTRING(@Format, 1, @COMMA - 1))) SET @Format = LTRIM(SUBSTRING(@Format, @COMMA + 1, LEN(@Format) - @COMMA)) END SET @COMMA = CHARINDEX(',', @Format, 1) IF @COMMA > 0 BEGIN SET @UseThe = CONVERT(BIT, RTRIM(SUBSTRING(@Format, 1, @COMMA - 1))) SET @Format = LTRIM(SUBSTRING(@Format, @COMMA + 1, LEN(@Format) - @COMMA)) END SET @COMMA = CHARINDEX(',', @Format, 1) IF @COMMA > 0 BEGIN SET @UseDay = CONVERT(BIT, RTRIM(SUBSTRING(@Format, 1, @COMMA - 1))) SET @Format = LTRIM(SUBSTRING(@Format, @COMMA + 1, LEN(@Format) - @COMMA)) END SET @COMMA = CHARINDEX(',', @Format, 1) IF @COMMA > 0 BEGIN SET @UseOf = CONVERT(BIT, RTRIM(SUBSTRING(@Format, 1, @COMMA - 1))) SET @Format = LTRIM(SUBSTRING(@Format, @COMMA + 1, LEN(@Format) - @COMMA)) END SET @COMMA = CHARINDEX(',', @Format, 1) IF @COMMA > 0 BEGIN SET @UseComma = CONVERT(BIT, RTRIM(SUBSTRING(@Format, 1, @COMMA - 1))) SET @Format = LTRIM(SUBSTRING(@Format, @COMMA + 1, LEN(@Format) - @COMMA)) END SET @COMMA = CHARINDEX(')', @Format, 1) IF @COMMA > 0 BEGIN SET @Capitalise = CONVERT(BIT, RTRIM(SUBSTRING(@Format, 1, @COMMA - 1))) SET @Format = LTRIM(SUBSTRING(@Format, @COMMA + 1, LEN(@Format) - @COMMA)) END IF @UseDayName = 1 BEGIN SET @RESULT = DATENAME(WEEKDAY, @DATE) IF @UseComma = 1 BEGIN SET @RESULT = @RESULT + ', ' END ELSE BEGIN SET @RESULT = @RESULT + ' ' END END ELSE BEGIN SET @RESULT = '' END SET @RESULT = @RESULT + [dbo].[KAAS_FN_VerboseDate](@Date, @UseThe, @UseDay, @UseOf, @UseComma, @Capitalise) RETURN @RESULT END ELSE BEGIN RETURN [dbo].[KAAS_FN_VerboseDate](@Date, 1, 1, 1, 1, 0) END END SET @RESULT = @FORMAT SET @RESULT = REPLACE(@RESULT, 'DDDD', '<**xn**>') SET @RESULT = REPLACE(@RESULT, 'DDD', '<**xsn**>') SET @RESULT = REPLACE(@RESULT, 'DD', '<**x2**>') SET @RESULT = REPLACE(@RESULT, 'D', '<**x**>') SET @RESULT = REPLACE(@RESULT, 'MMMM', '<**xxn**>') SET @RESULT = REPLACE(@RESULT, 'MMM', '<**xxsn**>') SET @RESULT = REPLACE(@RESULT, 'MM', '<**xx2**>') SET @RESULT = REPLACE(@RESULT, 'MI', '<**w2**>') SET @RESULT = REPLACE(@RESULT, 'M', '<**xx**> ') SET @RESULT = REPLACE(@RESULT, 'HH', '<**w1**>') SET @RESULT = REPLACE(@RESULT, 'SS', '<**w3**>') SET @RESULT = REPLACE(@RESULT, 'YYYY', '<**yf**>') SET @RESULT = REPLACE(@RESULT, 'YY', '<**ys**>') SET @RESULT = REPLACE(@RESULT, '<**xn**>', DATENAME(WEEKDAY, @DATE)) SET @RESULT = REPLACE(@RESULT, '<**xsn**>', SUBSTRING(DATENAME(WEEKDAY, @DATE), 1, 3)) SET @RESULT = REPLACE(@RESULT, '<**x2**>', SUBSTRING(CONVERT(VARCHAR, 100 + DAY(@DATE)), 2, 2)) SET @RESULT = REPLACE(@RESULT, '<**x**>', CONVERT(VARCHAR, DAY(@DATE))) SET @RESULT = REPLACE(@RESULT, '<**xxn**>', DATENAME(MONTH, @DATE)) SET @RESULT = REPLACE(@RESULT, '<**xxsn**>', SUBSTRING(DATENAME(MONTH, @DATE), 1, 3)) SET @RESULT = REPLACE(@RESULT, '<**xx2**>', SUBSTRING(CONVERT(VARCHAR, 100 + MONTH(@DATE)), 2, 2)) SET @RESULT = REPLACE(@RESULT, '<**yf**>', CONVERT(VARCHAR, YEAR(@DATE))) SET @RESULT = REPLACE(@RESULT, '<**ys**>', SUBSTRING(CONVERT(VARCHAR, YEAR(@DATE)), 3, 2)) SET @RESULT = REPLACE(@RESULT, '<**w1**>', SUBSTRING(CONVERT(VARCHAR, 100 + DATEPART(HOUR, @DATE)), 2, 2)) SET @RESULT = REPLACE(@RESULT, '<**w2**>', SUBSTRING(CONVERT(VARCHAR, 100 + DATEPART(MINUTE, @DATE)), 2, 2)) SET @RESULT = REPLACE(@RESULT, '<**w3**>', SUBSTRING(CONVERT(VARCHAR, 100 + DATEPART(SECOND, @DATE)), 2, 2)) RETURN @RESULT END GO IF OBJECT_ID('KAAS_FN_ConvertDateToClarion',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_ConvertDateToClarion] GO CREATE FUNCTION [dbo].[KAAS_FN_ConvertDateToClarion] (@datetime DATETIME) RETURNS INT AS /***************************************************************************** Converts a date/time value to a Clarion number. Stored Procedure name : KAAS_FN_ConvertDateToClarion Copy From : ky_NETFNConvertDateToClarion 2019-07-30 Vinodhan K Created KAAS_FN_ConvertDateToClarion *****************************************************************************/ BEGIN DECLARE @notime DATETIME SET @notime = CONVERT(VARCHAR(8), @datetime, 112) RETURN DATEDIFF(dd, '18001228', @datetime) END GO IF OBJECT_ID('KAAS_FN_ConvertNumber',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_ConvertNumber] GO -- Please note: the FORMAT function is not supported in SQL2008, so we can't make this Function -- quite as good there as we could make it on SQL2012 or later DECLARE @VERSION NVARCHAR(128) DECLARE @VERSIONNO INT DECLARE @NCOMMAND NVARCHAR(MAX) SET @VERSION = @@VERSION DECLARE @POS INT SET @POS = PATINDEX('% - %', @VERSION) SET @VERSIONNO = 0 IF @POS > 0 BEGIN DECLARE @END INT SET @END = CHARINDEX('.', @VERSION, @POS) SET @VERSION = SUBSTRING(@VERSION, @POS + 3, @END - @POS - 3) IF ISNUMERIC(@VERSION) = 1 BEGIN SET @VERSIONNO = CONVERT(INT, @VERSION) END END IF @VERSIONNO > 10 BEGIN SET @NCOMMAND = N'CREATE FUNCTION [dbo].[KAAS_FN_ConvertNumber] (@NUMBER FLOAT, @FORMAT VARCHAR(200), @THOUSANDSEPARATORS BIT, @NEGBRACKETS BIT, @CULTURE VARCHAR(10)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Stored Procedure Name : KAAS_FN_ConvertNumber * * Copied From : [dbo].[ky_NETFNConvertNumber] * * * * Convert a Number into the desired Format * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-04 Pino Carafa Created * * 2019-07-27 Vinodhan K Created KAAS_FN_ConvertNumber * * * *************************************************************************************************************/ BEGIN DECLARE @THSEP VARCHAR(1) DECLARE @DSEP VARCHAR(1) SET @CULTURE = ISNULL(@CULTURE, ''en-IE'') DECLARE @DIGITS INT DECLARE @DECIMALS INT DECLARE @PERIOD INT DECLARE @REST VARCHAR(50) DECLARE @RESULT VARCHAR(200) SET @REST = FORMAT(1000, ''N1'', @CULTURE) SET @THSEP = SUBSTRING(@REST, 2, 1) SET @DSEP = SUBSTRING(@REST, 6, 1) IF @FORMAT LIKE ''@n%'' BEGIN SET @FORMAT = SUBSTRING(@FORMAT, 3, LEN(@FORMAT) - 2) SET @PERIOD = CHARINDEX(''.'', @FORMAT, 1) IF @PERIOD > 0 BEGIN SET @DIGITS = CONVERT(INT, SUBSTRING(@FORMAT, 1, @PERIOD - 1)) SET @DECIMALS = CONVERT(INT, SUBSTRING(@FORMAT, @PERIOD + 1, LEN(@FORMAT) - @PERIOD)) END ELSE BEGIN SET @DIGITS = CONVERT(INT, @FORMAT) SET @DECIMALS = 0 END SET @FORMAT = '''' WHILE @DIGITS > 3 BEGIN IF @FORMAT <> '''' BEGIN SET @FORMAT = ''###'' + CASE WHEN @THOUSANDSEPARATORS = 1 THEN @THSEP ELSE '''' END + @FORMAT END ELSE BEGIN SET @FORMAT = ''###'' END SET @DIGITS = @DIGITS - 3 END IF @DIGITS > 0 BEGIN SET @REST = '''' WHILE @DIGITS > 0 BEGIN SET @REST = @REST + ''#'' SET @DIGITS = @DIGITS - 1 END SET @FORMAT = @REST + CASE WHEN @FORMAT = '''' THEN '''' WHEN @THOUSANDSEPARATORS = 1 THEN @THSEP ELSE '''' END + @FORMAT END IF @DECIMALS > 0 BEGIN SET @FORMAT = @FORMAT + @DSEP WHILE @DECIMALS > 0 BEGIN SET @FORMAT = @FORMAT + ''0'' SET @DECIMALS = @DECIMALS - 1 END END IF ISNULL(@NEGBRACKETS, 0) = 0 BEGIN SET @RESULT = FORMAT(@NUMBER, @FORMAT, @CULTURE) END ELSE BEGIN IF @NUMBER < 0 BEGIN SET @RESULT = ''('' + FORMAT(-@NUMBER, @FORMAT, @CULTURE) + '')'' END ELSE BEGIN SET @RESULT = FORMAT(@NUMBER, @FORMAT, @CULTURE) END END --SELECT @RESULT RETURN @RESULT END IF ISNULL(@NEGBRACKETS, 0) = 0 BEGIN SET @RESULT = FORMAT(@NUMBER, @FORMAT, @CULTURE) END ELSE BEGIN IF @NUMBER < 0 BEGIN SET @RESULT = ''('' + FORMAT(-@NUMBER, @FORMAT, @CULTURE) + '')'' END ELSE BEGIN SET @RESULT = FORMAT(@NUMBER, @FORMAT, @CULTURE) END END IF ISNULL(@THOUSANDSEPARATORS, 0) = 0 BEGIN SET @RESULT = REPLACE(@RESULT, @THSEP, '''') END --SELECT @RESULT RETURN @RESULT END' END ELSE BEGIN SET @NCOMMAND = N'CREATE FUNCTION [dbo].[KAAS_FN_ConvertNumber] (@NUMBER FLOAT, @FORMAT VARCHAR(200), @THOUSANDSEPARATORS BIT, @NEGBRACKETS BIT, @CULTURE VARCHAR(10)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Stored Procedure name : KAAS_FN_ConvertNumber * * Copied From : [dbo].[ky_NETFNConvertNumber] * * * * Convert a Number into the desired Format * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-04 Pino Carafa Created * * 2019-07-27 Vinodhan K Created KAAS_FN_ConvertNumber * * * *************************************************************************************************************/ BEGIN DECLARE @THSEP VARCHAR(1) DECLARE @DSEP VARCHAR(1) SET @CULTURE = ISNULL(@CULTURE, ''en-IE'') DECLARE @DIGITS INT DECLARE @DECIMALS INT DECLARE @PERIOD INT DECLARE @REST VARCHAR(50) DECLARE @RESULT VARCHAR(200) SET @REST = CONVERT(VARCHAR(10), CONVERT(MONEY, 1000), 1) SET @THSEP = SUBSTRING(@REST, 2, 1) SET @DSEP = SUBSTRING(@REST, 6, 1) IF @FORMAT LIKE ''@n%'' BEGIN SET @FORMAT = SUBSTRING(@FORMAT, 3, LEN(@FORMAT) - 2) SET @PERIOD = CHARINDEX(''.'', @FORMAT, 1) IF @PERIOD > 0 BEGIN SET @DIGITS = CONVERT(INT, SUBSTRING(@FORMAT, 1, @PERIOD - 1)) SET @DECIMALS = CONVERT(INT, SUBSTRING(@FORMAT, @PERIOD + 1, LEN(@FORMAT) - @PERIOD)) END ELSE BEGIN SET @DIGITS = CONVERT(INT, @FORMAT) SET @DECIMALS = 0 END SET @FORMAT = '''' WHILE @DIGITS > 3 BEGIN IF @FORMAT <> '''' BEGIN SET @FORMAT = ''###'' + CASE WHEN @THOUSANDSEPARATORS = 1 THEN @THSEP ELSE '''' END + @FORMAT END ELSE BEGIN SET @FORMAT = ''###'' END SET @DIGITS = @DIGITS - 3 END IF @DIGITS > 0 BEGIN SET @REST = '''' WHILE @DIGITS > 0 BEGIN SET @REST = @REST + ''#'' SET @DIGITS = @DIGITS - 1 END SET @FORMAT = @REST + CASE WHEN @FORMAT = '''' THEN '''' WHEN @THOUSANDSEPARATORS = 1 THEN @THSEP ELSE '''' END + @FORMAT END IF @DECIMALS > 0 BEGIN SET @FORMAT = @FORMAT + @DSEP WHILE @DECIMALS > 0 BEGIN SET @FORMAT = @FORMAT + ''0'' SET @DECIMALS = @DECIMALS - 1 END END IF ISNULL(@NEGBRACKETS, 0) = 0 BEGIN SET @RESULT = CONVERT(VARCHAR(20), CONVERT(MONEY, @NUMBER), 1) --FORMAT(@NUMBER, @FORMAT, @CULTURE) END ELSE BEGIN IF @NUMBER < 0 BEGIN SET @RESULT = ''('' + CONVERT(VARCHAR(20), CONVERT(MONEY, @NUMBER), 1) + '')'' --''('' + FORMAT(-@NUMBER, @FORMAT, @CULTURE) + '')'' END ELSE BEGIN SET @RESULT = CONVERT(VARCHAR(20), CONVERT(MONEY, @NUMBER), 1) --FORMAT(@NUMBER, @FORMAT, @CULTURE) END END --SELECT @RESULT RETURN @RESULT END IF ISNULL(@NEGBRACKETS, 0) = 0 BEGIN SET @RESULT = CONVERT(VARCHAR(20), CONVERT(MONEY, @NUMBER), 1) --FORMAT(@NUMBER, @FORMAT, @CULTURE) END ELSE BEGIN IF @NUMBER < 0 BEGIN SET @RESULT = ''('' + CONVERT(VARCHAR(20), CONVERT(MONEY, @NUMBER), 1) + '')'' --''('' + FORMAT(-@NUMBER, @FORMAT, @CULTURE) + '')'' END ELSE BEGIN SET @RESULT = CONVERT(VARCHAR(20), CONVERT(MONEY, @NUMBER), 1) --FORMAT(@NUMBER, @FORMAT, @CULTURE) END END IF ISNULL(@THOUSANDSEPARATORS, 0) = 0 BEGIN SET @RESULT = REPLACE(@RESULT, @THSEP, '''') END --SELECT @RESULT RETURN @RESULT END' END EXEC sp_executesql @NCOMMAND GO IF OBJECT_ID('KAAS_FN_ConvertToDateTime',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_ConvertToDateTime] GO CREATE FUNCTION [dbo].[KAAS_FN_ConvertToDateTime] (@DATESTRING VARCHAR(MAX)) RETURNS DATETIME AS /************************************************************************************************************* * * * Convert a string produced by one of our own functions back to a datetime * * * * Stored Procedure : [dbo].[KAAS_FN_ConvertToDateTime] * * Copied From : KAAS_FN_ConvertToDateTime * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-20 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_ConvertToDateTime * * * *************************************************************************************************************/ BEGIN IF @DATESTRING LIKE 'Monday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 7, LEN(@DATESTRING) - 6)) IF @DATESTRING LIKE 'Tuesday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 8, LEN(@DATESTRING) - 7)) IF @DATESTRING LIKE 'Wednesday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 10, LEN(@DATESTRING) - 9)) IF @DATESTRING LIKE 'Thursday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 9, LEN(@DATESTRING) - 8)) IF @DATESTRING LIKE 'Friday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 7, LEN(@DATESTRING) - 6)) IF @DATESTRING LIKE 'Saturday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 9, LEN(@DATESTRING) - 8)) IF @DATESTRING LIKE 'Sunday%' SET @DATESTRING = LTRIM(SUBSTRING(@DATESTRING, 7, LEN(@DATESTRING) - 6)) -- Remove any of the commas and "the" "day" "of", "nd", "th", "rd" text SET @DATESTRING = REPLACE(@DATESTRING, ',', '') SET @DATESTRING = REPLACE(@DATESTRING, 'the ', '') SET @DATESTRING = REPLACE(@DATESTRING, 'day ', '') SET @DATESTRING = REPLACE(@DATESTRING, 'of ', '') SET @DATESTRING = REPLACE(@DATESTRING, 'st', '') --but restore august SET @DATESTRING = REPLACE(@DATESTRING, 'Augu', 'August') --the rest of these won't appear in Month names so we can simply remove them SET @DATESTRING = REPLACE(@DATESTRING, 'nd', '') SET @DATESTRING = REPLACE(@DATESTRING, 'rd', '') SET @DATESTRING = REPLACE(@DATESTRING, 'th', '') SET @DATESTRING = LTRIM(RTRIM(@DATESTRING)) IF CHARINDEX('/', @DATESTRING) > 4 BEGIN --YYYY/MM/DD IF ISDATE(@DATESTRING) = 1 BEGIN RETURN CONVERT(DATETIME, @DATESTRING) END END ELSE IF CHARINDEX('/', @DATESTRING) > 0 BEGIN --MUST be DD/MM/YYYY or (for shame) DD/MM/YY IF LEN(@DATESTRING) = 8 RETURN CONVERT(DATETIME, @DATESTRING, 3) ELSE RETURN CONVERT(DATETIME, @DATESTRING, 103) END ELSE BEGIN IF ISDATE(@DATESTRING) = 1 BEGIN RETURN CONVERT(DATETIME, @DATESTRING) END END RETURN CONVERT(DATETIME, NULL) END GO IF OBJECT_ID('KAAS_FN_CSVToTable',N'TF') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_CSVToTable] GO CREATE FUNCTION [dbo].[KAAS_FN_CSVToTable] (@InStr VARCHAR(MAX)) RETURNS @TempTab TABLE (id varchar(50) not null) AS /******************************************************************************************************* * Converts CSV Values into Table by using Comma Split String * * * * Stored Procedure Name : [dbo].[KAAS_FN_CSVToTable] * * * * Modification History : * * 2019-05-17 Vinodhan K Created * *******************************************************************************************************/ BEGIN ;-- Ensure input ends with comma SET @InStr = REPLACE(@InStr + ',', ',,', ',') DECLARE @SP INT DECLARE @VALUE VARCHAR(1000) WHILE PATINDEX('%,%', @INSTR ) <> 0 BEGIN SELECT @SP = PATINDEX('%,%',@INSTR) SELECT @VALUE = LEFT(@INSTR , @SP - 1) SELECT @INSTR = STUFF(@INSTR, 1, @SP, '') INSERT INTO @TempTab(id) VALUES (@VALUE) END RETURN END GO IF OBJECT_ID('KAAS_FN_DateDiffVerbose',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_DateDiffVerbose] GO CREATE FUNCTION [dbo].[KAAS_FN_DateDiffVerbose] (@FromDate DATETIME, @ToDate DATETIME) RETURNS VARCHAR(200) AS /******************************************************************************************************* * Fetch Attachment list by diary number * * * * Stored Procedure Name : [dbo].[KAAS_FN_DateDiffVerbose] * * Copied from : [dbo].[ky_NETFNDateDiffVerbose] * * * * Modification History : * * 2019-04-16 Vinodhan K Created * *******************************************************************************************************/ BEGIN DECLARE @OUTPUT VARCHAR(200) IF @FromDate IS NULL BEGIN RETURN '' END IF @ToDate IS NULL BEGIN RETURN '' END IF (@FromDate >= @ToDate) BEGIN RETURN '' END DECLARE @Work DATETIME DECLARE @YEARS INT SET @YEARS = DATEDIFF(YEAR, @FromDate, @ToDate) SET @Work = DATEADD(YEAR, @YEARS, @FromDate) IF (@Work > @ToDate) BEGIN SET @YEARS = @YEARS - 1 END SET @OUTPUT = '' IF @YEARS = 1 BEGIN IF @OUTPUT <> '' BEGIN SET @OUTPUT = @OUTPUT + ', ' END SET @OUTPUT = @OUTPUT + '1 Year' END IF @YEARS > 1 BEGIN IF @OUTPUT <> '' BEGIN SET @OUTPUT = @OUTPUT + ', ' END SET @OUTPUT = @OUTPUT + CONVERT(VARCHAR(10), @YEARS) + ' Years' END SET @FromDate = DATEADD(YEAR, @YEARS, @FromDate) DECLARE @MONTHS INT SET @MONTHS = DATEDIFF(MONTH, @FromDate, @ToDate) SET @Work = DATEADD(MONTH, @MONTHS, @FromDate) IF (@Work > @ToDate) BEGIN SET @MONTHS = @MONTHS - 1 END IF @MONTHS = 1 BEGIN IF @OUTPUT <> '' BEGIN SET @OUTPUT = @OUTPUT + ', ' END SET @OUTPUT = @OUTPUT + '1 Month' END IF @MONTHS > 1 BEGIN IF @OUTPUT <> '' BEGIN SET @OUTPUT = @OUTPUT + ', ' END SET @OUTPUT = @OUTPUT + CONVERT(VARCHAR(10), @MONTHS) + ' Months' END SET @FromDate = DATEADD(MONTH, @MONTHS, @FromDate) DECLARE @DAYS INT SET @DAYS = DATEDIFF(DAY, @FromDate, @ToDate) IF @DAYS = 1 BEGIN IF @OUTPUT <> '' BEGIN SET @OUTPUT = @OUTPUT + ' and ' END SET @OUTPUT = @OUTPUT + '1 Day' END IF @DAYS > 1 BEGIN IF @OUTPUT <> '' BEGIN SET @OUTPUT = @OUTPUT + ' and ' END SET @OUTPUT = @OUTPUT + CONVERT(VARCHAR(10), @DAYS) + ' Days' END RETURN @OUTPUT END GO IF OBJECT_ID('KAAS_FN_DateFilter',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_DateFilter] GO CREATE FUNCTION [dbo].[KAAS_FN_DateFilter] (@SearchString VARCHAR(MAX)) RETURNS VARCHAR(200) AS /******************************************************************************************************* * To verify it is a date filter * * * * Stored Procedure Name : [dbo].[KAAS_FN_DateFilter] * * * * Modification History : * * 2024-03-25 Vignesh M Created * *******************************************************************************************************/ BEGIN DECLARE @OUTPUT VARCHAR(200) DECLARE @isDateFilter INT = 0 DECLARE @isCustomFilter INT = 0 DECLARE @Day NVARCHAR(max) = '00' DECLARE @Month NVARCHAR(max) = '00' DECLARE @Year NVARCHAR(max) = '1900' DECLARE @NEWDT VARCHAR(MAX) IF LEN(@SearchString) = 6 OR LEN(@SearchString) = 8 BEGIN IF LEN(@SearchString) = 6 BEGIN SET @NEWDT = SUBSTRING(@SearchString,1,2) + ' ' + SUBSTRING(@SearchString,4,3) + ' 1900' IF ISDATE(@NEWDT) = 1 BEGIN SET @Day = RIGHT('0' + CAST(DATEPART(DAY,@NEWDT) AS NVARCHAR), 2) SET @Month = RIGHT('0' + CAST(DATEPART(MONTH,@NEWDT) AS NVARCHAR), 2) SET @isCustomFilter = 1 END END IF LEN(@SearchString) = 8 BEGIN SET @NEWDT = '01 ' + SUBSTRING(@SearchString,1,3) + ' ' + SUBSTRING(@SearchString,5,4) IF ISDATE(@NEWDT) = 1 BEGIN SET @Month = RIGHT('0' + CAST(DATEPART(MONTH,@NEWDT) AS NVARCHAR), 2) SET @Year = RIGHT('0000' + CAST(DATEPART(YEAR,@NEWDT) AS NVARCHAR), 4) SET @isCustomFilter = 1 END END END IF ISDATE(@SearchString) = 1 AND @isCustomFilter = 0 BEGIN DECLARE @newSearchText NVARCHAR(12) = '' SET @newSearchText = CONVERT(VARCHAR(12),@SearchString,106) IF @SearchString = @newSearchText BEGIN SET @Day = RIGHT('0' + CAST(DATEPART(DAY,@SearchString) AS NVARCHAR), 2) SET @Month = RIGHT('0' + CAST(DATEPART(MONTH,@SearchString) AS NVARCHAR), 2) SET @Year = RIGHT('0000' + CAST(DATEPART(YEAR,@SearchString) AS NVARCHAR), 4) SET @isDateFilter = 1 END END IF @isDateFilter = 0 AND @isCustomFilter = 0 BEGIN SET @OUTPUT = '' END ELSE BEGIN SET @OUTPUT = @DAY + '-' + @Month + '-' + @Year END RETURN @OUTPUT END GO IF OBJECT_ID('KAAS_FN_DefaultBillLayoutReport',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_DefaultBillLayoutReport] GO CREATE FUNCTION [dbo].[KAAS_FN_DefaultBillLayoutReport] () RETURNS INT AS /******************************************************************************************************* * * * * * * * Stored Procedure Name : [dbo].[KAAS_FN_DefaultBillLayoutReport] * * Copied from : [dbo].[ky_FNDefaultBillLayoutReport] * * * * Modification History : * * 2019-11-13 Dheepin Vijith K Created * *******************************************************************************************************/ BEGIN DECLARE @ReportID INT SELECT @ReportID = CRR.[ReportID] FROM [dbo].[CRReport] CRR WHERE CRR.[report_type] = 'B' AND CRR.[name] = 'Bill Layout' IF (@ReportID IS NULL) BEGIN SELECT TOP 1 @ReportID = CRR.[ReportID] FROM [dbo].[CRReport] CRR WHERE CRR.[report_type] = 'B' END IF (@ReportID IS NULL) BEGIN SELECT TOP 1 @ReportID = CRR.[ReportID] FROM [dbo].[CRReport] CRR WHERE CRR.[name] = 'Bill Layout' END IF (@ReportID IS NULL) BEGIN SET @ReportID = 0 END RETURN @ReportID END GO IF OBJECT_ID('KAAS_FN_FieldIDInterpreter',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_FieldIDInterpreter] GO CREATE FUNCTION [dbo].[KAAS_FN_FieldIDInterpreter] (@ORIGINAL VARCHAR(MAX), @FORFUNCTION BIT, @mattercode VARCHAR(20), --From original @SEARCHES, *just in case* we ever need them - START @actionid INT, @trackreference INT, @actualname VARCHAR(500), @retrievalcode VARCHAR(500)) --From original @SEARCHES, *just in case* we ever need them - END) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Converts old Clarion syntax to the .NET Generator compatible equivalent * * * * Stored Procedure : KAAS_FN_FieldIDInterpreter * * Copied From : [dbo].[ky_NETFNFieldIDInterpreter] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-10 Pino Carafa Created * * 2019-01-14 Pino Carafa Use [dbo].[ky_NETFNGetUnquotedCharacterPos] instead of CHARINDEX * * 2019-01-16 Pino Carafa Handle PARTS when an operator like + is not preceded by a blank * * 2019-01-21 Pino Carafa Recognise the & operator as distinct from +. + will be "type sensitive" * * whereas & is purely string-based. * * 2019-01-23 Pino Carafa KEYD-5668 - Distinguish negatives -Y from subtractions X-Y * * 2019-02-01 Pino Carafa Prepare for recognising embedded Aggregate codes * * 2019-12-19 Vinodhan Created KAAS_FN_FieldIDInterpreter * * * *************************************************************************************************************/ BEGIN SET @ORIGINAL = REPLACE(@ORIGINAL, '#@&', '#_AND_') SET @ORIGINAL = REPLACE(@ORIGINAL, '#@,', '#_CND_') SET @ORIGINAL = REPLACE(@ORIGINAL, '#@r', '#_NLN_') DECLARE @SIMPLEQUOTE VARCHAR(MAX) DECLARE @POS INT DECLARE @LEN INT DECLARE @PART VARCHAR(MAX) DECLARE @WORK VARCHAR(MAX) DECLARE @SIMPLEQUOTEINDENT BIT DECLARE @QUOTEINDENT BIT DECLARE @CHAR CHAR(1) DECLARE @ORIGINALCHAR VARCHAR(1) DECLARE @BRACKINDENT INT DECLARE @FUNCTION VARCHAR(MAX) DECLARE @PARAMETERS TABLE ([id] INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, [Parameter] VARCHAR(MAX) NOT NULL) -- Handle Negatives KEYD-5668 START DECLARE @NEGPOS INT DECLARE @NEGPOS2 INT DECLARE @NEGSTART VARCHAR(MAX) DECLARE @NEGREST VARCHAR(MAX) DECLARE @NEGNEXTPOS INT SET @NEGPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @ORIGINAL) WHILE @NEGPOS > 0 BEGIN SET @NEGSTART = RTRIM(SUBSTRING(@ORIGINAL, 1, @NEGPOS - 1)) SET @NEGREST = LTRIM(SUBSTRING(@ORIGINAL, @NEGPOS + 1, LEN(@ORIGINAL) - @NEGPOS)) IF @NEGSTART = '' BEGIN SET @NEGNEXTPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('=', @NEGREST) SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('>', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('<', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('+', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('*', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('/', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos](',', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 IF @NEGNEXTPOS = 0 BEGIN SET @ORIGINAL = '(0 - ' + @NEGREST + ')' END ELSE BEGIN SET @ORIGINAL = '(0 - ' + RTRIM(SUBSTRING(@NEGREST, 1, @NEGNEXTPOS - 1)) + ') ' + LTRIM(SUBSTRING(@NEGREST, @NEGNEXTPOS, LEN(@NEGREST) - @NEGNEXTPOS + 1)) END SET @NEGPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @ORIGINAL) END ELSE IF SUBSTRING(@NEGSTART, LEN(@NEGSTART), 1) NOT IN ('=', '>', '<', '+', '*', '/', '(', ',') BEGIN SET @NEGPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPosFrom]('-', @ORIGINAL, @NEGPOS + 1) END ELSE BEGIN SET @NEGNEXTPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('=', @NEGREST) SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('>', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('<', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('+', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('*', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('/', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 SET @NEGPOS2 = [dbo].[KAAS_FN_GetUnembeddedCharacterPos](',', @NEGREST) IF @NEGNEXTPOS = 0 SET @NEGNEXTPOS = @NEGPOS2 ELSE IF (@NEGPOS2 > 0) AND (@NEGPOS2 < @NEGNEXTPOS) SET @NEGNEXTPOS = @NEGPOS2 IF @NEGNEXTPOS = 0 BEGIN SET @ORIGINAL = @NEGSTART + ' (0 - ' + @NEGREST + ')' END ELSE BEGIN SET @ORIGINAL = @NEGSTART + ' (0 - ' + RTRIM(SUBSTRING(@NEGREST, 1, @NEGNEXTPOS - 1)) + ') ' + LTRIM(SUBSTRING(@NEGREST, @NEGNEXTPOS, LEN(@NEGREST) - @NEGNEXTPOS + 1)) END SET @NEGPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('-', @ORIGINAL) END END -- Handle Negatives KEYD-5668 END SET @SIMPLEQUOTE = REPLACE(REPLACE(@ORIGINAL, '‘', ''''), '’', '''') SET @POS = 0 SET @LEN = LEN(@ORIGINAL) SET @PART = '' SET @WORK = '' SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @BRACKINDENT = 0 --Split the string into parts WHILE @POS < @LEN BEGIN SET @POS = @POS + 1 SET @CHAR = SUBSTRING(@SIMPLEQUOTE, @POS, 1) SET @ORIGINALCHAR = SUBSTRING(@ORIGINAL, @POS, 1) --First we establish whether we're in a Quoted or an Unquoted part of the string IF @CHAR = '''' BEGIN IF @ORIGINALCHAR = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT SET @ORIGINALCHAR = '''' END END END --Get top level bracketing --We are not going to interpret anything within quotes. IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) BEGIN --Now we'll establish whether we're inside a bracketed expression IF @CHAR = '(' BEGIN IF @BRACKINDENT = 0 BEGIN --Start of a top level bracketed expression SET @FUNCTION = @PART SET @PART = '' SET @ORIGINALCHAR = '' END SET @BRACKINDENT = @BRACKINDENT + 1 END IF @CHAR = ')' BEGIN IF @BRACKINDENT = 1 BEGIN --End of a top level bracketed expression DECLARE @PARMS VARCHAR(MAX) SET @PARMS = '' INSERT INTO @PARAMETERS ([Parameter]) VALUES(LTRIM(RTRIM(ISNULL(@PART, 'NULL')))) SELECT @PARMS = @PARMS + CASE WHEN @PARMS = '' THEN '' ELSE '****PARMSEP****' END + [dbo].[KAAS_FN_FieldIDInterpreter]([Parameter], 1, @mattercode, @actionid, @trackreference, @actualname, @retrievalcode) FROM @PARAMETERS ORDER BY [id] SET @PARMS = [dbo].[KAAS_FN_FunctionInterpreter](@FUNCTION, @PARMS) --SELECT @FUNCTION AS [Function] --SELECT [Parameter] FROM @PARAMETERS ORDER BY [id] DELETE @PARAMETERS SET @WORK = @WORK + @PARMS -- @FUNCTION + '(' + @PARMS + ')' SET @PART = '' SET @ORIGINALCHAR = '' END SET @BRACKINDENT = @BRACKINDENT - 1 END END --Get function parameters --We are not going to interpret anything within quotes. IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) BEGIN --We'll only do this if we're within a top level bracketed expression IF @BRACKINDENT = 1 BEGIN -- Parameters are separated by commas. IF @CHAR = ',' BEGIN INSERT INTO @PARAMETERS ([Parameter]) VALUES(LTRIM(RTRIM(ISNULL(@PART, 'NULL')))) SET @PART = '' SET @ORIGINALCHAR = '' END END END --Process Parts separated by operators or blanks --We are not going to interpret anything within quotes. IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) BEGIN --We are not going to split anything within brackets IF @BRACKINDENT = 0 BEGIN DECLARE @LASTCHAR VARCHAR(1) IF @CHAR = CONVERT(CHAR(1), ' ') BEGIN IF @PART <> '' BEGIN SET @PART = [dbo].[KAAS_FN_FieldIDParser](@PART, @FORFUNCTION) IF [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @PART) > 0 BEGIN RETURN @ORIGINAL END SET @WORK = @WORK + @PART + @ORIGINALCHAR SET @ORIGINALCHAR = '' SET @PART = '' END ELSE IF LEN(@WORK) > 0 BEGIN IF SUBSTRING(@WORK + '<', LEN(@WORK + '<') - 1, 1) + '.' <> ' .' BEGIN SET @WORK = @WORK + ' ' SET @ORIGINALCHAR = '' SET @PART = '' END ELSE BEGIN SET @ORIGINALCHAR = '' SET @PART = '' END END ELSE BEGIN SET @ORIGINALCHAR = '' SET @PART = '' END END --IF @CHAR = '&' -- BEGIN -- --Clarion concatenation -- SET @CHAR = '+' -- SET @ORIGINALCHAR = '+' -- END IF @CHAR IN ('+', '-', '=', '*', '\', '/', '&') BEGIN IF SUBSTRING(@WORK + '<', LEN(@WORK + '<') - 1, 1) + '.' <> ' .' BEGIN IF @PART <> '' BEGIN SET @PART = [dbo].[KAAS_FN_FieldIDParser](@PART, @FORFUNCTION) IF [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @PART) > 0 BEGIN RETURN @ORIGINAL END SET @WORK = @WORK + @PART + ' ' SET @PART = '' END SET @WORK = @WORK + ' ' END ELSE BEGIN IF @PART <> '' BEGIN SET @PART = [dbo].[KAAS_FN_FieldIDParser](@PART, @FORFUNCTION) IF [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @PART) > 0 BEGIN RETURN @ORIGINAL END SET @WORK = @WORK + @PART + ' ' SET @PART = '' END END SET @WORK = @WORK + @CHAR SET @ORIGINALCHAR = '' IF @POS < @LEN BEGIN IF SUBSTRING(@ORIGINAL, @POS + 1, 1) + '.' <> ' .' BEGIN SET @WORK = @WORK + ' ' END END END END END SET @PART = @PART + @ORIGINALCHAR END -- Process whatever may be left at the end of the string IF @PART <> '' BEGIN SET @PART = [dbo].[KAAS_FN_FieldIDParser](@PART, @FORFUNCTION) IF [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @PART) > 0 BEGIN RETURN @ORIGINAL END SET @WORK = @WORK + @PART END SET @WORK = [dbo].[KAAS_FN_ApplyOperator](@WORK) RETURN @WORK END GO IF OBJECT_ID('KAAS_FN_FieldIDParser',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_FieldIDParser] GO CREATE FUNCTION [dbo].[KAAS_FN_FieldIDParser] (@ORIGINAL VARCHAR(MAX), @FORFUNCTION BIT) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Converts old Clarion Field IDs to the .NET Generator compatible equivalent * * * * Stored Procedure : KAAS_FN_FieldIDParser * * Copied From : [dbo].[ky_NETFNFieldIDParser] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-11 Pino Carafa Created * * 2019-01-15 Pino Carafa Include CAN: fields * * 2019-01-16 Pino Carafa Can now handle ALL prefixes. When it cannot parse the field itself * * it hands it back to the calling procedure to use the old parser instead. * * 2019-01-21 Pino Carafa It didn't add the [CDE].[Code] parameter to the f.UDF call * * 2019-01-21 Pino Carafa Use the OLDPARSEQ alternative for quoted strings, so that the calling * * procedure knows to double quotes in the returned values. KEYD-5663 * * 2019-01-22 Pino Carafa Allow for a space between the File Prefix and the Field Name as that * * situation can arise when copying and pasting codes into a Precedent * * 2019-02-01 Pino Carafa Allow for a embedded LCN aggregate codes * * 2019-02-06 Pino Carafa Use Doc Assist format for AUD fields * * 2019-02-06 Pino Carafa Make allowance for longer FORMAT strings * * 2019-02-18 Pino Carafa Use functions for CAN fields * * 2019-02-19 Pino Carafa Use functions for LCN fields * * 2019-02-19 Pino Carafa Support aggregate AUD fields * * 2019-12-19 Vinodhan Created KAAS_FN_FieldIDParser * * 2020-03-02 Vinodhan Modifief to KAAS_SUFCAS from ky_SUFCAS * * * *************************************************************************************************************/ BEGIN DECLARE @RESULT VARCHAR(MAX) DECLARE @ACTUALNAME VARCHAR(200) DECLARE @SQLSTATEMENT VARCHAR(MAX) DECLARE @SUFFMT VARCHAR(50) IF CHARINDEX('''', @ORIGINAL) > 0 BEGIN RETURN @ORIGINAL --RETURN END IF CHARINDEX('‘', @ORIGINAL) > 0 BEGIN RETURN @ORIGINAL --RETURN END IF CHARINDEX('’', @ORIGINAL) > 0 BEGIN RETURN @ORIGINAL --RETURN END IF CHARINDEX('(', @ORIGINAL) > 0 BEGIN RETURN @ORIGINAL --RETURN END IF CHARINDEX(')', @ORIGINAL) > 0 BEGIN RETURN @ORIGINAL --RETURN END IF CHARINDEX(':', @ORIGINAL) = 0 BEGIN RETURN @ORIGINAL --RETURN END DECLARE @REST VARCHAR(MAX) DECLARE @PREFIX VARCHAR(MAX) DECLARE @Field VARCHAR(MAX) DECLARE @ASSOCTYPE VARCHAR(MAX) DECLARE @CONNUM INT DECLARE @VCCONNUM VARCHAR(3) SET @PREFIX = SUBSTRING(@ORIGINAL, 1, CHARINDEX(':', @ORIGINAL)) SET @REST = SUBSTRING(@ORIGINAL, CHARINDEX(':', @ORIGINAL) + 1, LEN(@ORIGINAL) - CHARINDEX(':', @ORIGINAL)) IF @PREFIX IN ('AUD:', 'AUS:', 'CAN:') BEGIN IF CHARINDEX('.', @REST) = 0 BEGIN RETURN @ORIGINAL --RETURN END SET @FIELD = LTRIM(RTRIM(SUBSTRING(@REST, 1, CHARINDEX('.', @REST) - 1))) SET @REST = SUBSTRING(@ORIGINAL, CHARINDEX('.', @ORIGINAL) + 1, LEN(@ORIGINAL) - CHARINDEX('.', @ORIGINAL)) END ELSE IF @PREFIX = 'LCN:' BEGIN IF CHARINDEX('#', @REST) = 0 BEGIN SET @FIELD = @REST SET @REST = '' SET @CONNUM = 1 END ELSE BEGIN SET @FIELD = SUBSTRING(@REST, 1, CHARINDEX('#', @REST) - 1) SET @REST = SUBSTRING(@REST, CHARINDEX('#', @REST) + 1, LEN(@REST) - CHARINDEX('#', @REST)) IF @REST = '_AND_' SET @CONNUM = -1 ELSE IF @REST = '_CND_' SET @CONNUM = -2 ELSE IF @REST = '_NLN_' SET @CONNUM = -3 ELSE SET @CONNUM = CONVERT(INT, @REST) IF @CONNUM = 0 SET @CONNUM = 1 END END ELSE BEGIN SET @Field = LTRIM(RTRIM(@REST)) SET @ASSOCTYPE = '' SET @CONNUM = 0 SET @REST = '' END IF @PREFIX IN ('AUD:', 'AUS:', 'CAN:') BEGIN IF CHARINDEX('#', @REST) = 0 BEGIN SET @ASSOCTYPE = @REST SET @REST = '' SET @CONNUM = 1 END ELSE BEGIN SET @ASSOCTYPE = SUBSTRING(@REST, 1, CHARINDEX('#', @REST) - 1) SET @REST = SUBSTRING(@ORIGINAL, CHARINDEX('#', @ORIGINAL) + 1, LEN(@ORIGINAL) - CHARINDEX('#', @ORIGINAL)) IF ISNUMERIC(@REST) = 1 BEGIN SET @CONNUM = CONVERT(INT, @REST) END ELSE BEGIN IF @REST = '_AND_' SET @CONNUM = -1 ELSE IF @REST = '_CND_' SET @CONNUM = -2 ELSE IF @REST = '_NLN_' SET @CONNUM = -3 ELSE SET @CONNUM = 1 END SET @REST = '' END END -- for the moment we'll just process the new AUD: prefixes. This can be expanded on later. --IF @PREFIX NOT IN ('AUD:', 'AUS:', 'MAT:', 'CAN:', 'CNT:') -- BEGIN -- RETURN @ORIGINAL -- --RETURN -- END DECLARE @TYPE VARCHAR(11) IF @PREFIX = 'AUD:' BEGIN SELECT @TYPE = RTRIM(ISNULL([SUF].[Type], 'Text')), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')) FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = @PREFIX AND [SUF].[FIELDNAME] = @FIELD IF @TYPE = 'Numeric' IF @CONNUM < 0 BEGIN SET @RESULT = 'f.AUDNumbers([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ''' + CONVERT(VARCHAR, @CONNUM) + ''', ''' + @SUFFMT + ''')' END ELSE BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.Format(f.AUDNumber([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''' + @SUFFMT + ''')' END ELSE BEGIN SET @RESULT = 'f.AUDNumber([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END END ELSE IF @TYPE = 'Date' IF @CONNUM < 0 BEGIN SET @RESULT = 'f.AUDDates([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ''' + CONVERT(VARCHAR, @CONNUM) + ''', ''' + @SUFFMT + ''')' END ELSE BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.Format(f.AUDDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''' + @SUFFMT + ''')' END ELSE BEGIN SET @RESULT = 'f.AUDDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END END ELSE IF @CONNUM < 0 BEGIN SET @RESULT = 'f.AUDTexts([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ''' + CONVERT(VARCHAR, @CONNUM) + ''')' END ELSE BEGIN SET @RESULT = 'f.AUDText([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END RETURN @RESULT END IF @PREFIX = 'AUS:' -- AUD: Values represented as VARCHAR for concatenations and so on BEGIN SELECT @TYPE = RTRIM(ISNULL([SUF].[Type], 'Text')), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')) FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = 'AUD:' AND [SUF].[FIELDNAME] = @FIELD IF @TYPE = 'Numeric' BEGIN SET @RESULT = 'f.GetFormattedValue(f.AUDNumber([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''N2'', 1, 0, NULL)' END ELSE IF @TYPE = 'Date' BEGIN SET @RESULT = 'f.AddDays(f.AUDDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), 0, ''DD MMM YYYY'')' END ELSE BEGIN SET @RESULT = 'f.AUDText([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END RETURN @RESULT END IF @PREFIX = 'CAN:' BEGIN SELECT @TYPE = RTRIM(ISNULL([SUF].[Type], 'Text')), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')), @ACTUALNAME = RTRIM(ISNULL([SUF].[ActualName], '')), @SQLSTATEMENT = RTRIM(ISNULL([SUF].[SQLStatement], '')) FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = @PREFIX AND [SUF].[FIELDNAME] = @FIELD IF EXISTS (SELECT TOP 1 1 FROM SYS.objects [SO] WHERE [SO].[name] = 'ky_SUFCAS' + @Field AND [SO].[type] = 'FN') BEGIN RETURN 'f.CAS' + @Field + '([CDE].[Code], ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END IF (@ACTUALNAME <> '' OR @SQLSTATEMENT <> '') AND (@ACTUALNAME <> 'NAM:' + @FIELD) BEGIN -- Leave this one to the old parser IF @SUFFMT LIKE '@n%' BEGIN SET @TYPE = 'Numeric' END ELSE IF @SUFFMT LIKE '@d%' BEGIN SET @TYPE = 'Date' END ELSE BEGIN SET @TYPE = 'Text' END IF @TYPE = 'Numeric' BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.GetFormattedValue(OLDPARSER**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''N2'', 1, 0, NULL)' END ELSE BEGIN SET @RESULT = '''OLDPARSEQ**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN @RESULT END ELSE IF @TYPE = 'Date' BEGIN IF @FORFUNCTION = 0 BEGIN IF @SUFFMT = '@d6' BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''DD/MM/YY'')' END ELSE IF @SUFFMT = '@d8' BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''DD MMM YYYY'')' END ELSE BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''D MMMM YYYY'')' END END ELSE BEGIN SET @RESULT = '''OLDPARSEQ**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN @RESULT END RETURN '''OLDPARSEQ**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END SET @TYPE = NULL SELECT @TYPE = ISNULL([ST].[name], ''), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')) FROM sys.objects [SO] INNER JOIN sys.columns [SC] INNER JOIN sys.types [ST] ON [ST].[system_type_id] = [SC].[system_type_id] LEFT OUTER JOIN [dbo].[SystemUserDefinedFields] [SUF] ON [SUF].[FilePrefix] = @PREFIX AND [SUF].[FieldName] = @FIELD ON [SC].object_id = [SO].object_id AND [SC].[name] = @FIELD WHERE [SO].[name] = 'CaseAssociatesNames' AND [SO].[type] = 'U' IF RTRIM(ISNULL(@TYPE, '')) = '' BEGIN SET @TYPE = 'System' RETURN '''OLDPARSEQ**FIELD**CAN**' + @FIELD + '.' + @ASSOCTYPE + '#' + SUBSTRING(CONVERT(VARCHAR(3), 100 + @CONNUM), 2, 2) + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END IF (@TYPE = 'datetime') OR (@TYPE = 'datetime2') OR (@TYPE = 'date') OR (@TYPE = 'smalldatetime') BEGIN IF @FORFUNCTION = 0 BEGIN IF @SUFFMT = '@d6' BEGIN SET @RESULT = 'f.format(f.CANDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''DD/MM/YY'')' END ELSE IF @SUFFMT = '@d8' BEGIN SET @RESULT = 'f.format(f.CANDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''DD MMM YYYY'')' END ELSE BEGIN SET @RESULT = 'f.format(f.CANDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''D MMMM YYYY'')' END END ELSE BEGIN SET @RESULT = 'f.CANDate([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END RETURN @RESULT END IF (@TYPE = 'money') OR (@TYPE = 'decimal') OR (@TYPE = 'float') OR (@TYPE = 'numeric') BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.format(f.CANNumber([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '), ''N2'')' END ELSE BEGIN SET @RESULT = 'f.CANNumber([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END RETURN @RESULT END IF (@TYPE = 'int') OR (@TYPE = 'bigint') OR (@TYPE = 'smallint') OR (@TYPE = 'tinyint') BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.CStr(f.CANInt([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + '))' END ELSE BEGIN SET @RESULT = 'f.CANInt([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END RETURN @RESULT END IF EXISTS (SELECT TOP 1 1 FROM SYS.objects [SO] WHERE [SO].[name] = 'ky_SUFCAS' + @Field AND [SO].[type] = 'FN') BEGIN RETURN 'f.CAS' + @Field + '([CDE].[Code], ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END ELSE BEGIN RETURN 'f.CANText([CDE].[Code], ''' + REPLACE(@FIELD, '''', '''''') + ''', ''' + REPLACE(@ASSOCTYPE, '''', '''''') + ''', ' + CONVERT(VARCHAR, @CONNUM) + ')' END END IF @PREFIX = 'LCN:' BEGIN IF @CONNUM = -1 BEGIN SET @VCCONNUM = '&' END ELSE IF @CONNUM = -2 BEGIN SET @VCCONNUM = ',' END ELSE IF @CONNUM < 0 BEGIN SET @VCCONNUM = 'r' END ELSE BEGIN SET @VCCONNUM = CONVERT(VARCHAR(3), @CONNUM) END IF EXISTS (SELECT TOP 1 1 FROM SYS.objects [SO] WHERE [SO].[name] = 'ky_SUFLCS' + @Field AND [SO].[type] = 'FN') BEGIN RETURN 'f.LCS' + @Field + '([CDE].[Code], ''' + @VCCONNUM + ''')' END ELSE BEGIN RETURN 'f.GETLCNInfo([CDE].[Code], ''' + @VCCONNUM + ''', ''' + @FIELD + ''', '''')' END END IF @PREFIX = 'UDF:' BEGIN SELECT @TYPE = RTRIM(ISNULL([SUF].[Type], 'Text')), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')), @ACTUALNAME = RTRIM(ISNULL([SUF].[ActualName], '')), @SQLSTATEMENT = RTRIM(ISNULL([SUF].[SQLStatement], '')) FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = 'MAT:' AND [SUF].[FIELDNAME] = @FIELD IF @ACTUALNAME <> '' OR @SQLSTATEMENT <> '' BEGIN -- Leave this one to the old parser IF @SUFFMT LIKE '@n%' BEGIN SET @TYPE = 'Numeric' END ELSE IF @SUFFMT LIKE '@d%' BEGIN SET @TYPE = 'Date' END ELSE BEGIN SET @TYPE = 'Text' END IF @TYPE = 'Numeric' BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.GetFormattedValue(OLDPARSER**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''N2'', 1, 0, NULL)' END ELSE BEGIN SET @RESULT = '''OLDPARSEQ**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN @RESULT END ELSE IF @TYPE = 'Date' BEGIN IF @FORFUNCTION = 0 BEGIN IF @SUFFMT = '@d6' BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''DD/MM/YY'')' END ELSE IF @SUFFMT = '@d8' BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''DD MMM YYYY'')' END ELSE BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''D MMMM YYYY'')' END END ELSE BEGIN SET @RESULT = '''OLDPARSEQ**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN @RESULT END RETURN '''OLDPARSEQ**FIELD**UDF**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN 'f.UDF([CDE].[Code], ''' + @FIELD + ''')' END IF @PREFIX = 'MAT:' BEGIN SELECT @TYPE = RTRIM(ISNULL([SUF].[Type], 'Text')), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')), @ACTUALNAME = RTRIM(ISNULL([SUF].[ActualName], '')), @SQLSTATEMENT = RTRIM(ISNULL([SUF].[SQLStatement], '')) FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = 'MAT:' AND [SUF].[FIELDNAME] = @FIELD IF @ACTUALNAME <> '' OR @SQLSTATEMENT <> '' BEGIN -- Leave this one to the old parser IF @SUFFMT LIKE '@n%' BEGIN SET @TYPE = 'Numeric' END ELSE IF @SUFFMT LIKE '@d%' BEGIN SET @TYPE = 'Date' END ELSE BEGIN SET @TYPE = 'Text' END IF @TYPE = 'Numeric' BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.GetFormattedValue(OLDPARSER**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''N2'', 1, 0, NULL)' END ELSE BEGIN SET @RESULT = '''OLDPARSEQ**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN @RESULT END ELSE IF @TYPE = 'Date' BEGIN IF @FORFUNCTION = 0 BEGIN IF @SUFFMT = '@d6' BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''DD/MM/YY'')' END ELSE IF @SUFFMT = '@d8' BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''DD MMM YYYY'')' END ELSE BEGIN SET @RESULT = 'f.Format(OLDPARSER**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**RESRAPDLO**, ''D MMMM YYYY'')' END END ELSE BEGIN SET @RESULT = '''OLDPARSEQ**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END RETURN @RESULT END RETURN '''OLDPARSEQ**FIELD**MAT**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' END SELECT @TYPE = ISNULL([ST].[name], ''), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')) FROM sys.objects [SO] INNER JOIN sys.columns [SC] INNER JOIN sys.types [ST] ON [ST].[system_type_id] = [SC].[system_type_id] LEFT OUTER JOIN [dbo].[SystemUserDefinedFields] [SUF] ON [SUF].[FilePrefix] = @PREFIX AND [SUF].[FieldName] = @FIELD ON [SC].object_id = [SO].object_id AND [SC].[name] = @FIELD WHERE [SO].[name] = 'matters' AND [SO].[type] = 'U' IF (@TYPE = 'datetime') OR (@TYPE = 'datetime2') OR (@TYPE = 'date') OR (@TYPE = 'smalldatetime') BEGIN IF @FORFUNCTION = 0 BEGIN IF @SUFFMT = '@d6' BEGIN SET @RESULT = 'f.format([MAT].[' + @FIELD + '], ''DD/MM/YY'')' END ELSE IF @SUFFMT = '@d8' BEGIN SET @RESULT = 'f.format([MAT].[' + @FIELD + '], ''DD MMM YYYY'')' END ELSE BEGIN SET @RESULT = 'f.format([MAT].[' + @FIELD + '], ''D MMMM YYYY'')' END END ELSE BEGIN SET @RESULT = '[MAT].[' + @FIELD + ']' END RETURN @RESULT END IF (@TYPE = 'money') OR (@TYPE = 'decimal') OR (@TYPE = 'float') OR (@TYPE = 'numeric') BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.format([MAT].[' + @FIELD + '], ''N2'')' END ELSE BEGIN SET @RESULT = '[MAT].[' + @FIELD + ']' END RETURN @RESULT END IF (@TYPE = 'int') OR (@TYPE = 'bigint') OR (@TYPE = 'smallint') OR (@TYPE = 'tinyint') BEGIN IF @FORFUNCTION = 0 BEGIN SET @RESULT = 'f.CStr([MAT].[' + @FIELD + '])' END ELSE BEGIN SET @RESULT = '[MAT].[' + @FIELD + ']' END RETURN @RESULT END RETURN 'f.CStr([MAT].[' + @FIELD + '])' END SET @TYPE = NULL SET @SUFFMT = NULL SET @ACTUALNAME = NULL SET @SQLSTATEMENT = NULL IF NOT EXISTS (SELECT TOP 1 1 FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = @PREFIX AND [SUF].[FIELDNAME] = @FIELD) BEGIN RETURN @ORIGINAL END SELECT @TYPE = RTRIM(ISNULL([SUF].[Type], 'Text')), @SUFFMT = RTRIM(ISNULL([SUF].[FORMAT], '')), @ACTUALNAME = RTRIM(ISNULL([SUF].[ActualName], '')), @SQLSTATEMENT = RTRIM(ISNULL([SUF].[SQLStatement], '')) FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = @PREFIX AND [SUF].[FIELDNAME] = @FIELD IF RTRIM(ISNULL(@TYPE, '')) = '' RETURN '''OLDPARSEQ**FIELD**' + REPLACE(@PREFIX, ':', '') + '**' + @FIELD + '**TYPE**System**QESRAPDLO**''' IF RTRIM(ISNULL(@SUFFMT, '')) = '' RETURN '''OLDPARSEQ**FIELD**' + REPLACE(@PREFIX, ':', '') + '**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**''' IF (RTRIM(ISNULL(@SUFFMT, '')) <> '') AND (RTRIM(ISNULL(@SUFFMT, '')) NOT LIKE '@s%') BEGIN RETURN 'f.Format(''OLDPARSEQ**FIELD**' + REPLACE(@PREFIX, ':', '') + '**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**'', ''' + @SUFFMT + ''')' END ELSE BEGIN RETURN 'f.CStr(''OLDPARSEQ**FIELD**' + REPLACE(@PREFIX, ':', '') + '**' + @FIELD + '**TYPE**' + @TYPE + '**QESRAPDLO**'')' END --SELECT @PREFIX AS [PREFIX], -- @FIELD AS [Field], -- @ASSOCTYPE AS [AssociateType], -- @CONNUM AS [CONNUM], -- @TYPE AS [TYPE] --SELECT @RESULT RETURN @ORIGINAL -- never gonna happen but just in case END GO IF OBJECT_ID('KAAS_FN_FunctionInterpreter',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_FunctionInterpreter] GO CREATE FUNCTION [dbo].[KAAS_FN_FunctionInterpreter] (@FUNCTION VARCHAR(100), @PARAMETERS VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Replaces a Clarion function with an f. Function equivalent * * * * Stored Procedure : KAAS_FN_FunctionInterpreter * * Copie From : [dbo].[ky_NETFNFunctionInterpreter] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-11 Pino Carafa Created * * 2019-01-18 Pino Carafa Added Choose, IIF, UDF * * 2019-01-22 Pino Carafa Use Comparison Interpreter for Choose and IIF * * 2019-02-01 Pino Carafa Added CANCount and LCNCount * * 2019-02-19 Pino Carafa Added DateDiff * * 2019-12-19 Vinodhan Created KAAS_FN_FunctionInterpreter * * * *************************************************************************************************************/ BEGIN DECLARE @PARMPOS INT DECLARE @PARM1 VARCHAR(MAX) DECLARE @RESULT VARCHAR(MAX) DECLARE @PARMNO INT DECLARE @PARMCOUNT INT DECLARE @PARMTABLE TABLE ([id] INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, [Parameter] VARCHAR(MAX)) WHILE @PARAMETERS <> '' BEGIN SET @PARMPOS = PATINDEX('%****PARMSEP****%', @PARAMETERS) IF @PARMPOS = 0 BEGIN INSERT INTO @PARMTABLE ([Parameter]) VALUES(@PARAMETERS) SET @PARAMETERS = '' END ELSE BEGIN INSERT INTO @PARMTABLE ([Parameter]) VALUES(SUBSTRING(@PARAMETERS, 1, @PARMPOS - 1)) SET @PARAMETERS = SUBSTRING(@PARAMETERS, @PARMPOS + 15, LEN(@PARAMETERS) - 14) END END IF (@FUNCTION = 'sub') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 3) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.Substring(' + @RESULT + ')' END ELSE IF ((@FUNCTION = 'clip') OR (@FUNCTION = 'trim')) AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.Clip(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'left') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 2) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.Left(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'right') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 2) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.Right(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'cstr') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.CStr(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'chr') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.Chr(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'format') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 2) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.Format(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'LAddress') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 2) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.AddressLine(' + @RESULT + ')' END ELSE IF (@FUNCTION = 'day') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.DateNumber(f.Format(' + @RESULT + ', ''@d8''), ''DAY'')' END ELSE IF (@FUNCTION = 'month') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.DateNumber(f.Format(' + @RESULT + ', ''@d8''), ''MONTH'')' END ELSE IF (@FUNCTION = 'year') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.DateNumber(f.Format(' + @RESULT + ', ''@d8''), ''YEAR'')' END ELSE IF (@FUNCTION = 'udf') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] IF LEN(@RESULT) > 0 BEGIN IF (SUBSTRING(@RESULT, 1, 1) = '''') AND (SUBSTRING(@RESULT, LEN(@RESULT), 1) = '''') BEGIN SET @RESULT = SUBSTRING(@RESULT, 2, LEN(@RESULT) - 2) END END IF EXISTS (SELECT TOP 1 1 FROM [dbo].[SystemUserDefinedFields] [SUF] WHERE [SUF].[FILEPREFIX] = 'UDF:' AND [SUF].[FIELDNAME] = @RESULT AND RTRIM(ISNULL([SUF].[SQLSTATEMENT], '')) NOT IN ('', '[UDF].[Value]', '[UDF].[Text1]')) BEGIN SET @RESULT = 'f.SQL' + @RESULT + '([CDE].[Code])' END ELSE BEGIN SET @RESULT = 'f.UDF([CDE].[Code], ''' + @RESULT + ''')' END END ELSE IF (@FUNCTION = 'lcncount') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 0) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.LCNCount([CDE].[Code])' END ELSE IF (@FUNCTION = 'cancount') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 1) BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = 'f.CANCount([CDE].[Code], ' + @RESULT + ')' END ELSE IF (@FUNCTION = 'iif') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 3) BEGIN SET @RESULT = 'CASE WHEN ' + (SELECT [dbo].[KAAS_FN_InterpretComparison]([PRM].[Parameter]) FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1) + ' = 1 THEN ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 2) + ' ELSE ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 3) + ' END' --SET @RESULT = '''' + REPLACE((SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1), '''', '''''') + '''' END ELSE IF (@FUNCTION = 'datediff') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 2) BEGIN --years SET @RESULT = 'f.DateDiff(''year'', ' + (SELECT [PRM].[PARAMETER] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1) + ', ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 2) + ', 1)' END ELSE IF (@FUNCTION = 'datediff') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 3) BEGIN --date difference as an Age function only SET @RESULT = 'f.DateDiff(' + (SELECT [PRM].[PARAMETER] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1) + ', ' + (SELECT [PRM].[PARAMETER] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 2) + ', ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 3) + ', 1)' END ELSE IF (@FUNCTION = 'datediff') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 4) BEGIN --date difference as an Age function only SET @RESULT = 'f.DateDiff(' + (SELECT [PRM].[PARAMETER] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1) + ', ' + (SELECT [PRM].[PARAMETER] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 2) + ', ' + (SELECT [PRM].[PARAMETER] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 3) + ', ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 4) + ')' END ELSE IF (@FUNCTION = 'choose') AND ((SELECT COUNT(1) FROM @PARMTABLE) > 1) BEGIN SET @RESULT = '' IF ((SELECT COUNT(1) FROM @PARMTABLE) = 3) BEGIN SET @PARM1 = (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1) IF [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('=', @PARM1) > 0 OR [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('!', @PARM1) > 0 OR [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('<', @PARM1) > 0 OR [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('>', @PARM1) > 0 BEGIN --This is a "choose" used as the equivalent of an IIF SET @RESULT = 'CASE WHEN ' + (SELECT CONVERT(VARCHAR, [dbo].[KAAS_FN_InterpretComparison]([PRM].[Parameter])) FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 1) + ' = 1 THEN ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 2) + ' ELSE ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = 3) + ' END' END END IF @RESULT = '' BEGIN -- Any other type of 'Choose' SET @RESULT = 'CASE ' + @PARM1 SET @PARMNO = 1 SELECT @PARMCOUNT = COUNT(1) FROM @PARMTABLE WHILE @PARMNO < @PARMCOUNT BEGIN SET @PARMNO = @PARMNO + 1 SET @RESULT = @RESULT + ' WHEN ' + CONVERT(VARCHAR, @PARMNO - 1) + ' THEN ' + (SELECT [PRM].[Parameter] FROM @PARMTABLE [PRM] WHERE [PRM].[id] = @PARMNO) END SET @RESULT = @RESULT + ' ELSE '''' END' END END ELSE IF (@FUNCTION = 'today') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 0) BEGIN SET @RESULT = 'f.Today()' END ELSE IF (@FUNCTION = 'now') AND ((SELECT COUNT(1) FROM @PARMTABLE) = 0) BEGIN SET @RESULT = 'f.Now()' END ELSE --Just pass back out whatever was passed in BEGIN SET @RESULT = '' SELECT @RESULT = @RESULT + CASE WHEN @RESULT = '' THEN '' ELSE ', ' END + [PRM].[Parameter] FROM @PARMTABLE [PRM] ORDER BY [id] SET @RESULT = @FUNCTION + '(' + @RESULT + ')' END RETURN @RESULT END GO IF OBJECT_ID('KAAS_FN_GetAddressLineSQL',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetAddressLineSQL] GO CREATE FUNCTION [dbo].[KAAS_FN_GetAddressLineSQL] (@Table NVARCHAR(128), @Column NVARCHAR(128)) RETURNS VARCHAR(300) AS /**************************************************************************** * * * Returns SQL Code to get an address line. For building dynamic * * SQL statements * * * * Stored Proceudre : KAAS_FN_GetAddressLineSQL * * Copied From : [dbo].[ky_NETFNGetAddressLineSQL] * * * * Scalar function can be used in SELECT statements * * * * Maintenance History * * 2015-08-24 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_GetAddressLineSQL * * * ****************************************************************************/ BEGIN DECLARE @LINE INT DECLARE @LINEVAR VARCHAR(1) DECLARE @RETURN NVARCHAR(500) SET @LINEVAR = SUBSTRING(@Column, LEN(@Column), 1) IF ISNUMERIC(@LINEVAR) = 1 BEGIN SET @LINE = CONVERT(INT, @LINEVAR) SET @Column = SUBSTRING(@Column, 1, LEN(@Column) - 1) SET @RETURN = N'[dbo].[KAAS_FN_AddressLine]([' + @Table + N'].[' + @Column + N'], ' + CONVERT(NVARCHAR(1), @LINE) + N')' END ELSE BEGIN SET @RETURN = N'[' + @Table + N'].[' + @Column + N']' END RETURN @RETURN END GO IF OBJECT_ID('KAAS_FN_GetBracketNestingLevel',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetBracketNestingLevel] GO CREATE FUNCTION [dbo].[KAAS_FN_GetBracketNestingLevel] (@INPUT VARCHAR(MAX), @MaxPos INT) RETURNS INT AS /************************************************************************************************************* * * * returns the bracket nesting level of an expression * * This can be used to check the bracket nesting level for the first @MaxPos - 1 characters in a string * * If the number of Opening brackets matches the number of Closing brackets, this function will return 0 * * except if there are closing brackets BEFORE an opening bracket. E.g. ")(" - this would return -1 * * Otherwise, () will return 0. (() will return 1, etc * * * * Stored Procedure : [dbo].[ky_NETFNGetBracketNestingLevel] * * Copied From : KAAS_FN_GetBracketNestingLevel * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: - 5.5.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-01-29 Pino Carafa Created * * 2019-12-18 Vinodhan Created KAAS_FN_GetBracketNestingLevel * * * *************************************************************************************************************/ BEGIN IF @INPUT IS NULL BEGIN RETURN 0 END IF @MaxPos = 0 BEGIN SET @MaxPos = LEN(@INPUT) + 1 END DECLARE @BRACKOPEN INT DECLARE @BRACKCLOSE INT DECLARE @OpenCount INT SET @BRACKOPEN = CHARINDEX('(', @INPUT) SET @BRACKCLOSE = CHARINDEX(')', @INPUT) SET @OpenCount = 0 IF @BRACKOPEN = 0 BEGIN SET @BRACKOPEN = @MaxPos END IF @BRACKCLOSE = 0 BEGIN SET @BRACKCLOSE = @MaxPos END WHILE ( (@BRACKOPEN < @MaxPos) OR (@BRACKCLOSE < @MaxPos)) BEGIN IF @BRACKOPEN < @BRACKCLOSE BEGIN SET @OpenCount = @OpenCount + 1 SET @BRACKOPEN = CHARINDEX('(', @INPUT, @BRACKOPEN + 1) END ELSE BEGIN SET @OpenCount = @OpenCount - 1 SET @BRACKCLOSE = CHARINDEX(')', @INPUT, @BRACKCLOSE + 1) IF @OpenCount < 0 BEGIN --oh no you don't SET @BRACKOPEN = @MaxPos SET @BRACKCLOSE = @MaxPos END END IF @BRACKOPEN = 0 BEGIN SET @BRACKOPEN = @MaxPos END IF @BRACKCLOSE = 0 BEGIN SET @BRACKCLOSE = @MaxPos END END RETURN @OpenCount END GO IF OBJECT_ID('KAAS_FN_GetColumnSize',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetColumnSize] GO CREATE FUNCTION [dbo].[KAAS_FN_GetColumnSize] (@ObjectID INT, @ColumnID INT) RETURNS INT AS /******************************************************************* * Function Name : KAAS_FN_GetColumnSize * Copied From : ky_NETFNGetColumnSize * * Modify History: * 2019-08-06 Vinodhan Created KAAS_FN_GetColumnSize *******************************************************************/ BEGIN DECLARE @MAXLEN INT SELECT @MAXLEN = CASE WHEN SC.[system_type_id] IN (35, 99) THEN 0 WHEN (SC.[system_type_id] IN (167, 231)) AND (SC.[max_length] = -1) THEN 0 WHEN SC.[system_type_id] IN (167, 175, 231, 239) THEN SC.[max_length] WHEN SC.[system_type_id] = 204 THEN 1 --bit WHEN SC.[system_type_id] = 48 THEN 3 --tinyint - valid values 0 to 255 WHEN SC.[system_type_id] = 52 THEN 6 --SMALLINT - valid values -32768 to 32767 WHEN SC.[system_type_id] = 56 THEN 11 --int - valid values -2147483648 to 2147483647 WHEN SC.[system_type_id] = 127 THEN 20 --BIGINT - valid values -9223372036854775808 to 9223372036854775807 WHEN (SC.[system_type_id] IN (60, 106, 108, 122)) AND (SC.[scale] = 0) THEN SC.[precision] + 1 -- Allow for- sign WHEN (SC.[system_type_id] IN (60, 106, 108, 122)) AND (SC.[scale] <> 0) THEN SC.[precision] + 2 -- Allow for DECIMAL point and - sign ELSE 0 END FROM sys.[columns] SC WHERE SC.[object_id] = @objectid AND SC.[column_id] = @columnid RETURN @MAXLEN END GO IF OBJECT_ID('KAAS_FN_GetDateFromClarion',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetDateFromClarion] GO CREATE FUNCTION [dbo].[KAAS_FN_GetDateFromClarion] ( @ClarionDate INT ) RETURNS VARCHAR(MAX) AS /******************************************************************************** * * * Returns date by converting the clarion formatted value * * Stored Procedure : KAAS_FN_GetDateFromClarion * * Maintenance History * * 2021-08-12 Prabhu V Created * * * *******************************************************************************/ BEGIN DECLARE @Date DATE SET @Date = DATEADD(dd, @ClarionDate, '18001228') RETURN @Date END GO IF OBJECT_ID('KAAS_FN_GetDefaultRate',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetDefaultRate] GO CREATE FUNCTION [dbo].[KAAS_FN_GetDefaultRate] (@MATTER VARCHAR(20), @FEEEARN VARCHAR(10), @NCCCODE VARCHAR(10), @TASK VARCHAR(6)) RETURNS DECIMAL(18, 2) AS /******************************************************************************************************* * Calculates the default Rate for a FeeEarner/Matter * * * * Stored Procedure Name : [dbo].[KAAS_FN_GetDefaultRate] * * Copied from : [dbo].[ky_NETFNGetDefaultRate] * * * * Modification History : * * 2019-04-24 Vinodhan K Created * *******************************************************************************************************/ BEGIN DECLARE @CLIENT VARCHAR(10) DECLARE @MatterChargeLevel INT DECLARE @MCRRATE DECIMAL(18, 2) DECLARE @MCRRATE2 DECIMAL(18, 2) DECLARE @CCRRATE DECIMAL(18, 2) DECLARE @CCRRATE2 DECIMAL(18, 2) DECLARE @HDLRATE DECIMAL(10, 2) DECLARE @TASKCODE VARCHAR(10) DECLARE @CHARGEFACTOR DECIMAL(4, 2) DECLARE @ACTUALRATE DECIMAL(18, 2) SELECT @CLIENT = RTRIM(ISNULL(MAT.[ClientCode], '')), @MatterChargeLevel = ISNULL(MAT.[ChargeLevel], 3), @TASKCODE = CASE RTrim(IsNull(@MATTER, '')) WHEN '' THEN RTRIM(ISNULL(@NCCCODE, '')) ELSE RTRIM(ISNULL(@TASK, '')) END FROM [dbo].[matters] MAT WHERE MAT.[Code] = @MATTER SELECT @MCRRATE = MCOR.[Rate] FROM [dbo].[MatterChargeOutRates] MCOR WHERE MCOR.[FeCode] = @FEEEARN AND MCOR.[MatterCode] = @MATTER SELECT @MCRRATE2 = MCORG.[Rate] FROM [dbo].[Handlers] HANG INNER JOIN [dbo].[MatterChargeOutRates] MCORG ON MCORG.[FeCode] = HANG.[ChargeGroup] AND MCORG.[MatterCode] = @MATTER WHERE HANG.[CODE] = @FEEEARN SET @MCRRATE2 = ISNULL(@MCRRATE2, 0) SET @MCRRATE = ISNULL(@MCRRATE, @MCRRATE2) SELECT @CCRRATE = CCOR.[Rate] FROM [dbo].[ClientChargeOutRates] CCOR WHERE CCOR.[FeCode] = @FEEEARN AND CCOR.[ClientCode] = @CLIENT SELECT @CCRRATE2 = CCORG.[Rate] FROM [dbo].[Handlers] HANG2 INNER JOIN [dbo].[ClientChargeOutRates] CCORG ON CCORG.[FeCode] = HANG2.[ChargeGroup] AND CCORG.[ClientCode] = @CLIENT WHERE HANG2.[CODE] = @FEEEARN SET @CCRRATE2 = ISNULL(@CCRRATE2, 0) SET @CCRRATE = ISNULL(@CCRRATE, @CCRRATE2) SELECT @HDLRATE = CASE IsNull(@MatterChargeLevel, 3) WHEN 1 THEN IsNull(HDL.[RATE1], 0) WHEN 2 THEN IsNull(HDL.[RATE2], 0) WHEN 3 THEN IsNull(HDL.[RATE3], 0) WHEN 4 THEN IsNull(HDL.[RATE4], 0) WHEN 5 THEN IsNull(HDL.[RATE5], 0) ELSE IsNull(HDL.[RATE], 0) END FROM [dbo].[Handlers] HDL WHERE HDL.[CODE] = @FEEEARN SET @HDLRATE = ISNULL(@HDLRATE, 0) SELECT @CHARGEFACTOR = CASE IsNull(TAC.[ChargeLevel], 'C') WHEN 'A' THEN 0.33 WHEN 'B' THEN 0.67 WHEN 'C' THEN 1.00 WHEN 'D' THEN 1.33 WHEN 'E' THEN 1.67 ELSE 1.00 END FROM [dbo].[TasksCodes] TAC WHERE TAC.[CODE] = @TASKCODE SET @CHARGEFACTOR = ISNULL(@CHARGEFACTOR, 1) SELECT @ACTUALRATE = Case When IsNull(MAT.[ChargeOutRateInd], 'N') = 'Y' THEN @MCRRATE When IsNull(CON.[ChargeOutRateInd], 'N') = 'Y' THEN @CCRRATE ELSE @CHARGEFACTOR * @HDLRATE END FROM [dbo].[matters] MAT INNER JOIN [dbo].[contacts] CON ON CON.[Code] = MAT.[ClientCode] WHERE MAT.[code] = @MATTER SET @ACTUALRATE = ISNULL(@ACTUALRATE, @CHARGEFACTOR * @HDLRATE) RETURN @ACTUALRATE END GO IF OBJECT_ID(N'KAAS_FN_GetDocFolders',N'TF')IS NOT NULL DROP FUNCTION KAAS_FN_GetDocFolders GO CREATE FUNCTION [dbo].[KAAS_FN_GetDocFolders] (@MatterCode VARCHAR(20), @parentid INT, @fulltree BIT, @includeparent BIT) RETURNS @DocFolders TABLE ([seq] INT IDENTITY (1, 1) NOT NULL PRIMARY KEY, [id] INT NOT NULL, [parent] INT NOT NULL, [foldername] VARCHAR(500) NOT NULL, [foldericon] INT NOT NULL, [folderimage] VARBINARY(MAX), [foldershared] BIT NOT NULL, [folderisours] BIT NOT NULL, [documentcount] INT NOT NULL) AS /************************************************************************************************************* * * * Stored Procedure Name: [dbo].[KAAS_FN_GetDocFolders] * * Copied from : [dbo].[ky_NETTFGetDocFolders4] * * * * * * Retrieve a document folder tree * * @parentid - the ID of the root folder * * @fulltree - get the complete tree for @parentid * * 0 - get only the first level child nodes * * 1 - get all child nodes * * @includeparent - include the parent node itself * * 0 - the top level returned are the child nodes * * 1 - the top level returned is the parent node * * * * Modification History: * * 2018-12-06 Arun.V Created to return file count * * 2019-04-26 Vinodhan.K Added folderimage field * * 2019-08-16 Arun V Changed [docfoldercount] to update the files count, * *************************************************************************************************************/ BEGIN Declare @DocFoldersX Table ([seq] INT IDENTITY (0, 1) NOT NULL PRIMARY KEY, [id] INT NOT NULL, [parent] INT NOT NULL, [foldername] VARCHAR(500) NOT NULL, [foldericon] INT NOT NULL, [folderimage] VARBINARY(MAX), [foldershared] BIT NOT NULL, [folderisours] BIT NOT NULL, [docfoldercount] INT NOT NULL, [Iteration] INT NULL) DECLARE @AllFilesCount INT =0 IF(@includeparent =1) BEGIN SET @AllFilesCount = (SELECT count(*) FROM DiaryAttachments where CASECODE = @MatterCode) INSERT INTO @DocFolders ([id], [parent], [foldername], [foldericon], [folderimage], [foldershared], [folderisours], [documentcount]) SELECT 0, -1, -- To avoid recusrive loop in WebApi 'All', 0, NULL, 0, 0, @AllFilesCount END IF ISNULL(@parentid, 0) = 0 BEGIN INSERT INTO @DocFoldersX ([id], [parent], [foldername], [foldericon], [folderimage], [foldershared], [folderisours], [docfoldercount], Iteration) SELECT [DF].[id], 0, [DF].[foldername], [DF].[foldericon], [DFU].[image], 0, 1, 0, 0 FROM [dbo].[DocFolders] [DF] LEFT JOIN [dbo].[DocFolderUploadedImages] [DFU] ON [DF].[foldericon] = [DFU].[id] WHERE [DF].[parent] IS NULL ORDER BY [DF].[foldername], [DF].[id] END ELSE BEGIN IF @includeparent = 1 BEGIN INSERT INTO @DocFoldersX ([id], [parent], [foldername], [foldericon], [folderimage], [foldershared], [folderisours], [docfoldercount], Iteration) SELECT [DF].[id], ISNULL([DF].[parent], 0), [DF].[foldername], [DF].[foldericon], [DFU].[image], 0, 1, 0, 0 FROM [dbo].[DocFolders] [DF] LEFT JOIN [dbo].[DocFolderUploadedImages] [DFU] ON [DF].[foldericon] = [DFU].[id] WHERE [DF].[id] = @parentid ORDER BY [DF].[foldername], [DF].[id] END ELSE BEGIN INSERT INTO @DocFoldersX ([id], [parent], [foldername], [foldericon], [folderimage], [foldershared], [folderisours], [docfoldercount], Iteration) SELECT [DF].[id], ISNULL([DF].[parent], 0), [DF].[foldername], [DF].[foldericon], [DFU].[image], 0, 1, 0, 0 FROM [dbo].[DocFolders] [DF] LEFT JOIN [dbo].[DocFolderUploadedImages] [DFU] ON [DF].[foldericon] = [DFU].[id] WHERE [DF].[parent] = @parentid ORDER BY [DF].[foldername], [DF].[id] END END UPDATE [DFX] SET [DFX].[foldershared] = [FSDF].[Shared], [DFX].[folderisours] = [IO].[IsOurs] FROM @DocFoldersX [DFX] INNER JOIN [dbo].[FileSharingDocFolders] [FSDF] CROSS APPLY (SELECT CASE WHEN COUNT(CASE WHEN ISNULL([FSS].[CollabDocFolderID], 0) = 0 THEN 1 ELSE NULL END) = 0 THEN 0 ELSE 1 END AS [IsOurs] FROM [dbo].[FileSharingMapping] [FSM] INNER JOIN [dbo].[FileSharingServers] [FSS] ON [FSS].[id] = [FSM].[FileSharingServersID] WHERE [FSM].[FileSharingDocFoldersID] = [FSDF].[DocFolderID]) [IO] ON [FSDF].[DocFolderID] = [DFX].[id] DECLARE @ITEM INT=0 WHILE EXISTS(SELECT NULL FROM [dbo].[DocFolders] [DF] INNER JOIN @DocFoldersX DocFoldersX ON DF.parent=DocFoldersX.Id And Iteration=@Item) BEGIN INSERT INTO @DocFoldersX ([id] ,[parent] ,[foldername] ,[foldericon] ,[folderimage] ,[foldershared] ,[folderisours] ,[docfoldercount] ,Iteration) SELECT [DF].[id], ISNULL(DocFoldersX.ID, 0) [parent], DF.[foldername], [DF].[foldericon], [DFU].[image], 0 [foldershared], 1 [folderisours], 0 [docfoldercount], --INTO #DocFoldersX_Itr @ITEM + 1 [Iteration] FROM [dbo].[DocFolders] [DF] INNER JOIN @DocFoldersX DocFoldersX ON DF.parent=DocFoldersX.Id LEFT JOIN [dbo].[DocFolderUploadedImages] [DFU] ON [DF].[foldericon] = [DFU].[id] WHERE DocFoldersX.Iteration=@ITEM ORDER BY [DF].[foldername], [DF].[id] SET @ITEM=@ITEM+1 END UPDATE [DF] SET [DF].[docfoldercount] = [TTD].[TOTAL] FROM @DocFoldersX [DF] CROSS APPLY (SELECT COUNT(1) AS [TOTAL] FROM [dbo].[DocFolderDocuments] [DFD] WHERE [DFD].[DocFolderID] = [DF].[id]) [TTD] WHERE [DF].[Parent] <> -1 Insert into @DocFolders([id],[parent],[foldername],[foldericon],[folderimage],[foldershared],[folderisours],[documentcount]) select [id],[parent],[foldername],[foldericon],[folderimage],[foldershared],[folderisours],[docfoldercount] from @DocFoldersX Order by Foldername, Case when parent =0 then Id else parent end RETURN END GO IF OBJECT_ID('KAAS_FN_GetDocumentName',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetDocumentName] GO CREATE FUNCTION [dbo].[KAAS_FN_GetDocumentName] (@path VARCHAR(255)) RETURNS VARCHAR(255) AS /******************************************************************************************************* * This function is used to Extracts the name of a document out of its path. * * * * Function Name : [dbo].[[KAAS_FN_GetDocumentName]] * * Copied from : [dbo].[[ky_NETFNGetDocumentName]] * * * * Modification History : * * 2019-11-01 Dheepin Vijith Created * *******************************************************************************************************/ BEGIN DECLARE @htap VARCHAR(255) DECLARE @period INT DECLARE @slash INT SET @htap = REVERSE(RTRIM(ISNULL(@path, ''))) SET @period = CHARINDEX('.', @htap) SET @slash = CHARINDEX('\', @htap) IF @period > 0 BEGIN IF (@slash > @period) OR (@slash = 0) BEGIN SET @htap = SUBSTRING(@htap, @period + 1, LEN(@htap) - @period) END END SET @slash = CHARINDEX('\', @htap) IF @slash > 0 BEGIN SET @htap = SUBSTRING(@htap, 1, @slash - 1) END RETURN REVERSE(@htap) END GO IF OBJECT_ID(N'[KAAS_FN_GETFILEPATH]',N'FN')IS NOT NULL DROP FUNCTION [KAAS_FN_GETFILEPATH] GO CREATE FUNCTION [dbo].[KAAS_FN_GETFILEPATH] (@DOCUMENT VARCHAR(500), @FPATH VARCHAR(500)) RETURNS VARCHAR(255) AS /******************************************************************************************************* * This function is used to restrict file not exceed 255 character. * * * * Stored Procedure Name : [dbo].[KAAS_FN_GETFILEPATH] * * Copied from : [dbo].[ky_NETFNGETFILEPATH] * * * * Modification History : * * 2019-04-12 Vinodhan K Created * *******************************************************************************************************/ BEGIN DECLARE @LEN INT DECLARE @RPATH VARCHAR(2000) SET @RPATH = SUBSTRING(@FPATH,LEN(@FPATH)-CHARINDEX ('\',REVERSE(@FPATH))+2,LEN(@FPATH)) SET @FPATH = REPLACE(@FPATH,@RPATH,@DOCUMENT ) SET @LEN = CHARINDEX ('_',REVERSE(@DOCUMENT)) IF( @LEN = 0) BEGIN SET @RPATH = @FPATH END ELSE BEGIN SET @RPATH = REPLACE(@FPATH,SUBSTRING(@DOCUMENT,0,LEN(@DOCUMENT)-CHARINDEX ('_',REVERSE(@DOCUMENT))+1) ,'') END IF(LEN(@FPATH) > 255) BEGIN IF(LEN(@RPATH) < 255) BEGIN DECLARE @PLENGTH INT SET @PLENGTH = 255 - LEN(@RPATH ) DECLARE @FNAME VARCHAR(200) -- PINO 2015-04-20 SET @FNAME = SUBSTRING(@DOCUMENT,0,LEN(@DOCUMENT)-CHARINDEX ('_',REVERSE(@DOCUMENT))+1) --PINO 2015-04-20 SET @RPATH = SUBSTRING(@FNAME,0,@PLENGTH) SET @FPATH = REPLACE(@FPATH, @FNAME, @RPATH) RETURN @FPATH END ELSE IF(LEN(@RPATH) = 255) BEGIN RETURN @RPATH END ELSE BEGIN RETURN 'NOCHANGE' END END ELSE BEGIN RETURN @FPATH END RETURN 'NOCHANGE' END GO IF OBJECT_ID('KAAS_FN_GetHandlerProfileNames',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetHandlerProfileNames] GO CREATE FUNCTION [dbo].[KAAS_FN_GetHandlerProfileNames] (@Handler VARCHAR(10)) RETURNS VARCHAR(MAX) AS /*********************************************************************************** * * [dbo].[KAAS_FN_GetHandlerProfileNames] Copied from [dbo].[ky_NETFNGetKHHandlerProfileNames] * Returns a string containing the Control Profiles that the handler is linked to * as a comma separated list * * Modification History * 2023-04-17 Sadiq Created * ***********************************************************************************/ BEGIN DECLARE @ProfileNames VARCHAR(MAX) SELECT @ProfileNames = CASE WHEN @ProfileNames IS NULL THEN '' ELSE @ProfileNames + ', ' END + PRF.[Name] FROM [dbo].[KHCtlProfileHandlers] PRH INNER JOIN [dbo].[KHCtlProfiles] PRF ON PRF.[id] = PRH.[ProfileID] WHERE PRH.[Handler] = @Handler RETURN ISNULL(@ProfileNames, '') END GO IF OBJECT_ID('KAAS_FN_GetNumericalFormat',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetNumericalFormat] GO CREATE FUNCTION [dbo].[KAAS_FN_GetNumericalFormat] (@VALUE DECIMAL(38, 9), @LENGTH INT, @DECIMALS INT) RETURNS VARCHAR(30) AS /****************************************************************************** * * * Returns a number correctly formatted according to its length and decimals * * * * Stored Procedure : KAAS_FN_GetNumericalFormat * * Copied From : [dbo].[ky_NETFNGetNumericalFormat] * * * * Modification History * * 2016-10-18 Pino Carafa Created * * 2019-12-18 Vinodhan Created KAAS_FN_GetNumericalFormat * * * ******************************************************************************/ BEGIN DECLARE @V30 VARCHAR(30) IF @VALUE IS NULL BEGIN RETURN '' END DECLARE @DEC0 DECIMAL(20, 0) DECLARE @DEC1 DECIMAL(21, 1) DECLARE @DEC2 DECIMAL(22, 2) DECLARE @DEC3 DECIMAL(23, 3) DECLARE @DEC4 DECIMAL(24, 4) DECLARE @DEC5 DECIMAL(25, 5) DECLARE @DEC6 DECIMAL(26, 6) DECLARE @DEC7 DECIMAL(27, 7) DECLARE @DEC8 DECIMAL(28, 8) DECLARE @DEC9 DECIMAL(29, 9) IF @DECIMALS = 0 BEGIN SET @DEC0 = CONVERT(DECIMAL(20, 0), ROUND(@VALUE, 0)) SET @V30 = CONVERT(VARCHAR(30), @DEC0) IF LEN(@V30) > 3 BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 3) + ',' + RIGHT(@V30, 3) END IF LEN(@V30) > 7 BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 7) + ',' + RIGHT(@V30, 7) END IF LEN(@V30) > 11 BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 11) + ',' + RIGHT(@V30, 11) END IF LEN(@V30) > 15 BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 15) + ',' + RIGHT(@V30, 15) END IF LEN(@V30) > 19 BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 19) + ',' + RIGHT(@V30, 19) END RETURN @V30 END IF @DECIMALS = 1 BEGIN SET @DEC1 = CONVERT(DECIMAL(21, 1), ROUND(@VALUE, 1)) SET @V30 = CONVERT(VARCHAR(30), @DEC1) END IF @DECIMALS = 2 BEGIN SET @DEC2 = CONVERT(DECIMAL(22, 2), ROUND(@VALUE, 2)) SET @V30 = CONVERT(VARCHAR(30), @DEC2) END IF @DECIMALS = 3 BEGIN SET @DEC3 = CONVERT(DECIMAL(23, 3), ROUND(@VALUE, 3)) SET @V30 = CONVERT(VARCHAR(30), @DEC3) END IF @DECIMALS = 4 BEGIN SET @DEC4 = CONVERT(DECIMAL(24, 4), ROUND(@VALUE, 4)) SET @V30 = CONVERT(VARCHAR(30), @DEC4) END IF @DECIMALS = 5 BEGIN SET @DEC5 = CONVERT(DECIMAL(25, 5), ROUND(@VALUE, 5)) SET @V30 = CONVERT(VARCHAR(30), @DEC5) END IF @DECIMALS = 6 BEGIN SET @DEC6 = CONVERT(DECIMAL(26, 6), ROUND(@VALUE, 6)) SET @V30 = CONVERT(VARCHAR(30), @DEC6) END IF @DECIMALS = 7 BEGIN SET @DEC7 = CONVERT(DECIMAL(27, 7), ROUND(@VALUE, 7)) SET @V30 = CONVERT(VARCHAR(30), @DEC7) END IF @DECIMALS = 8 BEGIN SET @DEC8 = CONVERT(DECIMAL(28, 8), ROUND(@VALUE, 8)) SET @V30 = CONVERT(VARCHAR(30), @DEC8) END IF @DECIMALS = 9 BEGIN SET @DEC9 = CONVERT(DECIMAL(29, 9), ROUND(@VALUE, 9)) SET @V30 = CONVERT(VARCHAR(30), @DEC9) END IF @DECIMALS > 9 BEGIN RETURN CONVERT(VARCHAR(20), @VALUE) END IF LEN(@V30) > 4 + @DECIMALS BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 4 - @DECIMALS) + ',' + RIGHT(@V30, 4 + @DECIMALS) END IF LEN(@V30) > 8 + @DECIMALS BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 8 - @DECIMALS) + ',' + RIGHT(@V30, 8 + @DECIMALS) END IF LEN(@V30) > 12 + @DECIMALS BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 12 - @DECIMALS) + ',' + RIGHT(@V30, 12 + @DECIMALS) END IF LEN(@V30) > 16 + @DECIMALS BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 16 - @DECIMALS) + ',' + RIGHT(@V30, 16 + @DECIMALS) END IF LEN(@V30) > 20 + @DECIMALS BEGIN SET @V30 = LEFT(@V30, LEN(@V30) - 20 - @DECIMALS) + ',' + RIGHT(@V30, 20 + @DECIMALS) END RETURN @V30 END GO IF OBJECT_ID('KAAS_FN_GetOldPermissions',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetOldPermissions] GO CREATE FUNCTION [dbo].[KAAS_FN_GetOldPermissions] (@HANDLER VARCHAR(10)) RETURNS BIGINT AS /******************************************************************************************************* * * * * * Stored Procedure Name : [dbo].[KAAS_FN_GetOldPermissions] * * Copied from : [dbo].[ky_NETFNGetOldPermissions] * * * * Modification History: * * 2019-04-26 Vinodhan K Created * *******************************************************************************************************/ BEGIN DECLARE @PERMISSIONS BIGINT DECLARE @LOGONS TABLE ([CODE] VARCHAR(10), [LOGON] VARCHAR(10), [NAME] varchar(50), [OPE_NUMBER] int) DECLARE @LOGONS2 TABLE ([CODE] VARCHAR(10), [LOGON] VARCHAR(10), [NAME] varchar(50), [OPE_NUMBER] int) /* To aid uniformity, all queries have the same form. In this first one it should not be necessary to join to @LOGONs but doing so is harmless and it makes this query look the same as all the others. The Outer Apply links to DS1, DS2, DS3 and DS4 check that the DSSW21 entry has not already been matched to a handler. If this is so, it tries to match the DSSW21 record to a handler with an exact name match. */ INSERT INTO @LOGONS2 ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT MTC.[CODE], MTC.[LOGON], MTC.[NAME], MTC.[MATCH] FROM (select HAN.[CODE], HAN.[LOGON], HAN.[NAME], CASE WHEN DS1.[OPE_NUMBER] IS NOT NULL THEN DS1.[OPE_NUMBER] ELSE DS2.[OPE_NUMBER] END AS [Match] from [dbo].[Handlers] HAN OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME])) DS1 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME])) DS2 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_SURNAME]) + ' ' + RTRIM(DS.[OPE_FIRSTNAME]))) DS3 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_FIRSTNAME]) + ' ' + RTRIM(DS.[OPE_SURNAME]))) DS4 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS LEFT OUTER JOIN [dbo].[Handlers] HN ON HN.[NAME] LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME]) OR HN.[NAME] LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME]) WHERE DS1.[OPE_NUMBER] IS NULL AND DS2.[OPE_NUMBER] IS NULL AND DS3.[OPE_NUMBER] IS NULL AND DS4.[OPE_NUMBER] IS NULL AND HN.[CODE] IS NULL AND ( RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_FIRSTNAME]) + '%' OR RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_SURNAME]) + '%')) DS5 WHERE HAN.[CODE] = @HANDLER AND RTRIM(ISNULL(HAN.[Logon], '')) <> '') MTC LEFT OUTER JOIN @LOGONS LO ON LO.[OPE_NUMBER] = MTC.[Match] WHERE MTC.[Match] IS NOT NULL AND LO.[OPE_NUMBER] IS NULL -- This eliminates duplicate matches. If there are more than one handler matching a DSSW21 entry, we can't be sure which one it is, -- and we will ignore the match. We only include the ones that have exactly ONE match INSERT INTO @LOGONS ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT LO.[CODE], LO.[LOGON], LO.[NAME], LO.[OPE_NUMBER] FROM ( SELECT OPE_NUMBER from @LOGONS2 GROUP BY OPE_NUMBER HAVING COUNT(1) = 1) MH INNER JOIN @LOGONS2 LO ON LO.[OPE_NUMBER] = MH.[OPE_NUMBER] DELETE @LOGONS2 /* The Outer Apply links to DS1, DS2, DS3 and DS4 check that the DSSW21 entry has not already been matched to a handler. If this is so, it tries to match the DSSW21 record to a handler with an exact name match. */ INSERT INTO @LOGONS2 ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT MTC.[CODE], MTC.[LOGON], MTC.[NAME], MTC.[MATCH] FROM (select HAN.[CODE], HAN.[LOGON], HAN.[NAME], CASE WHEN DS1.[OPE_NUMBER] IS NOT NULL THEN DS1.[OPE_NUMBER] WHEN DS2.[OPE_NUMBER] IS NOT NULL THEN DS2.[OPE_NUMBER] WHEN DS3.[OPE_NUMBER] IS NOT NULL THEN DS3.[OPE_NUMBER] ELSE DS4.[OPE_NUMBER] END AS [Match] from [dbo].[Handlers] HAN OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME])) DS1 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME])) DS2 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_SURNAME]) + ' ' + RTRIM(DS.[OPE_FIRSTNAME]))) DS3 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_FIRSTNAME]) + ' ' + RTRIM(DS.[OPE_SURNAME]))) DS4 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS LEFT OUTER JOIN [dbo].[Handlers] HN ON HN.[NAME] LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME]) OR HN.[NAME] LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME]) WHERE DS1.[OPE_NUMBER] IS NULL AND DS2.[OPE_NUMBER] IS NULL AND DS3.[OPE_NUMBER] IS NULL AND DS4.[OPE_NUMBER] IS NULL AND HN.[CODE] IS NULL AND ( RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_FIRSTNAME]) + '%' OR RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_SURNAME]) + '%')) DS5 WHERE HAN.[CODE] = @HANDLER AND RTRIM(ISNULL(HAN.[Logon], '')) <> '') MTC LEFT OUTER JOIN @LOGONS LO ON LO.[OPE_NUMBER] = MTC.[Match] WHERE MTC.[Match] IS NOT NULL AND LO.[OPE_NUMBER] IS NULL INSERT INTO @LOGONS ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT LO.[CODE], LO.[LOGON], LO.[NAME], LO.[OPE_NUMBER] FROM ( SELECT OPE_NUMBER from @LOGONS2 GROUP BY OPE_NUMBER HAVING COUNT(1) = 1) MH INNER JOIN @LOGONS2 LO ON LO.[OPE_NUMBER] = MH.[OPE_NUMBER] DELETE @LOGONS2 INSERT INTO @LOGONS2 ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT MTC.[CODE], MTC.[LOGON], MTC.[NAME], MTC.[MATCH] FROM (select HAN.[CODE], HAN.[LOGON], HAN.[NAME], CASE WHEN DS1.[OPE_NUMBER] IS NOT NULL THEN DS1.[OPE_NUMBER] WHEN DS2.[OPE_NUMBER] IS NOT NULL THEN DS2.[OPE_NUMBER] WHEN DS3.[OPE_NUMBER] IS NOT NULL THEN DS3.[OPE_NUMBER] WHEN DS4.[OPE_NUMBER] IS NOT NULL THEN DS4.[OPE_NUMBER] ELSE DS5.[OPE_NUMBER] END AS [Match] from [dbo].[Handlers] HAN OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME])) DS1 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME])) DS2 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_SURNAME]) + ' ' + RTRIM(DS.[OPE_FIRSTNAME]))) DS3 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_FIRSTNAME]) + ' ' + RTRIM(DS.[OPE_SURNAME]))) DS4 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS LEFT OUTER JOIN [dbo].[Handlers] HN ON HN.[NAME] LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME]) OR HN.[NAME] LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME]) WHERE DS1.[OPE_NUMBER] IS NULL AND DS2.[OPE_NUMBER] IS NULL AND DS3.[OPE_NUMBER] IS NULL AND DS4.[OPE_NUMBER] IS NULL AND HN.[CODE] IS NULL AND ( RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_FIRSTNAME]) + '%' OR RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_SURNAME]) + '%')) DS5 WHERE HAN.[CODE] = @HANDLER AND RTRIM(ISNULL(HAN.[Logon], '')) <> '') MTC LEFT OUTER JOIN @LOGONS LO ON LO.[OPE_NUMBER] = MTC.[Match] WHERE MTC.[Match] IS NOT NULL AND LO.[OPE_NUMBER] IS NULL INSERT INTO @LOGONS ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT LO.[CODE], LO.[LOGON], LO.[NAME], LO.[OPE_NUMBER] FROM ( SELECT OPE_NUMBER from @LOGONS2 GROUP BY OPE_NUMBER HAVING COUNT(1) = 1) MH INNER JOIN @LOGONS2 LO ON LO.[OPE_NUMBER] = MH.[OPE_NUMBER] DELETE @LOGONS2 SELECT @PERMISSIONS = CONVERT(BIGINT, ISNULL(JP.[JPER_Permissions], 0)) from [dbo].[Handlers] HAN LEFT OUTER JOIN @LOGONS LO INNER JOIN [dbo].[DSSW21] DS ON DS.[OPE_NUMBER] = LO.[OPE_NUMBER] ON LO.[CODE] = HAN.[CODE] LEFT OUTER JOIN JPermissions JP ON JP.[JPER_UserNumber] = LO.[OPE_NUMBER] WHERE LO.[OPE_NUMBER] IS NOT NULL ORDER BY LO.[OPE_NUMBER] SET @PERMISSIONS = ISNULL(@PERMISSIONS, 0) RETURN @PERMISSIONS END GO IF OBJECT_ID('KAAS_FN_GetSQLConcatenator',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetSQLConcatenator] GO CREATE FUNCTION [dbo].[KAAS_FN_GetSQLConcatenator] (@ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Replaces Clarion ampersands with SQL + signs in concatenators * * * * Stored Procedure : KAAS_FN_GetSQLConcatenator * * Copied From : [dbo].[ky_NETFNGetSQLConcatenator] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-09 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_GetSQLConcatenator * * * *************************************************************************************************************/ BEGIN DECLARE @SIMPLEQUOTE VARCHAR(MAX) DECLARE @WORK VARCHAR(MAX) DECLARE @END INT DECLARE @INDENT INT DECLARE @SIMPLEQUOTEINDENT BIT DECLARE @QUOTEINDENT BIT DECLARE @CHAR VARCHAR(1) SET @SIMPLEQUOTE = REPLACE(REPLACE(@ORIGINAL, '‘', ''''), '’', '''') SET @WORK = '' SET @END = 0 SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 WHILE @END < LEN(@SIMPLEQUOTE) BEGIN SET @END = @END + 1 SET @CHAR = SUBSTRING(@ORIGINAL, @END, 1) IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '''' BEGIN IF SUBSTRING(@ORIGINAL, @END, 1) = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT END END END IF (@CHAR = '&') AND (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) BEGIN SET @WORK = @WORK + '+' END ELSE BEGIN SET @WORK = @WORK + @CHAR END END RETURN @WORK END GO IF OBJECT_ID('KAAS_FN_GetUDFDecider',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetUDFDecider] GO CREATE FUNCTION [dbo].[KAAS_FN_GetUDFDecider] (@ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Converts an old Clarion iif(UDF(' syntax to the .NET Generator compatible equivalent * * * * Stored Procedure : KAAS_FN_GetUDFDecider * * * * Copied From : [dbo].[ky_NETFNGetUDFDecider] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-09 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_GetUDFDecider * * * *************************************************************************************************************/ BEGIN DECLARE @SIMPLEQUOTE VARCHAR(MAX) SET @SIMPLEQUOTE = REPLACE(REPLACE(@ORIGINAL, '‘', ''''), '’', '''') DECLARE @STARTPART VARCHAR(MAX) DECLARE @TRUEPART VARCHAR(MAX) DECLARE @TRUEVALUE VARCHAR(MAX) DECLARE @FALSEVALUE VARCHAR(MAX) DECLARE @ENDPART VARCHAR(MAX) DECLARE @UDF VARCHAR(30) DECLARE @START INT DECLARE @END INT DECLARE @INDENT INT DECLARE @SIMPLEQUOTEINDENT BIT DECLARE @QUOTEINDENT BIT SET @STARTPART = '' SET @ENDPART = '' SET @START = PATINDEX('%iif(UDF(''%', @SIMPLEQUOTE) IF @START > 0 BEGIN SET @STARTPART = SUBSTRING(@ORIGINAL, 1, @START - 1) END SET @START = CHARINDEX('''', @SIMPLEQUOTE, @START) IF @START > 0 BEGIN SET @END = CHARINDEX('''', @SIMPLEQUOTE, @START + 1) END IF @END = 0 BEGIN RETURN @ORIGINAL --RETURN END SET @UDF = SUBSTRING(@ORIGINAL, @START + 1, @END - @START - 1) SET @END = @END + 1 IF @END > LEN(@SIMPLEQUOTE) BEGIN RETURN @ORIGINAL --RETURN END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) <> ')' BEGIN RETURN @ORIGINAL --RETURN END DECLARE @FOUND BIT SET @FOUND = 0 WHILE (@END < LEN(@SIMPLEQUOTE)) AND (@FOUND = 0) BEGIN SET @END = @END + 1 IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '=' BEGIN SET @FOUND = 1 END END IF @FOUND = 0 BEGIN RETURN @ORIGINAL --RETURN END SET @START = @END + 1 SET @FOUND = 0 SET @FOUND = 0 SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @INDENT = 0 WHILE (@END < LEN(@SIMPLEQUOTE)) AND (@FOUND = 0) BEGIN SET @END = @END + 1 IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '''' BEGIN IF SUBSTRING(@ORIGINAL, @END, 1) = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT END END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '(' BEGIN IF (@QUOTEINDENT = 0) AND (@SIMPLEQUOTEINDENT = 0) BEGIN SET @INDENT = @INDENT + 1 END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ')' BEGIN IF (@QUOTEINDENT = 0) AND (@SIMPLEQUOTEINDENT = 0) BEGIN SET @INDENT = @INDENT - 1 END END IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) AND (@INDENT = 0) BEGIN IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ',' BEGIN SET @FOUND = 1 END END END IF @END > LEN(@SIMPLEQUOTE) BEGIN RETURN @ORIGINAL --RETURN END SET @TRUEPART = LTRIM(RTRIM(SUBSTRING(@ORIGINAL, @START, @END - @START))) SET @START = @END + 1 SET @FOUND = 0 SET @FOUND = 0 SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @INDENT = 0 WHILE (@END < LEN(@SIMPLEQUOTE)) AND (@FOUND = 0) BEGIN SET @END = @END + 1 IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '''' BEGIN IF SUBSTRING(@ORIGINAL, @END, 1) = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT END END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '(' BEGIN IF (@QUOTEINDENT = 0) AND (@SIMPLEQUOTEINDENT = 0) BEGIN SET @INDENT = @INDENT + 1 END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ')' BEGIN IF (@QUOTEINDENT = 0) AND (@SIMPLEQUOTEINDENT = 0) BEGIN SET @INDENT = @INDENT - 1 END END IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) AND (@INDENT = 0) BEGIN IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ',' BEGIN SET @FOUND = 1 END END END IF @END > LEN(@SIMPLEQUOTE) BEGIN RETURN @ORIGINAL --RETURN END SET @TRUEVALUE = LTRIM(RTRIM(SUBSTRING(@ORIGINAL, @START, @END - @START))) SET @START = @END + 1 SET @FOUND = 0 SET @FOUND = 0 SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @INDENT = 0 WHILE (@END < LEN(@SIMPLEQUOTE)) AND (@FOUND = 0) BEGIN SET @END = @END + 1 IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '''' BEGIN IF SUBSTRING(@ORIGINAL, @END, 1) = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT END END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '(' BEGIN IF (@QUOTEINDENT = 0) AND (@SIMPLEQUOTEINDENT = 0) BEGIN SET @INDENT = @INDENT + 1 END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ')' BEGIN IF @INDENT > 0 BEGIN SET @INDENT = @INDENT - 1 END ELSE IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) AND (@INDENT = 0) BEGIN SET @FOUND = 1 END END IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) AND (@INDENT = 0) BEGIN IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ',' BEGIN SET @FOUND = 1 END END END IF @END > LEN(@SIMPLEQUOTE) BEGIN RETURN @ORIGINAL --RETURN END SET @FALSEVALUE = LTRIM(RTRIM(SUBSTRING(@ORIGINAL, @START, @END - @START))) SET @END = @END + 1 IF @END <= LEN(@ORIGINAL) BEGIN SET @ENDPART = SUBSTRING(@ORIGINAL, @END, LEN(@ORIGINAL) - @END + 1) END SET @TRUEPART = [dbo].[KAAS_FN_GetSQLConcatenator](@TRUEPART) IF @TRUEPART LIKE '%iif(UDF(%' BEGIN SET @TRUEPART = [dbo].[KAAS_FN_GetUDFDecider](@TRUEPART) END SET @TRUEVALUE = [dbo].[KAAS_FN_GetSQLConcatenator](@TRUEVALUE) IF @TRUEVALUE LIKE '%iif(UDF(%' BEGIN SET @TRUEVALUE = [dbo].[KAAS_FN_GetUDFDecider](@TRUEVALUE) END SET @FALSEVALUE = [dbo].[KAAS_FN_GetSQLConcatenator](@FALSEVALUE) IF @FALSEVALUE LIKE '%iif(UDF(%' BEGIN SET @FALSEVALUE = [dbo].[KAAS_FN_GetUDFDecider](@FALSEVALUE) END SET @ORIGINAL = @STARTPART + 'f.UDFDecider([CDE].[Code], ''' + @UDF + ''', ' + @TRUEPART + ', ' + @TRUEVALUE + ', ' + @FALSEVALUE + ')' + @ENDPART RETURN @ORIGINAL END GO IF OBJECT_ID('KAAS_FN_GetUDFFormatter',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetUDFFormatter] GO CREATE FUNCTION [dbo].[KAAS_FN_GetUDFFormatter] (@ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Converts an old Clarion format(UDF(' syntax to the .NET Generator compatible equivalent * * * * Stored Procedure : KAAS_FN_GetUDFFormatter * * Copied From : [dbo].[ky_NETFNGetUDFFormatter] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-09 Pino Carafa Created * * 2019-12-18 Vinodhan Created KAAS_FN_GetUDFFormatter * * * *************************************************************************************************************/ BEGIN DECLARE @SIMPLEQUOTE VARCHAR(MAX) SET @SIMPLEQUOTE = REPLACE(REPLACE(@ORIGINAL, '‘', ''''), '’', '''') DECLARE @STARTPART VARCHAR(MAX) DECLARE @FORMAT VARCHAR(MAX) DECLARE @ENDPART VARCHAR(MAX) DECLARE @UDF VARCHAR(30) DECLARE @START INT DECLARE @END INT DECLARE @INDENT INT DECLARE @SIMPLEQUOTEINDENT BIT DECLARE @QUOTEINDENT BIT SET @STARTPART = '' SET @ENDPART = '' SET @START = PATINDEX('%format(UDF(''%', @SIMPLEQUOTE) IF @START > 0 BEGIN SET @STARTPART = SUBSTRING(@ORIGINAL, 1, @START - 1) END SET @START = CHARINDEX('''', @SIMPLEQUOTE, @START) IF @START > 0 BEGIN SET @END = CHARINDEX('''', @SIMPLEQUOTE, @START + 1) END IF @END = 0 BEGIN RETURN @ORIGINAL --RETURN END SET @UDF = SUBSTRING(@ORIGINAL, @START + 1, @END - @START - 1) IF @UDF IS NULL BEGIN RETURN @ORIGINAL --RETURN END SET @END = @END + 1 IF @END > LEN(@SIMPLEQUOTE) BEGIN RETURN @ORIGINAL --RETURN END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) <> ')' BEGIN RETURN @ORIGINAL --RETURN END DECLARE @FOUND BIT SET @END = @END + 1 SET @START = @END + 1 SET @FOUND = 0 SET @FOUND = 0 SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @INDENT = 0 WHILE (@END < LEN(@SIMPLEQUOTE)) AND (@FOUND = 0) BEGIN SET @END = @END + 1 IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '''' BEGIN IF SUBSTRING(@ORIGINAL, @END, 1) = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT END END END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = '(' BEGIN SET @INDENT = @INDENT + 1 END IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ')' BEGIN IF @INDENT > 0 BEGIN SET @INDENT = @INDENT - 1 END ELSE IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) AND (@INDENT = 0) BEGIN SET @FOUND = 1 END END IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) AND (@INDENT = 0) BEGIN IF SUBSTRING(@SIMPLEQUOTE, @END, 1) = ',' BEGIN SET @FOUND = 1 END END END IF @END > LEN(@SIMPLEQUOTE) BEGIN RETURN @ORIGINAL --RETURN END SET @FORMAT = LTRIM(RTRIM(SUBSTRING(@ORIGINAL, @START, @END - @START))) IF @FORMAT IS NULL BEGIN RETURN @ORIGINAL --RETURN END SET @END = @END + 1 IF @END <= LEN(@ORIGINAL) BEGIN SET @ENDPART = SUBSTRING(@ORIGINAL, @END, LEN(@ORIGINAL) - @END + 1) END DECLARE @DATE BIT IF @FORMAT LIKE('%d18%') BEGIN SET @DATE = 1 SET @FORMAT = '''DD MMMM YYYY''' END IF @FORMAT LIKE('%d8%') BEGIN SET @DATE = 1 SET @FORMAT = '''DD MMM YYYY''' END IF @FORMAT LIKE('%d6%') BEGIN SET @DATE = 1 SET @FORMAT = '''DD/MM/YY''' END IF @DATE = 1 BEGIN SET @ORIGINAL = @STARTPART + 'f.AddDays(f.UDFDate([CDE].[Code], ''' + @UDF + '''), 0, ' + @FORMAT + ')' + @ENDPART RETURN @ORIGINAL --RETURN END SET @ORIGINAL = @STARTPART + 'f.GetValue(f.UDFNumber([CDE].[Code], ''' + @UDF + '''), ' + @FORMAT + ', 0)' + @ENDPART RETURN @ORIGINAL --RETURN END GO IF OBJECT_ID('KAAS_FN_GetUnembeddedCharacterPos',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetUnembeddedCharacterPos] GO CREATE FUNCTION [dbo].[KAAS_FN_GetUnembeddedCharacterPos] (@CHARACTER CHAR(1), @ORIGINAL VARCHAR(MAX)) RETURNS INT AS /************************************************************************************************************* * * * Equivalent to CHARINDEX except this one doesn't count anything that's quoted or embedded within brackets * * * * Stored Procedure : KAAS_FN_GetUnembeddedCharacterPos * * Copied From : [dbo].[ky_NETFNGetUnembeddedCharacterPos] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-17 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_GetUnembeddedCharacterPos * * * *************************************************************************************************************/ BEGIN RETURN [dbo].[KAAS_FN_GetUnembeddedCharacterPosFrom](@CHARACTER, @ORIGINAL, 0) END GO IF OBJECT_ID('KAAS_FN_GetUnembeddedCharacterPosFrom',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetUnembeddedCharacterPosFrom] GO CREATE FUNCTION [dbo].[KAAS_FN_GetUnembeddedCharacterPosFrom] (@CHARACTER CHAR(1), @ORIGINAL VARCHAR(MAX), @START INT) RETURNS INT AS /************************************************************************************************************* * * * Equivalent to CHARINDEX except this one doesn't count anything that's quoted or embedded within brackets * * - with START position * * * * Stored Procedure : KAAS_FN_GetUnembeddedCharacterPosFrom * * Copied From : [dbo].[ky_NETFNGetUnembeddedCharacterPosFrom] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-17 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_GetUnembeddedCharacterPosFrom * * * *************************************************************************************************************/ BEGIN DECLARE @SIMPLEQUOTE VARCHAR(MAX) DECLARE @POS INT DECLARE @SIMPLEQUOTEINDENT BIT DECLARE @QUOTEINDENT BIT DECLARE @LEN INT DECLARE @CHAR CHAR(1) DECLARE @ORIGINALCHAR VARCHAR(1) DECLARE @BRACKINDENT INT SET @SIMPLEQUOTE = REPLACE(REPLACE(@ORIGINAL, '‘', ''''), '’', '''') SET @POS = @START - 1 IF @POS < 0 BEGIN SET @POS = 0 END SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @BRACKINDENT = 0 SET @LEN = LEN(@ORIGINAL) WHILE @POS < @LEN BEGIN SET @POS = @POS + 1 SET @CHAR = SUBSTRING(@SIMPLEQUOTE, @POS, 1) SET @ORIGINALCHAR = SUBSTRING(@ORIGINAL, @POS, 1) --First we establish whether we're in a Quoted or an Unembedded part of the string IF @CHAR = '''' BEGIN IF @ORIGINALCHAR = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT SET @ORIGINALCHAR = '''' END END END IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) BEGIN IF @CHAR = '(' BEGIN SET @BRACKINDENT = @BRACKINDENT + 1 END ELSE IF @CHAR = ')' BEGIN SET @BRACKINDENT = @BRACKINDENT - 1 END IF @BRACKINDENT = 0 BEGIN IF @CHAR = @CHARACTER BEGIN RETURN @POS END END END END RETURN 0 END GO IF OBJECT_ID('KAAS_FN_GetUnquotedCharacterPos',N'FN') IS NOT NULL DROP FUNCTION [dbo].[KAAS_FN_GetUnquotedCharacterPos] GO CREATE FUNCTION [dbo].[KAAS_FN_GetUnquotedCharacterPos] (@CHARACTER CHAR(1), @ORIGINAL VARCHAR(MAX)) RETURNS INT AS /************************************************************************************************************* * * * Equivalent to CHARINDEX except this one doesn't count anything that's quoted * * * * Stored Procedure : KAAS_FN_GetUnquotedCharacterPos * * Copied From : [dbo].[ky_NETFNGetUnquotedCharacterPos] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-14 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_GetUnquotedCharacterPos * * * *************************************************************************************************************/ BEGIN RETURN [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom](@CHARACTER, @ORIGINAL, 0) END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_GetUnquotedCharacterPosFrom' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom] END GO CREATE FUNCTION [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom] (@CHARACTER CHAR(1), @ORIGINAL VARCHAR(MAX), @START INT) RETURNS INT AS /************************************************************************************************************* * * * Equivalent to CHARINDEX except this one doesn't count anything that's quoted - with START position * * * * Stored Procedure : KAAS_FN_GetUnquotedCharacterPosFrom * * Copied From : [dbo].[ky_NETFNGetUnquotedCharacterPosFrom] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-15 Pino Carafa Created * * 2019-12-18 Vinodhan Created KAAS_FN_GetUnquotedCharacterPosFrom * * * *************************************************************************************************************/ BEGIN DECLARE @SIMPLEQUOTE VARCHAR(MAX) DECLARE @POS INT DECLARE @SIMPLEQUOTEINDENT BIT DECLARE @QUOTEINDENT BIT DECLARE @LEN INT DECLARE @CHAR CHAR(1) DECLARE @ORIGINALCHAR VARCHAR(1) SET @SIMPLEQUOTE = REPLACE(REPLACE(@ORIGINAL, '‘', ''''), '’', '''') SET @POS = @START - 1 IF @POS < 0 BEGIN SET @POS = 0 END SET @SIMPLEQUOTEINDENT = 0 SET @QUOTEINDENT = 0 SET @LEN = LEN(@ORIGINAL) WHILE @POS < @LEN BEGIN SET @POS = @POS + 1 SET @CHAR = SUBSTRING(@SIMPLEQUOTE, @POS, 1) SET @ORIGINALCHAR = SUBSTRING(@ORIGINAL, @POS, 1) --First we establish whether we're in a Quoted or an Unquoted part of the string IF @CHAR = '''' BEGIN IF @ORIGINALCHAR = '''' BEGIN SET @SIMPLEQUOTEINDENT = 1 - @SIMPLEQUOTEINDENT END ELSE --it's a smart quote BEGIN IF @SIMPLEQUOTEINDENT = 0 BEGIN SET @QUOTEINDENT = 1 - @QUOTEINDENT SET @ORIGINALCHAR = '''' END END END IF (@SIMPLEQUOTEINDENT = 0) AND (@QUOTEINDENT = 0) BEGIN IF @CHAR = @CHARACTER BEGIN RETURN @POS END END END RETURN 0 END GO IF OBJECT_ID(N'[KAAS_FN_GetWorkFlowPath]',N'FN')IS NOT NULL DROP FUNCTION [KAAS_FN_GetWorkFlowPath] GO CREATE FUNCTION [dbo].[KAAS_FN_GetWorkFlowPath] (@WorkflowCode VARCHAR(250) ) RETURNS VARCHAR(255) AS /******************************************************************************************************* * This function is used to Get work flow path * * * Modification History : * * 2024-08-14 Ponni M Created * *******************************************************************************************************/ BEGIN DECLARE @PrecedentPath VARCHAR(250) = NULL; DECLARE @PrecedentPathLen INT = 0; DECLARE @WorkflowPath VARCHAR(250); -- Get the precedent path from SystemConfig SELECT @PrecedentPath = LTRIM(RTRIM(SC.SCPRECEDENTFOLDER)) FROM [SystemConfig] SC; -- Calculate the length of the precedent path if it exists IF(@PrecedentPath IS NOT NULL) BEGIN SELECT @PrecedentPathLen = LEN(RTRIM(LTRIM(@PrecedentPath))); END -- Determine the workflow path SELECT @WorkflowPath = CASE WHEN LTRIM(RTRIM(ISNULL(TM.WKPATH, ''))) = '' THEN @PrecedentPath + '\' + LTRIM(RTRIM(TM.WKDESC)) WHEN @PrecedentPath IS NULL THEN RIGHT(TM.WKPATH, CHARINDEX('\', REVERSE(TM.WKPATH)) - 1) ELSE @PrecedentPath + '\' + SUBSTRING(LTRIM(RTRIM(ISNULL(TM.WKPATH, ''))), @PrecedentPathLen + 2, LEN(LTRIM(RTRIM(ISNULL(TM.WKPATH, ''))))) END FROM [Templates] TM WHERE LTRIM(RTRIM(TM.WKCODE)) = @WorkflowCode; RETURN @WorkflowPath; END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_InterpretComparison' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_InterpretComparison] END GO CREATE FUNCTION [dbo].[KAAS_FN_InterpretComparison] (@COMPARISONSTRING VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Interprets a DOC ASSIST "Comparison" * * * * Stored Procedure : KAAS_FN_InterpretComparison * * Copie From : [dbo].[ky_NETFNInterpretComparison] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-22 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_InterpretComparison * * * *************************************************************************************************************/ BEGIN DECLARE @VALUE1 VARCHAR(MAX) DECLARE @VALUE2 VARCHAR(MAX) DECLARE @EQPOS INT DECLARE @GTPOS INT DECLARE @LTPOS INT DECLARE @NOTPOS INT DECLARE @OPERATOR VARCHAR(4) SET @EQPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('=', @COMPARISONSTRING) SET @GTPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('>', @COMPARISONSTRING) SET @LTPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('<', @COMPARISONSTRING) SET @NOTPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('!', @COMPARISONSTRING) IF @NOTPOS > 0 BEGIN IF @EQPOS = @NOTPOS + 1 BEGIN SET @OPERATOR = '''<>''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @NOTPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @EQPOS + 1, LEN(@COMPARISONSTRING) - @EQPOS))) END END ELSE IF @LTPOS > 0 BEGIN IF @GTPOS = @LTPOS + 1 BEGIN SET @OPERATOR = '''<>''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @LTPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @GTPOS + 1, LEN(@COMPARISONSTRING) - @GTPOS))) END ELSE IF @EQPOS = @LTPOS + 1 BEGIN SET @OPERATOR = '''<=''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @LTPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @EQPOS + 1, LEN(@COMPARISONSTRING) - @EQPOS))) END ELSE BEGIN SET @OPERATOR = '''<''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @LTPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @LTPOS + 1, LEN(@COMPARISONSTRING) - @LTPOS))) END END ELSE IF @GTPOS > 0 BEGIN IF @EQPOS = @GTPOS + 1 BEGIN SET @OPERATOR = '''>=''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @GTPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @EQPOS + 1, LEN(@COMPARISONSTRING) - @EQPOS))) END ELSE BEGIN SET @OPERATOR = '''>''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @GTPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @GTPOS + 1, LEN(@COMPARISONSTRING) - @GTPOS))) END END ELSE IF @EQPOS > 0 BEGIN SET @OPERATOR = '''=''' SET @VALUE1 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, 1, @EQPOS - 1))) SET @VALUE2 = LTRIM(RTRIM(SUBSTRING(@COMPARISONSTRING, @EQPOS + 1, LEN(@COMPARISONSTRING) - @EQPOS))) END RETURN 'f.DoComparison(' + @VALUE1 + ', ' + @VALUE2 + ', ' + @OPERATOR + ')' END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_ISIMAGE_TYPE' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_ISIMAGE_TYPE] END GO CREATE FUNCTION [dbo].[KAAS_FN_ISIMAGE_TYPE] ( @TYPE NVARCHAR(10) ) RETURNS BIT AS /******************************************************************************************************* * This function is used to check the type, as it is in image format or not. * * * * Stored Procedure Name : [dbo].[KAAS_FN_ISIMAGE_TYPE] * * * * Modification History : * * 2019-07-15 Ramesh K Created * *******************************************************************************************************/ BEGIN DECLARE @RetVal BIT = 0; IF @TYPE IS NULL BEGIN RETURN @RETvAL; END SET @TYPE = LOWER(@TYPE); SELECT @RetVal = CASE @TYPE WHEN '.png' THEN 1 WHEN 'png' THEN 1 WHEN 'image/png' THEN 1 WHEN '.jpg' THEN 1 WHEN 'jpg' THEN 1 WHEN 'image/jpg' THEN 1 WHEN '.jpeg' THEN 1 WHEN 'jpeg' THEN 1 WHEN 'image/jpeg' THEN 1 WHEN '.tif' THEN 1 WHEN 'tif' THEN 1 WHEN 'image/tif' THEN 1 WHEN '.tiff' THEN 1 WHEN 'tiff' THEN 1 WHEN 'image/tiff' THEN 1 WHEN '.gif' THEN 1 WHEN 'gif' THEN 1 WHEN 'image/gif' THEN 1 ELSE 0 END RETURN @RetVal; END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_LinearAddress' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_LinearAddress] END GO CREATE FUNCTION [dbo].[KAAS_FN_LinearAddress] (@Address VARCHAR(MAX)) RETURNS VARCHAR(500) WITH RETURNS NULL ON NULL INPUT AS /************************************************************************************************************* * * * Returns a linear representation of an address * * * * This will replace all line breaks with commas, and remove duplicate commas and spaces. * * * * Stored Procedure : KAAS_FN_LinearAddress * * Copied From : [dbo].[ky_NETFNLinearAddress] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: - 5.5.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-02-05 Pino Carafa Created * * 2018-12-20 Pino Carafa Prevent trailing commas * * 2019-02-15 Pino Carafa Handle addresses pasted in from Word, which might just have NewLines * * instead of CRLFs * * 2019-12-19 Vinodhan Created KAAS_FN_LinearAddress * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *************************************************************************************************************/ BEGIN SET @Address = REPLACE(@Address, CHAR(13) + CHAR(10), ', ') SET @Address = REPLACE(@Address, CHAR(13), ', ') SET @Address = REPLACE(@Address, CHAR(10), ', ') DECLARE @NewAddress VARCHAR(MAX) WHILE @Address <> '' BEGIN SET @NewAddress = @Address SET @NewAddress = REPLACE(@NewAddress, ',,', ',') SET @NewAddress = REPLACE(@NewAddress, ', ,', ',') SET @NewAddress = REPLACE(@NewAddress, ' ', ' ') IF @NewAddress = @Address BEGIN BREAK END SET @Address = @NewAddress END SET @Address = [dbo].[KAAS_FN_RemoveSpuriousWhitespace](@Address, 500) IF LEN(@Address) = 0 BEGIN RETURN '' END WHILE LEN(@Address) > 0 BEGIN IF SUBSTRING(@Address, LEN(@Address), 1) = ',' BEGIN SET @Address = SUBSTRING(@Address, 1, LEN(@Address) - 1) END ELSE BEGIN RETURN CONVERT(VARCHAR(500), @Address) END END RETURN CONVERT(VARCHAR(500), @Address) END GO IF EXISTS (SELECT * FROM SYS.[objects] SO WHERE SO.[name] = 'KAAS_FN_MatterClosable' AND SO.[type] = 'TF') BEGIN DROP FUNCTION [dbo].[KAAS_FN_MatterClosable] END GO /******************************************************************************************************* * Get the parameters to establish whether a matter can be closed at this point. * * Please note that Bal, Rec, Diary and Undertakings should prevent a matter from closing, while * * Time and Charge should lead to a warning and the user can decide to close the matter anyway. * * * * Stored Procedure Name : [dbo].[KAAS_FN_MatterClosable] * * Copied from : [dbo].[ky_NETFNMatterClosable] * * * * Modification History : * * 2019-04-24 Vinodhan K Created * *******************************************************************************************************/ GO IF [dbo].[ISSAM4]() = 1 BEGIN EXEC (' CREATE FUNCTION [dbo].[KAAS_FN_MatterClosable] (@MATTER VARCHAR(20)) RETURNS @Closables TABLE ([AlreadyClosed] int, [HasOutstandingBal] int, [HasOutstandingTimeBal] int, [HasOutstandingChargeBal] int, [HasOutstandingRec] int, [HasOutstandingDiary] int, [HasOutstandingUndertakings] int) AS BEGIN DECLARE @AlreadyClosed INT DECLARE @HasOutstandingRec INT DECLARE @HasOutstandingBal INT DECLARE @HasOutstandingTimeBal INT DECLARE @HasOutstandingChargeBal INT DECLARE @HasOutstandingDiary INT DECLARE @HasOutstandingUndertakings INT DECLARE @Year INT DECLARE @IsSAM4 bit SET @IsSAM4 = 1 -- Please see also: ky_NETCaseSummaryPageLoad. If you change any of these calculations, -- ensure the ones in there are changed as well. -- ky_NETTLFetchTimeEntry. If you change any of these calculations, -- ensure the ones in there are changed as well. DECLARE @TimeBal INT DECLARE @ChargeBal DECIMAL(19, 2) DECLARE @TotalCharge Decimal(19, 2) DECLARE @TotalTime INT DECLARE @TimeEntryTotalCharge DECIMAL(19, 2) DECLARE @TimeEntryTotalTime INT SELECT @TimeEntryTotalCharge = ISNULL(SUM(ISNULL(TIE.[Charge], 0)), 0), @TimeEntryTotalTime = ISNULL(SUM(ISNULL(TIE.[TIME], 0)), 0), @TotalCharge = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 ELSE ISNULL(TIE.[Charge], 0) END), 0), @ChargeBal = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 WHEN @IsSAM4 = 1 AND ISNULL(TIE.[InvoiceNo], 0) <> 0 THEN 0 WHEN @IsSAM4 = 1 THEN ISNULL(TIE.[Charge], 0) ELSE ISNULL(TIE.[Charge], 0) - ISNULL(TIE.[BilledAmount], 0) END), 0), @TimeBal = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 WHEN @IsSAM4 = 1 AND ISNULL(TIE.[InvoiceNo], 0) <> 0 THEN 0 WHEN @IsSAM4 = 0 THEN CASE WHEN TIE.[Charge] = 0 THEN 0 ELSE CONVERT(INT, FLOOR(CONVERT(DECIMAL(18, 2), TIE.[TIME]) * ( (TIE.[Charge] - TIE.[BilledAmount]) / TIE.[Charge]))) END ELSE ISNULL(TIE.[Time], 0) END), 0), @TotalTime = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 ELSE ISNULL(TIE.[Time], 0) END), 0) FROM [dbo].[TimeEntry] TIE WHERE TIE.[Matter] = @MATTER AND ( (TIE.[TimeOrCharge] = ''T'') OR (TIE.[TimeOrCharge] = ''C'')) --**Changed fetch condition JIRA 1081 - arun DECLARE @DebtBal DECIMAL(19, 2) DECLARE @OutlayBal DECIMAL(19, 2) DECLARE @DebtBalDate DATETIME DECLARE @OutlayBalDate DATETIME DECLARE @ClientCurrent DECIMAL(19, 2) DECLARE @ClientDeposit DECIMAL(19, 2) DECLARE @NCOMMAND NVARCHAR(MAX) -- To ensure SAM3 will retrieve these from [dbo].[matters] SET @DebtBal = 0 SET @OutlayBal = 0 SET @ClientCurrent = 0 SET @ClientDeposit = 0 SELECT @DebtBal = CONVERT(DECIMAL(19, 2), ISNULL(SUM(ISNULL(TRN.[DebtorsValue], 0)), 0)), @DebtBalDate = MAX(CASE WHEN ISNULL(TRN.[DebtorsValue], 0) = 0 THEN NULL ELSE TRN.[TransDate] END), @OutlayBal = CONVERT(DECIMAL(19, 2), ISNULL(SUM(ISNULL(TRN.[OutlayValue], 0)), 0)), @OutlayBalDate = MAX(CASE WHEN ISNULL(TRN.[OutlayValue], 0) = 0 THEN NULL ELSE TRN.[TransDate] END), @ClientCurrent = CONVERT(DECIMAL(19, 2), ISNULL(SUM(ISNULL(TRN.[ClientCurrent], 0)), 0)), @ClientDeposit = CONVERT(DECIMAL(19, 2), ISNULL(SUM(ISNULL(TRN.[ClientDeposit], 0)), 0)) FROM [dbo].[Transactions] TRN WHERE TRN.[MatterCode] = @MATTER AND TRN.[Posted] = ''Y'' AND TRN.[RecType] <> ''V'' AND TRN.[CorrectionInd] = ''L'' SELECT @AlreadyClosed = CASE WHEN MAT.[Closed] = ''Y'' THEN 1 ELSE 0 END, @HasOutstandingBal = CASE WHEN @DebtBal <> 0 THEN 1 WHEN ISNULL(MAT.[DebtBal], 0) <> 0 THEN 1 WHEN @OutlayBal <> 0 THEN 1 WHEN ISNULL(MAT.[OutlayBal], 0) <> 0 THEN 1 WHEN ISNULL(MAT.[ClientBal], 0) <> 0 --No need to check @ClientCurBal + @ClientDepBal THEN 1 WHEN @ClientCurrent <> 0 THEN 1 WHEN ISNULL(MAT.[ClientCurBal], 0) <> 0 THEN 1 WHEN @ClientDeposit <> 0 THEN 1 WHEN ISNULL(MAT.[ClientDepBal], 0) <> 0 THEN 1 ELSE 0 END, @HasOutstandingTimeBal = CASE WHEN @TimeBal <> 0 THEN 1 ELSE 0 END, @HasOutstandingChargeBal = CASE WHEN @ChargeBal <> 0 THEN 1 ELSE 0 END FROM [dbo].[matters] MAT WHERE MAT.[Code] = @MATTER SET @AlreadyClosed = ISNULL(@AlreadyClosed, 0) SET @HasOutstandingBal = ISNULL(@HasOutstandingBal, 0) SET @HasOutstandingTimeBal = ISNULL(@HasOutstandingTimeBal, 0) SET @HasOutstandingChargeBal = ISNULL(@HasOutstandingChargeBal, 0) SELECT @YEAR = ISNULL(CONVERT(INT, CTL.[NumValue]), DATEPART(YEAR, GetDate())) FROM [dbo].[CtrlNum] CTL WHERE CTL.[Code] = ''CurYear'' IF (@YEAR IS NULL) BEGIN SET @YEAR = DATEPART(YEAR, GetDate()) END SELECT @HasOutstandingRec = CASE COUNT(1) WHEN 0 THEN 0 ELSE 1 END FROM [dbo].[Transactions] TRN WHERE TRN.[MatterCode] = @MATTER AND TRN.[Posted] = ''Y'' AND TRN.[RecType] <> ''V'' AND ( TRN.[CorrectionInd] = ''L'' OR TRN.[CorrectionInd] = ''C'') AND TRN.[PostingYear] = @YEAR AND TRN.[Reconciliation] <= 0 SET @HasOutstandingRec = ISNULL(@HasOutstandingRec, 0) SELECT @HasOutstandingDiary = CASE WHEN COUNT(1) = 0 THEN 0 ELSE 1 END FROM [dbo].[diary] DIA WHERE DIA.[CASECODE] = @MATTER AND DIA.[STATUS] <> 1 SELECT @HasOutstandingUndertakings = CASE WHEN COUNT(1) = 0 THEN 0 ELSE 1 END FROM [dbo].[Undertakings] UND WHERE UND.[MATTER] = @MATTER AND UND.[DISCHARGEDATE] IS NULL INSERT INTO @Closables ([AlreadyClosed], [HasOutstandingBal], [HasOutstandingTimeBal], [HasOutstandingChargeBal], [HasOutstandingRec], [HasOutstandingDiary], [HasOutstandingUndertakings]) SELECT @AlreadyClosed AS [AlreadyClosed], @HasOutstandingBal AS [HasOutstandingBal], @HasOutstandingTimeBal AS [HasOutstandingTimeBal], @HasOutstandingChargeBal AS [HasOutstandingChargeBal], @HasOutstandingRec AS [HasOutstandingRec], @HasOutstandingDiary AS [HasOutstandingDiary], @HasOutstandingUndertakings AS [HasOutstandingUndertakings] RETURN END') END ELSE BEGIN EXEC (' CREATE FUNCTION [dbo].[KAAS_FN_MatterClosable] (@MATTER VARCHAR(20)) RETURNS @Closables TABLE ([AlreadyClosed] int, [HasOutstandingBal] int, [HasOutstandingTimeBal] int, [HasOutstandingChargeBal] int, [HasOutstandingRec] int, [HasOutstandingDiary] int, [HasOutstandingUndertakings] int) AS /*********************************************************************************************** * * KAAS_FN_MatterClosable get the parameters to establish whether a matter can be * closed at this point. Please note that Bal, Rec, Diary and * Undertakings should prevent a matter from closing, while * Time and Charge should lead to a warning and the user can * decide to close the matter anyway. * * Modifications: 2015-02-18 Pino Change calculations to accomodate SAM4, using * original calculations from ky_NETSPCaseSummaryPageLoad * Added warning that if any of these calculations are to be * changed here, then the corresponding calculations in other * procedure(s) must be changed accordingly. * 2015-03-04 Pino No functional change but added reference to * ky_NETTLFetchTimeEntry in comment below. * * 2015-10-29 Pino Carafa * Include calculation for @HasOutstandingRec * * ***********************************************************************************************/ BEGIN DECLARE @AlreadyClosed INT DECLARE @HasOutstandingRec INT DECLARE @HasOutstandingBal INT DECLARE @HasOutstandingTimeBal INT DECLARE @HasOutstandingChargeBal INT DECLARE @HasOutstandingDiary INT DECLARE @HasOutstandingUndertakings INT DECLARE @Year INT DECLARE @IsSAM4 bit SET @IsSAM4 = 0 -- Please see also: ky_NETCaseSummaryPageLoad. If you change any of these calculations, -- ensure the ones in there are changed as well. -- ky_NETTLFetchTimeEntry. If you change any of these calculations, -- ensure the ones in there are changed as well. DECLARE @TimeBal INT DECLARE @ChargeBal DECIMAL(19, 2) DECLARE @TotalCharge Decimal(19, 2) DECLARE @TotalTime INT DECLARE @TimeEntryTotalCharge DECIMAL(19, 2) DECLARE @TimeEntryTotalTime INT SELECT @TimeEntryTotalCharge = ISNULL(SUM(ISNULL(TIE.[Charge], 0)), 0), @TimeEntryTotalTime = ISNULL(SUM(ISNULL(TIE.[TIME], 0)), 0), @TotalCharge = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 ELSE ISNULL(TIE.[Charge], 0) END), 0), @ChargeBal = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 WHEN @IsSAM4 = 1 AND ISNULL(TIE.[InvoiceNo], 0) <> 0 THEN 0 WHEN @IsSAM4 = 1 THEN ISNULL(TIE.[Charge], 0) ELSE ISNULL(TIE.[Charge], 0) - ISNULL(TIE.[BilledAmount], 0) END), 0), @TimeBal = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 WHEN @IsSAM4 = 1 AND ISNULL(TIE.[InvoiceNo], 0) <> 0 THEN 0 WHEN @IsSAM4 = 0 THEN CASE WHEN TIE.[Charge] = 0 THEN 0 ELSE CONVERT(INT, FLOOR(CONVERT(DECIMAL(18, 2), TIE.[TIME]) * ( (TIE.[Charge] - TIE.[BilledAmount]) / TIE.[Charge]))) END ELSE ISNULL(TIE.[Time], 0) END), 0), @TotalTime = ISNULL(SUM(CASE WHEN ISNULL(TIE.[Rec_Irr], '''') = ''N'' THEN 0 ELSE ISNULL(TIE.[Time], 0) END), 0) FROM [dbo].[TimeEntry] TIE WHERE TIE.[Matter] = @MATTER AND ( (TIE.[TimeOrCharge] = ''T'') OR (TIE.[TimeOrCharge] = ''C'')) --**Changed fetch condition JIRA 1081 - arun DECLARE @DebtBal DECIMAL(19, 2) DECLARE @OutlayBal DECIMAL(19, 2) DECLARE @DebtBalDate DATETIME DECLARE @OutlayBalDate DATETIME DECLARE @ClientCurrent DECIMAL(19, 2) DECLARE @ClientDeposit DECIMAL(19, 2) DECLARE @NCOMMAND NVARCHAR(MAX) -- To ensure SAM3 will retrieve these from [dbo].[matters] SET @DebtBal = 0 SET @OutlayBal = 0 SET @ClientCurrent = 0 SET @ClientDeposit = 0 SELECT @AlreadyClosed = CASE WHEN MAT.[Closed] = ''Y'' THEN 1 ELSE 0 END, @HasOutstandingBal = CASE WHEN @DebtBal <> 0 THEN 1 WHEN ISNULL(MAT.[DebtBal], 0) <> 0 THEN 1 WHEN @OutlayBal <> 0 THEN 1 WHEN ISNULL(MAT.[OutlayBal], 0) <> 0 THEN 1 WHEN ISNULL(MAT.[ClientBal], 0) <> 0 --No need to check @ClientCurBal + @ClientDepBal THEN 1 WHEN @ClientCurrent <> 0 THEN 1 WHEN ISNULL(MAT.[ClientCurBal], 0) <> 0 THEN 1 WHEN @ClientDeposit <> 0 THEN 1 WHEN ISNULL(MAT.[ClientDepBal], 0) <> 0 THEN 1 ELSE 0 END, @HasOutstandingTimeBal = CASE WHEN @TimeBal <> 0 THEN 1 ELSE 0 END, @HasOutstandingChargeBal = CASE WHEN @ChargeBal <> 0 THEN 1 ELSE 0 END FROM [dbo].[matters] MAT WHERE MAT.[Code] = @MATTER SET @AlreadyClosed = ISNULL(@AlreadyClosed, 0) SET @HasOutstandingBal = ISNULL(@HasOutstandingBal, 0) SET @HasOutstandingTimeBal = ISNULL(@HasOutstandingTimeBal, 0) SET @HasOutstandingChargeBal = ISNULL(@HasOutstandingChargeBal, 0) SELECT @YEAR = ISNULL(CTL.[YEAR], DATEPART(YEAR, GetDate())) FROM [dbo].[Control] CTL IF (@YEAR IS NULL) BEGIN SET @YEAR = DATEPART(YEAR, GetDate()) END SELECT @HasOutstandingRec = CASE COUNT(1) WHEN 0 THEN 0 ELSE 1 END FROM [dbo].[MatterLedger] MAL INNER JOIN [dbo].[BatchH] BH INNER JOIN [dbo].[BankRecHistory] BHS ON BHS.[BANKAC] = BH.[CODE] ON BH.[BATCHNO] = MAL.[BATCHNO] AND BH.[RECNO] <= 0 AND BH.[TYPE] IN (''P'', ''R'', ''T'') WHERE MAL.[MATTER] = @MATTER AND MAL.[YEAR] = @YEAR AND MAL.[REF] <> ''EUROADJ'' SET @HasOutstandingRec = ISNULL(@HasOutstandingRec, 0) SELECT @HasOutstandingDiary = CASE WHEN COUNT(1) = 0 THEN 0 ELSE 1 END FROM [dbo].[diary] DIA WHERE DIA.[CASECODE] = @MATTER AND DIA.[STATUS] <> 1 SELECT @HasOutstandingUndertakings = CASE WHEN COUNT(1) = 0 THEN 0 ELSE 1 END FROM [dbo].[Undertakings] UND WHERE UND.[MATTER] = @MATTER AND UND.[DISCHARGEDATE] IS NULL INSERT INTO @Closables ([AlreadyClosed], [HasOutstandingBal], [HasOutstandingTimeBal], [HasOutstandingChargeBal], [HasOutstandingRec], [HasOutstandingDiary], [HasOutstandingUndertakings]) SELECT @AlreadyClosed AS [AlreadyClosed], @HasOutstandingBal AS [HasOutstandingBal], @HasOutstandingTimeBal AS [HasOutstandingTimeBal], @HasOutstandingChargeBal AS [HasOutstandingChargeBal], @HasOutstandingRec AS [HasOutstandingRec], @HasOutstandingDiary AS [HasOutstandingDiary], @HasOutstandingUndertakings AS [HasOutstandingUndertakings] RETURN END') END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = 'KAAS_FN_MatterFECode' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_MatterFECode] END GO CREATE FUNCTION [dbo].[KAAS_FN_MatterFECode] (@matter VARCHAR(20)) RETURNS VARCHAR(10) AS /******************************************************************************************************* * Fetches the FE Code * * * * * * Stored Procedure Name : [dbo].[KAAS_FN_MatterFECode] * * Copied from : [dbo].[ky_NETFNMatterFECode] * * * * Modification History : * * 2019-11-13 Dheepin Vijith K Created * *******************************************************************************************************/ BEGIN DECLARE @FeCode VARCHAR(10) SELECT @FeCode = MAT.[FECode] FROM [dbo].[matters] MAT WHERE MAT.[Code] = @matter SET @FeCode = RTRIM(ISNULL(@FeCode, '')) RETURN @FeCode END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_MatterHeaderDetails' AND SO.[type] = 'TF') BEGIN DROP FUNCTION [dbo].[KAAS_FN_MatterHeaderDetails] END GO IF EXISTS( SELECT TOP 1 1 FROM SYS.COLUMNS WHERE OBJECT_NAME(OBJECT_ID) = 'Matters' and [NAME] = 'Paperless') BEGIN EXEC ('CREATE FUNCTION [dbo].[KAAS_FN_MatterHeaderDetails] (@matter VARCHAR(20)) RETURNS @MD TABLE ([CODE] VARCHAR(20), [ClientCode] VARCHAR(10), [MatterNo] VARCHAR(10), [YourRef] VARCHAR(100), [DESCRIPTION] VARCHAR(300), [FECode] VARCHAR(10), [FEName] VARCHAR(100), [Name] VARCHAR(256), [TelNo] VARCHAR(50), [Address] VARCHAR(2000), [Closed] CHAR(1), [TOOLTIP] VARCHAR(1000), [IsChildcare] CHAR(1), [User1] VARCHAR(100), [User2] VARCHAR(100), [User3] VARCHAR(100), [Partner] VARCHAR(10), [PartnerName] VARCHAR(100), [CompBillingMatter] VARCHAR(20), [MatterUniqueID] INT, [ChargeBalance] DECIMAL(15,2), [TimeBalance] VARCHAR(20), [Dept] VARCHAR(10), [DeptDesc] VARCHAR(100), [Branch] VARCHAR(100), [BranchCode] VARCHAR(3), [Paperless] BIT, [OpenInvoiceNo] INT) AS /******************************************************************************************************* * Returns the details for the current matter, to be displayed in the * * Client/Case section of the software, ledgers, etc. * * * * Stored Procedure Name : [dbo].[KAAS_FN_MatterHeaderDetails] * * Copied from : [dbo].[ky_NETTFMatterHeaderDetails] * * * * Modification History : * * 2019-04-12 Vinodhan K Created * * 2021-09-21 Vinodhan K Modified - Charge Bal,Time Bal,Dept,Branch fields added * * 07-06-2023 Revathy.D Fetched Paperless Column from Matter Table * 2023-09-25 Revathy.D Included a column for OpenInvoice details * * 2024-02-01 Ghayathri.S.V Modified - Included a column for Dept Description * * 2024-10-01 Balamurugan.C Modified - Included a column for Branch Code * *******************************************************************************************************/ BEGIN DECLARE @OpenInvoiceNo INT = (SELECT COUNT(1) FROM [dbo].[BillHeader] [BH] WHERE ISNULL([BH].[OPENINVOICE], '''') = ''Y'' AND ISNULL([BH].[BILLNO], 0) = 0 AND [BH].[MATTER] = @matter) INSERT INTO @MD ([CODE], [ClientCode], [MatterNo], [YourRef], [DESCRIPTION], [FECode], [FEName], [Name], [TelNo], [Address], [Closed], [TOOLTIP], [IsChildcare], [User1], [User2], [User3], [Partner], [PartnerName], [CompBillingMatter], [MatterUniqueID], [ChargeBalance], [TimeBalance], [Dept], [DeptDesc], [Branch], [BranchCode], [Paperless], [OpenInvoiceNo]) SELECT RTRIM(ISNULL([MAT].[Code], '''')) AS [Code], RTRIM(ISNULL([MAT].[ClientCode], '''')) AS [ClientCode], RTRIM(ISNULL([MAT].[Matter], '''')) AS [MatterNo], RTRIM(ISNULL([MAT].[YourRef], '''')) AS [YourRef], RTRIM(ISNULL([MAT].[Description], '''')) AS [Description], RTRIM(ISNULL([MAT].[FECode], '''')) AS [FECode], RTRIM(ISNULL([HAN].[NAME], '''')) AS [FEName], RTRIM(ISNULL([CT].[Name], '''')) AS [Name], RTRIM(ISNULL([CT].[Tel], '''')) AS [TelNo], RTRIM(ISNULL([CT].[Address], '''')) AS [Address], CASE WHEN RTRIM(ISNULL(MAT.[Closed], ''N'')) = ''Y'' THEN ''Y'' ELSE ''N'' END AS [Closed], RTRIM(ISNULL([CL].[CLNAME], '''')) + CHAR(13) + ''W:'' + RTRIM(ISNULL([CL].[CLTEL], '' Nil '')) + CHAR(13) + ''M:'' + RTRIM(ISNULL([CL].[CLMOBNO], '' Nil '')) AS [TOOLTIP], CASE WHEN [WKT].[CODE] IS NULL THEN ''N'' WHEN [WKT].[ChildCare] IS NULL THEN ''N'' WHEN [WKT].[ChildCare] = ''Y'' THEN ''Y'' ELSE ''N'' END AS [IsChildcare], ISNULL([MAT].[User1], '''') AS [User1], ISNULL([MAT].[User2], '''') AS [User2], ISNULL([MAT].[User3], '''') AS [User3], ISNULL([MAT].[Partner], '''') AS [Partner], ISNULL([PRT].[NAME], '''') AS [PartnerName], RTRIM(ISNULL([MAT].[CompBillingMatter], '''')) AS [CompBillingMatter], [MAT].[UniqueID] AS [MatterUniqueID], [MAT].[ChargeBal] AS [ChargeBalance], [dbo].[ky_TimeFromMinutes]([MAT].[TimeBal]) AS [TimeBalance], [MAT].[Dept] AS [Dept], [DEPT].[DESCRIPTION] AS [DeptDesc], [BH].[DESCRIPTION] AS [Branch], [BH].[BRANCHCODE] AS [BranchCode], ISNULL([MAT].[Paperless], 0) AS [Paperless], @OpenInvoiceNo AS [OpenInvoiceNo] FROM [dbo].[matters] [MAT] LEFT OUTER JOIN [dbo].[Contacts] [CT] INNER JOIN [dbo].[CLIENT] [CL] ON [CL].[CLCODE] =[CT].[Code] ON [CT].[Code] = [MAT].[ClientCode] LEFT OUTER JOIN [dbo].[Handlers] [HAN] ON [HAN].[CODE] = [MAT].[FECode] LEFT OUTER JOIN [dbo].[WorkTypes] [WKT] ON [WKT].[CODE] = MAT.[WType] LEFT OUTER JOIN [dbo].[Departments] [DEPT] ON [DEPT].[CODE] = MAT.[Dept] LEFT OUTER JOIN [dbo].[Handlers] AS [PRT] ON [PRT].[CODE] = [MAT].[Partner] LEFT OUTER JOIN [dbo].[Branch] [BH] ON [BH].[BRANCHCODE] = [MAT].[Branch] WHERE [MAT].[Code] = @matter RETURN END') END ELSE BEGIN EXEC ('CREATE FUNCTION [dbo].[KAAS_FN_MatterHeaderDetails] (@matter VARCHAR(20)) RETURNS @MD TABLE ([CODE] VARCHAR(20), [ClientCode] VARCHAR(10), [MatterNo] VARCHAR(10), [YourRef] VARCHAR(100), [DESCRIPTION] VARCHAR(300), [FECode] VARCHAR(10), [FEName] VARCHAR(100), [Name] VARCHAR(256), [TelNo] VARCHAR(50), [Address] VARCHAR(2000), [Closed] CHAR(1), [TOOLTIP] VARCHAR(1000), [IsChildcare] CHAR(1), [User1] VARCHAR(100), [User2] VARCHAR(100), [User3] VARCHAR(100), [Partner] VARCHAR(10), [PartnerName] VARCHAR(100), [CompBillingMatter] VARCHAR(20), [MatterUniqueID] INT, [ChargeBalance] DECIMAL(15,2), [TimeBalance] VARCHAR(20), [Dept] VARCHAR(10), [DeptDesc] VARCHAR(100), [Branch] VARCHAR(100), [BranchCode] VARCHAR(3), [Paperless] BIT, [OpenInvoiceNo] INT) AS /******************************************************************************************************* * Returns the details for the current matter, to be displayed in the * * Client/Case section of the software, ledgers, etc. * * * * Stored Procedure Name : [dbo].[KAAS_FN_MatterHeaderDetails] * * Copied from : [dbo].[ky_NETTFMatterHeaderDetails] * * * * Modification History : * * 2019-04-12 Vinodhan K Created * * 2021-09-21 Vinodhan K Modified - Charge Bal,Time Bal,Dept,Branch fields added * * 07-06-2023 Revathy.D Fetched Paperless Column from Matter Table * 2023-09-25 Revathy.D Included a column for OpenInvoice details * * 2024-10-01 Balamurugan.C Modified - Included a column for Branch Code * *******************************************************************************************************/ BEGIN DECLARE @OpenInvoiceNo INT = (SELECT COUNT(1) FROM [dbo].[BillHeader] [BH] WHERE ISNULL([BH].[OPENINVOICE], '''') = ''Y'' AND ISNULL([BH].[BILLNO], 0) = 0 AND [BH].[MATTER] = @matter) INSERT INTO @MD ([CODE], [ClientCode], [MatterNo], [YourRef], [DESCRIPTION], [FECode], [FEName], [Name], [TelNo], [Address], [Closed], [TOOLTIP], [IsChildcare], [User1], [User2], [User3], [Partner], [PartnerName], [CompBillingMatter], [MatterUniqueID], [ChargeBalance], [TimeBalance], [Dept], [DeptDesc], [Branch], [BranchCode], [Paperless], [OpenInvoiceNo]) SELECT RTRIM(ISNULL([MAT].[Code], '''')) AS [Code], RTRIM(ISNULL([MAT].[ClientCode], '''')) AS [ClientCode], RTRIM(ISNULL([MAT].[Matter], '''')) AS [MatterNo], RTRIM(ISNULL([MAT].[YourRef], '''')) AS [YourRef], RTRIM(ISNULL([MAT].[Description], '''')) AS [Description], RTRIM(ISNULL([MAT].[FECode], '''')) AS [FECode], RTRIM(ISNULL([HAN].[NAME], '''')) AS [FEName], RTRIM(ISNULL([CT].[Name], '''')) AS [Name], RTRIM(ISNULL([CT].[Tel], '''')) AS [TelNo], RTRIM(ISNULL([CT].[Address], '''')) AS [Address], CASE WHEN RTRIM(ISNULL(MAT.[Closed], ''N'')) = ''Y'' THEN ''Y'' ELSE ''N'' END AS [Closed], RTRIM(ISNULL([CL].[CLNAME], '''')) + CHAR(13) + ''W:'' + RTRIM(ISNULL([CL].[CLTEL], '' Nil '')) + CHAR(13) + ''M:'' + RTRIM(ISNULL([CL].[CLMOBNO], '' Nil '')) AS [TOOLTIP], CASE WHEN [WKT].[CODE] IS NULL THEN ''N'' WHEN [WKT].[ChildCare] IS NULL THEN ''N'' WHEN [WKT].[ChildCare] = ''Y'' THEN ''Y'' ELSE ''N'' END AS [IsChildcare], ISNULL([MAT].[User1], '''') AS [User1], ISNULL([MAT].[User2], '''') AS [User2], ISNULL([MAT].[User3], '''') AS [User3], ISNULL([MAT].[Partner], '''') AS [Partner], ISNULL([PRT].[NAME], '''') AS [PartnerName], RTRIM(ISNULL([MAT].[CompBillingMatter], '''')) AS [CompBillingMatter], [MAT].[UniqueID] AS [MatterUniqueID], [MAT].[ChargeBal] AS [ChargeBalance], [dbo].[ky_TimeFromMinutes]([MAT].[TimeBal]) AS [TimeBalance], [MAT].[Dept] AS [Dept], [DEPT].[DESCRIPTION] AS [DeptDesc], [BH].[DESCRIPTION] AS [Branch], [BH].[BRANCHCODE] AS [BranchCode], 0 AS [Paperless], @OpenInvoiceNo AS [OpenInvoiceNo] FROM [dbo].[matters] [MAT] LEFT OUTER JOIN [dbo].[Contacts] [CT] INNER JOIN [dbo].[CLIENT] [CL] ON [CL].[CLCODE] =[CT].[Code] ON [CT].[Code] = [MAT].[ClientCode] LEFT OUTER JOIN [dbo].[Handlers] [HAN] ON [HAN].[CODE] = [MAT].[FECode] LEFT OUTER JOIN [dbo].[WorkTypes] [WKT] ON [WKT].[CODE] = MAT.[WType] LEFT OUTER JOIN [dbo].[Departments] [DEPT] ON [DEPT].[CODE] = MAT.[Dept] LEFT OUTER JOIN [dbo].[Handlers] AS [PRT] ON [PRT].[CODE] = [MAT].[Partner] LEFT OUTER JOIN [dbo].[Branch] [BH] ON [BH].[BRANCHCODE] = [MAT].[Branch] WHERE [MAT].[Code] = @matter RETURN END') END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_ParseDIA3' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_ParseDIA3] END GO CREATE FUNCTION [dbo].[KAAS_FN_ParseDIA3] (@ActionCode VARCHAR(15), @ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Converts the Syntax to get "latest diary info" to the New Doc Gen compatible syntax * * * * Stored Procedure : KAAS_FN_ParseDIA3 * * Copied From : [dbo].[ky_NETFNParseDIA3] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-12 Pino Carafa Created * * 2019-12-18 Vinodhan Created KAAS_FN_ParseDIA3 * * * *************************************************************************************************************/ BEGIN DECLARE @START INT DECLARE @END INT DECLARE @STARTPART VARCHAR(MAX) DECLARE @FieldName VARCHAR(MAX) DECLARE @Done BIT DECLARE @Char CHAR(1) DECLARE @CharVal INT SET @ORIGINAL = REPLACE(REPLACE('[' + REPLACE(@ORIGINAL, 'SYS:DIA3:', 'DIA3:') + ']', '[[', '['), ']]', ']') SET @START = PATINDEX('%DIA3:%', @ORIGINAL) WHILE @START > 0 BEGIN SET @STARTPART = SUBSTRING(@ORIGINAL, 1, @START - 1) SET @END = @START + 5 SET @FieldName = '' IF @END <= LEN(@ORIGINAL) BEGIN SET @Done = 0 WHILE @Done = 0 BEGIN SET @CHAR = SUBSTRING(@Original, @END, 1) SET @CHARVAL = ASCII(@CHAR) IF @CHARVAL >= 65 AND @CHARVAL <= 90 BEGIN SET @FieldName = @FieldName + @Char SET @END = @END + 1 END ELSE IF @CHARVAL >= 97 AND @CHARVAL <= 122 BEGIN SET @FieldName = @FieldName + @Char SET @END = @END + 1 END ELSE IF @CHARVAL >= 48 AND @CHARVAL <= 57 BEGIN SET @FieldName = @FieldName + @Char SET @END = @END + 1 END ELSE IF @CHAR = '_' BEGIN SET @FieldName = @FieldName + @Char SET @END = @END + 1 END ELSE IF @CHAR = ' ' BEGIN SET @FieldName = @FieldName + @Char SET @END = @END + 1 END ELSE IF @CHAR = '$' BEGIN SET @FieldName = @FieldName + @Char SET @END = @END + 1 END ELSE BEGIN SET @Done = 1 END END END ELSE BEGIN RETURN @STARTPART END DECLARE @REST VARCHAR(MAX) SET @REST = SUBSTRING(@ORIGINAL, @END, LEN(@ORIGINAL) - @END + 1) IF LEN(@REST) > 0 BEGIN IF SUBSTRING(@REST, 1, 1) = '#' BEGIN SET @REST = SUBSTRING(@REST, 5, LEN(@REST) - 4) END END SET @ORIGINAL = @STARTPART + 'SYS:f.GetLatestActionInfo(MAT:Code, ''' + @ActionCode + ''', ''' + @FieldName + ''', '''')' + @REST SET @START = PATINDEX('%DIA3:%', @ORIGINAL) END RETURN @ORIGINAL END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_ParseFCode' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_ParseFCode] END GO CREATE FUNCTION [dbo].[KAAS_FN_ParseFCode] (@ORIGINALFCODE VARCHAR(MAX)) RETURNS VARCHAR(MAX) WITH RETURNS NULL ON NULL INPUT AS /************************************************************************************************************* * * * Parses an f.code string and returns the interpreted System Field Value * * * * Stored Procedure : KAAS_FN_ParseFCode * * Copied From : [dbo].[ky_NETFNParseFCode] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-12 Pino Carafa Created * * 2019-01-14 Pino Carafa when searching for colons, ignore quoted ones. * * 2019-01-16 Pino Carafa Don't process commas or brackets while inside quoted text * * 2019-12-19 Vinodhan Created KAAS_FN_ParseFCode * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *************************************************************************************************************/ BEGIN DECLARE @WRAPPED BIT SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'f.chr(10) & f.chr(13)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'f.chr(13) & f.chr(10)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'f.chr(13)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'f.chr(10)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'chr(10) & chr(13)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'chr(13) & chr(10)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'chr(13)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, 'chr(10)', '____NEWLINE____') SET @ORIGINALFCODE = REPLACE(@ORIGINALFCODE, '____NEWLINE____', 'f.chr(13) & f.chr(10)') IF LEN(@ORIGINALFCODE) > 0 BEGIN SET @WRAPPED = 1 SET @ORIGINALFCODE = '(' + @ORIGINALFCODE + ')' END DECLARE @RECONSTRUCTEDFCODE VARCHAR(MAX) DECLARE @RECONSTRUCTEDFCODE2 VARCHAR(MAX) DECLARE @FCODEQUOTED BIT DECLARE @CHARINDEX INT DECLARE @ORIGINALLEN INT DECLARE @CHAR CHAR(1) DECLARE @BIT VARCHAR(MAX) DECLARE @NEWBIT BIT DECLARE @BITSTART INT DECLARE @BITEND INT SET @RECONSTRUCTEDFCODE = '' SET @RECONSTRUCTEDFCODE2 = '' SET @FCODEQUOTED = 0 SET @CHARINDEX = 0 SET @ORIGINALLEN = LEN(@ORIGINALFCODE) SET @BIT = '' SET @NEWBIT = 0 SET @BITSTART = 1 WHILE @CHARINDEX < @ORIGINALLEN BEGIN SET @CHARINDEX = @CHARINDEX + 1 SET @CHAR = SUBSTRING(@ORIGINALFCODE, @CHARINDEX, 1) IF @FCODEQUOTED = 1 BEGIN SET @RECONSTRUCTEDFCODE = @RECONSTRUCTEDFCODE + @CHAR END ELSE BEGIN SET @RECONSTRUCTEDFCODE = @RECONSTRUCTEDFCODE + @CHAR END IF @CHAR = '''' BEGIN SET @FCODEQUOTED = 1 - @FCODEQUOTED END ELSE BEGIN IF (@CHAR = ',' OR @CHAR='(' OR @CHAR=')') AND (@FCODEQUOTED = 0) BEGIN SET @BITEND = @CHARINDEX SET @BIT = SUBSTRING(@ORIGINALFCODE, @BITSTART, @BITEND - @BITSTART) IF LEN(@BIT) > 5 BEGIN IF [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @BIT) > 0 BEGIN DECLARE @PREFIX VARCHAR(5) DECLARE @VALUE VARCHAR(MAX) SET @PREFIX = LTRIM(RTRIM(SUBSTRING(@BIT, 1, [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @BIT)))) SET @VALUE = SUBSTRING(@BIT, [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @BIT) + 1, LEN(@BIT) - [dbo].[KAAS_FN_GetUnquotedCharacterPos](':', @BIT)) SET @BIT = [dbo].[KAAS_FN_SystemField](@PREFIX, @VALUE, '', '') END END IF @BIT LIKE 'f.%' BEGIN SET @BIT = REPLACE(@BIT, 'f.', '[dbo].[KAAS_SUF') + ']' END SET @RECONSTRUCTEDFCODE2 = @RECONSTRUCTEDFCODE2 + @BIT + @CHAR SET @BITSTART = @BITEND + 1 END END END IF @WRAPPED = 0 BEGIN RETURN @RECONSTRUCTEDFCODE2 END RETURN REPLACE(REPLACE(SUBSTRING(@RECONSTRUCTEDFCODE2, 2, LEN(@RECONSTRUCTEDFCODE2) - 2), NCHAR(8216), ''''), NCHAR(8217), '''') END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_QuotedStatement' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_QuotedStatement] END GO CREATE FUNCTION [dbo].[KAAS_FN_QuotedStatement] (@ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) WITH RETURNS NULL ON NULL INPUT AS /************************************************************************************************************* * * * Pre-parse a quoted statement to remove Operators * * * * Stored Procedure : KAAS_FN_QuotedStatement * * Copied From : [dbo].[ky_NETFNQuotedStatement] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-19 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_QuotedStatement * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *************************************************************************************************************/ BEGIN DECLARE @New VARCHAR(MAX) DECLARE @Quoted BIT DECLARE @STARTPOS INT DECLARE @ENDPOS INT DECLARE @WORK VARCHAR(MAX) SET @New = '' SET @Quoted = 0 SET @STARTPOS = CHARINDEX('''', @Original) WHILE @STARTPOS > 0 BEGIN SET @WORK = SUBSTRING(@ORIGINAL, 1, @STARTPOS - 1) IF @Quoted = 1 BEGIN SET @WORK = REPLACE(@WORK, '+', '____PLUS____') SET @WORK = REPLACE(@WORK, '-', '____MINUS____') SET @WORK = REPLACE(@WORK, '/', '____SLASH____') SET @WORK = REPLACE(@WORK, '\', '____BACKSLASH____') SET @WORK = REPLACE(@WORK, '*', '____STAR____') SET @WORK = REPLACE(@WORK, '&', '____AMP____') END SET @Quoted = 1 - @Quoted SET @NEW = @NEW + @WORK SET @NEW = @NEW + '''' SET @ORIGINAL = SUBSTRING(@ORIGINAL, @STARTPOS + 1, LEN(@ORIGINAL) - @STARTPOS) SET @STARTPOS = CHARINDEX('''', @Original) END IF @ORIGINAL <> '' BEGIN SET @NEW = @NEW + @ORIGINAL END RETURN @NEW END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_RemovePatternFromString' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_RemovePatternFromString] END GO CREATE FUNCTION [dbo].[KAAS_FN_RemovePatternFromString] (@BUFFER VARCHAR(MAX), @PATTERN VARCHAR(128)) RETURNS VARCHAR(MAX) WITH RETURNS NULL ON NULL INPUT AS /******************************************************************************************************* * Removes unwanted characters from a string. * * * * Stored Procedure Name : [dbo].[KAAS_FN_RemovePatternFromString] * * Copied from : [dbo].[ky_NETFNRemovePatternFromString] * * * * Modification History : * * 2019-04-11 Vinodhan K Created * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *******************************************************************************************************/ BEGIN DECLARE @POS INT SET @POS = PATINDEX(@PATTERN, @BUFFER) WHILE @POS > 0 BEGIN SET @BUFFER = STUFF(@BUFFER, @POS, 1, '') SET @POS = PATINDEX(@PATTERN, @BUFFER) END RETURN @BUFFER END GO IF EXISTS (SELECT * FROM SYS.[objects] SO WHERE SO.[name] = 'KAAS_FN_RemoveSpuriousWhitespace' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_RemoveSpuriousWhitespace] END GO CREATE FUNCTION [dbo].[KAAS_FN_RemoveSpuriousWhitespace] (@original VARCHAR(MAX), @maxlen INT) RETURNS VARCHAR(5000) WITH RETURNS NULL ON NULL INPUT AS /******************************************************************************************************* * Removes newlines, line feeds, non-breaking spaces and multiple spaces from the input * * string in order to produce an output format suitable for display in list. * * * * Stored Procedure Name : [dbo].[KAAS_FN_RemoveSpuriousWhitespace] * * Copied from : [dbo].[ky_RemoveSpuriousWhitespace2] * * * * Modification History : * * 2019-05-31 Vinodhan K Created * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *******************************************************************************************************/ BEGIN DECLARE @len int SET @original = ISNULL(@original, '') IF LEN(@original) > (2 * @maxlen) BEGIN SET @original = SUBSTRING(@original, 1, (2 * @maxlen)) END SET @original = REPLACE(@original, char(10), ' ') SET @original = REPLACE(@original, char(13), ' ') SET @original = REPLACE(@original, char(160), ' ') SET @original = RTRIM(@original) SET @len = 0 WHILE (@len <> LEN(@original)) BEGIN SET @len = LEN(@original) SET @original = REPLACE(@original, ' ', ' ') END RETURN SUBSTRING(@original, 1, @maxlen) END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_SplitString' AND SO.[type] = 'TF') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SplitString] END GO CREATE FUNCTION KAAS_FN_SplitString ( @Input NVARCHAR(MAX), @Character CHAR(1) ) RETURNS @Output TABLE ( Item NVARCHAR(1000) ) AS /******************************************************************************************************* * Splits a string on the character specifed (like ','). * * * * Stored Procedure Name : [dbo].[KAAS_FN_SplitString] * * Copied from : [dbo].[ky_NETFNSplitString] * * * * Modification History : * * 2019-04-13 Vinodhan K Created * *******************************************************************************************************/ BEGIN DECLARE @StartIndex INT, @EndIndex INT SET @StartIndex = 1 IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character BEGIN SET @Input = @Input + @Character END WHILE CHARINDEX(@Character, @Input) > 0 BEGIN SET @EndIndex = CHARINDEX(@Character, @Input) INSERT INTO @Output(Item) SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1) SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input)) END RETURN END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_SUFFormat' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SUFFormat] END GO CREATE FUNCTION [dbo].[KAAS_FN_SUFFormat] (@ORIGINAL VARCHAR(MAX), @FORMAT VARCHAR(200)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Stored Procedure Name : KAAS_FN_SUFFormat * * Copied From : [dbo].[ky_SUFFormat] * * * * To be used as Format function for Document Generator codes * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2019-01-15 Pino Carafa Created * * 2019-01-16 Pino Carafa Handle date formats that SQL doesn't like * * 2019-01-18 Pino Carafa Check the x/y/z pattern before using IsDate as SQL will interpret strings * * in xx/yy/zzzz format as mm/dd/yyyy by default regardless of the culture * * 2019-01-18 Pino Carafa Ensure numerical values with thousand separators are interpreted correctly * * 2019-02-05 Pino Carafa Ensure very large numbers are handled correctly, handle '-' and '+' * * 2019-02-08 Pino Carafa Handle any reasonable date formats that could be passed in, even things * * like "Friday, the 8th day of February, 2019" * * 2019-02-13 Pino Carafa KEYD-5744 - It was recognising certain integers as Dates * * 2019-07-27 Vinodhan Created KAAS_SUFFormat * * * *************************************************************************************************************/ BEGIN DECLARE @ORIGINALDATE DATETIME DECLARE @PART1 VARCHAR(10) DECLARE @PART2 VARCHAR(10) DECLARE @PART3 VARCHAR(10) DECLARE @ALTERNATIVE VARCHAR(10) IF (@ORIGINAL LIKE '%/%/%') AND (@ORIGINAL NOT LIKE '%/%/%/%') BEGIN SET @PART1 = SUBSTRING(@ORIGINAL, 1, CHARINDEX('/', @ORIGINAL) - 1) SET @PART2 = SUBSTRING(@ORIGINAL, LEN(@PART1) + 2, CHARINDEX('/', @ORIGINAL, LEN(@PART1) + 2) - LEN(@PART1) - 2) SET @PART3 = SUBSTRING(@ORIGINAL, LEN(@PART1) + LEN(@PART2) + 3, LEN(@ORIGINAL) - LEN(@PART1) - LEN(@PART2) - 2) IF LEN(@PART1) = 4 --YYYY/MM/DD BEGIN SET @ALTERNATIVE = CONVERT(VARCHAR(10), @PART1 + @PART2 + @PART3) --YYYYMMDD IF ISDATE(@ALTERNATIVE) = 1 BEGIN SET @ORIGINALDATE = CONVERT(DATETIME, @ALTERNATIVE) END END ELSE IF LEN(@PART3) = 4 --DD/MM/YYYY BEGIN SET @ALTERNATIVE = @PART3 + @PART2 + @PART1 --YYYYMMDD IF ISDATE(@ALTERNATIVE) = 1 BEGIN SET @ORIGINALDATE = CONVERT(DATETIME, @ALTERNATIVE) END END END ELSE IF (@ORIGINAL LIKE '%-%-%') AND (@ORIGINAL NOT LIKE '%-%-%-%') BEGIN SET @PART1 = SUBSTRING(@ORIGINAL, 1, CHARINDEX('-', @ORIGINAL) - 1) SET @PART2 = SUBSTRING(@ORIGINAL, LEN(@PART1) + 2, CHARINDEX('-', @ORIGINAL, LEN(@PART1) + 2) - LEN(@PART1) - 2) SET @PART3 = SUBSTRING(@ORIGINAL, LEN(@PART1) + LEN(@PART2) + 3, LEN(@ORIGINAL) - LEN(@PART1) - LEN(@PART2) - 2) IF LEN(@PART1) = 4 --YYYY-MM-DD BEGIN SET @ALTERNATIVE = CONVERT(VARCHAR(10), @PART1 + @PART2 + @PART3) --YYYYMMDD IF ISDATE(@ALTERNATIVE) = 1 BEGIN SET @ORIGINALDATE = CONVERT(DATETIME, @ALTERNATIVE) END END ELSE IF LEN(@PART3) = 4 --DD-MM-YYYY BEGIN SET @ALTERNATIVE = @PART3 + @PART2 + @PART1 --YYYYMMDD IF ISDATE(@ALTERNATIVE) = 1 BEGIN SET @ORIGINALDATE = CONVERT(DATETIME, @ALTERNATIVE) END END END ELSE IF (CHARINDEX(' ', @ORIGINAL) > 0) OR (CHARINDEX('/', @ORIGINAL) > 0) OR (CHARINDEX('-', @ORIGINAL) > 0) --KEYD-5744 BEGIN DECLARE @orgtest VARCHAR(MAX) SET @orgtest = @original SET @orgtest = REPLACE(@orgtest, 'sunday', '') SET @orgtest = REPLACE(@orgtest, 'monday', '') SET @orgtest = REPLACE(@orgtest, 'tuesday', '') SET @orgtest = REPLACE(@orgtest, 'wednesday', '') SET @orgtest = REPLACE(@orgtest, 'thursday', '') SET @orgtest = REPLACE(@orgtest, 'friday', '') SET @orgtest = REPLACE(@orgtest, 'saturday', '') SET @orgtest = REPLACE(@orgtest, 'the', '') SET @orgtest = REPLACE(@orgtest, 'day', '') SET @orgtest = REPLACE(@orgtest, 'of', '') SET @orgtest = REPLACE(@orgtest, ',', '') SET @orgtest = REPLACE(REPLACE(@orgtest, 'st', ''), 'augu', 'august') --there's always one, isn't there! SET @orgtest = REPLACE(@orgtest, 'nd', '') SET @orgtest = REPLACE(@orgtest, 'rd', '') SET @orgtest = REPLACE(@orgtest, 'th', '') SET @orgtest = REPLACE(@orgtest, ' ', ' ') SET @orgtest = REPLACE(@orgtest, ' ', ' ') SET @orgtest = REPLACE(@orgtest, ' ', ' ') IF ISDATE(@orgtest) = 1 BEGIN SET @ORIGINAL = @orgtest END IF ISDATE(@ORIGINAL) = 1 BEGIN SET @ORIGINALDATE = CONVERT(DATETIME, @ORIGINAL) END END ELSE IF (@Format LIKE '@d%') OR (@Format LIKE '%DD%') OR (@Format LIKE '%MM%') OR (@Format LIKE '%YY%') --KEYD-5744 BEGIN IF ISDATE(@ORIGINAL) = 1 BEGIN SET @ORIGINALDATE = CONVERT(DATETIME, @ORIGINAL) END END IF @ORIGINALDATE IS NOT NULL BEGIN RETURN [dbo].[KAAS_FN_SUFGetFormattedDate](@ORIGINALDATE, @FORMAT) END IF @FORMAT LIKE '@d%' BEGIN RETURN '' END IF NOT RTRIM(ISNULL(@FORMAT, '')) = '' BEGIN IF ISNUMERIC(@ORIGINAL) = 1 BEGIN DECLARE @CHECK VARCHAR(8) DECLARE @THOUSEP CHAR(1) SET @CHECK = CONVERT(VARCHAR, CONVERT(MONEY, 1000), 1) SET @THOUSEP = SUBSTRING(@CHECK, 2, 1) IF RTRIM(ISNULL(@ORIGINAL, '')) IN ('-', '+') BEGIN SET @ORIGINAL = '0' END RETURN [dbo].[KAAS_FN_SUFGetFormattedValue](REPLACE(@ORIGINAL, @THOUSEP, ''), @FORMAT, 1, 0, NULL) END END RETURN CONVERT(VARCHAR(MAX), @ORIGINAL) END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_SUFGetFormattedDate' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SUFGetFormattedDate] END GO CREATE FUNCTION [dbo].[KAAS_FN_SUFGetFormattedDate] (@DATE datetime, @FORMAT VARCHAR(200)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * Stored Procedure Name : KAAS_FN_SUFGetFormattedDate * * Copied From : [dbo].[ky_SUFGetFormattedDate] * * * * User Defined Scalar Function to get a Doc Assist date value formatted to the requested format * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-17 Pino Carafa Created * * 2019-07-27 Vinodhan K Created KAAS_FN_SUFGetFormattedDate * * * *************************************************************************************************************/ BEGIN RETURN [dbo].[KAAS_FN_ConvertDate](@DATE, @FORMAT) END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_SUFGetFormattedValue' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SUFGetFormattedValue] END GO CREATE FUNCTION [dbo].[KAAS_FN_SUFGetFormattedValue] (@NUMBERV VARCHAR(30), @FORMAT VARCHAR(200), @THOUSANDSEPARATORS BIT, @NEGBRACKETS BIT, @CULTURE VARCHAR(10)) RETURNS VARCHAR(MAX) AS /************************************************************************************************************* * * * [dbo].[ky_SUFGetFormattedValue] * * * * User Defined Scalar Function to get a Doc Assist Number value formatted to the requested format * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-04 Pino Carafa Created * * 2019-02-05 Pino Carafa Change number parameter to VARCHAR so this function can then cope with * * Thousand Separators * * 2019-07-27 Vinodhan K Created KAAS_FN_SUFGetFormattedValue * * * *************************************************************************************************************/ BEGIN DECLARE @CHECK VARCHAR(8) DECLARE @THOUSEP CHAR(1) SET @CHECK = CONVERT(VARCHAR, CONVERT(MONEY, 1000), 1) SET @THOUSEP = SUBSTRING(@CHECK, 2, 1) DECLARE @NUMBER FLOAT SET @NUMBER = CONVERT(FLOAT, REPLACE(@NUMBERV, @THOUSEP, '')) RETURN [dbo].[KAAS_FN_ConvertNumber](@NUMBER, @FORMAT, @THOUSANDSEPARATORS, @NEGBRACKETS, @CULTURE) END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = 'KAAS_FN_SystemField' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SystemField] END GO CREATE FUNCTION [dbo].[KAAS_FN_SystemField] (@PREFIX VARCHAR(5), @FieldName NVARCHAR(128), @ActualName VARCHAR(MAX), @Format VARCHAR(10)) RETURNS NVARCHAR(MAX) AS /********************************************************************* * * Returns System Field Name or SQL expression associated with * * Clarion Prefix and Field Name * * Scalar function can be used in SELECT statements * * Stored Procedure : KAAS_FN_SystemField * Copied From : [dbo].[ky_NETFNSystemField] * * Modification History * 2015-08-24 Pino Carafa Created * 2017-01-26 Pino Carafa Added a few more Clarion * functions * 2017-01-31 Pino Carafa Added a few more Clarion * functions * 2017-02-01 Pino Carafa Fixed issue with more complex SYS: values * 2017-07-26 Pino Carafa Fixed issue with quotes * 2018-01-29 Pino Carafa Use a "sql" format to retrieve dates in yyyymmdd format * this in turn will be used in DAY(...) etc functions to ensure data are returned * 2018-02-02 Pino Carafa Added "value" function for UDFs * Added "UDF('" function * Added "left(" function * Handle *, /, + and - math functions * 2018-02-05 Pino Carafa Added LinearAddress Function * 2018-02-05 Pino Carafa Parse & first, make sure it splits only on complete lines (bracketcount 0) * 2018-02-05 Pino Carafa Handle Null and Blank dates, should return blank. * 2018-02-06 Pino Carafa Make sure the quotation marks around literal quotes don't get doubled * 2018-12-04 Pino Carafa Add functionality to handle Scalar functions * 2018-12-11 Pino Carafa Format old syntax numerical fields with thousand separators * 2018-12-12 Pino Carafa Support nested Scalar (f.) functions * 2018-12-18 Pino Carafa Allow for non-quoted SQL formats * 2018-12-19 Pino Carafa Support for CAN: values in Clarion functions * 2018-12-19 Pino Carafa Improve handling of Numerical values * 2018-12-19 Pino Carafa Make sure that quoted operators in CHOOSE or IIF statements * are not parsed. * 2018-12-19 Pino Carafa Implement the Chr() function * 2018-12-20 Pino Carafa Make sure date functions continue to work regardless of formatting * 2018-12-20 Pino Carafa It was replacing smart double quote NCHAR(8220) with a dumb single quote ' * 2019-01-01 Pino Carafa Make sure the Today() function resolves to GetDate() in f. Functions * 2019-01-17 Pino Carafa use the [dbo].[ky_NETFNGetUnembeddedCharacterPos*] functions instead * of CHARINDEX to handle complex statements * 2019-01-17 Pino Carafa It's no longer necessary to double quotes in @comparison * 2019-12-19 Vinodhan Created KAAS_FN_SystemField * 2020-03-02 Vinodhan Modified functions of prefix having KAAS_SUF to ky_SUF * *********************************************************************/ BEGIN DECLARE @ORGPREFIX VARCHAR(5) DECLARE @TABLE NVARCHAR(128) DECLARE @TABLEALIAS NVARCHAR(128) DECLARE @Alternative NVARCHAR(MAX) DECLARE @LINEVAR VARCHAR(1) DECLARE @LINE INT DECLARE @CV NVARCHAR(500) DECLARE @Comparison VARCHAR(MAX) DECLARE @TruePart VARCHAR(MAX) DECLARE @FalsePart VARCHAR(MAX) DECLARE @CompareOp INT DECLARE @CompareWith VARCHAR(MAX) DECLARE @LAddressItem VARCHAR(MAX) DECLARE @LAddressLine VARCHAR(3) DECLARE @LINES TABLE ([ID] INT IDENTITY(1, 1), [LINE] VARCHAR(MAX), [Operator] CHAR(1)) DECLARE @LINESTART INT DECLARE @LINEPOS INT DECLARE @TOTALLINES INT DECLARE @LINEPOS1 INT DECLARE @LINEPOS2 INT DECLARE @Operator CHAR(1) DECLARE @LastOperator CHAR(1) DECLARE @CHOOSEArguments TABLE ([ID] INT IDENTITY(1, 1), [Argument] VARCHAR(MAX)) DECLARE @CHOOSEPOS INT DECLARE @CHOOSESTART INT DECLARE @CHOOSEArgument VARCHAR(MAX) DECLARE @CHOOSEINDENT INT DECLARE @CHOOSEFUNCTION VARCHAR(MAX) DECLARE @LAddressArguments TABLE ([ID] INT IDENTITY(1, 1), [Argument] VARCHAR(MAX)) DECLARE @LAddressPOS INT DECLARE @LAddressSTART INT DECLARE @LAddressArgument VARCHAR(MAX) DECLARE @LAddressINDENT INT DECLARE @LAddressFUNCTION VARCHAR(MAX) DECLARE @FormatDotPos INT DECLARE @FormatDecimals INT SET @ORGPREFIX = @PREFIX SET @ActualName = REPLACE(@ActualName, 'IIF(', 'CHOOSE(') IF @PREFIX = 'CAN:' BEGIN IF CHARINDEX('.', @FieldName) > 0 BEGIN SET @ActualName = REPLACE(@ActualName, @FieldName, SUBSTRING(@FieldName, 1, CHARINDEX('.', @FieldName) - 1)) END END IF RTRIM(ISNULL(@ActualName, '')) <> '' BEGIN SET @PREFIX = 'ZZZ:' END IF @PREFIX = 'UDF:' BEGIN RETURN N'RTRIM(ISNULL([UDF].[Value], ''''))' END SET @TABLE = [dbo].[KAAS_FN_SystemTable](@PREFIX) SET @TABLEALIAS = [dbo].[KAAS_FN_SystemTableAlias](@PREFIX) IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC INNER JOIN SYS.[types] ST ON ST.[system_type_id] = SC.[system_type_id] AND ST.[name] = 'datetime' ON SC.[object_id] = SO.[object_id] AND SC.[name] = @FieldName WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN IF (@Format = 'sql') BEGIN RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + REPLACE(REPLACE(@FieldName, N'06', N'6'), N'6', N'') + N'], 112), '''')' END IF (@Format = '@d6') OR (@Format = '8') BEGIN RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + REPLACE(REPLACE(@FieldName, N'06', N'6'), N'6', N'') + N'], 103), '''')' END IF (@Format = '@d18') BEGIN SET @CV = N'[' + @TABLEALIAS + '].[' + REPLACE(@FieldName, N'18', N'') + N']' RETURN N'ISNULL(CONVERT(VARCHAR(2), DAY(' + @CV + N')) + '' '' + DATENAME(month, ' + @CV + N') + '' '' + CONVERT(VARCHAR(4), YEAR(' + @CV + N')), '''')' END RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + @FieldName + N'], 106), '''')' END IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC INNER JOIN SYS.[types] ST ON ST.[system_type_id] = SC.[system_type_id] AND ST.[name] = 'datetime' ON SC.[object_id] = SO.[object_id] AND SC.[name] = @FieldName + '_DATE' WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN IF (@Format = '@d6') OR (@Format = '8') BEGIN RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + REPLACE(REPLACE(@FieldName, N'06', N'6'), N'6', N'') + N'_DATE], 103), '''')' END IF (@Format = '@d18') BEGIN SET @CV = N'[' + @TABLEALIAS + '].[' + REPLACE(@FieldName, N'18', N'') + N'_DATE]' RETURN N'ISNULL(CONVERT(VARCHAR(2), DAY(' + @CV + N')) + '' '' + DATENAME(month, ' + @CV + N') + '' '' + CONVERT(VARCHAR(4), YEAR(' + @CV + N')), '''')' END RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + @FieldName + N'_DATE], 106), '''')' END IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC INNER JOIN SYS.[types] ST ON ST.[system_type_id] = SC.[system_type_id] AND ST.[name] = 'datetime' ON SC.[object_id] = SO.[object_id] AND SC.[name] + '_DATE' = @FieldName WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN IF (@Format = '@d6') OR (@Format = '8') BEGIN RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + REPLACE(REPLACE(REPLACE(@FieldName, N'06', N'6'), N'6', N''), N'_DATE', N'') + N'], 103), '''')' END IF (@Format = '@d18') BEGIN SET @CV = N'[' + @TABLEALIAS + '].[' + REPLACE(REPLACE(@FieldName, N'18', N''), N'_DATE', N'') + N']' RETURN N'ISNULL(CONVERT(VARCHAR(2), DAY(' + @CV + N')) + '' '' + DATENAME(month, ' + @CV + N') + '' '' + CONVERT(VARCHAR(4), YEAR(' + @CV + N')), '''')' END RETURN N'ISNULL(CONVERT(VARCHAR, [' + @TABLEALIAS + '].[' + REPLACE(@FieldName, N'_DATE', N'') + N'], 106), '''')' END IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC INNER JOIN SYS.[types] ST ON ST.[system_type_id] = SC.[system_type_id] AND ( ST.[name] = 'real' OR ST.[name] = 'money' OR ST.[name] = 'float' OR ST.[name] = 'decimal') ON SC.[object_id] = SO.[object_id] AND SC.[name] = @FieldName WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN IF @Format LIKE '@N%' BEGIN SET @FormatDotPos = CHARINDEX('.', REPLACE(@Format, ',', '.')) IF @FormatDotPos > 0 BEGIN SET @FormatDecimals = SUBSTRING(@Format, @FormatDotPos + 1, LEN(@Format) - @FormatDotPos) RETURN N'CONVERT(VARCHAR, CONVERT(DECIMAL(18, ' + CONVERT(VARCHAR(2), @FormatDecimals) + '), [' + @TABLEALIAS + N'].[' + @FieldName + N']))' END END END IF @ActualName = 'today()' BEGIN IF (@Format = '@d6') OR (@Format = '8') BEGIN RETURN N'CONVERT(VARCHAR, GetDate()], 103)' END IF (@Format = '@d18') BEGIN SET @CV = N'[' + @TABLEALIAS + '].[' + REPLACE(@FieldName, N'18', N'') + N']' RETURN N'CONVERT(VARCHAR(2), DAY(GetDate())) + '' '' + DATENAME(month, GetDate()) + '' '' + CONVERT(VARCHAR(4), YEAR(GetDate()))' END RETURN N'CONVERT(VARCHAR, GetDate(), 106)' END IF @ActualName = 'clock()' BEGIN RETURN N'CONVERT(VARCHAR, GetDate(), 108)' END IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC ON SC.[object_id] = SO.[object_id] AND SC.[name] = @FieldName WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN RETURN N'RTRIM(ISNULL(CONVERT(VARCHAR(MAX), [' + @TABLEALIAS + N'].[' + @FieldName + N']), ''''))' END SET @LINEVAR = SUBSTRING(@FieldName, LEN(@FieldName), 1) IF ISNUMERIC(@LINEVAR) = 1 BEGIN IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC INNER JOIN SYS.[types] ST ON ST.[system_type_id] = SC.[system_type_id] ON SC.[object_id] = SO.[object_id] AND SC.[name] = SUBSTRING(@FieldName, 1, LEN(@FieldName) - 1) WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN SET @LINE = CONVERT(INT, @LINEVAR) RETURN [dbo].[KAAS_FN_GetAddressLineSQL](@TABLEALIAS, @FieldName) END END IF @PREFIX = N'CAC:' BEGIN SET @FieldName = REPLACE(@FieldName, N'AssignedContact', N'') SET @FieldName = REPLACE(@FieldName, N'AssignedCon', N'') SET @FieldName = REPLACE(@FieldName, N'Assigned', N'') SET @FieldName = REPLACE(@FieldName, N'AssignContact', N'') SET @FieldName = REPLACE(@FieldName, N'AssignCon', N'') SET @FieldName = REPLACE(@FieldName, N'Assign', N'') IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC ON SC.[object_id] = SO.[object_id] AND SC.[name] = @FieldName WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN RETURN N'[' + @TABLEALIAS + '].[' + @FieldName + N']' END SET @LINEVAR = SUBSTRING(@FieldName, LEN(@FieldName), 1) IF ISNUMERIC(@LINEVAR) = 1 BEGIN IF EXISTS (SELECT TOP 1 1 FROM sys.[objects] SO INNER JOIN SYS.[columns] SC INNER JOIN SYS.[types] ST ON ST.[system_type_id] = SC.[system_type_id] ON SC.[object_id] = SO.[object_id] AND SC.[name] = SUBSTRING(@FieldName, 1, LEN(@FieldName) - 1) WHERE SO.[name] = @TABLE AND SO.[type] = 'U') BEGIN SET @LINE = CONVERT(INT, @LINEVAR) RETURN [dbo].[KAAS_FN_GetAddressLineSQL](@TABLEALIAS, @FieldName) END END END IF @PREFIX = N'MAT:' BEGIN IF @FieldName IN (N'BranchAdd1', N'BranchAdd2', N'BranchAdd3', N'BranchAdd4') BEGIN RETURN N'RTRIM(ISNULL(CONVERT(VARCHAR(MAX), [BR].[' + REPLACE(@FieldName, N'BranchAdd', N'Address') + N']), ''''))' END IF @FieldName = N'BranchDX' BEGIN RETURN N'RTRIM(ISNULL(CONVERT(VARCHAR(MAX), [BR].[DxRef]), ''''))' END IF @FieldName = N'DebtBalance' BEGIN RETURN N'RTRIM(ISNULL(CONVERT(VARCHAR(MAX), [MAT].[DebtBal]), ''''))' END IF @FieldName = N'BalanceOfDebt' BEGIN RETURN N'RTRIM(ISNULL(CONVERT(VARCHAR(MAX), [MAT].[DebtBal]), ''''))' END END IF @PREFIX = N'HAN:' BEGIN IF @FieldName = 'Phone' BEGIN RETURN N'RTRIM(ISNULL([HAN].[PhoneNumber], ''''))' END END IF @PREFIX = N'LCL:' BEGIN IF @FieldName = 'ClTyp' BEGIN RETURN N'RTRIM(ISNULL([CLT].[CLTYPE], ''''))' END IF @FieldName = 'ClClient YN' BEGIN RETURN N'RTRIM(ISNULL([CLT].[CLCLIENTYN], ''''))' END END SET @Alternative = CASE @PREFIX WHEN N'BR:' THEN N'' WHEN N'CC:' THEN N'' WHEN N'CAC:' THEN N'' WHEN N'FEC:' THEN N'' WHEN N'HAN:' THEN N'' ELSE N'***' END IF @Alternative = N'' BEGIN RETURN @Alternative END IF (@PREFIX = 'MAT:') BEGIN SET @Alternative = [dbo].[KAAS_FN_SystemField](N'BR:', Replace(@FieldName, N'Branch', N''), @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END END IF (@PREFIX = 'MAT:') BEGIN IF @FieldName LIKE N'Fe%' BEGIN SET @Alternative = [dbo].[KAAS_FN_SystemField](N'FEC:', Replace(@FieldName, N'Fe', N''), @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END SET @Alternative = [dbo].[KAAS_FN_SystemField](N'HAN:', Replace(@FieldName, N'Fe', N''), @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END END END IF (@PREFIX = 'CAN:') BEGIN IF CHARINDEX('.', @FieldName) > 0 BEGIN SET @ActualName = REPLACE(@ActualName, @FieldName, SUBSTRING(@FieldName, 1, CHARINDEX('.', @FieldName) - 1)) SET @FieldName = SUBSTRING(@FieldName, 1, CHARINDEX('.', @FieldName) - 1) END SET @Alternative = [dbo].[KAAS_FN_SystemField](N'CC:', @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END SET @Alternative = [dbo].[KAAS_FN_SystemField](N'CAC:', @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END END IF @Alternative = N'***' BEGIN SET @Alternative = N'' END IF [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('&', @ActualName, 1) > 0 BEGIN SET @LINESTART = 0 WHILE @LINESTART < LEN(@ActualName) BEGIN SET @LINEPOS = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('&', @ActualName, @LINESTART + 1) WHILE @LINEPOS > 0 BEGIN DECLARE @ThisLine VARCHAR(MAX) SET @ThisLine = LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, @LINEPOS - @LINESTART - 1))) IF [dbo].[KAAS_FN_GetBracketNestingLevel](@ThisLine, 0) <> 0 BEGIN SET @LINEPOS = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('&', @ActualName, @LINEPOS + 1) END ELSE BEGIN BREAK END END IF @LINEPOS > 0 BEGIN INSERT INTO @LINES ([LINE], [Operator]) VALUES(LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, @LINEPOS - @LINESTART - 1))), '+') SET @LINESTART = @LINEPOS END ELSE BEGIN IF @LINESTART < LEN(@ActualName) BEGIN INSERT INTO @LINES ([LINE], [Operator]) VALUES(LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, LEN(@ActualName) - @LINESTART))), '+') END SET @LINESTART = LEN(@ActualName) END END SELECT @TOTALLINES = COUNT(1) FROM @LINES IF (@TOTALLINES > 1) BEGIN SET @Alternative = N'' UPDATE [LIN] SET [LIN].[LINE] = REPLACE(REPLACE(REPLACE(REPLACE([LIN].[LINE], NCHAR(8216), ''''), NCHAR(8217), ''''), NCHAR(8219), '"'), NCHAR(8220), '"') FROM @LINES [LIN] SELECT @Alternative = CASE WHEN @Alternative = N'' THEN N'' ELSE @Alternative + N' ' + [LIN].[Operator] + ' ' END + CONVERT(VARCHAR(MAX), [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, [LIN].[LINE], @Format)) FROM @LINES [LIN] ORDER BY [LIN].[ID] IF ISNULL(@Alternative, N'') <> N'' BEGIN RETURN @Alternative END END END IF @ActualName LIKE 'choose(%' BEGIN DECLARE @RESTOFCHOOSE VARCHAR(MAX) SET @RESTOFCHOOSE = '' SET @CHOOSEPOS = 1 WHILE (@CHOOSEPOS < LEN(@ActualName)) AND (@CHOOSEFUNCTION IS NULL) BEGIN IF SUBSTRING(@ActualName, @CHOOSEPOS, 1) <> '(' BEGIN SET @CHOOSEPOS = @CHOOSEPOS + 1 END ELSE BEGIN SET @CHOOSEFUNCTION = SUBSTRING(@ActualName, 1, @CHOOSEPOS - 1) END END SET @CHOOSEArgument = '' SET @CHOOSEINDENT = 1 SET @CHOOSEPOS = @CHOOSEPOS + 1 SET @CHOOSESTART = @CHOOSEPOS WHILE (@CHOOSEPOS <= LEN(@ActualName)) BEGIN IF @CHOOSESTART = @CHOOSEPOS BEGIN SET @CHOOSEArgument = '' END IF SUBSTRING(@ActualName, @CHOOSEPOS, 1) = '(' BEGIN SET @CHOOSEINDENT = @CHOOSEINDENT + 1 END IF SUBSTRING(@ActualName, @CHOOSEPOS, 1) = ')' BEGIN SET @CHOOSEINDENT = @CHOOSEINDENT - 1 END IF ((SUBSTRING(@ActualName, @CHOOSEPOS, 1) = ',') AND (@CHOOSEINDENT = 1)) OR (@CHOOSEINDENT = 0) BEGIN INSERT INTO @CHOOSEArguments ([Argument]) VALUES(@CHOOSEArgument) SET @CHOOSESTART = @CHOOSEPOS + 1 IF @CHOOSEINDENT = 0 BEGIN SET @RESTOFCHOOSE = SUBSTRING(@ActualName, @CHOOSESTART, LEN(@ActualName) - @CHOOSESTART + 1) BREAK END END ELSE BEGIN SET @CHOOSEArgument = @CHOOSEArgument + SUBSTRING(@ActualName, @CHOOSEPOS, 1) END SET @CHOOSEPOS = @CHOOSEPOS + 1 END SELECT @Comparison = RTRIM(LTRIM(ARG.[Argument])) FROM @CHOOSEArguments ARG WHERE ARG.[ID] = 1 SELECT @TruePart = RTRIM(LTRIM(ARG.[Argument])) FROM @CHOOSEArguments ARG WHERE ARG.[ID] = 2 SELECT @FalsePart = RTRIM(LTRIM(ARG.[Argument])) FROM @CHOOSEArguments ARG WHERE ARG.[ID] = 3 SET @TruePart = [dbo].[KAAS_FN_QuotedStatement](@TruePart) SET @FalsePart = [dbo].[KAAS_FN_QuotedStatement](@FalsePart) IF (@Comparison IS NOT NULL) AND (@TruePart IS NOT NULL) AND (@FalsePart IS NOT NULL) BEGIN SET @CompareOp = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('<', @Comparison) IF @CompareOp = 0 BEGIN SET @CompareOp = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('!', @Comparison) IF @CompareOp = 0 BEGIN SET @CompareOp = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('=', @Comparison) END END IF @CompareOp = 0 BEGIN DECLARE @MaxArgID INT SELECT @MaxArgID = MAX([ARG].[ID]) FROM @CHOOSEArguments [ARG] SET @Alternative = 'CASE ISNULL(CONVERT(INT, ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @Comparison, @Format) + '), 0)' SELECT @Alternative = @Alternative + CASE WHEN [ARG].[ID] < @MaxArgID THEN ' WHEN ' + CONVERT(VARCHAR(10), [ARG].[id] - 1) + ' THEN ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @Fieldname, RTRIM(LTRIM(ARG.[Argument])), @Format) ELSE ' ELSE ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @Fieldname, RTRIM(LTRIM(ARG.[Argument])), @Format) + ' END' END FROM @CHOOSEArguments [ARG] WHERE [ARG].[ID] > 1 ORDER BY [ARG].[ID] END ELSE BEGIN DECLARE @ISNUMERIC BIT SET @CompareWith = RTRIM(LTRIM(SUBSTRING(@Comparison, @CompareOp + 1, LEN(@Comparison) - @CompareOp))) IF LEN(@CompareWith) > 1 IF (SUBSTRING(@CompareWith, 1, 1) = '''') AND (SUBSTRING(@CompareWith, LEN(@CompareWith), 1) = '''') BEGIN SET @CompareWith = '''' + REPLACE(SUBSTRING(@CompareWith, 2, LEN(@CompareWith) - 2), '''', '''''') + '''' END ELSE BEGIN SET @CompareWith = REPLACE(@CompareWith, '''', '''''') END ELSE BEGIN SET @CompareWith = REPLACE(@CompareWith, '''', '''''') END IF CHARINDEX('''', @CompareWith) > 0 BEGIN SET @ISNUMERIC = 0 SET @CompareWith = ' ' + SUBSTRING(@Comparison, @CompareOp, 1) + @CompareWith END ELSE BEGIN IF ISNUMERIC(@CompareWith) = 0 BEGIN SET @ISNUMERIC = 0 SET @CompareWith = ' ' + SUBSTRING(@Comparison, @CompareOp, 1) + @CompareWith END ELSE BEGIN SET @ISNUMERIC = 1 SET @CompareWith = ' ' + SUBSTRING(@Comparison, @CompareOp, 1) + 'CONVERT(FLOAT, ' + @CompareWith + ')' END END SET @Comparison = SUBSTRING(@Comparison, 1, @CompareOp - 1) --2019-01-17 --SET @Comparison = REPLACE(SUBSTRING(@Comparison, 1, @CompareOp - 1), '''', '''''') IF @ISNUMERIC = 0 BEGIN SET @Alternative = N'CASE WHEN ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @Comparison, @Format) + CONVERT(NVARCHAR(MAX), @CompareWith) + N' THEN ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @TruePart, @Format) + N' ELSE ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @FalsePart, @Format) + N' END' END ELSE BEGIN SET @Alternative = N'CASE WHEN CONVERT(FLOAT, ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @Comparison, @Format) + ')' + CONVERT(NVARCHAR(MAX), @CompareWith) + N' THEN ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @TruePart, @Format) + N' ELSE ' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @FalsePart, @Format) + N' END' END END SET @Alternative = [dbo].[KAAS_FN_UnQuotedStatement](@Alternative) IF @Alternative IS NOT NULL BEGIN IF @Alternative <> N'' BEGIN IF @RESTOFCHOOSE = '' BEGIN RETURN @Alternative END ELSE BEGIN RETURN REPLACE([dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, '''***''' + @RESTOFCHOOSE, ''), '''***''', @Alternative) END END END END END IF @ActualName LIKE 'LAddress(%' BEGIN SET @LAddressPOS = 1 WHILE (@LAddressPOS < LEN(@ActualName)) AND (@LAddressFUNCTION IS NULL) BEGIN IF SUBSTRING(@ActualName, @LAddressPOS, 1) <> '(' BEGIN SET @LAddressPOS = @LAddressPOS + 1 END ELSE BEGIN SET @LAddressFUNCTION = SUBSTRING(@ActualName, 1, @LAddressPOS - 1) END END SET @LAddressArgument = '' SET @LAddressINDENT = 1 SET @LAddressPOS = @LAddressPOS + 1 SET @LAddressSTART = @LAddressPOS WHILE (@LAddressPOS <= LEN(@ActualName)) BEGIN IF @LAddressSTART = @LAddressPOS BEGIN SET @LAddressArgument = '' END IF SUBSTRING(@ActualName, @LAddressPOS, 1) = '(' BEGIN SET @LAddressINDENT = @LAddressINDENT + 1 END IF SUBSTRING(@ActualName, @LAddressPOS, 1) = ')' BEGIN SET @LAddressINDENT = @LAddressINDENT - 1 END IF ((SUBSTRING(@ActualName, @LAddressPOS, 1) = ',') AND (@LAddressINDENT = 1)) OR (@LAddressINDENT = 0) BEGIN INSERT INTO @LAddressArguments ([Argument]) VALUES(@LAddressArgument) SET @LAddressSTART = @LAddressPOS + 1 END ELSE BEGIN SET @LAddressArgument = @LAddressArgument + SUBSTRING(@ActualName, @LAddressPOS, 1) END SET @LAddressPOS = @LAddressPOS + 1 END SELECT @LAddressItem = RTRIM(LTRIM(ARG.[Argument])) FROM @LAddressArguments ARG WHERE ARG.[ID] = 1 SELECT @LAddressLine = CONVERT(VARCHAR(3), REPLACE(RTRIM(LTRIM(ARG.[Argument])), '''', '')) FROM @LAddressArguments ARG WHERE ARG.[ID] = 2 IF (@LAddressItem IS NOT NULL) AND (@LAddressLine IS NOT NULL) BEGIN SET @Alternative = N'[dbo].[KAAS_FN_AddressLine](' + [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @LAddressItem, @Format) + N', ' + CONVERT(NVARCHAR(3), @LAddressLine) + N')' IF @Alternative IS NOT NULL BEGIN IF @Alternative <> N'' BEGIN RETURN @Alternative END END END END IF @ActualName NOT LIKE 'format%' AND @ActualName NOT LIKE 'chr%' AND @ActualName NOT LIKE 'trim%' AND @ActualName NOT LIKE 'ltrim%' AND @ActualName NOT LIKE 'rtrim%' AND @ActualName NOT LIKE 'left%' AND @ActualName NOT LIKE 'f.%' AND @ActualName NOT LIKE 'SYS:f.%(%' AND @ActualName NOT LIKE '%ky_SUF%' BEGIN IF ([dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('+', @ActualName, 1) > 0) OR ([dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('-', @ActualName, 1) > 0) BEGIN SET @LINESTART = 0 SET @LastOperator = '+' WHILE @LINESTART < LEN(@ActualName) BEGIN SET @LINEPOS1 = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('+', @ActualName, @LINESTART + 1) SET @LINEPOS2 = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('-', @ActualName, @LINESTART + 1) IF @LINEPOS1 = 0 BEGIN SET @LINEPOS = @LINEPOS2 SET @Operator = '-' END ELSE IF @LINEPOS2 = 0 BEGIN SET @LINEPOS = @LINEPOS1 SET @Operator = '+' END ELSE IF @LINEPOS1 < @LINEPOS2 BEGIN SET @LINEPOS = @LINEPOS1 SET @Operator = '+' END ELSE BEGIN SET @LINEPOS = @LINEPOS2 SET @Operator = '-' END IF @LINEPOS > 0 BEGIN INSERT INTO @LINES ([LINE], [Operator]) VALUES(LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, @LINEPOS - @LINESTART - 1))), @LastOperator) SET @LINESTART = @LINEPOS END ELSE BEGIN IF @LINESTART < LEN(@ActualName) BEGIN INSERT INTO @LINES ([LINE], [Operator]) VALUES(LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, LEN(@ActualName) - @LINESTART))), @LastOperator) END SET @LINESTART = LEN(@ActualName) END SET @LastOperator = @Operator END SELECT @TOTALLINES = COUNT(1) FROM @LINES IF (@TOTALLINES > 0) BEGIN SET @Alternative = N'' UPDATE [LIN] SET [LIN].[LINE] = REPLACE(REPLACE(REPLACE(REPLACE([LIN].[LINE], NCHAR(8216), ''''), NCHAR(8217), ''''), NCHAR(8219), '"'), NCHAR(8220), '"') FROM @LINES [LIN] SELECT @Alternative = CASE WHEN @Alternative = N'' THEN N'' ELSE @Alternative + N' ' + [LIN].[Operator] + ' ' END + 'CONVERT(FLOAT, ' + CONVERT(VARCHAR(MAX), [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, [LIN].[LINE], @Format)) + ')' FROM @LINES [LIN] ORDER BY [LIN].[ID] IF ISNULL(@Alternative, N'') <> N'' BEGIN RETURN @Alternative END END END IF ([dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('*', @ActualName, 1) > 0) OR ([dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('/', @ActualName, 1) > 0) BEGIN SET @LINESTART = 0 SET @LastOperator = '*' WHILE @LINESTART < LEN(@ActualName) BEGIN SET @LINEPOS1 = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('*', @ActualName, @LINESTART + 1) SET @LINEPOS2 = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('/', @ActualName, @LINESTART + 1) IF @LINEPOS1 = 0 BEGIN SET @LINEPOS = @LINEPOS2 SET @Operator = '/' END ELSE IF @LINEPOS2 = 0 BEGIN SET @LINEPOS = @LINEPOS1 SET @Operator = '*' END ELSE IF @LINEPOS1 < @LINEPOS2 BEGIN SET @LINEPOS = @LINEPOS1 SET @Operator = '*' END ELSE BEGIN SET @LINEPOS = @LINEPOS2 SET @Operator = '/' END IF @LINEPOS > 0 BEGIN INSERT INTO @LINES ([LINE], [Operator]) VALUES(LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, @LINEPOS - @LINESTART - 1))), @LastOperator) SET @LINESTART = @LINEPOS END ELSE BEGIN IF @LINESTART < LEN(@ActualName) BEGIN INSERT INTO @LINES ([LINE], [Operator]) VALUES(LTRIM(RTRIM(SUBSTRING(@ActualName, @LINESTART + 1, LEN(@ActualName) - @LINESTART))), @LastOperator) END SET @LINESTART = LEN(@ActualName) END SET @LastOperator = @Operator END SELECT @TOTALLINES = COUNT(1) FROM @LINES IF (@TOTALLINES > 0) BEGIN SET @Alternative = N'' UPDATE [LIN] SET [LIN].[LINE] = REPLACE(REPLACE(REPLACE(REPLACE([LIN].[LINE], NCHAR(8216), ''''), NCHAR(8217), ''''), NCHAR(8219), '"'), NCHAR(8220), '"') FROM @LINES [LIN] SELECT @Alternative = CASE WHEN @Alternative = N'' THEN N'' ELSE @Alternative + N' ' + [LIN].[Operator] + ' ' END + 'CONVERT(FLOAT, ' + CONVERT(VARCHAR(MAX), [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, [LIN].[LINE], @Format)) + ')' FROM @LINES [LIN] ORDER BY [LIN].[ID] IF ISNULL(@Alternative, N'') <> N'' BEGIN IF @Format LIKE '@N%' BEGIN RETURN '[dbo].[ky_SUFGetFormattedValue](' + @Alternative + ', ''@n18.2'', 1, 0, NULL)' END ELSE BEGIN RETURN @Alternative END END END END END IF @ActualName LIKE 'Sub(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 5, LEN(@ActualName) - 5) DECLARE @SUBR VARCHAR(200) SET @SUBR = REVERSE(@ActualName) DECLARE @SUBRCOMMAPOS INT DECLARE @SUBRLEN INT DECLARE @SUBRSTART INT SET @SUBRCOMMAPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos](',', @SUBR) IF @SUBRCOMMAPOS > 0 BEGIN SET @SUBRLEN = CONVERT(INT, REVERSE(LTRIM(RTRIM(SUBSTRING(@SUBR, 1, @SUBRCOMMAPOS - 1))))) SET @SUBR = SUBSTRING(@SUBR, @SUBRCOMMAPOS + 1, LEN(@SUBR) - @SUBRCOMMAPOS) SET @SUBRCOMMAPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos](',', @SUBR) IF @SUBRCOMMAPOS > 0 BEGIN SET @SUBRSTART = CONVERT(INT, REVERSE(LTRIM(RTRIM(SUBSTRING(@SUBR, 1, @SUBRCOMMAPOS - 1))))) SET @SUBR = REVERSE(SUBSTRING(@SUBR, @SUBRCOMMAPOS + 1, LEN(@SUBR) - @SUBRCOMMAPOS)) SET @ActualName = @SUBR SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN SET @Alternative = N'SUBSTRING(' + @Alternative + N', ' + CONVERT(VARCHAR, @SUBRSTART) + ',' + CONVERT(VARCHAR, @SUBRLEN) + ')' RETURN @Alternative END END END SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END END IF @ActualName LIKE 'Format(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 8, LEN(@ActualName) - 8) DECLARE @FMTR VARCHAR(200) SET @FMTR = REVERSE(@ActualName) DECLARE @FMTRCOMMAPOS INT DECLARE @FMTRATPOS INT DECLARE @FMTRFMT VARCHAR(200) SET @FMTRATPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('@', @FMTR) SET @FMTRCOMMAPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos](',', @FMTR) IF @FMTRCOMMAPOS > 0 BEGIN IF @FMTRCOMMAPOS < @FMTRATPOS BEGIN SET @FMTRCOMMAPOS = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom](',', @FMTR, @FMTRATPOS) END END IF @FMTRCOMMAPOS = 0 BEGIN SET @FMTRCOMMAPOS = [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('.', @FMTR) IF @FMTRCOMMAPOS > 0 BEGIN IF @FMTRCOMMAPOS < @FMTRATPOS BEGIN SET @FMTRCOMMAPOS = [dbo].[KAAS_FN_GetUnquotedCharacterPosFrom]('.', @FMTR, @FMTRATPOS) END END END IF @FMTRCOMMAPOS > 0 BEGIN SET @FMTRFMT = REVERSE(LTRIM(RTRIM(SUBSTRING(@FMTR, 1, @FMTRCOMMAPOS - 1)))) SET @FMTR = REVERSE(SUBSTRING(@FMTR, @FMTRCOMMAPOS + 1, LEN(@FMTR) - @FMTRCOMMAPOS)) IF [dbo].[KAAS_FN_GetUnembeddedCharacterPos]('@', @FMTRFMT) > 0 BEGIN SET @Format = REPLACE(@FMTRFMT, '''', '') SET @Format = REPLACE(@Format, NCHAR(8216), '') SET @Format = REPLACE(@Format, NCHAR(8217), '') SET @Format = REPLACE(@Format, NCHAR(8219), '') SET @Format = REPLACE(@Format, NCHAR(8220), '') SET @PREFIX = 'SYS:' SET @ActualName = @FMTR SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END END END SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN RETURN @Alternative END END IF @ActualName LIKE 'LinearAddress(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 15, LEN(@ActualName) - 15) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN SET @Alternative = N'[dbo].[KAAS_FN_LinearAddress](' + @Alternative + N')' RETURN @Alternative END END IF @ActualName LIKE 'Clip(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 6, LEN(@ActualName) - 6) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, @Format) IF @Alternative <> N'' BEGIN SET @Alternative = N'RTRIM(ISNULL(' + @Alternative + N', ''''))' RETURN @Alternative END END IF @ActualName LIKE 'UDF(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 5, LEN(@ActualName) - 4) DECLARE @ClosingQuotePos INT IF SUBSTRING(@ActualName, 1, 1) = '''' BEGIN SET @ClosingQuotePos = CHARINDEX('''', @ActualName, 2) END IF @ClosingQuotePos > 0 IF SUBSTRING(@ActualName, @ClosingQuotePos + 1, 1) = ')' BEGIN RETURN [dbo].[KAAS_FN_SystemField]('SYS:', @FieldName, 'value(UDF:' + SUBSTRING(@ActualName, 2, @ClosingQuotePos - 2) + SUBSTRING(@ActualName, @ClosingQuotePos + 1, LEN(@ActualName) - @ClosingQuotePos), @Format) END END IF @ActualName LIKE 'day(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 5, LEN(@ActualName) - 5) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, 'sql') IF @Alternative <> N'' BEGIN SET @Alternative = N'CASE WHEN ISNULL(' + @Alternative + N', '''') = '''' THEN '''' ELSE CONVERT(VARCHAR, DAY([dbo].[KAAS_FN_ConvertToDateTime](' + @Alternative + N'))) END' RETURN @Alternative END END IF @ActualName LIKE 'year(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 6, LEN(@ActualName) - 6) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, 'sql') IF @Alternative <> N'' BEGIN SET @Alternative = N'CASE WHEN ISNULL(' + @Alternative + N', '''') = '''' THEN '''' ELSE CONVERT(VARCHAR, YEAR([dbo].[KAAS_FN_ConvertToDateTime](' + @Alternative + N'))) END' RETURN @Alternative END END IF @ActualName LIKE 'month(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 7, LEN(@ActualName) - 7) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, 'sql') IF @Alternative <> N'' BEGIN SET @Alternative = N'CASE WHEN ISNULL(' + @Alternative + N', '''') = '''' THEN '''' ELSE CONVERT(VARCHAR, MONTH([dbo].[KAAS_FN_ConvertToDateTime](' + @Alternative + N'))) END' RETURN @Alternative END END IF @ActualName LIKE 'weekday(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 9, LEN(@ActualName) - 9) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, 'sql') IF @Alternative <> N'' BEGIN SET @Alternative = N'CASE WHEN ISNULL(' + @Alternative + N', '''') = '''' THEN '''' ELSE DATENAME(WEEKDAY, CONVERT([dbo].[KAAS_FN_ConvertToDateTime](' + @Alternative + N')) END' RETURN @Alternative END END IF @ActualName LIKE 'monthname(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 11, LEN(@ActualName) - 11) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, 'sql') IF @Alternative <> N'' BEGIN SET @Alternative = N'CASE WHEN ISNULL(' + @Alternative + N', '''') = '''' THEN '''' ELSE DATENAME(MONTH, CONVERT([dbo].[KAAS_FN_ConvertToDateTime](' + @Alternative + N')) END' RETURN @Alternative END END IF @ActualName LIKE 'DateWords(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 11, LEN(@ActualName) - 11) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'CASE WHEN ISNULL(' + @Alternative + N', '''') = '''' THEN '''' ELSE DATENAME(WEEKDAY, ' + @CV + N') + '', '' + CONVERT(VARCHAR(2), DAY(' + @CV + N')) + '' '' + DATENAME(month, ' + @CV + N') + '' '' + CONVERT(VARCHAR(4), YEAR(' + @CV + N')) END' END END IF @ActualName LIKE 'lower(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 7, LEN(@ActualName) - 7) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'LOWER(' + @CV + ')' END END IF @ActualName LIKE 'upper(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 7, LEN(@ActualName) - 7) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'UPPER(' + @CV + ')' END END IF @ActualName LIKE 'ltrim(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 7, LEN(@ActualName) - 7) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'LTRIM(' + @CV + ')' END END IF @ActualName LIKE 'left(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 6, LEN(@ActualName) - 6) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'LTRIM(' + @CV + ')' END END IF @ActualName LIKE 'rtrim(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 7, LEN(@ActualName) - 7) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'RTRIM(' + @CV + ')' END END IF @ActualName LIKE 'trim(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 6, LEN(@ActualName) - 6) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'LTRIM(RTRIM(' + @CV + '))' END END IF @ActualName LIKE 'chr(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 5, LEN(@ActualName) - 5) SET @CV = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, '') IF @CV <> N'' BEGIN RETURN N'CHAR(' + @CV + ')' END END IF @ActualName LIKE 'value(%' BEGIN SET @ActualName = SUBSTRING(@ActualName, 7, LEN(@ActualName) - 7) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, @ActualName, 'sql') IF @Alternative <> N'' BEGIN IF @Format LIKE '@N%' BEGIN SET @FormatDotPos = CHARINDEX('.', REPLACE(@Format, ',', '.')) IF @FormatDotPos > 0 BEGIN SET @FormatDecimals = SUBSTRING(@Format, @FormatDotPos + 1, LEN(@Format) - @FormatDotPos) RETURN N'CONVERT(VARCHAR, CONVERT(DECIMAL(18, ' + CONVERT(VARCHAR(2), @FormatDecimals) + '), REPLACE(' + @Alternative + N', '','', '''')))' END END ELSE BEGIN SET @Alternative = N'CONVERT(VARCHAR, CONVERT(FLOAT, REPLACE(' + @Alternative + N', '','', '''')))' RETURN @Alternative END END END IF @ActualName LIKE '%ky_SUF%' BEGIN SET @ActualName = [dbo].[KAAS_FN_ParseFCode](@ActualName) IF [dbo].[KAAS_FN_GetUnembeddedCharacterPos](':', @ActualName) = 0 BEGIN -- Function doesn't contain any Doc Assist fields. SET @ActualName = REPLACE(@ActualName, 'today()', 'GetDate()') RETURN @ActualName END END IF @ActualName LIKE 'f.%(%' BEGIN SET @ActualName = [dbo].[KAAS_FN_ParseFCode](@ActualName) SET @ActualName = REPLACE(@ActualName, 'today()', 'GetDate()') END IF @ActualName LIKE 'f.%(%' BEGIN DECLARE @DOSOMETHING VARCHAR(MAX) DECLARE @TOWHAT VARCHAR(MAX) SET @DOSOMETHING = SUBSTRING(@ACTUALNAME, 3, CHARINDEX('(', @ActualName, 3) - 3) DECLARE @COMMA INT DECLARE @COLON INT DECLARE @REST VARCHAR(MAX) SET @COMMA = CHARINDEX(',', @ACTUALNAME, 3 + LEN(@DOSOMETHING)) IF @COMMA > 0 BEGIN SET @REST = SUBSTRING(@ACTUALNAME, @COMMA, LEN(@ACTUALNAME) - @COMMA + 1) SET @TOWHAT = SUBSTRING(@ACTUALNAME, 3 + LEN(@DOSOMETHING) + 1, @COMMA - LEN(@DOSOMETHING) - 4) END ELSE BEGIN SET @REST = ')' SET @TOWHAT = SUBSTRING(@ACTUALNAME, 3 + LEN(@DOSOMETHING) + 1, LEN(@ACTUALNAME) - LEN(@DOSOMETHING) - 4) END SET @COLON = CHARINDEX(':', @TOWHAT, 1) IF @COLON = 0 BEGIN DECLARE @TOWHAT2 VARCHAR(MAX) SET @TOWHAT2 = [dbo].[KAAS_FN_SystemField]('ZZZ:', @TOWHAT, '', '') IF @TOWHAT2 IS NULL BEGIN SET @TOWHAT = [dbo].[KAAS_FN_SystemField]('ZZZ:', '', @TOWHAT, '') END ELSE IF @TOWHAT2 = '' BEGIN SET @TOWHAT = [dbo].[KAAS_FN_SystemField]('ZZZ:', '', @TOWHAT, '') END ELSE BEGIN SET @TOWHAT = @TOWHAT2 END END ELSE BEGIN SET @TOWHAT = [dbo].[KAAS_FN_SystemField](SUBSTRING(@TOWHAT, 1, @COLON), SUBSTRING(@TOWHAT, @COLON + 1, LEN(@TOWHAT) - @COLON), '', '') END SET @Alternative = '[dbo].[ky_SUF' + @DOSOMETHING + '](' + @TOWHAT + @REST RETURN @Alternative END IF CHARINDEX('(', @ActualName, 1) = 0 BEGIN IF CHARINDEX(':', @ActualName, 1) > 0 BEGIN SET @PREFIX = CONVERT(NVARCHAR(5), SUBSTRING(@ActualName, 1, CHARINDEX(':', @ActualName, 1))) SET @FieldName = CONVERT(NVARCHAR(128), SUBSTRING(@ActualName, CHARINDEX(':', @ActualName, 1) + 1, LEN(@ActualName) - CHARINDEX(':', @ActualName, 1))) SET @Alternative = [dbo].[KAAS_FN_SystemField](@PREFIX, @FieldName, '', @Format) END END IF CHARINDEX('''', @ActualName, 1) > 0 BEGIN SET @Alternative = CONVERT(NVARCHAR(MAX), @ActualName) END IF @Alternative = N'' BEGIN IF ISNUMERIC(@ActualName) = 1 BEGIN SET @ActualName = '''' + CONVERT(VARCHAR(MAX), CONVERT(FLOAT, @ActualName)) + '''' SET @Alternative = [dbo].[KAAS_FN_SystemField](@ORGPREFIX, @FieldName, @ActualName, @Format) END ELSE IF @ORGPREFIX <> @PREFIX BEGIN SET @Alternative = [dbo].[KAAS_FN_SystemField](@ORGPREFIX, @FieldName, '', @Format) END END RETURN @Alternative END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = 'KAAS_FN_SystemTable' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SystemTable] END GO CREATE FUNCTION [dbo].[KAAS_FN_SystemTable] (@PREFIX VARCHAR(5)) RETURNS NVARCHAR(128) AS /********************************************************************** * * * Returns System Table Name associated with Clarion Prefix * * Scalar function can be used in SELECT statements * * * * Stored Procedure : KAAS_FN_SystemTable * * Copied From : [dbo].[ky_NETFNSystemTable] * * * * Maintenance History * * 2015-08-24 Pino Carafa Created * * 2018-09-21 Pino Carafa The original Prefix for * * Branch was BRC, not BR * * so I have added this to * * support fields created during * * the Clarion days. * * 2019-01-10 Pino Carafa Added support for AUD: * * 2019-12-18 Vinodhan Created KAAS_FN_SystemTable * * * *********************************************************************/ BEGIN RETURN CASE @PREFIX WHEN 'BR:' THEN N'Branch' WHEN 'BRC:' THEN N'Branch' WHEN 'CC:' THEN N'CaseContacts' WHEN 'CAC:' THEN N'CaseAssociatesContacts' WHEN 'CAN:' THEN N'CaseAssociatesNames' WHEN 'CNT:' THEN N'Contacts' WHEN 'CON:' THEN N'Control' WHEN 'CSM:' THEN N'CaseMaster' WHEN 'DAT:' THEN N'DiaryAttachments' WHEN 'DATE:' THEN N'' WHEN 'DEA:' THEN N'DebtCostingLedger' WHEN 'DIA:' THEN N'diary' WHEN 'DIA2:' THEN N'diary' WHEN 'DIA3:' THEN N'diary' WHEN 'FEC:' THEN N'FeeEarnerCodes' WHEN 'HAN:' THEN N'Handlers' WHEN 'LCL:' THEN N'client' WHEN 'LCN:' THEN N'ClientContacts' WHEN 'MAT:' THEN N'matters' WHEN 'NAC:' THEN N'CaseAssociatesContacts' WHEN 'NAM:' THEN N'CaseAssociatesNames' WHEN 'TEA:' THEN N'Handlers' WHEN 'TEA1:' THEN N'Handlers' WHEN 'TME:' THEN N'Handlers' WHEN 'TME1:' THEN N'Handlers' WHEN 'UDF:' THEN N'CaseUDFAnswers' WHEN 'AUD:' THEN N'AssociateUDF' ELSE N'unknown' END END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = 'KAAS_FN_SystemTableAlias' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_SystemTableAlias] END GO CREATE FUNCTION [dbo].[KAAS_FN_SystemTableAlias] (@PREFIX VARCHAR(5)) RETURNS NVARCHAR(128) AS /********************************************************************* * * Returns System Table Alias associated with Clarion Prefix * * Scalar function can be used in SELECT statements * * Stored Procedure : KAAS_FN_SystemTableAlias * Copide From : [dbo].[ky_NETFNSystemTableAlias] * * Maintenance History * 2015-08-25 Pino Carafa Created * 2016-02-03 Pino Carafa TEA1 prefix actually refers * to the Case Fee Earner. * We will use alias FEH for * that purpose * 2018-09-21 Pino Carafa Added support for the BRC * prefix as that's what it was * originally in the Clarion * software. It will revert to * BR for the [dbo].[Branch] * table. * 2019-01-10 Pino Carafa Added support for AUD: * 2019-12-19 Vinodhan Created KAAS_FN_SystemTableAlias * *********************************************************************/ BEGIN RETURN CASE @PREFIX WHEN 'BR:' THEN N'BR' WHEN 'BRC:' THEN N'BR' WHEN 'CC:' THEN N'CC' WHEN 'CAC:' THEN N'CAC' WHEN 'CAN:' THEN N'CAN' WHEN 'CNT:' THEN N'CON' WHEN 'CON:' THEN N'CTR' WHEN 'CSM:' THEN N'CSM' WHEN 'DAT:' THEN N'DAT' WHEN 'DATE:' THEN N'' WHEN 'DEA:' THEN N'DL' WHEN 'DIA:' THEN N'DIA' WHEN 'DIA2:' THEN N'DIA' WHEN 'DIA3:' THEN N'DIA' WHEN 'FEC:' THEN N'FEC' WHEN 'HAN:' THEN N'HAN' WHEN 'LCL:' THEN N'CLT' WHEN 'LCN:' THEN N'CLC' WHEN 'MAT:' THEN N'MAT' WHEN 'NAC:' THEN N'CAC' WHEN 'NAM:' THEN N'CAN' WHEN 'TEA:' THEN N'TEA' WHEN 'TEA1:' THEN N'FEH' WHEN 'TME:' THEN N'AHA' WHEN 'TME1:' THEN N'AHA' WHEN 'UDF:' THEN N'UDF' WHEN 'AUD:' THEN N'AUD' ELSE N'unknown' END END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_UnQuotedStatement' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_UnQuotedStatement] END GO CREATE FUNCTION [dbo].[KAAS_FN_UnQuotedStatement] (@ORIGINAL VARCHAR(MAX)) RETURNS VARCHAR(MAX) WITH RETURNS NULL ON NULL INPUT AS /************************************************************************************************************* * * * [dbo].[ky_NETFNUnQuotedStatement] * * * * Pre-parse a quoted statement to restore Operators * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: 5.6.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-12-19 Pino Carafa Created * * 2019-12-19 Vinodhan Created KAAS_FN_UnQuotedStatement * * 2023-02-06 Ghayathri.S.V. Modified to include return null when the input is null * *************************************************************************************************************/ BEGIN DECLARE @New VARCHAR(MAX) SET @New = @ORIGINAL SET @New = REPLACE(@New, '____PLUS____', '+') SET @New = REPLACE(@New, '____MINUS____', '-') SET @New = REPLACE(@New, '____SLASH____', '/') SET @New = REPLACE(@New, '____BACKSLASH____', '\') SET @New = REPLACE(@New, '____STAR____', '*') SET @New = REPLACE(@New, '____AMP____', '&') RETURN @NEW END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_UserCanPostTime' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_UserCanPostTime] END GO CREATE FUNCTION [dbo].[KAAS_FN_UserCanPostTime] (@MATTER VARCHAR(20), @HANDLER VARCHAR(20), @RECORDID INT) RETURNS INT AS /******************************************************************************************************* * This function will check if a * * given user can post time a given matter. * * * * Return Bit Mask: * * 0 - User can post * * 1 - Matter doesn't exist * * 2 - Matter is closed * * 4 - Matter charge list enabled but user not present * * 8 - Client charge list enabled but user not present * * 16 - Task not specified * * 32 - Client is not approved for anti-money laundering (KEYD-4890) * * * * Flag Bit Mask: * * 1 - Matter charge out rate list is enabled * * 2 - Client charge out rate list is enabled * * 4 - User is in Matter charge out rate list * * 8 - User is in Client charge out rate list * * * * Stored Procedure Name : [dbo].[KAAS_FN_UserCanPostTime] * * Copied from : [dbo].[ky_NETFNUserCanPostTime] * * * * Modification History: * * 2019-04-24 Vinodhan K Created * *******************************************************************************************************/ BEGIN DECLARE @RETURN INT -- BitWise value where bits are mapped to errors DECLARE @FLAG INT -- BitWise value for charge out rates DECLARE @CHECK BIT -- Checks if a setting is enabled or not DECLARE @CHARGEGROUP VARCHAR(10) -- Charge group of @HANDLER SET @RETURN = 0 SET @FLAG = 0 SET @MATTER = ISNULL(@MATTER, '') SET @HANDLER = ISNULL(@HANDLER, '') SELECT @CHARGEGROUP = ISNULL(HAN.[ChargeGroup], '') FROM [dbo].[Handlers] AS HAN WHERE HAN.[CODE] = @HANDLER IF @MATTER <> '~' BEGIN -- Check if the matter code contains a '/' -- If it doesn't then it's probably because the matter is blank SET @MATTER = ISNULL(NULLIF(@MATTER, ''), '/') IF NOT EXISTS(SELECT * FROM [dbo].[matters] WHERE [Code] = @MATTER) SET @RETURN = @RETURN | 1 -- Matter doesn't exist IF EXISTS(SELECT * FROM [dbo].[matters] WHERE [Code] = @MATTER AND [Closed] = 'Y') SET @RETURN = @RETURN | 2 -- Matter is closed SET @CHECK = ISNULL((SELECT CONVERT(BIT, ISNULL([KeyValue], 'False')) FROM [dbo].[Settings] WHERE [KeyName] = 'ChargeOutRateCheck'), 0) IF @CHECK = 1 BEGIN /* Below is where the charge out rate indicators are handled. There's a hierarchy for how a user's rate is calculated and that same hierarchy will be applied here. The handler may be in a charge group and this is treated the same as a handler code. No No Matter rate active? +-----> Client rate active? +-----> User can't post + + | | | Yes | Yes | | v No v No Is handler in list? +--+ Is handler in list? +--+ + | + | | | | | | Yes | | Yes | | | | | v | v | User can post | User can post | | | v v User can't post User can't post */ SELECT @FLAG = @FLAG | CASE WHEN ISNULL(MAT.[ChargeOutRateInd], 'N') = 'Y' THEN 1 ELSE 0 END FROM [dbo].[matters] AS MAT WHERE MAT.[Code] = @MATTER SELECT @FLAG = @FLAG | CASE WHEN ISNULL(CNT.[ChargeOutRateInd], 'N') = 'Y' THEN 2 ELSE 0 END FROM [dbo].[Contacts] AS CNT WHERE CNT.[Code] = SUBSTRING(@MATTER, 1, CHARINDEX('/', @MATTER) - 1) IF EXISTS (SELECT * FROM [dbo].[MatterChargeOutRates] AS MCR WHERE MCR.[MatterCode] = @MATTER AND (MCR.[FeCode] = @HANDLER OR MCR.[FeCode] = @CHARGEGROUP)) BEGIN SET @FLAG = @FLAG | 4 END IF EXISTS (SELECT * FROM [dbo].[ClientChargeOutRates] AS CCR WHERE CCR.[ClientCode] = SUBSTRING(@MATTER, 1, CHARINDEX('/', @MATTER) - 1) AND (CCR.[FeCode] = @HANDLER OR CCR.[FeCode] = @CHARGEGROUP)) BEGIN SET @FLAG = @FLAG | 8 END -- If matter list is enabled and user is not in the list IF @FLAG & 1 > 0 AND @FLAG & 4 = 0 SET @RETURN = @RETURN | 4 -- If client list is enabled, matter list is disabled and user is not in the list IF @FLAG & 2 > 0 AND @FLAG & 8 = 0 AND @FLAG & 1 = 0 SET @RETURN = @RETURN | 8 END END IF @RECORDID IS NOT NULL BEGIN IF (SELECT TOP 1 CASE WHEN TDB.[Matter] = '~' THEN ISNULL(TDB.[NCCCode], '') ELSE ISNULL(TDB.[Task], '') END FROM [dbo].[TimeDayBook] AS TDB WHERE TDB.[RecordID] = @RECORDID) = '' SET @RETURN = @RETURN | 16 END -- Check if AML is required and if the contact is approved IF RTRIM(ISNULL(@MATTER, '')) NOT IN ('', '~', '/') BEGIN IF ISNULL((SELECT TOP 1 [KeyValue] FROM [dbo].[Settings] WHERE [KeyName] = 'AMLRequiredForTime'), '') = '1' AND ISNULL((SELECT TOP 1 CONVERT(VARCHAR(10), ISNULL(CNT.[Approved], 0)) FROM [dbo].[Contacts] AS CNT INNER JOIN [dbo].[matters] AS MAT ON CNT.[Code] = MAT.[ClientCode] WHERE MAT.[Code] = @MATTER AND ISNULL(CNT.[Approved], 0) = 1), '') <> '1' BEGIN SELECT @RETURN = @RETURN | 32 END END RETURN @RETURN END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_FN_VerboseDate' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_FN_VerboseDate] END GO CREATE FUNCTION [dbo].[KAAS_FN_VerboseDate] (@Date DATETIME, @UseThe BIT, @UseDay BIT, @UseOf BIT, @UseComma BIT, @Capitalise BIT) RETURNS VARCHAR(100) AS /************************************************************************************************************* * * * Stored Procedure name : KAAS_FN_VerboseDate * * Copied From : [dbo].[ky_NETFNVerboseDate] * * returns a verbose representation of a date * * Parameters can be set to fine-tune the result as follows. Example date 2018-01-29 * * @UseThe @UseDay @UseOf @UseComma @Capitalise * * 1 1 1 1 1 The 29th Day of January, 2018 * * 0 0 1 0 0 29th of January 2018 * * 1 0 0 0 0 the 29th of January 2018 - "of" implied by "the" * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - * * * * First compatible version: - 5.5.4.1 * * * * Last compatible software version: - * * * * Superseded by: - * * * * * * * ***************************************************************************************************** * * * * Modification History * * 2018-01-29 Pino Carafa Created * * 2019-07-27 Vinodhan K Created KAAS_FN_VerboseDate * * * *************************************************************************************************************/ BEGIN DECLARE @DAY INT DECLARE @SUFFIX VARCHAR(2) DECLARE @Result VARCHAR(100) SET @DAY = DAY(@DATE) SET @SUFFIX = CASE WHEN @DAY = 1 THEN 'st' WHEN @DAY = 2 THEN 'nd' WHEN @DAY = 3 THEN 'rd' WHEN @DAY = 21 THEN 'st' WHEN @DAY = 22 THEN 'nd' WHEN @DAY = 23 THEN 'rd' WHEN @DAY = 31 THEN 'st' ELSE 'th' END IF @UseThe = 1 BEGIN -- If they use "The", the use of "of" is implied SET @UseOf = 1 IF @Capitalise = 1 BEGIN SET @Result = 'T' END ELSE BEGIN SET @Result = 't' END SET @Result = @Result + 'he ' END ELSE BEGIN SET @Result = '' END SET @Result = @Result + CONVERT(VARCHAR(2), @DAY) + @SUFFIX If @UseDay = 1 BEGIN -- you can't have "The Nth Day January, so if they specify UseDay, UseOf is implied SET @UseOf = 1 If @Capitalise = 1 BEGIN SET @Result = @Result + ' D' END ELSE BEGIN SET @Result = @Result + ' d' END SET @Result = @Result + 'ay' END If @UseOf = 1 BEGIN -- we never capitalise "of" SET @Result = @Result + ' of' END SET @Result = @Result + ' ' + DATENAME(MONTH, @DATE) IF @UseComma = 1 BEGIN SET @Result = @Result + ',' END SET @Result = @Result + ' ' + CONVERT(VARCHAR(4), YEAR(@DATE)) Return @Result END GO IF OBJECT_ID(N'KAAS_GetOldPermissions', 'FN')IS NOT NULL DROP FUNCTION KAAS_GetOldPermissions GO CREATE FUNCTION [dbo].[KAAS_GetOldPermissions] (@HANDLER VARCHAR(10)) RETURNS BIGINT WITH RETURNS NULL ON NULL INPUT AS BEGIN DECLARE @PERMISSIONS BIGINT DECLARE @LOGONS TABLE ([CODE] VARCHAR(10), [LOGON] VARCHAR(10), [NAME] varchar(50), [OPE_NUMBER] int) DECLARE @LOGONS2 TABLE ([CODE] VARCHAR(10), [LOGON] VARCHAR(10), [NAME] varchar(50), [OPE_NUMBER] int) /* To aid uniformity, all queries have the same form. In this first one it should not be necessary to join to @LOGONs but doing so is harmless and it makes this query look the same as all the others. The Outer Apply links to DS1, DS2, DS3 and DS4 check that the DSSW21 entry has not already been matched to a handler. If this is so, it tries to match the DSSW21 record to a handler with an exact name match. */ INSERT INTO @LOGONS2 ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT MTC.[CODE], MTC.[LOGON], MTC.[NAME], MTC.[MATCH] FROM (select HAN.[CODE], HAN.[LOGON], HAN.[NAME], CASE WHEN DS1.[OPE_NUMBER] IS NOT NULL THEN DS1.[OPE_NUMBER] ELSE DS2.[OPE_NUMBER] END AS [Match] from [dbo].[Handlers] HAN OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME])) DS1 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME])) DS2 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_SURNAME]) + ' ' + RTRIM(DS.[OPE_FIRSTNAME]))) DS3 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_FIRSTNAME]) + ' ' + RTRIM(DS.[OPE_SURNAME]))) DS4 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS LEFT OUTER JOIN [dbo].[Handlers] HN ON HN.[NAME] LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME]) OR HN.[NAME] LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME]) WHERE DS1.[OPE_NUMBER] IS NULL AND DS2.[OPE_NUMBER] IS NULL AND DS3.[OPE_NUMBER] IS NULL AND DS4.[OPE_NUMBER] IS NULL AND HN.[CODE] IS NULL AND ( RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_FIRSTNAME]) + '%' OR RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_SURNAME]) + '%')) DS5 WHERE HAN.[CODE] = @HANDLER AND RTRIM(ISNULL(HAN.[Logon], '')) <> '') MTC LEFT OUTER JOIN @LOGONS LO ON LO.[OPE_NUMBER] = MTC.[Match] WHERE MTC.[Match] IS NOT NULL AND LO.[OPE_NUMBER] IS NULL -- This eliminates duplicate matches. If there are more than one handler matching a DSSW21 entry, we can't be sure which one it is, -- and we will ignore the match. We only include the ones that have exactly ONE match INSERT INTO @LOGONS ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT LO.[CODE], LO.[LOGON], LO.[NAME], LO.[OPE_NUMBER] FROM ( SELECT OPE_NUMBER from @LOGONS2 GROUP BY OPE_NUMBER HAVING COUNT(1) = 1) MH INNER JOIN @LOGONS2 LO ON LO.[OPE_NUMBER] = MH.[OPE_NUMBER] DELETE @LOGONS2 /* The Outer Apply links to DS1, DS2, DS3 and DS4 check that the DSSW21 entry has not already been matched to a handler. If this is so, it tries to match the DSSW21 record to a handler with an exact name match. */ INSERT INTO @LOGONS2 ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT MTC.[CODE], MTC.[LOGON], MTC.[NAME], MTC.[MATCH] FROM (select HAN.[CODE], HAN.[LOGON], HAN.[NAME], CASE WHEN DS1.[OPE_NUMBER] IS NOT NULL THEN DS1.[OPE_NUMBER] WHEN DS2.[OPE_NUMBER] IS NOT NULL THEN DS2.[OPE_NUMBER] WHEN DS3.[OPE_NUMBER] IS NOT NULL THEN DS3.[OPE_NUMBER] ELSE DS4.[OPE_NUMBER] END AS [Match] from [dbo].[Handlers] HAN OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME])) DS1 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME])) DS2 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_SURNAME]) + ' ' + RTRIM(DS.[OPE_FIRSTNAME]))) DS3 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_FIRSTNAME]) + ' ' + RTRIM(DS.[OPE_SURNAME]))) DS4 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS LEFT OUTER JOIN [dbo].[Handlers] HN ON HN.[NAME] LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME]) OR HN.[NAME] LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME]) WHERE DS1.[OPE_NUMBER] IS NULL AND DS2.[OPE_NUMBER] IS NULL AND DS3.[OPE_NUMBER] IS NULL AND DS4.[OPE_NUMBER] IS NULL AND HN.[CODE] IS NULL AND ( RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_FIRSTNAME]) + '%' OR RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_SURNAME]) + '%')) DS5 WHERE HAN.[CODE] = @HANDLER AND RTRIM(ISNULL(HAN.[Logon], '')) <> '') MTC LEFT OUTER JOIN @LOGONS LO ON LO.[OPE_NUMBER] = MTC.[Match] WHERE MTC.[Match] IS NOT NULL AND LO.[OPE_NUMBER] IS NULL INSERT INTO @LOGONS ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT LO.[CODE], LO.[LOGON], LO.[NAME], LO.[OPE_NUMBER] FROM ( SELECT OPE_NUMBER from @LOGONS2 GROUP BY OPE_NUMBER HAVING COUNT(1) = 1) MH INNER JOIN @LOGONS2 LO ON LO.[OPE_NUMBER] = MH.[OPE_NUMBER] DELETE @LOGONS2 INSERT INTO @LOGONS2 ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT MTC.[CODE], MTC.[LOGON], MTC.[NAME], MTC.[MATCH] FROM (select HAN.[CODE], HAN.[LOGON], HAN.[NAME], CASE WHEN DS1.[OPE_NUMBER] IS NOT NULL THEN DS1.[OPE_NUMBER] WHEN DS2.[OPE_NUMBER] IS NOT NULL THEN DS2.[OPE_NUMBER] WHEN DS3.[OPE_NUMBER] IS NOT NULL THEN DS3.[OPE_NUMBER] WHEN DS4.[OPE_NUMBER] IS NOT NULL THEN DS4.[OPE_NUMBER] ELSE DS5.[OPE_NUMBER] END AS [Match] from [dbo].[Handlers] HAN OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME])) DS1 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE RTrim(HAN.[NAME]) LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME])) DS2 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_SURNAME]) + ' ' + RTRIM(DS.[OPE_FIRSTNAME]))) DS3 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS WHERE Soundex(RTrim(HAN.[NAME])) = SOUNDEX(RTrim(DS.[OPE_FIRSTNAME]) + ' ' + RTRIM(DS.[OPE_SURNAME]))) DS4 OUTER APPLY (SELECT TOP 1 DS.[OPE_NUMBER] FROM [dbo].[DSSW21] DS LEFT OUTER JOIN [dbo].[Handlers] HN ON HN.[NAME] LIKE RTrim(DS.[OPE_FIRSTNAME]) + '%' + RTRIM(DS.[OPE_SURNAME]) OR HN.[NAME] LIKE RTrim(DS.[OPE_SURNAME]) + '%' + RTRIM(DS.[OPE_FIRSTNAME]) WHERE DS1.[OPE_NUMBER] IS NULL AND DS2.[OPE_NUMBER] IS NULL AND DS3.[OPE_NUMBER] IS NULL AND DS4.[OPE_NUMBER] IS NULL AND HN.[CODE] IS NULL AND ( RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_FIRSTNAME]) + '%' OR RTrim(HAN.[NAME]) LIKE '%' + RTrim(DS.[OPE_SURNAME]) + '%')) DS5 WHERE HAN.[CODE] = @HANDLER AND RTRIM(ISNULL(HAN.[Logon], '')) <> '') MTC LEFT OUTER JOIN @LOGONS LO ON LO.[OPE_NUMBER] = MTC.[Match] WHERE MTC.[Match] IS NOT NULL AND LO.[OPE_NUMBER] IS NULL INSERT INTO @LOGONS ([CODE], [LOGON], [NAME], [OPE_NUMBER]) SELECT LO.[CODE], LO.[LOGON], LO.[NAME], LO.[OPE_NUMBER] FROM ( SELECT OPE_NUMBER from @LOGONS2 GROUP BY OPE_NUMBER HAVING COUNT(1) = 1) MH INNER JOIN @LOGONS2 LO ON LO.[OPE_NUMBER] = MH.[OPE_NUMBER] DELETE @LOGONS2 SELECT @PERMISSIONS = CONVERT(BIGINT, ISNULL(JP.[JPER_Permissions], 0)) from [dbo].[Handlers] HAN LEFT OUTER JOIN @LOGONS LO INNER JOIN [dbo].[DSSW21] DS ON DS.[OPE_NUMBER] = LO.[OPE_NUMBER] ON LO.[CODE] = HAN.[CODE] LEFT OUTER JOIN JPermissions JP ON JP.[JPER_UserNumber] = LO.[OPE_NUMBER] WHERE LO.[OPE_NUMBER] IS NOT NULL ORDER BY LO.[OPE_NUMBER] SET @PERMISSIONS = ISNULL(@PERMISSIONS, 0) RETURN @PERMISSIONS END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_GetUNCPathFromFile' AND SO.[type] = 'FN') BEGIN DROP FUNCTION [dbo].[KAAS_GetUNCPathFromFile] END GO CREATE FUNCTION [dbo].[KAAS_GetUNCPathFromFile] (@strFileName varchar(max)) RETURNS varchar(max) AS /************************************************************************ * * Get the UNC Location of a file (provided the drive is stored in * the UNCAlias table) * * Modification History * 2015-10-20 Pino Carafa Imported into Framework * 2019-12-26 Arun V Copied from Ky_GetUNCPathFromFile ************************************************************************/ BEGIN DECLARE @strUNCFileName varchar(max) SET @strFileName = ISNULL(@strFileName, '') SET @strUNCFileName = @strFileName IF (SUBSTRING(@strUNCFileName, 2, 1) = ':') BEGIN SELECT @strUNCFileName = ISNULL(MAX(UNC.[UNC]) + SUBSTRING(@strUNCFileName, 3, LEN(@strUNCFileName) - 2), @strUNCFileName) FROM [dbo].[UNCAlias] UNC WHERE SUBSTRING(@strUNCFileName, 1, 1) = UNC.[Drive] SET @strUNCFileName = LEFT(@strUNCFileName, 2) + REPLACE(RIGHT(@strUNCFileName, LEN(@strUNCFileName) - 2), '\\', '\') END RETURN @strUNCFileName END GO IF OBJECT_ID(N'[KAAS_RequestFile_ConvertTimeFn]',N'FN')IS NOT NULL DROP FUNCTION [KAAS_RequestFile_ConvertTimeFn] GO create function [dbo].[KAAS_RequestFile_ConvertTimeFn] (@datetime datetime) /************************************************************************************** * Funtion Name : KAAS_RequestFile_ConvertTimeFn * Copied from [ky_ConvertTimeToClarion] * * converts a SQL Date (ignoring any DATE part in that date) * to the Clarion Time value, i.e. the number of 1/100 of a second since * midnight, plus one. * * 2022-02-18 Vinodhkumar.M Created * 2023-01-31 Ghayathri.S.V. Modified to include return null when the input is null **************************************************************************************/ RETURNS int WITH RETURNS NULL ON NULL INPUT AS BEGIN DECLARE @hour int DECLARE @minute int DECLARE @second int DECLARE @centi int DECLARE @result int SET @centi = convert(int, convert(decimal(4, 1), DATEPART(millisecond, @datetime)) / convert(decimal(4, 1), 10)) SET @second = DATEPART(second, @datetime) SET @minute = DATEPART(minute, @datetime) SET @hour = DATEPART(hour, @datetime) SET @result = @hour SET @result = 60 * @result SET @result = @result + @minute SET @result = 60 * @result SET @result = @result + @second SET @result = 100 * @result SET @result = @result + @centi + 1 RETURN @result END GO IF EXISTS (SELECT TOP 1 1 FROM SYS.[objects] SO WHERE SO.[name] = N'KAAS_TF_GetDocFolders3' AND SO.[type] = 'TF') BEGIN DROP FUNCTION [dbo].[KAAS_TF_GetDocFolders3] END GO CREATE FUNCTION [dbo].[KAAS_TF_GetDocFolders3] (@parentid INT, @fulltree BIT, @includeparent BIT) RETURNS @DocFolders TABLE ([seq] INT IDENTITY (1, 1) NOT NULL PRIMARY KEY, [id] INT NOT NULL, [parent] INT NOT NULL, [foldername] VARCHAR(500) NOT NULL, [foldericon] INT NOT NULL, [foldershared] BIT NOT NULL, [folderisours] BIT NOT NULL) AS /************************************************************************************************************* * * * Stored Procedure Name : KAAS_TF_GetDocFolders3 * * Copied From : [dbo].[ky_NETTFGetDocFolders3] * * * * Compatibility information - PLEASE update older versions if necessary to ensure the compatible software * * remains fully functional * * ***************************************************************************************************** * * * * * * * Supersedes: - ky_NETTFGetDocFolders2 * * * * First compatible version: - 5.5.1.2 * * * * Last compatible software version: - 5.5.3.9 * * * * Superseded by: - ky_NETTFGetDocFolders4 * * * * * * * ***************************************************************************************************** * * * * Retrieve a document folder tree * * @parentid - the ID of the root folder * * @fulltree - get the complete tree for @parentid * * 0 - get only the first level child nodes * * 1 - get all child nodes * * @includeparent - include the parent node itself * * 0 - the top level returned are the child nodes * * 1 - the top level returned is the parent node * * * * Modification History: * * 2016-04-20 Pino Carafa Created * * 2016-05-12 Pino Carafa Added Folder Icon * * 2017-06-26 Pino Carafa Add outer join for folder sharing * * 2017-07-12 Pino Carafa Add indicator to show whether the share is ours or we're linking to it * * 2017-09-04 Pino Carafa Corrected code to check whether a share is ours. * * 2019-08-27 Vinodhan Created KAAS_TF_GetDocFolders3 * * * *************************************************************************************************************/ BEGIN DECLARE @DocFoldersX TABLE ([seq] INT IDENTITY (0, 1) NOT NULL PRIMARY KEY, [id] INT NOT NULL, [parent] INT NOT NULL, [foldername] VARCHAR(500) NOT NULL, [foldericon] INT NOT NULL, [foldershared] BIT NOT NULL, [folderisours] BIT NOT NULL) IF ISNULL(@parentid, 0) = 0 BEGIN INSERT INTO @DocFoldersX ([id], [parent], [foldername], [foldericon], [foldershared], [folderisours]) SELECT [DF].[id], 0, [DF].[foldername], [DF].[foldericon], 0, 1 FROM [dbo].[DocFolders] [DF] WHERE [DF].[parent] IS NULL ORDER BY [DF].[foldername], [DF].[id] END ELSE BEGIN IF @includeparent = 1 BEGIN INSERT INTO @DocFoldersX ([id], [parent], [foldername], [foldericon], [foldershared], [folderisours]) SELECT [DF].[id], ISNULL([DF].[parent], 0), [DF].[foldername], [DF].[foldericon], 0, 1 FROM [dbo].[DocFolders] [DF] WHERE [DF].[id] = @parentid ORDER BY [DF].[foldername], [DF].[id] END ELSE BEGIN INSERT INTO @DocFoldersX ([id], [parent], [foldername], [foldericon], [foldershared], [folderisours]) SELECT [DF].[id], ISNULL([DF].[parent], 0), [DF].[foldername], [DF].[foldericon], 0, 1 FROM [dbo].[DocFolders] [DF] WHERE [DF].[parent] = @parentid ORDER BY [DF].[foldername], [DF].[id] END END UPDATE [DFX] SET [DFX].[foldershared] = [FSDF].[Shared], [DFX].[folderisours] = [IO].[IsOurs] FROM @DocFoldersX [DFX] INNER JOIN [dbo].[FileSharingDocFolders] [FSDF] CROSS APPLY (SELECT CASE WHEN COUNT(CASE WHEN ISNULL([FSS].[CollabDocFolderID], 0) = 0 THEN 1 ELSE NULL END) = 0 THEN 0 ELSE 1 END AS [IsOurs] FROM [dbo].[FileSharingMapping] [FSM] INNER JOIN [dbo].[FileSharingServers] [FSS] ON [FSS].[id] = [FSM].[FileSharingServersID] WHERE [FSM].[FileSharingDocFoldersID] = [FSDF].[DocFolderID]) [IO] ON [FSDF].[DocFolderID] = [DFX].[id] DECLARE @TOTAL INT DECLARE @ITEM INT SELECT @TOTAL = COUNT(1) FROM @DocFoldersX SET @ITEM = 0 WHILE @ITEM < @TOTAL BEGIN DECLARE @id INT DECLARE @parent INT DECLARE @foldername VARCHAR(500) DECLARE @foldericon INT DECLARE @foldershared BIT DECLARE @folderisours BIT SELECT @id = [DFX].[id], @parent = [DFX].[parent], @foldername = [DFX].[foldername], @foldericon = [DFX].[foldericon], @foldershared = [DFX].[foldershared], @folderisours = [DFX].[folderisours] FROM @DocFoldersX [DFX] WHERE [DFX].[seq] = @ITEM INSERT INTO @DocFolders ([id], [parent], [foldername], [foldericon], [foldershared], [folderisours]) SELECT @id, @parent, @foldername, @foldericon, @foldershared, @folderisours IF @fulltree = 1 BEGIN INSERT INTO @DocFolders ([id], [parent], [foldername], [foldericon], [foldershared], [folderisours]) SELECT [DFC].[id], [DFC].[parent], [DFC].[foldername], [DFC].[foldericon], [DFC].[foldershared], [DFC].[folderisours] FROM [dbo].[KAAS_TF_GetDocFolders3](@id, 1, 0) [DFC] END SET @ITEM = @ITEM + 1 END RETURN END GO IF EXISTS (SELECT * FROM sys.[objects] SO WHERE SO.[name] = 'KAAS_WDTimeDayBookWithAxleErrors' AND SO.[type] = 'TF') BEGIN DROP FUNCTION [dbo].[KAAS_WDTimeDayBookWithAxleErrors] END GO /************************************************************************************** * * KAAS_WDTimeDayBookWithAxleErrors * * Lists the current Day Book Entries plus information about Axle errors * 2020-03-10 Rajesh Copied from ky_WDTimeDayBookWithAxleErrors **************************************************************************************/ Create Function [dbo].[KAAS_WDTimeDayBookWithAxleErrors] (@HSEClientGroup varchar(20), @Handler varchar(10)) RETURNS @TDBWA TABLE ([IsAxleError] varchar(1), [AxleError] varchar(255), [Matter] varchar(20), [FEEEARN] varchar(10), [DATE] datetime, [TIME] int, [RATE] decimal(10,2), [CHARGE] decimal(10,2), [TASK] varchar(10), [TIMEORCHARGE] varchar(1), [STARTTIME] int, [COMMENT] varchar(1000), [NCCCODE] varchar(10), [TEAM] varchar(10), [TRACKREF] int, [DOCKET] varchar(8), [REC_IRR] varchar(1), [PERIOD] int, [YEAR] int, [RECORDID] int, [ActionId] int, [Leave] varchar(1), [StageCode] varchar(10), [Post] varchar(1)) AS BEGIN INSERT INTO @TDBWA ([IsAxleError], [AxleError], [Matter], [FEEEARN], [DATE], [TIME], [RATE], [CHARGE], [TASK], [TIMEORCHARGE], [STARTTIME], [COMMENT], [NCCCODE], [TEAM], [TRACKREF], [DOCKET], [REC_IRR], [PERIOD], [YEAR], [RECORDID], [ActionId], [Leave], [StageCode], [Post]) SELECT CASE WHEN RTRIM(ISNULL(TDB.[matter], '')) = '' -- Admin entries can't cause an Axle error THEN 'N' WHEN RTRIM(ISNULL(TDB.[matter], '')) = '~' -- Admin entries can't cause an Axle error THEN 'N' WHEN MAT.[Code] IS NULL -- Missing matter. This is an error THEN 'Y' WHEN RTRIM(IsNull(CON.[ClientGroup], '')) <> @HSEClientGroup -- If it's not an HSE Client it can't cause an Axle Error THEN 'N' WHEN RTRIM(ISNULL(WTY.[CODE], '')) = '' -- Missing Worktype. This is an error THEN 'Y' WHEN RTRIM(ISNULL(WTY.[ChildCare], '')) <> 'Y' -- If it's not a ChildCare matter it can't cause an Axle Error THEN 'N' WHEN RTRIM(ISNULL(TAC.[CODE], '')) = '' -- Missing Task. This is an error THEN 'Y' WHEN RTRIM(ISNULL(TAC.[AxleTask], '')) <> 'Y' -- This is not a Child Care task. This is an error THEN 'Y' WHEN LEN(RTRIM(ISNULL(TDB.[COMMENT], ''))) < 10 -- Comment must be at least 10 characters. This is an error. THEN 'Y' WHEN TDB.[TIME] > 1440 -- Task is too long! Must be less than 1440 minutes (i.e. 24 hours) THEN 'Y' ELSE 'N' END AS [IsAxleError], CASE WHEN RTRIM(ISNULL(TDB.[matter], '')) = '' -- Admin entries can't cause an Axle error THEN '' WHEN MAT.[Code] IS NULL -- Missing matter. This is an error THEN 'Matter: ' + RTRIM(ISNULL(TDB.[MATTER], '')) + ' not found.' WHEN RTRIM(IsNull(CON.[ClientGroup], '')) <> @HSEClientGroup -- If it's not an HSE Client it can't cause an Axle Error THEN '' WHEN RTRIM(ISNULL(WTY.[CODE], '')) = '' -- Missing Worktype. This is an error THEN 'Matter Work Type ' + RTRIM(IsNull(MAT.[WType], '')) + ' was not found for matter: ' + RTRIM(ISNULL(TDB.[MATTER], '')) WHEN RTRIM(ISNULL(WTY.[ChildCare], '')) <> 'Y' -- If it's not a ChildCare matter it can't cause an Axle Error THEN '' WHEN RTRIM(ISNULL(TAC.[CODE], '')) = '' -- Missing Task. This is an error THEN 'Task ' + RTRIM(IsNull(TAC.[CODE], '')) + ' was not found for matter: ' + RTRIM(ISNULL(TDB.[MATTER], '')) WHEN RTRIM(ISNULL(TAC.[AxleTask], '')) <> 'Y' -- This is not a Child Care task. This is an error THEN 'Task ' + RTRIM(IsNull(TAC.[CODE], '')) + ' is not a Child Care task for matter: ' + RTRIM(ISNULL(TDB.[MATTER], '')) WHEN LEN(RTRIM(ISNULL(TDB.[COMMENT], ''))) < 10 -- Comment must be at least 10 characters. This is an error. THEN 'Comment should be at least 10 characters for matter: ' + RTRIM(ISNULL(TDB.[MATTER], '')) WHEN TDB.[TIME] > 1440 -- Task is too long! Must be less than 1440 minutes (i.e. 24 hours) THEN 'Time should be less than 24 hours for matter: ' + RTRIM(ISNULL(TDB.[MATTER], '')) ELSE 'N' END AS [AxleError], RTRIM(IsNULL(TDB.[MATTER], '')) AS [Matter], RTRIM(IsNULL(TDB.[FEEEARN], '')) AS [Feeearn], TDB.[DATE], ISNULL(TDB.[TIME], 0) AS [TIME], Case When IsNull(MAT.[ChargeOutRateInd], 'N') = 'Y' THEN IsNull(MCR.[Rate], 0) When IsNull(CON.[ChargeOutRateInd], 'N') = 'Y' THEN IsNull(CCR.[Rate], 0) ELSE IsNull(FEP.[ChargeFct], 1.00) * FER.[Rate] END, Convert(numeric(8, 2), ( ( IsNull(TDB.[Time], 0) * Case When IsNull(MAT.[ChargeOutRateInd], 'N') = 'Y' THEN IsNull(MCR.[Rate], 0) When IsNull(CON.[ChargeOutRateInd], 'N') = 'Y' THEN IsNull(CCR.[Rate], 0) ELSE IsNull(FEP.[ChargeFct], 1.00) * FER.[Rate] END) / 60)), RTRIM(IsNULL(TDB.[TASK], '')) AS [TASK], RTRIM(IsNULL(TDB.[TIMEORCHARGE], '')) AS [TIMEORCHARGE], ISNULL(TDB.[STARTTIME], 0) AS [STARTTIME], RTRIM(IsNULL(TDB.[COMMENT], '')) AS [COMMENT], RTRIM(IsNULL(TDB.[NCCCODE], '')) AS [NCCCODE], RTRIM(IsNULL(TDB.[TEAM], '')) AS [TEAM], ISNULL(TDB.[TRACKREF], 0) AS [TRACKREF], RTRIM(IsNULL(TDB.[DOCKET], '')) AS [DOCKET], RTRIM(IsNULL(TDB.[REC_IRR], '')) AS [REC_IRR], ISNULL(TDB.[PERIOD], 0) AS [PERIOD], ISNULL(TDB.[YEAR], 0) AS [YEAR], ISNULL(TDB.[RECORDID], 0) AS [RECORDID], ISNULL(TDB.[ActionId], 0) AS [ActionId], RTRIM(IsNULL(TDB.[Leave], '')) AS [Leave], RTRIM(IsNULL(TDB.[StageCode], '')) AS [StageCode], RTRIM(IsNULL(TDB.[Post], '')) AS [Post] FROM [dbo].[TimeDayBook] TDB LEFT OUTER JOIN [dbo].[matters] MAT INNER JOIN [dbo].[Contacts] CON ON CON.[Code] = MAT.[ClientCode] LEFT OUTER JOIN [dbo].[WorkTypes] WTY ON WTY.[CODE] = MAT.[WType] ON MAT.[Code] = TDB.[MATTER] LEFT OUTER JOIN [dbo].[TasksCodes] TAC on TAC.[CODE] = TDB.[TASK] OUTER APPLY (SELECT MCOR.[Rate] FROM [dbo].[MatterChargeOutRates] MCOR WHERE MCOR.[FeCode] = TDB.[FEEEARN] AND MCOR.[MatterCode] = TDB.[MATTER]) MCR OUTER APPLY (SELECT CCOR.[Rate] FROM [dbo].[ClientChargeOutRates] CCOR WHERE CCOR.[FeCode] = TDB.[FEEEARN] AND CCOR.[ClientCode] = MAT.[CLIENTCODE]) CCR CROSS APPLY (SELECT CASE IsNull(MAT.[ChargeLevel], 3) WHEN 1 THEN IsNull(HDL.[RATE1], 0) WHEN 2 THEN IsNull(HDL.[RATE2], 0) WHEN 3 THEN IsNull(HDL.[RATE3], 0) WHEN 4 THEN IsNull(HDL.[RATE4], 0) WHEN 5 THEN IsNull(HDL.[RATE5], 0) ELSE IsNull(HDL.[RATE], 0) END AS [RATE] FROM [dbo].[Handlers] HDL WHERE HDL.[CODE] = TDB.[FEEEARN]) FER OUTER APPLY (SELECT CASE IsNull(TAC.[ChargeLevel], 'C') WHEN 'A' THEN 0.33 WHEN 'B' THEN 0.67 WHEN 'C' THEN 1.00 WHEN 'D' THEN 1.33 WHEN 'E' THEN 1.67 ELSE 1.00 END AS [ChargeFct] FROM [dbo].[TasksCodes] TAC WHERE TAC.[CODE] = CASE RTrim(IsNull(TDB.MATTER, '')) WHEN '' THEN TDB.[NCCCODE] ELSE TDB.[TASK] END) FEP WHERE TDB.[FEEEARN] = @Handler RETURN END GO