소스 검색

SQL FIles

Kitt Parker 7 달 전
커밋
a4c682beb0

+ 24 - 0
ActualExpenseExceedsIncome.sql

@@ -0,0 +1,24 @@
+IF OBJECT_ID ('dbo.ActualExpenseExceedsIncome','V') IS NOT NULL DROP VIEW dbo.ActualExpenseExceedsIncome
+GO 
+CREATE VIEW dbo.ActualExpenseExceedsIncome
+AS
+with cte 
+as 
+(
+SELECT c.CompanyID, 
+	   c.ContractID, 
+	   c.ContractCD, 
+	   sum(case when b.[Type] = 'E' then b.CuryActualAmount else 0 end) as ActualExpense,
+	   sum(case when b.[Type] = 'I' then b.CuryActualAmount else 0 end) as ActualIncome
+FROM PMBudget b 
+inner join Contract c on b.CompanyID = c.CompanyID and b.ProjectID = c.ContractID 
+group by c.CompanyID, c.ContractID, c.ContractCD
+)
+SELECT c.CompanyID, 
+	   c.ContractID, 
+	   c.ContractCD, 
+	   c.ActualExpense,
+	   c.ActualIncome,
+	   case when c.ActualExpense > c.ActualIncome then 1 else 0 end as ExpenseExceedsIncome,
+	   case when c.ActualExpense > c.ActualIncome then c.ActualIncome-c.ActualExpense else 0 end as ExpenseExceedsIncomeBy   
+from cte c

+ 30 - 0
ActualRevenue.sql

@@ -0,0 +1,30 @@
+IF OBJECT_ID ('dbo.ActualRevenue','V') IS NOT NULL DROP VIEW dbo.ActualRevenue
+GO 
+CREATE VIEW dbo.ActualRevenue
+AS
+SELECT ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID
+    ) AS RowKey,
+    p.CompanyID, 
+    p.ProjectID, 
+    c.ContractCD,
+    ABS(SUM(CASE 
+            WHEN p.OffsetAccountGroupID = 24 AND p.AccountGroupID = 25 THEN p.Amount * -1
+            WHEN p.OffsetAccountGroupID = 25 AND p.AccountGroupID = 24 THEN p.Amount
+            ELSE p.Amount
+        END)) as [ActulRevenueCompute],
+    SUM(p.Amount) AS [Amount], 
+    SUM(p.TranCuryAmount) AS [TranCuryAmount], 
+    SUM(p.ProjectCuryAmount) AS [ProjectCuryAmount], 
+    SUM(p.ProjectCuryInvoicedAmount) AS [ProjectCuryInvoicedAmount],
+    SUM(p.InvoicedAmount) AS [InvoicedAmount]
+FROM PMTran p 
+join Contract c on c.CompanyID = p.CompanyID and c.ContractID = p.ProjectID 
+WHERE p.AccountGroupID IN (24)
+OR p.OffsetAccountGroupID IN (24)
+GROUP BY 
+    p.CompanyID, 
+    p.ProjectID,
+    c.ContractCD

+ 18 - 0
AllocatedReleasedExpenses.sql

@@ -0,0 +1,18 @@
+IF OBJECT_ID ('dbo.AllocatedReleasedExpenses','V') IS NOT NULL DROP VIEW dbo.AllocatedReleasedExpenses
+GO 
+CREATE VIEW dbo.AllocatedReleasedExpenses
+AS
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID
+    ) AS RowKey,
+ p.CompanyID as CompanyID, p.ProjectID, SUM(p.Amount) as amount
+ from PMTran p 
+ join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+ where pg.IsExpense = 1
+ and p.Released =1
+ and p.Allocated =1
+ group by p.CompanyID,
+          p.ProjectID

+ 91 - 0
BranchManagers.sql

@@ -0,0 +1,91 @@
+IF OBJECT_ID ('dbo.BranchManagers','V') IS NOT NULL DROP VIEW dbo.BranchManagers
+GO 
+CREATE VIEW dbo.BranchManagers
+AS
+WITH ParentChildren AS (
+    -- Anchor member: find the initial record with the description 'Operations Branch Leaders'
+    SELECT 
+        CompanyID, WorkGroupID, Description, ParentWGID, SortOrder, AccessRights, WaitTime, 
+        BypassEscalation, UseCalendarTime, CreatedByID, CreatedByScreenID, CreatedDateTime, 
+        LastModifiedByID, LastModifiedByScreenID, LastModifiedDateTime, 0 AS Level 
+    FROM dbo.EPCompanyTree
+    WHERE Description = 'Operations Branch Leaders'
+
+    UNION ALL 
+
+    -- Recursive member: find children of the current level, limit recursion to levels < 3
+    SELECT 
+        child.CompanyID, child.WorkGroupID, child.Description, child.ParentWGID, child.SortOrder, 
+        child.AccessRights, child.WaitTime, child.BypassEscalation, child.UseCalendarTime, 
+        child.CreatedByID, child.CreatedByScreenID, child.CreatedDateTime, child.LastModifiedByID, 
+        child.LastModifiedByScreenID, child.LastModifiedDateTime, parent.Level + 1 AS Level
+    FROM dbo.EPCompanyTree AS child
+    INNER JOIN ParentChildren AS parent ON child.ParentWGID = parent.WorkGroupID
+    WHERE parent.Level < 2  -- Limit recursion to levels less than 3
+),
+children AS (
+    SELECT * 
+    FROM ParentChildren p
+    WHERE p.Description != 'Operations Branch Leaders'
+      AND p.Level < 3
+),
+-- Replace ISNUMERIC with pattern matching
+FolderIsManager AS (
+    SELECT 
+        c.CompanyID, c.Level, c.Description, c.WorkGroupID, c.ParentWGID, m.ContactID
+    FROM children c
+    INNER JOIN dbo.EPCompanyTreeMember m ON c.CompanyID = m.CompanyID AND c.WorkGroupID = m.WorkGroupID
+    WHERE c.Level = 1 
+      AND c.Description LIKE '%[^0-9]%'  -- Description is not numeric
+      AND m.Active = 1
+),
+FolderManagerBranches AS (
+    SELECT 
+        a.CompanyID, 
+        a.BAccountID AS EmployeeBAccountID,
+        a.AcctCD AS EmployeeCD, 
+        a.AcctName AS EmployeeName, 
+        u.Username, 
+        u.PKID, 
+        b.BranchID AS BranchTableID,
+        b.BranchCD AS BranchTableCD,
+        br.BAccountID AS BAccountTableID,
+        br.AcctCD AS BAccountTableCD
+    FROM FolderIsManager m
+    INNER JOIN dbo.Contact con ON con.CompanyID = m.CompanyID AND con.ContactID = m.ContactID
+    INNER JOIN dbo.Users u ON u.CompanyID = con.CompanyID AND con.UserID = u.PKID 
+    INNER JOIN dbo.BAccount a ON m.CompanyID = a.CompanyID AND m.ContactID = a.DefContactID 
+    INNER JOIN children c ON c.CompanyID = m.CompanyID AND c.ParentWGID = m.WorkGroupID
+    INNER JOIN dbo.Branch b ON b.CompanyID = c.CompanyID AND b.BranchCD = c.Description
+    INNER JOIN dbo.BAccount br ON b.CompanyID = br.CompanyID AND b.BAccountID = br.BAccountID 
+),
+FolderIsNotManager AS (
+    SELECT 
+        c.CompanyID, c.Level, c.Description, c.WorkGroupID, c.ParentWGID
+    FROM children c
+    WHERE c.Level IN (1, 2)
+      AND c.Description NOT LIKE '%[^0-9]%'  -- Description is numeric
+),
+NotFolderManagerBranches AS (
+    SELECT 
+        a.CompanyID, 
+        a.BAccountID AS EmployeeBAccountID,
+        a.AcctCD AS EmployeeCD, 
+        a.AcctName AS EmployeeName, 
+        u.Username, 
+        u.PKID, 
+        b.BranchID AS BranchTableID, 
+        b.BranchCD AS BranchTableCD, 
+        br.BAccountID AS BAccountTableID, 
+        br.AcctCD AS BAccountTableCD
+    FROM FolderIsNotManager f
+    INNER JOIN dbo.EPCompanyTreeMember m ON f.CompanyID = m.CompanyID AND m.WorkGroupID = f.WorkGroupID
+    INNER JOIN dbo.Contact c ON m.CompanyID = c.CompanyID AND m.ContactID = c.ContactID 
+    INNER JOIN dbo.BAccount a ON a.CompanyID = c.CompanyID AND a.DefContactID = c.ContactID 
+    INNER JOIN dbo.Users u ON u.CompanyID = c.CompanyID AND u.PKID = c.UserID 
+    INNER JOIN dbo.Branch b ON b.CompanyID = f.CompanyID AND f.Description = b.BranchCD 
+    INNER JOIN dbo.BAccount br ON b.CompanyID = br.CompanyID AND br.BAccountID = b.BAccountID 
+)
+SELECT * FROM FolderManagerBranches
+UNION
+SELECT * FROM NotFolderManagerBranches

+ 16 - 0
CustomerBusinessDevOwner.sql

@@ -0,0 +1,16 @@
+DROP VIEW IF EXISTS CustomerBusinessDevOwner
+GO 
+Create View CustomerBusinessDevOwner
+as
+SELECT 
+b.CompanyID, 
+ROW_NUMBER() OVER(PARTITION BY c.CompanyID ORDER BY c.CompanyID) AS rc,
+c.BAccountID as CustomerBAccountID,
+e.BAccountID as EmployeeBAccountID , 
+b.AcctCD as CustomerCD,
+e.AcctCD as EmployeeCD, 
+e.AcctName as EmployeeName 
+from Customer c 
+inner join BAccount b on c.CompanyID = b.CompanyID and c.BAccountID = b.BAccountID 
+left JOIN BAccountKvExt bke on b.CompanyID = bke.CompanyID and  b.NoteID = bke.RecordID 
+left join BAccount e on bke.CompanyID =e.CompanyID and bke.ValueString = e.AcctCD

+ 31 - 0
CustomerData.sql

@@ -0,0 +1,31 @@
+IF OBJECT_ID ('dbo.CustomerData','V') IS NOT NULL DROP VIEW dbo.CustomerData
+GO 
+CREATE VIEW dbo.CustomerData
+AS
+SELECT b.CompanyID, 
+	   b.BAccountID as SurrogateBAKey, 
+	   b.AcctCD as CustomerID, 
+	   b.AcctName as CustomerName,
+	   p.AcctCD as ParentAccountID,
+	   bke.ValueString as OwnerID,
+	   count(children.BAccountID) as CountOfChildrenAccounts,
+	   STRING_AGG(children.AcctCD, ', ') AS ChildrenIDList,
+       CAST(CASE 
+           WHEN COUNT(children.BAccountID) > 0 THEN 1 
+           ELSE 0 
+       END AS BIT) AS IsParent,
+       CAST(CASE 
+           WHEN MAX(CASE WHEN b.ParentBAccountID IS NOT NULL THEN 1 ELSE 0 END) = 1 THEN 1 
+           ELSE 0 
+       END AS BIT) AS IsChild
+From BAccount b 
+left JOIN  BAccount p on p.CompanyID = b.CompanyID and p.BAccountID = b.ParentBAccountID
+LEFT join BAccount children on children.CompanyID = b.CompanyID and b.BAccountID = children.ParentBAccountID  and b.[type] = children.[type] 
+LEFT JOIN BAccountKvExt bke ON bke.CompanyID = b.CompanyID AND bke.RecordID = b.NoteID AND bke.FieldName = 'AttributeOWNER'
+where b.[type] = 'CU'
+group by b.CompanyID, 
+	   b.BAccountID, 
+	   b.AcctCD,
+	   b.AcctName,
+	   p.AcctCD,
+	   bke.ValueString

+ 24 - 0
ExpenseExceedsIncome.sql

@@ -0,0 +1,24 @@
+IF OBJECT_ID ('dbo.ExpenseExceedsIncome','V') IS NOT NULL DROP VIEW dbo.ExpenseExceedsIncome
+GO 
+CREATE VIEW dbo.ExpenseExceedsIncome
+AS
+with cte 
+as 
+(
+SELECT c.CompanyID, 
+	   c.ContractID, 
+	   c.ContractCD, 
+	   sum(case when b.[Type] = 'E' then b.CuryRevisedAmount else 0 end) as RevisedExpense,
+	   sum(case when b.[Type] = 'I' then b.CuryRevisedAmount else 0 end) as RevisedIncome
+FROM PMBudget b 
+inner join Contract c on b.CompanyID = c.CompanyID and b.ProjectID = c.ContractID 
+group by c.CompanyID, c.ContractID, c.ContractCD
+)
+SELECT c.CompanyID, 
+	   c.ContractID, 
+	   c.ContractCD, 
+	   c.RevisedExpense,
+	   c.RevisedIncome,
+	   case when c.RevisedExpense > c.RevisedIncome then 1 else 0 end as ExpenseExceedsIncome,
+	   case when c.RevisedExpense > c.RevisedIncome then c.RevisedIncome-c.RevisedExpense else 0 end as ExpenseExceedsIncomeBy   
+from cte c

+ 42 - 0
FirstCompleteTask.sql

@@ -0,0 +1,42 @@
+IF OBJECT_ID ('dbo.FirstCompleteTask','V') IS NOT NULL DROP VIEW dbo.FirstCompleteTask
+GO 
+CREATE VIEW dbo.FirstCompleteTask
+AS
+WITH RankedActivities AS (
+    SELECT 
+        CR.CompanyID,
+        PM.ProjectID,
+        CR.NoteID,
+        PM.RefNoteID,
+        CR.[Type],
+        CR.UIStatus,
+        PM.ApprovalStatus,
+        CR.CompletedDate,
+        CR.Subject,
+        CR.Body,
+        ROW_NUMBER() OVER (PARTITION BY CR.CompanyID,PM.ProjectID ORDER BY CR.CompletedDate) AS rn
+    FROM 
+        dbo.CRActivity CR
+    JOIN 
+        dbo.PMTimeActivity PM 
+    ON 
+        CR.NoteID = PM.RefNoteID 
+        AND CR.CompanyID = PM.CompanyID
+        and CR.CompletedDate is not NULL 
+        and CR.[Type] = 'COMP'
+)
+SELECT 
+    CompanyID,
+    ProjectID,
+    NoteID,
+    RefNoteID,
+    [Type],
+    UIStatus,
+    ApprovalStatus,
+    CompletedDate,
+    Subject,
+    Body
+FROM 
+    RankedActivities
+WHERE 
+    rn = 1

+ 113 - 0
GLTranRevenueSums.sql

