diff --git a/SQL/Web_SearchApplications2.sql b/SQL/Web_SearchApplications2.sql index 635c4a7..c4d85c9 100644 --- a/SQL/Web_SearchApplications2.sql +++ b/SQL/Web_SearchApplications2.sql @@ -472,130 +472,6 @@ BEGIN FROM #tmpResults2 t LEFT JOIN LatestMsgDates l ON l.ApplicationId = t.ApplicationId - -- Dossier set for current results - CREATE TABLE #tmpDossiers ( - DossierId INT PRIMARY KEY - ) - - INSERT INTO #tmpDossiers (DossierId) - SELECT DISTINCT d.Id - FROM #tmpResults2 r - JOIN Dossier d ON d.ApplicantProfileId = r.ApplicantProfileId AND d.CompanySetId = @companySetId - - -- Aggregate comments per dossier and compute latest comment fields - CREATE TABLE #tmpDossierCommentAgg ( - DossierId INT PRIMARY KEY, - CommentsCount INT NOT NULL, - LastComment NVARCHAR(MAX) NULL, - LastCommentTemplateId INT NULL - ) - - ;WITH LastC AS ( - SELECT c.DossierId, - c.Comment, - c.CompanySetApplicantCommentTemplateId, - ROW_NUMBER() OVER (PARTITION BY c.DossierId ORDER BY c.LastChangeDate DESC) AS rn - FROM CompanySetApplicantComment c WITH(NOLOCK) - WHERE c.DossierId IN (SELECT DossierId FROM #tmpDossiers) - ) - INSERT INTO #tmpDossierCommentAgg (DossierId, CommentsCount, LastComment, LastCommentTemplateId) - SELECT d.DossierId, - ISNULL(cnt.Cnt, 0) AS CommentsCount, - lc.Comment AS LastComment, - lc.CompanySetApplicantCommentTemplateId AS LastCommentTemplateId - FROM #tmpDossiers d - LEFT JOIN ( - SELECT DossierId, COUNT(*) AS Cnt - FROM CompanySetApplicantComment WITH(NOLOCK) - WHERE DossierId IN (SELECT DossierId FROM #tmpDossiers) - GROUP BY DossierId - ) cnt ON cnt.DossierId = d.DossierId - LEFT JOIN LastC lc ON lc.DossierId = d.DossierId AND lc.rn = 1 - - -- Keys for rating lookup per dossier and profession - CREATE TABLE #tmpRatingKeys ( - DossierId INT NOT NULL, - ProfessionId INT NOT NULL, - PRIMARY KEY (DossierId, ProfessionId) - ) - - INSERT INTO #tmpRatingKeys (DossierId, ProfessionId) - SELECT DISTINCT d.Id AS DossierId, - clpro.ProfessionId - FROM #tmpResults2 r - JOIN Apprenticeship apr ON apr.Id = r.ApprenticeshipId - JOIN CompanyLocationProfession clpro ON clpro.Id = apr.CompanyLocationProfessionId - JOIN Dossier d ON d.ApplicantProfileId = r.ApplicantProfileId AND d.CompanySetId = @companySetId - - CREATE TABLE #tmpRating ( - DossierId INT NOT NULL, - ProfessionId INT NOT NULL, - RatingTypeResult NVARCHAR(50) NULL, - PRIMARY KEY (DossierId, ProfessionId) - ) - - INSERT INTO #tmpRating (DossierId, ProfessionId, RatingTypeResult) - SELECT k.DossierId, - k.ProfessionId, - MIN(aprt.ShortCode) AS RatingTypeResult - FROM ApplicantProfessionRating apr - JOIN ApplicantProfessionRatingType aprt ON aprt.Id = apr.ApplicantProfessionRatingTypeId - JOIN #tmpRatingKeys k ON k.DossierId = apr.DossierId AND k.ProfessionId = apr.ProfessionId - GROUP BY k.DossierId, k.ProfessionId - - -- Precompute effective CompanyPerson for doc-change flag and related ApplicationIds - CREATE TABLE #tmpEffCompanyPerson ( - ApprenticeshipId INT NOT NULL, - ApplicantProfessionProfileId INT NULL, - EffectiveCompanyPersonId INT NULL - ) - CREATE INDEX IX_tmpEffCompanyPerson ON #tmpEffCompanyPerson (ApprenticeshipId, ApplicantProfessionProfileId, EffectiveCompanyPersonId) - - INSERT INTO #tmpEffCompanyPerson (ApprenticeshipId, ApplicantProfessionProfileId, EffectiveCompanyPersonId) - SELECT DISTINCT t.ApprenticeshipId, - t.ApplicantProfessionProfileId, - COALESCE(t.CompanyPersonId, app.CompanyPersonId) AS EffectiveCompanyPersonId - FROM #tmpResults2 t - LEFT JOIN Apprenticeship app ON app.Id = t.ApprenticeshipId - WHERE t.ApprenticeshipId IS NOT NULL - - CREATE TABLE #tmpResAppIds ( - ApprenticeshipId INT NOT NULL, - ApplicantProfessionProfileId INT NULL, - EffectiveCompanyPersonId INT NULL, - ApplicationId INT NOT NULL - ) - CREATE INDEX IX_tmpResAppIds ON #tmpResAppIds (ApprenticeshipId, ApplicantProfessionProfileId, EffectiveCompanyPersonId, ApplicationId) - - INSERT INTO #tmpResAppIds (ApprenticeshipId, ApplicantProfessionProfileId, EffectiveCompanyPersonId, ApplicationId) - SELECT rk.ApprenticeshipId, - rk.ApplicantProfessionProfileId, - rk.EffectiveCompanyPersonId, - a.Id AS ApplicationId - FROM [Application] a - JOIN #tmpEffCompanyPerson rk - ON rk.ApprenticeshipId = a.ApprenticeshipId - AND ISNULL(rk.ApplicantProfessionProfileId, -1) = ISNULL(a.ApplicantProfessionProfileId, -1) - WHERE (@IncludeInactiveApplications = 1 OR a.IsActive = 1) - - CREATE TABLE #tmpDocNotifEnabled ( - ApprenticeshipId INT NOT NULL, - ApplicantProfessionProfileId INT NULL, - EffectiveCompanyPersonId INT NULL, - DocEnabled BIT NOT NULL - ) - CREATE INDEX IX_tmpDocNotifEnabled ON #tmpDocNotifEnabled (ApprenticeshipId, ApplicantProfessionProfileId, EffectiveCompanyPersonId) - - INSERT INTO #tmpDocNotifEnabled (ApprenticeshipId, ApplicantProfessionProfileId, EffectiveCompanyPersonId, DocEnabled) - SELECT ra.ApprenticeshipId, - ra.ApplicantProfessionProfileId, - ra.EffectiveCompanyPersonId, - CAST(1 AS BIT) AS DocEnabled - FROM CompanySetApplicationRelation csar WITH(NOLOCK) - JOIN #tmpResAppIds ra ON ra.ApplicationId = csar.ApplicationId - WHERE csar.EmailNotificationWhenDocumentsChange = 1 AND csar.CompanyPersonId = ra.EffectiveCompanyPersonId - GROUP BY ra.ApprenticeshipId, ra.ApplicantProfessionProfileId, ra.EffectiveCompanyPersonId - ---------------------------------------------------------------------- ------ 3. SELECT RESULT, APPLY PAGING & ORDERING --------- ---------------------------------------------------------------------- @@ -634,11 +510,18 @@ BEGIN cpn.Salutation AS Salutation, COALESCE(cpn.CompanyProfileId, cpnapp.CompanyProfileId) AS CompanyProfileId, cpn.Email AS CompanyPersonEmail, - pt.Name AS Profession, - rt.RatingTypeResult, - dc.CommentsCount, - dc.LastComment, - dc.LastCommentTemplateId AS CommentTemplateId, + (SELECT TOP 1 proT.Name + FROM ProfessionTranslation proT + WHERE prot.Language = @Language + AND prot.ProfessionId = clpro.ProfessionId + ) AS Profession, + (SELECT TOP 1 aprt.ShortCode + FROM ApplicantProfessionRatingType aprt + JOIN ApplicantProfessionRating apr ON apr.ApplicantProfessionRatingTypeId = aprt.Id + WHERE apr.DossierId = d.Id AND apr.ProfessionId = clpro.ProfessionId) AS RatingTypeResult, + (SELECT COUNT(Id) FROM CompanySetApplicantComment WHERE DossierId = d.Id) AS CommentsCount, + (SELECT TOP 1 Comment FROM CompanySetApplicantComment WHERE DossierId = d.Id ORDER BY LastChangeDate DESC) AS LastComment, + (SELECT TOP 1 CompanySetApplicantCommentTemplateId FROM CompanySetApplicantComment WHERE DossierId = d.Id ORDER BY LastChangeDate DESC) AS CommentTemplateId, res.ApplicationId AS ApplicationId, clprof.PlaceName AS CompanyLocationProfilePlaceName, clprof.Street AS CompanyLocationProfileStreet, @@ -649,8 +532,21 @@ BEGIN caas.[Description] AS WorkflowStateDescription, res.AverageCompanySetCompanyRatings AS CompanySetRatingAverage, res.SocialSecurityNumber, - CASE WHEN dne.DocEnabled = 1 THEN @true ELSE @false END AS DocChangeNotificationEnabled, - CASE WHEN clprof.Id = cp.HeadquarterCompanyLocationProfileId THEN @true ELSE @false END AS IsHeadquarterCompanyLocationProfile, + CASE WHEN EXISTS ( + SELECT * FROM CompanySetApplicationRelation csar + WHERE csar.EmailNotificationWhenDocumentsChange = @true + AND csar.ApplicationId IN + (SELECT Id + FROM [Application] a + WHERE a.ApprenticeshipId = res.ApprenticeshipId + AND (@IncludeInactiveApplications = 1 OR a.IsActive = @true) + AND a.ApplicantProfessionProfileId = res.ApplicantProfessionProfileId) -- GAT-3420 must find record for particular ApplicantProfessionProfileId from res table, not only for ApplicationId + AND csar.CompanyPersonId = COALESCE(res.CompanyPersonId, (SELECT a.CompanyPersonId FROM Apprenticeship a WHERE a.Id = res.ApprenticeshipId)) + ) THEN @true ELSE @false END AS DocChangeNotificationEnabled, + CASE WHEN clprof.Id = (SELECT HeadquarterCompanyLocationProfileId + FROM CompanyProfile c + WHERE c.Id = clprof.CompanyProfileId) + THEN @true ELSE @false END AS IsHeadquarterCompanyLocationProfile, COALESCE(res.UnreadMsgCount, 0) AS UnreadMsgCount, COALESCE(res.UnansweredMsgCount, 0) AS UnansweredMsgCount, @false AS IsCreatedByCompany, @@ -664,7 +560,8 @@ BEGIN res.IsActiveApplication, clpro.ExternalReferenceId, apro.CompletionPercentage AS CompletionPercentage, - caasc.ColorCode AS ColorCode, + (SELECT ColorCode FROM CompanyApplicantAvailableStateColor + WHERE Id = caas.ColorId) AS ColorCode, res.LastSentMessageDate, res.LastReceivedMessageDate, clprof.CompanyAppendix AS CompanyLocationProfileAppendix @@ -677,17 +574,10 @@ BEGIN LEFT JOIN CompanyLocationProfession clpro ON clpro.Id = apr.CompanyLocationProfessionId LEFT JOIN CompanyLocationProfile clprof ON clprof.Id = apr.CompanyLocationProfileId LEFT JOIN CompanyApplicantAvailableState caas ON caas.Id = res.CompanyApplicantAvailableStateId - LEFT JOIN CompanyProfile cp ON cp.Id = clprof.CompanyProfileId - LEFT JOIN ProfessionTranslation pt ON pt.ProfessionId = clpro.ProfessionId AND pt.Language = @Language - LEFT JOIN #tmpDossierCommentAgg dc ON dc.DossierId = d.Id - LEFT JOIN #tmpRating rt ON rt.DossierId = d.Id AND rt.ProfessionId = clpro.ProfessionId - LEFT JOIN #tmpEffCompanyPerson ecp ON ecp.ApprenticeshipId = res.ApprenticeshipId AND ISNULL(ecp.ApplicantProfessionProfileId, -1) = ISNULL(res.ApplicantProfessionProfileId, -1) - LEFT JOIN #tmpDocNotifEnabled dne ON dne.ApprenticeshipId = res.ApprenticeshipId AND ISNULL(dne.ApplicantProfessionProfileId, -1) = ISNULL(res.ApplicantProfessionProfileId, -1) AND dne.EffectiveCompanyPersonId = ecp.EffectiveCompanyPersonId - LEFT JOIN CompanyApplicantAvailableStateColor caasc ON caasc.Id = caas.ColorId WHERE -- Anonymous Applicants ((@HideAnonymousApplicant IS NULL OR @HideAnonymousApplicant = 0) - OR (@HideAnonymousApplicant=1 AND res.DossierPayed = @true )) + OR (@HideAnonymousApplicant=1 AND res.DossierPayed = @true )) AND (@SharingEnabled = @false -- Own Dossiers. OR (res.CompanyPersonId = @companyPersonId)