Reorganized project structure to separate backend process from frontend process.
This commit is contained in:
19
ReportingServices.UI/Views/Home/Index.cshtml
Normal file
19
ReportingServices.UI/Views/Home/Index.cshtml
Normal file
@ -0,0 +1,19 @@
|
||||
@{
|
||||
ViewData["Title"] = "Home Page | Mesa Reporting Services";
|
||||
}
|
||||
|
||||
<div aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active" aria-current="page">Home</li>
|
||||
</ol>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="row">
|
||||
<div class="col-3 d-grid">
|
||||
<a class="btn btn-outline-secondary text-start" asp-area="" asp-controller="ProductionReport" asp-action="Index"><img src="~/Images/Directory.png" class="buttonImage" />Production</a>
|
||||
</div>
|
||||
<div class="col-3 d-grid">
|
||||
<a class="btn btn-outline-secondary text-start" asp-area="" asp-controller="PlanningReport" asp-action="Index"><img src="~/Images/Directory.png" class="buttonImage" />Planning</a>
|
||||
</div>
|
||||
</div>
|
47
ReportingServices.UI/Views/PlanningReport/Index.cshtml
Normal file
47
ReportingServices.UI/Views/PlanningReport/Index.cshtml
Normal file
@ -0,0 +1,47 @@
|
||||
@{
|
||||
ViewData["Title"] = "Planning Reports | Mesa Reporting Services";
|
||||
}
|
||||
|
||||
<div aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Planning Reports</li>
|
||||
</ol>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="row">
|
||||
<div class="col-3 d-grid">
|
||||
<button class="btn btn-outline-secondary text-start" data-bs-toggle="modal" data-bs-target="#chooseDateRange"><img src="~/Images/ReportFile.png" class="float-start buttonImage align-middle" />Weekly Part Changes Report</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="chooseDateRange" tabindex="-1" aria-labelledby="chooseDateRangeLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="exampleModalLabel">Choose Date Range</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<form method="post" action="PlanningReport/WeeklyPartChangesReport" autocomplete="off">
|
||||
<div class="modal-body" style="padding-top: 15px; padding-bottom: 10px">
|
||||
<div class="row">
|
||||
<div class="col-6">Start Date:</div>
|
||||
<div class="col-6"><input type="text" name="startDate" id="StartDate" /></div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 10px; padding-bottom: 10px">
|
||||
<div class="col-6">End Date:</div>
|
||||
<div class="col-6"><input type="text" name="endDate" id="EndDate" /></div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 10px; padding-bottom: 10px">
|
||||
<div class="col text-center">
|
||||
<button class="btn btn-outline-secondary" onclick="displayBusyIndicator()" data-bs-dismiss="modal" type="submit">Go To Report</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<partial name="_LoadingPartial" />
|
@ -0,0 +1,80 @@
|
||||
@model WeeklyPartChanges
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Weekly Part Changes | Mesa Reporting Services";
|
||||
}
|
||||
|
||||
<div aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="PlanningReport" asp-action="Index">Planning Reports</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Weekly Part Changes Report</li>
|
||||
</ol>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<h1 class="text-center">Weekly Part Changes</h1>
|
||||
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<p>Number of Part Changes: @Model.TotalPartChanges</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<p class="text-end">@Model.StartDate - @Model.EndDate</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Reactor</th>
|
||||
<th scope="col">PSN</th>
|
||||
<th scope="col">WO_COUNT</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@for (int i = 0; i < Model.ReactorPSNWORuns.Count; i++)
|
||||
{
|
||||
int count = 1;
|
||||
bool doesMatch = false;
|
||||
|
||||
if (i + count < Model.ReactorPSNWORuns.Count)
|
||||
doesMatch = Model.ReactorPSNWORuns[i].REACTOR == Model.ReactorPSNWORuns[i + count].REACTOR;
|
||||
|
||||
while (doesMatch)
|
||||
{
|
||||
count++;
|
||||
if (i + count < Model.ReactorPSNWORuns.Count)
|
||||
doesMatch = Model.ReactorPSNWORuns[i].REACTOR == Model.ReactorPSNWORuns[i + count].REACTOR;
|
||||
else
|
||||
doesMatch = false;
|
||||
}
|
||||
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
string tableColor = "";
|
||||
|
||||
if (count > 1)
|
||||
tableColor = "table-info";
|
||||
|
||||
<tr class="align-middle @tableColor">
|
||||
@if (j == 0)
|
||||
{
|
||||
<td rowspan="@(count)">@Model.ReactorPSNWORuns[i].REACTOR</td>
|
||||
<td>@Model.ReactorPSNWORuns[i].PSN</td>
|
||||
<td>@Model.ReactorPSNWORuns[i].WO_COUNT</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td>@Model.ReactorPSNWORuns[i + j].PSN</td>
|
||||
<td>@Model.ReactorPSNWORuns[i + j].WO_COUNT</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
i = i + (count - 1);
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
429
ReportingServices.UI/Views/ProductionReport/DailyReport.cshtml
Normal file
429
ReportingServices.UI/Views/ProductionReport/DailyReport.cshtml
Normal file
@ -0,0 +1,429 @@
|
||||
@model DailyReport
|
||||
@{
|
||||
int ASMAvailablePct = 0;
|
||||
int EPPAvailablePct = 0;
|
||||
int HTRAvailablePct = 0;
|
||||
|
||||
int ASMSLL = 0;
|
||||
int HTRSLL = 0;
|
||||
|
||||
int ASMUnloadTemps = 0;
|
||||
int HTRUnloadTemps = 0;
|
||||
|
||||
int reportIndex = (int)DateTime.Now.DayOfWeek;
|
||||
|
||||
int numberOfDaysInWeek = Model.CurrentWeek.OutsByDay.Count;
|
||||
|
||||
ManualReportEntries rpt = Model.CurrentEntries[reportIndex];
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Daily Passdown | Mesa Reporting Services";
|
||||
}
|
||||
|
||||
<div aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="ProductionReport" asp-action="Index">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</h2>
|
||||
<br /><br />
|
||||
</div>
|
||||
|
||||
<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">
|
||||
<partial name="_DailyReportPartial" model="@Model.CurrentWeek"/>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive dailyReportTable hidden">
|
||||
<partial name="_DailyReportPartial" model="@Model.PreviousWeek" />
|
||||
</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>
|
||||
<li>Bottle Change (@rpt.BottleChanges.Split(',').Length): @string.Join(", ", rpt.BottleChanges.Split(','))</li>
|
||||
<li>Daily Part Changes (@rpt.DailyPartChanges.Split(',').Length): @string.Join(", ", rpt.DailyPartChanges.Split(','))</li>
|
||||
<li>Weekly Part Changes (@rpt.WeeklyPartChanges.Split(',').Length): @string.Join(", ", rpt.WeeklyPartChanges.Split(','))</li>
|
||||
</ul>
|
||||
<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>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
ASM(@Model.ToolStateByType["ASM"].DownTools)
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Reactor</th>
|
||||
<th scope="col">Owner</th>
|
||||
<th scope="col">Issue</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["ASM"].ToolStateCurrents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
string owner = "";
|
||||
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
|
||||
<tr>
|
||||
<td>@tool.Tool</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.Comment</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
EPP(@Model.ToolStateByType["EPP"].DownTools)
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Reactor</th>
|
||||
<th scope="col">Owner</th>
|
||||
<th scope="col">Issue</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["EPP"].ToolStateCurrents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
string owner = "";
|
||||
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
|
||||
<tr>
|
||||
<td>@tool.Tool</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.Comment</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
HTR(@Model.ToolStateByType["HTR"].DownTools)
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Reactor</th>
|
||||
<th scope="col">Owner</th>
|
||||
<th scope="col">Issue</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["HTR"].ToolStateCurrents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
string owner = "";
|
||||
|
||||
if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
|
||||
owner = "Maint";
|
||||
else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
|
||||
owner = "Eng";
|
||||
else
|
||||
owner = "Prod";
|
||||
|
||||
<tr>
|
||||
<td>@tool.Tool</td>
|
||||
<td>@owner</td>
|
||||
<td>@tool.Comment</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Application ENG (0):</li>
|
||||
<li>Reactors (Capacity @(Model.NumberOfToolsWaferSize6IN + Model.NumberOfToolsWaferSize8IN))
|
||||
<ul>
|
||||
<li>150mm - @Model.NumberOfToolsWaferSize6IN</li>
|
||||
<li>200mm - @Model.NumberOfToolsWaferSize8IN</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Scheduled Reactors (@(Model.NumberOfToolsWaferSize6INScheduled + Model.NumberOfToolsWaferSize8INScheduled)):
|
||||
<ul>
|
||||
<li>150mm - @Model.NumberOfToolsWaferSize6INScheduled</li>
|
||||
<li>200mm - @Model.NumberOfToolsWaferSize8INScheduled</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dual Layer Reactors
|
||||
<ul>
|
||||
<li>ASM - @(string.Join(',', Model.DualLayerReactors["ASM"]))</li>
|
||||
<li>HTR - @(string.Join(',', Model.DualLayerReactors["HTR"]))</li>
|
||||
<li>EpiPro - @(string.Join(',', Model.DualLayerReactors["EPP"]))</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Engineering Focus Tools (Down > 12 hours)
|
||||
<ul>
|
||||
<li>@string.Join(",", toolsDownGreaterThan12Hours)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Metrology Down (@Model.ToolStateByType["Metrology"].DownTools):
|
||||
@if (Model.ToolStateByType["Metrology"].DownTools > 0)
|
||||
{
|
||||
<ul>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["Metrology"].ToolStateCurrents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
<li>@tool.Tool</li>
|
||||
}
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
</li>
|
||||
<li>
|
||||
Cleans (@Model.ToolStateByType["Cleans"].DownTools):
|
||||
@if (Model.ToolStateByType["Cleans"].DownTools > 0)
|
||||
{
|
||||
<ul>
|
||||
@foreach (ToolStateCurrent tool in Model.ToolStateByType["Cleans"].ToolStateCurrents)
|
||||
{
|
||||
if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
|
||||
{
|
||||
<li>@tool.Tool</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">@Model.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++)
|
||||
{
|
||||
if (i < Model.ToolAvailibilityByType["ASM"].Count)
|
||||
{
|
||||
int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["ASM"][i].AvailablePct));
|
||||
|
||||
if (availiblePct < 82)
|
||||
myClass = "table-danger text-danger";
|
||||
else
|
||||
myClass = "";
|
||||
|
||||
<td class="@myClass">@(availiblePct + "%")</td>
|
||||
|
||||
ASMAvailablePct += availiblePct;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td>@(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));
|
||||
|
||||
if (availiblePct < 60)
|
||||
myClass = "table-danger text-danger";
|
||||
else
|
||||
myClass = "";
|
||||
|
||||
<td class="@myClass">@(availiblePct + "%")</td>
|
||||
|
||||
EPPAvailablePct += availiblePct;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td>@(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));
|
||||
|
||||
if (availiblePct < 78)
|
||||
myClass = "table-danger text-danger";
|
||||
else
|
||||
myClass = "";
|
||||
|
||||
<td class="@myClass">@(availiblePct + "%")</td>
|
||||
|
||||
HTRAvailablePct += availiblePct;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td>@(HTRAvailablePct / numberOfDaysInWeek + "%")</td>
|
||||
<td>78%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">ASMs SLL Tool Count</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
int index = i == 6 ? 0 : i + 1;
|
||||
|
||||
if (@Model.CurrentEntries[index].ASMSingleLoadLock != 0)
|
||||
{
|
||||
<td>@Model.CurrentEntries[index].ASMSingleLoadLock</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
|
||||
ASMSLL += @Model.CurrentEntries[index].ASMSingleLoadLock;
|
||||
}
|
||||
<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 (@Model.CurrentEntries[index].HTRSingleLoadLock != 0)
|
||||
{
|
||||
<td>@Model.CurrentEntries[index].HTRSingleLoadLock</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
|
||||
HTRSLL += @Model.CurrentEntries[index].HTRSingleLoadLock;
|
||||
}
|
||||
<td>@(HTRSLL / numberOfDaysInWeek)</td>
|
||||
<td>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">ASMs <700C (Unload Temps)</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
int index = i == 6 ? 0 : i + 1;
|
||||
|
||||
if (@Model.CurrentEntries[index].ASMUnloadTempsLessThan700 != 0)
|
||||
{
|
||||
<td>@Model.CurrentEntries[index].ASMUnloadTempsLessThan700</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
|
||||
ASMUnloadTemps += @Model.CurrentEntries[index].ASMUnloadTempsLessThan700;
|
||||
}
|
||||
<td>@(ASMUnloadTemps / numberOfDaysInWeek)</td>
|
||||
<td>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">HTRs <700C (Unload Temps)</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
int index = i == 6 ? 0 : i + 1;
|
||||
|
||||
if (@Model.CurrentEntries[index].HTRUnloadTempsLessThan700 != 0)
|
||||
{
|
||||
<td>@Model.CurrentEntries[index].HTRUnloadTempsLessThan700</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
|
||||
HTRUnloadTemps += @Model.CurrentEntries[index].HTRUnloadTempsLessThan700;
|
||||
}
|
||||
<td>@(HTRUnloadTemps / numberOfDaysInWeek)</td>
|
||||
<td>0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
@ -0,0 +1,244 @@
|
||||
@model ManualReportEntries
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Edit Daily Passdown | Mesa Reporting Services";
|
||||
}
|
||||
|
||||
<div aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="ProductionReport" asp-action="Index">Production Reports</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Edit Passdown</li>
|
||||
</ol>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="container">
|
||||
|
||||
<h1 class="text-center">Edit Daily Targets</h1>
|
||||
|
||||
<form method="post" action="EditDailyReport">
|
||||
<div class="row" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-6">
|
||||
<h6 style="padding-top: 10px;">Operator Headcount:</h6>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="OperatorHeadcountDays" name="OperatorHeadcountDays">
|
||||
@for (int i = 0; i <= 15; i++)
|
||||
{
|
||||
<option selected="@(i == Model.OperatorHeadcountDays)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="OperatorHeadcountNights" name="OperatorHeadcountNights">
|
||||
@for (int i = 0; i <= 15; i++)
|
||||
{
|
||||
<option selected="@(i == Model.OperatorHeadcountNights)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-6">
|
||||
<h6 style="padding-top: 10px;">Total Call Outs (Operators):</h6>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="OperatorCallOutsDays" name="OperatorCallOutsDays">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.OperatorCallOutsDays)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="OperatorCallOutsNights" name="OperatorCallOutsNights">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.OperatorCallOutsNights)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-6">
|
||||
<h6 style="padding-top: 10px;">Engineering Headcount:</h6>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="EngineeringHeadcountDays" name="EngineeringHeadcountDays">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.EngineeringHeadcountDays)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="EngineeringHeadcountNights" name="EngineeringHeadcountNights">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.EngineeringHeadcountNights)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-6">
|
||||
<h6 style="padding-top: 10px;">Total Call Outs (Engineers):</h6>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="EngineerCallOutsDays" name="EngineeringCallOutsDays">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.EngineeringCallOutsDays)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="EngineerCallOutsNights" name="EngineeringCallOutsNights">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.EngineeringCallOutsNights)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-6">
|
||||
<h6 style="padding-top: 10px;">Maintenance Headcount:</h6>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="MaintenanceHeadcountDays" name="MaintenanceHeadcountDays">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.MaintenanceHeadcountDays)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="MaintenanceHeadcountNights" name="MaintenanceHeadcountNights">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.MaintenanceHeadcountNights)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-6">
|
||||
<h6 style="padding-top: 10px;">Total Call Outs (Maintenance):</h6>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="MaintenanceCallOutsDays" name="MaintenanceCallOutsDays">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.MaintenanceCallOutsDays)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-2 col-3">
|
||||
<select class="form-control" id="MaintenanceCallOutsNights" name="MaintenanceCallOutsNights">
|
||||
@for (int i = 0; i <= 5; i++)
|
||||
{
|
||||
<option selected="@(i == Model.MaintenanceCallOutsNights)">@i</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<div id="bottleChanges" class="row myMultiselect" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-md-4">
|
||||
<h6>Bottle Changes:</h6>
|
||||
</div>
|
||||
<div class="form-group col-lg-4 col-md-5">
|
||||
<div class="mySelectLabel selectBox" onclick="toggleCheckboxArea()">
|
||||
<select class="form-select" name="BottleChanges">
|
||||
<option>somevalue</option>
|
||||
</select>
|
||||
<div class="overSelect"></div>
|
||||
</div>
|
||||
<div class="mySelectOptions">
|
||||
@for (int i = 20; i < 80; i++)
|
||||
{
|
||||
string isMatching = "";
|
||||
string[] bottleChanges = Model.BottleChanges.Split(',');
|
||||
|
||||
for (int j = 0; j < bottleChanges.Length; j++)
|
||||
{
|
||||
if (bottleChanges[j] == "R" + i)
|
||||
isMatching = "checked";
|
||||
}
|
||||
|
||||
<label><input type="checkbox" onchange="checkboxStatusChange()" value="@("R" + i)" @isMatching />@(" R" + i)</label>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 col-md-3">
|
||||
<button class="btn btn-info" type="button" onclick="clearList()">Clear List</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="dailyPartChanges" class="row myMultiselect" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-md-4">
|
||||
<h6>Daily Part Changes:</h6>
|
||||
</div>
|
||||
<div class="form-group col-lg-4 col-md-5">
|
||||
<div class="mySelectLabel selectBox" onclick="toggleCheckboxArea()">
|
||||
<select class="form-select" name="DailyPartChanges">
|
||||
<option>somevalue</option>
|
||||
</select>
|
||||
<div class="overSelect"></div>
|
||||
</div>
|
||||
<div class="mySelectOptions">
|
||||
@for (int i = 20; i < 80; i++)
|
||||
{
|
||||
string isMatching = "";
|
||||
string[] dailyPartChanges = Model.DailyPartChanges.Split(',');
|
||||
|
||||
for (int j = 0; j < dailyPartChanges.Length; j++)
|
||||
{
|
||||
if (dailyPartChanges[j] == "R" + i)
|
||||
isMatching = "checked";
|
||||
}
|
||||
|
||||
<label><input type="checkbox" onchange="checkboxStatusChange()" value="@("R" + i)" @isMatching />@(" R" + i)</label>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 col-md-3">
|
||||
<button class="btn btn-info" type="button" onclick="clearList()">Clear List</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="weeklyPartChanges" class="row myMultiselect" style="padding-top: 5px; padding-bottom: 5px;">
|
||||
<div class="col-lg-3 col-md-4">
|
||||
<h6>Weekly Part Changes:</h6>
|
||||
</div>
|
||||
<div class="form-group col-lg-4 col-md-5">
|
||||
<div class="mySelectLabel selectBox" onclick="toggleCheckboxArea()">
|
||||
<select class="form-select" name="WeeklyPartChanges">
|
||||
<option>somevalue</option>
|
||||
</select>
|
||||
<div class="overSelect"></div>
|
||||
</div>
|
||||
<div class="mySelectOptions">
|
||||
@for (int i = 20; i < 80; i++)
|
||||
{
|
||||
string isMatching = "";
|
||||
string[] weeklyPartChanges = Model.WeeklyPartChanges.Split(',');
|
||||
|
||||
for (int j = 0; j < weeklyPartChanges.Length; j++)
|
||||
{
|
||||
if (weeklyPartChanges[j] == "R" + i)
|
||||
isMatching = "checked";
|
||||
}
|
||||
|
||||
<label><input type="checkbox" onchange="checkboxStatusChange()" value="@("R" + i)" @isMatching />@(" R" + i)</label>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 col-md-3">
|
||||
<button class="btn btn-info" type="button" onclick="clearList()">Clear List</button>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" value="Submit" class="btn btn-light" style="margin-top: 5px;">Submit</button>
|
||||
</form>
|
||||
|
||||
</div>
|
19
ReportingServices.UI/Views/ProductionReport/Index.cshtml
Normal file
19
ReportingServices.UI/Views/ProductionReport/Index.cshtml
Normal file
@ -0,0 +1,19 @@
|
||||
@{
|
||||
ViewData["Title"] = "Production Reports | Mesa Reporting Services";
|
||||
}
|
||||
|
||||
<div aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Production Reports</li>
|
||||
</ol>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="row">
|
||||
<div class="col-3 d-grid">
|
||||
<a class="btn btn-outline-secondary text-start" asp-area="" asp-controller="ProductionReport" asp-action="DailyReport" onclick="displayBusyIndicator()"><img src="~/Images/ReportFile.png" class="buttonImage float-start" />Production Passdown Report</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<partial name="_LoadingPartial" />
|
25
ReportingServices.UI/Views/Shared/Error.cshtml
Normal file
25
ReportingServices.UI/Views/Shared/Error.cshtml
Normal file
@ -0,0 +1,25 @@
|
||||
@model ErrorViewModel
|
||||
@{
|
||||
ViewData["Title"] = "Error";
|
||||
}
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (Model.ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||
It can result in displaying sensitive information from exceptions to end users.
|
||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||
and restarting the app.
|
||||
</p>
|
254
ReportingServices.UI/Views/Shared/_DailyReportPartial.cshtml
Normal file
254
ReportingServices.UI/Views/Shared/_DailyReportPartial.cshtml
Normal file
@ -0,0 +1,254 @@
|
||||
@model YieldStatistics
|
||||
|
||||
@{
|
||||
int totalWafersOut = 0;
|
||||
int totalCustomerScrap = 0;
|
||||
int totalManufacturingScrap = 0;
|
||||
int totalProdScrap = 0;
|
||||
int totalYieldedWafersOut = 0;
|
||||
int deltaToCommit = 0;
|
||||
int deltaToPlan = 0;
|
||||
float totalYield = 0f;
|
||||
|
||||
string myClass;
|
||||
|
||||
int numberOfDaysInWeek = Model.OutsByDay.Count;
|
||||
int yieldOutDays = Model.IsCurrentWeek ? Model.OutsByDay.Count - 1 : Model.OutsByDay.Count;
|
||||
}
|
||||
|
||||
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" rowspan="2" class="text-center align-middle">SI Operations</th>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
<th scope="col" class="text-center">@Model.StartDate.AddDays(i).ToString("MM/dd/yyyy")</th>
|
||||
}
|
||||
<th scope="col" rowspan="2" class="text-center align-middle">Weekly Total</th>
|
||||
<th scope="col" rowspan="2" class="text-center align-middle">Comment</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col" class="text-center">Monday</th>
|
||||
<th scope="col" class="text-center">Tuesday</th>
|
||||
<th scope="col" class="text-center">Wednesday</th>
|
||||
<th scope="col" class="text-center">Thursday</th>
|
||||
<th scope="col" class="text-center">Friday</th>
|
||||
<th scope="col" class="text-center">Saturday</th>
|
||||
<th scope="col" class="text-center">Sunday</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td scope="row">Commited Target to meet Shipment Requirements</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">4,500</td>
|
||||
<td class="text-center">31,500</td>
|
||||
<td>Number updated quarterly</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">Actual Reactor Out</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int reactorMoves = Model.OutsByDay[i].TotalWafers;
|
||||
|
||||
<td class="text-center">@reactorMoves</td>
|
||||
|
||||
totalWafersOut += reactorMoves;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@totalWafersOut</td>
|
||||
<td>Before Scrap</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row" id="expandYield">
|
||||
Actual Yielded Wafers Out
|
||||
<button class="btn btn-default" onclick="expandYield()">
|
||||
<img src="~/Images/plusIcon.png" width="20" style="padding-bottom: 3px" id="yieldImage" />
|
||||
</button>
|
||||
</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int yieldedOuts = Model.OutsByDay[i].TotalWafers - Model.ScrapByDay[i].TOT_REJ_WFRS - Model.ScrapByDay[i].TW_PROD;
|
||||
|
||||
<td class="text-center">@yieldedOuts</td>
|
||||
|
||||
totalYieldedWafersOut += yieldedOuts;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@totalYieldedWafersOut</td>
|
||||
<td>After Scrap</td>
|
||||
</tr>
|
||||
<tr class="yield hidden">
|
||||
@{
|
||||
int index = numberOfDaysInWeek - 1;
|
||||
int modifiedYieldedOuts = 0;
|
||||
if (Model.IsCurrentWeek)
|
||||
modifiedYieldedOuts = totalYieldedWafersOut - (Model.OutsByDay[index].TotalWafers - Model.ScrapByDay[index].TOT_REJ_WFRS - Model.ScrapByDay[index].TW_PROD);
|
||||
else
|
||||
modifiedYieldedOuts = totalYieldedWafersOut;
|
||||
}
|
||||
<td scope="row" colspan="10" id="expandYield" class="text-center">Yielded Wafers Out Daily Average: @(modifiedYieldedOuts / yieldOutDays)</td>
|
||||
</tr>
|
||||
<tr class="yield hidden">
|
||||
<td scope="row">Customer Scrap</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int custScrap = Model.ScrapByDay[i].TOT_REJ_CUST;
|
||||
|
||||
<td class="text-center">@custScrap</td>
|
||||
|
||||
totalCustomerScrap += custScrap;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@totalCustomerScrap</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="yield hidden">
|
||||
<td scope="row">Manufacturing Scrap</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int manuScrap = Model.ScrapByDay[i].TOT_REJ_MANU;
|
||||
|
||||
<td class="text-center">@manuScrap</td>
|
||||
|
||||
totalManufacturingScrap += manuScrap;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@totalManufacturingScrap</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="yield hidden">
|
||||
<td scope="row">Production Scrap</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int prodScrap = Model.ScrapByDay[i].TW_PROD;
|
||||
|
||||
<td class="text-center">@prodScrap</td>
|
||||
|
||||
totalProdScrap += prodScrap;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@totalProdScrap</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="yield hidden">
|
||||
<td scope="row">Yield</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
float yield = ((float)Model.OutsByDay[i].TotalWafers - (float)Model.ScrapByDay[i].TOT_REJ_WFRS) / (float)Model.OutsByDay[i].TotalWafers;
|
||||
|
||||
<td class="text-center">@(string.Format("{0:P2}", yield))</td>
|
||||
|
||||
totalYield += yield;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@(string.Format("{0:P2}", totalYield / numberOfDaysInWeek))</td>
|
||||
<td>After Scrap</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">Delta to commit</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int dayDelta = Model.OutsByDay[i].TotalWafers - Model.ScrapByDay[i].TOT_REJ_WFRS - 4500;
|
||||
|
||||
if (dayDelta < 0)
|
||||
myClass = "table-danger text-danger";
|
||||
else
|
||||
myClass = "";
|
||||
|
||||
<td class="text-center @myClass">@dayDelta</td>
|
||||
|
||||
deltaToCommit += dayDelta;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@deltaToCommit</td>
|
||||
<td>Difference to commitment</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">Delta to the Plan</td>
|
||||
@for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if (i < numberOfDaysInWeek)
|
||||
{
|
||||
int dayDelta = Model.OutsByDay[i].TotalWafers - Model.ScrapByDay[i].TOT_REJ_WFRS - 4500;
|
||||
|
||||
if (dayDelta < 0)
|
||||
myClass = "table-danger text-danger";
|
||||
else
|
||||
myClass = "";
|
||||
|
||||
<td class="text-center @myClass">@dayDelta</td>
|
||||
|
||||
deltaToPlan += dayDelta;
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
<td class="text-center">@deltaToPlan</td>
|
||||
<td>Difference to target</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="row">Wafers Needed to make QTR</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">3,640</td>
|
||||
<td class="text-center">25,480</td>
|
||||
<td>Number updated weekly</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
61
ReportingServices.UI/Views/Shared/_Layout.cshtml
Normal file
61
ReportingServices.UI/Views/Shared/_Layout.cshtml
Normal file
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>@ViewData["Title"] - ReportingServices</title>
|
||||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
|
||||
<link rel="stylesheet" href="~/ReportingServices.styles.css" asp-append-version="true" />
|
||||
<link href="https://code.jquery.com/ui/1.13.2/themes/ui-lightness/jquery-ui.css"
|
||||
rel="stylesheet">
|
||||
<script src="https://code.jquery.com/jquery-3.6.1.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$("#StartDate").datepicker();
|
||||
})
|
||||
$(function () {
|
||||
$("#EndDate").datepicker();
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom box-shadow mb-3" style="padding: 22px;">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Mesa Reporting Services</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
|
||||
aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
|
||||
<ul class="navbar-nav flex-grow-1">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-light" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
|
||||
</li>
|
||||
</ul>
|
||||
<form class="d-flex" role="search">
|
||||
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
|
||||
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container">
|
||||
<main role="main" class="pb-3">
|
||||
@RenderBody()
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<footer class="border-top footer text-muted">
|
||||
<div class="container">
|
||||
© 2022 - Mesa Reporting Services
|
||||
</div>
|
||||
</footer>
|
||||
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||
@await RenderSectionAsync("Scripts", required: false)
|
||||
</body>
|
||||
</html>
|
48
ReportingServices.UI/Views/Shared/_Layout.cshtml.css
Normal file
48
ReportingServices.UI/Views/Shared/_Layout.cshtml.css
Normal file
@ -0,0 +1,48 @@
|
||||
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
||||
for details on configuring this project to bundle and minify static web assets. */
|
||||
|
||||
a.navbar-brand {
|
||||
white-space: normal;
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0077cc;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.border-top {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
}
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
|
||||
.box-shadow {
|
||||
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
|
||||
}
|
||||
|
||||
button.accept-policy {
|
||||
font-size: 1rem;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
line-height: 60px;
|
||||
}
|
12
ReportingServices.UI/Views/Shared/_LoadingPartial.cshtml
Normal file
12
ReportingServices.UI/Views/Shared/_LoadingPartial.cshtml
Normal file
@ -0,0 +1,12 @@
|
||||
<div id="LoadingDisplay" style="display: none;">
|
||||
<div id="LoadingDisplayContent">
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-center">
|
||||
<strong>Loading</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,2 @@
|
||||
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
|
||||
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
|
6
ReportingServices.UI/Views/_ViewImports.cshtml
Normal file
6
ReportingServices.UI/Views/_ViewImports.cshtml
Normal file
@ -0,0 +1,6 @@
|
||||
@using ReportingServices
|
||||
@using ReportingServices.UI.Models
|
||||
@using ReportingServices.Shared.Models.PlanningReport
|
||||
@using ReportingServices.Shared.Models.ProductionReport
|
||||
@using ReportingServices.Shared.ViewModels.ProductionReport
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
3
ReportingServices.UI/Views/_ViewStart.cshtml
Normal file
3
ReportingServices.UI/Views/_ViewStart.cshtml
Normal file
@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
Reference in New Issue
Block a user