@@ -0,0 +1,113 @@
+IF OBJECT_ID ('dbo.GLTranRevenueSumsWithPeriod','V') IS NOT NULL DROP VIEW dbo.GLTranRevenueSumsWithPeriod
+GO 
+CREATE VIEW dbo.GLTranRevenueSumsWithPeriod
+AS
+SELECT t.CompanyID, 
+       t.ProjectID, 
+       c.ContractCD, 
+	   c.NoteID,
+       cust.BAccountID as CustomerID,
+       cust.AcctCD as CustomerCD,
+       cust.AcctName as CustomerName,
+       br.BranchID as BranchKey,
+		br.BranchCD as BranchCD,
+		ba.AcctName as BranchName,
+		dbo.GetTopContractUserDefinedFieldDescription(t.CompanyID, c.NoteID, 'AttributeCategory') as JobCategory,
+		dbo.GetTopContractUserDefinedFieldDescription(t.CompanyID, c.NoteID, 'AttributejobStatus') as JobStatus,
+		dbo.GetTopContractUserDefinedFieldDescription(t.CompanyID, c.NoteID, 'AttributeProjectGRP') as ProjectGroup,
+		dbo.GetContractUserDefinedField(t.CompanyID, c.NoteID, 'AttributeESTCompl', 0)  as EstimatedComplete,
+		dbo.GetContractUserDefinedField(t.CompanyID, c.NoteID, 'AttributePO', 0)  as CustomerPO,
+		dbo.GetRevisedBudgetAmount(t.CompanyID,t.ProjectID,'I') as RevisedBudgetedincome,
+		dbo.GetRevisedBudgetAmount(t.CompanyID,t.ProjectID,'E') as RevisedBudgetedExpense,
+		dbo.GetTransactions(t.CompanyID, t.ProjectID, 1, 1,0) as TotalExpenses,
+		c.status as ProjectStatus,
+		c.CreatedDateTime as ProjectCreatedDateTime,
+		c.LastModifiedDateTime as ProjectLastModifiedDateTime,
+		bAExec.AcctCD as ExecutiveNumber,
+        bAExec.AcctName as ExecutiveName,
+        execEmp.userID as ExecutivePKID,
+        lmu.PKID as LastModifiedByKey,
+        lmu.Username as LastModifiedUserName,
+        lmu.FullName as LastModifiedName,
+       t.FinPeriodID,
+       SUM(CASE 
+               WHEN a.AccountCD = '4001' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS BilledRevenue4001,  -- "Billed Revenue - 4001"
+       SUM(CASE 
+               WHEN a.AccountCD = '4002' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS TMUnbilledRevenue4002,  -- "T&M Unbilled Revenue - 4002"
+       SUM(CASE 
+               WHEN a.AccountCD = '4000' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS LumpSumWIPRevenue4000,  -- "Lump Sum WIP Revenue - 4000"
+       SUM(CASE 
+               WHEN a.AccountCD = '4003' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS BillingsLumpSum4003,  -- "Billings Lump Sum - 4003"
+       SUM(CASE 
+               WHEN TRY_CAST(a.AccountCD AS INT) BETWEEN 5000 AND 5999 THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0)
+               ELSE 0 
+           END) AS TotalExpensesCOGS,  -- "Total Expenses - COGS" 
+       SUM(CASE WHEN a.AccountCD = '4007' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0) ELSE 0 END) AS ClientDiscounts4007,
+       SUM(CASE WHEN a.AccountCD = '4500' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0) ELSE 0 END) AS OtherIncome4500,		   
+       SUM(CASE WHEN a.AccountCD = '4502' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0) ELSE 0 END) AS Refunds4502,		
+       SUM(CASE WHEN a.AccountCD = '5000' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCLabor5000,
+       SUM(CASE WHEN a.AccountCD = '5001' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCLaborBurden5001,
+       SUM(CASE WHEN a.AccountCD = '5010' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCSubcontractor5010,
+       SUM(CASE WHEN a.AccountCD = '5020' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCMaterials5020,
+       SUM(CASE WHEN a.AccountCD = '5030' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCEquipmentInternal5030,
+       SUM(CASE WHEN a.AccountCD = '5040' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCEquipmentExternal5040,
+       SUM(CASE WHEN a.AccountCD = '5041' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCConsultant5041,
+       SUM(CASE WHEN a.AccountCD = '5050' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCTravel5050,
+       SUM(CASE WHEN a.AccountCD = '5055' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCOther5055,
+       SUM(CASE WHEN a.AccountCD = '5056' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS JCNonAllocating5056,
+       SUM(CASE WHEN a.AccountCD = '5099' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS WIPCOGS5099,
+       SUM(CASE WHEN a.AccountCD = '5100' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS ShopSuppliesIndirect5100,
+       SUM(CASE WHEN a.AccountCD = '5101' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS ShopExpensesSmallTools5101,
+       SUM(CASE WHEN a.AccountCD = '5102' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS ShopExpenseUniforms5102,
+       SUM(CASE WHEN a.AccountCD = '5103' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS ShopIndirectLabor5103,
+       SUM(CASE WHEN a.AccountCD = '5104' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS DirectLabor5104,
+       SUM(CASE WHEN a.AccountCD = '5105' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS IndirectQuotingCosts5105,
+       SUM(CASE WHEN a.AccountCD = '5108' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS PassThroughCost5108,
+       SUM(CASE WHEN a.AccountCD = '5109' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS PurchasePriceVariance5109,
+       SUM(CASE WHEN a.AccountCD = '5110' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS WarrantyWork5110,
+       SUM(CASE WHEN a.AccountCD = '5111' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS EstSubcontractorCosts5111,
+       SUM(CASE WHEN a.AccountCD = '5115' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS CatTravelExpenses5115,
+       SUM(CASE WHEN a.AccountCD = '5201' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS DiscountsGiven5201,
+       SUM(CASE WHEN a.AccountCD = '5202' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS DiscountsTaken5202,
+       SUM(CASE WHEN a.AccountCD = '5210' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS ClientBillingExpense5210,
+       SUM(CASE WHEN a.AccountCD = '5300' THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0) ELSE 0 END) AS BadDebt5300
+FROM  GLTran t
+left JOIN  Contract c ON t.CompanyID = c.CompanyID  AND t.ProjectID = c.ContractID
+left JOIN  Account a  ON t.CompanyID = a.CompanyID AND t.AccountID = a.AccountID
+LEFT join BAccount cust on cust.CompanyID = c.CompanyID and cust.BAccountID = c.CustomerID
+LEFT JOIN Branch br on br.CompanyID = c.CompanyID and br.BranchID = c.DefaultBranchID
+LEFT join BACCount ba on ba.CompanyID = br.CompanyID and ba.BAccountID = br.BACCountID
+left JOIN ContractKvExt execNote on execNote.CompanyID = c.CompanyID and execNote.RecordID =c.NoteID and execNote.FieldName = 'AttributePROJECTEXE'
+left join BAccount bAExec on BAExec.CompanyID = execNote.CompanyID and BAExec.AcctCD = execNote.ValueString
+left join EPEmployee execEmp on BAExec.CompanyID = execEmp.CompanyID and BAExec.BAccountID = execEmp.BAccountID
+left join Users lmu on lmu.CompanyID = c.CompanyID and lmu.PKID = c.LastModifiedByID
+WHERE (a.AccountCD IN ('4001', '4002', '4000', '4003', '4007', '4500', '4502') 
+       OR TRY_CAST(a.AccountCD AS INT) BETWEEN 5000 AND 5999)
+GROUP BY t.CompanyID,
+		 t.ProjectID, 
+		 c.ContractCD, 
+		 c.CreatedDateTime, 
+		 c.LastModifiedDateTime,
+		 c.NoteID, 
+		 c.status, 
+		 t.FinPeriodID,
+		 cust.BAccountID,
+		 cust.AcctCD, 
+		 cust.AcctName, 
+		 br.BranchID, 
+		 br.BranchCD, 
+		 ba.AcctName,
+		 bAExec.AcctCD,
+         bAExec.AcctName,
+         execEmp.userID,
+         lmu.PKID,
+         lmu.Username,
+         lmu.FullName

+ 84 - 0
GLTranRevenueSumsWithPeriod.sql

@@ -0,0 +1,84 @@
+IF OBJECT_ID ('dbo.GLTranRevenueSumsWithPeriod','V') IS NOT NULL DROP VIEW dbo.GLTranRevenueSumsWithPeriod
+GO 
+CREATE VIEW dbo.GLTranRevenueSumsWithPeriod
+AS
+SELECT t.CompanyID, 
+       t.ProjectID, 
+       c.ContractCD, 
+	   c.NoteID,
+       cust.BAccountID as CustomerID,
+       cust.AcctCD as CustomerCD,
+       cust.AcctName as CustomerName,
+       br.BranchID as BranchKey,
+		br.BranchCD as BranchCD,
+		ba.AcctName as BranchName,
+		dbo.GetTopContractUserDefinedFieldDescription(t.CompanyID, c.NoteID, 'AttributeCategory') as JobCategory,
+		dbo.GetTopContractUserDefinedFieldDescription(t.CompanyID, c.NoteID, 'AttributejobStatus') as JobStatus,
+		dbo.GetTopContractUserDefinedFieldDescription(t.CompanyID, c.NoteID, 'AttributeProjectGRP') as ProjectGroup,
+		dbo.GetContractUserDefinedField(t.CompanyID, c.NoteID, 'AttributeESTCompl', 0)  as EstimatedComplete,
+		dbo.GetContractUserDefinedField(t.CompanyID, c.NoteID, 'AttributePO', 0)  as CustomerPO,
+		dbo.GetRevisedBudgetAmount(t.CompanyID,t.ProjectID,'I') as RevisedBudgetedincome,
+		dbo.GetRevisedBudgetAmount(t.CompanyID,t.ProjectID,'E') as RevisedBudgetedExpense,
+		dbo.GetTransactions(t.CompanyID, t.ProjectID, 1, 1,0) as TotalExpenses,
+		c.status as ProjectStatus,
+		c.CreatedDateTime as ProjectCreatedDateTime,
+		c.LastModifiedDateTime as ProjectLastModifiedDateTime,
+		bAExec.AcctCD as ExecutiveNumber,
+        bAExec.AcctName as ExecutiveName,
+        execEmp.userID as ExecutivePKID,
+        lmu.PKID as LastModifiedByKey,
+        lmu.Username as LastModifiedUserName,
+        lmu.FullName as LastModifiedName,
+       t.FinPeriodID,
+       SUM(CASE 
+               WHEN a.AccountCD = '4001' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS BilledRevenue4001,  -- "Billed Revenue - 4001"
+       SUM(CASE 
+               WHEN a.AccountCD = '4002' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS TMUnbilledRevenue4002,  -- "T&M Unbilled Revenue - 4002"
+       SUM(CASE 
+               WHEN a.AccountCD = '4000' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS LumpSumWIPRevenue4000,  -- "Lump Sum WIP Revenue - 4000"
+       SUM(CASE 
+               WHEN a.AccountCD = '4003' THEN COALESCE(t.CreditAmt, 0) - COALESCE(t.DebitAmt, 0)
+               ELSE 0 
+           END) AS BillingsLumpSum4003,  -- "Billings Lump Sum - 4003"
+       SUM(CASE 
+               WHEN TRY_CAST(a.AccountCD AS INT) BETWEEN 5000 AND 5999 THEN COALESCE(t.DebitAmt, 0) - COALESCE(t.CreditAmt, 0)
+               ELSE 0 
+           END) AS TotalExpensesCOGS  -- "Total Expenses - COGS"  
+FROM  GLTran t
+left JOIN  Contract c ON t.CompanyID = c.CompanyID  AND t.ProjectID = c.ContractID
+left JOIN  Account a  ON t.CompanyID = a.CompanyID AND t.AccountID = a.AccountID
+LEFT join BAccount cust on cust.CompanyID = c.CompanyID and cust.BAccountID = c.CustomerID
+LEFT JOIN Branch br on br.CompanyID = c.CompanyID and br.BranchID = c.DefaultBranchID
+LEFT join BACCount ba on ba.CompanyID = br.CompanyID and ba.BAccountID = br.BACCountID
+left JOIN ContractKvExt execNote on execNote.CompanyID = c.CompanyID and execNote.RecordID =c.NoteID and execNote.FieldName = 'AttributePROJECTEXE'
+left join BAccount bAExec on BAExec.CompanyID = execNote.CompanyID and BAExec.AcctCD = execNote.ValueString
+left join EPEmployee execEmp on BAExec.CompanyID = execEmp.CompanyID and BAExec.BAccountID = execEmp.BAccountID
+left join Users lmu on lmu.CompanyID = c.CompanyID and lmu.PKID = c.LastModifiedByID
+WHERE (a.AccountCD IN ('4001', '4002', '4000', '4003') 
+       OR TRY_CAST(a.AccountCD AS INT) BETWEEN 5000 AND 5999)
+GROUP BY t.CompanyID,
+		 t.ProjectID, 
+		 c.ContractCD, 
+		 c.CreatedDateTime, 
+		 c.LastModifiedDateTime,
+		 c.NoteID, 
+		 c.status, 
+		 t.FinPeriodID,
+		 cust.BAccountID,
+		 cust.AcctCD, 
+		 cust.AcctName, 
+		 br.BranchID, 
+		 br.BranchCD, 
+		 ba.AcctName,
+		 bAExec.AcctCD,
+         bAExec.AcctName,
+         execEmp.userID,
+         lmu.PKID,
+         lmu.Username,
+         lmu.FullName

+ 20 - 0
IndexInformation.sql

@@ -0,0 +1,20 @@
+IF OBJECT_ID ('dbo.IndexInformation','V') IS NOT NULL DROP VIEW dbo.IndexInformation
+GO 
+CREATE VIEW dbo.IndexInformation
+AS
+SELECT 
+    t.name AS TableName,
+    i.name AS IndexName,
+    i.type_desc AS IndexType,
+    c.name AS ColumnName,
+    ic.is_included_column AS IsIncludedColumn
+FROM 
+    sys.indexes i
+INNER JOIN 
+    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
+INNER JOIN 
+    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
+INNER JOIN 
+    sys.tables t ON i.object_id = t.object_id
+WHERE 
+    i.is_primary_key = 0  -- Exclude primary keys if you only want non-PK indexes

+ 11 - 0
InvoiceCreatedBy.sql

@@ -0,0 +1,11 @@
+DROP VIEW IF EXISTS InvoiceCreatedBy
+GO 
+Create View InvoiceCreatedBy
+as
+SELECT a.CompanyID, a.DocType, a.RefNbr, r.FieldName, b.BAccountID as EmployeeBAccountID, b.AcctCD as EmployeeAcctCD, c.ContactID as EmployeeContactID, c.UserID as EmployeeUserID,u.Username as EmployeeUserName
+from ARRegister a 
+inner join ARRegisterKvExt r on a.CompanyID = r.CompanyID and a.NoteID = r.RecordID 
+inner join BAccount b on b.CompanyID = r.CompanyID  and b.AcctCD = r.ValueString
+inner join Contact c on b.CompanyID = c.CompanyID and b.DefContactID = c.ContactID 
+INNER join Users u on u.CompanyID = c.CompanyID and c.UserID = u.PKID 
+where a.DocType = 'INV'

+ 40 - 0
JobStatus.sql

@@ -0,0 +1,40 @@
+DROP VIEW IF EXISTS JobStatus
+GO
+Create View JobStatus
+as
+WITH LatestChanges AS (
+    SELECT
+        a.CompanyID,
+        SUBSTRING(a.CombinedKey, 3, LEN(a.CombinedKey) - 2) AS ContractCD,
+        a.ChangeDate,
+        a.ModifiedFields,
+        ROW_NUMBER() OVER (
+            PARTITION BY 
+                a.CompanyID, 
+                SUBSTRING(a.CombinedKey, 3, LEN(a.CombinedKey) - 2)
+            ORDER BY 
+                a.ChangeDate DESC
+        ) AS RowNum
+    FROM
+        AuditHistory a
+    WHERE
+        a.TableName = 'Contract'
+        AND a.ModifiedFields LIKE 'AttributeJOBSTATUS%'
+)
+SELECT
+    CompanyID,
+    ContractCD,
+    ChangeDate AS MostRecentChangeDate,
+    'AttributeJOBSTATUS' AS FieldName,
+    LTRIM(
+        CASE
+            WHEN ModifiedFields LIKE 'AttributeJOBSTATUS %' THEN
+                STUFF(ModifiedFields, 1, LEN('AttributeJOBSTATUS') + 1, '')
+            ELSE
+                STUFF(ModifiedFields, 1, LEN('AttributeJOBSTATUS'), '')
+        END
+    ) AS FieldValue
+FROM
+    LatestChanges
+WHERE
+    RowNum = 1;

+ 47 - 0
LO23QtyMatchRateTable.sql

@@ -0,0 +1,47 @@
+IF OBJECT_ID ('dbo.LO23QtyMatchRateTable','V') IS NOT NULL DROP VIEW dbo.LO23QtyMatchRateTable
+GO 
+CREATE VIEW dbo.LO23QtyMatchRateTable
+AS
+WITH RateTable AS (
+    SELECT 1 AS ref, 0 AS MinAmt, 1000 AS MaxAmt, 1.0 AS ExpectedQty, 90 AS Rate UNION ALL
+    SELECT 2, 1001, 2500, 1.5, 90 UNION ALL
+    SELECT 3, 2501, 5000, 4.5, 90 UNION ALL
+    SELECT 4, 5001, 7500, 4.5, 90 UNION ALL
+    SELECT 5, 7501, 10000, 7.5, 90 UNION ALL
+    SELECT 6, 10001, 25000, 9.0, 90 UNION ALL
+    SELECT 7, 25001, 50000, 10.5, 90 UNION ALL
+    SELECT 8, 50001, 99999999999, 10.5, 90
+),
+ProjectSums AS (
+    SELECT 
+        b.CompanyID,
+        b.ProjectID,
+         SUM(case when b.[type] = 'I' then  b.CuryRevisedAmount else 0 end) AS TotalCuryRevisedAmount,
+        SUM(CASE WHEN i.InventoryCD = 'L023' THEN b.Qty ELSE 0 END) AS L023Qty
+    FROM PMBudget b
+    LEFT JOIN InventoryItem i 
+        ON b.CompanyID = i.CompanyID AND b.InventoryID = i.InventoryID
+    GROUP BY b.CompanyID, b.ProjectID
+),
+Matched AS (
+    SELECT 
+        ps.CompanyID,
+        ps.ProjectID,
+        ps.TotalCuryRevisedAmount,
+        ps.L023Qty,
+        rt.ExpectedQty
+    FROM ProjectSums ps
+    JOIN RateTable rt
+        ON ps.TotalCuryRevisedAmount BETWEEN rt.MinAmt AND rt.MaxAmt
+)
+SELECT 
+    CompanyID,
+    ProjectID,
+    TotalCuryRevisedAmount,
+    L023Qty,
+    ExpectedQty,
+    CASE 
+        WHEN L023Qty = ExpectedQty THEN 0
+        ELSE 1
+    END AS MismatchFlag
+FROM Matched

+ 79 - 0
ManagerTransactionNeeded.sql

@@ -0,0 +1,79 @@
+IF OBJECT_ID ('dbo.ManagerTransactionNeeded','V') IS NOT NULL DROP VIEW dbo.ManagerTransactionNeeded
+GO 
+CREATE VIEW dbo.ManagerTransactionNeeded
+AS
+/* ───────── existing CTEs (unchanged) ───────── */
+WITH CurrentCodeAmounts AS (
+SELECT  t.CompanyID,
+            t.ProjectID,
+            SUM(t.BillableQty) AS BillableQty
+    FROM    PMTran t
+    JOIN    InventoryItem i
+           ON i.CompanyID = t.CompanyID
+          AND i.InventoryID = t.InventoryID
+    WHERE   i.InventoryCD = 'L023'
+    GROUP BY t.CompanyID, t.ProjectID     
+),
+RateTable AS (           -- one row per $‑range
+    SELECT 1 AS ref,     0  AS MinAmt,     1000 AS MaxAmt,  1.0 AS Qty, 90 AS Rate UNION ALL
+    SELECT 2,         1001,     2500,  1.5, 90 UNION ALL
+    SELECT 3,         2501,     5000,  4.5, 90 UNION ALL
+    SELECT 4,         5001,     7500,  4.5, 90 UNION ALL
+    SELECT 5,         7501,    10000,  7.5, 90 UNION ALL
+    SELECT 6,        10001,    25000,  9.0, 90 UNION ALL
+    SELECT 7,        25001,    50000, 10.5, 90 UNION ALL
+    SELECT 8,        50001, 99999999999, 10.5, 90
+),
+CurrentRevisedAmounts AS (
+    SELECT  b.CompanyID,
+            b.ProjectID,
+            SUM(b.CuryRevisedAmount) AS RevisedAmount
+    FROM    PMBudget b
+    join PMAccountGroup a on b.companyid = a.CompanyID and b.AccountGroupID = a.GroupID
+    where a.GroupCD = 'REVENUE'
+    GROUP BY b.CompanyID, b.ProjectID
+),
+/* ───────── new CTEs ───────── */
+TargetQty AS (
+    SELECT  cra.CompanyID,
+            cra.ProjectID,
+            cra.RevisedAmount,
+            rt.MinAmt,
+            rt.MaxAmt,
+            rt.Qty         AS TargetQty,
+            rt.Rate
+    FROM    CurrentRevisedAmounts cra
+    JOIN    RateTable rt
+         ON cra.RevisedAmount BETWEEN rt.MinAmt AND rt.MaxAmt
+),
+QtyAdjustment AS (
+    SELECT  tq.CompanyID,
+            tq.ProjectID,
+            tq.RevisedAmount,
+            tq.MinAmt,
+            tq.MaxAmt,
+            COALESCE(ca.BillableQty,0) AS CurrentBillableQty,
+            tq.TargetQty,
+            tq.Rate,
+            CAST(tq.TargetQty - COALESCE(ca.BillableQty,0) AS DECIMAL(18,2)) AS DeltaQty
+    FROM    TargetQty tq
+    LEFT JOIN CurrentCodeAmounts ca
+           ON ca.CompanyID = tq.CompanyID
+          AND ca.ProjectID = tq.ProjectID
+)
+/* ───────── final output ───────── */
+SELECT  c.CompanyID,
+        c.ContractID,
+        c.ContractCD,
+        qa.RevisedAmount                             AS RevisedAmount,      -- total revised amount
+        qa.MinAmt, qa.MaxAmt,                        -- bracket limits
+        qa.CurrentBillableQty,
+        qa.CurrentBillableQty * qa.Rate              AS CurrentValue,  -- $ at rate
+        qa.TargetQty,
+        qa.TargetQty        * qa.Rate                AS TargetValue,
+        qa.DeltaQty,
+        qa.DeltaQty         * qa.Rate                AS DeltaValue     -- what to add/credit
+FROM    QtyAdjustment qa
+JOIN    Contract c
+      ON c.CompanyID  = qa.CompanyID
+     AND c.ContractID = qa.ProjectID

+ 50 - 0
NonWProjectBranchTracking.sql

@@ -0,0 +1,50 @@
+DROP VIEW IF EXISTS NonWProjectBranchTracking
+GO 
+Create View NonWProjectBranchTracking
+as
+    SELECT 
+        ta.CompanyID, 
+        ta.WeekID,
+        branch.AcctCD AS BranchCD, 
+        branch.AcctName AS BranchName,
+        SUM(ta.TimeSpent) AS TotalTimeSpent, 
+        SUM(CASE 
+              WHEN SUBSTRING(c.ContractCD, 1, 1) = 'W' 
+              THEN ta.TimeSpent 
+              ELSE 0 
+           END) as WProjectTimeSpent,
+        SUM(CASE 
+              WHEN SUBSTRING(c.ContractCD, 1, 1) != 'W' 
+              THEN ta.TimeSpent 
+              ELSE 0 
+           END) as NonWProjectTimeSpent,
+               CASE 
+        WHEN SUM(ta.TimeSpent) = 0 THEN NULL
+        ELSE CAST(SUM(CASE 
+                          WHEN SUBSTRING(c.ContractCD, 1, 1) != 'W' 
+                          THEN ta.TimeSpent 
+                          ELSE 0 
+                      END) AS DECIMAL(18, 4)) 
+             / CAST(SUM(ta.TimeSpent) AS DECIMAL(18, 4))
+    END AS NonWProjectPercent
+    FROM PMTimeActivity ta
+    join Contract c 
+    	on ta.CompanyID = c.CompanyID and ta.ProjectID = c.ContractID
+    JOIN EPTimeCard tc 
+        ON ta.CompanyID = tc.CompanyID AND ta.TimeCardCD = tc.TimeCardCD and tc.WeekID = ta.WeekID
+    JOIN EPEmployee e 
+        ON tc.CompanyID = e.CompanyID AND tc.EmployeeID = e.BAccountID
+    Join InventoryItem i
+        on e.CompanyID = i.CompanyID and e.LabourItemID = i.inventoryID
+    JOIN BAccount b 
+        ON e.CompanyID = b.CompanyID AND e.BAccountID = b.BAccountID
+    JOIN BAccount branch 
+        ON b.CompanyID = branch.CompanyID AND branch.BAccountID = b.ParentBAccountID
+    where i.InventoryCD in ('L109', 'L020', 'L101', 'L113', 'L117', 'L121', 'L123', 'L124', 'TECH', 'L021')
+    and ta.EarningTypeID not in ('HOL', 'PTO')
+    and ta.IsCorrected = 0
+    GROUP BY 
+        ta.CompanyID,
+         ta.WeekID,
+        branch.AcctCD,
+        branch.AcctName

+ 91 - 0
OTBranchTracking.sql

@@ -0,0 +1,91 @@
+DROP VIEW IF EXISTS OTBranchTracking
+GO 
+Create View OTBranchTracking
+as
+WITH AggregatedTime AS (
+    SELECT 
+        ta.CompanyID, 
+        ta.OwnerID,
+        ta.WeekID,
+        b.BAccountID AS EmployeeBAccount, 
+        b.AcctCD AS EmployeeCD, 
+        branch.AcctCD AS BranchCD, 
+        branch.AcctName AS BranchName,
+        SUM(ta.TimeSpent) AS TotalTimeSpent
+    FROM PMTimeActivity ta
+    JOIN EPTimeCard tc 
+        ON ta.CompanyID = tc.CompanyID AND ta.TimeCardCD = tc.TimeCardCD and tc.WeekID = ta.WeekID
+    JOIN EPEmployee e 
+        ON tc.CompanyID = e.CompanyID AND tc.EmployeeID = e.BAccountID
+    Join InventoryItem i
+        on e.CompanyID = i.CompanyID and e.LabourItemID = i.inventoryID
+    JOIN BAccount b 
+        ON e.CompanyID = b.CompanyID AND e.BAccountID = b.BAccountID
+    JOIN BAccount branch 
+        ON b.CompanyID = branch.CompanyID AND branch.BAccountID = b.ParentBAccountID
+    where i.InventoryCD in ('L109', 'L020', 'L101', 'L113', 'L117', 'L121', 'L123', 'L124', 'TECH', 'L021')
+     and ta.EarningTypeID not in ('HOL', 'PTO')
+    and ta.IsCorrected = 0
+    GROUP BY 
+        ta.CompanyID,
+        ta.OwnerID,
+        ta.WeekID,
+        b.BAccountID,
+        b.AcctCD,
+        branch.AcctCD,
+        branch.AcctName
+),
+EmployeeTime AS (
+    SELECT 
+        at.CompanyID,
+        at.OwnerID,
+        at.EmployeeBAccount,
+        at.EmployeeCD,
+        at.BranchCD,
+        at.BranchName,
+        at.WeekID,
+        at.TotalTimeSpent,
+        CASE 
+            WHEN at.TotalTimeSpent > 2400 THEN at.TotalTimeSpent - 2400 
+            ELSE 0 
+        END AS OverTimeInMinutes,
+        CASE 
+            WHEN at.TotalTimeSpent > 2400 THEN 2400 
+            ELSE at.TotalTimeSpent 
+        END AS RegularTimeInMinutes
+    FROM AggregatedTime at
+),
+BranchTime AS (
+    SELECT 
+        et.CompanyID, 
+        et.BranchCD, 
+        et.WeekID,
+        SUM(et.TotalTimeSpent) AS TotalTimeSpent,
+        SUM(et.OverTimeInMinutes) AS OverTimeInMinutes,
+        SUM(et.RegularTimeInMinutes) AS RegularTimeInMinutes,
+        CASE 
+            WHEN SUM(et.TotalTimeSpent) = 0 THEN NULL
+            ELSE ROUND(
+                CAST(SUM(et.OverTimeInMinutes) AS DECIMAL(10,2)) * 100.0 / 
+                CAST(SUM(et.TotalTimeSpent) AS DECIMAL(10,2)), 2
+            ) END AS OvertimePercent,
+			CASE 
+            WHEN SUM(et.TotalTimeSpent) = 0 THEN NULL
+            ELSE ROUND(
+                CAST(SUM(et.OverTimeInMinutes) AS DECIMAL(10,4)) / 
+                CAST(SUM(et.TotalTimeSpent) AS DECIMAL(10,4)), 4
+            )
+        END AS OvertimeRatio   
+    FROM EmployeeTime et
+    GROUP BY et.CompanyID, et.BranchCD, et.WeekID
+)
+SELECT 
+    CompanyID,
+    BranchCD,
+    WeekID,
+    TotalTimeSpent,
+    RegularTimeInMinutes,
+    OverTimeInMinutes,
+    OvertimePercent,
+	OvertimeRatio
+FROM BranchTime;

+ 31 - 0
PMBudgetTotals.sql

@@ -0,0 +1,31 @@
+DROP VIEW IF EXISTS PMBudgetTotals
+GO 
+Create View PMBudgetTotals
+as
+SELECT p.CompanyID, p.ProjectID, 
+	   sum(case when p.[TYPE] = 'E' then p.CuryAmount else 0 end) as OriginalExpenseBudgetSum,
+	   sum(case when p.[TYPE] = 'E' then p.CuryRevisedAmount else 0 end) as RevisedExpenseBudgetSum,
+	   sum(case when p.[TYPE] = 'E' then p.CuryCommittedOrigAmount else 0 end) as OriginalExpenseCommittedSum,
+	   sum(case when p.[TYPE] = 'E' then p.CuryCommittedAmount  else 0 end) as RevisedExpenseCommittedSum, 
+	   sum(case when p.[TYPE] = 'E' then p.CuryCommittedInvoicedAmount   else 0 end) as CommittedExpenseInvoicedAmountSum,
+	   sum(case when p.[TYPE] = 'E' then p.CuryActualAmount   else 0 end) as ActualExpenseAmount,
+	   sum(case when p.[TYPE] = 'I' then p.CuryAmount else 0 end) as OriginalIncomeBudgetSum,
+	   sum(case when p.[TYPE] = 'I' then p.CuryRevisedAmount else 0 end) as RevisedIncomeBudgetSum,
+	   sum(case when p.[TYPE] = 'I' then p.CuryCommittedOrigAmount else 0 end) as OriginalIncomeCommittedSum,
+	   sum(case when p.[TYPE] = 'I' then p.CuryCommittedAmount  else 0 end) as RevisedIncomeCommittedSum, 
+	   sum(case when p.[TYPE] = 'I' then p.CuryCommittedInvoicedAmount   else 0 end) as CommittedIncomeInvoicedAmountSum,
+	   sum(case when p.[TYPE] = 'I' then p.CuryActualAmount   else 0 end) as ActualIncomeAmount,
+	   sum(case when p.[TYPE] = 'L' then p.CuryAmount else 0 end) as OriginalLiabilityBudgetSum,
+	   sum(case when p.[TYPE] = 'L' then p.CuryRevisedAmount else 0 end) as RevisedLiabilityBudgetSum,
+	   sum(case when p.[TYPE] = 'L' then p.CuryCommittedOrigAmount else 0 end) as OriginalLiabilityCommittedSum,
+	   sum(case when p.[TYPE] = 'L' then p.CuryCommittedAmount  else 0 end) as RevisedLiabilityCommittedSum, 
+	   sum(case when p.[TYPE] = 'L' then p.CuryCommittedInvoicedAmount   else 0 end) as CommittedLiabilityInvoicedAmountSum,
+	   sum(case when p.[TYPE] = 'L' then p.CuryActualAmount   else 0 end) as ActualLiabilityAmount,
+	   sum(case when p.[TYPE] = 'A' then p.CuryAmount else 0 end) as OriginalAssetBudgetSum,
+	   sum(case when p.[TYPE] = 'A' then p.CuryRevisedAmount else 0 end) as RevisedAssetBudgetSum,
+	   sum(case when p.[TYPE] = 'A' then p.CuryCommittedOrigAmount else 0 end) as OriginalAssetCommittedSum,
+	   sum(case when p.[TYPE] = 'A' then p.CuryCommittedAmount  else 0 end) as RevisedAssetCommittedSum, 
+	   sum(case when p.[TYPE] = 'A' then p.CuryCommittedInvoicedAmount   else 0 end) as CommittedAssetInvoicedAmountSum,
+	   sum(case when p.[TYPE] = 'A' then p.CuryActualAmount   else 0 end) as ActualAssetAmount
+from PMBudget p 
+group by p.CompanyID, p.ProjectID

+ 12 - 0
PMBudgetTotalsByGroup.sql

@@ -0,0 +1,12 @@
+DROP VIEW IF EXISTS PMBudgetTotalsByGroup
+GO 
+Create View PMBudgetTotalsByGroup
+as
+SELECT b.CompanyID, b.ProjectID, b.[Type], a.GroupID,a.GroupCD, sum(b.CuryAmount) as CuryAmount, 
+sum(b.CuryRevisedAmount) as CuryRevisedAmount, 
+sum(b.CuryCommittedAmount) as CuryCommittedAmount, 
+sum(b.CuryCommittedInvoicedAmount) as CuryCommittedInvoicedAmount,
+sum(b.CuryActualAmount) as CuryAtualAmount
+from PMBudget b 
+join PMAccountGroup a on b.CompanyID = a.CompanyID and b.AccountGroupID = a.GroupID 
+group by b.CompanyID, b.ProjectID, b.[Type], a.GroupID,a.GroupCD

+ 24 - 0
POOrderDefinition.sql

@@ -0,0 +1,24 @@
+IF OBJECT_ID ('dbo.POOrderDefinition','V') IS NOT NULL DROP VIEW dbo.POOrderDefinition
+GO 
+CREATE VIEW dbo.POOrderDefinition
+AS
+SELECT 
+	c.column_id as ColumnID,
+    c.name as ColumnName,
+    t.name as DataType,
+    c.max_length AS MaxLength,
+    c.precision AS PrecisionValue,
+    c.scale AS ScaleValue,
+    CASE WHEN c.is_nullable = 1 THEN 'YES' ELSE 'NO' END as IsNullable,
+    CASE WHEN ic.is_identity = 1 THEN 'YES' ELSE 'NO' END as IsIdentity, 
+    dc.definition as ColumnDefault
+FROM 
+    sys.columns c
+JOIN 
+    sys.types t ON c.user_type_id = t.user_type_id
+LEFT JOIN 
+    sys.identity_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id
+LEFT JOIN 
+    sys.default_constraints dc ON c.default_object_id = dc.object_id
+WHERE 
+    c.object_id = OBJECT_ID('POOrder')

+ 52 - 0
ProjectDataAccuracy.sql

@@ -0,0 +1,52 @@
+DROP VIEW IF EXISTS ProjectDataAccuracy
+GO
+Create View ProjectDataAccuracy
+as
+with FirstLayer  
+as 
+(
+SELECT  c.CompanyID, 
+		c.ContractID, 
+                c.ContractCD,
+               dbo.ProjectRental(c.CompanyID, c.ContractID) as RentalProject,
+		ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) as NTE,
+		ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeVNTE', 1) AS DECIMAL(18, 2)), 0) as VNTE,
+		dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 0 ) as NTEAsText,
+		dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeVNTE', 0 ) as VNTEAsText,
+		ISNULL(b.RevisedExpenseBudgetSum,0) as RevisedExpenseBudgetSum,
+		ISNULL(b.RevisedIncomeBudgetSum,0) as RevisedIncomeBudgetSum,
+		ISNULL(b.ActualExpenseAmount,0) as ActualExpenseAmount,
+		case when b.RevisedExpenseBudgetSum < 5 then 1 else 0 end as RevisedUnderFive,
+		case when b.ActualExpenseAmount > b.RevisedExpenseBudgetSum then 1 else 0 end as ActualExpenseOverBudget,
+                case when b.ActualExpenseAmount > b.RevisedIncomeBudgetSum then 1 else 0 end as ExpenseExceedsIncome,
+CASE 
+    WHEN b.RevisedIncomeBudgetSum + ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) < 5 
+    THEN 1 
+    ELSE 0 
+END AS BudgetIncomeAndNTEUnderFive,
+CASE 
+    WHEN ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) < 5 
+         AND b.RevisedIncomeBudgetSum > 0  
+    THEN 1  
+    ELSE 0 
+END AS NTEUnderFiveWithBudget,
+CASE 
+    WHEN b.RevisedIncomeBudgetSum < 5 
+         AND ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) > 0 
+    THEN 1  
+    ELSE 0 
+END AS BudgetUnderFiveWithNTE,
+		ISNULL(b.RevisedIncomeBudgetSum,0) - ISNULL(RevisedExpenseBudgetSum,0) as EstimatedMargin,
+		((ISNULL(b.RevisedIncomeBudgetSum, 0) - ISNULL(b.RevisedExpenseBudgetSum, 0)) / NULLIF(ISNULL(b.RevisedIncomeBudgetSum, 0), 0)) * 100 AS GrossMargin
+from Contract c 
+left join PMBudgetTotals b on c.CompanyID = b.CompanyID and c.ContractID = b.ProjectID
+)
+SELECT fl.*, 
+       case when fl.GrossMargin < 0 then 1 else 0 end as BudgetedGMUnderZero,
+       case when fl.GrossMargin < 8 then 1 else 0 end as BudgetedGMunderEight,
+       case when fl.GrossMargin < 4.5 then 1 else 0 end as BudgetedGMUnderFourFive,
+       case when fl.RentalProject = 1 and fl.GrossMargin < 4.5 then 1
+       when fl.RentalProject = 0 and fl.GrossMargin < 8.0 then 1
+       else 0 end as BudgetedGMUnderTargetCombined,
+       case when fl.RevisedIncomeBudgetSum > IsNull(fl.NTE,0) then 1 else 0 end as BudgetedIncomeOverNTE
+from FirstLayer fl

+ 216 - 0
ProjectDataAccuracyUpdateThree.sql

@@ -0,0 +1,216 @@
+DROP VIEW IF EXISTS ProjectDataAccuracyUpdateThree
+GO
+Create View ProjectDataAccuracyUpdateThree
+as
+SELECT
+    c.CompanyID,
+    c.ContractID,
+    c.ContractCD,
+    bAExec.AcctCD AS ExecutiveNumber,
+    bAExec.AcctName AS ExecutiveName,
+    execEmp.userID AS ExecutivePKID,
+    manager.AcctCD AS ManagerNumber,
+    manager.AcctName AS ManagerName,
+    manEmp.userID AS managerPKID,
+        br.BranchID AS BranchKey,
+    br.BranchCD AS BranchCD,
+    ba.AcctName AS BranchName,
+        cust.BAccountID as CustomerID,
+    cust.AcctCD as CustomerCD,
+    cust.AcctName as CustomerName,
+    c.CreatedDateTime,
+    dbo.SumReleasedTransactions(c.CompanyID, c.ContractID, 1) as WIPActual ,
+    -- Calculate RentalProject via join
+    CASE 
+        WHEN CHARINDEX('rental', LOWER(d.Description)) > 0 THEN 1 
+        ELSE 0 
+    END AS RentalProject,
+    TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)) AS NTE,
+    TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, vnte.ValueString)) AS VNTE,
+    nte.ValueString AS NTEAsText,
+    vnte.ValueString AS VNTEAsText,
+    d.description as JobCategory,
+    jsd.description as JobStatus,
+    -- Aggregated columns from PMBudget
+    ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0) AS RevisedExpenseBudgetSum,
+    ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) AS RevisedIncomeBudgetSum,
+    ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryActualAmount ELSE 0 END), 0) AS ActualExpenseAmount,
+    -- Calculated fields using aggregated values
+    CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0) < 5 THEN 1 ELSE 0 END AS RevisedUnderFive,
+    CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryActualAmount ELSE 0 END), 0) > ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0) THEN 1 ELSE 0 END AS ActualExpenseOverBudget,
+    CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryActualAmount ELSE 0 END), 0) > ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) THEN 1 ELSE 0 END AS ExpenseExceedsIncome,
+    CASE 
+        WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+             + ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) < 5 
+        THEN 1 
+        ELSE 0 
+    END AS BudgetIncomeAndNTEUnderFive,
+    CASE 
+        WHEN ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) < 5 
+             AND ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) > 0  
+        THEN 1  
+        ELSE 0 
+    END AS NTEUnderFiveWithBudget,
+    CASE 
+        WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) < 5 
+             AND ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) > 0 
+        THEN 1  
+        ELSE 0 
+    END AS BudgetUnderFiveWithNTE,
+    ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+        - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0) AS EstimatedMargin,
+    ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+        - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+        / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 AS GrossMargin,
+    -- Calculated fields from SecondLayer
+    CASE WHEN 
+        ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+        - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+        / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 0 
+        THEN 1 ELSE 0 END AS BudgetedGMUnderZero,
+    CASE WHEN 
+        ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+        - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+        / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 8 
+        THEN 1 ELSE 0 END AS BudgetedGMUnderEight,
+    CASE WHEN  d.Description NOT IN (
+        'Alarm Monitoring',
+        'Cleaning – Biohazard',
+        'Equipment Rental – Cooling',
+        'Equipment Rental – Heating',
+        'File Maintenance',
+        'Inspections',
+        'Vital Command Sensors'
+    )
+    AND 
+        ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+        - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+        / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 4.5 
+        THEN 1 ELSE 0 END AS BudgetedGMUnderFourFive,
+    CASE 
+        WHEN 
+            CASE 
+                WHEN CHARINDEX('rental', LOWER(d.Description)) > 0 THEN 1 
+                ELSE 0 
+            END = 1 
+            AND ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+                - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+                / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 4.5 THEN 1
+        WHEN 
+            CASE 
+                WHEN CHARINDEX('rental', LOWER(d.Description)) > 0 THEN 1 
+                ELSE 0 
+            END = 0 
+            AND ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+                - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+                / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 8.0 THEN 1
+        ELSE 0 
+    END AS BudgetedGMUnderTargetCombined,
+    CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+        > ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) THEN 1 ELSE 0 END AS BudgetedIncomeOverNTE,
+    -- Final calculation for ProjectProblemExists
+    CASE WHEN 
+        (CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+            > ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) THEN 1 ELSE 0 END) + -- BudgetedIncomeOverNTE
+        (CASE 
+            WHEN 
+                CASE 
+                    WHEN CHARINDEX('rental', LOWER(d.Description)) > 0 THEN 1 
+                    ELSE 0 
+                END = 1 
+                AND ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+                    - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+                    / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 4.5 THEN 1
+            WHEN 
+                CASE 
+                    WHEN CHARINDEX('rental', LOWER(d.Description)) > 0 THEN 1 
+                    ELSE 0 
+                END = 0 
+                AND ((ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+                    - ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0)) 
+                    / NULLIF(ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0), 0)) * 100 < 8.0 THEN 1
+            ELSE 0 
+        END) + -- BudgetedGMUnderTargetCombined
+        (CASE 
+            WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) < 5 
+                 AND ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) > 0 
+            THEN 1  
+            ELSE 0 
+        END) + -- BudgetUnderFiveWithNTE
+        (CASE 
+            WHEN ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) < 5 
+                 AND ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) > 0  
+            THEN 1  
+            ELSE 0 
+        END) + -- NTEUnderFiveWithBudget
+        (CASE 
+            WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) 
+                + ISNULL(TRY_CONVERT(DECIMAL(18,2), TRY_CONVERT(MONEY, nte.ValueString)), 0) < 5 
+            THEN 1 
+            ELSE 0 
+        END) + -- BudgetIncomeAndNTEUnderFive
+        (CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryActualAmount ELSE 0 END), 0) 
+            > ISNULL(SUM(CASE WHEN p.[TYPE] = 'I' THEN p.CuryRevisedAmount ELSE 0 END), 0) THEN 1 ELSE 0 END) + -- ExpenseExceedsIncome
+        (CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryActualAmount ELSE 0 END), 0) 
+            > ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0) THEN 1 ELSE 0 END) + -- ActualExpenseOverBudget
+        (CASE WHEN ISNULL(SUM(CASE WHEN p.[TYPE] = 'E' THEN p.CuryRevisedAmount ELSE 0 END), 0) < 5 THEN 1 ELSE 0 END) -- RevisedUnderFive
+        > 0 THEN 1 ELSE 0 END AS ProjectProblemExists
+FROM
+    Contract c
+    LEFT JOIN ContractKvExt nte 
+        ON nte.CompanyID = c.CompanyID 
+        AND nte.RecordID = c.NoteID 
+        AND nte.FieldName = 'AttributeNTE'
+    LEFT JOIN ContractKvExt vnte 
+        ON vnte.CompanyID = c.CompanyID 
+        AND vnte.RecordID = c.NoteID 
+        AND vnte.FieldName = 'AttributeVNTE'
+    LEFT JOIN ContractKvExt e 
+        ON e.CompanyID = c.CompanyID 
+        AND e.RecordID = c.NoteID 
+        AND e.FieldName = 'AttributeCATEGORY'
+    LEFT JOIN CSAttributeDetail d 
+        ON d.CompanyID = e.CompanyID 
+        AND d.AttributeID = 'CATEGORY' 
+        AND e.ValueString = d.ValueID
+    LEFT JOIN ContractKvExt js
+        ON js.CompanyID = c.CompanyID 
+        AND js.RecordID = c.NoteID 
+        AND js.FieldName = 'AttributeJOBSTATUS'
+    LEFT JOIN CSAttributeDetail jsd 
+        ON jsd.CompanyID = e.CompanyID 
+        AND jsd.AttributeID = 'JOBSTATUS' 
+        AND js.ValueString = jsd.ValueID
+    LEFT JOIN PMBudget p 
+        ON p.CompanyID = c.CompanyID 
+        AND p.ProjectID = c.ContractID
+    LEFT JOIN BAccount manager ON manager.CompanyID = c.CompanyID AND manager.DefContactID = c.OwnerID
+    LEFT JOIN EPEmployee manEmp ON manager.CompanyID = manEmp.CompanyID AND manEmp.BAccountID = manager.BAccountID
+    LEFT JOIN ContractKvExt execNote ON execNote.CompanyID = c.CompanyID AND execNote.RecordID = c.NoteID AND execNote.FieldName = 'AttributePROJECTEXE'
+    LEFT JOIN BAccount bAExec ON bAExec.CompanyID = execNote.CompanyID AND bAExec.AcctCD = execNote.ValueString
+    LEFT JOIN EPEmployee execEmp ON bAExec.CompanyID = execEmp.CompanyID AND bAExec.BAccountID = execEmp.BAccountID
+    LEFT JOIN Branch br ON br.CompanyID = c.CompanyID AND br.BranchID = c.DefaultBranchID
+    LEFT JOIN BAccount ba ON ba.CompanyID = br.CompanyID AND ba.BAccountID = br.BAccountID
+    LEFT JOIN BAccount cust ON cust.CompanyID = c.CompanyID AND cust.BAccountID = c.CustomerID
+GROUP BY
+    c.CompanyID,
+    c.ContractID,
+    c.ContractCD,
+    d.Description,
+    nte.ValueString,
+    vnte.ValueString,
+    d.description,
+    bAExec.AcctCD,
+    bAExec.AcctName,
+    execEmp.userID,
+    manager.AcctCD,
+    manager.AcctName,
+    manEmp.userID,
+    br.BranchID,
+    br.BranchCD,
+    ba.AcctName,
+    cust.BAccountID,
+    cust.AcctCD,
+    cust.AcctName,
+    c.CreatedDateTime,
+    jsd.description

