Merge branch 'feature/PaginaOEE' into develop

This commit is contained in:
Samuele Locatelli
2021-05-20 12:20:50 +02:00
11 changed files with 495 additions and 10 deletions
+81
View File
@@ -220,6 +220,87 @@ namespace MP.Data.Controllers
return dbResult;
}
/// <summary>
/// Elenco tabella TurniOee da filtro
/// </summary>
/// <param name="DataStart"></param>
/// <param name="DataEnd"></param>
/// <param name="IdxMacchina"></param>
/// <param name="DataEnd"></param>
/// <returns></returns>
public List<DatabaseModels.TurniOee> StatTurniOeeGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo)
{
List<DatabaseModels.TurniOee> dbResult = new List<DatabaseModels.TurniOee>();
var dataFrom = new SqlParameter("@dataFrom", DataStart);
var dataTo = new SqlParameter("@dataTo", DataEnd);
var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina);
var idxODL = new SqlParameter("@IdxODL", IdxODL);
var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta);
var codArticolo = new SqlParameter("@CodArticolo", CodArticolo);
dbResult = dbCtx
.DbSetTurniOee
.FromSqlRaw("EXEC stp_UI_TurniOee_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco tabella TurniPareto da filtro
/// </summary>
/// <param name="DataStart"></param>
/// <param name="DataEnd"></param>
/// <param name="IdxMacchina"></param>
/// <param name="DataEnd"></param>
/// <returns></returns>
public List<DatabaseModels.TurniPareto> StatTurniParetoGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo)
{
List<DatabaseModels.TurniPareto> dbResult = new List<DatabaseModels.TurniPareto>();
var dataFrom = new SqlParameter("@dataFrom", DataStart);
var dataTo = new SqlParameter("@dataTo", DataEnd);
var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina);
var idxODL = new SqlParameter("@IdxODL", IdxODL);
var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta);
var codArticolo = new SqlParameter("@CodArticolo", CodArticolo);
dbResult = dbCtx
.DbSetTurniPareto
.FromSqlRaw("EXEC stp_UI_ParetoTurni_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco tabella TurniParetoOdl da filtro
/// </summary>
/// <param name="DataStart"></param>
/// <param name="DataEnd"></param>
/// <param name="IdxMacchina"></param>
/// <param name="DataEnd"></param>
/// <returns></returns>
public List<DatabaseModels.TurniParetoOdl> StatTurniParetoOdlGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo)
{
List<DatabaseModels.TurniParetoOdl> dbResult = new List<DatabaseModels.TurniParetoOdl>();
var dataFrom = new SqlParameter("@dataFrom", DataStart);
var dataTo = new SqlParameter("@dataTo", DataEnd);
var idxMacchina = new SqlParameter("@idxMacchina", IdxMacchina);
var idxODL = new SqlParameter("@IdxODL", IdxODL);
var keyRichiesta = new SqlParameter("@KeyRichiesta", KeyRichiesta);
var codArticolo = new SqlParameter("@CodArticolo", CodArticolo);
dbResult = dbCtx
.DbSetTurniParetoOdl
.FromSqlRaw("EXEC stp_UI_ParetoTurniOdl_GetByFilter @dataFrom,@dataTo,@idxMacchina,@IdxODL,@KeyRichiesta,@CodArticolo", dataFrom, dataTo, idxMacchina, idxODL, keyRichiesta, codArticolo)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco tabella UserLog da filtro
/// </summary>
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
namespace MP.Data.DatabaseModels
{
public partial class TurniOee
{
#region Public Properties
public string ClasseTempo { get; set; }
public string CodArticolo { get; set; }
public string CodMacchina { get; set; }
public DateTime DataRif { get; set; }
public string DescArticolo { get; set; }
public string Descrizione { get; set; }
public string IdxMacchina { get; set; }
public int IdxStato { get; set; }
[NotMapped]
[DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = true)]
public double OEE => (double)TotPeriodo / 480;
[DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = true)]
public double TotPeriodo { get; set; }
public int? TotPz { get; set; }
public string Turno { get; set; }
#endregion Public Properties
}
}
+26
View File
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
#nullable disable
namespace MP.Data.DatabaseModels
{
public partial class TurniPareto
{
#region Public Properties
public string ClasseTempo { get; set; }
public string CodArticolo { get; set; }
public string CodMacchina { get; set; }
public DateTime DataRif { get; set; }
public string DescArticolo { get; set; }
public string Descrizione { get; set; }
public string IdxMacchina { get; set; }
public int IdxStato { get; set; }
public double? TotPeriodo { get; set; }
public int? TotPz { get; set; }
public string Turno { get; set; }
#endregion Public Properties
}
}
+28
View File
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
#nullable disable
namespace MP.Data.DatabaseModels
{
public partial class TurniParetoOdl
{
#region Public Properties
public string ClasseTempo { get; set; }
public string CodArticolo { get; set; }
public string CodMacchina { get; set; }
public DateTime DataRif { get; set; }
public string DescArticolo { get; set; }
public string Descrizione { get; set; }
public string IdxMacchina { get; set; }
public int? IdxOdl { get; set; }
public int IdxStato { get; set; }
public string KeyRichiesta { get; set; }
public double? TotPeriodo { get; set; }
public int? TotPz { get; set; }
public string Turno { get; set; }
#endregion Public Properties
}
}
-3
View File
@@ -6,9 +6,6 @@
<RootNamespace>MP.Data</RootNamespace>
</PropertyGroup>
<ItemGroup>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.6" />
+101
View File
@@ -42,6 +42,9 @@ namespace MP.Data
public virtual DbSet<Macchine> DbSetMacchine { get; set; }
public virtual DbSet<ODL> DbSetODL { get; set; }
public virtual DbSet<ResScarti> DbSetScarti { get; set; }
public virtual DbSet<TurniOee> DbSetTurniOee { get; set; }
public virtual DbSet<TurniPareto> DbSetTurniPareto { get; set; }
public virtual DbSet<TurniParetoOdl> DbSetTurniParetoOdl { get; set; }
public virtual DbSet<UserActionLog> DbSetUserLog { get; set; }
#endregion Public Properties
@@ -68,6 +71,104 @@ namespace MP.Data
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS");
modelBuilder.Entity<TurniOee>(entity =>
{
entity.HasNoKey();
entity.ToView("v_UI_OEE_Turni");
entity.Property(e => e.ClasseTempo).HasMaxLength(50);
entity.Property(e => e.CodArticolo)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.CodMacchina).HasMaxLength(50);
entity.Property(e => e.DataRif).HasColumnType("datetime");
entity.Property(e => e.DescArticolo).HasMaxLength(250);
entity.Property(e => e.Descrizione).HasMaxLength(50);
entity.Property(e => e.IdxMacchina)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.TotPeriodo).HasColumnName("totPeriodo");
entity.Property(e => e.Turno)
.IsRequired()
.HasMaxLength(5);
});
modelBuilder.Entity<TurniPareto>(entity =>
{
entity.HasNoKey();
entity.ToView("v_UI_Pareto_Turni");
entity.Property(e => e.ClasseTempo).HasMaxLength(50);
entity.Property(e => e.CodArticolo)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.CodMacchina).HasMaxLength(50);
entity.Property(e => e.DataRif).HasColumnType("datetime");
entity.Property(e => e.DescArticolo).HasMaxLength(250);
entity.Property(e => e.Descrizione).HasMaxLength(50);
entity.Property(e => e.IdxMacchina)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.TotPeriodo).HasColumnName("totPeriodo");
entity.Property(e => e.Turno)
.IsRequired()
.HasMaxLength(5);
});
modelBuilder.Entity<TurniParetoOdl>(entity =>
{
entity.HasNoKey();
entity.ToView("v_UI_Pareto_TurniOdl");
entity.Property(e => e.ClasseTempo).HasMaxLength(50);
entity.Property(e => e.CodArticolo)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.CodMacchina).HasMaxLength(50);
entity.Property(e => e.DataRif).HasColumnType("datetime");
entity.Property(e => e.DescArticolo).HasMaxLength(250);
entity.Property(e => e.Descrizione).HasMaxLength(50);
entity.Property(e => e.IdxMacchina)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.IdxOdl).HasColumnName("IdxODL");
entity.Property(e => e.KeyRichiesta).HasMaxLength(50);
entity.Property(e => e.TotPeriodo).HasColumnName("totPeriodo");
entity.Property(e => e.Turno)
.IsRequired()
.HasMaxLength(5);
});
modelBuilder.Entity<AnagArticoli>(entity =>
{
entity.HasNoKey();
+15
View File
@@ -100,6 +100,21 @@ namespace MP.Stats.Data
return Task.FromResult(dbController.StatScartiGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray());
}
public Task<MP.Data.DatabaseModels.TurniOee[]> StatTurniOeeGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, string searchVal = "")
{
return Task.FromResult(dbController.StatTurniOeeGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray());
}
public Task<MP.Data.DatabaseModels.TurniPareto[]> StatTurniParetoGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, string searchVal = "")
{
return Task.FromResult(dbController.StatTurniParetoGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray());
}
public Task<MP.Data.DatabaseModels.TurniParetoOdl[]> StatTurniParetoOdlGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, string searchVal = "")
{
return Task.FromResult(dbController.StatTurniParetoOdlGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray());
}
public Task<MP.Data.DatabaseModels.UserActionLog[]> StatUserLogGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, string searchVal = "")
{
return Task.FromResult(dbController.StatUserLogGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray());
+1 -2
View File
@@ -26,13 +26,12 @@
<div class="card">
<div class="card-header table-primary h1">Main Topics</div>
<div class="card-body py-0">
<HomeButton NavLink="oee" Icon="oi oi-monitor" Descript="TRS/OEE %" />
<HomeButton NavLink="reportodl" Icon="oi oi-book" Descript="Report ODL" />
<HomeButton NavLink="produzione" Icon="oi oi-clipboard" Descript="Diario Produzione" />
<HomeButton NavLink="userlog" Icon="oi oi-document" Descript="User ActionLog" />
<HomeButton NavLink="controlli" Icon="oi oi-beaker" Descript="Controlli" />
<HomeButton NavLink="scarti" Icon="oi oi-warning" Descript="Scarti" />
@*<HomeButton NavLink="resources" Icon="oi oi-puzzle-piece" Descript="Risorse" />*@
@*<HomeButton NavLink="utility" Icon="oi oi-wrench" Descript="Utility" />*@
</div>
</div>
</div>
+71
View File
@@ -0,0 +1,71 @@
@page "/oee"
@using MP.Stats.Components
@using MP.Stats.Data
<div class="card">
<div class="card-header table-primary">
<div class="row">
<div class="col-6 col-lg-3 h2">TRS / OEE %</div>
<div class="col-6 col-lg-9">
</div>
</div>
</div>
<div class="card-body py-0">
@if (currRecord != null)
{
@*<BasketEditor Basket="@currBasket" DataReset="ResetData" DataUpdated="UpdateData"></BasketEditor>*@
}
@if (ListRecords == null)
{
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width:70%"></div>
}
else
{
<div class="row">
<div class="col-12 table-secondary">
<SelectionFilter SelFilter="currFilter" filterChanged="DoFilter"></SelectionFilter>
</div>
<div class="col-12">
<table class="table table-sm table-striped">
<thead>
<tr>
@*<th></th>*@
<th>Data</th>
<th>Turno</th>
<th>Macchina</th>
<th>Articolo</th>
<th class="text-right">Durata</th>
<th class="text-right">Pezzi</th>
<th class="text-right">OEE %</th>
</tr>
</thead>
<tbody>
@foreach (var record in ListRecords)
{
<tr class="@checkSelect(record.DataRif, record.Turno, @record.IdxMacchina)">
@*<td><button class="btn btn-sm btn-info" @onclick="() => Edit(record)"><span class="oi oi-pencil"></span></button>&nbsp;<button class="btn btn-sm btn-success" @onclick="() => ShowDocs(record)" title="Vai ai documenti"><span class="oi oi-document"></span></button></td>*@
<td>
<div>@record.DataRif.ToString("yyyy.MM.dd")</div>
</td>
<td>@record.Turno</td>
<td>
<div>@record.CodMacchina</div>
<div class="small">@record.IdxMacchina</div>
</td>
<td>@record.CodArticolo</td>
<td class="text-right">@record.TotPeriodo.ToString("N2")</td>
<td class="text-right">@record.TotPz</td>
<td class="text-right">@record.OEE.ToString("P2")</td>
</tr>
}
</tbody>
</table>
</div>
</div>
}
</div>
<div class="card-footer py-1">
<DataPager PageSize="@numRecord" currPage="@currPage" numRecordChanged="ForceReload" numPageChanged="ForceReloadPage" totalCount="@SearchRecords.Count()" />
</div>
</div>
+131
View File
@@ -0,0 +1,131 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Stats.Data;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace MP.Stats.Pages
{
public partial class Oee : ComponentBase, IDisposable
{
#region Private Fields
private MP.Data.DatabaseModels.TurniOee currRecord = null;
private MP.Data.DatabaseModels.TurniOee[] ListRecords;
private MP.Data.DatabaseModels.TurniOee[] SearchRecords;
#endregion Private Fields
#region Private Properties
private SelectData currFilter { get; set; } = new SelectData();
private int currPage { get; set; } = 1;
private int numRecord { get; set; } = 10;
#endregion Private Properties
#region Protected Properties
[Inject]
protected IJSRuntime JSRuntime { get; set; }
[Inject]
protected MessageService MessageService { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; }
[Inject]
protected MpStatsService StatService { get; set; }
#endregion Protected Properties
#region Private Methods
private async Task reloadData()
{
SearchRecords = await StatService.StatTurniOeeGetAll(currFilter.DateStart, currFilter.DateEnd, currFilter.IdxMacchina, currFilter.IdxOdl, currFilter.KeyRichiesta, currFilter.CodArticolo, MessageService.SearchVal);
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToArray();
}
#endregion Private Methods
#region Protected Methods
protected async Task DoFilter(SelectData newFilter)
{
currFilter = newFilter;
await reloadData();
}
protected async Task ForceReload(int newNum)
{
numRecord = newNum;
await reloadData();
}
protected async Task ForceReloadPage(int newNum)
{
currPage = newNum;
await reloadData();
}
protected override async Task OnInitializedAsync()
{
numRecord = 10;
MessageService.ShowSearch = true;
MessageService.EA_SearchUpdated += OnSeachUpdated;
await reloadData();
}
protected void ResetData()
{
StatService.rollBackEdit(currRecord);
currRecord = null;
}
protected async Task UpdateData()
{
currRecord = null;
await reloadData();
}
#endregion Protected Methods
#region Public Methods
public string checkSelect(DateTime DataRif, string Turno, string IdxMacchina)
{
string answ = "";
if (currRecord != null)
{
try
{
answ = (currRecord.IdxMacchina == IdxMacchina && currRecord.Turno == Turno && currRecord.DataRif == DataRif) ? "table-info" : "";
}
catch
{ }
}
return answ;
}
public void Dispose()
{
MessageService.EA_SearchUpdated -= OnSeachUpdated;
}
public void OnSeachUpdated()
{
InvokeAsync(() =>
{
UpdateData();
StateHasChanged();
});
}
#endregion Public Methods
}
}
+6 -5
View File
@@ -12,6 +12,11 @@
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="oee">
<span class="oi oi-monitor" aria-hidden="true"></span> TRS/OEE %
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="ReportODL">
<span class="oi oi-book" aria-hidden="true" title="Dati di Produzione ODL"></span> Report ODL/Comm.
@@ -37,11 +42,7 @@
<span class="oi oi-warning" aria-hidden="true" title="Registro Scarti"></span> Registro Scarti
</NavLink>
</li>
@*<li class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="oi oi-plus" aria-hidden="true"></span> Counter
</NavLink>
</li>
@*
<li class="nav-item px-3">
<NavLink class="nav-link" href="fetchdata">
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data