ProjectDataAccuracyUpdateTwo.sql 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. DROP VIEW IF EXISTS ProjectDataAccuracyUpdate
  2. GO
  3. Create View ProjectDataAccuracyUpdate
  4. as
  5. with FirstLayer
  6. as
  7. (
  8. SELECT c.CompanyID,
  9. c.ContractID,
  10. c.ContractCD,
  11. br.BranchID as BranchKey,
  12. br.BranchCD as BranchCD,
  13. ba.AcctName as BranchName,
  14. cust.BAccountID as CustomerID,
  15. cust.AcctCD as CustomerCD,
  16. cust.AcctName as CustomerName,
  17. c.CreatedDateTime as ContractCreatedDateTime,
  18. bAExec.AcctCD as ExecutiveNumber,
  19. bAExec.AcctName as ExecutiveName,
  20. bAProd.AcctCD as ProducerNumber,
  21. bAProd.AcctName as ProducerName,
  22. bAEst.AcctCD as EstimatorNumber,
  23. bAEst.AcctName as EstimatorName,
  24. bAAdmin.AcctCD as AdminNumber,
  25. bAAdmin.AcctName as AdminName,
  26. manager.AcctCD as ManagerNumber,
  27. manager.AcctName as ManagerName,
  28. manEmp.userID as managerPKID,
  29. execEmp.userID as ExecutivePKID,
  30. (SELECT sum(t.amount) from pmtran t where t.CompanyID = c.CompanyID and t.ProjectID = c.ContractID and t.AccountGroupID = 26 and t.Released = 1) as WIPActual,
  31. dbo.ProjectRental(c.CompanyID, c.ContractID) as RentalProject,
  32. ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) as NTE,
  33. ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeVNTE', 1) AS DECIMAL(18, 2)), 0) as VNTE,
  34. dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 0 ) as NTEAsText,
  35. dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeVNTE', 0 ) as VNTEAsText,
  36. dbo.GetTopContractUserDefinedFieldDescription(c.CompanyID, c.NoteID, 'AttributeCategory') as JobCategory,
  37. dbo.GetTopContractUserDefinedFieldDescription(c.CompanyID, c.NoteID, 'AttributejobStatus') as JobStatus,
  38. ISNULL(b.RevisedExpenseBudgetSum,0) as RevisedExpenseBudgetSum,
  39. ISNULL(b.RevisedIncomeBudgetSum,0) as RevisedIncomeBudgetSum,
  40. ISNULL(b.ActualExpenseAmount,0) as ActualExpenseAmount,
  41. case when b.RevisedExpenseBudgetSum < 5 then 1 else 0 end as RevisedUnderFive,
  42. case when b.ActualExpenseAmount > b.RevisedExpenseBudgetSum then 1 else 0 end as ActualExpenseOverBudget,
  43. case when b.ActualExpenseAmount > b.RevisedIncomeBudgetSum then 1 else 0 end as ExpenseExceedsIncome,
  44. CASE
  45. WHEN b.RevisedIncomeBudgetSum + ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) < 5
  46. THEN 1
  47. ELSE 0
  48. END AS BudgetIncomeAndNTEUnderFive,
  49. CASE
  50. WHEN ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) < 5
  51. AND b.RevisedIncomeBudgetSum > 0
  52. THEN 1
  53. ELSE 0
  54. END AS NTEUnderFiveWithBudget,
  55. CASE
  56. WHEN b.RevisedIncomeBudgetSum < 5
  57. AND ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) > 0
  58. THEN 1
  59. ELSE 0
  60. END AS BudgetUnderFiveWithNTE,
  61. ISNULL(b.RevisedIncomeBudgetSum,0) - ISNULL(RevisedExpenseBudgetSum,0) as EstimatedMargin,
  62. ((ISNULL(b.RevisedIncomeBudgetSum, 0) - ISNULL(b.RevisedExpenseBudgetSum, 0)) / NULLIF(ISNULL(b.RevisedIncomeBudgetSum, 0), 0)) * 100 AS GrossMargin
  63. from Contract c
  64. left join BAccount cust on cust.CompanyID = c.CompanyID and cust.BAccountID = c.CustomerID
  65. left join BAccount manager on manager.CompanyID = c.CompanyID and manager.DefContactID = c.OwnerID
  66. left join EPEmployee manEmp on manager.CompanyID = manEmp.CompanyID and manEmp.BAccountID = manager.BAccountID
  67. left JOIN ContractKvExt execNote on execNote.CompanyID = c.CompanyID and execNote.RecordID =c.NoteID and execNote.FieldName = 'AttributePROJECTEXE'
  68. left join BAccount bAExec on BAExec.CompanyID = execNote.CompanyID and BAExec.AcctCD = execNote.ValueString
  69. left join EPEmployee execEmp on BAExec.CompanyID = execEmp.CompanyID and BAExec.BAccountID = execEmp.BAccountID
  70. left JOIN ContractKvExt prodNote on prodNote.CompanyID = c.CompanyID and prodNote.RecordID =c.NoteID and prodNote.FieldName = 'AttributePRODUCER'
  71. left join BAccount bAProd on BAProd.CompanyID = prodNote.CompanyID and BAProd.AcctCD = prodNote.ValueString
  72. left JOIN ContractKvExt estNote on estNote.CompanyID = c.CompanyID and estNote.RecordID =c.NoteID and estNote.FieldName = 'AttributeESTIMATOR'
  73. left join BAccount bAEst on bAEst.CompanyID = estNote.CompanyID and BAEst.AcctCD = estNote.ValueString
  74. left JOIN ContractKvExt adminNote on adminNote.CompanyID = c.CompanyID and adminNote.RecordID =c.NoteID and adminNote.FieldName = 'AttributePADMIN'
  75. left join BAccount bAAdmin on BAAdmin.CompanyID = adminNote.CompanyID and BAAdmin.AcctCD = adminNote.ValueString
  76. left join PMBudgetTotals b on c.CompanyID = b.CompanyID and c.ContractID = b.ProjectID
  77. LEFT JOIN Branch br on br.CompanyID = c.CompanyID and br.BranchID = c.DefaultBranchID
  78. LEFT join BACCount ba on ba.CompanyID = br.CompanyID and ba.BAccountID = br.BACCountID
  79. ), SecondLayer
  80. as
  81. (
  82. SELECT fl.*,
  83. case when fl.GrossMargin < 0 then 1 else 0 end as BudgetedGMUnderZero,
  84. case when fl.GrossMargin < 8 then 1 else 0 end as BudgetedGMunderEight,
  85. case when fl.GrossMargin < 4.5 then 1 else 0 end as BudgetedGMUnderFourFive,
  86. case when fl.RentalProject = 1 and fl.GrossMargin < 4.5 then 1
  87. when fl.RentalProject = 0 and fl.GrossMargin < 8.0 then 1
  88. else 0 end as BudgetedGMUnderTargetCombined,
  89. case when fl.RevisedIncomeBudgetSum > IsNull(fl.NTE,0) then 1 else 0 end as BudgetedIncomeOverNTE
  90. from FirstLayer fl
  91. )
  92. select sl.*, case when sl.BudgetedIncomeOverNTE + sl.BudgetedGMUnderTargetCombined + sl.BudgetUnderFiveWithNTE + sl.NTEUnderFiveWithBudget + sl.BudgetIncomeAndNTEUnderFive + ExpenseExceedsIncome + ActualExpenseOverBudget + RevisedUnderFive > 0 then 1 else 0 end as ProjectProblemExists
  93. from SecondLayer sl