+ 93 - 0
ProjectDataAccuracyUpdateTwo.sql

@@ -0,0 +1,93 @@
+DROP VIEW IF EXISTS ProjectDataAccuracyUpdate
+GO
+Create View ProjectDataAccuracyUpdate
+as
+with FirstLayer  
+as 
+(
+SELECT  c.CompanyID, 
+		c.ContractID, 
+        c.ContractCD,
+		br.BranchID as BranchKey,
+		br.BranchCD as BranchCD,
+		ba.AcctName as BranchName,
+		cust.BAccountID as CustomerID,
+		cust.AcctCD as CustomerCD,
+		cust.AcctName as CustomerName,
+        c.CreatedDateTime as ContractCreatedDateTime,
+        bAExec.AcctCD as ExecutiveNumber,
+        bAExec.AcctName as ExecutiveName,
+        bAProd.AcctCD as ProducerNumber,
+        bAProd.AcctName as ProducerName,
+        bAEst.AcctCD as EstimatorNumber,
+        bAEst.AcctName as EstimatorName,
+        bAAdmin.AcctCD as AdminNumber,
+        bAAdmin.AcctName as AdminName,
+        manager.AcctCD as ManagerNumber,
+        manager.AcctName as ManagerName,
+		manEmp.userID as managerPKID,
+		execEmp.userID as ExecutivePKID,
+		(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,
+     dbo.ProjectRental(c.CompanyID, c.ContractID) as RentalProject,
+ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) as NTE,
+		ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeVNTE', 1) AS DECIMAL(18, 2)), 0) as VNTE,
+		dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 0 ) as NTEAsText,
+		dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeVNTE', 0 ) as VNTEAsText,
+		dbo.GetTopContractUserDefinedFieldDescription(c.CompanyID, c.NoteID, 'AttributeCategory') as JobCategory,
+		dbo.GetTopContractUserDefinedFieldDescription(c.CompanyID, c.NoteID, 'AttributejobStatus') as JobStatus,
+		ISNULL(b.RevisedExpenseBudgetSum,0) as RevisedExpenseBudgetSum,
+		ISNULL(b.RevisedIncomeBudgetSum,0) as RevisedIncomeBudgetSum,
+		ISNULL(b.ActualExpenseAmount,0) as ActualExpenseAmount,
+		case when b.RevisedExpenseBudgetSum < 5 then 1 else 0 end as RevisedUnderFive,
+		case when b.ActualExpenseAmount > b.RevisedExpenseBudgetSum then 1 else 0 end as ActualExpenseOverBudget,
+		case when b.ActualExpenseAmount > b.RevisedIncomeBudgetSum then 1 else 0 end as ExpenseExceedsIncome,
+CASE 
+    WHEN b.RevisedIncomeBudgetSum + ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) < 5 
+    THEN 1 
+    ELSE 0 
+END AS BudgetIncomeAndNTEUnderFive,
+CASE 
+    WHEN ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) < 5 
+         AND b.RevisedIncomeBudgetSum > 0  
+    THEN 1  
+    ELSE 0 
+END AS NTEUnderFiveWithBudget,
+CASE 
+    WHEN b.RevisedIncomeBudgetSum < 5 
+         AND ISNULL(CAST(dbo.GetContractUserDefinedField(c.CompanyID, c.NoteID, 'AttributeNTE', 1) AS DECIMAL(18, 2)), 0) > 0 
+    THEN 1  
+    ELSE 0 
+END AS BudgetUnderFiveWithNTE,
+		ISNULL(b.RevisedIncomeBudgetSum,0) - ISNULL(RevisedExpenseBudgetSum,0) as EstimatedMargin,
+		((ISNULL(b.RevisedIncomeBudgetSum, 0) - ISNULL(b.RevisedExpenseBudgetSum, 0)) / NULLIF(ISNULL(b.RevisedIncomeBudgetSum, 0), 0)) * 100 AS GrossMargin
+from Contract c 
+left join BAccount cust on cust.CompanyID = c.CompanyID and cust.BAccountID = c.CustomerID
+left join BAccount manager on manager.CompanyID = c.CompanyID and manager.DefContactID = c.OwnerID
+left join EPEmployee manEmp on manager.CompanyID = manEmp.CompanyID and manEmp.BAccountID = manager.BAccountID
+left JOIN ContractKvExt execNote on execNote.CompanyID = c.CompanyID and execNote.RecordID =c.NoteID and execNote.FieldName = 'AttributePROJECTEXE'
+left join BAccount bAExec on BAExec.CompanyID = execNote.CompanyID and BAExec.AcctCD = execNote.ValueString
+left join EPEmployee execEmp on BAExec.CompanyID = execEmp.CompanyID and BAExec.BAccountID = execEmp.BAccountID
+left JOIN ContractKvExt prodNote on prodNote.CompanyID = c.CompanyID and prodNote.RecordID =c.NoteID and prodNote.FieldName = 'AttributePRODUCER'
+left join BAccount bAProd on BAProd.CompanyID = prodNote.CompanyID and BAProd.AcctCD = prodNote.ValueString
+left JOIN ContractKvExt estNote on estNote.CompanyID = c.CompanyID and estNote.RecordID =c.NoteID and estNote.FieldName = 'AttributeESTIMATOR'
+left join BAccount bAEst on bAEst.CompanyID = estNote.CompanyID and BAEst.AcctCD = estNote.ValueString
+left JOIN ContractKvExt adminNote on adminNote.CompanyID = c.CompanyID and adminNote.RecordID =c.NoteID and adminNote.FieldName = 'AttributePADMIN'
+left join BAccount bAAdmin on BAAdmin.CompanyID = adminNote.CompanyID and BAAdmin.AcctCD = adminNote.ValueString
+left join PMBudgetTotals b on c.CompanyID = b.CompanyID and c.ContractID = b.ProjectID
+LEFT JOIN Branch br on br.CompanyID = c.CompanyID and br.BranchID = c.DefaultBranchID
+LEFT join BACCount ba on ba.CompanyID = br.CompanyID and ba.BAccountID = br.BACCountID
+), SecondLayer
+as 
+(
+SELECT fl.*, 
+       case when fl.GrossMargin < 0 then 1 else 0 end as BudgetedGMUnderZero,
+       case when fl.GrossMargin < 8 then 1 else 0 end as BudgetedGMunderEight,
+       case when fl.GrossMargin < 4.5 then 1 else 0 end as BudgetedGMUnderFourFive,
+       case when fl.RentalProject = 1 and fl.GrossMargin < 4.5 then 1
+       when fl.RentalProject = 0 and fl.GrossMargin < 8.0 then 1
+       else 0 end as BudgetedGMUnderTargetCombined,
+       case when fl.RevisedIncomeBudgetSum > IsNull(fl.NTE,0) then 1 else 0 end as BudgetedIncomeOverNTE
+from FirstLayer fl
+)
+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
+from SecondLayer sl

