Пример #1
0
        /// <summary>
        /// Прибавляет заданную наработку к уже существующей
        /// </summary>
        /// <param name="lifelength"></param>
        public void Add(Lifelength lifelength)
        {
            // прибавляем к this
            // null + cycles = cycles
            // cycles + null = cycles
            // null + null = null
            // cycles + cycles = cycles + cycles
            if (Cycles == null && lifelength.Cycles != null)
            {
                Cycles = lifelength.Cycles;
            }
            else if (Cycles != null && lifelength.Cycles != null)
            {
                Cycles += lifelength.Cycles;
            }

            if (Days == null && lifelength.Days != null)
            {
                Days = lifelength.Days;
            }
            else if (Days != null && lifelength.Days != null)
            {
                Days += lifelength.Days;
            }

            if (TotalMinutes == null && lifelength.TotalMinutes != null)
            {
                TotalMinutes = lifelength.TotalMinutes;
            }
            else if (TotalMinutes != null && lifelength.TotalMinutes != null)
            {
                TotalMinutes += lifelength.TotalMinutes;
            }
        }
Пример #2
0
 /// <summary>
 /// Метод проверяет, является ли данная наработка строго меньшей заданной по всем трем параметрам
 /// </summary>
 /// <param name="lifelength"></param>
 /// <param name="strictCompare"></param>
 /// <returns></returns>
 public bool IsLess(Lifelength lifelength, bool strictCompare = true)
 {
     if (Cycles != null && lifelength.Cycles != null && Cycles < lifelength.Cycles &&
         TotalMinutes != null && lifelength.TotalMinutes != null && TotalMinutes < lifelength.TotalMinutes &&
         Days != null && lifelength.Days != null && Days < lifelength.Days)
     {
         return(true);
     }
     return(false);
 }
Пример #3
0
 /// <summary>
 /// Копирует наработку (Создает новую наработку с такими же параметрами)
 /// </summary>
 /// <param name="source"></param>
 public Lifelength(Lifelength source)
 {
     if (source == null)
     {
         return;
     }
     //
     Cycles       = source.Cycles;
     CalendarSpan = new CalendarSpan(source.CalendarSpan);
     TotalMinutes = source.TotalMinutes;
 }
Пример #4
0
 /*
  * Методы
  */
 #region public void Resemble(Lifelength sample)
 /// <summary>
 /// Сделать похожим на заданный ресурс. Т.е. если не заданы часы - сделать часы n/a и т.д.
 /// </summary>
 /// <param name="sample"></param>
 public void Resemble(Lifelength sample)
 {
     if (sample.TotalMinutes == null)
     {
         TotalMinutes = null;
     }
     if (sample.Cycles == null)
     {
         Cycles = null;
     }
     if (sample.Days == null)
     {
         Days = null;
     }
 }
Пример #5
0
 /// <summary>
 /// Дополняет пустые параметры текущего объекта параметрами из источника
 /// </summary>
 /// <param name="source"></param>
 public void CompleteNullParameters(Lifelength source)
 {
     if (Cycles == null)
     {
         Cycles = source.Cycles;
     }
     if (TotalMinutes == null)
     {
         TotalMinutes = source.TotalMinutes;
     }
     if (Days == null)
     {
         Days = source.Days;
     }
 }
Пример #6
0
        /// <summary>
        /// Конвертирует данные из БД в Lifelength
        /// </summary>
        /// <param name="data"></param>
        public static Lifelength ConvertFromByteArray(byte[] data)
        {
            Lifelength item = new Lifelength();

            byte[] binaryData = data;
            if (null == binaryData)
            {
                return(null);
            }

            if (binaryData == null || binaryData.Length != SerializedDataLength)
            {
                return(null);               //на случай если -1 пришел
            }
            //throw new ArgumentException("Data cannot be converted to Lifelength");

            item.Cycles = DbTypes.Int32FromByteArray(binaryData, 1);

            var calendar = DbTypes.Int64FromByteArray(binaryData, 5);
            var cal      = new TimeSpan(calendar);

            item.CalendarSpan = new CalendarSpan(cal.Days, (CalendarTypes)cal.Milliseconds);

            var ticks = DbTypes.Int64FromByteArray(binaryData, 13);
            var ts    = new TimeSpan(ticks);

            item.TotalMinutes = ts.Minutes + ((int)ts.TotalHours) * 60;

            if ((binaryData[0] & 1) == 0)
            {
                item.Days = null;
            }
            if ((binaryData[0] >> 1 & 1) == 0)
            {
                item.Cycles = null;
            }
            if ((binaryData[0] >> 2 & 1) == 0)
            {
                item.Hours = null;
            }

            return(item);
        }
