diff --git a/.vscode/launch.json b/.vscode/launch.json index 791271e4..02b3e2fd 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":"1", + "AYANOVA_REPORT_RENDERING_TIMEOUT":"8", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "large", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\" }, diff --git a/server/AyaNova/biz/QuoteBiz.cs b/server/AyaNova/biz/QuoteBiz.cs index d1377530..f4391403 100644 --- a/server/AyaNova/biz/QuoteBiz.cs +++ b/server/AyaNova/biz/QuoteBiz.cs @@ -61,7 +61,7 @@ namespace AyaNova.Biz } - //request cache for viz fields + //request cache for viz fields private VizCache vc = new VizCache(); private ObjectCache oc = new ObjectCache(); @@ -440,9 +440,9 @@ namespace AyaNova.Biz private async Task AutoSetAddressAsync(Quote newObj) { - if(!string.IsNullOrWhiteSpace(newObj.PostAddress) || !string.IsNullOrWhiteSpace(newObj.Address)) + if (!string.IsNullOrWhiteSpace(newObj.PostAddress) || !string.IsNullOrWhiteSpace(newObj.Address)) return; - + if (newObj.CustomerId == 0) return; @@ -934,14 +934,14 @@ namespace AyaNova.Biz // if (o.PreparedById != null) // o.PreparedByViz = await ct.User.AsNoTracking().Where(x => x.Id == o.PreparedById).Select(x => x.Name).FirstOrDefaultAsync(); - if (o.PreparedById != null) + if (o.PreparedById != null) + { + if (!vc.Has("user", o.PreparedById)) { - if (!vc.Has("user", o.PreparedById)) - { - vc.Add(await ct.User.AsNoTracking().Where(x => x.Id == o.PreparedById).Select(x => x.Name).FirstOrDefaultAsync(), "user", o.PreparedById); - } - o.PreparedByViz = vc.Get("user", o.PreparedById); + vc.Add(await ct.User.AsNoTracking().Where(x => x.Id == o.PreparedById).Select(x => x.Name).FirstOrDefaultAsync(), "user", o.PreparedById); } + o.PreparedByViz = vc.Get("user", o.PreparedById); + } // if (o.ContractId != null) // { @@ -954,7 +954,7 @@ namespace AyaNova.Biz // } // else // o.ContractViz = "-"; - if (o.ContractId != null) + if (o.ContractId != null) { if (vc.Get("ctrctname", o.ContractId) == null) { @@ -1154,7 +1154,16 @@ namespace AyaNova.Biz // private async Task StatePopulateVizFields(QuoteState o) { - o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); + // o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); + + if (o.UserId != 0) + { + 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); + } } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -1629,19 +1638,59 @@ namespace AyaNova.Biz // private async Task ItemPopulateVizFields(QuoteItem o, bool populateForReporting) { + // if (o.WorkOrderItemStatusId != null) + // { + // var StatusInfo = await ct.WorkOrderItemStatus.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.WorkOrderItemStatusId); + // o.WorkOrderItemStatusNameViz = StatusInfo.Name; + // o.WorkOrderItemStatusColorViz = StatusInfo.Color; + // } + + // if (o.WorkOrderItemPriorityId != null) + // { + // var PriorityInfo = await ct.WorkOrderItemPriority.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.WorkOrderItemPriorityId); + // o.WorkOrderItemPriorityNameViz = PriorityInfo.Name; + // o.WorkOrderItemPriorityColorViz = PriorityInfo.Color; + // } + if (o.WorkOrderItemStatusId != null) { - var StatusInfo = await ct.WorkOrderItemStatus.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.WorkOrderItemStatusId); - o.WorkOrderItemStatusNameViz = StatusInfo.Name; - o.WorkOrderItemStatusColorViz = StatusInfo.Color; + string value = vc.Get("woistatname", o.WorkOrderItemStatusId); + if (value == null) + { + var StatusInfo = await ct.WorkOrderItemStatus.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.WorkOrderItemStatusId); + + vc.Add(StatusInfo.Name, "woistatname", o.WorkOrderItemStatusId); + vc.Add(StatusInfo.Color, "woistatcolor", o.WorkOrderItemStatusId); + o.WorkOrderItemStatusNameViz = StatusInfo.Name; + o.WorkOrderItemStatusColorViz = StatusInfo.Color; + } + else + { + o.WorkOrderItemStatusNameViz = value; + o.WorkOrderItemStatusColorViz = vc.Get("woistatcolor", o.WorkOrderItemStatusId); + } } if (o.WorkOrderItemPriorityId != null) { - var PriorityInfo = await ct.WorkOrderItemPriority.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.WorkOrderItemPriorityId); - o.WorkOrderItemPriorityNameViz = PriorityInfo.Name; - o.WorkOrderItemPriorityColorViz = PriorityInfo.Color; + string value = vc.Get("woipriorityname", o.WorkOrderItemPriorityId); + if (value == null) + { + var PriorityInfo = await ct.WorkOrderItemPriority.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.WorkOrderItemPriorityId); + vc.Add(PriorityInfo.Name, "woipriorityname", o.WorkOrderItemPriorityId); + vc.Add(PriorityInfo.Color, "woiprioritycolor", o.WorkOrderItemPriorityId); + + o.WorkOrderItemPriorityNameViz = PriorityInfo.Name; + o.WorkOrderItemPriorityColorViz = PriorityInfo.Color; + } + else + { + o.WorkOrderItemPriorityNameViz = value; + o.WorkOrderItemPriorityColorViz = vc.Get("woiprioritycolor", o.WorkOrderItemPriorityId); + + } } + foreach (var v in o.Expenses) await ExpensePopulateVizFields(v); foreach (var v in o.Labors) @@ -1921,14 +1970,40 @@ namespace AyaNova.Biz // private async Task ExpensePopulateVizFields(QuoteItemExpense 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(); + // } + // TaxCode Tax = null; + // if (o.ChargeTaxCodeId != null) + // Tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == o.ChargeTaxCodeId); + // if (Tax != null) + // o.TaxCodeViz = Tax.Name; + + 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); + } } TaxCode Tax = null; if (o.ChargeTaxCodeId != null) - Tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == o.ChargeTaxCodeId); + { + if (!oc.Has("tax", o.ChargeTaxCodeId)) + { + Tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == o.ChargeTaxCodeId); + oc.Add(Tax, "tax", o.ChargeTaxCodeId); + } + else + Tax = (TaxCode)oc.Get("tax", o.ChargeTaxCodeId); + } + if (Tax != null) o.TaxCodeViz = Tax.Name; diff --git a/server/AyaNova/biz/ReportBiz.cs b/server/AyaNova/biz/ReportBiz.cs index 786a7cc0..99e632f6 100644 --- a/server/AyaNova/biz/ReportBiz.cs +++ b/server/AyaNova/biz/ReportBiz.cs @@ -774,6 +774,10 @@ namespace AyaNova.Biz // #endif await page.PdfAsync(outputFullPath, PdfOptions);//###### TODO: SLOW NEEDS TIMEOUT HERE ONCE SUPPORTED, open bug: https://github.com/hardkoded/puppeteer-sharp/issues/1710 + log.LogDebug($"Closing Page and Browser"); + await page.CloseAsync(); + await browser.CloseAsync(); + log.LogDebug($"Completed, returning results"); return outputFileName; } @@ -801,7 +805,10 @@ namespace AyaNova.Biz // log.LogInformation($"DBG: ReportBiz::RenderReport - closing browser"); // #endif log.LogDebug($"Closing browser"); - await browser.CloseAsync(); + if (!page.IsClosed) + await page.CloseAsync(); + if (!browser.IsClosed) + await browser.CloseAsync(); ReportRenderManager.RemoveProcess(browser.Process.Id, log); } } diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 754e6938..69c8cc35 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -1562,12 +1562,30 @@ namespace AyaNova.Biz // private async Task StatePopulateVizFields(WorkOrderState o) { - o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); - var StateInfo = await ct.WorkOrderStatus.AsNoTracking().Where(x => x.Id == o.WorkOrderStatusId).FirstOrDefaultAsync(); - o.NameViz = StateInfo.Name; - o.ColorViz = StateInfo.Color; - o.CompletedViz = StateInfo.Completed; - o.LockedViz = StateInfo.Locked; + //o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); + if (o.UserId != 0) + { + 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); + } + + WorkOrderStatus WOStatus = null; + + if (!oc.Has("wostatus", o.WorkOrderStatusId)) + { + WOStatus = await ct.WorkOrderStatus.AsNoTracking().Where(x => x.Id == o.WorkOrderStatusId).FirstOrDefaultAsync(); + oc.Add(WOStatus, "wostatus", o.WorkOrderStatusId); + } + else + WOStatus = (WorkOrderStatus)oc.Get("wostatus", o.WorkOrderStatusId); + + o.NameViz = WOStatus.Name; + o.ColorViz = WOStatus.Color; + o.CompletedViz = WOStatus.Completed; + o.LockedViz = WOStatus.Locked; }