+ 66 - 0
ProjectInformation.sql

@@ -0,0 +1,66 @@
+IF OBJECT_ID ('dbo.ProjectInformation','V') IS NOT NULL DROP VIEW dbo.ProjectInformation
+GO 
+CREATE VIEW dbo.ProjectInformation
+AS
+SELECT c.CompanyID,
+	   c.ContractID, 
+	   pAdd.City,
+	   pAdd.State,
+	   temp.ContractCD as template,
+	   loc.LocationCD,
+	   loc.Descr as LocationName,
+        bAExec.AcctCD as ProjectExecutiveCD,
+        bAExec.AcctName as ProjectExecutiveName,
+        execEmp.UserID as ProjectExecutiveID,
+        bAest.AcctCD as ProjectEstimatorCD,
+        bAest.AcctName as ProjectEstimatorName,
+        bAprod.AcctCD as ProjectProducerCD,
+        bAprod.AcctName as ProjectProducerName,
+        crUser.FullName as ProjectCreatedByUser,
+        lmUser.FullName as ProjectLastModifiedByUser,
+        salesAcct.AccountCD as SalesAccountCD,
+        salesAcct.Description as SalesAccountDescription,
+        dbo.GetProjectOpenInvoices(c.CompanyID, c.ContractID) as wattersonUnpaidInvoicesAmount,
+        sum(case when pag.GroupCD = 'WIP'  then bud.CuryActualAmount   else 0 end) as WIPActual,
+        sum(case when bud.[TYPE] = 'I' then bud.CuryActualAmount else 0 end) as RevenueActual,
+        sum(case when bud.[TYPE] = 'E' then bud.CuryActualAmount else 0 end) as TotalExpenses,
+        sum(case when bud.[TYPE] = 'E'  then bud.CuryRevisedAmount else 0 end) as RevisedBudgetedExpense,
+        sum(case when bud.[TYPE] = 'I'  then bud.CuryRevisedAmount else 0 end) as RevisedBudgetedIncome,
+        sum(case when pag.GroupCD = 'UNRECREV' then bud.CuryActualAmount   else 0 end) as UnrecrevActual,
+        sum(case when bud.[TYPE] = 'I' then bud.ActualAmount else 0 end) as ActualIncomeSum,
+        sum(case when pag.GroupCD = 'UNBILLREV' then bud.ActualAmount else 0 end) as UnBillRev
+FROM
+	Contract c
+left join PMBudget bud on bud.CompanyID = c.CompanyID and bud.ProjectID = c.ContractID
+LEFT JOIN PMAddress pAdd on pAdd.CompanyID = c.CompanyID and c.SiteAddressID = pAdd.AddressID
+left join PMAccountGroup pag on pag.CompanyID = bud.CompanyID and pag.GroupID = bud.AccountGroupID
+left join Contract temp on c.CompanyID = temp.CompanyID and c.TemplateID = temp.ContractID
+LEFT JOIN Location loc on loc.CompanyID = c.CompanyID and c.LocationID = loc.LocationID
+LEFT JOIN Users crUser on crUser.CompanyID = c.CompanyID and crUser.pkid = c.CreatedByID
+LEFT JOIN Users lmUser on lmUser.CompanyID = c.CompanyID and lmUser.pkid = c.LastModifiedByID
+LEFT JOIN Account salesAcct on salesAcct.CompanyID = c.CompanyID and salesAcct.AccountID = c.DefaultSalesAccountID
+LEFT JOIN ContractKvExt execNote ON execNote.CompanyID = c.CompanyID AND execNote.RecordID = c.NoteID AND execNote.FieldName = 'AttributePROJECTEXE'
+LEFT JOIN BAccount bAExec ON bAExec.CompanyID = execNote.CompanyID AND bAExec.AcctCD = execNote.ValueString
+LEFT JOIN EPEmployee execEmp ON bAExec.CompanyID = execEmp.CompanyID AND bAExec.BAccountID = execEmp.BAccountID
+LEFT JOIN ContractKvExt prodNote ON prodNote.CompanyID = c.CompanyID AND prodNote.RecordID = c.NoteID AND prodNote.FieldName = 'AttributePRODUCER'
+LEFT JOIN BAccount bAprod ON bAprod.CompanyID = prodNote.CompanyID AND bAprod.AcctCD = prodNote.ValueString
+LEFT JOIN ContractKvExt estNote ON estNote.CompanyID = c.CompanyID AND estNote.RecordID = c.NoteID AND estNote.FieldName = 'AttributeESTIMATOR'
+LEFT JOIN BAccount bAest ON bAest.CompanyID = estNote.CompanyID AND bAest.AcctCD = estNote.ValueString
+group by c.CompanyID,
+       c.ContractID, 
+	   pAdd.City,
+	   pAdd.State,
+	   temp.ContractCD,
+	   loc.LocationCD,
+	   loc.Descr,
+        bAExec.AcctCD,
+        bAExec.AcctName,
+        execEmp.UserID,
+        bAest.AcctCD,
+        bAest.AcctName,
+        bAprod.AcctCD,
+        bAprod.AcctName,
+        crUser.FullName,
+        lmUser.FullName,
+        salesAcct.AccountCD,
+        salesAcct.Description

