This commit is contained in:
2021-06-24 20:13:22 +00:00
parent 1a98923cec
commit 370c301030

View File

@@ -777,13 +777,11 @@ namespace AyaNova.Biz
// (returns workorder consisting only of the path from child or grandchild up to header populated // (returns workorder consisting only of the path from child or grandchild up to header populated
// with display data for reporting) // with display data for reporting)
// //
internal async Task<WorkOrder> WorkOrderGetPartialAsync(AyaType ayaType, long id) internal async Task<WorkOrder> WorkOrderGetPartialAsync(AyaType ayaType, long id, bool includeWoItemDescendants)
{ {
//if it's the entire workorder just get, populate and return as normal //if it's the entire workorder just get, populate and return as normal
if (ayaType == AyaType.WorkOrder) if (ayaType == AyaType.WorkOrder)
{
return await WorkOrderGetAsync(id, true, false); return await WorkOrderGetAsync(id, true, false);
}
var wid = await GetWorkOrderIdFromRelativeAsync(ayaType, id, ct); var wid = await GetWorkOrderIdFromRelativeAsync(ayaType, id, ct);
@@ -795,53 +793,76 @@ namespace AyaNova.Biz
//explicit load subitems as required... //explicit load subitems as required...
//get the single workorder item required
var woitem = await ct.WorkOrderItem.AsNoTracking().SingleOrDefaultAsync(x => x.Id == wid.WorkOrderItemId);
switch (ayaType) WorkOrderItem woitem = null;
//it's requesting a fully populated woitem so do that here
if (includeWoItemDescendants)
{ {
case AyaType.WorkOrderItemExpense:
woitem.Expenses.Add(await ct.WorkOrderItemExpense.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); woitem = await ct.WorkOrderItem.AsSplitQuery()
break; .AsNoTracking()
case AyaType.WorkOrderItemLabor: .Include(wi => wi.Expenses)
woitem.Labors.Add(await ct.WorkOrderItemLabor.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); .Include(wi => wi.Labors)
break; .Include(wi => wi.Loans)
case AyaType.WorkOrderItemLoan: .Include(wi => wi.Parts)
woitem.Loans.Add(await ct.WorkOrderItemLoan.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); .Include(wi => wi.PartRequests)
break; .Include(wi => wi.ScheduledUsers)
case AyaType.WorkOrderItemPart: .Include(wi => wi.Tasks)
woitem.Parts.Add(await ct.WorkOrderItemPart.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); .Include(wi => wi.Travels)
break; .Include(wi => wi.Units)
case AyaType.WorkOrderItemPartRequest: .Include(wi => wi.OutsideServices)
woitem.PartRequests.Add(await ct.WorkOrderItemPartRequest.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); .SingleOrDefaultAsync(z => z.Id == id);
break; }
case AyaType.WorkOrderItemScheduledUser: else
woitem.ScheduledUsers.Add(await ct.WorkOrderItemScheduledUser.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); {
break;
case AyaType.WorkOrderItemTask:
woitem.Tasks.Add(await ct.WorkOrderItemTask.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemTravel:
woitem.Travels.Add(await ct.WorkOrderItemTravel.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemOutsideService: //get the single workorder item required
woitem.OutsideServices.Add(await ct.WorkOrderItemOutsideService.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); woitem = await ct.WorkOrderItem.AsNoTracking().SingleOrDefaultAsync(x => x.Id == wid.WorkOrderItemId);
break;
case AyaType.WorkOrderItemUnit: switch (ayaType)
woitem.Units.Add(await ct.WorkOrderItemUnit.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync()); {
break; case AyaType.WorkOrderItemExpense:
woitem.Expenses.Add(await ct.WorkOrderItemExpense.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemLabor:
woitem.Labors.Add(await ct.WorkOrderItemLabor.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemLoan:
woitem.Loans.Add(await ct.WorkOrderItemLoan.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemPart:
woitem.Parts.Add(await ct.WorkOrderItemPart.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemPartRequest:
woitem.PartRequests.Add(await ct.WorkOrderItemPartRequest.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemScheduledUser:
woitem.ScheduledUsers.Add(await ct.WorkOrderItemScheduledUser.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemTask:
woitem.Tasks.Add(await ct.WorkOrderItemTask.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemTravel:
woitem.Travels.Add(await ct.WorkOrderItemTravel.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemOutsideService:
woitem.OutsideServices.Add(await ct.WorkOrderItemOutsideService.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
case AyaType.WorkOrderItemUnit:
woitem.Units.Add(await ct.WorkOrderItemUnit.AsNoTracking().Where(z => z.Id == id).SingleOrDefaultAsync());
break;
}
} }
ret.Items.Add(woitem); ret.Items.Add(woitem);
// var goodPosts = context.Entry(blog)
// .Collection(b => b.Posts)
// .Query()
// .Where(p => p.Rating > 3)
// .ToList();
await WorkOrderPopulateVizFields(ret, false); await WorkOrderPopulateVizFields(ret, false);
return ret; return ret;
} }
@@ -865,10 +886,10 @@ namespace AyaNova.Biz
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
List<WorkOrder> batchResults = new List<WorkOrder>(); List<WorkOrder> batchResults = new List<WorkOrder>();
foreach (long batchId in batch) foreach (long batchId in batch)
batchResults.Add(await WorkOrderGetPartialAsync(dataListSelectedRequest.AType, batchId)); batchResults.Add(await WorkOrderGetPartialAsync(dataListSelectedRequest.AType, batchId, dataListSelectedRequest.IncludeWoItemDescendants));
//order the results back into original //order the results back into original
IEnumerable<WorkOrder> orderedList=null; IEnumerable<WorkOrder> orderedList = null;
switch (dataListSelectedRequest.AType) switch (dataListSelectedRequest.AType)
{ {
case AyaType.WorkOrder: case AyaType.WorkOrder: