Пример #1
0
        protected override void OnCreateReport(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.DoWorkEventArgs e)
        {
            base.OnCreateReport(nsgBackgroundReporter, e);

            string          url               = "http://cbrates.rbc.ru/tsv/cb/" + $"{Валюта.Value.КодВалюты}.tsv"; // создаем переменную url в которой хранится адрес сайта
            HttpWebRequest  myHttwebrequest   = (HttpWebRequest)HttpWebRequest.Create(url);                        // выполняем запрос по указонному адресу
            HttpWebResponse myHttpWebresponse = (HttpWebResponse)myHttwebrequest.GetResponse();                    // получаем ответ
            StreamReader    strm              = new StreamReader(myHttpWebresponse.GetResponseStream());           // создаем считыватель
            var             text              = strm.ReadToEnd().Split('\n');                                      // записываем данные с сайта в массив удаляя enter, тем самым получая массив с одной строкой
            var             period            = ИсторияКурсов.Новый();                                             // создаем объект

            for (int i = 0; i < text.Length; i++)                                                                  // цикл для перебора массива text
            {
                var      row           = text[i].Split('\t');                                                      // записываем данные в массив удаляя отступы и получая массив с тремя элементами
                DateTime date          = DateTime.ParseExact(row[0], "yyyyMMdd", CultureInfo.InvariantCulture);    // преобрауем 1-ый элемент массива в тип DateTime
                var      firstCompare  = date.CompareTo(nsgPeriodPicker1.Period.Begin);                            // сравниваем date с данными из PeriodPicker
                var      secondCompare = date.CompareTo(nsgPeriodPicker1.Period.End);                              // --//--
                if ((firstCompare == 1 | secondCompare == -1) & (firstCompare == 1 | secondCompare == 0) & (firstCompare == 1 | secondCompare == 0))
                {
                    period.New();                                                                                // создаем новые строки объекста period

                    period.ДатаВремя = date;                                                                     // присваиваем полю ДатаВремя переменную date
                    period.Значение  = Math.Round(Convert.ToDecimal(row[2], NumberFormatInfo.InvariantInfo), 2); // присваиваем полю Значение 3-ий элемент массива конвертируя его в тип decimal и округляя до 2 знаков после запятой
                    period.Валюта    = Валюта.Value;                                                             // присваиваем полю Валюта поле Валюта
                    period.Post();                                                                               // связываем с БД
                }
            }

            NsgCompare cmp  = new NsgCompare().Add(ИсторияКурсов.Names.Валюта, Валюта.Value.Наименование, NsgComparison.Contain);    // добавляем в сравнение новое условие сравнения поля Валюты из объекта ИсторияКурсов и поля Валюта из объекта ЗаполнениеКурса
            NsgSorting sort = new NsgSorting(new NsgSortingParam(ИсторияКурсов.Names.ДатаВремя, NsgSortDirection.Descending));       // сортируем по ... полю ДатаВремя наверное????
            var        pole = period.FindAll(cmp);                                                                                   // получаем массив объектов с условием которое записано в переменной cmp
            var        max  = pole[pole.Length - 1];                                                                                 // берем последний элемент массива pole

            var        currency = Валюты.Новый();                                                                                    // создаем объект
            NsgCompare cmp2     = new NsgCompare().Add(Валюты.Names.Наименование, Валюта.Value.Наименование, NsgComparison.Contain); // добавляем в сравнение новое условие сравнения поля Наименования из объекта Валюты и поля Валюта из объекта ЗаполнениеКурса

            currency.Find(cmp2);                                                                                                     //  заполняем объект из БД по условию cmp2
            currency.Edit();                                                                                                         // переводим объект в режим редактирования
            currency.ТекущийКурс = max.Значение;                                                                                     // изменяем значение поля ТекущийКурс на значение поля Значение объекта ИсторияКурсов
            currency.Post();                                                                                                         // связываем с БД
        }
Пример #2
0
 protected override void OnCreateReportCompleted(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.RunWorkerCompletedEventArgs e)
 {
     base.OnCreateReportCompleted(nsgBackgroundReporter, e);
 }
