Files
GMW/GMW_data/StateMachine.cs
2017-05-10 18:02:48 +02:00

115 lines
4.6 KiB
C#

using SteamWare;
using System;
namespace GMW_data
{
/// <summary>
/// classe gestioen amcchina a stati
/// </summary>
public class StateMachine
{
#region area table adapters
public DS_SMTableAdapters.TabTranPosizEventiTableAdapter taTTPE;
public DS_SMTableAdapters.AnagTipoDelibereTableAdapter taATD;
/// <summary>
/// init dei table adapters
/// </summary>
protected void initTA()
{
taTTPE = new GMW_data.DS_SMTableAdapters.TabTranPosizEventiTableAdapter();
taATD = new GMW_data.DS_SMTableAdapters.AnagTipoDelibereTableAdapter();
}
/// <summary>
/// effettua setup dei connection strings da web.config delal singola applicazione
/// </summary>
protected virtual void setupConnectionStringBase()
{
// connections del db
taTTPE.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taATD.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
}
#endregion
protected StateMachine()
{
initTA();
setupConnectionStringBase();
}
/// <summary>
/// effettua la delibera dell'UDC andando a processare tramite macchina a stati l'eventuale spostamento di IdxPosizione
/// </summary>
/// <param name="UDC"></param>
/// <param name="CodTipoDelibera"></param>
/// <param name="CodEvento"></param>
/// <param name="clientIp">IP del client</param>
/// <returns></returns>
public void deliberaUdc(string UDC, string CodTipoDelibera, string CodEvento, string clientIp)
{
bool fatto = false;
try
{
// calcolo la prima cella possibile data
utils.obj.taSTP.stp_UDC_delibera(CodTipoDelibera, UDC, CodEvento, MagClass.magazzino.CodSoggCurrUser, memLayer.ML.cdv("CodCS"));
// dopo la delibera passo direttamente al consumo se richiesto!
if (memLayer.ML.confReadBool("Cosumo84PostDelibera"))
{
// prendo i dati PRIMA che scarichi l'UDC... e con qta negativa xché qui devo "rimetterlo a posto"...
DS_magazzino.ElencoCartelliniRow riga = MagClass.magazzino.taCartellini.getDetailsUdcByUdc(UDC)[0];
string Particolare = riga.Particolare;
int IdxPosizione = riga.IdxPosizione;
decimal Quantita = -riga.Qta;
// da db determino che non faccio scaricamento automatico da altre posizioni terzisti/clienti (solo 84) xché non c'è in TabTranEventi
fatto = MagClass.magazzino.scaricaUdcMpWip(UDC, clientIp);
}
logger.lg.scriviLog(string.Format(" | {0} | deliberato UDC {1} | evento {2} | tipo delibera {2}", clientIp, UDC, CodEvento, CodTipoDelibera), tipoLog.INFO);
}
catch (Exception e)
{
logger.lg.scriviLog(string.Format(" | {5} | Non sono riuscito a fare la delibera di tipo {0} per l'UDC {1} da parte dell'user {2}, messaggio d'errore {3}{4}", CodTipoDelibera, UDC, user_std.UtSn.userNameAD, Environment.NewLine, e, clientIp), SteamWare.tipoLog.ERROR);
}
}
/// <summary>
/// calcola dalla tabella di transizioni la nuova posizione associata all'evento ed alla posizione attuale
/// </summary>
/// <param name="CodEvento"></param>
/// <param name="IdxPosizione"></param>
/// <returns></returns>
public int getIdxPostizioneTo(string CodEvento, int IdxPosizione)
{
int answ = 0;
try
{
answ = taTTPE.getByEventoPosizione(CodEvento, IdxPosizione)[0].IdxPosizioneTo;
}
catch
{ }
return answ;
}
/// <summary>
/// calcola dalla tabella di transizioni il blocco di destinazione associato all'evento ed alla posizione attuale
/// </summary>
/// <param name="CodEvento"></param>
/// <param name="IdxPosizione"></param>
/// <returns></returns>
public int getIdxBloccoTo(string CodEvento, int IdxPosizione)
{
int answ = 0;
try
{
answ = taTTPE.getByEventoPosizione(CodEvento, IdxPosizione)[0].IdxBloccoTo;
}
catch
{ }
return answ;
}
/// <summary>
/// Singleton accesos a state machine
/// </summary>
public static StateMachine SM = new StateMachine();
}
}