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
};
}
}
}