Untitled
unknown
plain_text
a year ago
10 kB
5
Indexable
CREATE PROCEDURE [App].[usp_GetSiteProvisioningByManufacturerId]
AS
BEGIN
DECLARE @ManufacturerId INT = 1,
@UserId INT = 66643,
@searchstring NVARCHAR(30) = '0000000002',
@SiteProvisioning [App].[SiteFilter],
@query_total NVARCHAR(max) = NULL,
@query_columns NVARCHAR(MAX) = NULL,
@query_count NVARCHAR(MAX) = NULL,
@query_tables NVARCHAR(MAX) = NULL,
@query_orderby NVARCHAR(MAX) = NULL,
@IsPagination BIT = 0,
@CompanyCode NVARCHAR(max),
@ServicingDealerPartnerId NVARCHAR(max),
@SellingDealerPartnerId NVARCHAR(max),
@ProvisioningStatus NVARCHAR(max),
@ServiceLevels NVARCHAR(max),
@IsRentalSite BIT,
@Top INT,
@Skip INT,
@SortColumn NVARCHAR(30),
@SortOrder NVARCHAR(10),
@DesiredFirmwareVersion NVARCHAR(MAX) = NULL,
@TelematicsDataCollectionStatus NVARCHAR(MAX) = NULL,
@PrivacyModeStatus NVARCHAR(MAX) = NULL,
@SiteGroups NVARCHAR(MAX) = NULL,
@StateList NVARCHAR(MAX) = NULL,
@CountryList NVARCHAR(MAX) = NULL;
-- Initialize @SiteProvisioning here as required.
SELECT @CompanyCode = NULLIF([PartnerId], ''),
@ServicingDealerPartnerId = NULLIF([ServicingDealerPartnerId], ''),
@SellingDealerPartnerId = NULLIF([SellingDealerPartnerId], ''),
@ProvisioningStatus = NULLIF([ProvisioningStatus], ''),
@ServiceLevels = NULLIF([ServiceLevels], ''),
@IsRentalSite = CASE WHEN [IsRentalSite] = 'true' THEN 1
WHEN [IsRentalSite] = 'false' THEN 0
ELSE NULL END,
@Skip = ISNULL([Skip], 0),
@Top = [Top],
@SortColumn = ISNULL([SortColumn], 'SiteId'),
@SortOrder = ISNULL([SortOrder], 'ASC'),
@DesiredFirmwareVersion = NULLIF(DesiredFirmwareVersion, ''),
@TelematicsDataCollectionStatus = NULLIF([TelematicsDataCollectionStatus], ''),
@PrivacyModeStatus = NULLIF([PrivacyModeStatus], ''),
@SiteGroups = NULLIF([SiteGroups], ''),
@StateList = NULLIF([StateList], ''),
@CountryList = NULLIF(LTRIM([CountryList]), '')
FROM @SiteProvisioning;
-- Adjust sort column
IF (@SortColumn = 'PrivacyModeStatus')
SET @SortColumn = 'PrivacyMode';
-- Convert state and country lists to XML for easier parsing
DECLARE @StateXML AS XML = CAST(('<X>' + REPLACE(@StateList, ',', '</X><X>') + '</X>') AS XML);
DECLARE @CountryXML AS XML = CAST(('<X>' + REPLACE(@CountryList, ',', '</X><X>') + '</X>') AS XML);
DECLARE @StateCountryList TABLE (ID INT IDENTITY, StateCountryList NVARCHAR(50));
DECLARE @Statetemp TABLE (ID INT IDENTITY, StateList NVARCHAR(50));
DECLARE @Countrytemp TABLE (ID INT IDENTITY, CountryList NVARCHAR(50));
INSERT INTO @Statetemp
SELECT N.value('.', 'NVARCHAR(50)') AS StateList FROM @StateXML.nodes('X') AS T(N);
INSERT INTO @Countrytemp
SELECT N.value('.', 'NVARCHAR(50)') AS CountryList FROM @CountryXML.nodes('X') AS T(N);
INSERT INTO @StateCountryList
SELECT StateList + ',' + CountryList AS StateCountryList
FROM @Statetemp s
JOIN @Countrytemp c ON s.id = c.id;
DECLARE @StateCountryLists NVARCHAR(MAX) = (SELECT STRING_AGG(CAST(StateCountryList AS NVARCHAR(MAX)), '&') list FROM @StateCountryList);
-- Sanitize the search string
SET @searchstring = REPLACE(REPLACE(@searchstring, '''', ''''''), '[', '![');
DECLARE @vFeatureToggle INT = ISNULL((SELECT TOP 1 1 FROM [App].[FeatureAssignedToggle] WHERE [FeatureName] = 'T_85871_UNDERSCORE_WILDCARD_MANF_DLR_BRN' AND [FeatureAssignedToggle] = 1), 0);
IF @vFeatureToggle = 1
SET @searchstring = REPLACE(@searchstring, '_', '!_');
-- Pagination parameters
IF @Skip IS NOT NULL AND @Top IS NOT NULL
BEGIN
SET @IsPagination = 1;
SET @query_count = 'SELECT COUNT(1) AS ROW_COUNT FROM (';
SET @query_orderby = ' ORDER BY ' + @SortColumn + ' ' + @SortOrder;
END
DROP TABLE IF EXISTS #ServiceLevels;
CREATE TABLE #ServiceLevels (
SiteId INT,
ServiceLevels NVARCHAR(MAX)
);
INSERT INTO #ServiceLevels (SiteId, ServiceLevels)
SELECT S.SiteId,
STRING_AGG(CAST(PTF.PricingTierFeatureDescription AS NVARCHAR(MAX)), ',') WITHIN GROUP (ORDER BY PricingTierFeatureDescription) AS ServiceLevels
FROM App.[Site] S
INNER JOIN [App].[SitePricingTier] SPT ON S.SiteId = SPT.SiteId
INNER JOIN [App].[PricingTierFeature] AS PTF ON PTF.PricingTierFeatureId = SPT.PricingTierFeatureId
WHERE SPT.IsActive = 1
GROUP BY S.SiteId;
DROP TABLE IF EXISTS #LevelAddress;
SELECT S.SiteId,
CASE WHEN (S.ServicingBranchId IS NULL OR S.ServicingBranchId = -1) THEN B.BranchName ELSE ABE.BranchName END AS ServicingDealerName,
CASE WHEN (S.ServicingBranchId IS NULL OR S.ServicingBranchId = -1) THEN B.BranchCode ELSE ABE.BranchCode END AS ServicingDealerPartnerId,
CASE WHEN (S.ServicingBranchId IS NULL OR S.ServicingBranchId = -1) THEN
(ISNULL(SDA.AddressLine2, '') + ISNULL(SDA.Street, '') +
ISNULL(', ' + SDA.City, '') + ISNULL(', ' + SDA.STATE, '') +
ISNULL(' ' + SDA.ZipCode, ''))
ELSE
(ISNULL(SAD.AddressLine2, '') + ISNULL(SAD.Street, '') +
ISNULL(', ' + SAD.City, '') + ISNULL(', ' + SAD.STATE, '') +
ISNULL(' ' + SAD.ZipCode, ''))
END AS [ServicingDealerAddress],
B.BranchName AS SellingDealerName,
B.BranchCode AS SellingDealerPartnerId,
ISNULL(SDA.AddressLine2, '') + ISNULL(SDA.Street, '') +
ISNULL(', ' + SDA.City, '') + ISNULL(', ' + SDA.STATE, '') +
ISNULL(' ' + SDA.ZipCode, '') AS [SellingDealerAddress]
INTO #LevelAddress
FROM App.Site S
INNER JOIN App.Company C ON C.CompanyId = S.CompanyId
INNER JOIN App.Branch B ON B.BranchId = C.SellingBranchId
LEFT JOIN App.[Address] SDA ON SDA.AddressId = B.AddressId
LEFT JOIN App.Branch ABE ON ABE.BranchId = S.ServicingBranchId
LEFT JOIN App.[Address] SAD ON SAD.AddressId = ABE.AddressId
INNER JOIN App.Dealer D ON D.DealerId = B.DealerId
INNER JOIN App.Manufacturer M ON M.ManufacturerId = D.ManufacturerId
WHERE C.IsTemporary = 0;
-- Initialize @query_tables with the tables used in the SELECT statement
SET @query_tables = 'FROM App.[Site] S
LEFT JOIN #ServiceLevels SL ON SL.SiteId = S.SiteId
LEFT JOIN App.Manufacturer M ON M.ManufacturerId = S.ManufacturerId
LEFT JOIN App.Dealer D ON D.DealerId = S.DealerAssignedBranchId
LEFT JOIN #LevelAddress AS A ON A.SiteId = S.SiteId';
SET @query_total = 'SELECT * FROM (';
SET @query_columns = 'SELECT S.SiteId,
S.SiteName,
S.VIN,
S.ChassisNo,
S.CreationDateTime,
S.SellDateTime,
S.FirmwareVersion,
S.FirmwareVersionDateTime,
S.BOMVersion,
S.CreatedByUserId,
S.UpdatedByUserId,
S.UpdatedDateTime,
S.DealerAssignedBranchId,
SL.ServiceLevels,
S.TelematicsDataCollectionStatus,
S.PrivacyModeStatus,
@ServiceLevels AS ServiceLevels,
CASE
WHEN S.PrivacyModeStatus = 1 THEN 1
ELSE 0
END AS PrivacyMode,
@StateCountryLists AS StateCountryList,
@DesiredFirmwareVersion AS DesiredFirmwareVersion,
CASE WHEN D.DealerId IS NOT NULL THEN 1 ELSE 0 END AS HasDealer,
CASE WHEN D.DealerId IS NOT NULL THEN D.DealerId ELSE NULL END AS DealerId,
CASE WHEN D.DealerId IS NOT NULL THEN D.DealerName ELSE NULL END AS DealerName,
CASE WHEN S.SiteId IS NOT NULL THEN 1 ELSE 0 END AS IsValidSite,
A.ServicingDealerName,
A.ServicingDealerPartnerId,
A.SellingDealerName,
A.SellingDealerPartnerId,
A.SellingDealerAddress,
A.ServicingDealerAddress
' + @query_tables + ' WHERE (S.CompanyId = @ManufacturerId)
AND (S.VIN LIKE ''%'' + @searchstring + ''%'' OR
S.ChassisNo LIKE ''%'' + @searchstring + ''%'' OR
S.SiteName LIKE ''%'' + @searchstring + ''%'' OR
S.SiteId LIKE ''%'' + @searchstring + ''%'')
AND (M.ManufacturerId IS NULL OR M.ManufacturerId = @ManufacturerId)
AND (S.DealerAssignedBranchId IS NULL OR S.DealerAssignedBranchId IN (
SELECT DealerId
FROM App.Dealer
WHERE SellingBranchId = @UserId
))';
-- Pagination and ordering
IF @IsPagination = 1
BEGIN
SET @query_total += @query_count + @query_orderby + ') AS TotalCount;'
EXEC sp_executesql @query_total;
END
-- Final result
SET @query_total += @query_columns + ') AS Result;'
EXEC sp_executesql @query_total;
END
Editor is loading...
Leave a Comment