diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 3eb31540..62c4e70c 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -777,13 +777,11 @@ namespace AyaNova.Biz // (returns workorder consisting only of the path from child or grandchild up to header populated // with display data for reporting) // - internal async Task WorkOrderGetPartialAsync(AyaType ayaType, long id) + internal async Task WorkOrderGetPartialAsync(AyaType ayaType, long id, bool includeWoItemDescendants) { //if it's the entire workorder just get, populate and return as normal if (ayaType == AyaType.WorkOrder) - { return await WorkOrderGetAsync(id, true, false); - } var wid = await GetWorkOrderIdFromRelativeAsync(ayaType, id, ct); @@ -795,53 +793,76 @@ namespace AyaNova.Biz //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()); - 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; + + woitem = await ct.WorkOrderItem.AsSplitQuery() + .AsNoTracking() + .Include(wi => wi.Expenses) + .Include(wi => wi.Labors) + .Include(wi => wi.Loans) + .Include(wi => wi.Parts) + .Include(wi => wi.PartRequests) + .Include(wi => wi.ScheduledUsers) + .Include(wi => wi.Tasks) + .Include(wi => wi.Travels) + .Include(wi => wi.Units) + .Include(wi => wi.OutsideServices) + .SingleOrDefaultAsync(z => z.Id == id); + } + else + { + + + + + + + + //get the single workorder item required + woitem = await ct.WorkOrderItem.AsNoTracking().SingleOrDefaultAsync(x => x.Id == wid.WorkOrderItemId); + + switch (ayaType) + { + 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); - // var goodPosts = context.Entry(blog) - // .Collection(b => b.Posts) - // .Query() - // .Where(p => p.Rating > 3) - // .ToList(); - - - await WorkOrderPopulateVizFields(ret, false); return ret; } @@ -865,10 +886,10 @@ namespace AyaNova.Biz idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); List batchResults = new List(); 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 - IEnumerable orderedList=null; + IEnumerable orderedList = null; switch (dataListSelectedRequest.AType) { case AyaType.WorkOrder: