Merge branch 'release/AddYeldPreview_01'

This commit is contained in:
Samuele Locatelli
2025-06-17 13:15:28 +02:00
7 changed files with 291 additions and 97 deletions
+55 -42
View File
@@ -1,49 +1,62 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="cmp_BP_sheetList.ascx.cs" Inherits="NKC_WF.WebUserControls.cmp_BP_sheetList" %>
<asp:HiddenField ID="hfBunkIndex" runat="server" />
<asp:HiddenField ID="hfStackID" runat="server" />
<asp:GridView runat="server" ID="grView" AutoGenerateColumns="False" DataKeyNames="SheetID" DataSourceID="ods" CssClass="table table-sm table-striped" AllowSorting="True" OnSelectedIndexChanged="grView_SelectedIndexChanged">
<HeaderStyle CssClass="default" />
<PagerStyle CssClass="active GridPager" />
<PagerSettings Mode="NumericFirstLast" />
<SelectedRowStyle CssClass="table-info" />
<EmptyDataTemplate>
<%: traduci("NoRecord") %>
</EmptyDataTemplate>
<Columns>
<asp:TemplateField ShowHeader="False">
<HeaderTemplate>
<asp:LinkButton ID="lbtReset" runat="server" OnClick="lbtReset_Click" CssClass="btn btn-sm btn-primary" Visible="true" ToolTip="Reset"><i class="fa fa-refresh"></i></asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="lbSelect" runat="server" CausesValidation="False" CommandName="Select" CssClass="btn btn-sm btn-primary"><i class="fa fa-search" aria-hidden="true"></i></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="SheetIndex" HeaderText="#" ReadOnly="True" SortExpression="SheetIndex" />
<asp:TemplateField HeaderText="Material" SortExpression="MatExtCode">
<ItemTemplate>
<div class="row">
<div class="col-8 text-left">
<asp:Label ID="lblMatExtCode" runat="server" Text='<%# Eval("MatExtCode") %>' CssClass="font-weight-bold"></asp:Label>
</div>
<div class="col-4">
<asp:Label ID="lblSheetID" runat="server" Text='<%# Eval("SheetID") %>' CssClass="small text-right"></asp:Label>
</div>
<div class="col-12 text-left">
<asp:Label ID="lblMatDesc" runat="server" Text='<%# Eval("MatDesc") %>' CssClass="small"></asp:Label>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Estim" SortExpression="WrkTimeEst">
<ItemTemplate>
<asp:Label ID="lblWrkTimeEst" runat="server" Text='<%# formatMinSec(Eval("WrkTimeEst", "{0:N0}")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="default" />
<PagerStyle CssClass="active GridPager" />
<PagerSettings Mode="NumericFirstLast" />
<SelectedRowStyle CssClass="table-info" />
<EmptyDataTemplate>
<%: traduci("NoRecord") %>
</EmptyDataTemplate>
<Columns>
<asp:TemplateField ShowHeader="False">
<HeaderTemplate>
<asp:LinkButton ID="lbtReset" runat="server" OnClick="lbtReset_Click" CssClass="btn btn-sm btn-primary" Visible="true" ToolTip="Reset"><i class="fa fa-refresh"></i></asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="lbSelect" runat="server" CausesValidation="False" CommandName="Select" CssClass="btn btn-sm btn-primary"><i class="fa fa-search" aria-hidden="true"></i></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="SheetIndex" HeaderText="#" ReadOnly="True" SortExpression="SheetIndex" />
<asp:TemplateField HeaderText="Material" SortExpression="MatExtCode">
<ItemTemplate>
<div class="row">
<div class="col-8 text-left">
<asp:Label ID="lblMatExtCode" runat="server" Text='<%# Eval("MatExtCode") %>' CssClass="font-weight-bold"></asp:Label>
</div>
<div class="col-4">
<asp:Label ID="lblSheetID" runat="server" Text='<%# Eval("SheetID") %>' CssClass="small text-right"></asp:Label>
</div>
<div class="col-12 text-left">
<asp:Label ID="lblMatDesc" runat="server" Text='<%# Eval("MatDesc") %>' CssClass="small"></asp:Label>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Estim" SortExpression="WrkTimeEst">
<ItemTemplate>
<div class="row">
<div class="col-12 text-left">
<asp:Label ID="lblWrkTimeEst" runat="server" Text='<%# formatMinSec(Eval("WrkTimeEst", "{0:N0}")) %>'></asp:Label>
</div>
</div>
<div class="row">
<div class="col-4 text-left">
P: <asp:Label ID="lblSheetParts" runat="server" Text='<%# GetSheetPartQty(Eval("SheetIndex")) %>'></asp:Label>
</div>
<div class="col-8 text-right">
<asp:Label ID="lblSheetYels" runat="server" Text='<%# GetSheetYeld(Eval("SheetIndex")) %>'></asp:Label>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ods" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="getByStack" TypeName="AppData.DS_AppTableAdapters.SheetListTableAdapter">
<SelectParameters>
<asp:ControlParameter ControlID="hfStackID" DefaultValue="0" Name="StackID" PropertyName="Value" Type="Int32" />
<asp:Parameter Name="Machine" DefaultValue="" />
</SelectParameters>
<SelectParameters>
<asp:ControlParameter ControlID="hfStackID" DefaultValue="0" Name="StackID" PropertyName="Value" Type="Int32" />
<asp:Parameter Name="Machine" DefaultValue="" />
</SelectParameters>
</asp:ObjectDataSource>
+192 -27
View File
@@ -1,13 +1,17 @@
using System;
using AppData;
using SteamWare;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace NKC_WF.WebUserControls
{
public partial class cmp_BP_sheetList : BaseUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
#region Public Properties
}
/// <summary>
/// Bunk corrente...
/// </summary>
@@ -16,6 +20,9 @@ namespace NKC_WF.WebUserControls
set
{
hfStackID.Value = value.ToString();
// aggiorno dati mongo...
updateMongoData(BatchId, value);
// disegno datagrid...
grView.DataBind();
}
get
@@ -25,6 +32,18 @@ namespace NKC_WF.WebUserControls
return answ;
}
}
/// <summary>
/// Num totale Sheets
/// </summary>
public int numSheets
{
get
{
return grView.Rows.Count;
}
}
// <summary>
/// Indice selezionato
/// </summary>
@@ -40,6 +59,7 @@ namespace NKC_WF.WebUserControls
grView.DataBind();
}
}
/// <summary>
/// SheetId selezionato
/// </summary>
@@ -63,27 +83,11 @@ namespace NKC_WF.WebUserControls
return answ;
}
}
/// <summary>
/// comando reset
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtReset_Click(object sender, EventArgs e)
{
resetSelezione();
}
public void resetSelezione()
{
//lblStack.Text = "";
grView.SelectedIndex = -1;
grView.DataBind();
raiseEvent();
}
protected void grView_SelectedIndexChanged(object sender, EventArgs e)
{
raiseEvent();
}
#endregion Public Properties
#region Public Methods
/// <summary>
/// Formatta in min/sec il tempo in sec decimale
/// </summary>
@@ -101,14 +105,175 @@ namespace NKC_WF.WebUserControls
}
/// <summary>
/// Num totale Sheets
/// Recupera valore YELD dato SheetID
/// </summary>
public int numSheets
/// <param name="sId"></param>
/// <returns></returns>
public string GetSheetPartQty(object sId)
{
int answ = 0;
int sheetId = 0;
if (int.TryParse($"{sId}", out sheetId))
{
if (SheetPartQty.ContainsKey(sheetId))
{
answ = SheetPartQty[sheetId];
}
}
return $"{answ:N0}";
}
/// <summary>
/// Recupera valore YELD dato SheetID
/// </summary>
/// <param name="sId"></param>
/// <returns></returns>
public string GetSheetYeld(object sId)
{
double answ = 0;
int sheetId = 0;
if (int.TryParse($"{sId}", out sheetId))
{
if (SheetYeld.ContainsKey(sheetId))
{
answ = SheetYeld[sheetId];
}
}
return $"{answ:P1}";
}
public void resetSelezione()
{
//lblStack.Text = "";
grView.SelectedIndex = -1;
grView.DataBind();
raiseEvent();
}
#endregion Public Methods
#region Protected Fields
/// <summary>
/// Tabella dei dati di quante part siano presenti x foglio recuperato dai dati nesting da mongoDB
/// </summary>
protected Dictionary<int, int> SheetPartQty = new Dictionary<int, int>();
/// <summary>
/// Tabella dei dati di resa (Yeald) x foglio recuperato dai dati nesting da mongoDB
/// </summary>
protected Dictionary<int, double> SheetYeld = new Dictionary<int, double>();
#endregion Protected Fields
#region Protected Properties
/// <summary>
/// Batch corrente...
/// </summary>
protected int BatchId
{
get
{
return grView.Rows.Count;
int answ = memLayer.ML.QSI("BatchId");
return answ;
}
}
#endregion Protected Properties
#region Protected Methods
protected void grView_SelectedIndexChanged(object sender, EventArgs e)
{
raiseEvent();
}
/// <summary>
/// comando reset
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtReset_Click(object sender, EventArgs e)
{
resetSelezione();
}
protected void Page_Load(object sender, EventArgs e)
{
}
#endregion Protected Methods
#region Private Methods
/// <summary>
/// Aggiorna i dati di stima recuperando da Mongo le risposte complete dal supervisor
/// </summary>
/// <param name="BatchId">ID del Batch di cui recuperare le info</param>
/// <param name="BunkId">ID del BUNK da considerare</param>
private void updateMongoData(int BatchId, int BunkId)
{
if (memLayer.ML.CRB("enableMongo"))
{
SheetYeld = new Dictionary<int, double>();
SheetPartQty = new Dictionary<int, int>();
// cerco da lista salvataggi Nest...
var nestAnsw = ComLib.man.getNestAnsw(BatchId);
// recupero bunk da DB
DataLayer dlMan = new DataLayer();
var bunkList = dlMan.taSTL.getByBatch(BatchId);
var bunkRow = bunkList.Where(x => x.StackID == BunkId).FirstOrDefault();
// elenchi x ricerca duplicati
List<int> partListNest = new List<int>();
List<int> partListNestDupl = new List<int>();
if (nestAnsw != null && bunkRow!=null)
{
double num = 0;
double den = 1;
double currRatio = 0;
try
{
if (nestAnsw.BunkList != null)
{
foreach (var bunk in nestAnsw.BunkList)
{
if (bunkRow.StackIndex == bunk.BunkIndex)
{
// procedo SOLO per il bunk corrente...
foreach (var sheet in bunk.SheetList)
{
num = sheet.SurfaceWork > 0 ? sheet.SurfaceWork : 0;
den = sheet.SurfaceTotal > 0 ? sheet.SurfaceTotal : 1;
currRatio = ComLib.ratioProt(num, den);
if (SheetYeld.ContainsKey(sheet.SheetIndex))
{
SheetYeld[sheet.SheetIndex] = currRatio;
}
else
{
SheetYeld.Add(sheet.SheetIndex, currRatio);
}
if (SheetPartQty.ContainsKey(sheet.SheetIndex))
{
SheetPartQty[sheet.SheetIndex] = sheet.PartList.Count;
}
else
{
SheetPartQty.Add(sheet.SheetIndex, sheet.PartList.Count);
}
}
}
}
}
}
catch
{ }
}
}
}
#endregion Private Methods
}
}
@@ -14,6 +14,15 @@ namespace NKC_WF.WebUserControls
public partial class cmp_BP_sheetList
{
/// <summary>
/// hfBunkIndex control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.HiddenField hfBunkIndex;
/// <summary>
/// hfStackID control.
/// </summary>
@@ -60,15 +60,19 @@ namespace NKC_WF.WebUserControls
#region Private Methods
private void updateMongoData(int value)
/// <summary>
/// Aggiorna i dati di stima recuperando da Mongo le risposte complete dal supervisor
/// </summary>
/// <param name="batchId">BatchId di cui recuperare le info</param>
private void updateMongoData(int batchId)
{
lblMatDet.Text = "";
lblProdDet.Text = "";
if (memLayer.ML.CRB("enableMongo"))
{
// cerco da lista salvataggi Estim/Nest...
var estimAnsw = ComLib.man.getEstAnsw(value);
var nestAnsw = ComLib.man.getNestAnsw(value);
var estimAnsw = ComLib.man.getEstAnsw(batchId);
var nestAnsw = ComLib.man.getNestAnsw(batchId);
StringBuilder sbDebug = new StringBuilder();
sbDebug.AppendLine("Debug Info:");
// elenchi x ricerca duplicati
+2 -2
View File
@@ -15,12 +15,12 @@
<div class="col-2 pr-0 small">
<uc1:cmp_BP_bunkList runat="server" ID="cmp_BP_bunkList" />
</div>
<div class="col-8 px-0">
<div class="col-7 px-0">
<h3><%# traduci("BatchPreview") %></h3>
<uc1:cmp_slider runat="server" ID="cmp_slider" />
<uc1:cmp_MU_svgViewer runat="server" ID="cmp_MU_svgViewer" />
</div>
<div class="col-2 pl-0 small">
<div class="col-3 pl-0 small">
<uc1:cmp_BP_sheetList runat="server" ID="cmp_BP_sheetList" />
</div>
</div>
+3
View File
@@ -159,6 +159,9 @@ namespace NKC_WF.site
cmp_slider.selValue = num;
// recupero bunk e sheets e seleziono
cmp_BP_sheetList.BunkId = cmp_BP_bunkList.BunkIdSel;
#if false
cmp_BP_sheetList.BatchId = BatchId;
#endif
sheetIndex = currRow.SheetIndex - 1;
// update svg...
cmp_MU_svgViewer.SheetId = currRow.SheetID;
+23 -23
View File
@@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <generato automaticamente>
// Codice generato da uno strumento.
// <auto-generated>
// This code was generated by a tool.
//
// Le modifiche a questo file possono causare un comportamento non corretto e verranno perse se
// il codice viene rigenerato.
// </generato automaticamente>
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace NKC_WF.site
@@ -15,56 +15,56 @@ namespace NKC_WF.site
{
/// <summary>
/// Controllo uplBody.
/// uplBody control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.UpdatePanel uplBody;
/// <summary>
/// Controllo hfBatchID.
/// hfBatchID control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.HiddenField hfBatchID;
/// <summary>
/// Controllo cmp_BP_bunkList.
/// cmp_BP_bunkList control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::NKC_WF.WebUserControls.cmp_BP_bunkList cmp_BP_bunkList;
/// <summary>
/// Controllo cmp_slider.
/// cmp_slider control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::NKC_WF.WebUserControls.cmp_slider cmp_slider;
/// <summary>
/// Controllo cmp_MU_svgViewer.
/// cmp_MU_svgViewer control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::NKC_WF.WebUserControls.cmp_MU_svgViewer cmp_MU_svgViewer;
/// <summary>
/// Controllo cmp_BP_sheetList.
/// cmp_BP_sheetList control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::NKC_WF.WebUserControls.cmp_BP_sheetList cmp_BP_sheetList;
}