/// <summary> /// Load and execute engine rules /// </summary> public void EngineRulesExecution(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegraty, OSUSR_UUK_FLT_INFO flightInfoI, OSUSR_UUK_FLT_INFO flightInfoF, String hub, ISessionFactory factory) { BagTMLog.LogDebug("BagTM Engine Rules Execution Start", this); ISession session = factory.CreateSession(); try { bagIntegraty.IATD = (flightInfoI != null && flightInfoI.ATD != null) ? flightInfoI.ATD : (flightInfoI != null && flightInfoI.ETD != null) ? flightInfoI.ETD : (flightInfoI != null && flightInfoI.STD != null) ? flightInfoI.STD : null; bagIntegraty.FATD = (flightInfoF != null && flightInfoF.ATD != null) ? flightInfoF.ATD : (flightInfoF != null && flightInfoF.ETD != null) ? flightInfoF.ETD : (flightInfoF != null && flightInfoF.STD != null) ? flightInfoF.STD : null; session.Insert(hub); //Insert facts into rules engine's memory session.Insert(bag); session.Insert(bagIntegraty); //Start match/resolve/act cycle session.Fire(); } catch (Exception e) { BagTMLog.LogError("BagTM Engine Error Processing Rules", this, e); throw e; } BagTMLog.LogDebug("BagTM Engine Rules Execution Ending", this); }
public override void Define() { OSUSR_UUK_BAGMSGS bag = null; OSUSR_UUK_BAGINTEG bagIntegrity = null; String hub = null; When() .Match <OSUSR_UUK_BAGMSGS>(() => bag, b => b.VBAGSOURCIND != null && b.VBAGSOURCIND.Equals(BagTMRulesActions.localBagParameter)) .Match <OSUSR_UUK_BAGMSGS>(b => b.SMI != null && BagTMRulesActions.standardMessageIdentifiers.Contains <String>(b.SMI)) .Match <OSUSR_UUK_BAGINTEG>(() => bagIntegrity, bi => bi.NUMBER != null && bag.NBAGTAG != null && bi.NUMBER.Equals(bag.NBAGTAG + bag.NNRTAGS)) .Match <String>(() => hub, h => h != null && bag.VCITY != null && h.Equals(bag.VCITY)); Then() .Do(ctx => this.Action(bag, bagIntegrity, hub)); }
/// <summary> /// Search in the baggage integraty table the bag tag with timestamp higher that specified /// </summary> /// <param name="bagTag"></param> /// <returns>List<OSUSR_UUK_BAGMSGS></returns> private List <OSUSR_UUK_BAGMSGS> SearchBaggageMsgsByBagTagandTimestamp(OSUSR_UUK_BAGMSGS bagTag) { BaggageEntities db = new BaggageEntities(); var bagQuery = from s in db.OSUSR_UUK_BAGMSGS select s; var results = bagQuery.Where(s => s.NBAGTAG == bagTag.NBAGTAG && s.TIMESTAMP > bagTag.TIMESTAMP) .OrderBy(s => s.TIMESTAMP) .ToList <OSUSR_UUK_BAGMSGS>(); return(results); }
public override void Define() { OSUSR_UUK_BAGMSGS bag = null; OSUSR_UUK_BAGINTEG bagIntegrity = null; String hub = null; When() .Match <OSUSR_UUK_BAGMSGS>(() => bag, b => b.SMI.Equals(BagTMRulesActions.SMI_BSM)) .Match <OSUSR_UUK_BAGMSGS>(b => b.VBAGSOURCIND != null && b.VBAGSOURCIND.Equals(BagTMRulesActions.localBagParameter)) .Match <OSUSR_UUK_BAGINTEG>(() => bagIntegrity, bi => bi.NUMBER != null && bag.NBAGTAG != null && bi.NUMBER.Equals(bag.NBAGTAG + bag.NNRTAGS)) .Match <String>(() => hub, h => h != null && h.Equals(bag.VCITY)) .Match <OSUSR_UUK_BAGMSGS>(b => b.STATUSINDICATOR != null && b.STATUSINDICATOR.Equals(BagTMRulesActions.PAX_CANCEL)); Then() .Do(ctx => this.Action(bag, bagIntegrity, hub)); }
/// <summary> /// Calculate the correct message to reinsert so the BAGINTEG table is updated /// </summary> /// <param name="bag"></param> /// <returns></returns> public void CalculateErrorReprocessing(OSUSR_UUK_BAGMSGS bag, int n) { List <OSUSR_UUK_BAGMSGS> listOfBags = this.SearchBaggageMsgsByBagTagandTimestamp(bag); if (listOfBags != null && listOfBags.Count > 0) { foreach (OSUSR_UUK_BAGMSGS bagAux in listOfBags) { this.ProcessBaggageTTYEngine(bagAux, n); } return; } else { return; } }
/// <summary> /// Search in the baggage integraty table the bag tag with timestamp higher that specified /// </summary> /// <param name="bagTag"></param> /// <returns>List<OSUSR_UUK_BAGMSGS></returns> private List <OSUSR_UUK_BAGMSGS> SearchBaggageMsgsByFlightandSeatNumber(OSUSR_UUK_BAGMSGS bagTag) { BaggageEntities db = new BaggageEntities(); var bagQuery = from s in db.OSUSR_UUK_BAGMSGS select s; var results = bagQuery.Where(s => s.FFLTNR == bagTag.FFLTNR && s.FDATE == bagTag.FDATE && s.FDEST == bagTag.FDEST && s.IFLTNR == bagTag.IFLTNR && s.IDATE == bagTag.IDATE && s.IORIGIN == bagTag.IORIGIN && s.SSEAT == bagTag.SSEAT && s.NBAGTAG != bagTag.NBAGTAG && s.TIMESTAMP == bagQuery.Where(k => k.NBAGTAG == s.NBAGTAG && k.SMI == BagTMRulesActions.SMI_BSM) .Max(x => x.TIMESTAMP)) .OrderBy(s => s.TIMESTAMP) .ToList <OSUSR_UUK_BAGMSGS>(); return(results); }
/// <summary> /// Load and execute engine rules /// </summary> public void ProcessBoardBaggageTTY(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegraty, OSUSR_UUK_FLT_INFO flightInfoI, OSUSR_UUK_FLT_INFO flightInfoF, String hub, ISessionFactory factory) { BagTMLog.LogDebug("BagTM Engine Process Board Baggage Start", this); try { List <OSUSR_UUK_BAGMSGS> listOfBagBoarded = this.SearchBaggageMsgsByFlightandSeatNumber(bag); foreach (OSUSR_UUK_BAGMSGS boardBag in listOfBagBoarded) { OSUSR_UUK_BAGINTEG boardBagInteg = this.SearchBaggageIntegratyByBagIdentifier(boardBag.NBAGTAG + boardBag.NNRTAGS); if (boardBagInteg == null) { boardBagInteg = new OSUSR_UUK_BAGINTEG(); } var inst = bag.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); OSUSR_UUK_BAGMSGS bagClone = (OSUSR_UUK_BAGMSGS)inst.Invoke(bag, null); bagClone.NNRTAGS = boardBag.NNRTAGS; bagClone.NBAGTAG = boardBag.NBAGTAG; BagTMLog.LogDebug("BagTM Board Baggage Engine Rules Execution", this); // Run engine process rules this.EngineRulesExecution(bagClone, boardBagInteg, flightInfoI, flightInfoF, hub, factory); } } catch (Exception e) { BagTMLog.LogError("BagTM Engine Error Process Board Baggage", this, e); throw e; } BagTMLog.LogDebug("BagTM Engine Process Board Baggage Ending", this); }
public override void Define() { OSUSR_UUK_BAGMSGS bag = null; OSUSR_UUK_BAGINTEG bagIntegrity = null; String hub = null; When() .Or(x => x .And(y1 => y1 .Match <OSUSR_UUK_BAGMSGS>(() => bag, b => b.SMI.Equals(BagTMRulesActions.SMI_BPM)) .Match <OSUSR_UUK_BAGMSGS>(b => b.BIRREG != null && b.BIRREG.Equals(BagTMRulesActions.BAGGAGE_OFFLOAD)) .Match <OSUSR_UUK_BAGINTEG>(() => bagIntegrity, bi => bi.NUMBER != null && bag.NBAGTAG != null && bi.NUMBER.Equals(bag.NBAGTAG + bag.NNRTAGS)) .Match <OSUSR_UUK_BAGMSGS>(b => b.VBAGSOURCIND.Equals(BagTMRulesActions.hubBagParameter)) .Match <String>(() => hub, h => bag.VCITY.Equals(h)) ) .And(y2 => y2 .Match <OSUSR_UUK_BAGMSGS>(() => bag, b => b.SMI.Equals(BagTMRulesActions.SMI_BPM)) .Match <OSUSR_UUK_BAGMSGS>(b => b.BIRREG != null && b.BIRREG.Equals(BagTMRulesActions.BAGGAGE_OFFLOAD)) .Match <OSUSR_UUK_BAGINTEG>(() => bagIntegrity, bi => bi.NUMBER != null && bag.NBAGTAG != null && bi.NUMBER.Equals(bag.NBAGTAG + bag.NNRTAGS)) .Match <OSUSR_UUK_BAGMSGS>(b => b.VBAGSOURCIND.Equals(BagTMRulesActions.localBagParameter)) .Match <String>(() => hub, h => bag.FDEST.Equals(h)))); Then() .Do(ctx => this.Action(bag, bagIntegrity, hub)); }
public void Action(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegrity, String hub) { transformation = new BagIntegrityTransformation(); transformation.UpdateBagIntegrity(bag, bagIntegrity, hub, false, BagTMRulesActions.BAG_TTY_CHANGE_AUTH); }
public void Action(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegrity, String hub) { transformation = new BagIntegrityTransformation(); transformation.CreateBagIntegrity(bag, bagIntegrity, hub, true); }
public void UpdateBagIntegrity(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegrity, String hub, bool isHub, Int32 TTYChange) { BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity Start", this); BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity", bag); BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity", bagIntegrity); BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity", hub); BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity", isHub); BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity", TTYChange); bool isLocalTTYforHub = false; if (isHub && BagTMRulesActions.localBagParameter.Equals(bag.VBAGSOURCIND)) { isLocalTTYforHub = true; } if (bag.NBAGTAG == null || bagIntegrity.NUMBER != bag.NBAGTAG + bag.NNRTAGS) { throw new EngineProcessingException( String.Format("Message TTY {0} and BAGTAG {1} not processed due to incosistences.", bag.SMI, bag.NBAGTAG)); } // Have to be defined what to do if (null != bagIntegrity.CLOSE) { bagIntegrity.CLOSE = null; } // Create different BagIntegrity record creation for Hub and Local TTY messages if (isHub) { // The message is a local message for Hub transit if (isLocalTTYforHub) { if (bag.FFLTNR != null && !CommonFunctions.FormatFlightNumber(bag.FFLTNR).Equals(bagIntegrity.IFLTNR)) { bagIntegrity.IFLTNR = CommonFunctions.FormatFlightNumber(bag.FFLTNR); } if (bag.FDATE != null && !bag.FDATE.Equals(bagIntegrity.IDATE)) { bagIntegrity.IDATE = bag.FDATE; } if (bag.VCITY != null && !bag.VCITY.Equals(bagIntegrity.IORIGIN)) { bagIntegrity.IORIGIN = bag.VCITY; } if (bag.SSEAT != null && !bag.SSEAT.Equals(bagIntegrity.ISEAT)) { bagIntegrity.ISEAT = bag.SSEAT; } if (bag.OFLTNR != null && !CommonFunctions.FormatFlightNumber(bag.OFLTNR).Equals(bagIntegrity.FFLTNR)) { bagIntegrity.FFLTNR = CommonFunctions.FormatFlightNumber(bag.OFLTNR); } if (bag.ODATE != null && !bag.ODATE.Equals(bagIntegrity.FDATE)) { bagIntegrity.FDATE = bag.ODATE; } if (bag.ODEST != null && !bag.ODEST.Equals(bagIntegrity.FDEST)) { bagIntegrity.FDEST = bag.ODEST; } if (BagTMRulesActions.SMI_BPM.Equals(bag.SMI)) { bagIntegrity.BPMIN = BagTMRulesActions.YES; } if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { bagIntegrity.BSMBOARDI = BagTMRulesActions.PAX_BOARDED_STATUS; } switch (TTYChange) { case BagTMRulesActions.BAG_TTY_CHANGE_AUTH: bagIntegrity.IAUT = bag.SAUTL; break; case BagTMRulesActions.BAG_TTY_CHANGE_PAX_BOARDED: bagIntegrity.BSMBOARDI = BagTMRulesActions.PAX_BOARDED_STATUS; break; case BagTMRulesActions.BAG_TTY_CHANGE_LOAD_FAIL: bagIntegrity.BPMIN = BagTMRulesActions.PAX_BOARDED_FAIL; break; case BagTMRulesActions.BAG_TTY_CHANGE_BAGGAGE_OFFLOAD: if (bagIntegrity.IFLTNR != null) { bagIntegrity.IAUT = BagTMRulesActions.BAG_OFF; bagIntegrity.BPMIN = BagTMRulesActions.BAG_OFF; } if (bagIntegrity.FFLTNR != null) { bagIntegrity.FAUT = BagTMRulesActions.BAG_OFF; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_OFF; } break; case BagTMRulesActions.BAG_TTY_CHANGE_PAX_CANCEL: if (bagIntegrity.IFLTNR != null) { bagIntegrity.IAUT = BagTMRulesActions.PAX_AUT_STATUS_CODE; bagIntegrity.BPMIN = BagTMRulesActions.PAX_AUT_STATUS_CODE; } if (bagIntegrity.FFLTNR != null) { bagIntegrity.FAUT = BagTMRulesActions.PAX_AUT_STATUS_CODE; bagIntegrity.BPMHUB = BagTMRulesActions.PAX_AUT_STATUS_CODE; } break; } if (bag.PPAXNAME.Equals(BagTMRulesActions.BAGGAGE_CREW)) { bagIntegrity.FAUT = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BPMIN = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BSMBOARDI = BagTMRulesActions.BAG_CREW_VALUE; } } else { if (bag.IFLTNR != null && !CommonFunctions.FormatFlightNumber(bag.IFLTNR).Equals(bagIntegrity.IFLTNR)) { bagIntegrity.IFLTNR = CommonFunctions.FormatFlightNumber(bag.IFLTNR); } if (bag.IDATE != null && !bag.IDATE.Equals(bagIntegrity.IDATE)) { bagIntegrity.IDATE = bag.IDATE; } if (bag.IORIGIN != null && !bag.IORIGIN.Equals(bagIntegrity.IORIGIN)) { bagIntegrity.IORIGIN = bag.IORIGIN; } if (bag.SSEAT != null && !bag.SSEAT.Equals(bagIntegrity.FSEAT)) { bagIntegrity.FSEAT = bag.SSEAT; } if (bag.FFLTNR != null && !CommonFunctions.FormatFlightNumber(bag.FFLTNR).Equals(bagIntegrity.FFLTNR)) { bagIntegrity.FFLTNR = CommonFunctions.FormatFlightNumber(bag.FFLTNR); } if (bag.FDATE != null && !bag.FDATE.Equals(bagIntegrity.FDATE)) { bagIntegrity.FDATE = bag.FDATE; } if (bag.FDEST != null && !bag.FDEST.Equals(bagIntegrity.FDEST)) { bagIntegrity.FDEST = bag.FDEST; } if (BagTMRulesActions.SMI_BPM.Equals(bag.SMI)) { bagIntegrity.BPMHUB = BagTMRulesActions.YES; } if (BagTMRulesActions.BAGGAGE_RUSH.Equals(bag.EEXCEP) || this.IsRush(bagIntegrity)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_RUSH_VALUE; } if (BagTMRulesActions.BAGGAGE_PRIO.Equals(bag.EEXCEP)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_PRIO_VALUE; } if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { bagIntegrity.BSMBOARD = BagTMRulesActions.PAX_BOARDED_STATUS; } switch (TTYChange) { case BagTMRulesActions.BAG_TTY_CHANGE_AUTH: bagIntegrity.FAUT = bag.SAUTL; break; case BagTMRulesActions.BAG_TTY_CHANGE_PAX_BOARDED: bagIntegrity.BSMBOARD = BagTMRulesActions.PAX_BOARDED_STATUS; break; case BagTMRulesActions.BAG_TTY_CHANGE_LOAD_FAIL: bagIntegrity.BPMHUB = BagTMRulesActions.PAX_BOARDED_FAIL; break; case BagTMRulesActions.BAG_TTY_CHANGE_BAGGAGE_OFFLOAD: bagIntegrity.FAUT = BagTMRulesActions.BAG_OFF; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_OFF; break; case BagTMRulesActions.BAG_TTY_CHANGE_PAX_CANCEL: bagIntegrity.FAUT = BagTMRulesActions.PAX_AUT_STATUS_CODE; bagIntegrity.BPMHUB = BagTMRulesActions.PAX_AUT_STATUS_CODE; break; } if (bag.PPAXNAME.Equals(BagTMRulesActions.BAGGAGE_CREW)) { bagIntegrity.FAUT = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BSMBOARD = BagTMRulesActions.BAG_CREW_VALUE; } } } else { if (bag.FFLTNR != null && !CommonFunctions.FormatFlightNumber(bag.FFLTNR).Equals(bagIntegrity.FFLTNR)) { bagIntegrity.FFLTNR = CommonFunctions.FormatFlightNumber(bag.FFLTNR); } if (bag.FDATE != null && !bag.FDATE.Equals(bagIntegrity.FDATE)) { bagIntegrity.FDATE = bag.FDATE; } if (bag.FDEST != null && !bag.FDEST.Equals(bagIntegrity.FDEST)) { bagIntegrity.FDEST = bag.FDEST; } if (bag.SSEAT != null && !bag.SSEAT.Equals(bagIntegrity.FSEAT)) { bagIntegrity.FSEAT = bag.SSEAT; } if (BagTMRulesActions.SMI_BPM.Equals(bag.SMI)) { bagIntegrity.BPMHUB = BagTMRulesActions.YES; } if (BagTMRulesActions.BAGGAGE_RUSH.Equals(bag.EEXCEP) || this.IsRush(bagIntegrity)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_RUSH_VALUE; } if (BagTMRulesActions.BAGGAGE_PRIO.Equals(bag.EEXCEP)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_PRIO_VALUE; } if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { bagIntegrity.BSMBOARD = BagTMRulesActions.PAX_BOARDED_STATUS; } switch (TTYChange) { case BagTMRulesActions.BAG_TTY_CHANGE_AUTH: bagIntegrity.FAUT = bag.SAUTL; break; case BagTMRulesActions.BAG_TTY_CHANGE_PAX_BOARDED: bagIntegrity.BSMBOARD = BagTMRulesActions.PAX_BOARDED_STATUS; break; case BagTMRulesActions.BAG_TTY_CHANGE_LOAD_FAIL: bagIntegrity.BPMHUB = BagTMRulesActions.PAX_BOARDED_FAIL; break; case BagTMRulesActions.BAG_TTY_CHANGE_BAGGAGE_OFFLOAD: bagIntegrity.FAUT = BagTMRulesActions.BAG_OFF; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_OFF; break; case BagTMRulesActions.BAG_TTY_CHANGE_PAX_CANCEL: bagIntegrity.FAUT = BagTMRulesActions.PAX_AUT_STATUS_CODE; bagIntegrity.BPMHUB = BagTMRulesActions.PAX_AUT_STATUS_CODE; break; } if (bag.PPAXNAME.Equals(BagTMRulesActions.BAGGAGE_CREW)) { bagIntegrity.FAUT = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BSMBOARD = BagTMRulesActions.BAG_CREW_VALUE; } } // Change register for baggage groups if (!bagIntegrity.NUMBER.EndsWith(BagTMRulesActions.BAGGAGE_NRTAG_001)) { bagIntegrity.FAUT = (bagIntegrity.FAUT != null) ? BagTMRulesActions.BAG_GROUP_AUT_CODE : null; bagIntegrity.IAUT = (bagIntegrity.IAUT != null) ? BagTMRulesActions.BAG_GROUP_AUT_CODE : null; bagIntegrity.BPMIN = (bagIntegrity.BPMIN != null) ? BagTMRulesActions.BAG_GROUP_BPM_CODE : null; bagIntegrity.IAUT = (bagIntegrity.BPMHUB != null) ? BagTMRulesActions.BAG_GROUP_BPM_CODE : null; } BaggageEntities dbup = new BaggageEntities(); try { BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity Saving", bagIntegrity); // Verifies if updating last baggage integrity record, if more then one remove all OSUSR_UUK_BAGINTEG lastBaggageIntegraty = this.LastBaggageIntegraty(bagIntegrity); if (lastBaggageIntegraty != null && lastBaggageIntegraty.TIMESTAMP != null && lastBaggageIntegraty.TIMESTAMP > bagIntegrity.TIMESTAMP) { this.UpdateBagIntegrity(bag, lastBaggageIntegraty, hub, isHub, TTYChange); } else { if (lastBaggageIntegraty != null) { bagIntegrity = MergeBagIntegrity(bagIntegrity, lastBaggageIntegraty); } bagIntegrity.TIMESTAMP = DateTime.Now; dbup.OSUSR_UUK_BAGINTEG.Attach(bagIntegrity); dbup.Entry(bagIntegrity).State = EntityState.Modified; dbup.SaveChanges(); } BagTMLog.LogInfo("BagTM Engine Update Bag Integrity: " + bagIntegrity.NUMBER, this); } catch (DbEntityValidationException ex) { dbup.OSUSR_UUK_BAGINTEG.Remove(bagIntegrity); // Retrieve the error messages as a list of strings. var errorMessages = ex.EntityValidationErrors; // Join the list to a single string. var fullErrorMessage = string.Join("; ", errorMessages); // Combine the original exception message with the new one. var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); // Throw a new DbEntityValidationException with the improved exception message. throw new EngineProcessingException(exceptionMessage); } catch (Exception e) { dbup.OSUSR_UUK_BAGINTEG.Remove(bagIntegrity); throw e; } BagTMLog.LogDebug("BagTM Engine Upodate Bag Integrity End", this); }
public void CreateBagIntegrity(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegrity, String hub, bool isHub) { BagTMLog.LogDebug("BagTM Engine Create Bag Integrity Start", this); BagTMLog.LogDebug("BagTM Engine Create Bag Integrity ", bag); BagTMLog.LogDebug("BagTM Engine Create Bag Integrity ", bagIntegrity); BagTMLog.LogDebug("BagTM Engine Create Bag Integrity ", hub); BagTMLog.LogDebug("BagTM Engine Create Bag Integrity ", isHub); bool isLocalTTYforHub = false; bool isLocalEndingInHub = false; if (isHub && BagTMRulesActions.localBagParameter.Equals(bag.VBAGSOURCIND)) { isLocalTTYforHub = true; } if (isHub && isLocalTTYforHub && bag.OFLTNR == null) { isLocalEndingInHub = true; } if (isHub && !isLocalTTYforHub && bag.IFLTNR != null) { isLocalEndingInHub = true; } bagIntegrity.NUMBER = bag.NBAGTAG + bag.NNRTAGS; bagIntegrity.CLOSE = null; bagIntegrity.TIMESTAMP = DateTime.Now; // Create different BagIntegrity record creation for Hub and Local TTY messages if (isHub) { // The message is a local message for Hub transit if (isLocalTTYforHub) { bagIntegrity.IFLTNR = CommonFunctions.FormatFlightNumber(bag.FFLTNR); bagIntegrity.IDATE = bag.FDATE; bagIntegrity.IORIGIN = bag.VCITY; bagIntegrity.ISEAT = bag.SSEAT; bagIntegrity.IAUT = bag.SAUTL; // Fill the FFP information for the flight if (bag.YFQTV != null) { if (bag.YFQTV.Contains(BagTMRulesActions.FFP_GOLD)) { bagIntegrity.IFFP = BagTMRulesActions.FFP_GOLD_VALUE; } else if (bag.YFQTV.Contains(BagTMRulesActions.FFP_SILVER)) { bagIntegrity.IFFP = BagTMRulesActions.FFP_SILVER_VALUE; } else { bagIntegrity.IFFP = BagTMRulesActions.FFP_BLUE_VALUE; } } // If TTY implicates a onward flight out of the Hub if (!isLocalEndingInHub) { bagIntegrity.FFLTNR = CommonFunctions.FormatFlightNumber(bag.OFLTNR); bagIntegrity.FDATE = bag.ODATE; bagIntegrity.FDEST = bag.ODEST; } if (BagTMRulesActions.SMI_BPM.Equals(bag.SMI)) { bagIntegrity.BPMIN = BagTMRulesActions.YES; } if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { bagIntegrity.BSMBOARDI = BagTMRulesActions.PAX_BOARDED_STATUS; } if (BagTMRulesActions.BAGGAGE_RUSH.Equals(bag.EEXCEP) || this.IsRush(bagIntegrity)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_RUSH_VALUE; } if (BagTMRulesActions.BAGGAGE_PRIO.Equals(bag.EEXCEP)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_PRIO_VALUE; } if (bag.PPAXNAME.Equals(BagTMRulesActions.BAGGAGE_CREW)) { bagIntegrity.IAUT = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BPMIN = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BSMBOARDI = BagTMRulesActions.BAG_CREW_VALUE; } } else { bagIntegrity.IFLTNR = CommonFunctions.FormatFlightNumber(bag.IFLTNR); bagIntegrity.IDATE = bag.IDATE; bagIntegrity.IORIGIN = bag.IORIGIN; bagIntegrity.FFLTNR = CommonFunctions.FormatFlightNumber(bag.FFLTNR); bagIntegrity.FDATE = bag.FDATE; bagIntegrity.FDEST = bag.FDEST; bagIntegrity.FAUT = bag.SAUTL; bagIntegrity.FSEAT = bag.SSEAT; // Fill the FFP information for the flight if (bag.YFQTV != null) { if (bag.YFQTV.Contains(BagTMRulesActions.FFP_GOLD)) { bagIntegrity.OFFP = BagTMRulesActions.FFP_GOLD_VALUE; } else if (bag.YFQTV.Contains(BagTMRulesActions.FFP_SILVER)) { bagIntegrity.OFFP = BagTMRulesActions.FFP_SILVER_VALUE; } else { bagIntegrity.OFFP = BagTMRulesActions.FFP_BLUE_VALUE; } } if (BagTMRulesActions.SMI_BPM.Equals(bag.SMI)) { bagIntegrity.BPMHUB = BagTMRulesActions.YES; } if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { bagIntegrity.BSMBOARD = BagTMRulesActions.PAX_BOARDED_STATUS; } if (BagTMRulesActions.BAGGAGE_RUSH.Equals(bag.EEXCEP) || this.IsRush(bagIntegrity)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_RUSH_VALUE; } if (BagTMRulesActions.BAGGAGE_PRIO.Equals(bag.EEXCEP)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_PRIO_VALUE; } if (bag.PPAXNAME.Equals(BagTMRulesActions.BAGGAGE_CREW)) { bagIntegrity.FAUT = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BSMBOARD = BagTMRulesActions.BAG_CREW_VALUE; } } } else { bagIntegrity.FFLTNR = CommonFunctions.FormatFlightNumber(bag.FFLTNR); bagIntegrity.FDATE = bag.FDATE; bagIntegrity.FDEST = bag.FDEST; bagIntegrity.FAUT = bag.SAUTL; bagIntegrity.FSEAT = bag.SSEAT; // Fill the FFP information for the flight if (bag.YFQTV != null) { if (bag.YFQTV.Contains(BagTMRulesActions.FFP_GOLD)) { bagIntegrity.OFFP = BagTMRulesActions.FFP_GOLD_VALUE; } else if (bag.YFQTV.Contains(BagTMRulesActions.FFP_SILVER)) { bagIntegrity.OFFP = BagTMRulesActions.FFP_SILVER_VALUE; } else { bagIntegrity.OFFP = BagTMRulesActions.FFP_BLUE_VALUE; } } if (BagTMRulesActions.SMI_BPM.Equals(bag.SMI)) { bagIntegrity.BPMHUB = BagTMRulesActions.YES; } if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { bagIntegrity.BSMBOARD = BagTMRulesActions.PAX_BOARDED_STATUS; } if (BagTMRulesActions.BAGGAGE_RUSH.Equals(bag.EEXCEP) || this.IsRush(bagIntegrity)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_RUSH_VALUE; } if (BagTMRulesActions.BAGGAGE_PRIO.Equals(bag.EEXCEP)) { bagIntegrity.ISRUSH = BagTMRulesActions.BAGGAGE_PRIO_VALUE; } if (bag.PPAXNAME.Equals(BagTMRulesActions.BAGGAGE_CREW)) { bagIntegrity.FAUT = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BPMHUB = BagTMRulesActions.BAG_CREW_VALUE; bagIntegrity.BSMBOARD = BagTMRulesActions.BAG_CREW_VALUE; } } // Change register for baggage groups if (!bagIntegrity.NUMBER.EndsWith(BagTMRulesActions.BAGGAGE_NRTAG_001)) { bagIntegrity.FAUT = (bagIntegrity.FAUT != null) ? BagTMRulesActions.BAG_GROUP_AUT_CODE : null; bagIntegrity.IAUT = (bagIntegrity.IAUT != null) ? BagTMRulesActions.BAG_GROUP_AUT_CODE : null; bagIntegrity.BPMIN = (bagIntegrity.BPMIN != null) ? BagTMRulesActions.BAG_GROUP_BPM_CODE : null; bagIntegrity.IAUT = (bagIntegrity.BPMHUB != null) ? BagTMRulesActions.BAG_GROUP_BPM_CODE : null; } BaggageEntities dbin = new BaggageEntities(); try { BagTMLog.LogDebug("BagTM Engine Create Bag Integrity Saving", bagIntegrity); dbin.OSUSR_UUK_BAGINTEG.Add(bagIntegrity); dbin.SaveChanges(); BagTMLog.LogInfo("BagTM Engine Create Bag Integrity: " + bagIntegrity.NUMBER, this); } catch (DbEntityValidationException ex) { dbin.OSUSR_UUK_BAGINTEG.Remove(bagIntegrity); // Retrieve the error messages as a list of strings. var errorMessages = ex.EntityValidationErrors; // Join the list to a single string. var fullErrorMessage = string.Join("; ", errorMessages); // Combine the original exception message with the new one. var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); // Throw a new DbEntityValidationException with the improved exception message. throw new EngineProcessingException(exceptionMessage); } catch (Exception e) { dbin.OSUSR_UUK_BAGINTEG.Remove(bagIntegrity); throw e; } BagTMLog.LogDebug("BagTM Engine Create Bag Integrity End", this); }
/// <summary> /// Process engine rules /// </summary> /// <param name="messageObject"></param> /// <param name="n"></param> public void ProcessBaggageTTYEngine(Object messageObject, int n) { BagTMLog.LogDebug("BagTM Engine Baggage TTY", this); // Only process message if is a baggage message if (messageObject.GetType() != typeof(OSUSR_UUK_BAGMSGS)) { throw new EngineProcessingException("Not a baggage message."); } OSUSR_UUK_BAGMSGS bag = (OSUSR_UUK_BAGMSGS)messageObject; int nrtag = 0; try { nrtag = Convert.ToInt32(bag.NNRTAGS); } catch (Exception e) { BagTMLog.LogError("Bag NNRTAG is not an number.", bag, e); } if (nrtag > 1) { for (int i = 0; i < nrtag; i++) { var inst = bag.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); OSUSR_UUK_BAGMSGS bagClone = (OSUSR_UUK_BAGMSGS)inst.Invoke(bag, null); bagClone.NNRTAGS = "001"; bagClone.NBAGTAG = (Convert.ToDecimal(bagClone.NBAGTAG) + i).ToString("0000000000"); ProcessBaggageTTYEngine(bagClone, n); } } BagTMLog.LogDebug("BagTM Engine Search BaggageIntegraty", bag); // Obtain baggage from Baggage Integraty table OSUSR_UUK_BAGINTEG bagIntegraty = this.SearchBaggageIntegratyByBagIdentifier(bag.NBAGTAG + bag.NNRTAGS); if (bagIntegraty == null) { bagIntegraty = new OSUSR_UUK_BAGINTEG(); } BagTMLog.LogDebug("BagTM Engine Search BaggageIntegraty Found ", bagIntegraty); BagTMLog.LogDebug("BagTM Engine Search FlightInfoI and FlightInfoF", this); OSUSR_UUK_FLT_INFO flightInfoI = null; OSUSR_UUK_FLT_INFO flightInfoF = null; bool isHub = false; bool isLocalTTYforHub = false; bool isLocalEndingInHub = false; if ((BagTMRulesActions.hubBagParameter.Equals(bag.VBAGSOURCIND) && this.hub.Equals(bag.VCITY)) || (BagTMRulesActions.localBagParameter.Equals(bag.VBAGSOURCIND) && this.hub.Equals(bag.FDEST))) { isHub = true; } if (isHub && BagTMRulesActions.localBagParameter.Equals(bag.VBAGSOURCIND)) { isLocalTTYforHub = true; } if (isHub && isLocalTTYforHub && (bag.OFLTNR == null || !bag.OFLTNR.StartsWith(this.airline))) { isLocalEndingInHub = true; } if (isHub && !isLocalTTYforHub && bag.IFLTNR != null) { isLocalEndingInHub = true; } // Obtain list of message from Baggage table if (isHub) { if (!isLocalEndingInHub) { if (bag.FFLTNR != null && bag.FDATE != null && bag.FFLTNR.StartsWith(this.airline)) { flightInfoI = this.SearchFlightInfo(bag.FFLTNR, bag.FDATE, bag.VCITY, bag.FDEST); } else { flightInfoI = new OSUSR_UUK_FLT_INFO(); } if (bag.OFLTNR != null && bag.ODATE != null && bag.OFLTNR.StartsWith(this.airline)) { flightInfoF = this.SearchFlightInfo(bag.OFLTNR, bag.ODATE, hub, bag.ODEST); } else { flightInfoF = new OSUSR_UUK_FLT_INFO(); } } else { if (bag.IFLTNR != null && bag.IDATE != null && bag.IFLTNR.StartsWith(this.airline)) { flightInfoI = this.SearchFlightInfo(bag.IFLTNR, bag.IDATE, bag.IORIGIN, bag.VCITY); } else { flightInfoI = new OSUSR_UUK_FLT_INFO(); } if (bag.FFLTNR != null && bag.FDATE != null && bag.FFLTNR.StartsWith(this.airline)) { flightInfoF = this.SearchFlightInfo(bag.FFLTNR, bag.FDATE, bag.VCITY, bag.FDEST); } else { flightInfoF = new OSUSR_UUK_FLT_INFO(); } } } else { if (bag.FFLTNR != null && bag.FDATE != null && bag.FFLTNR.StartsWith(this.airline)) { flightInfoF = this.SearchFlightInfo(bag.FFLTNR, bag.FDATE, bag.VCITY, bag.FDEST); } else { flightInfoF = new OSUSR_UUK_FLT_INFO(); } flightInfoI = new OSUSR_UUK_FLT_INFO(); } BagTMLog.LogDebug("BagTM Engine Search FlightInfoI", flightInfoI); BagTMLog.LogDebug("BagTM Engine Search FlightInfoF", flightInfoF); BagTMLog.LogDebug("BagTM Engine Rules Execution", this); // Run engine process rules this.EngineRulesExecution(bag, bagIntegraty, flightInfoI, flightInfoF, hub, factory); // Verify if is a baggage board if (BagTMRulesActions.PAX_BOARDED_STATUS.Equals(bag.SPAXCK)) { BagTMLog.LogDebug("BagTM Engine Boaded Pax", this); this.ProcessBoardBaggageTTY(bag, bagIntegraty, flightInfoI, flightInfoF, hub, factory); } if (flightInfoF == null || flightInfoF.FLT_NR == null || flightInfoI == null) { BagTMLog.LogDebug("No update to H2H since no flight information, please check flight in FLT_INFO table.", this); } else { // Reprocess Hull 2 Hull table for selected flight if (isHub || (hub.Equals(bag.VCITY) && BagTMRulesActions.localBagParameter.Equals(bag.VBAGSOURCIND))) { this.h2hProcessing.EngineUpdateH2H(flightInfoI, flightInfoF, isHub); } } BagTMLog.LogDebug("BagTM Engine Baggage TTY End", this); }