diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index 22ea8975..56859ecd 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -99,7 +99,7 @@ namespace AyaNova.Api.Controllers } /// - /// Get WorkOrder for customer + /// Get Customer view of WorkOrder /// /// /// Customer WorkOrder diff --git a/server/AyaNova/biz/LoanUnitBiz.cs b/server/AyaNova/biz/LoanUnitBiz.cs index 400bf7c1..cffc1e17 100644 --- a/server/AyaNova/biz/LoanUnitBiz.cs +++ b/server/AyaNova/biz/LoanUnitBiz.cs @@ -277,6 +277,8 @@ namespace AyaNova.Biz { var idList = dataListSelectedRequest.SelectedRowIds; JArray ReportData = new JArray(); + //spin up a workorderbiz for loaner on wo reporting purposes + WorkOrderBiz workorderbiz = WorkOrderBiz.GetBiz(ct); while (idList.Any()) { var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); @@ -289,7 +291,7 @@ namespace AyaNova.Biz foreach (LoanUnit w in orderedList) { if (!ReportRenderManager.KeepGoing(jobId)) return null; - await PopulateVizFields(w); + await PopulateVizFields(w, workorderbiz); var jo = JObject.FromObject(w); if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"])) jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]); @@ -298,23 +300,41 @@ namespace AyaNova.Biz orderedList = null; } vc.Clear(); + oc.Clear(); return ReportData; } - + private ObjectCache oc = new ObjectCache(); private VizCache vc = new VizCache(); //populate viz fields from provided object - private async Task PopulateVizFields(LoanUnit o) + private async Task PopulateVizFields(LoanUnit o, WorkOrderBiz workorderbiz) { - if (o.UnitId != null) { 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 (o.WorkOrderItemLoanId != null) + { + if (!oc.Has("woil", o.WorkOrderItemLoanId)) + { + //not been fetched yet so get it all here + var wo = await workorderbiz.WorkOrderGetPartialAsync(AyaType.WorkOrderItemLoan, (long)o.WorkOrderItemLoanId, false, true); + oc.Add(wo.Items[0].Loans[0], "woil", o.WorkOrderItemLoanId); + vc.Add(wo.Serial.ToString(), "woserial", o.WorkOrderItemLoanId); + vc.Add(wo.CustomerViz, "wocustomer", o.WorkOrderItemLoanId); + } + var woil = (WorkOrderItemLoan)oc.Get("woil", o.WorkOrderItemLoanId); + o.WorkOrderRateViz = woil.UnitOfMeasureViz; + o.WorkOrderQuantityViz = woil.Quantity; + o.WorkOrderOutDateViz = woil.OutDate; + o.WorkOrderDueDateViz = woil.DueDate; + o.WorkOrderReturnDateViz = woil.ReturnDate; + o.WorkOrderSerialViz = vc.Get("woserial", o.WorkOrderItemLoanId); + o.WorkOrderCustomerViz = vc.Get("wocustomer", o.WorkOrderItemLoanId); + } } diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 539f2b16..000f031b 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -650,7 +650,6 @@ namespace AyaNova.Biz { var wid = (await GetWorkOrderIdFromRelativeAsync(ayaType, id, ct)).ParentId; return await ct.WorkOrder.AsNoTracking().Where(x => x.Id == wid).Select(x => x.Serial).FirstOrDefaultAsync(); - } @@ -3112,13 +3111,15 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// // GET // - internal async Task LoanGetAsync(long id, bool logTheGetEvent = true) + internal async Task LoanGetAsync(long id, bool logTheGetEvent = true, bool populateViz=false) { if (UserIsSubContractorRestricted) //no access allowed at all return null; var ret = await ct.WorkOrderItemLoan.AsNoTracking().SingleOrDefaultAsync(z => z.Id == id); if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, ret.AyaType, AyaEvent.Retrieved), ct); + if(populateViz) + await LoanPopulateVizFields(ret); return ret; } diff --git a/server/AyaNova/models/LoanUnit.cs b/server/AyaNova/models/LoanUnit.cs index d437b090..f91ddc36 100644 --- a/server/AyaNova/models/LoanUnit.cs +++ b/server/AyaNova/models/LoanUnit.cs @@ -28,8 +28,7 @@ namespace AyaNova.Models //MIGRATE_OUTSTANDING this needs to be set in migrate v8 once workorderitemloan is coded and importable public long? WorkOrderItemLoanId { get; set; } - [NotMapped] - public string WorkOrderItemLoanViz { get; set; } + [Required] public decimal RateHour { get; set; } @@ -64,7 +63,21 @@ namespace AyaNova.Models [NotMapped] public string UnitViz { get; set; } - + [NotMapped] + public string WorkOrderCustomerViz { get; set; } + [NotMapped] + public string WorkOrderSerialViz { get; set; } + [NotMapped] + public string WorkOrderRateViz { get; set; } + [NotMapped] + public decimal WorkOrderQuantityViz { get; set; } + [NotMapped] + public DateTime? WorkOrderOutDateViz { get; set; } + [NotMapped] + public DateTime? WorkOrderDueDateViz { get; set; } + [NotMapped] + public DateTime? WorkOrderReturnDateViz { get; set; } + public LoanUnit() {