using Microsoft.AspNetCore.Mvc; using ReportingServices.Dependency_Injections; using ReportingServices.HelperClasses; using ReportingServices.Models.ProductionReport; using ReportingServices.ReportingObjects; using System.Web; namespace ReportingServices.Controllers { public class ProductionReportController : Controller { private readonly IJsonFileHandler _jsonFileHandler; private readonly IScrapeDatabaseRepository _scrapeDatabaseRepository; private readonly IFabTimeReportingRepository _fabTimeReportingRepository; private readonly int _reportIndex = (int)DateTime.Now.DayOfWeek; private readonly string _dailyRptFilePath = "wwwroot/Assets/DailyReportInfo.json"; private readonly string _toolStateOwnerFilePath = "wwwroot/Assets/ToolStates.json"; private readonly string _toolFilter = "~R76%2C%20~R78%2C%20~R25%2C%20~R67%2C%20~R69%2C%20~R71%2C%20~R47%2C%20~R51%2C%20~R28"; public ProductionReportController(IJsonFileHandler jsonFileHandler, IScrapeDatabaseRepository scrapeDatabaseRepository, IFabTimeReportingRepository fabTimeReportingRepository) { _jsonFileHandler = jsonFileHandler; _scrapeDatabaseRepository = scrapeDatabaseRepository; _fabTimeReportingRepository = fabTimeReportingRepository; } public IActionResult Index() { return View(); } public IActionResult DailyReport() { DailyReport dailyReport = SetUpDailyReport(); Dictionary> toolStateOwners = _jsonFileHandler.LoadJSONFile>>(_toolStateOwnerFilePath); dailyReport.ToolStatesByOwner = toolStateOwners; return View(dailyReport); } public IActionResult EditDailyReport() { Dictionary> entries = _jsonFileHandler.LoadJSONFile>>(_dailyRptFilePath); ManualReportEntries rpt = entries["Current Week"][_reportIndex]; return View(rpt); } [HttpPost] public IActionResult EditDailyReport(ManualReportEntries rpt) { Dictionary> report = _jsonFileHandler.LoadJSONFile>>(_dailyRptFilePath); rpt.Date = DateTime.Parse(DateTime.Now.ToShortDateString()); rpt.Day = DateTime.Now.DayOfWeek; report["Current Week"][_reportIndex] = rpt; _jsonFileHandler.SaveJSONFile(report, _dailyRptFilePath); return RedirectToAction("DailyReport"); } public async Task> MovesTrendCaller(string startDate = "", string endDate = "") { string url = APIHelperFunctions.GenerateURLWithParameters(startDate: startDate, endDate: endDate, chart: "MOVESLOTLIST", areasLike: "CLEANROOM", operationsLike: "1UNLOAD"); List outsByRDS = await _fabTimeReportingRepository.GetMovesTrendData(url); return outsByRDS; } public async Task> ToolStateTrendCaller(string toolType) { string url = APIHelperFunctions.GenerateURLWithParameters(chart: "TOOLSTATE", periodLen: "24", capacityTypesLike: toolType, toolsLike: _toolFilter); List toolAvailability = await _fabTimeReportingRepository.GetToolStateTrendData(url); return toolAvailability; } public async Task> ToolStatesCaller(string toolType) { string capacityFilter = toolType == "ASM" ? toolType + "%2CASM%2B" : toolType; string startDate = HttpUtility.UrlEncode(APIHelperFunctions.GetDateWithOffsetAsAPIString(DateTime.Now.ToString(), -12.5f)); string url = APIHelperFunctions.GenerateURLWithParameters(chart: "ToolStateGantt", periodLen: "24", capacityTypesLike: capacityFilter, toolsLike: _toolFilter, startDate: startDate); List toolStates = await _fabTimeReportingRepository.GetToolStateData(url); return toolStates; } public DailyReport SetUpDailyReport() { DailyReport report = new(); Task> task1 = MovesTrendCaller(); Task> task2 = MovesTrendCaller(startDate: report.StartDate.AddDays(-7).ToString(), endDate: report.StartDate.ToString()); Task> task3 = ToolStateTrendCaller("ASM"); Task> task4 = ToolStateTrendCaller("EPP"); Task> task5 = ToolStateTrendCaller("HTR"); Task> task6 = ToolStatesCaller("ASM"); Task> task7 = ToolStatesCaller("EPP"); Task> task8 = ToolStatesCaller("HTR"); Task> task9 = ToolStatesCaller("Metrology"); Task> task10 = ToolStatesCaller("Cleans"); report.AddToolAvailibilityByType("ASM", task3.Result); report.AddToolAvailibilityByType("EPP", task4.Result); report.AddToolAvailibilityByType("HTR", task5.Result); report.AddToolStateByType("ASM", task6.Result); report.AddToolStateByType("EPP", task7.Result); report.AddToolStateByType("HTR", task8.Result); report.AddToolStateByType("Metrology", task9.Result); report.AddToolStateByType("Cleans", task10.Result); report.CurrentWeek.SetOutsByDay(task1.Result); report.PreviousWeek.SetOutsByDay(task2.Result); List scrap = _scrapeDatabaseRepository.GetScrapByDay(task1.Result); List previousScrap = _scrapeDatabaseRepository.GetScrapByDay(task2.Result); report.CurrentWeek.SetScrapByDay(scrap); report.PreviousWeek.SetScrapByDay(previousScrap); report.ReverseLists(); report.QuarterlyTargets = _scrapeDatabaseRepository.GetQuarterlyTargets(); int[] toolsByWaferSize = _scrapeDatabaseRepository.GetNumberOfToolsByWaferSize("''"); report.NumberOfToolsWaferSize6IN = toolsByWaferSize[0]; report.NumberOfToolsWaferSize8IN = toolsByWaferSize[1]; string reactors = ""; foreach (KeyValuePair keyValuePairs in report.ToolStateByType) { if (keyValuePairs.Key != "Metrology" && keyValuePairs.Key != "Cleans") { foreach (ToolStateCurrent tool in keyValuePairs.Value.ToolStateCurrents) { if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service") { reactors = reactors + "'" + tool.Tool.Substring(1) + "', "; } } } } reactors = reactors.Substring(0, reactors.Length - 2); report.DualLayerReactors = _scrapeDatabaseRepository.GetDualLayerReactors(); int[] toolsByWaferSizeScheduled = _scrapeDatabaseRepository.GetNumberOfToolsByWaferSize(reactors); report.NumberOfToolsWaferSize6INScheduled = toolsByWaferSizeScheduled[0]; report.NumberOfToolsWaferSize8INScheduled = toolsByWaferSizeScheduled[1]; Dictionary> entries = _jsonFileHandler.LoadJSONFile>>(_dailyRptFilePath); report.CurrentEntries = entries["Current Week"]; report.PreviousEntries = entries["Previous Week"]; int[] singleLoadLocks = _scrapeDatabaseRepository.GetNumberOfSingleLoadLocks(); report.CurrentEntries[_reportIndex].ASMSingleLoadLock = singleLoadLocks[0]; report.CurrentEntries[_reportIndex].HTRSingleLoadLock = singleLoadLocks[1]; int[] unloadTempsLessThan700 = _scrapeDatabaseRepository.GetNumberOfToolUnloadTempsLessThan700(); report.CurrentEntries[_reportIndex].ASMUnloadTempsLessThan700 = unloadTempsLessThan700[0]; report.CurrentEntries[_reportIndex].HTRUnloadTempsLessThan700 = unloadTempsLessThan700[1]; entries["Current Week"] = report.CurrentEntries; _jsonFileHandler.SaveJSONFile(entries, _dailyRptFilePath); return report; } } }