2023-01-13 15:33:58 -07:00

467 lines
18 KiB
Plaintext

@page "/DailyReport"
@using ReportingServices.Shared.Models.ProductionReport;
@using ReportingServices.Shared.ViewModels.ProductionReport;
<PageTitle>Daily Passdown | Mesa Reporting Services</PageTitle>
<div aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="">Home</a>
</li>
<li class="breadcrumb-item">
<a href="ProductionReport">Production Reports</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Production Passdown Report</li>
</ol>
</div>
<br />
<div class="text-center">
<h2>Daily Report - ScrapeDB</h2>
<br /><br />
</div>
@if (_dailyReport is null || _rpt is null)
{
<MudProgressCircular Color="Color.Default" Indeterminate="true" />
}
else
{
<button class="btn btn-outline-dark float-start dailyReportTable" onclick="toggleWeek()">View Previous Week</button>
<button class="btn btn-outline-dark float-end dailyReportTable hidden" onclick="toggleWeek()">View Current Week</button>
<br /><br />
<div class="table-responsive dailyReportTable">
<ReportingServices.Client.Shared.DailyReport YieldStatistics=_dailyReport.CurrentWeek YieldOutDays=@(_dailyReport.CurrentWeek.OutsByDay.Count - 1) NumberOfDaysInWeek=_dailyReport.CurrentWeek.OutsByDay.Count></ReportingServices.Client.Shared.DailyReport>
</div>
<div class="table-responsive dailyReportTable hidden">
<ReportingServices.Client.Shared.DailyReport YieldStatistics=_dailyReport.PreviousWeek YieldOutDays=_dailyReport.PreviousWeek.OutsByDay.Count NumberOfDaysInWeek=_dailyReport.PreviousWeek.OutsByDay.Count></ReportingServices.Client.Shared.DailyReport>
</div>
<br />
<h5>Daily Target Summary</h5>
<ul>
<li>Operator HC: (Days/Nights) @_rpt.OperatorHeadcountDays/@_rpt.OperatorHeadcountNights</li>
<li>Total Call Outs: (Days/Nights) @_rpt.OperatorCallOutsDays/@_rpt.OperatorCallOutsNights</li>
<li>Engineering HC: @_rpt.EngineeringHeadcountDays/@_rpt.EngineeringHeadcountNights</li>
<li>Total Call Outs: (Days/Nights) @_rpt.EngineeringCallOutsDays/@_rpt.EngineeringCallOutsNights</li>
<li>Maintenance HC: @_rpt.MaintenanceHeadcountDays/@_rpt.MaintenanceHeadcountNights</li>
<li>Total Call Outs: (Days/Nights) @_rpt.MaintenanceCallOutsDays/@_rpt.MaintenanceCallOutsNights</li>
</ul>
<br />
<ul>
@{
int bottleChanges = 0;
int dailyPartChanges = 0;
int weeklyPartChanges = 0;
string bottle = "";
string daily = "";
string weekly = "";
if (!string.IsNullOrEmpty(_rpt.BottleChanges))
{
bottle = string.Join(", ", _rpt.BottleChanges.Split(','));
bottleChanges = _rpt.BottleChanges.Split(',').Length;
}
if (!string.IsNullOrEmpty(_rpt.DailyPartChanges))
{
daily = string.Join(", ", _rpt.DailyPartChanges.Split(','));
dailyPartChanges = _rpt.DailyPartChanges.Split(',').Length;
}
if (!string.IsNullOrEmpty(_rpt.WeeklyPartChanges))
{
weekly = string.Join(", ", _rpt.WeeklyPartChanges.Split(','));
weeklyPartChanges = _rpt.WeeklyPartChanges.Split(',').Length;
}
}
<li>Bottle Change (@bottleChanges): @bottle</li>
<li>Daily Part Changes (@dailyPartChanges): @daily</li>
<li>Weekly Part Changes (@weeklyPartChanges): @weekly</li>
</ul>
<br />
<a class="btn btn-light" href="EditDailyReport">Edit</a>
<br /><br />
<h5>Current Reactors Down(@_dailyReport.ToolEvents.Where(x => x.IsInProduction == false).Count()):</h5>
<div class="row">
<div class="col-lg-6">
@{
List<ToolEventView> asmTools = _dailyReport.ToolEvents.Where(x => x.IsInProduction == false && x.Type.Contains("ASM")).ToList();
}
ASM(@asmTools.Count())
<table class="table table-sm">
<thead>
<tr>
<th scope="col">Reactor</th>
<th scope="col">Owner</th>
<th scope="col">Issue</th>
<th scope="col">Downtime</th>
</tr>
</thead>
<tbody>
@foreach (ToolEventView tool in asmTools)
{
string owner = "";
if (_dailyReport.ToolStatesByOwner["Maintenance"].Contains(tool.MostRecentEvent.REACT_MODE))
owner = "Maint";
else if (_dailyReport.ToolStatesByOwner["Engineering"].Contains(tool.MostRecentEvent.REACT_MODE))
owner = "Eng";
else
owner = "Prod";
if (tool.Downtime > 12)
_myClass = "tableDowntime";
else
_myClass = "";
<tr class="@_myClass">
<td>@tool.Reactor</td>
<td>@owner</td>
<td>@tool.MostRecentEvent.COMMENT</td>
<td>@string.Format("{0:##,###.##}", tool.Downtime)</td>
</tr>
}
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-lg-6">
@{
List<ToolEventView> eppTools = _dailyReport.ToolEvents.Where(x => x.IsInProduction == false && x.Type.Contains("EPP")).ToList();
}
EPP(@eppTools.Count())
<table class="table table-sm">
<thead>
<tr>
<th scope="col">Reactor</th>
<th scope="col">Owner</th>
<th scope="col">Issue</th>
<th scope="col">Downtime</th>
</tr>
</thead>
<tbody>
@foreach (ToolEventView tool in eppTools)
{
string owner = "";
if (_dailyReport.ToolStatesByOwner["Maintenance"].Contains(tool.MostRecentEvent.REACT_MODE))
owner = "Maint";
else if (_dailyReport.ToolStatesByOwner["Engineering"].Contains(tool.MostRecentEvent.REACT_MODE))
owner = "Eng";
else
owner = "Prod";
if (tool.Downtime > 12)
_myClass = "tableDowntime";
else
_myClass = "";
<tr class="@_myClass">
<td>@tool.Reactor</td>
<td>@owner</td>
<td>@tool.MostRecentEvent.COMMENT</td>
<td>@string.Format("{0:##,###.##}", tool.Downtime)</td>
</tr>
}
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-lg-6">
@{
List<ToolEventView> htrTools = _dailyReport.ToolEvents.Where(x => x.IsInProduction == false && x.Type.Contains("HTR")).ToList();
}
HTR(@htrTools.Count())
<table class="table table-sm">
<thead>
<tr>
<th scope="col">Reactor</th>
<th scope="col">Owner</th>
<th scope="col">Issue</th>
<th scope="col">Downtime</th>
</tr>
</thead>
<tbody>
@foreach (ToolEventView tool in htrTools)
{
string owner = "";
if (_dailyReport.ToolStatesByOwner["Maintenance"].Contains(tool.MostRecentEvent.REACT_MODE))
owner = "Maint";
else if (_dailyReport.ToolStatesByOwner["Engineering"].Contains(tool.MostRecentEvent.REACT_MODE))
owner = "Eng";
else
owner = "Prod";
if (tool.Downtime > 12)
_myClass = "tableDowntime";
else
_myClass = "";
<tr class="@_myClass">
<td>@tool.Reactor</td>
<td>@owner</td>
<td>@tool.MostRecentEvent.COMMENT</td>
<td>@string.Format("{0:##,###.##}", tool.Downtime)</td>
</tr>
}
</tbody>
</table>
<p> *Rows highlighted in orange have been down for more than 12 hours</p>
</div>
</div>
<ul>
<li>Application ENG (0):</li>
<li>Reactors (Capacity @(_dailyReport.NumberOfToolsWaferSize6IN + _dailyReport.NumberOfToolsWaferSize8IN))
<ul>
<li>150mm - @_dailyReport.NumberOfToolsWaferSize6IN</li>
<li>200mm - @_dailyReport.NumberOfToolsWaferSize8IN</li>
</ul>
</li>
<li>Scheduled Reactors (@(_dailyReport.NumberOfToolsWaferSize6INScheduled + _dailyReport.NumberOfToolsWaferSize8INScheduled)):
<ul>
<li>150mm - @_dailyReport.NumberOfToolsWaferSize6INScheduled</li>
<li>200mm - @_dailyReport.NumberOfToolsWaferSize8INScheduled</li>
</ul>
</li>
<li>Dual Layer Reactors
<ul>
<li>ASM - @(string.Join(',', _dailyReport.DualLayerReactors["ASM"]))</li>
<li>HTR - @(string.Join(',', _dailyReport.DualLayerReactors["HTR"]))</li>
<li>EpiPro - @(string.Join(',', _dailyReport.DualLayerReactors["EPP"]))</li>
</ul>
</li>
<li>Metrology Down (@_dailyReport.MetrologyEvents.Count()):
@if (@_dailyReport.MetrologyEvents.Count() > 0)
{
<ul>
@foreach (ToolEvent tool in @_dailyReport.MetrologyEvents)
{
<li>@tool.TOOL_ID</li>
}
</ul>
}
</li>
<li>Cleans (@_dailyReport.CleanEvents.Count()):
@if (@_dailyReport.CleanEvents.Count() > 0)
{
<ul>
@foreach (ToolEvent tool in @_dailyReport.CleanEvents)
{
<li>@tool.TOOL_ID</li>
}
</ul>
}
</li>
</ul>
<br /><br />
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th scope="col"></th>
<th scope="col">Monday</th>
<th scope="col">Tuesday</th>
<th scope="col">Wednesday</th>
<th scope="col">Thursday</th>
<th scope="col">Friday</th>
<th scope="col">Saturday</th>
<th scope="col">Sunday</th>
<th scope="col">WTD</th>
<th scope="col">Daily / Weekly</th>
</tr>
<tr>
<th scope="col"></th>
@for (int i = 0; i < 7; i++)
{
<th scope="col">@_dailyReport.StartDate.AddDays(i).ToString("MM/dd/yyyy")</th>
}
<th scope="col">Actual</th>
<th scope="col">Target</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row">ASMs Uptime</td>
@for (int i = 0; i < 7; i++)
{
asmTools = _dailyReport.ToolEvents.Where(x => x.Type.Contains("ASM")).ToList();
double availablePct = 0;
if (i < asmTools[0].Uptime.Count)
{
for (int j = 0; j < asmTools.Count; j++)
{
availablePct += asmTools[j].Uptime[i].UptimePercentage;
}
if (availablePct / asmTools.Count < .82)
_myClass = "table-danger text-danger";
else
_myClass = "";
<td class="@_myClass">@string.Format("{0:P2}", availablePct / asmTools.Count)</td>
_ASMAvailablePct += availablePct / asmTools.Count;
}
else
{
<td></td>
}
}
<td>@string.Format("{0:P2}", _ASMAvailablePct / _numberOfDaysInWeek)</td>
<td>82%</td>
</tr>
<tr>
<td scope="row">EPPs Uptime</td>
@for (int i = 0; i < 7; i++)
{
eppTools = _dailyReport.ToolEvents.Where(x => x.Type.Contains("EPP")).ToList();
double availablePct = 0;
if (i < eppTools[0].Uptime.Count)
{
for (int j = 0; j < eppTools.Count; j++)
{
availablePct += eppTools[j].Uptime[i].UptimePercentage;
}
if (availablePct / eppTools.Count < .60)
_myClass = "table-danger text-danger";
else
_myClass = "";
<td class="@_myClass">@string.Format("{0:P2}", availablePct / eppTools.Count)</td>
_EPPAvailablePct += availablePct / eppTools.Count;
}
else
{
<td></td>
}
}
<td>@string.Format("{0:P2}", _EPPAvailablePct / _numberOfDaysInWeek)</td>
<td>60%</td>
</tr>
<tr>
<td scope="row">HTRs Uptime</td>
@for (int i = 0; i < 7; i++)
{
htrTools = _dailyReport.ToolEvents.Where(x => x.Type.Contains("HTR")).ToList();
double availablePct = 0;
if (i < htrTools[0].Uptime.Count)
{
for (int j = 0; j < htrTools.Count; j++)
{
availablePct += htrTools[j].Uptime[i].UptimePercentage;
}
if (availablePct / htrTools.Count < .78)
_myClass = "table-danger text-danger";
else
_myClass = "";
<td class="@_myClass">@string.Format("{0:P2}", availablePct / htrTools.Count)</td>
_HTRAvailablePct += availablePct / htrTools.Count;
}
else
{
<td></td>
}
}
<td>@string.Format("{0:P2}", _HTRAvailablePct / _numberOfDaysInWeek)</td>
<td>78%</td>
</tr>
<tr>
<td scope="row">ASMs SLL Tool Count</td>
@for (int i = 0; i < 7; i++)
{
if (i < _dailyReport.SLLTools.Count())
{
<td>@_dailyReport.SLLTools[i].ASM</td>
_ASMSLL += @_dailyReport.SLLTools[i].ASM;
}
else
{
<td></td>
}
}
<td>@(_ASMSLL / _numberOfDaysInWeek)</td>
<td>0</td>
</tr>
<tr>
<td scope="row">HTRs SLL Tool Count</td>
@for (int i = 0; i < 7; i++)
{
int index = i == 6 ? 0 : i + 1;
if (i < _dailyReport.SLLTools.Count())
{
<td>@_dailyReport.SLLTools[i].HTR</td>
_HTRSLL += @_dailyReport.SLLTools[i].HTR;
}
else
{
<td></td>
}
}
<td>@(_HTRSLL / _numberOfDaysInWeek)</td>
<td>0</td>
</tr>
<tr>
<td scope="row">ASMs &lt;700C (Unload Temps)</td>
@for (int i = 0; i < 7; i++)
{
if (i < _dailyReport.UnloadTempsByDay.Count())
{
<td>@_dailyReport.UnloadTempsByDay[i].ASMUnloadsBelow700</td>
_ASMUnloadTemps += @_dailyReport.UnloadTempsByDay[i].ASMUnloadsBelow700;
}
else
{
<td></td>
}
}
<td>@(_ASMUnloadTemps / _numberOfDaysInWeek)</td>
<td>0</td>
</tr>
<tr>
<td scope="row">HTRs &lt;700C (Unload Temps)</td>
@for (int i = 0; i < 7; i++)
{
if (i < _dailyReport.UnloadTempsByDay.Count())
{
<td>@_dailyReport.UnloadTempsByDay[i].HTRUnloadsBelow700</td>
_HTRUnloadTemps += @_dailyReport.UnloadTempsByDay[i].HTRUnloadsBelow700;
}
else
{
<td></td>
}
}
<td>@(_HTRUnloadTemps / _numberOfDaysInWeek)</td>
<td>0</td>
</tr>
</tbody>
</table>
</div>
}