+ 28 - 0
ProjectInformationExtraColumns.sql

@@ -0,0 +1,28 @@
+DROP VIEW IF EXISTS ProjectInformationExtraColumns
+GO 
+Create View ProjectInformationExtraColumns
+as
+with cte
+as
+(
+SELECT b.CompanyID, b.ProjectID, sum(CASE when ag.GroupCD = 'UNBILLREV' then B.ActualAmount else 0 end) as 'UNBILLREV',sum(case when b.[type] = 'I' then b.ActualAmount else 0 end) as ActualIncomeSum
+from Contract c 
+join PMBudget b on c.CompanyID = b.CompanyID and c.ContractID = b.ProjectID 
+join PMAccountGroup ag on ag.CompanyID = b.CompanyID and ag.GroupID = b.AccountGroupID 
+group by b.CompanyID, b.ProjectID
+), UA as 
+(
+SELECT t.CompanyID, t.ProjectID, sum(case when r.Module = 'AR' then t.amount * -1 else t.amount end * -1) as UnrecrevActual, sum(case when t.Released =1 then t.Amount else 0 end) as ReleasedAmount
+from PMTran t
+join PMRegister r on t.CompanyID = r.CompanyID and t.RefNbr = r.RefNbr 
+group by t.CompanyID, t.ProjectID 
+)
+SELECT  c.CompanyID, 
+		c.ProjectID,  
+		c.UNBILLREV,
+		c.ActualIncomeSum,
+		u.UnrecrevActual,
+		u.ReleasedAmount,
+		dbo.GetProjectOpenInvoices(c.CompanyID, c.ProjectID) as wattersonUnpaidInvoicesAmount
+FROM cte c
+join UA u on c.CompanyID = u.CompanyID and c.ProjectID = u.projectID

