OTBranchTracking.sql 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. DROP VIEW IF EXISTS OTBranchTracking
  2. GO
  3. Create View OTBranchTracking
  4. as
  5. WITH AggregatedTime AS (
  6. SELECT
  7. ta.CompanyID,
  8. ta.OwnerID,
  9. ta.WeekID,
  10. b.BAccountID AS EmployeeBAccount,
  11. b.AcctCD AS EmployeeCD,
  12. branch.AcctCD AS BranchCD,
  13. branch.AcctName AS BranchName,
  14. SUM(ta.TimeSpent) AS TotalTimeSpent
  15. FROM PMTimeActivity ta
  16. JOIN EPTimeCard tc
  17. ON ta.CompanyID = tc.CompanyID AND ta.TimeCardCD = tc.TimeCardCD and tc.WeekID = ta.WeekID
  18. JOIN EPEmployee e
  19. ON tc.CompanyID = e.CompanyID AND tc.EmployeeID = e.BAccountID
  20. Join InventoryItem i
  21. on e.CompanyID = i.CompanyID and e.LabourItemID = i.inventoryID
  22. JOIN BAccount b
  23. ON e.CompanyID = b.CompanyID AND e.BAccountID = b.BAccountID
  24. JOIN BAccount branch
  25. ON b.CompanyID = branch.CompanyID AND branch.BAccountID = b.ParentBAccountID
  26. where i.InventoryCD in ('L109', 'L020', 'L101', 'L113', 'L117', 'L121', 'L123', 'L124', 'TECH', 'L021')
  27. and ta.EarningTypeID not in ('HOL', 'PTO')
  28. and ta.IsCorrected = 0
  29. GROUP BY
  30. ta.CompanyID,
  31. ta.OwnerID,
  32. ta.WeekID,
  33. b.BAccountID,
  34. b.AcctCD,
  35. branch.AcctCD,
  36. branch.AcctName
  37. ),
  38. EmployeeTime AS (
  39. SELECT
  40. at.CompanyID,
  41. at.OwnerID,
  42. at.EmployeeBAccount,
  43. at.EmployeeCD,
  44. at.BranchCD,
  45. at.BranchName,
  46. at.WeekID,
  47. at.TotalTimeSpent,
  48. CASE
  49. WHEN at.TotalTimeSpent > 2400 THEN at.TotalTimeSpent - 2400
  50. ELSE 0
  51. END AS OverTimeInMinutes,
  52. CASE
  53. WHEN at.TotalTimeSpent > 2400 THEN 2400
  54. ELSE at.TotalTimeSpent
  55. END AS RegularTimeInMinutes
  56. FROM AggregatedTime at
  57. ),
  58. BranchTime AS (
  59. SELECT
  60. et.CompanyID,
  61. et.BranchCD,
  62. et.WeekID,
  63. SUM(et.TotalTimeSpent) AS TotalTimeSpent,
  64. SUM(et.OverTimeInMinutes) AS OverTimeInMinutes,
  65. SUM(et.RegularTimeInMinutes) AS RegularTimeInMinutes,
  66. CASE
  67. WHEN SUM(et.TotalTimeSpent) = 0 THEN NULL
  68. ELSE ROUND(
  69. CAST(SUM(et.OverTimeInMinutes) AS DECIMAL(10,2)) * 100.0 /
  70. CAST(SUM(et.TotalTimeSpent) AS DECIMAL(10,2)), 2
  71. ) END AS OvertimePercent,
  72. CASE
  73. WHEN SUM(et.TotalTimeSpent) = 0 THEN NULL
  74. ELSE ROUND(
  75. CAST(SUM(et.OverTimeInMinutes) AS DECIMAL(10,4)) /
  76. CAST(SUM(et.TotalTimeSpent) AS DECIMAL(10,4)), 4
  77. )
  78. END AS OvertimeRatio
  79. FROM EmployeeTime et
  80. GROUP BY et.CompanyID, et.BranchCD, et.WeekID
  81. )
  82. SELECT
  83. CompanyID,
  84. BranchCD,
  85. WeekID,
  86. TotalTimeSpent,
  87. RegularTimeInMinutes,
  88. OverTimeInMinutes,
  89. OvertimePercent,
  90. OvertimeRatio
  91. FROM BranchTime;