Untitled

 avatar
unknown
plain_text
6 months ago
10 kB
2
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