+ 28 - 0
PurchaseOrderReceipts.sql

@@ -0,0 +1,28 @@
+IF OBJECT_ID ('dbo.PurchaseOrderReceipts','V') IS NOT NULL DROP VIEW dbo.PurchaseOrderReceipts
+GO 
+CREATE VIEW dbo.PurchaseOrderReceipts
+AS
+SELECT r.CompanyID, 
+	   r.ReceiptNbr,
+       r.ReceiptType,
+       r.Status,
+       r.ReceiptDate,
+       r.FinPeriodID,
+       r.VendorID,
+       r.VendorLocationID,
+       r.ProjectID,
+       c.ContractCD,
+       r.CuryOrderTotal,  
+       r.Invtrefnbr,
+       (SELECT sum(t.CuryTranAmt) from APTran t where t.CompanyID = r.CompanyID and t.ReceiptNbr = r.ReceiptNbr) as BilledAmount,
+       (SELECT sum(a.PPVAmt) from POAccrualSplit a where a.CompanyID  = r.CompanyID and a.POReceiptType = r.ReceiptType and a.POReceiptNbr = r.ReceiptNbr) as PPVAmount,
+       (SELECT top 1 pr.PONbr from POOrderReceipt pr where pr.CompanyID = r.CompanyID and pr.ReceiptType = r.ReceiptType and pr.ReceiptNbr = r.ReceiptNbr) as PONumber,
+       (SELECT p.Status from POOrder p where p.CompanyID = r.CompanyID and p.OrderNbr = (SELECT top 1 pr.PONbr from POOrderReceipt pr where pr.CompanyID = r.CompanyID and pr.ReceiptType = r.ReceiptType and pr.ReceiptNbr = r.ReceiptNbr)) as POStatus,
+       (SELECT sum(o.CuryOrderTotal)
+from POOrderReceipt pr 
+join POOrder o on pr.CompanyID = o.CompanyID and pr.POType = o.OrderType and pr.PONbr = o.OrderNbr 
+where pr.CompanyID = r.CompanyID 
+and pr.ReceiptType = r.ReceiptType 
+and pr.ReceiptNbr = r.ReceiptNbr) as POTotal
+FROM POReceipt r
+left join Contract c on r.CompanyID = c.CompanyID and r.ProjectID = c.ContractID

+ 26 - 0
RankedActiveTasks.sql

@@ -0,0 +1,26 @@
+IF OBJECT_ID ('dbo.RankedActiveTasks','V') IS NOT NULL DROP VIEW dbo.RankedActiveTasks
+GO 
+CREATE VIEW dbo.RankedActiveTasks
+as
+WITH RankedActiveTasks AS (
+    SELECT
+        CompanyID,
+        ProjectID,
+        TaskID,
+        TaskCD,
+        -- row number 1 = newest active task for that project
+        ROW_NUMBER() OVER (
+            PARTITION BY CompanyID, ProjectID
+            ORDER BY CreatedDateTime DESC      -- ← change if you need a different definition of “most recent”
+        ) AS rn
+    FROM dbo.PMTask
+    WHERE
+        Status = 'A'           
+)
+SELECT
+    CompanyID,
+    ProjectID,
+    TaskID,
+    TaskCD
+FROM RankedActiveTasks
+WHERE rn = 1;      -- keep only the newest active task per project

+ 22 - 0
RankedActivities.sql

@@ -0,0 +1,22 @@
+IF OBJECT_ID ('dbo.RankedActivities','V') IS NOT NULL DROP VIEW dbo.RankedActivities
+GO 
+CREATE VIEW dbo.RankedActivities
+AS
+SELECT 
+        CR.CompanyID,
+        PM.ProjectID,
+        c.ContractCD,
+        CR.NoteID,
+        PM.RefNoteID,
+        CR.[Type],
+        CR.UIStatus,
+        PM.ApprovalStatus,
+        CR.CompletedDate,
+        CR.Subject,
+        CR.Body,
+        ROW_NUMBER() OVER (PARTITION BY CR.CompanyID,PM.ProjectID ORDER BY CR.CompletedDate) AS rn
+    FROM dbo.CRActivity CR
+    JOIN dbo.PMTimeActivity PM ON CR.NoteID = PM.RefNoteID  AND CR.CompanyID = PM.CompanyID
+    join dbo.Contract c on C.CompanyID = PM.CompanyID and C.ContractID = PM.ProjectID
+       WHERE CR.CompletedDate is not NULL 
+        and CR.[Type] = 'COMP'

+ 27 - 0
ReleasedAccountGroups.sql

@@ -0,0 +1,27 @@
+--[mssql:Native]
+IF OBJECT_ID ('dbo.ReleasedAccountGroups','V') IS NOT NULL DROP VIEW dbo.ReleasedAccountGroups
+GO 
+CREATE VIEW dbo.ReleasedAccountGroups
+AS
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID, 
+            p.AccountGroupID
+    ) AS RowKey,
+    p.CompanyID, 
+    p.ProjectID, 
+    p.AccountGroupID, 
+    COUNT(*) AS ResultsSummed,
+    SUM(p.Amount) AS [Amount], 
+    SUM(p.TranCuryAmount) AS [TranCuryAmount], 
+    SUM(p.ProjectCuryAmount) AS [ProjectCuryAmount], 
+    SUM(p.ProjectCuryInvoicedAmount) AS [ProjectCuryInvoicedAmount],
+    SUM(p.InvoicedAmount) AS [InvoicedAmount]
+FROM PMTran p 
+WHERE p.Released = 1
+GROUP BY 
+    p.CompanyID, 
+    p.ProjectID, 
+    p.AccountGroupID

+ 27 - 0
ReleasedTranGroups.sql

@@ -0,0 +1,27 @@
+--[mssql:Native]
+IF OBJECT_ID ('dbo.ReleasedTranGroups','V') IS NOT NULL DROP VIEW dbo.ReleasedTranGroups
+GO 
+CREATE VIEW dbo.ReleasedTranGroups
+AS
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID, 
+            p.AccountGroupID
+    ) AS RowKey,
+    p.CompanyID, 
+    p.ProjectID, 
+    p.AccountGroupID, 
+    COUNT(*) AS ResultsSummed,
+    SUM(p.Amount) AS [Amount], 
+    SUM(p.TranCuryAmount) AS [TranCuryAmount], 
+    SUM(p.ProjectCuryAmount) AS [ProjectCuryAmount], 
+    SUM(p.ProjectCuryInvoicedAmount) AS [ProjectCuryInvoicedAmount],
+    SUM(p.InvoicedAmount) AS [InvoicedAmount]
+FROM PMTran p 
+WHERE p.Released = 1
+GROUP BY 
+    p.CompanyID, 
+    p.ProjectID, 
+    p.AccountGroupID

+ 26 - 0
ReleasedTranGroupsOffset.sql

@@ -0,0 +1,26 @@
+IF OBJECT_ID ('dbo.ReleasedTranGroupsOffset','V') IS NOT NULL DROP VIEW dbo.ReleasedTranGroupsOffset
+GO 
+CREATE VIEW dbo.ReleasedTranGroupsOffset
+AS
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID, 
+            p.OffsetAccountGroupID 
+    ) AS RowKey,
+    p.CompanyID, 
+    p.ProjectID, 
+    p.OffsetAccountGroupID, 
+    COUNT(*) AS ResultsSummed,
+    SUM(p.Amount) AS [Amount], 
+    SUM(p.TranCuryAmount) AS [TranCuryAmount], 
+    SUM(p.ProjectCuryAmount) AS [ProjectCuryAmount], 
+    SUM(p.ProjectCuryInvoicedAmount) AS [ProjectCuryInvoicedAmount],
+    SUM(p.InvoicedAmount) AS [InvoicedAmount]
+FROM PMTran p 
+WHERE p.Released = 1
+GROUP BY 
+    p.CompanyID, 
+    p.ProjectID, 
+   p.OffsetAccountGroupID

+ 17 - 0
RevisedBudgetExpense.sql

@@ -0,0 +1,17 @@
+IF OBJECT_ID ('dbo.RevisedBudgetExpense','V') IS NOT NULL DROP VIEW dbo.RevisedBudgetExpense
+GO 
+CREATE VIEW dbo.RevisedBudgetExpense
+AS 
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID
+    ) AS RowKey,
+CompanyID, 
+ProjectID, 
+SUM(RevisedAmount) as RevisedAmount
+from PMBudget p 
+WHERE p.[Type] = 'E'
+ group by p.CompanyID,
+          p.ProjectID

+ 17 - 0
RevisedBudgetIncome.sql

@@ -0,0 +1,17 @@
+IF OBJECT_ID ('dbo.RevisedBudgetIncome','V') IS NOT NULL DROP VIEW dbo.RevisedBudgetIncome
+GO 
+CREATE VIEW dbo.RevisedBudgetIncome
+AS 
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID
+    ) AS RowKey,
+CompanyID, 
+ProjectID, 
+SUM(RevisedAmount) as RevisedAmount
+from PMBudget p 
+WHERE p.[Type] = 'I'
+ group by p.CompanyID,
+          p.ProjectID

+ 14 - 0
SQLObjectDefinitions.sql

@@ -0,0 +1,14 @@
+IF OBJECT_ID ('dbo.SQLObjectDefinitions','V') IS NOT NULL DROP VIEW dbo.SQLObjectDefinitions
+GO 
+CREATE VIEW dbo.SQLObjectDefinitions
+AS    
+SELECT 
+    o.name AS ObjectName,
+    o.type_desc AS ObjectType,
+    m.definition AS ObjectDefinition
+FROM 
+    sys.sql_modules m
+INNER JOIN 
+    sys.objects o ON m.object_id = o.object_id
+WHERE 
+    o.type IN ('V', 'P', 'FN', 'IF', 'TF')  -- V: View, P: Procedure, FN: Scalar Function, IF: Inline Table Function, TF: Table Function

+ 125 - 0
SalesActual.sql

