Used queries to get data from scrape database instead of FabTime to use a single data source.
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
@model DailyReport
|
||||
@{
|
||||
int ASMAvailablePct = 0;
|
||||
int EPPAvailablePct = 0;
|
||||
int HTRAvailablePct = 0;
|
||||
double ASMAvailablePct = 0;
|
||||
double EPPAvailablePct = 0;
|
||||
double HTRAvailablePct = 0;
|
||||
|
||||
int ASMSLL = 0;
|
||||
int HTRSLL = 0;
|
||||
@ -17,15 +17,8 @@
|
||||
ManualReportEntries rpt = Model.ManualReportEntries;
|
||||
|
||||
string myClass;
|
||||
List<string> toolsDownGreaterThan12Hours = new();
|
||||
|
||||
foreach (KeyValuePair<string, ToolStateByType> state in Model.ToolStateByType)
|
||||
{
|
||||
if (state.Key != "Metrology" && state.Key != "Cleans")
|
||||
toolsDownGreaterThan12Hours.AddRange(state.Value.ToolsDownGreaterThan12Hours);
|
||||
}
|
||||
|
||||
toolsDownGreaterThan12Hours.Sort();
|
||||
List<string> toolsExtendedDown = Model.ToolEvents.Where(x => x.DownMoreThanTwelveHours).Select(x => x.Reactor).ToList();
|
||||
}
|
||||
|
||||
@{
|
||||
@ -77,10 +70,13 @@
|
||||
<br />
|
||||
<a class="btn btn-light" asp-controller="ProductionReport" asp-action="EditDailyReport">Edit</a>
|
||||
<br /><br />
|
||||
<h5>Current Reactors Down(@(Model.ToolStateByType["ASM"].DownTools + Model.ToolStateByType["EPP"].DownTools + Model.ToolStateByType["HTR"].DownTools)):</h5>
|
||||
<h5>Current Reactors Down(@Model.ToolEvents.Where(x => x.IsInProduction == false).Count()):</h5>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
ASM(@Model.ToolStateByType["ASM"].DownTools)
|
||||
@{
|
||||
List<ToolEventView> asmTools = Model.ToolEvents.Where(x => x.IsInProduction == false && x.Type.Contains("ASM")).ToList();
|
||||
}
|
||||
ASM(@asmTools.Count())
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -90,25 +86,22 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["ASM"].ToolStateCurrents)
|
||||
@foreach (ToolEventView tool in asmTools)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
string owner = "";
|
||||
string owner = "";
|
||||
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.MostRecentEvent.REACT_MODE))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.MostRecentEvent.REACT_MODE))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
|
||||
<tr>
|
||||
<td>@tool.Tool</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.Comment</td>
|
||||
</tr>
|
||||
}
|
||||
<tr>
|
||||
<td>@tool.Reactor</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.MostRecentEvent.COMMENT</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@ -116,7 +109,10 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
EPP(@Model.ToolStateByType["EPP"].DownTools)
|
||||
@{
|
||||
List<ToolEventView> eppTools = Model.ToolEvents.Where(x => x.IsInProduction == false && x.Type.Contains("EPP")).ToList();
|
||||
}
|
||||
EPP(@eppTools.Count())
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -126,25 +122,22 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["EPP"].ToolStateCurrents)
|
||||
@foreach (ToolEventView tool in eppTools)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
string owner = "";
|
||||
string owner = "";
|
||||
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.MostRecentEvent.REACT_MODE))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.MostRecentEvent.REACT_MODE))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
|
||||
<tr>
|
||||
<td>@tool.Tool</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.Comment</td>
|
||||
</tr>
|
||||
}
|
||||
<tr>
|
||||
<td>@tool.Reactor</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.MostRecentEvent.COMMENT</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@ -152,7 +145,10 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
HTR(@Model.ToolStateByType["HTR"].DownTools)
|
||||
@{
|
||||
List<ToolEventView> htrTools = Model.ToolEvents.Where(x => x.IsInProduction == false && x.Type.Contains("HTR")).ToList();
|
||||
}
|
||||
EPP(@htrTools.Count())
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -162,25 +158,22 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["HTR"].ToolStateCurrents)
|
||||
@foreach (ToolEventView tool in htrTools)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
string owner = "";
|
||||
string owner = "";
|
||||
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.MostRecentEvent.REACT_MODE))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.MostRecentEvent.REACT_MODE))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
|
||||
<tr>
|
||||
<td>@tool.Tool</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.Comment</td>
|
||||
</tr>
|
||||
}
|
||||
<tr>
|
||||
<td>@tool.Reactor</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.MostRecentEvent.COMMENT</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@ -209,34 +202,27 @@
|
||||
</li>
|
||||
<li>Engineering Focus Tools (Down > 12 hours)
|
||||
<ul>
|
||||
<li>@string.Join(",", toolsDownGreaterThan12Hours)</li>
|
||||
<li>@string.Join(",", toolsExtendedDown)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Metrology Down (@Model.ToolStateByType["Metrology"].DownTools):
|
||||
@if (Model.ToolStateByType["Metrology"].DownTools > 0)
|
||||
<li>Metrology Down (@Model.MetrologyEvents.Count()):
|
||||
@if (@Model.MetrologyEvents.Count() > 0)
|
||||
{
|
||||
<ul>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["Metrology"].ToolStateCurrents)
|
||||
@foreach (ToolEvent tool in @Model.MetrologyEvents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
<li>@tool.Tool</li>
|
||||
}
|
||||
<li>@tool.TOOL_ID</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
</li>
|
||||
<li>
|
||||
Cleans (@Model.ToolStateByType["Cleans"].DownTools):
|
||||
@if (Model.ToolStateByType["Cleans"].DownTools > 0)
|
||||
<li>Cleans (@Model.CleanEvents.Count()):
|
||||
@if (@Model.CleanEvents.Count() > 0)
|
||||
{
|
||||
<ul>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["Cleans"].ToolStateCurrents)
|
||||
@foreach (ToolEvent tool in @Model.CleanEvents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
<li>@tool.Tool</li>
|
||||
}
|
||||
<li>@tool.TOOL_ID</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
@ -273,75 +259,96 @@
|
||||
<td scope="row">ASMs Uptime</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < Model.ToolAvailibilityByType["ASM"].Count)
|
||||
{
|
||||
int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["ASM"][i].AvailablePct));
|
||||
asmTools = Model.ToolEvents.Where(x => x.Type.Contains("ASM")).ToList();
|
||||
|
||||
if (availiblePct < 82)
|
||||
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">@(availiblePct + "%")</td>
|
||||
<td class="@myClass">@string.Format("{0:P2}", availablePct / asmTools.Count)</td>
|
||||
|
||||
ASMAvailablePct += availiblePct;
|
||||
ASMAvailablePct += availablePct / asmTools.Count;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td>@(ASMAvailablePct / numberOfDaysInWeek + "%")</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++)
|
||||
{
|
||||
if (i < Model.ToolAvailibilityByType["EPP"].Count)
|
||||
{
|
||||
int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["EPP"][i].AvailablePct));
|
||||
eppTools = Model.ToolEvents.Where(x => x.Type.Contains("EPP")).ToList();
|
||||
|
||||
if (availiblePct < 60)
|
||||
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">@(availiblePct + "%")</td>
|
||||
<td class="@myClass">@string.Format("{0:P2}", availablePct / eppTools.Count)</td>
|
||||
|
||||
EPPAvailablePct += availiblePct;
|
||||
EPPAvailablePct += availablePct / eppTools.Count;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td>@(EPPAvailablePct / numberOfDaysInWeek + "%")</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++)
|
||||
{
|
||||
if (i < Model.ToolAvailibilityByType["HTR"].Count)
|
||||
{
|
||||
int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["HTR"][i].AvailablePct));
|
||||
htrTools = Model.ToolEvents.Where(x => x.Type.Contains("HTR")).ToList();
|
||||
|
||||
if (availiblePct < 78)
|
||||
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">@(availiblePct + "%")</td>
|
||||
<td class="@myClass">@string.Format("{0:P2}", availablePct / htrTools.Count)</td>
|
||||
|
||||
HTRAvailablePct += availiblePct;
|
||||
HTRAvailablePct += availablePct / htrTools.Count;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td>@(HTRAvailablePct / numberOfDaysInWeek + "%")</td>
|
||||
<td>@string.Format("{0:P2}", HTRAvailablePct / numberOfDaysInWeek)</td>
|
||||
<td>78%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
Reference in New Issue
Block a user