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();
//order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
//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);
batchResults=null;
foreach (Contract w in orderedList)
{
if (!ReportRenderManager.KeepGoing(jobId)) return null;
await PopulateVizFields(w, ContractOverrideTypeEnumList, PreTrans);
await PopulateVizFields(w);
var jo = JObject.FromObject(w);
if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"]))
jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]);
ReportData.Add(jo);
}
orderedList=null;
}
vc.Clear();
return ReportData;
}
//request cache for viz fields
private VizCache vc = new VizCache();
//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)
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();
foreach (var i in o.ContractServiceRateOverrideItems)
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

View File

@@ -341,7 +341,6 @@ namespace AyaNova.Biz
//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
@@ -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)
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
batchResults = null;
foreach (Customer w in orderedList)
{
@@ -361,17 +360,34 @@ namespace AyaNova.Biz
jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]);
ReportData.Add(jo);
}
orderedList = null;
}
vc.Clear();
return ReportData;
}
//populate viz fields from provided object
private async Task PopulateVizFields(Customer o)
{
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)
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
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

View File

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

View File

@@ -798,12 +798,12 @@ namespace AyaNova.Biz
var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray();
List<Quote> batchResults = new List<Quote>();
while (idList.Any())
{
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
List<Quote> batchResults = new List<Quote>();
batchResults.Clear();
foreach (long batchId in batch)
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)
{
if (o.WorkOrderItemStatusId != null)
{
string value = vc.Get("woistatname", o.WorkOrderItemStatusId);
@@ -1958,7 +1958,7 @@ namespace AyaNova.Biz
//
private async Task ExpensePopulateVizFields(QuoteItemExpense o, bool calculateTotalsOnly = false)
{
if (calculateTotalsOnly == false)
{
if (o.UserId != null)
@@ -3156,7 +3156,7 @@ namespace AyaNova.Biz
private async Task OutsideServicePopulateVizFields(QuoteItemOutsideService o, bool calculateTotalsOnly = false)
{
if (calculateTotalsOnly == false)
{
{
if (o.UnitId != 0)
{
if (!vc.Has("unitserial", o.UnitId))
@@ -3933,7 +3933,7 @@ namespace AyaNova.Biz
//
private async Task ScheduledUserPopulateVizFields(QuoteItemScheduledUser o)
{
if (o.UserId != null)
if (o.UserId != null)
{
if (!vc.Has("user", o.UserId))
{
@@ -4502,7 +4502,7 @@ namespace AyaNova.Biz
//
private async Task TravelPopulateVizFields(QuoteItemTravel o, bool calculateTotalsOnly = false)
{
if (calculateTotalsOnly == false)
if (calculateTotalsOnly == false)
{
if (o.UserId != null)
{
@@ -4903,7 +4903,7 @@ namespace AyaNova.Biz
//
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;
if (!vc.Has("unitserial", o.UnitId))
{
@@ -4967,7 +4967,7 @@ namespace AyaNova.Biz
}
o.UnitViz = vc.Get("unitserial", 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)
{
o.AddressViz = vc.Get("unitaddr", o.UnitId);

View File

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