/// <summary>
        /// Last baggage integraty table
        /// </summary>
        /// <param name="bagInteg"></param>
        /// <returns>OSUSR_UUK_BAGINTEG</returns>
        private OSUSR_UUK_BAGINTEG LastBaggageIntegraty(OSUSR_UUK_BAGINTEG bagInteg)
        {
            BaggageEntities db = new BaggageEntities();

            var bagQuery = from s in db.OSUSR_UUK_BAGINTEG
                           where s.NUMBER == bagInteg.NUMBER
                           select s;

            var results = bagQuery.OrderByDescending(s => s.TIMESTAMP)
                          .ToList <OSUSR_UUK_BAGINTEG>();

            OSUSR_UUK_BAGINTEG lastBagInteg = results.FirstOrDefault();

            if (results != null && results.Count > 1)
            {
                foreach (OSUSR_UUK_BAGINTEG aux in results)
                {
                    if (aux != lastBagInteg)
                    {
                        lastBagInteg = MergeBagIntegrity(lastBagInteg, aux);
                        db.OSUSR_UUK_BAGINTEG.Remove(aux);
                    }
                }
                try
                {
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            return(lastBagInteg);
        }
        /// <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);
        }
Example #3
0
        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));
        }
Example #4
0
        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>
        /// Search in the baggage integraty table the bag tag
        /// </summary>
        /// <param name="bagTag"></param>
        /// <returns>OSUSR_UUK_BAGINTEG</returns>
        public OSUSR_UUK_BAGINTEG SearchBaggageIntegratyByBagIdentifier(String bagTag)
        {
            BaggageEntities db = new BaggageEntities();

            var bagQuery = from s in db.OSUSR_UUK_BAGINTEG
                           where s.NUMBER == bagTag
                           select s;

            var results = bagQuery.OrderByDescending(s => s.TIMESTAMP)
                          .ToList <OSUSR_UUK_BAGINTEG>();

            OSUSR_UUK_BAGINTEG result = results.FirstOrDefault();

            return(result);
        }
        private OSUSR_UUK_BAGINTEG MergeBagIntegrity(OSUSR_UUK_BAGINTEG merge, OSUSR_UUK_BAGINTEG aux)
        {
            if (aux.ISEAT != null && merge.ISEAT == null)
            {
                merge.ISEAT = aux.ISEAT;
            }
            if (aux.IAUT != null && merge.IAUT == null)
            {
                merge.IAUT = aux.IAUT;
            }
            if (aux.BPMIN != null && merge.BPMIN == null)
            {
                merge.BPMIN = aux.BPMIN;
            }
            if (aux.BSMBOARDI != null && merge.BSMBOARDI == null)
            {
                merge.BSMBOARDI = aux.BSMBOARDI;
            }
            if (aux.IFFP != null && merge.IFFP == null)
            {
                merge.IFFP = aux.IFFP;
            }
            if (aux.FSEAT != null && merge.FSEAT == null)
            {
                merge.FSEAT = aux.FSEAT;
            }
            if (aux.FAUT != null && merge.FAUT == null)
            {
                merge.FAUT = aux.FAUT;
            }
            if (aux.BPMHUB != null && merge.BPMHUB == null)
            {
                merge.BPMHUB = aux.BPMHUB;
            }
            if (aux.BSMBOARD != null && merge.BSMBOARD == null)
            {
                merge.BSMBOARD = aux.BSMBOARD;
            }
            if (aux.OFFP != null && merge.OFFP == null)
            {
                merge.OFFP = aux.OFFP;
            }

            return(merge);
        }
        /// <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);
        }
Example #8
0
        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));
        }
Example #9
0
 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);
 }
Example #10
0
 public void Action(OSUSR_UUK_BAGMSGS bag, OSUSR_UUK_BAGINTEG bagIntegrity, String hub)
 {
     transformation = new BagIntegrityTransformation();
     transformation.CreateBagIntegrity(bag, bagIntegrity, hub, true);
 }
 /// <summary>
 /// Create adhoc rules for verifying is baggage is rush
 /// </summary>
 /// <param name="bagInteg"></param>
 /// <returns></returns>
 private bool IsRush(OSUSR_UUK_BAGINTEG bagInteg)
 {
     return(bagInteg.NUMBER.StartsWith("2108"));
 }
        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);
        }