@@ -0,0 +1,125 @@
+DROP VIEW IF EXISTS SalesActual
+GO 
+Create View SalesActual
+as
+with CustomerBusinessDevOwner
+as
+(
+SELECT 
+b.CompanyID, 
+ROW_NUMBER() OVER(PARTITION BY c.CompanyID ORDER BY c.CompanyID) AS rc,
+c.BAccountID as CustomerBAccountID,
+e.BAccountID as EmployeeBAccountID , 
+b.AcctCD as CustomerCD,
+e.AcctCD as EmployeeCD, 
+e.AcctName as EmployeeName 
+from Customer c 
+inner join BAccount b on c.CompanyID = b.CompanyID and c.BAccountID = b.BAccountID 
+left JOIN BAccountKvExt bke on b.CompanyID = bke.CompanyID and  b.NoteID = bke.RecordID 
+left join BAccount e on bke.CompanyID =e.CompanyID and bke.ValueString = e.AcctCD 
+)
+SELECT c.CompanyID, 
+	   c.rc,
+       c.EmployeeBAccountID,
+	   c.EmployeeName, 
+	   CASE 
+        WHEN LAG(c.EmployeeBAccountID) OVER (ORDER BY c.EmployeeBAccountID, c.CustomerBAccountID) = c.EmployeeBAccountID THEN ''
+        ELSE c.EmployeeName
+       END AS EmployeeNameGroup,
+       c.CustomerBAccountID,
+	   c.CustomerCD, 
+	   dbo.CountCustomerContracts(dbo.GetFirstDayOfPeriod(GETDATE(),'month'),GETDATE(),c.CompanyID,c.CustomerBAccountID) as WorkOrderCountMTD,
+	   dbo.SumCustomerInvoiceAmt(c.CompanyID, c.CustomerBAccountID, dbo.GetFirstDayOfPeriod(GETDATE(),'month'),GETDATE()) as AmountInvoicedMTD,
+	   dbo.SumCustomerInvoicePayments(c.CompanyID, c.CustomerBAccountID,dbo.GetFirstDayOfPeriod(GETDATE(),'month'),GETDATE()) as AmountReceivedMTD,
+	   dbo.CountCustomerContracts(dbo.GetFirstDayOfPeriod(GETDATE(),'quarter'),GETDATE(),c.CompanyID,c.CustomerBAccountID) as WorkOrderCountQTD,
+	   dbo.SumCustomerInvoiceAmt(c.CompanyID, c.CustomerBAccountID, dbo.GetFirstDayOfPeriod(GETDATE(),'quarter'),GETDATE()) as AmountInvoicedQTD,
+	   dbo.SumCustomerInvoicePayments(c.CompanyID, c.CustomerBAccountID,dbo.GetFirstDayOfPeriod(GETDATE(),'quarter'),GETDATE()) as AmountReceivedQTD,
+	   dbo.CountCustomerContracts(dbo.GetFirstDayOfPeriod(GETDATE(),'year'),GETDATE(),c.CompanyID,c.CustomerBAccountID) as WorkOrderCountYTD,
+	   dbo.SumCustomerInvoiceAmt(c.CompanyID, c.CustomerBAccountID, dbo.GetFirstDayOfPeriod(GETDATE(),'year'),GETDATE()) as AmountInvoicedYTD,
+	   dbo.SumCustomerInvoicePayments(c.CompanyID, c.CustomerBAccountID,dbo.GetFirstDayOfPeriod(GETDATE(),'year'),GETDATE()) as AmountReceivedYTD,
+	   dbo.GetFirstDayOfPeriod(GETDATE(),'month')as MonthDateUsed,
+	   dbo.GetFirstDayOfPeriod(GETDATE(),'quarter')as QuarterDateUsed,
+	   dbo.GetFirstDayOfPeriod(GETDATE(),'year')as YearDateUsed
+	   FROM 
+    	CustomerBusinessDevOwner c
+
+GO 
+DROP VIEW IF EXISTS InvoicePaymentAudit
+GO 
+Create View InvoicePaymentAudit
+as
+SELECT a.CompanyID,
+	   a.CustomerID,
+	   b.acctcd as CustomerCD,
+	   c.contractID,
+	   c.ContractCD,
+    	   a.AdjdRefNbr as InvoiceNumber, 
+    	   a.AdjdDocType as ParentDocType,
+    	   a.AdjgRefNbr as ApplicationNumber, 
+    	   a.AdjgDocType as ApplicationType,
+    	   a.AdjgDocDate as PaymentDate, 
+    	   a.CuryAdjdAmt as AmountPaid,
+    	   case when dbo.GetFirstDayOfPeriod(GETDATE(),'month') <= a.AdjgDocDate then 1 else 0 end as InCurrentMonth,
+    	   case when dbo.GetFirstDayOfPeriod(GETDATE(),'quarter') <= a.AdjgDocDate then 1 else 0 end as InCurrentQuarter,
+    	   case when dbo.GetFirstDayOfPeriod(GETDATE(),'year') <= a.AdjgDocDate then 1 else 0 end as InCurrentYear,
+    	   dbo.GetFirstDayOfPeriod(GETDATE(),'month') as MonthStartUsed,
+    	   dbo.GetFirstDayOfPeriod(GETDATE(),'quarter') as QuarterStartUsed,
+    	   dbo.GetFirstDayOfPeriod(GETDATE(),'year') as YearStartUsed
+FROM ARAdjust a 
+inner join ARInvoice i on a.CompanyID = i.CompanyID and i.DocType = a.AdjdDocType and i.RefNbr = a.AdjdRefNbr
+left join BAccount b on a.CompanyID = b.CompanyID and a.CustomerID = b.BaccountID
+left join Contract c on i.CompanyID = c.CompanyID and c.ContractID = i.ProjectID
+where a.AdjdDocType = 'INV'
+and a.AdjgDocType = 'PMT'
+GO
+DROP VIEW IF EXISTS InvoiceAmountAudit
+GO 
+Create View InvoiceAmountAudit
+as
+SELECT a.CompanyID, 
+	   a.DocType,  
+	   a.DocDate,
+	   p.ContractID as ProjectID,
+	   p.ContractCD as ProjectCD,
+	   c.BAccountID as CustomerBAccountID, 
+	   c.AcctCD as CustomerName,
+	   a.RefNbr as InvoiceRefNbr,
+	   a.OrigDocAmt as InvoiceAmount,
+	   i.CuryGoodsExtPriceTotal,
+	   i.CuryLineTotal,
+	   i.CuryDiscTot,
+	   a.CuryDocBal,
+	   i.LineDiscTotal,
+	   i.CuryTaxTotal, 
+	   i.PaymentTotal,
+       case when dbo.GetFirstDayOfPeriod(GETDATE(),'month') <= a.DocDate then 1 else 0 end as InCurrentMonth,
+       case when dbo.GetFirstDayOfPeriod(GETDATE(),'quarter') <= a.DocDate then 1 else 0 end as InCurrentQuarter,
+       case when dbo.GetFirstDayOfPeriod(GETDATE(),'year') <= a.DocDate then 1 else 0 end as InCurrentYear,
+       dbo.GetFirstDayOfPeriod(GETDATE(),'month') as MonthStartUsed,
+       dbo.GetFirstDayOfPeriod(GETDATE(),'quarter') as QuarterStartUsed,
+       dbo.GetFirstDayOfPeriod(GETDATE(),'year') as YearStartUsed
+from ARRegister a
+join ARInvoice i on a.CompanyID = i.CompanyID  and a.DocType = i.DocType and a.RefNbr = i.RefNbr 
+left join BAccount c on a.CompanyID = c.CompanyID and a.CustomerID = c.BAccountID
+left join Contract p on i.CompanyID = p.CompanyID and i.ProjectID = p.ContractID 
+WHERE a.DocType = 'INV'
+GO
+DROP VIEW IF EXISTS ContractCustomerAudit
+GO 
+Create View ContractCustomerAudit
+as
+SELECT c.CompanyID, 
+	   c.ContractID, 
+	   c.ContractCD, 
+	   c.CustomerID, 
+	   b.AcctCD as CustomerName, 
+	   c.CreatedDateTime, 
+	   c.ActivationDate,
+	   case when dbo.GetFirstDayOfPeriod(GETDATE(),'month') <= c.CreatedDateTime then 1 else 0 end as CreatedInCurrentMonth,
+       case when dbo.GetFirstDayOfPeriod(GETDATE(),'quarter') <= c.CreatedDateTime then 1 else 0 end as CreatedInCurrentQuarter,
+       case when dbo.GetFirstDayOfPeriod(GETDATE(),'year') <= c.CreatedDateTime then 1 else 0 end as CreatedInCurrentYear,
+       dbo.GetFirstDayOfPeriod(GETDATE(),'month') as MonthStartUsed,
+       dbo.GetFirstDayOfPeriod(GETDATE(),'quarter') as QuarterStartUsed,
+       dbo.GetFirstDayOfPeriod(GETDATE(),'year') as YearStartUsed
+FROM Contract c 
+join BAccount b  on c.CompanyID = b.CompanyID and c.CustomerID = b.BAccountID

+ 28 - 0
SalesByBD.sql

@@ -0,0 +1,28 @@
+DROP VIEW IF EXISTS SalesByBD
+GO 
+Create View SalesByBD
+as
+SELECT b.CompanyID,
+      b.EmployeeBAccountID,
+       b.EmployeeCD,
+       b.EmployeeName,
+       b.CustomerBAccountID, 
+       b.CustomerCD, 
+       c.ContractID, 
+       c.ContractCD, 
+       c.CreatedDateTime, 
+       c.ActivationDate,
+       dbo.GetBudgetAmount(c.CompanyID, c.ContractID, 'I',dbo.GetFirstDayOfPeriod(GETDATE(),'month')) as BudgetedRevenueMTD,
+       dbo.GetBudgetAmount(c.CompanyID, c.ContractID, 'I',dbo.GetFirstDayOfPeriod(GETDATE(),'quarter')) as BudgetedRevenueQTD,
+       dbo.GetBudgetAmount(c.CompanyID, c.ContractID, 'I',dbo.GetFirstDayOfPeriod(GETDATE(),'year')) as BudgetedRevenueYTD,
+       dbo.GetBudgetAmount(c.CompanyID, c.ContractID, 'I',c.CreatedDateTime) as BudgetedRevenuePTD,
+       dbo.SumProjectInvoiceAmt(c.CompanyID, c.ContractID,dbo.GetFirstDayOfPeriod(GETDATE(),'month'), GETDATE() ) as AmountInvoicedMTD,
+       dbo.SumProjectInvoiceAmt(c.CompanyID, c.ContractID,dbo.GetFirstDayOfPeriod(GETDATE(),'quarter'), GETDATE() ) as AmountInvoicedQTD,
+       dbo.SumProjectInvoiceAmt(c.CompanyID, c.ContractID,dbo.GetFirstDayOfPeriod(GETDATE(),'year'), GETDATE() ) as AmountInvoicedYTD,
+       dbo.SumProjectInvoiceAmt(c.CompanyID, c.ContractID,c.CreatedDateTime, GETDATE() ) as AmountInvoicedPTD,
+       dbo.SumProjectInvoicePayments(c.CompanyID, c.ContractID,dbo.GetFirstDayOfPeriod(GETDATE(),'month'), GETDATE() ) as AmountRecievedMTD,
+       dbo.SumProjectInvoicePayments(c.CompanyID, c.ContractID,dbo.GetFirstDayOfPeriod(GETDATE(),'month'), GETDATE() ) as AmountRecievedQTD,
+       dbo.SumProjectInvoicePayments(c.CompanyID, c.ContractID,dbo.GetFirstDayOfPeriod(GETDATE(),'month'), GETDATE() ) as AmountRecievedYTD,
+       dbo.SumProjectInvoicePayments(c.CompanyID, c.ContractID,CreatedDateTime, GETDATE() ) as AmountRecievedPTD
+from CustomerBusinessDevOwner b
+join Contract c on b.CompanyID = c.CompanyID and c.CustomerID = b.CustomerBAccountID

+ 19 - 0
Triggers.sql

@@ -0,0 +1,19 @@
+IF OBJECT_ID ('dbo.Triggers','V') IS NOT NULL DROP VIEW dbo.Triggers
+GO 
+CREATE VIEW dbo.Triggers
+AS
+SELECT 
+    t.name AS TriggerName,
+    s.name AS SchemaName,
+    p.name AS ParentTableName,
+    m.definition AS TriggerDefinition
+FROM 
+    sys.triggers t
+JOIN 
+    sys.sql_modules m ON t.object_id = m.object_id
+JOIN 
+    sys.objects p ON t.parent_id = p.object_id
+JOIN 
+    sys.schemas s ON p.schema_id = s.schema_id
+WHERE 
+    t.is_ms_shipped = 0 -- Exclude system triggers

+ 18 - 0
UnAllocatedReleasedExpenses.sql

@@ -0,0 +1,18 @@
+IF OBJECT_ID ('dbo.UnAllocatedReleasedExpenses','V') IS NOT NULL DROP VIEW dbo.UnAllocatedReleasedExpenses
+GO 
+CREATE VIEW dbo.UnAllocatedReleasedExpenses
+AS
+SELECT 
+    ROW_NUMBER() OVER (
+        ORDER BY 
+            p.CompanyID, 
+            p.ProjectID
+    ) AS RowKey,
+ p.CompanyID as CompanyID, p.ProjectID, SUM(p.Amount) as amount
+ from PMTran p 
+ join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+ where pg.IsExpense = 1
+ and p.Released =1
+ and p.Allocated =0
+ group by p.CompanyID,
+          p.ProjectID

+ 468 - 0
UtilityFunctions.sql

