using ReportingServices.Shared.Models.ProductionReport; namespace ReportingServices.Shared.ViewModels.ProductionReport; public class YieldStatistics { public DateTime StartDate { get; set; } public List OutsByDay { get; set; } public List ScrapByDay { get; set; } public OutsAndScrapTotal QTDOutsAndScrap { get; set; } public int DailyPlanWafers { get; set; } public bool IsCurrentWeek { get; set; } public YieldStatistics(DateTime startDate, bool isCurrentWeek) { StartDate = startDate; IsCurrentWeek = isCurrentWeek; } public void SetYieldInformation(YieldInformation yieldInformation, QuarterlyTargets targets) { OutsByDay = GetReactorOutsByDay(yieldInformation.Outs); ScrapByDay = yieldInformation.Scrap; DailyPlanWafers = targets.Yield_Outs / targets.PlanWorkingDays; } public static List GetDistinctDatesFromReactorOuts(List outs) { List dates = new(); foreach (ReactorOutsByRDS rout in outs) { if (!dates.Contains(DateTime.Parse(rout.EndProcessTime).Date.ToString())) dates.Add(DateTime.Parse(rout.EndProcessTime).Date.ToString()); } return dates; } public static List GetReactorOutsByDay(List outs) { List outsByDay = new(); List dates = GetDistinctDatesFromReactorOuts(outs); foreach (string date in dates) { int waferCount = 0; foreach (ReactorOutsByRDS rout in outs) { if (DateTime.Parse(rout.EndProcessTime).Date.ToString() == date) waferCount += (int)float.Parse(rout.Units); } outsByDay.Add(new ReactorOutsByDay { StartDate = date, TotalWafers = waferCount }); } return outsByDay; } }