From cd76c3bd0f50f4f8ab783bc6d348716bb489ff29 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 23 Dec 2021 23:53:21 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/biz/PMBiz.cs | 155 ++++++++++++++++++++++++++++-------- 2 files changed, 124 insertions(+), 33 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index e3573e4c..ecafe7b2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -48,7 +48,7 @@ "AYANOVA_DATA_PATH": "c:\\temp\\ravendata", "AYANOVA_USE_URLS": "http://*:7575;", "AYANOVA_SERVER_TEST_MODE": "false", - "AYANOVA_REPORT_RENDERING_TIMEOUT":"7", + "AYANOVA_REPORT_RENDERING_TIMEOUT":"6", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "large", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\" }, diff --git a/server/AyaNova/biz/PMBiz.cs b/server/AyaNova/biz/PMBiz.cs index b37e0a2e..b0e4cf26 100644 --- a/server/AyaNova/biz/PMBiz.cs +++ b/server/AyaNova/biz/PMBiz.cs @@ -3237,7 +3237,7 @@ namespace AyaNova.Biz else Tax = (TaxCode)oc.Get("tax", o.TaxPartSaleId); } - + if (Tax != null) o.TaxCodeViz = Tax.Name; @@ -3602,9 +3602,22 @@ namespace AyaNova.Biz private async Task ScheduledUserPopulateVizFields(PMItemScheduledUser o) { if (o.UserId != null) - o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); + { + 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); + } + if (o.ServiceRateId != null) - o.ServiceRateViz = await ct.ServiceRate.AsNoTracking().Where(x => x.Id == o.ServiceRateId).Select(x => x.Name).FirstOrDefaultAsync(); + { + if (!vc.Has("servicerate", o.ServiceRateId)) + { + vc.Add(await ct.ServiceRate.AsNoTracking().Where(x => x.Id == o.ServiceRateId).Select(x => x.Name).FirstOrDefaultAsync(), "servicerate", o.ServiceRateId); + } + o.ServiceRateViz = vc.Get("servicerate", o.ServiceRateId); + } } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -3855,10 +3868,16 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// //VIZ POPULATE // - private async Task TaskPopulateVizFields(PMItemTask o, List taskCompletionTypeEnumList = null) + private async Task TaskPopulateVizFields(PMItemTask o) { if (o.CompletedByUserId != null) - o.CompletedByUserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.CompletedByUserId).Select(x => x.Name).FirstOrDefaultAsync(); + { + if (!vc.Has("user", o.CompletedByUserId)) + { + vc.Add(await ct.User.AsNoTracking().Where(x => x.Id == o.CompletedByUserId).Select(x => x.Name).FirstOrDefaultAsync(), "user", o.CompletedByUserId); + } + o.CompletedByUserViz = vc.Get("user", o.CompletedByUserId); + } if (taskCompletionTypeEnumList == null) taskCompletionTypeEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( @@ -3867,8 +3886,8 @@ namespace AyaNova.Biz CurrentUserRoles); o.StatusViz = taskCompletionTypeEnumList.Where(x => x.Id == (long)o.Status).Select(x => x.Name).First(); - } + private List taskCompletionTypeEnumList = null; //////////////////////////////////////////////////////////////////////////////////////////////// //VALIDATION @@ -4130,20 +4149,44 @@ namespace AyaNova.Biz // private async Task TravelPopulateVizFields(PMItemTravel o, bool calculateTotalsOnly = false) { - if (calculateTotalsOnly == false) + if (calculateTotalsOnly == false) { if (o.UserId != null) - o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); + { + 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); + } + } TravelRate Rate = null; if (o.TravelRateId != null) { - Rate = await ct.TravelRate.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.TravelRateId); + if (!oc.Has("travelrate", o.TravelRateId)) + { + Rate = await ct.TravelRate.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.TravelRateId); + oc.Add(Rate, "travelrate", o.TravelRateId); + } + else + Rate = (TravelRate)oc.Get("travelrate", o.TravelRateId); + o.TravelRateViz = Rate.Name; } + TaxCode Tax = null; if (o.TaxCodeSaleId != null) - Tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == o.TaxCodeSaleId); + { + if (!oc.Has("tax", o.TaxCodeSaleId)) + { + Tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == o.TaxCodeSaleId); + oc.Add(Tax, "tax", o.TaxCodeSaleId); + } + else + Tax = (TaxCode)oc.Get("tax", o.TaxCodeSaleId); + } + if (Tax != null) o.TaxCodeViz = Tax.Name; @@ -4490,31 +4533,79 @@ namespace AyaNova.Biz // private async Task UnitPopulateVizFields(PMItemUnit o, bool populateForReporting) { - var unitInfo = await ct.Unit.AsNoTracking() - .Where(x => x.Id == o.UnitId) - .Select(x => new { x.Serial, x.Description, x.UnitModelId, x.Address, x.City, x.Region, x.Country, x.Latitude, x.Longitude }) - .FirstOrDefaultAsync(); - o.UnitViz = unitInfo.Serial; - o.UnitDescriptionViz = unitInfo.Description; + //see if it's in the cache already, populate the cache fully if not + bool UnitHasModel = false; + if (!vc.Has("unitserial", o.UnitId)) + { + //cache it + var unitInfo = await ct.Unit.AsNoTracking() + .Where(x => x.Id == o.UnitId) + .Select(x => new { x.Serial, x.Description, x.UnitModelId, x.Address, x.City, x.Region, x.Country, x.Latitude, x.Longitude, x.Metered }) + .FirstOrDefaultAsync(); + vc.Add(unitInfo.Serial, "unitserial", o.UnitId); + vc.Add(unitInfo.Description, "unitdesc", o.UnitId); + vc.Add(unitInfo.Address, "unitaddr", o.UnitId); + vc.Add(unitInfo.City, "unitcity", o.UnitId); + vc.Add(unitInfo.Region, "unitregion", o.UnitId); + vc.Add(unitInfo.Country, "unitcountry", o.UnitId); + vc.Add(unitInfo.Latitude.ToString(), "unitlat", o.UnitId); + vc.Add(unitInfo.Longitude.ToString(), "unitlong", o.UnitId); + vc.Add(unitInfo.Metered.ToString(), "unitmetered", o.UnitId); + if (unitInfo.UnitModelId != null) + { + UnitHasModel = true; + //units model name cached? (if it is then the rest will be cached as well) + if (!vc.Has("unitsmodelname", o.UnitId)) + { + //nope, model name cached?? + if (!vc.Has("unitmodelname", unitInfo.UnitModelId)) + { + //nope, so cache it all + var unitModelInfo = await ct.UnitModel.AsNoTracking().Where(x => x.Id == unitInfo.UnitModelId).Select(x => new { x.Name, x.VendorId }).FirstOrDefaultAsync(); + vc.Add(unitModelInfo.Name, "unitmodelname", unitInfo.UnitModelId); + vc.Add(unitModelInfo.Name, "unitsmodelname", o.UnitId); + + if (unitModelInfo.VendorId != null) + { + var ModelVendorName = vc.Get("unitsmodelvendorname", o.UnitId); + if (ModelVendorName == null) + { + ModelVendorName = vc.Get("vendorname", unitModelInfo.VendorId); + if (ModelVendorName == null) + { + ModelVendorName = await ct.Vendor.AsNoTracking().Where(x => x.Id == unitModelInfo.VendorId).Select(x => x.Name).FirstOrDefaultAsync(); + vc.Add(ModelVendorName, "vendorname", unitModelInfo.VendorId); + vc.Add(ModelVendorName, "unitsmodelvendorname", o.UnitId); + } + else + { + //cached under vendor so reuse here + vc.Add(ModelVendorName, "unitsmodelvendorname", o.UnitId); + } + } + } + } + } + } + } + //populate all fields from cache + if (UnitHasModel) + { + o.UnitModelNameViz = vc.Get("unitsmodelname", o.UnitId); + o.UnitModelVendorViz = vc.Get("unitsmodelvendorname", o.UnitId); + } + o.UnitViz = vc.Get("unitserial", o.UnitId); + o.UnitDescriptionViz = vc.Get("unitdesc", o.UnitId); + //o.UnitMeteredViz = vc.GetAsBool("unitmetered", o.UnitId); if (populateForReporting) { - o.AddressViz = unitInfo.Address; - o.CityViz = unitInfo.City; - o.RegionViz = unitInfo.Region; - o.CountryViz = unitInfo.Country; - o.LatitudeViz = unitInfo.Latitude; - o.LongitudeViz = unitInfo.Longitude; - } - - if (unitInfo.UnitModelId != null) - { - var unitModelInfo = await ct.UnitModel.AsNoTracking().Where(x => x.Id == unitInfo.UnitModelId).Select(x => new { x.Name, x.VendorId }).FirstOrDefaultAsync(); - o.UnitModelNameViz = unitModelInfo.Name; - - - if (unitModelInfo.VendorId != null) - o.UnitModelVendorViz = await ct.Vendor.AsNoTracking().Where(x => x.Id == unitModelInfo.VendorId).Select(x => x.Name).FirstOrDefaultAsync(); + o.AddressViz = vc.Get("unitaddr", o.UnitId); + o.CityViz = vc.Get("unitcity", o.UnitId); + o.RegionViz = vc.Get("unitregion", o.UnitId); + o.CountryViz = vc.Get("unitcountry", o.UnitId); + o.LatitudeViz = vc.GetAsDecimal("unitlat", o.UnitId); + o.LongitudeViz = vc.GetAsDecimal("unitlong", o.UnitId); } }