Ejemplo n.º 1
0
 /// <summary>
 /// Возвращает данные отрисовки по ссылке на модель
 /// </summary>
 /// <param name="model">Ссылка на отрисовываемую модель</param>
 /// <returns>Возвращает данные отрисовки прямоугольника для модели</returns>
 public BarData this[LeasingElementModel model] {
     get { if (m_bars.ContainsKey(model))
           {
               return(m_bars[model]);
           }
           else
           {
               return(null);
           } }
 }
Ejemplo n.º 2
0
        double GetDayOffset(LeasingElementModel model)
        {
            if (model == null)
            {
                return(0d);
            }

            var b = model.Leasing;

            if (b == null)
            {
                return(0d);
            }

            var dayCount   = 0;
            var startMonth = b.DateStart.GetMonth();

            var monthes = Canvas?.LeasingSet?.Monthes;

            //если начало в текущем месяце
            if (monthes != null)
            {
                var firstMonth = monthes.ElementAt(0).Month;
                if (firstMonth > startMonth) //если съем начался ранее
                {
                    return(0d);
                }
                else
                {
                    if (firstMonth < startMonth) //если первый месяц выбранного периода начинается раньше
                    {
                        var prevMonth = firstMonth;

                        //перебираем месяцы с лева на право
                        //пока не наткнёмся на начальный месяц съёма авто
                        do
                        {
                            dayCount += prevMonth.DayCount;
                            prevMonth = prevMonth.Next();
                        }while (prevMonth != null && prevMonth != startMonth);
                    }
                }
            }
            //по каким-то причинам не заданы месяцы или дата начала ранее начального месяца
            else if (b.CurrentMonth == null || b.CurrentMonth != startMonth)
            {
                return(0d);
            }

            dayCount += b.DateStart.Day - 1;

            //смещение слева в точках
            return(dayCount * DayColumnWidth + (dayCount * 1));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Смещение по количеству дней в предидущих месяцах
        /// </summary>
        /// <param name="barModel">Данные текущей полоски месяца</param>
        /// <returns>Возвращает готовой смещение по месяцу или 0</returns>
        double GetMonthOffset(LeasingElementModel barModel)
        {
            /*
             * расчёт месячного смещения
             *
             * Пример (о чём речь):
             * если сейчас (в переданной модели) месяц март,
             * а в шапке перед этим месяцем вставены ещё сколько-то месяцев
             * то необходимо к текущему смещению добавить ещё количество дней в этих месмяцах
             *
             * количество дней в предидущих месяцах и возвращает этот метод
             */
            if (barModel == null)
            {
                return(0);
            }

            var offset = 0d;

            var monthes = Canvas.LeasingSet.Monthes;

            if (barModel.Monthes != null && barModel.Monthes.Length > 2)
            {
                var firstMonth = barModel.Leasing.DateStart.GetMonth();
                for (int i = 0; i < monthes.Count; i++)
                {
                    if (monthes[i].Month == firstMonth)
                    {
                        var prev = monthes[i].Previous;

                        while (prev != null)
                        {
                            if (prev.Month != null)
                            {
                                offset += ((prev.Month.DayCount * DayColumnWidth) + prev.Month.DayCount);
                            }

                            prev = prev.Previous;
                        }
                    }
                }
            }

            return(offset);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Получение строкового представления срока аренды
        /// </summary>
        /// <param name="model">Модель</param>
        /// <returns>Возвращает срок аренды</returns>
        string GetDataSpan(LeasingElementModel model)
        {
            //копипаста из BussinessDateConverter (старая версия)
            StringBuilder sb = new StringBuilder();

            //<действие> c XX по ХХ <месяц>
            sb.Append("в прокате ").Append(" c ");

            var b = model.Leasing;

            if (b.MonthCount < 2)
            {
                sb.Append(b.DateStart.Day.ToString()).Append(" по ").Append(b.DateEnd.Day.ToString()).Append(" ").Append(b.DateStart.GetMonthName() ?? string.Empty);
            }
            else
            {
                sb.Append(b.DateStart.Day.ToString()).Append(" ").Append(b.DateStart.GetMonthName() ?? string.Empty).Append(" по ")
                .Append(b.DateEnd.Day.ToString()).Append(" ").Append(b.DateEnd.GetMonthName() ?? string.Empty);
            }

            return(sb.ToString());
        }
Ejemplo n.º 5
0
        public DrawingVisual DrawBar(LeasingElementModel barModel)
        {
            BarData       bd = null;
            DrawingVisual dv = null;

            if (m_bars.ContainsKey(barModel))
            {
                bd = m_bars[barModel];
            }
            else
            {
                bd                  = new BarData(this);
                bd.Index            = barModel.RowIndex;
                bd.VerticalOffset   = barModel.RowIndex * RowHeight;
                bd.HorizontalOffset = GetDayOffset(barModel) + GetMonthOffset(barModel) + 1;
                bd.Model            = barModel;
                m_bars.Add(barModel, bd);
            }

            dv = DrawBorder(bd);

            return(dv);
        }
Ejemplo n.º 6
0
        public DrawingVisual DrawText(LeasingElementModel model)
        {
            //проверяем инициализацию для интерфейса шрифта
            //инициализирован при заполнении шрифта (this.FontFamily)
            //if (m_glyphType == null)
            //    m_glyphType = GetGlyphTypeface();
            //

            BarData       bd = null;
            DrawingVisual dv = null;

            if (m_bars.ContainsKey(model))
            {
                bd = m_bars[model];
            }
            else
            {
                bd = new BarData(this)
                {
                    Index = model.RowIndex, Model = model
                };
                m_bars.Add(model, bd);
                SetOffset(bd);
            }

            //если ещё не проставлены смещения
            if (bd.Border == null)
            {
                SetOffset(bd);
            }

            dv            = DrawText(bd);
            bd.TextDrawed = true;

            return(dv);
        }
Ejemplo n.º 7
0
 public BarData(LeasingElementModel model)
 {
     Model = model;
 }
Ejemplo n.º 8
0
        double GetWidth(LeasingElementModel model)
        {
            var dayCount = 0; //прибавляем единичку, так как при сложении/вычитании теряем день

            #region Вычисляем количество дней

            var b             = model.Leasing;
            var periodMonthes = Canvas?.LeasingSet?.Monthes.Select(m => m.Month).ToList();

            //если машину взяли/вернули в течении 1 месяца
            if (b.MonthCount == 1)
            {
                dayCount += ((b.DateEnd - b.DateStart).Days + 1);
            }
            //если машина взята в аренду на несколько месяцев
            else
            {
                var firstMonth = periodMonthes.First();

                var startDate = b.DateStart;
                var endDate   = b.DateEnd;

                //если съём начался за пределами первого месяца в выбранном периоде
                if (firstMonth > b.DateStart.GetMonth())
                {
                    startDate = firstMonth[1];
                }

                //если съём заканчивается за последним месяцем в выбранном периоде
                if (periodMonthes[periodMonthes.Count - 1] < b.DateEnd.GetMonth())
                {
                    endDate = periodMonthes[periodMonthes.Count - 1].LastDate;
                }

                //получаем месяцы между датами (включительно)
                var monthes = Models.Month.GetMonthes(startDate, endDate);

                //суммируем дни в полученном периоде
                var lastIndex = monthes.Length - 1;
                var endMonth  = endDate.GetMonth();
                for (int i = 0; i < monthes.Length; i++)
                {
                    if (i == 0)
                    {
                        if (startDate.Day == 1)
                        {
                            if (endMonth == firstMonth)
                            {
                                dayCount += endDate.Day;
                            }
                            else
                            {
                                dayCount += monthes[i].DayCount;
                            }
                        }
                        else
                        {
                            dayCount += (monthes[i].DayCount - startDate.Day + 1);
                        }
                    }
                    else if (i == lastIndex)
                    {
                        dayCount += endDate.Day;
                    }
                    else
                    {
                        dayCount += monthes[i].DayCount;
                    }
                }
            }

            if (dayCount < 0)
            {
                dayCount = 0;
            }

            #endregion

            return((DayColumnWidth * dayCount) + dayCount); //прибавляем количество дней, т.к. ширина границ - 1
        }