Пример #7
0
        /// <summary>
        /// Метод проверяет, является ли данная наработка меньше заданной по любому из трех параметров
        /// </summary>
        /// <param name="lifelength"></param>
        /// <returns></returns>
        public bool IsLessByAnyParameter(Lifelength lifelength)
        {
            //Cycles
            if (Cycles != null && lifelength.Cycles != null && Cycles < lifelength.Cycles)
            {
                return(true);
            }
            // TotalMinutes
            if (TotalMinutes != null && lifelength.TotalMinutes != null && TotalMinutes < lifelength.TotalMinutes)
            {
                return(true);
            }
            // Days
            if (Days != null && lifelength.Days != null && Days < lifelength.Days)
            {
                return(true);
            }

            return(false);
        }
Пример #8
0
        /// <summary>
        /// По выходу объект будет представлять содержитать минимальных ресурсов от обоих объектов (whichever first)
        /// </summary>
        /// <param name="candidate"></param>
        public void SetMin(Lifelength candidate)
        {
            // Если у кандидата циклы меньше чем у текущего объекта - присваиваем минимальные циклы
            if (candidate.Cycles != null && (Cycles == null || Cycles > candidate.Cycles))
            {
                Cycles = candidate.Cycles;
            }

            // то же по часам
            if (candidate.TotalMinutes != null && (TotalMinutes == null || TotalMinutes > candidate.TotalMinutes))
            {
                TotalMinutes = candidate.TotalMinutes;
            }

            // то же по календарю
            if (candidate.Days != null && (Days == null || Days > candidate.Days))
            {
                Days = candidate.Days;
            }
        }
Пример #9
0
        /*
         * Арифметика
         */
        #region public bool IsGreaterByAnyParameter(Lifelength lifelength)
        /// <summary>
        /// Метод проверяет, является ли данная наработка больше заданной по любому из трех параметров
        /// </summary>
        /// <param name="lifelength"></param>
        /// <returns></returns>
        public bool IsGreaterByAnyParameter(Lifelength lifelength)
        {
            // 10, 10, 10 > 5, 5, 5
            // 10, 10, 10 > 5, 20, 5
            //Cycles
            if (Cycles != null && lifelength.Cycles != null && Cycles > lifelength.Cycles)
            {
                return(true);
            }
            // TotalMinutes
            if (TotalMinutes != null && lifelength.TotalMinutes != null && TotalMinutes > lifelength.TotalMinutes)
            {
                return(true);
            }
            // Days
            if (Days != null && lifelength.Days != null && Days > lifelength.Days)
            {
                return(true);
            }

            return(false);
        }
Пример #10
0
        /// <summary>
        /// Прибавляет заданную наработку к уже существующей
        /// </summary>
        /// <param name="from"></param>
        /// <param name="lifelength"></param>
        public void Add(DateTime from, Lifelength lifelength)
        {
            // прибавляем к this
            // null + cycles = cycles
            // cycles + null = cycles
            // null + null = null
            // cycles + cycles = cycles + cycles
            if (Cycles == null && lifelength.Cycles != null)
            {
                Cycles = lifelength.Cycles;
            }
            else if (Cycles != null && lifelength.Cycles != null)
            {
                Cycles += lifelength.Cycles;
            }

            if (TotalMinutes == null && lifelength.TotalMinutes != null)
            {
                TotalMinutes = lifelength.TotalMinutes;
            }
            else if (TotalMinutes != null && lifelength.TotalMinutes != null)
            {
                TotalMinutes += lifelength.TotalMinutes;
            }

            if (CalendarValue == null && lifelength.CalendarValue != null)
            {
                DateTime to = from.AddCalendarSpan(lifelength.CalendarSpan);
                Days = (to - from).Days;
            }
            else if (Days != null && lifelength.Days != null)
            {
                DateTime to = from.AddCalendarSpan(lifelength.CalendarSpan);
                Days += (to - from).Days;
            }
        }