@@ -0,0 +1,468 @@
+CREATE OR ALTER FUNCTION dbo.GetProjectOpenInvoices(@CompanyID int,
+@ContractID int) RETURNS decimal(19,
+6) AS
+BEGIN
+	DECLARE @OpenInvoices decimal(19,
+	6);
+
+select
+	@OpenInvoices = SUM(case when AR.DocType = 'INV' then AR.CuryOrigDocAmt else 0 end) - SUM(case when AR.DocType = 'CRM' then AR.CuryOrigDocAmt else 0 end)
+from
+	Contract con
+left join ARInvoice pmc on
+	con.CompanyID = pmc.CompanyID
+	and con.ContractID = pmc.ProjectID
+left join ARRegister AR on
+	pmc.CompanyID = AR.CompanyID
+	and pmc.DocType = AR.DocType
+	and pmc.RefNbr = AR.RefNbr
+where
+	con.CompanyID = @CompanyID
+	and con.ContractID = @ContractID
+	and ( AR.Status = 'N'
+		or AR.Status = 'C') RETURN IsNull(@OpenInvoices,
+	0.00)
+END
+
+GO
+
+CREATE OR ALTER FUNCTION dbo.SumReleasedTransactions(
+    @CompanyID int, 
+    @projectID int,  
+    @released int
+)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @BudAmount decimal(19,6);
+    SELECT @BudAmount = ISNULL(SUM(p.amount),0)
+    FROM PMTran p 
+     join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+    WHERE p.CompanyID = @CompanyID
+    AND p.ProjectID = @projectID
+    and p.Released = @released
+
+    RETURN @BudAmount;
+END;
+
+GO
+
+CREATE OR ALTER FUNCTION dbo.GetTransactions(
+    @CompanyID int, 
+    @projectID int, 
+    @expense int, 
+    @released int,
+    @allocated int 
+)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @BudAmount decimal(19,6);
+    SELECT @BudAmount = ISNULL(SUM(p.amount),0)
+    FROM PMTran p 
+     join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+    WHERE p.CompanyID = @CompanyID
+    AND p.ProjectID = @projectID
+    and pg.IsExpense = @expense
+    and p.Released = @released
+    and P.Allocated = @allocated
+
+    RETURN @BudAmount;
+END;
+
+GO
+
+CREATE OR ALTER FUNCTION dbo.GetRevisedBudgetAmount(
+    @CompanyID int, 
+    @projectID int, 
+    @type varchar(50) 
+)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @BudAmount decimal(19,6);
+
+    -- Using a common table expression (CTE) to split the @type string into individual characters
+    WITH TypeList AS (
+        SELECT value AS [Type]
+        FROM STRING_SPLIT(@type, ',')
+    )
+
+    SELECT @BudAmount = ISNULL(SUM(p.RevisedAmount),0)
+    FROM PMBudget p 
+    WHERE p.CompanyID = @CompanyID
+    AND p.ProjectID = @projectID
+    AND p.[Type] IN (SELECT [Type] FROM TypeList) -- Use the split values directly in the IN clause
+
+    RETURN @BudAmount;
+END;
+
+GO
+
+CREATE OR ALTER FUNCTION dbo.GetTopContractUserDefinedFieldDescription
+(
+    @companyID INT,
+    @recordID UNIQUEIDENTIFIER,
+    @attributeName NVARCHAR(128)
+)
+RETURNS NVARCHAR(MAX)
+AS
+BEGIN
+    DECLARE @result NVARCHAR(MAX);
+
+    -- Static SQL query (no dynamic SQL)
+    SELECT top 1 @result = cd.Description 
+    FROM ContractKvExt c
+    left join  CSAttributeDetail cd on cd.CompanyID = c.CompanyID and cd.AttributeID  = SUBSTRING(c.FieldName, 10, LEN(c.FieldName) - 9) and cd.ValueID = c.ValueString 
+    WHERE c.FieldName = @attributeName 
+      AND c.CompanyID = @companyID
+      AND c.RecordID = @recordID;
+
+    RETURN @result;
+END;
+
+GO
+
+CREATE OR ALTER FUNCTION dbo.ProjectRental
+(
+    @companyID INT,
+    @contractID INT
+)
+RETURNS BIT
+AS
+BEGIN
+    -- Return TRUE if 'rental' exists in the description, FALSE otherwise
+    IF EXISTS (
+        SELECT 1
+        FROM Contract c
+        JOIN ContractKvExt e ON c.CompanyID = e.CompanyID AND c.NoteID = e.RecordID
+        JOIN CSAttributeDetail d ON d.CompanyID = e.CompanyID AND e.ValueString = d.ValueID
+        WHERE c.CompanyID = @companyID
+        AND c.ContractID = @contractID
+        AND e.FieldName = 'AttributeCATEGORY'
+        AND CHARINDEX('rental', LOWER(d.Description)) > 0
+    )
+    BEGIN
+        RETURN 1; -- TRUE
+    END
+
+    RETURN 0; -- FALSE
+END;
+GO
+
+CREATE OR ALTER FUNCTION dbo.GetContractUserDefinedField
+(
+    @companyID INT,
+    @recordID UNIQUEIDENTIFIER,
+    @attributeName NVARCHAR(128),
+    @isANumber BIT
+)
+RETURNS NVARCHAR(MAX)
+AS
+BEGIN
+    DECLARE @result NVARCHAR(MAX);
+
+    -- Static SQL query (no dynamic SQL)
+    SELECT @result = ValueString 
+    FROM ContractKvExt
+    WHERE FieldName = @attributeName 
+      AND CompanyID = @companyID
+      AND RecordID = @recordID;
+
+    -- If isANumber is true, check if ValueString is a valid number and clean it up
+    IF @isANumber = 1
+    BEGIN
+        -- Remove any special characters except digits and '.'
+        IF ISNUMERIC(@result) = 0
+        BEGIN
+            -- If not numeric, set to NULL
+            SET @result = NULL;
+        END
+        ELSE
+        BEGIN
+            -- Strip out any characters except digits and '.'
+            WHILE PATINDEX('%[^0-9.]%', @result) > 0
+            BEGIN
+                SET @result = STUFF(@result, PATINDEX('%[^0-9.]%', @result), 1, '');
+            END
+        END
+    END
+
+    RETURN @result;
+END;
+
+GO
+
+CREATE or ALTER FUNCTION dbo.CountCustomerContracts(
+    @beginDate DATETIME,
+    @endDate DATETIME,
+    @companyId INT,
+    @customerId INT
+)
+RETURNS INT
+AS
+BEGIN
+    DECLARE @contractCount INT;
+
+    SELECT @contractCount = COUNT(*)
+    FROM Contract
+    WHERE CompanyId = @companyId
+      AND CustomerId = @customerId
+      AND CreatedDateTime <= @endDate
+      AND CreatedDateTime >= @beginDate 
+
+    RETURN @contractCount
+END;
+
+GO
+
+
+CREATE OR ALTER FUNCTION dbo.GetBudgetAmount(
+    @CompanyID int, 
+    @projectID int, 
+    @type varchar(50), -- Use varchar to handle multiple characters
+    @targetDate DateTime
+)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @BudAmount decimal(19,6);
+
+    -- Using a common table expression (CTE) to split the @type string into individual characters
+    WITH TypeList AS (
+        SELECT value AS [Type]
+        FROM STRING_SPLIT(@type, ',')
+    )
+
+    SELECT @BudAmount = ISNULL(SUM(p.Amount),0)
+    FROM PMBudget p 
+    WHERE p.CompanyID = @CompanyID
+    AND p.ProjectID = @projectID
+    AND p.[Type] IN (SELECT [Type] FROM TypeList) -- Use the split values directly in the IN clause
+    AND p.CreatedDateTime >= @targetDate; -- Filter by the current year
+
+    RETURN @BudAmount;
+END;
+
+GO
+
+CREATE OR Alter FUNCTION dbo.SumProjectInvoiceAmt(
+    @companyId INT,
+    @projectId INT,
+    @beginDate DATETIME,
+    @endDate DATETIME
+)
+RETURNS DECIMAL(18, 2)
+AS
+BEGIN
+    DECLARE @totalOrigDocAmt DECIMAL(18, 2);
+
+    SELECT @totalOrigDocAmt = ISNULL(SUM(i.CuryLineTotal), 0.00)
+    FROM ARRegister a 
+    join ARInvoice i on a.CompanyID = i.CompanyID and a.DocType = i.DocType and a.RefNbr = i.RefNbr 
+    WHERE a.CompanyID = @companyId
+      AND i.ProjectID = @projectId
+      AND a.DocType = 'INV'
+      AND a.DocDate >= @beginDate
+      AND a.DocDate <= @endDate;
+
+    RETURN @totalOrigDocAmt;
+END;
+
+GO
+
+
+CREATE OR Alter FUNCTION dbo.SumCustomerInvoiceAmt(
+    @companyId INT,
+    @customerId INT,
+    @beginDate DATETIME,
+    @endDate DATETIME
+)
+RETURNS DECIMAL(18, 2)
+AS
+BEGIN
+    DECLARE @totalOrigDocAmt DECIMAL(18, 2);
+
+    SELECT @totalOrigDocAmt = ISNULL(SUM(i.CuryLineTotal), 0.00)
+    FROM ARRegister a 
+    join ARInvoice i on a.CompanyID = i.CompanyID and a.DocType = i.DocType and a.RefNbr = i.RefNbr 
+    WHERE a.CompanyID = @companyId
+      AND a.CustomerID = @customerId
+      AND a.DocType = 'INV'
+      AND a.DocDate >= @beginDate
+      AND a.DocDate <= @endDate;
+
+    RETURN @totalOrigDocAmt;
+END;
+
+GO
+
+
+CREATE OR ALTER FUNCTION dbo.SumProjectInvoicePayments(
+    @companyId INT,
+    @projectId INT,
+    @startDate DATETIME,
+    @endDate DATETIME
+)
+RETURNS DECIMAL(18, 2)
+AS
+BEGIN
+    DECLARE @totalCuryAdjdAmt DECIMAL(18, 2);
+
+    SELECT @totalCuryAdjdAmt = ISNULL(SUM(a.CuryAdjdAmt),0.00)
+    FROM ARAdjust a 
+    join ARInvoice i on a.CompanyID = i.CompanyID and a.AdjdRefNbr = i.RefNbr and a.AdjdDocType = i.DocType 
+    WHERE a.CompanyID = @companyId
+     AND a.AdjdDocType = 'INV'
+      AND a.AdjgDocType = 'PMT'
+      AND i.ProjectID = @projectID
+      AND a.AdjgDocDate >= @startDate
+      AND a.AdjgDocDate <= @endDate;
+
+    RETURN @totalCuryAdjdAmt;
+END;
+
+GO
+
+
+CREATE OR ALTER FUNCTION dbo.SumCustomerInvoicePayments(
+    @companyId INT,
+    @customerId INT,
+    @startDate DATETIME,
+    @endDate DATETIME
+)
+RETURNS DECIMAL(18, 2)
+AS
+BEGIN
+    DECLARE @totalCuryAdjdAmt DECIMAL(18, 2);
+
+    SELECT @totalCuryAdjdAmt = ISNULL(SUM(a.CuryAdjdAmt),0.00)
+    FROM ARAdjust a 
+    WHERE a.CompanyID = @companyId
+     AND a.AdjdDocType = 'INV'
+      AND a.AdjgDocType = 'PMT'
+      AND a.CustomerID = @customerId
+      AND a.AdjgDocDate >= @startDate
+      AND a.AdjgDocDate <= @endDate;
+
+    RETURN @totalCuryAdjdAmt;
+END;
+
+GO 
+CREATE OR ALTER FUNCTION dbo.GetFirstDayOfPeriod(
+    @inputDate DATETIME,
+    @periodType VARCHAR(10)
+)
+RETURNS DATETIME
+AS
+BEGIN
+    DECLARE @firstDay DATETIME;
+
+    IF @periodType = 'WEEK'
+    BEGIN
+        -- Get the first day of the week (assuming Sunday as the first day)
+        SET @firstDay = DATEADD(day, -DATEDIFF(day, 0, @inputDate) % 7, CAST(@inputDate AS DATE));
+    END
+    ELSE IF @periodType = 'MONTH'
+    BEGIN
+        -- Get the first day of the month
+        SET @firstDay = DATEFROMPARTS(YEAR(@inputDate), MONTH(@inputDate), 1);
+    END
+    ELSE IF @periodType = 'QUARTER'
+    BEGIN
+        DECLARE @inputMonth INT;
+        DECLARE @quarterStartMonth INT;
+
+        SET @inputMonth = MONTH(@inputDate);
+
+        -- Determine the starting month of the quarter for the given date
+        IF @inputMonth IN (1, 2, 3)
+            SET @quarterStartMonth = 1;
+        ELSE IF @inputMonth IN (4, 5, 6)
+            SET @quarterStartMonth = 4;
+        ELSE IF @inputMonth IN (7, 8, 9)
+            SET @quarterStartMonth = 7;
+        ELSE
+            SET @quarterStartMonth = 10;
+
+        -- Construct the first day of the quarter for the given date
+        SET @firstDay = DATEFROMPARTS(YEAR(@inputDate), @quarterStartMonth, 1);
+    END
+    ELSE IF @periodType = 'YEAR'
+    BEGIN
+        -- Get the first day of the year
+        SET @firstDay = DATEFROMPARTS(YEAR(@inputDate), 1, 1);
+    END
+
+    RETURN CAST(@firstDay AS DATETIME);
+END;
+
+GO
+
+CREATE or ALTER FUNCTION dbo.GetCustomerRevenueByProjectDate(@CompanyID int, @CustomerID int, @targetDate DATETIME)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @RevAmount decimal(19,6);
+
+SELECT @RevAmount = SUM(p.Amount)
+FROM PMTran p 
+join Contract c on p.CompanyID = c.CompanyID and p.ProjectID = c.ContractID
+join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+WHERE p.CompanyID = @CompanyID
+AND c.CustomerID = @CustomerID
+and pg.[Type] = 'I'
+and pg.GroupID <> 25
+and c.CreatedDateTime >= @targetDate;
+    RETURN @RevAmount;
+END;
+
+GO
+
+CREATE or ALTER FUNCTION dbo.GetCustomerRevenueByProjectBilled(@CompanyID int, @CustomerID int, @targetDate DATETIME)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @RevAmount decimal(19,6);
+
+SELECT @RevAmount = SUM(p.Amount)
+FROM PMTran p 
+join Contract c on p.CompanyID = c.CompanyID and p.ProjectID = c.ContractID
+join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+WHERE p.CompanyID = @CompanyID
+AND c.CustomerID = @CustomerID
+and c.ContractID in (SELECT a.ProjectID from ARInvoice a where a.CompanyID= @CompanyID and a.DocType = 'INV' and a.InvoiceDate > @targetDate group by a.ProjectID)
+and pg.[Type] = 'I'
+and pg.GroupID <> 25
+and c.CreatedDateTime >= @targetDate;
+    RETURN @RevAmount;
+END;
+
+GO
+
+CREATE or ALTER FUNCTION dbo.GetCustomerRevenueByProjectPaid(@CompanyID int, @CustomerID int, @targetDate DATETIME)
+RETURNS decimal(19,6)
+AS
+BEGIN
+    DECLARE @RevAmount decimal(19,6);
+
+SELECT @RevAmount = SUM(p.Amount)
+FROM PMTran p 
+join Contract c on p.CompanyID = c.CompanyID and p.ProjectID = c.ContractID
+join PMAccountGroup pg on pg.CompanyID = p.CompanyID and p.AccountGroupID = pg.GroupID 
+WHERE p.CompanyID = @CompanyID
+AND c.CustomerID = @CustomerID
+and c.ContractID in ( 
+    SELECT i.ProjectID 
+    FROM ARAdjust a 
+    join ARInvoice i on a.CompanyID = i.CompanyID and a.AdjdDocType = i.DocType and a.AdjdRefNbr = i.RefNbr 
+    WHERE a.CompanyID = @CompanyID
+    AND a.AdjdDocType = 'INV'
+    AND a.AdjgDocType = 'PMT'
+    AND a.AdjgDocDate >=  @targetDate
+    group by i.ProjectID )
+and pg.[Type] = 'I'
+and pg.GroupID <> 25
+and c.CreatedDateTime >= @targetDate;
+    RETURN @RevAmount;
+END;

+ 19 - 0
ZeroBalanceInvoices.sql

@@ -0,0 +1,19 @@
+DROP VIEW IF EXISTS ZeroBalanceInvoices
+GO 
+Create View ZeroBalanceInvoices
+as
+SELECT i.CompanyID,
+	   r.DocDate, 
+	   i.DocType, 
+	   i.RefNbr, 
+	   r.CuryDocBal as InvoiceBalance,
+	   'AR' as Module,
+	   COUNT(*) as NumberOfPayments ,
+	   MAX(a.AdjgDocDate) as PaidOffDate ,
+	   DATEDIFF(day, r.DocDate, MAX(a.AdjgDocDate)) as DaysToPayOff
+from ARInvoice i 
+left join ARRegister r on i.CompanyID = r.CompanyID and i.DocType = r.DocType and i.RefNbr = r.RefNbr 
+left join ARAdjust a on i.CompanyID = a.CompanyID and i.DocType = a.AdjdDocType and i.RefNbr = a.AdjdRefNbr 
+where i.DocType = 'INV'
+and r.CuryDocBal = 0
+group by i.CompanyID,r.DocDate , i.DocType, i.RefNbr, r.CuryDocBal