Пример #1
0
 public Calculate(DataGrid newTable, string pathToFile, DateTime?startDate, DateTime?finalDate)
 {
     try
     {
         if (DatesCheck(startDate, finalDate) && EmptyDatePicker(startDate, finalDate))
         {
             DataGenerate Lists = new DataGenerate(pathToFile); // Вызываем класс генерации списков
             Data = FullDataList(Lists).ToList();               // Присваиваем списку Data полную таблицу.
             List <Data>        newData = new List <Data>();    //Создаём новый список, который будет содержать в себе изменения из списка Data и выведен в DataGrid
             IEnumerable <Data> query   = Data.Where(data => startDate <= data.StartDate && finalDate >= data.StartDate ||
                                                     startDate <= data.FinalDate && finalDate >= data.FinalDate ||
                                                     data.FinalDate >= DateTime.Now - TimeSpan.FromSeconds(20) && finalDate <= data.FinalDate && startDate > data.StartDate ||
                                                     startDate >= data.StartDate && finalDate <= data.FinalDate); //Выводим из полной таблицы только часть, соответствующую условию
             foreach (Data data in query)                                                                         //Выполняем преобразования и добавляем в список newData
             {
                 if (startDate >= data.StartDate)
                 {
                     data.StartDate = startDate;
                 }
                 if (finalDate <= data.FinalDate)
                 {
                     data.FinalDate = finalDate;
                 }
                 data.Days = (data.FinalDate.Value.Date - data.StartDate.Value.Date).Days + 1;
                 newData.Add(data);
             }
             newTable.ItemsSource = newData;
         }
         else if (EmptyDatePicker(startDate, finalDate))
         {
             MessageBox.Show("Указанная дата(или время) окончания расчёта больше, чем дата(или время) начала расчёта, пожалуйста, проверьте правильность введённых данных");
         }
         else
         {
             MessageBox.Show("Не указаны даты начала и окончания расчёта");
         }
     }
     catch (System.Runtime.InteropServices.COMException)
     {
         MessageBox.Show("Не выбран файл.");
     }
     catch
     {
         MessageBox.Show("Выберите другой файл");
     }
 }
Пример #2
0
        public ObservableCollection <Data> FullDataList(DataGenerate Lists)           //Генерация полной таблицы.
        {
            ObservableCollection <Data> fullData = new ObservableCollection <Data>(); // Создаём коллекцию, в которой будет лежать таблица

            for (int i = 0; i < Lists.startDatesList.Count; i++)
            {
                int days = (Lists.finalDatesList[i] - Lists.startDatesList[i]).Days; // Счётчик общего количества дней, которые товар лежал на складе

                DateTime periodStartCount = Lists.startDatesList[i];                 //Счётчик даты начала расчёта
                DateTime periodEndCount;                                             //Счётчик даты конца расчёта

                for (int k = 0; k < Lists.tarifNumbersList.Count; k++)
                {
                    if (days > 0)
                    {
                        int daysOnTarif; //Счётчик дней по тарифу.
                        daysOnTarif = DaysOnTarifCheck(Lists.periodStartByTarifList[k], Lists.periodEndByTarifList[k]);

                        if (daysOnTarif > days)
                        {
                            daysOnTarif = (Lists.finalDatesList[i] - periodStartCount).Days + 1;
                        }

                        periodEndCount  = periodStartCount.AddDays(daysOnTarif).Date;
                        periodEndCount -= TimeSpan.FromSeconds(1);
                        if (Lists.finalDatesList[i] < periodEndCount)
                        {
                            periodEndCount = Lists.finalDatesList[i];
                        }

                        DateTime?finalDates = IsEmptyFinalDate(Lists.finalDatesList[i]);

                        fullData.Add(new Data(Lists.goodsList[i], periodStartCount, periodEndCount, daysOnTarif, Lists.startDatesList[i], finalDates,
                                              Lists.betList[k], "Период №" + Lists.tarifNumbersList[k]));

                        days            -= daysOnTarif;
                        periodStartCount = periodEndCount + TimeSpan.FromSeconds(1);
                    }
                }
            }
            return(fullData);
        }