Пример #11
0
        /// <summary>
        /// Возвращает (задает) наработку на заданное число и по заданному режиму
        /// </summary>
        /// <param name="flightRegime"></param>
        /// <param name="date"></param>
        /// <returns></returns>
        private Lifelength this[DateTime date, FlightRegime flightRegime]
        {
            get
            {
                if (flightRegime == null)
                {
                    flightRegime = FlightRegime.UNK;
                }

                if (_Array.ContainsKey(flightRegime))
                {
                    if (_Array[flightRegime] == null)
                    {
                        _Array[flightRegime] = new SortedDictionary <DateTime, Lifelength>();
                    }
                }
                else
                {
                    _Array.Add(flightRegime, new SortedDictionary <DateTime, Lifelength>());
                }

                SortedDictionary <DateTime, Lifelength> array = _Array[flightRegime];

                if (date.Date > DateTime.Today)
                {
                    Lifelength res = _Array.Count > 0 ? new Lifelength(array.Last().Value) : Lifelength.Zero;
                    res.Add(LifelengthSubResource.Calendar, (date.Date - DateTime.Today).Days);
                    return(res);
                }
                if (date.Date < _startDate.Date)
                {
                    return(new Lifelength((_startDate.Date - date.Date).Days, 0, 0));
                }
                return(array.ContainsKey(date.Date) ? array[date.Date] : null);
            }
            set
            {
                if (flightRegime == null)
                {
                    flightRegime = FlightRegime.UNK;
                }

                if (_Array.ContainsKey(flightRegime))
                {
                    if (_Array[flightRegime] == null)
                    {
                        _Array[flightRegime] = new SortedDictionary <DateTime, Lifelength>();
                    }
                }
                else
                {
                    _Array.Add(flightRegime, new SortedDictionary <DateTime, Lifelength>());
                }

                SortedDictionary <DateTime, Lifelength> array = _Array[flightRegime];

                if (array.ContainsKey(date.Date))
                {
                    array[date.Date] = value;
                }
                else
                {
                    if (date.Date >= _startDate.Date && date.Date <= DateTime.Today)
                    {
                        array.Add(date.Date, value);
                    }
                }
            }
        }
Пример #12
0
 /// <summary>
 /// Устанавливает подсчитанную наработку на конец дня
 /// </summary>
 /// <param name="date">День на который необходимо вернуть наработку</param>
 /// <param name="value">значение подсчитанной наработки</param>
 /// <returns></returns>
 public void SetLifelengthOnEndOfDay(DateTime date, Lifelength value)
 {
     SetClosingLifelength(date, FlightRegime.UNK, value);
 }
Пример #13
0
 /// <summary>
 /// Устанавливает подсчитанную наработку на начало дня
 /// </summary>
 /// <param name="date">День на который необходимо вернуть наработку</param>
 /// <param name="value">значение подсчитанной наработки</param>
 /// <returns></returns>
 public void SetLifelengthOnStartOfDay(DateTime date, Lifelength value)
 {
     SetLifelengthOnStartOfDay(date, FlightRegime.UNK, value);
 }
Пример #14
0
 /// <summary>
 /// Устанавливает подсчитанную наработку на конец дня на заданном режиме
 /// </summary>
 /// <param name="date">День на который необходимо вернуть наработку</param>
 /// <param name="flightRegime">режим работы</param>
 /// <param name="value">значение подсчитанной наработки</param>
 /// <returns></returns>
 public void SetClosingLifelength(DateTime date, FlightRegime flightRegime, Lifelength value)
 {
     this[date, flightRegime ?? FlightRegime.UNK] = value;
 }
Пример #15
0
 /// <summary>
 /// Устанавливает подсчитанную наработку на начало дня на заданном режиме
 /// </summary>
 /// <param name="date">День на который необходимо вернуть наработку</param>
 /// <param name="flightRegime">режим работы</param>
 /// <param name="value">значение подсчитанной наработки</param>
 /// <returns></returns>
 public void SetLifelengthOnStartOfDay(DateTime date, FlightRegime flightRegime, Lifelength value)
 {
     this[date.AddDays(-1), flightRegime ?? FlightRegime.UNK] = value;
 }
Пример #16
0
        /// <summary>
        /// Отнимает заданную наработку от уже существующей
        /// </summary>
        /// <param name="lifelength"></param>
        public void Substract(Lifelength lifelength)
        {
            Lifelength lifelength2 = new Lifelength(-lifelength.Days, -lifelength.Cycles, -lifelength.TotalMinutes);

            Add(lifelength2);
        }