Пример #3
0
        protected override void OnCreateReport(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.DoWorkEventArgs e)
        {
            base.OnCreateReport(nsgBackgroundReporter, e);

            // Формируем строку запроса
            string uri;
            bool   requsetHasDate = Период.Value.Year >= 2000;

            if (requsetHasDate)
            {
                uri = $"{Валюта.Value.Код}/{Период.Value.Year}/{Период.Value.Month.ToString("00")}/{Период.Value.Day.ToString("00")}.tsv";
            }
            else
            {
                if (MessageBox.Show("Загрузка курсов за все время может быть долгой. Продолжить?", "Предупреждение",
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
                {
                    return;
                }
                uri = $"cb/{Валюта.Value.Код}.tsv";
            }

            // Делаем запрос
            HttpWebRequest webRequest = HttpWebRequest.Create(Path.Combine(@"http://cbrates.rbc.ru/tsv", uri)) as HttpWebRequest;
            WebResponse    response;

            try
            {
                response = webRequest.GetResponse();
            }
            catch (WebException x)
            {
                Console.WriteLine(x.Message);
                MessageBox.Show(x.Message + "\n\nStack trace:\n" + x.StackTrace, "Ошибка", MessageBoxButtons.OK);
                return;
            }

            // Считываем ответ
            string[] res;
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                res = reader.ReadToEnd().Split('\n');
            }
            //MessageBox.Show(uri + '\n' + res[res.Length - 1]);
            //Console.WriteLine(res[res.Length - 1]);

            // БД
            ИсторияКурсов history    = ИсторияКурсов.Новый();
            NsgCompare    nsgCompare = new NsgCompare();

            nsgCompare.Add(ИсторияКурсов.Names.Валюты, Валюта.Value, NsgSoft.Database.NsgComparison.Equal);
            if (requsetHasDate) // если в запросе была дата, учитывать её
            {
                nsgCompare.Add(ИсторияКурсов.Names.ДатаВремя, Период.Value.Date, NsgSoft.Database.NsgComparison.GreaterOrEqual);
                nsgCompare.Add(ИсторияКурсов.Names.ДатаВремя, Период.Value.AddDays(1).Date, NsgSoft.Database.NsgComparison.Less);
            }
            history.DeleteArray(nsgCompare);
            string[] resItem;   // хранение текущей записи
            if (res.Length > 1) // если вернулось больше одной записи, каждая строка res имеет вид "[время] 1 [курс]"
            {                   // вносим всё в БД
                for (int i = 0; i < res.Length; i++)
                {
                    ReportProgress(i * 100 / res.Length, "Ждём-с!");
                    resItem = res[i].Split('\t');
                    history.New();
                    history.Валюты    = Валюта.Value;
                    history.ДатаВремя = DateTime.ParseExact(resItem[0], "yyyyMMdd", CultureInfo.InvariantCulture);
                    history.Значение  = Convert.ToDecimal(resItem[2], CultureInfo.InvariantCulture);
                    history.Post();
                }
            }
            else if (res.Length == 1) // единственная строка res имеет вид "1 [курс]"
            {                         // вносим её в БД
                resItem = res[0].Split('\t');
                history.New();
                history.Валюты    = Валюта.Value;
                history.ДатаВремя = Период.Value.Date;
                history.Значение  = Convert.ToDecimal(resItem[1], CultureInfo.InvariantCulture);
                history.Post();
            }
            nsgCompare.RemoveParameters(ИсторияКурсов.Names.ДатаВремя); // поиск за период нам больше не нужен
            // Присвоить валюте последний курс
            var sorting = new NsgSorting(new NsgSortingParam(ИсторияКурсов.Names.ДатаВремя, NsgSoft.Database.NsgSortDirection.Descending));
            int one     = 1;
            var last    = history.FindAll(ref one, 0, sorting, nsgCompare)[0];

            Валюта.Value.Edit();
            Валюта.Value.ТекущийКурс = last.Значение;
            Валюта.Value.Post();
        }
Пример #4
0
 protected override void OnBeforeCreateReport(NsgBackgroundWorker nsgBackgroundReporter)
 {
     base.OnBeforeCreateReport(nsgBackgroundReporter);
 }
Пример #5
0
 protected override void OnCreateReport(NsgBackgroundWorker nsgBackgroundReporter, System.ComponentModel.DoWorkEventArgs e)
 {
     base.OnCreateReport(nsgBackgroundReporter, e);
 }