This commit is contained in:
2021-12-29 20:41:28 +00:00
parent ed62274b42
commit 5255145cd0
5 changed files with 71 additions and 34 deletions

View File

@@ -500,29 +500,27 @@ MULTIPLE discount / markup ITEMS
.ToArrayAsync(); .ToArrayAsync();
//order the results back into original //order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z; var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
batchResults=null;
//cache enum list
var ContractOverrideTypeEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList(
StringUtil.TrimTypeName(typeof(ContractOverrideType).ToString()),
UserTranslationId,
CurrentUserRoles);
//cache translations needed
var PreTrans = await TranslationBiz.GetSubsetStaticAsync(new List<string> { "TimeSpanDays", "TimeSpanHours", "TimeSpanMinutes", "TimeSpanSeconds" }, UserTranslationId);
foreach (Contract w in orderedList) foreach (Contract w in orderedList)
{ {
if (!ReportRenderManager.KeepGoing(jobId)) return null; if (!ReportRenderManager.KeepGoing(jobId)) return null;
await PopulateVizFields(w, ContractOverrideTypeEnumList, PreTrans); await PopulateVizFields(w);
var jo = JObject.FromObject(w); var jo = JObject.FromObject(w);
if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"])) if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"]))
jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]);
ReportData.Add(jo); ReportData.Add(jo);
} }
orderedList=null;
} }
vc.Clear();
return ReportData; return ReportData;
} }
//request cache for viz fields
private VizCache vc = new VizCache();
//populate viz fields from provided object //populate viz fields from provided object
private async Task PopulateVizFields(Contract o, List<NameIdItem> contractOverrideTypeEnumList = null, Dictionary<string, string> preTrans = null) private async Task PopulateVizFields(Contract o)
{ {
if (contractOverrideTypeEnumList == null) if (contractOverrideTypeEnumList == null)
contractOverrideTypeEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( contractOverrideTypeEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList(
@@ -548,12 +546,32 @@ MULTIPLE discount / markup ITEMS
i.OverrideTypeViz = contractOverrideTypeEnumList.Where(x => x.Id == (long)i.OverrideType).Select(x => x.Name).First(); i.OverrideTypeViz = contractOverrideTypeEnumList.Where(x => x.Id == (long)i.OverrideType).Select(x => x.Name).First();
foreach (var i in o.ContractServiceRateOverrideItems) foreach (var i in o.ContractServiceRateOverrideItems)
i.OverrideTypeViz = contractOverrideTypeEnumList.Where(x => x.Id == (long)i.OverrideType).Select(x => x.Name).First(); i.OverrideTypeViz = contractOverrideTypeEnumList.Where(x => x.Id == (long)i.OverrideType).Select(x => x.Name).First();
foreach (var i in o.ServiceRateItems)
i.ServiceRateViz = await ct.ServiceRate.AsNoTracking().Where(x => x.Id == i.ServiceRateId).Select(x => x.Name).FirstOrDefaultAsync();
foreach (var i in o.TravelRateItems)
i.TravelRateViz = await ct.TravelRate.AsNoTracking().Where(x => x.Id == i.TravelRateId).Select(x => x.Name).FirstOrDefaultAsync();
}
// foreach (var i in o.ServiceRateItems)
// i.ServiceRateViz = await ct.ServiceRate.AsNoTracking().Where(x => x.Id == i.ServiceRateId).Select(x => x.Name).FirstOrDefaultAsync();
foreach (var i in o.ServiceRateItems)
{
if (!vc.Has("servicerate", i.ServiceRateId))
{
vc.Add(await ct.ServiceRate.AsNoTracking().Where(x => x.Id == i.ServiceRateId).Select(x => x.Name).FirstOrDefaultAsync(), "servicerate", i.ServiceRateId);
}
i.ServiceRateViz = vc.Get("servicerate", i.ServiceRateId);
}
// foreach (var i in o.TravelRateItems)
// i.TravelRateViz = await ct.TravelRate.AsNoTracking().Where(x => x.Id == i.TravelRateId).Select(x => x.Name).FirstOrDefaultAsync();
foreach (var i in o.TravelRateItems)
{
if (!vc.Has("travelrate", i.TravelRateId))
{
vc.Add(await ct.TravelRate.AsNoTracking().Where(x => x.Id == i.TravelRateId).Select(x => x.Name).FirstOrDefaultAsync(), "travelrate", i.TravelRateId);
}
i.TravelRateViz = vc.Get("travelrate", i.TravelRateId);
}
}
private List<NameIdItem> contractOverrideTypeEnumList = null;
private Dictionary<string, string> preTrans = null;
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT

View File

@@ -341,7 +341,6 @@ namespace AyaNova.Biz
//query for this batch, comes back in db natural order unfortunately //query for this batch, comes back in db natural order unfortunately
var batchResults = await ct.Customer.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync(); var batchResults = await ct.Customer.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync();
//order the results back into original //order the results back into original
//What is happening here: //What is happening here:
//for performance the query is batching a bunch at once by fetching a block of items from the sql server //for performance the query is batching a bunch at once by fetching a block of items from the sql server
@@ -350,7 +349,7 @@ namespace AyaNova.Biz
//This would not be necessary if just fetching each one at a time individually (like in workorder get report data) //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; var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
batchResults = null;
foreach (Customer w in orderedList) foreach (Customer w in orderedList)
{ {
@@ -361,17 +360,34 @@ namespace AyaNova.Biz
jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]);
ReportData.Add(jo); ReportData.Add(jo);
} }
orderedList = null;
} }
vc.Clear();
return ReportData; return ReportData;
} }
//populate viz fields from provided object //populate viz fields from provided object
private async Task PopulateVizFields(Customer o) private async Task PopulateVizFields(Customer o)
{ {
if (o.HeadOfficeId != null) if (o.HeadOfficeId != null)
o.HeadOfficeViz = await ct.HeadOffice.AsNoTracking().Where(x => x.Id == o.HeadOfficeId).Select(x => x.Name).FirstOrDefaultAsync(); {
if (!vc.Has("headoffice", o.HeadOfficeId))
{
vc.Add(await ct.HeadOffice.AsNoTracking().Where(x => x.Id == o.HeadOfficeId).Select(x => x.Name).FirstOrDefaultAsync(), "headoffice", o.HeadOfficeId);
}
o.HeadOfficeViz = vc.Get("headoffice", o.HeadOfficeId);
}
if (o.ContractId != null) if (o.ContractId != null)
o.ContractViz = await ct.Contract.AsNoTracking().Where(x => x.Id == o.ContractId).Select(x => x.Name).FirstOrDefaultAsync(); {
if (!vc.Has("contract", o.ContractId))
{
vc.Add(await ct.Contract.AsNoTracking().Where(x => x.Id == o.ContractId).Select(x => x.Name).FirstOrDefaultAsync(), "contract", o.ContractId);
}
o.ContractViz = vc.Get("contract", o.ContractId);
}
//Too slow and complex for EF Core //Too slow and complex for EF Core
using (var command = ct.Database.GetDbConnection().CreateCommand()) using (var command = ct.Database.GetDbConnection().CreateCommand())
@@ -396,6 +412,9 @@ namespace AyaNova.Biz
} }
} }
//request cache for viz fields
private VizCache vc = new VizCache();
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT

