using SteamWare; using System; namespace GMW_data { /// /// classe gestioen amcchina a stati /// public class StateMachine { #region area table adapters public DS_SMTableAdapters.TabTranPosizEventiTableAdapter taTTPE; public DS_SMTableAdapters.AnagTipoDelibereTableAdapter taATD; /// /// init dei table adapters /// protected void initTA() { taTTPE = new GMW_data.DS_SMTableAdapters.TabTranPosizEventiTableAdapter(); taATD = new GMW_data.DS_SMTableAdapters.AnagTipoDelibereTableAdapter(); } /// /// effettua setup dei connection strings da web.config delal singola applicazione /// 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(); } /// /// effettua la delibera dell'UDC andando a processare tramite macchina a stati l'eventuale spostamento di IdxPosizione /// /// /// /// /// IP del client /// 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); } } /// /// calcola dalla tabella di transizioni la nuova posizione associata all'evento ed alla posizione attuale /// /// /// /// public int getIdxPostizioneTo(string CodEvento, int IdxPosizione) { int answ = 0; try { answ = taTTPE.getByEventoPosizione(CodEvento, IdxPosizione)[0].IdxPosizioneTo; } catch { } return answ; } /// /// calcola dalla tabella di transizioni il blocco di destinazione associato all'evento ed alla posizione attuale /// /// /// /// public int getIdxBloccoTo(string CodEvento, int IdxPosizione) { int answ = 0; try { answ = taTTPE.getByEventoPosizione(CodEvento, IdxPosizione)[0].IdxBloccoTo; } catch { } return answ; } /// /// Singleton accesos a state machine /// public static StateMachine SM = new StateMachine(); } }