This commit is contained in:
@@ -363,10 +363,21 @@ namespace AyaNova.Biz
|
||||
{
|
||||
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
|
||||
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
|
||||
|
||||
//query for this batch, comes back in db natural order unfortunately
|
||||
var batchResults = await ct.Customer.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync();
|
||||
|
||||
|
||||
//order the results back into original
|
||||
//What is happening here:
|
||||
//for performance the query is batching a bunch at once by fetching a block of items from the sql server
|
||||
//however it's returning in db order which is often not the order the id list is in
|
||||
//so it needs to be sorted back into the same order as the ide list
|
||||
//This would not be necessary if just fetching each one at a time individually (like in workorder get report data)
|
||||
|
||||
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
||||
|
||||
|
||||
foreach (Customer w in orderedList)
|
||||
{
|
||||
await PopulateVizFields(w);
|
||||
|
||||
@@ -874,7 +874,6 @@ namespace AyaNova.Biz
|
||||
{
|
||||
//workorder reports for entire workorder or just sub parts all go through here
|
||||
//if the ayatype is a descendant of the workorder then only the portion of the workorder from that descendant directly up to the header will be populated and returned
|
||||
|
||||
//however if the report template has includeWoItemDescendants=true then the woitems is fully populated
|
||||
|
||||
var idList = dataListSelectedRequest.SelectedRowIds;
|
||||
@@ -888,49 +887,65 @@ namespace AyaNova.Biz
|
||||
foreach (long batchId in batch)
|
||||
batchResults.Add(await WorkOrderGetPartialAsync(dataListSelectedRequest.AType, batchId, dataListSelectedRequest.IncludeWoItemDescendants));
|
||||
|
||||
#region unnecessary shit removed
|
||||
//This is unnecessary because the re-ordering bit is only needed when the records are fetched in batches directly from the sql server as they
|
||||
//return in db natural order and need to be put back into the same order as the ID List
|
||||
//Here in the workorder however, this code is fetching individually one at a time so they are always going to be in the correct order so this re-ordering is unnecessary
|
||||
//I'm keeping this here for future reference when I ineveitably wonder what the hell is happening here :)
|
||||
|
||||
|
||||
//order the results back into original
|
||||
IEnumerable<WorkOrder> orderedList = null;
|
||||
switch (dataListSelectedRequest.AType)
|
||||
{
|
||||
case AyaType.WorkOrder:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItem:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemExpense:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Expenses[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemLabor:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Labors[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemLoan:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Loans[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemPart:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Parts[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemPartRequest:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].PartRequests[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemScheduledUser:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].ScheduledUsers[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemTask:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Tasks[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemTravel:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Travels[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemOutsideService:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].OutsideServices[0].Id select z;
|
||||
break;
|
||||
case AyaType.WorkOrderItemUnit:
|
||||
orderedList = from id in batch join z in batchResults on id equals z.Items[0].Units[0].Id select z;
|
||||
break;
|
||||
}
|
||||
//IEnumerable<WorkOrder> orderedList = null;
|
||||
|
||||
foreach (WorkOrder w in orderedList)
|
||||
//TODO: WHAT IS THIS BATCH RESULT ORDERING CODE REALLY DOING AND CAN IT BE REMOVED / CHANGED????
|
||||
//isn't it alredy working in order? If not maybe simply reversed so reverse it again before querying above or...??
|
||||
|
||||
//todo: can't assume the grandchild item is index 0 anymore as we might have multiple of them if includedescendants is true
|
||||
//so need to find index first then do this
|
||||
// switch (dataListSelectedRequest.AType)
|
||||
// {
|
||||
// case AyaType.WorkOrder:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItem:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemExpense:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Expenses[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemLabor:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Labors[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemLoan:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Loans[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemPart:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Parts[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemPartRequest:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].PartRequests[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemScheduledUser:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].ScheduledUsers[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemTask:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Tasks[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemTravel:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Travels[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemOutsideService:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].OutsideServices[0].Id select z;
|
||||
// break;
|
||||
// case AyaType.WorkOrderItemUnit:
|
||||
// orderedList = from id in batch join z in batchResults on id equals z.Items[0].Units[0].Id select z;
|
||||
// break;
|
||||
// }
|
||||
|
||||
//foreach (WorkOrder w in orderedList)
|
||||
#endregion unnecessary shit
|
||||
|
||||
foreach (WorkOrder w in batchResults)
|
||||
{
|
||||
var jo = JObject.FromObject(w);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user