View File

@@ -822,12 +822,12 @@ namespace AyaNova.Biz
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
List<PM> batchResults = new List<PM>();
while (idList.Any()) while (idList.Any())
{ {
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
List<PM> batchResults = new List<PM>(); batchResults.Clear();
foreach (long batchId in batch) foreach (long batchId in batch)
batchResults.Add(await PMGetPartialAsync(dataListSelectedRequest.AType, batchId, dataListSelectedRequest.IncludeWoItemDescendants, true)); batchResults.Add(await PMGetPartialAsync(dataListSelectedRequest.AType, batchId, dataListSelectedRequest.IncludeWoItemDescendants, true));

View File

@@ -798,12 +798,12 @@ namespace AyaNova.Biz
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
List<Quote> batchResults = new List<Quote>();
while (idList.Any()) while (idList.Any())
{ {
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
List<Quote> batchResults = new List<Quote>(); batchResults.Clear();
foreach (long batchId in batch) foreach (long batchId in batch)
batchResults.Add(await QuoteGetPartialAsync(dataListSelectedRequest.AType, batchId, dataListSelectedRequest.IncludeWoItemDescendants, true)); batchResults.Add(await QuoteGetPartialAsync(dataListSelectedRequest.AType, batchId, dataListSelectedRequest.IncludeWoItemDescendants, true));
@@ -1639,7 +1639,7 @@ namespace AyaNova.Biz
// //
private async Task ItemPopulateVizFields(QuoteItem o, bool populateForReporting) private async Task ItemPopulateVizFields(QuoteItem o, bool populateForReporting)
{ {
if (o.WorkOrderItemStatusId != null) if (o.WorkOrderItemStatusId != null)
{ {
string value = vc.Get("woistatname", o.WorkOrderItemStatusId); string value = vc.Get("woistatname", o.WorkOrderItemStatusId);
@@ -1958,7 +1958,7 @@ namespace AyaNova.Biz
// //
private async Task ExpensePopulateVizFields(QuoteItemExpense o, bool calculateTotalsOnly = false) private async Task ExpensePopulateVizFields(QuoteItemExpense o, bool calculateTotalsOnly = false)
{ {
if (calculateTotalsOnly == false) if (calculateTotalsOnly == false)
{ {
if (o.UserId != null) if (o.UserId != null)
@@ -3156,7 +3156,7 @@ namespace AyaNova.Biz
private async Task OutsideServicePopulateVizFields(QuoteItemOutsideService o, bool calculateTotalsOnly = false) private async Task OutsideServicePopulateVizFields(QuoteItemOutsideService o, bool calculateTotalsOnly = false)
{ {
if (calculateTotalsOnly == false) if (calculateTotalsOnly == false)
{ {
if (o.UnitId != 0) if (o.UnitId != 0)
{ {
if (!vc.Has("unitserial", o.UnitId)) if (!vc.Has("unitserial", o.UnitId))
@@ -3933,7 +3933,7 @@ namespace AyaNova.Biz
// //
private async Task ScheduledUserPopulateVizFields(QuoteItemScheduledUser o) private async Task ScheduledUserPopulateVizFields(QuoteItemScheduledUser o)
{ {
if (o.UserId != null) if (o.UserId != null)
{ {
if (!vc.Has("user", o.UserId)) if (!vc.Has("user", o.UserId))
{ {
@@ -4502,7 +4502,7 @@ namespace AyaNova.Biz
// //
private async Task TravelPopulateVizFields(QuoteItemTravel o, bool calculateTotalsOnly = false) private async Task TravelPopulateVizFields(QuoteItemTravel o, bool calculateTotalsOnly = false)
{ {
if (calculateTotalsOnly == false) if (calculateTotalsOnly == false)
{ {
if (o.UserId != null) if (o.UserId != null)
{ {
@@ -4903,7 +4903,7 @@ namespace AyaNova.Biz
// //
private async Task UnitPopulateVizFields(QuoteItemUnit o, bool populateForReporting) private async Task UnitPopulateVizFields(QuoteItemUnit o, bool populateForReporting)
{ {
//see if it's in the cache already, populate the cache fully if not //see if it's in the cache already, populate the cache fully if not
bool UnitHasModel = false; bool UnitHasModel = false;
if (!vc.Has("unitserial", o.UnitId)) if (!vc.Has("unitserial", o.UnitId))
{ {
@@ -4967,7 +4967,7 @@ namespace AyaNova.Biz
} }
o.UnitViz = vc.Get("unitserial", o.UnitId); o.UnitViz = vc.Get("unitserial", o.UnitId);
o.UnitDescriptionViz = vc.Get("unitdesc", o.UnitId); o.UnitDescriptionViz = vc.Get("unitdesc", o.UnitId);
// o.UnitMeteredViz = vc.GetAsBool("unitmetered", o.UnitId); // o.UnitMeteredViz = vc.GetAsBool("unitmetered", o.UnitId);
if (populateForReporting) if (populateForReporting)
{ {
o.AddressViz = vc.Get("unitaddr", o.UnitId); o.AddressViz = vc.Get("unitaddr", o.UnitId);

View File

@@ -949,13 +949,13 @@ namespace AyaNova.Biz
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
List<WorkOrder> batchResults = new List<WorkOrder>();
while (idList.Any()) while (idList.Any())
{ {
if (!ReportRenderManager.KeepGoing(jobId)) return null; if (!ReportRenderManager.KeepGoing(jobId)) return null;
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
List<WorkOrder> batchResults = new List<WorkOrder>(); batchResults.Clear();
foreach (long batchId in batch) foreach (long batchId in batch)
{ {
if (!ReportRenderManager.KeepGoing(jobId)) return null; if (!ReportRenderManager.KeepGoing(jobId)) return null;
@@ -986,9 +986,9 @@ namespace AyaNova.Biz
} }
ReportData.Add(jo); ReportData.Add(jo);
} }
batchResults.Clear();
} }
vc.Clear(); vc.Clear();
oc.Clear(); oc.Clear();
return ReportData; return ReportData;