using SinochemCarplateService.Models; using System; using System.Linq; using Wayne.Lib.StateEngine; using Wayne.Lib.StateEngine.Generic; using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming; namespace SinochemInternetPlusApp.States.ICCardMode { public class Composite : CompositeState { protected override void ConfigureCompositeStateMachine() { CONFIGURATION.Config(StateMachine.StateTransitionLookup); } public override void UnhandledEvent(StateEngineEvent stateEngineEvent, ref Transition transition) { base.UnhandledEvent(stateEngineEvent, ref transition); //Create new Eps Trx when new car is coming if (stateEngineEvent.Type.Equals(EventType.CarPlateScanned)) { var genericEvent = stateEngineEvent as GenericEvent; if (genericEvent != null && genericEvent.EventArgs != null) { var newNozzleId = Convert.ToInt32(genericEvent.EventArgs.gun); Main.NewEpsTrx = EpsTransaction.CreateEpsTrx(newNozzleId, EpsTransactionMode.CarPlateMode, Main.DebugLogger); Main.NewEpsTrx.Model.car_number = genericEvent.EventArgs.car_Number; Main.NewEpsTrx.Model.ttc = genericEvent.EventArgs.ttc; Main.NewEpsTrx.Model.balance_before_trx = genericEvent.EventArgs.amount; Main.NewEpsTrx.Model.token = genericEvent.EventArgs.token; Main.NewEpsTrx.Model.tid = genericEvent.EventArgs.tid; Main.NewEpsTrx.Model.xf_date = DateTime.Parse(DateTime.Now.Date.ToString("yyyy-MM-dd")); Main.NewEpsTrx.Model.trx_status = EpsTrxStatus.BeforeFueling; Main.NewEpsTrx.SaveToDb(); //Sending trx list including the new trx var validTrx = EpsTransactionQuery.GetValidCarPlateEpsTrxModels( Main.GetAllNozzlesOnThisSide(), ConfigurationValues.AlreadyDoneEpsTrxCountPerDisplay, Main.DebugLogger); Main.ActiveTrx = validTrx; if (Main.Eps.NozzleMappingGradeName() != null) { foreach (var trx in validTrx) { if (trx.trx_status == EpsTrxStatus.BeforeFueling || trx.trx_status == EpsTrxStatus.Fueling) { trx.AvailableNozzleGrade = Main.GetAvailableNozzleInfo(); } } } int requestId; var text = Main.Eps.CreateDisplayTrxCommand(validTrx, out requestId, 0); if (Main.Eps.CarPlateHandler != null) { DebugLog(text); Main.Eps.CarPlateHandler.BroadcastMessageViaFdc(text); } genericEvent.Handled = true; } } else if (stateEngineEvent.Type.Equals(EventType.ReaderStateChanged)) { var genericEvent = stateEngineEvent as GenericEvent; if (genericEvent != null && genericEvent.EventArgs != null && genericEvent.EventArgs.CardReaderState.State == CardReaderState.CardInserted) { DebugLog("Unexpected CardInsert event in the CarPlateManualMode"); genericEvent.Handled = true; return; } } else if (stateEngineEvent.Type.Equals(EventType.OnlineVerification)) { var genericEvent = stateEngineEvent as GenericEvent; if (genericEvent != null && genericEvent.EventArgs != null) { DebugLog("Unexpected card online verification event in the CarPlateManualMode"); genericEvent.Handled = true; return; } } } } }