using Data.SeaHavenIndustries; using Microsoft.EntityFrameworkCore; using SeaHaven.DataServices.Interfaces; namespace SeaHaven.DataServices.Helpers { public static class WorkOrderBoardProjection { public static async Task> ProjectRowsAsync( IQueryable query, bool isUnscheduled) { var rows = await query .Select(w => new { w.Id, w.InternalWONumber, w.RescheduleCount, w.CarriedOver, w.WorkOrderType, w.SiteCode, LocationName = w.Locations != null ? w.Locations.Name : null, Poc = w.WorkOrderContacts! .OrderBy(c => c.Id) .Select(c => new { Name = c.POC != null ? ((c.POC.FirstName ?? "") + " " + (c.POC.LastName ?? "")).Trim() : null, PhoneNumber = c.POC != null ? c.POC.PhoneNumber : null, c.Notes }) .FirstOrDefault(), w.LifecycleStatus, w.LegacyStatus, w.Status, w.AssignTo, w.AssignToUser!.FirstName, w.AssignToUser!.LastName, w.AssignToUser!.Initials, w.AssignToUser!.Color, w.DueDate, w.ScheduledDate, w.ScheduledStart, w.ScheduledEnd, w.TargetWeek, w.ScheduleWeekOnly, VendorId = w.PrimaryDispatch != null ? (int?)w.PrimaryDispatch.VendorId : null, VendorName = w.PrimaryDispatch != null && w.PrimaryDispatch.Vendor != null ? w.PrimaryDispatch.Vendor.CompanyName : null, TechName = w.PrimaryDispatch != null && w.PrimaryDispatch.Vendor != null ? w.PrimaryDispatch.Vendor.ContactName : null, TechPhone = w.PrimaryDispatch != null && w.PrimaryDispatch.Vendor != null ? w.PrimaryDispatch.Vendor.Phone : null, DispatchApptDate = w.PrimaryDispatch != null ? w.PrimaryDispatch.ScheduledDate : null, w.Service, w.Trade, w.Problem, w.DocStatus, w.RowVersion }) .ToListAsync(); return rows.Select(w => new WorkOrderBoardRawRow( w.Id, w.InternalWONumber, w.RescheduleCount, w.CarriedOver, w.WorkOrderType, w.SiteCode, w.LocationName, w.Poc?.Name, w.Poc?.PhoneNumber, w.Poc?.Notes, w.LifecycleStatus, w.LegacyStatus ?? w.Status, w.AssignTo, w.FirstName, w.LastName, w.Initials, w.Color, w.DueDate, w.ScheduledDate, w.ScheduledStart, w.ScheduledEnd, w.TargetWeek, w.ScheduleWeekOnly, w.VendorId, w.VendorName, w.TechName, w.TechPhone, w.DispatchApptDate, w.Service ?? w.Trade ?? w.Problem, w.DocStatus, w.RowVersion, isUnscheduled)).ToList(); } } }