diff --git a/server/AyaNova/biz/ContractBiz.cs b/server/AyaNova/biz/ContractBiz.cs index 490389a0..b656be19 100644 --- a/server/AyaNova/biz/ContractBiz.cs +++ b/server/AyaNova/biz/ContractBiz.cs @@ -546,9 +546,7 @@ 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.ServiceRateItems) { if (!vc.Has("servicerate", i.ServiceRateId)) @@ -557,9 +555,7 @@ MULTIPLE discount / markup ITEMS } 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) { diff --git a/server/AyaNova/biz/CustomerNoteBiz.cs b/server/AyaNova/biz/CustomerNoteBiz.cs index 05b2f1a2..72addeba 100644 --- a/server/AyaNova/biz/CustomerNoteBiz.cs +++ b/server/AyaNova/biz/CustomerNoteBiz.cs @@ -192,6 +192,8 @@ namespace AyaNova.Biz var batchResults = await ct.CustomerNote.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync(); //order the results back into original var orderedList = from id in batch join z in batchResults on id equals z.Id select z; + batchResults = null; + foreach (CustomerNote w in orderedList) { if (!ReportRenderManager.KeepGoing(jobId)) return null; @@ -199,16 +201,26 @@ namespace AyaNova.Biz var jo = JObject.FromObject(w); ReportData.Add(jo); } + orderedList = null; } + vc.Clear(); return ReportData; } //populate viz fields from provided object private async Task PopulateVizFields(CustomerNote o) - { - o.CustomerViz = await ct.Customer.AsNoTracking().Where(x => x.Id == o.CustomerId).Select(x => x.Name).FirstOrDefaultAsync(); - o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); + { + if (!vc.Has("customer", o.CustomerId)) + vc.Add(await ct.Customer.AsNoTracking().Where(x => x.Id == o.CustomerId).Select(x => x.Name).FirstOrDefaultAsync(), "customer", o.CustomerId); + o.CustomerViz = vc.Get("customer", o.CustomerId); + + if (!vc.Has("user", o.UserId)) + vc.Add(await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(), "user", o.UserId); + o.UserViz = vc.Get("user", o.UserId); + } + //request cache for viz fields + private VizCache vc = new VizCache(); //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/server/AyaNova/biz/CustomerServiceRequestBiz.cs b/server/AyaNova/biz/CustomerServiceRequestBiz.cs index 1602bb6a..d6ca28f3 100644 --- a/server/AyaNova/biz/CustomerServiceRequestBiz.cs +++ b/server/AyaNova/biz/CustomerServiceRequestBiz.cs @@ -303,43 +303,65 @@ namespace AyaNova.Biz //order the results back into original var orderedList = from id in batch join z in batchResults on id equals z.Id select z; - //cache frequent viz data - //usertypes - var CustomerServiceRequestStatusEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( - StringUtil.TrimTypeName(typeof(CustomerServiceRequestStatus).ToString()), - UserTranslationId, - CurrentUserRoles); - var CustomerServiceRequestPriorityEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( - StringUtil.TrimTypeName(typeof(CustomerServiceRequestPriority).ToString()), - UserTranslationId, - CurrentUserRoles); - - + batchResults = null; foreach (CustomerServiceRequest w in orderedList) { if (!ReportRenderManager.KeepGoing(jobId)) return null; - await PopulateVizFields(w, CustomerServiceRequestStatusEnumList, CustomerServiceRequestPriorityEnumList); + 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(CustomerServiceRequest o, List customerServiceRequestStatusEnumList, List customerServiceRequestPriorityEnumList) + private async Task PopulateVizFields(CustomerServiceRequest o) { + if (customerServiceRequestStatusEnumList == null) + customerServiceRequestStatusEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( + StringUtil.TrimTypeName(typeof(CustomerServiceRequestStatus).ToString()), + UserTranslationId, + CurrentUserRoles); + if (customerServiceRequestPriorityEnumList == null) + customerServiceRequestPriorityEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( + StringUtil.TrimTypeName(typeof(CustomerServiceRequestPriority).ToString()), + UserTranslationId, + CurrentUserRoles); + if (o.UnitId != null) - o.UnitViz = await ct.Unit.AsNoTracking().Where(x => x.Id == o.UnitId).Select(x => x.Serial).FirstOrDefaultAsync(); - o.CustomerViz = await ct.Customer.AsNoTracking().Where(x => x.Id == o.CustomerId).Select(x => x.Name).FirstOrDefaultAsync(); + { + if (!vc.Has("unitserial", o.UnitId)) + vc.Add(await ct.Unit.AsNoTracking().Where(x => x.Id == o.UnitId).Select(x => x.Serial).FirstOrDefaultAsync(), "unitserial", o.UnitId); + o.UnitViz = vc.Get("unitserial", o.UnitId); + } + + if (!vc.Has("customer", o.CustomerId)) + vc.Add(await ct.Customer.AsNoTracking().Where(x => x.Id == o.CustomerId).Select(x => x.Name).FirstOrDefaultAsync(), "customer", o.CustomerId); + o.CustomerViz = vc.Get("customer", o.CustomerId); + if (o.WorkOrderItemId != null) - o.WorkOrderSerialViz = (await WorkOrderBiz.GetWorkOrderSerialFromRelativeAsync(AyaType.WorkOrderItem, (long)o.WorkOrderItemId, ct)).ToString(); - o.RequestedByUserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.RequestedByUserId).Select(x => x.Name).FirstOrDefaultAsync(); + { + if (!vc.Has("woserial", o.WorkOrderItemId)) + vc.Add((await WorkOrderBiz.GetWorkOrderSerialFromRelativeAsync(AyaType.WorkOrderItem, (long)o.WorkOrderItemId, ct)).ToString(), "woserial", o.WorkOrderItemId); + o.WorkOrderSerialViz = vc.Get("woserial", o.WorkOrderItemId); + } + + if (!vc.Has("user", o.RequestedByUserId)) + vc.Add(await ct.User.AsNoTracking().Where(x => x.Id == o.RequestedByUserId).Select(x => x.Name).FirstOrDefaultAsync(), "user", o.RequestedByUserId); + o.RequestedByUserViz = vc.Get("user", o.RequestedByUserId); + o.StatusViz = customerServiceRequestStatusEnumList.Where(x => x.Id == (long)o.Status).Select(x => x.Name).First(); o.PriorityViz = customerServiceRequestPriorityEnumList.Where(x => x.Id == (long)o.Priority).Select(x => x.Name).First(); } + private List customerServiceRequestStatusEnumList = null; + private List customerServiceRequestPriorityEnumList = null; //////////////////////////////////////////////////////////////////////////////////////////////// // IMPORT EXPORT diff --git a/server/AyaNova/biz/HeadOfficeBiz.cs b/server/AyaNova/biz/HeadOfficeBiz.cs index 3167e54c..79dd3d76 100644 --- a/server/AyaNova/biz/HeadOfficeBiz.cs +++ b/server/AyaNova/biz/HeadOfficeBiz.cs @@ -218,7 +218,7 @@ namespace AyaNova.Biz .AddText(obj.Address) .AddText(obj.City) .AddText(obj.Region) - .AddText(obj.Country) + .AddText(obj.Country) .AddCustomFields(obj.CustomFields); } @@ -298,6 +298,7 @@ namespace AyaNova.Biz var batchResults = await ct.HeadOffice.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync(); //order the results back into original var orderedList = from id in batch join z in batchResults on id equals z.Id select z; + batchResults = null; foreach (HeadOffice w in orderedList) { if (!ReportRenderManager.KeepGoing(jobId)) return null; @@ -307,15 +308,25 @@ namespace AyaNova.Biz 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(HeadOffice o) { 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); + } }