using System; using System.Collections.Generic; using System.Linq; using DataModel.Helpers; using DataModel.Models; using DataModel.Process; namespace DataModel.ViewModels { /// /// View model for search criteria /// public class SearchCriteriaViewModel { /// /// Minimum timestamp to include in filter /// public DateTime? MinimumDT { get; set; } /// /// Maxmimum timestamp to include in filter /// public DateTime? MaximumDT { get; set; } /// /// Collection of workorders to include in filter /// public List WorkOrders { get; set; } /// /// Collection of items to include in filter /// public List Items { get; set; } /// /// Collection of profit centers to include in filter /// public List ProfitCenters { get; set; } /// /// Collection of work centers to include in filter /// public List WorkCenters { get; set; } /// /// Collection component lots to include in filter /// public List ComponentLots { get; set; } /// /// Collection of operators to include in filter /// public List Operators { get; set; } /// /// Whether or not to extract MIS data /// public bool ExtractMisData { get; set; } /// /// Collection of part/operation combinations to get MIS data for /// public List PartOperations { get; set; } /// /// Constructor /// public SearchCriteriaViewModel() { WorkOrders = new List(); Items = new List(); ProfitCenters = new List(); WorkCenters = new List(); ComponentLots = new List(); Operators = new List(); PartOperations=new List(); } /// /// Constructor /// /// Search criteria to explode public SearchCriteriaViewModel(SearchCriteria criteria) : this() { if (criteria == null) { return; } MinimumDT = criteria.MinimumDT; MaximumDT = criteria.MaximumDT; ExtractMisData = criteria.ExtractMisData; //Load work orders if (criteria.WorkOrderNumbers != null && criteria.WorkOrderNumbers.Any()) { WorkOrders.AddRange(LotFinderDB.LookupWorkorders(criteria.WorkOrderNumbers) .OrderBy(wo => wo.WorkOrderNumber) .Select(wo => wo.ToViewModel())); } //Load items if (criteria.ItemNumbers != null && criteria.ItemNumbers.Any()) { Items.AddRange(LotFinderDB.LookupItems(criteria.ItemNumbers) .OrderBy(wo => wo.ItemNumber) .Select(wo => wo.ToViewModel())); } //Load profit centers if (criteria.ProfitCenters != null && criteria.ProfitCenters.Any()) { ProfitCenters.AddRange(LotFinderDB.LookupProfitCenters(criteria.ProfitCenters) .OrderBy(wo => wo.Code) .Select(wo => wo.ToViewModel())); } //Load work centers if (criteria.WorkCenters != null && criteria.WorkCenters.Any()) { WorkCenters.AddRange(LotFinderDB.LookupWorkCenters(criteria.WorkCenters) .OrderBy(wo => wo.Code) .Select(wo => wo.ToViewModel())); } //Load component lots if (criteria.ComponentLotNumbers != null && criteria.ComponentLotNumbers.Any()) { ComponentLots.AddRange(LotFinderDB.LookupLots(criteria.ComponentLotNumbers) .Select(l => l.ToViewModel()) .DistinctBy(l => new { l.LotNumber, l.ItemNumber }) .OrderBy(wo => wo.LotNumber)); } //Load operators if (criteria.OperatorIDs != null && criteria.OperatorIDs.Any()) { Operators.AddRange(LotFinderDB.LookupUsers(criteria.OperatorIDs) .OrderBy(wo => wo.UserID) .Select(wo => wo.ToViewModel())); } //Load part operations if (criteria.PartOperations != null && criteria.PartOperations.Any()) { PartOperations.AddRange(criteria.PartOperations); } } /// /// Converts the view model into standard model /// /// Compressed search criteria model public SearchCriteria ToModel() { return new SearchCriteria() { MinimumDT = MinimumDT, MaximumDT = MaximumDT, ExtractMisData = ExtractMisData, WorkOrderNumbers = WorkOrders.Select(wo => wo.WorkOrderNumber).ToList(), ItemNumbers = Items.Select(i => i.ItemNumber).ToList(), ProfitCenters = ProfitCenters.Select(pc => pc.Code).ToList(), WorkCenters = WorkCenters.Select(wc => wc.Code).ToList(), ComponentLotNumbers = ComponentLots, OperatorIDs = Operators.Select(o => o.AddressNumber.ToString()).ToList(), PartOperations = PartOperations }; } } }