Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ResultInXML"></param>
        /// <returns>Что поменялось</returns>
        public enChangedResult UpdateResults(CMember ResultInXML)
        {
            // Массивы нужны, т.к. невозможно передавать свойства через ref
            TimeSpan?[]         RouteInDB         = { route1, route2, sum };
            byte?[]             CondFormatingInDB = { cond_formating_1, cond_formating_2, cond_formating_sum };
            long?[]             EventInDB         = { event_1, event_2, event_sum };
            enChangedResult[][] ChangedResults    =
            {
                new enChangedResult[] { enChangedResult.Route1Time, enChangedResult.Route1CondFormatting, enChangedResult.Route1AdditionalEvent },
                new enChangedResult[] { enChangedResult.Route2Time, enChangedResult.Route2CondFormatting, enChangedResult.Route2AdditionalEvent },
                new enChangedResult[] { enChangedResult.SumTime,    enChangedResult.SumCondFormatting,    enChangedResult.SumAdditionalEvent    }
            };

            enChangedResult result = UpdateResult(ResultInXML.Route1Ext,
                                                  ChangedResults[0],
                                                  ref RouteInDB[0],
                                                  ref CondFormatingInDB[0],
                                                  ref EventInDB[0])
                                     | UpdateResult(ResultInXML.Route2Ext,
                                                    ChangedResults[1],
                                                    ref RouteInDB[1],
                                                    ref CondFormatingInDB[1],
                                                    ref EventInDB[1])
                                     | UpdateResult(ResultInXML.SumExt,
                                                    ChangedResults[2],
                                                    ref RouteInDB[2],
                                                    ref CondFormatingInDB[2],
                                                    ref EventInDB[2]);

            route1           = RouteInDB[0];
            cond_formating_1 = CondFormatingInDB[0];
            event_1          = EventInDB[0];

            route2           = RouteInDB[1];
            cond_formating_2 = CondFormatingInDB[1];
            event_2          = EventInDB[1];

            sum = RouteInDB[2];
            cond_formating_sum = CondFormatingInDB[2];
            event_sum          = EventInDB[2];
            return(result);
        }
Example #2
0
        private enChangedResult UpdateResult(CResult ResultInXML,
                                             enChangedResult[] ChangedResults,
                                             ref TimeSpan?RouteInDB,
                                             ref byte?CondFormatingInDB,
                                             ref long?EventInDB)
        {
            enChangedResult result = enChangedResult.None;

            if (ResultInXML != null)
            {
                ResultInXML.ResultInDB = this;

                if (RouteInDB != ResultInXML && RouteInDB != ResultInXML.Time)
                {
                    RouteInDB = ResultInXML.Time;
                    result   |= ChangedResults[0];
                }
                if (CondFormatingInDB != (byte?)ResultInXML.CondFormating)
                {
                    CondFormatingInDB = (byte?)ResultInXML.CondFormating;
                    result           |= ChangedResults[1];
                }
                if (EventInDB != (long?)ResultInXML.AdditionalEventTypes)
                {
                    if (EventInDB.HasValue)
                    {
                        EventInDB = (EventInDB.Value & ~(long)(enAdditionalEventTypes.DontAppear | enAdditionalEventTypes.Disqualif | enAdditionalEventTypes.BeyondQualif)) | ((long?)ResultInXML.AdditionalEventTypes ?? 0);
                    }
                    else
                    {
                        EventInDB = (long?)ResultInXML.AdditionalEventTypes;
                    }

                    result |= ChangedResults[2];
                }
            }
            else
            {
                if (RouteInDB != null)
                {
                    RouteInDB = null;
                    result   |= ChangedResults[0];
                }
                if (CondFormatingInDB != null)
                {
                    CondFormatingInDB = null;
                    result           |= ChangedResults[1];
                }

                if (EventInDB.HasValue)
                {
                    EventInDB = EventInDB.Value & ~(long)(enAdditionalEventTypes.DontAppear | enAdditionalEventTypes.Disqualif | enAdditionalEventTypes.BeyondQualif);

                    result |= ChangedResults[2];
                }
            }

            if (EventInDB.HasValue && EventInDB == 0)
            {
                EventInDB = null;
                result   |= ChangedResults[2];
            }

            return(result);
        }