266 lines
12 KiB
C#
266 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using SteamWare;
|
|
using MapoDb;
|
|
|
|
namespace MoonProTablet.WebUserControls
|
|
{
|
|
public partial class mod_confProd : System.Web.UI.UserControl
|
|
{
|
|
/// <summary>
|
|
/// registrato nuovo valore
|
|
/// </summary>
|
|
public event EventHandler eh_inserting;
|
|
/// <summary>
|
|
/// registrato nuovo valore
|
|
/// </summary>
|
|
public event EventHandler eh_newVal;
|
|
/// <summary>
|
|
/// registrato nuovo valore
|
|
/// </summary>
|
|
public event EventHandler eh_reset;
|
|
/// <summary>
|
|
/// caricamento pagina
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsPostBack)
|
|
{
|
|
lblOut.Text = "";
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// idx macchina selezionata
|
|
/// </summary>
|
|
public int idxMacchina
|
|
{
|
|
get
|
|
{
|
|
return memLayer.ML.IntSessionObj("IdxMacchina");
|
|
}
|
|
set
|
|
{
|
|
memLayer.ML.setSessionVal("IdxMacchina", value);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// cambio stato visibilità pannello e testo button
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void btnShowConfProd_Click(object sender, EventArgs e)
|
|
{
|
|
switchBtnConferma();
|
|
}
|
|
/// <summary>
|
|
/// determina comportamento btn conferma
|
|
/// </summary>
|
|
private void switchBtnConferma()
|
|
{
|
|
txtNumPezzi.Visible = !txtNumPezzi.Visible;
|
|
btnSalva.Visible = txtNumPezzi.Visible;
|
|
if (txtNumPezzi.Visible)
|
|
{
|
|
btnShowConfProd.Text = "Nascondi Conferma";
|
|
DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd;
|
|
rigaProd = DataLayer.obj.taPzProd2conf.GetData(idxMacchina.ToString())[0];
|
|
try
|
|
{
|
|
txtNumPezzi.Text = rigaProd.pezziNonConfermati.ToString();
|
|
// sollevo evento!
|
|
if (eh_inserting != null)
|
|
{
|
|
eh_inserting(this, new EventArgs());
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
txtNumPezzi.Text = "0";
|
|
logger.lg.scriviLog(string.Format("Errore recupero pezzi da confermare per la macchina {0}", idxMacchina), tipoLog.ERROR);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
btnShowConfProd.Text = "Mostra Conferma";
|
|
// sollevo evento!
|
|
if (eh_reset != null)
|
|
{
|
|
eh_reset(this, new EventArgs());
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Numero pezzi confermati
|
|
/// </summary>
|
|
protected int numPzConfermati
|
|
{
|
|
get
|
|
{
|
|
int answ = 0;
|
|
try
|
|
{
|
|
answ = Convert.ToInt32(txtNumPezzi.Text);
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// salvo produzione
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void btnSalva_Click(object sender, EventArgs e)
|
|
{
|
|
if (memLayer.ML.confReadInt("modoConfProd") == 2)
|
|
{
|
|
confermaPerTurni();
|
|
}
|
|
else
|
|
{
|
|
confermaPerGiorni();
|
|
}
|
|
// refresh tabella dati tablet...
|
|
DataLayer.obj.taMSE.getByRefreshData(memLayer.ML.confReadInt("refrMSE_0"));
|
|
// mostro output
|
|
lblOut.Text = string.Format("Confermata la produzione per {0} pezzi!", numPzConfermati);
|
|
// cambio button conferma...
|
|
switchBtnConferma();
|
|
// sollevo evento!
|
|
if (eh_newVal != null)
|
|
{
|
|
eh_newVal(this, new EventArgs());
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// effettua conferma per giorni della produzione
|
|
/// </summary>
|
|
private void confermaPerGiorni()
|
|
{
|
|
// vecchia chiamata esplicita, uso metodo datalayer (singleton) nuovo...
|
|
#if false
|
|
DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayer.obj.taPzProd2conf.GetData(idxMacchina.ToString())[0];
|
|
// chiamo stored stp_ConfermaProduzCompleta(idxMacchina,MatrApp,dataFrom,dataTo,pezziConf)
|
|
DataLayer.obj.taPzProd2conf.stp_ConfermaProduzCompleta(idxMacchina.ToString(), DataLayer.MatrOpr, rigaProd.DataFrom, rigaProd.DataTo, numPzConfermati, memLayer.ML.confReadInt("modoConfProd"));
|
|
#endif
|
|
DataLayer.obj.confermaProdMacchina(idxMacchina.ToString(), memLayer.ML.confReadInt("modoConfProd"), numPzConfermati);
|
|
}
|
|
/// <summary>
|
|
/// effettua conferma per turni della produzione
|
|
/// </summary>
|
|
private void confermaPerTurni()
|
|
{
|
|
// vecchia chiamata esplicita, uso metodo datalayer (singleton) nuovo...
|
|
#if false
|
|
// carico i dati preliminari: ODL
|
|
int idxOdl = 0; // userò ODL del turno
|
|
try
|
|
{
|
|
idxOdl = DataLayer.obj.taODL.getByMacchina(idxMacchina.ToString())[0].IdxODL;
|
|
}
|
|
catch
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore a recuperare ODL per la macchina {0}", idxMacchina), tipoLog.ERROR);
|
|
}
|
|
// carico i dati preliminari: operatore
|
|
int MatrAppr = DataLayer.MatrOpr;
|
|
// variabile per ODL del turno
|
|
DS_ProdTempi.ODLDataTable elencoOdlTurno;
|
|
// carico i dati da confermare...
|
|
DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayer.obj.taPzProd2conf.GetData(idxMacchina.ToString())[0];
|
|
// chiamo la stored
|
|
try
|
|
{
|
|
// ricavo i turni della macchina da anagrafica
|
|
// !!!FARE!!! da db incrociando dati da anagrafica... x ora calcolo con turno 8 h x 7 gg/week
|
|
int shiftTurno = 6;
|
|
int durataTurno = 8;
|
|
// calcolo quanti turni da approvare ci siano
|
|
int numTurni2appr = (int)Math.Ceiling(rigaProd.DataTo.Subtract(rigaProd.DataFrom).TotalHours / durataTurno);
|
|
// questa dataora rappresenta l'inizio del turno che man mano vado ad approvare
|
|
DateTime dataCurr = rigaProd.DataFrom;
|
|
turnoLavoro turnoCurr;
|
|
int pzProd = 0;
|
|
int idxStatoProd = 13; // hard coded!!!
|
|
// definisco intervallo date x fare query (inizialmente è turno)
|
|
intervalloDate periodoOdl = new intervalloDate();
|
|
intervalloDate periodoProd = new intervalloDate();
|
|
// vado a ciclare da dataFrom a dataTo per ogni turno compreso fino all'ultimo turno intero
|
|
for (int i = 0; i < numTurni2appr; i++)
|
|
{
|
|
// calcolo il turno che comprende la data da approvare
|
|
turnoCurr = datario.mngr.getTurnoByDateTime(dataCurr, shiftTurno, durataTurno);
|
|
// recupero elenco ODL del turno (in modo che se ne ho + di 1 faccio + inserimenti produzione)
|
|
elencoOdlTurno = DataLayer.obj.taODL.getByMacchinaPeriodoNoNull(idxMacchina.ToString(), turnoCurr.inizio, turnoCurr.fine);
|
|
// se ho almeno 1 ODL approvo...
|
|
foreach (DS_ProdTempi.ODLRow odl in elencoOdlTurno)
|
|
{
|
|
idxOdl = odl.IdxODL;
|
|
// calcolo periodo ODL
|
|
periodoOdl = datario.mngr.setIntervallo(odl.DataInizio, odl.DataFine);
|
|
// calcolo intersezione periodi: tra turno e validità ODL
|
|
periodoProd = datario.mngr.intersecaIntervalli(periodoOdl, turnoCurr.periodo);
|
|
// calcolo i pezzi da confermare x l'ODL in esame... ovvero imposto inizio/fine periodo da intersezione periodo ODL + turno
|
|
try
|
|
{
|
|
// approvando tanto la produzione
|
|
pzProd = DataLayer.obj.taPzProd2conf.getByMacchinaPeriodo(idxMacchina.ToString(), periodoProd.inizio, periodoProd.fine)[0].pezziNonConfermati;
|
|
}
|
|
catch
|
|
{
|
|
pzProd = 0;
|
|
}
|
|
// carico i dati x Turno ed ODL
|
|
try
|
|
{
|
|
DataLayer.obj.taPzProd2conf.stp_DatiConf_conferma(idxOdl, idxMacchina.ToString(), MatrAppr, turnoCurr.inizio, turnoCurr.fine, turnoCurr.TNum, idxStatoProd, pzProd);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore in INSERT dati x tab DatiConfermati: odl: {0}, idxMacchina: {1}, turno da {2} a {3}, errore{4}{5}", idxOdl, idxMacchina, turnoCurr.inizio, turnoCurr.fine, Environment.NewLine, exc), tipoLog.ERROR);
|
|
}
|
|
}
|
|
// qui non ho + cambiato nulla per multi/ODL
|
|
try
|
|
{
|
|
// chiamo stored inserimento dati produzione per il turno
|
|
DataLayer.obj.taDatiProd.stp_DatiProd_insAllPeriodo(idxMacchina.ToString(), turnoCurr.inizio, turnoCurr.fine, turnoCurr.inizio.Date, turnoCurr.TNum, MatrAppr);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore in insert x tab DatiProduzione per il turno: odl: {0}, idxMacchina: {1}, turno da {2} a {3}, errore{4}{5}", idxOdl, idxMacchina, turnoCurr.inizio, turnoCurr.fine, Environment.NewLine, exc), tipoLog.ERROR);
|
|
}
|
|
dataCurr = dataCurr.AddHours(durataTurno);
|
|
}
|
|
// IN FINE confermo la produzione della DIFFERENZA tra quanto rilevato a sistema dai tempi ciclo rilevati e quanto dichiarato all'istante della dichiarazione
|
|
try
|
|
{
|
|
pzProd = DataLayer.obj.taPzProd2conf.getByMacchinaPeriodo(idxMacchina.ToString(), rigaProd.DataFrom, rigaProd.DataTo)[0].pezziNonConfermati;
|
|
}
|
|
catch
|
|
{
|
|
pzProd = 0;
|
|
}
|
|
// confermo DELTA tab DatiConfermati
|
|
DataLayer.obj.taPzProd2conf.stp_DatiConf_conferma(idxOdl, idxMacchina.ToString(), MatrAppr, DateTime.Now, DateTime.Now, 1, idxStatoProd, numPzConfermati - pzProd);
|
|
// confermo DELTA tab DatiProduzione - ATTENZIONE NON METTO TEMPO NEGATIVO!!!
|
|
DataLayer.obj.taDatiProd.stp_DatiProd_insert(idxOdl, idxMacchina.ToString(), MatrAppr, DateTime.Now, DateTime.Now, 1, numPzConfermati - pzProd, 0, "T_CorrProd");
|
|
// mostro output
|
|
lblOut.Text = string.Format("Confermata la produzione per {0} pezzi!", numPzConfermati);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore nella chiamata a stored di conferma dati!{0}{1}", Environment.NewLine, exc), tipoLog.ERROR);
|
|
}
|
|
#endif
|
|
DataLayer.obj.confermaProdMacchina(idxMacchina.ToString(), memLayer.ML.confReadInt("modoConfProd"), numPzConfermati);
|
|
}
|
|
}
|
|
} |