Advertisement
Guest User

Untitled

a guest
Aug 16th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.32 KB | None | 0 0
  1. USE [temps_develop]
  2. GO
  3.  
  4. /****** Object:  StoredProcedure [dbo].[GetPreviouslyBookedCandidates]    Script Date: 8/17/2018 03:21:07 ******/
  5. SET ANSI_NULLS ON
  6. GO
  7.  
  8. SET QUOTED_IDENTIFIER ON
  9. GO
  10.  
  11. CREATE  PROCEDURE [dbo].[GetPreviouslyBookedCandidates]
  12. @OrderId int,
  13. @DisplayLength int,
  14. @DisplayStart int
  15. AS
  16. BEGIN
  17.  
  18. --DECLARE @OrderId int = 196;
  19. --DECLARE @DisplayLength int = 1000;
  20. --DECLARE @DisplayStart int = 0;
  21.  
  22.     DECLARE @Start int = @DisplayStart;
  23.     DECLARE @End int = @DisplayStart + @DisplayLength;
  24.     DECLARE @today DATETIME;
  25.     DECLARE @totalResults bigint;
  26.    
  27.     SET @today = CONVERT(DATE, getdate(), 101);
  28.  
  29.     DECLARE @CurrentlyBookedCandidates TABLE
  30.     (
  31.         BookedCandidateId BIGINT,
  32.         Fullname NVARCHAR(250),
  33.         StartDate DATETIME,
  34.         FinishDate DATETIME,
  35.         CandidateId BIGINT,
  36.         ShiftPatternId BIGINT,
  37.         OriginalShiftPatternId BIGINT,
  38.         LatestShiftPatternId BIGINT,
  39.         LatestShiftPatternVersion BIGINT
  40.     )
  41.  
  42.     DECLARE @PreviouslyBookedCandidates TABLE
  43.     (
  44.         BookedCandidateId BIGINT,
  45.         Fullname NVARCHAR(250),
  46.         Telephone NVARCHAR(250),
  47.         StartDate DATETIME,
  48.         FinishDate DATETIME,
  49.         CandidateId BIGINT,
  50.         ShiftPatternId BIGINT,
  51.         OriginalShiftPatternId BIGINT,
  52.         LatestShiftPatternId BIGINT,
  53.         LatestShiftPatternVersion BIGINT,
  54.         CanRehire BIT,
  55.         ShouldBeDeleted BIT,
  56.         RowNumber BIGINT
  57.     )
  58.  
  59.     -- populate the currently booked candidates
  60.     INSERT INTO @CurrentlyBookedCandidates
  61.     SELECT
  62.         obc.Id AS BookedCandidateId
  63.     , cp.Forename + ' ' + cp.Surname AS Fullname
  64.     , obc.StartDate
  65.     , obc.FinishDate
  66.     , obc.CandidateId
  67.     , obc.ShiftPatternId
  68.     , NULL AS OriginalShiftPattern
  69.     , (
  70.         SELECT CASE
  71.                 WHEN (sp.OriginalShiftPatternId IS NULL AND (sp.[Version] = 0 OR sp.[Version] = 1))
  72.                 THEN
  73.                     CASE
  74.                         WHEN (SELECT Count(*) FROM ShiftPatterns WHERE OriginalShiftPatternId = sp.Id) > 0
  75.                             THEN
  76.                             (SELECT TOP 1 Id FROM ShiftPatterns WHERE OriginalShiftPatternId = sp.Id ORDER BY CASE WHEN [Version] IS NULL THEN sp.Id ELSE sp.Id END DESC)
  77.                         ELSE
  78.                             obc.ShiftPatternId
  79.                     END
  80.                 ELSE
  81.                     (SELECT TOP 1 sp2.Id FROM ShiftPatterns sp2 WHERE sp2.OriginalShiftPatternId = sp.OriginalShiftPatternId ORDER BY CASE WHEN sp2.[Version] IS NULL THEN 1 ELSE sp2.[Version] END DESC)
  82.             END AS IsOriginal
  83.         FROM ShiftPatterns sp
  84.         WHERE sp.Id = obc.ShiftPatternId
  85.         ) AS LatestShiftPatternId
  86.     , NULL
  87.     FROM OrderBookedCandidates obc
  88.     INNER JOIN CandidateProfiles cp
  89.     ON obc.CandidateId = cp.Id
  90.     WHERE obc.OrderId = @orderId
  91.     AND (obc.FinishDate IS NULL OR (obc.FinishDate IS NOT NULL AND CONVERT(DATE, obc.FinishDate, 101) >= @today))
  92.  
  93.     -- populate the previously booked candidates
  94.     INSERT INTO @PreviouslyBookedCandidates
  95.     SELECT
  96.         obc.Id AS BookedCandidateId
  97.     , cp.Forename + ' ' + cp.Surname AS Fullname
  98.     , NULL
  99.     , obc.StartDate
  100.     , obc.FinishDate
  101.     , obc.CandidateId
  102.     , obc.ShiftPatternId
  103.     , NULL AS OriginalShiftPattern
  104.     , (
  105.         SELECT CASE
  106.                 WHEN (sp.OriginalShiftPatternId IS NULL AND (sp.[Version] = 0 OR sp.[Version] = 1))
  107.                 THEN
  108.                     CASE
  109.                         WHEN (SELECT Count(*) FROM ShiftPatterns WHERE OriginalShiftPatternId = sp.Id) > 0
  110.                             THEN
  111.                             (SELECT TOP 1 Id FROM ShiftPatterns WHERE OriginalShiftPatternId = sp.Id ORDER BY CASE WHEN [Version] IS NULL THEN 1 ELSE [Version] END DESC)
  112.                         ELSE
  113.                             obc.ShiftPatternId
  114.                     END
  115.                 ELSE
  116.                     (SELECT TOP 1 sp2.Id FROM ShiftPatterns sp2 WHERE sp2.OriginalShiftPatternId = sp.OriginalShiftPatternId ORDER BY CASE WHEN sp2.[Version] IS NULL THEN 1 ELSE sp2.[Version] END DESC)
  117.             END AS IsOriginal
  118.         FROM ShiftPatterns sp
  119.         WHERE sp.Id = obc.ShiftPatternId
  120.         ) AS LatestShiftPatternId
  121.     , NULL AS LatestShiftPatternVersion
  122.     , NULL AS CanRehire
  123.     , NULL AS ShouldBeDeleted
  124.     , NULL AS RowNumber
  125.     FROM OrderBookedCandidates obc
  126.     INNER JOIN CandidateProfiles cp
  127.     ON obc.CandidateId = cp.Id
  128.     WHERE obc.OrderId = @orderId
  129.     AND (obc.FinishDate IS NOT NULL AND  CONVERT(DATE, obc.FinishDate, 101) < @today)
  130.  
  131.        
  132.     --SELECT * FROM @CurrentlyBookedCandidates cbc
  133.     --ORDER BY CandidateId ASC
  134.  
  135.  
  136.     -- set the previously booked candidates latest shift pattern
  137.     UPDATE pb
  138.     SET pb.LatestShiftPatternVersion = (SELECT TOP 1 [Version] FROM ShiftPatterns WHERE Id = pb.LatestShiftPatternId)
  139.     FROM @PreviouslyBookedCandidates pb
  140.  
  141.     -- set the previously booked candidates current shift pattern
  142.     UPDATE pb
  143.     SET pb.OriginalShiftPatternId = (SELECT TOP 1 [OriginalShiftPatternId] FROM ShiftPatterns WHERE Id = pb.LatestShiftPatternId)
  144.     FROM @PreviouslyBookedCandidates pb
  145.  
  146.     -- set the previously booked candidates can rehire
  147.     UPDATE pb
  148.     SET pb.CanRehire = (
  149.                             (
  150.                             CASE
  151.                                 WHEN (
  152.                                         SELECT COUNT(*)
  153.                                         FROM @CurrentlyBookedCandidates cbc
  154.                                         WHERE cbc.BookedCandidateId != pb.BookedCandidateId
  155.                                         AND cbc.CandidateId = pb.CandidateId
  156.                                         AND cbc.ShiftPatternId = pb.LatestShiftPatternId
  157.                                         ) > 0
  158.                                 THEN 0
  159.                                 ELSE 1
  160.                                 END
  161.                             )
  162.     )
  163.     FROM @PreviouslyBookedCandidates pb
  164.  
  165.     -- set the previously booked candidates can rehire
  166.     UPDATE pb
  167.     SET pb.ShouldBeDeleted = (
  168.                             (
  169.                             CASE
  170.                                 WHEN (
  171.                                         SELECT COUNT(*)
  172.                                         FROM @CurrentlyBookedCandidates cbc
  173.                                         WHERE cbc.CandidateId = pb.CandidateId
  174.                                         AND cbc.LatestShiftPatternId = pb.LatestShiftPatternId
  175.                                         ) > 0
  176.                                 THEN 1
  177.                                 ELSE 0
  178.                                 END
  179.                             )
  180.     )
  181.     FROM @PreviouslyBookedCandidates pb
  182.  
  183.     UPDATE pb
  184.     SET pb.Telephone = (SELECT PhoneMobile FROM CandidateProfiles WHERE Id = pb.CandidateId)
  185.     FROM @PreviouslyBookedCandidates pb
  186.  
  187.     --UPDATE pb
  188.     --SET pb.RowNumber = ROW_NUMBER() OVER (ORDER BY BookedCandidateId )
  189.     --FROM @PreviouslyBookedCandidates pb
  190.  
  191.     DELETE FROM @PreviouslyBookedCandidates
  192.     WHERE ShouldBeDeleted = 1
  193.  
  194.    
  195.     UPDATE T
  196.     SET T.rownumber = TT.ROW_ID
  197.     FROM @PreviouslyBookedCandidates AS T
  198.     INNER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY BookedCandidateId) AS ROW_ID
  199.                     , BookedCandidateId
  200.             FROM @PreviouslyBookedCandidates) AS TT
  201.     ON T.BookedCandidateId = TT.BookedCandidateId
  202.  
  203.     SET @totalResults = (SELECT COUNT(*) FROM @PreviouslyBookedCandidates)
  204.  
  205.     SELECT BookedCandidateId, Fullname, Telephone,  StartDate, FinishDate, CanRehire, CandidateId, (SELECT @totalResults) AS TotalResults
  206.     FROM  @PreviouslyBookedCandidates pb
  207.     WHERE pb.RowNumber > @Start and pb.RowNumber <= @End
  208.     ORDER BY pb.RowNumber
  209.  
  210. END
  211. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement