|
|
@@ -154,9 +154,23 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
columns)
|
|
|
.Add(
|
|
|
Filter<Assignment>.Where(x => x.Job.ID).IsEqualTo(JobID),
|
|
|
- Columns.None<Assignment>().Add(x => x.JobScope.ID)
|
|
|
+ Columns.None<Assignment>()
|
|
|
+ .Add(x => x.JobScope.ID)
|
|
|
.Add(x => x.Actual.Duration)
|
|
|
.Add(x => x.Employee.HourlyRate))
|
|
|
+ .Add(
|
|
|
+ Filter<BillLine>.And(
|
|
|
+ // Either the bill or the linked order item attached to this job.
|
|
|
+ BillFilter(Filter<BillLine>.Where(x => x.Job.ID).IsEqualTo(JobID)
|
|
|
+ .Or(x => x.OrderItem.Job.ID).IsEqualTo(JobID)),
|
|
|
+ Filter<BillLine>.Where(x => x.JobScope.ID).IsNotEqualTo(Guid.Empty)
|
|
|
+ .Or(x => x.OrderItem.JobScope.ID).IsNotEqualTo(Guid.Empty)),
|
|
|
+ Columns.None<BillLine>()
|
|
|
+ .Add(x => x.ID)
|
|
|
+ .Add(x => x.ExTax)
|
|
|
+ .Add(x => x.JobScope.ID)
|
|
|
+ .Add(x => x.OrderItem.ID)
|
|
|
+ .Add(x => x.OrderItem.JobScope.ID))
|
|
|
.Add(
|
|
|
Filter<Invoice>.Where(x => x.Job.ID).IsEqualTo(JobID),
|
|
|
Columns.None<Invoice>()
|
|
|
@@ -183,6 +197,9 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
var assignments = results.GetObjects<Assignment>()
|
|
|
.GroupBy(x => x.JobScope.ID)
|
|
|
.ToDictionary(x => x.Key, x => x.Sum(x => x.Actual.Duration.TotalHoursDecimal() * x.Employee.HourlyRate));
|
|
|
+ var billLines = results.GetObjects<BillLine>()
|
|
|
+ .GroupBy(x => x.OrderItem.ID != Guid.Empty ? x.OrderItem.JobScope.ID : x.JobScope.ID)
|
|
|
+ .ToDictionary(x => x.Key, x => x.Sum(x => x.ExTax));
|
|
|
|
|
|
Invoices = results.GetArray<Invoice>();
|
|
|
|
|
|
@@ -198,7 +215,7 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
|
|
|
var prev = Invoice.ID == Guid.Empty
|
|
|
? InvoiceLines.Where(x => x.Scope.ID == scope.ID)
|
|
|
- : InvoiceLines.Where(x => x.Scope.ID == scope.ID && x.Invoice.Date < Invoice.Date);
|
|
|
+ : InvoiceLines.Where(x => x.Scope.ID == scope.ID && (x.Invoice.Date < Invoice.Date || x.Invoice.Date == Invoice.Date && x.Invoice.Number < Invoice.Number));
|
|
|
|
|
|
var current = InvoiceLines.Where(x => x.Scope.ID == scope.ID && x.Invoice.ID == Invoice.ID);
|
|
|
|
|
|
@@ -215,6 +232,7 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
|
|
|
newItem.Materials = scope.MaterialsExTax;
|
|
|
newItem.Labour = assignments.GetValueOrDefault(scope.ID);
|
|
|
+ newItem.Expenses = billLines.GetValueOrDefault(scope.ID);
|
|
|
newItem.GLCodeID = Job.Account.ID != Guid.Empty
|
|
|
? Job.Account.GLCode.ID
|
|
|
: Job.Customer.GLCode.ID;
|
|
|
@@ -227,6 +245,21 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
_loadedData = true;
|
|
|
}
|
|
|
|
|
|
+ public static Filter<BillLine> BillFilter(Filter<BillLine> jobFilter)
|
|
|
+ {
|
|
|
+ return Filter<BillLine>.Or(
|
|
|
+ jobFilter,
|
|
|
+ // Not attached to anything
|
|
|
+ Filter<BillLine>.Where(x => x.Product.ID).IsEqualTo(Guid.Empty)
|
|
|
+ .And(x => x.OrderItem.ID).IsEqualTo(Guid.Empty),
|
|
|
+ // Attached to a product
|
|
|
+ Filter<BillLine>.Where(x => x.Product.ID).IsNotEqualTo(Guid.Empty)
|
|
|
+ .And(x => x.Product.NonStock).IsEqualTo(true),
|
|
|
+ // Attached to a non-stock purchase-order
|
|
|
+ Filter<BillLine>.Where(x => x.OrderItem.ID).IsNotEqualTo(Guid.Empty)
|
|
|
+ .And(x => x.OrderItem.Product.NonStock).IsEqualTo(true));
|
|
|
+ }
|
|
|
+
|
|
|
protected override void Changed()
|
|
|
{
|
|
|
base.Changed();
|
|
|
@@ -367,6 +400,13 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
var window = DynamicGridUtils.CreateGridWindow($"Labour", grid);
|
|
|
window.ShowDialog();
|
|
|
}
|
|
|
+ else if(gridColumn.ColumnName.EqualsProperty<ProgressClaim>(x => x.Expenses))
|
|
|
+ {
|
|
|
+ var grid = new ProgressClaimExpensesGrid(claim, Invoice, Job);
|
|
|
+
|
|
|
+ var window = DynamicGridUtils.CreateGridWindow($"Expenses", grid);
|
|
|
+ window.ShowDialog();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -378,6 +418,7 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
|
|
|
columns.Add<ProgressClaim>(x => x.JobScope.Description, 0, "Description", "", Alignment.MiddleCenter);
|
|
|
columns.Add<ProgressClaim>(x => x.Materials, 80, "Material $", "", Alignment.MiddleCenter);
|
|
|
columns.Add<ProgressClaim>(x => x.Labour, 80, "Labour $", "", Alignment.MiddleCenter);
|
|
|
+ columns.Add<ProgressClaim>(x => x.Expenses, 80, "Expenses $", "", Alignment.MiddleCenter);
|
|
|
columns.Add<ProgressClaim>(x => x.JobScope.ExTax, 100, "Quote $", "", Alignment.MiddleCenter);
|
|
|
columns.Add<ProgressClaim>(x => x.PreviouslyClaimed, 100, "Prev $", "C2", Alignment.MiddleCenter);
|
|
|
columns.Add<ProgressClaim>(x => x.PreviouslyClaimedPercent, 80, "Prev %", "", Alignment.MiddleCenter);
|