Example #1
0
        public ActionResult AddValuesFromMail(string ProviderName)
        {
            //Выгружаем вложения из почты
            MailParser.DownloadAttachmentFromMail();
            //ProviderName = "ООО Запчасти даром";
            Dictionary <string, int> ColumnNumber = new Dictionary <string, int>();

            ColumnNumber = ColumnConfiguration.ReeturnDictionaryWithColumnName(ProviderName);
            List <AutoParts> listAutoParts = new List <AutoParts>();

            foreach (string file in Directory.GetFiles(@"/Users/a777/Downloads/", "*.csv"))
            {//Ищем все загруженные csv файлы
                bool isColumnName = true;
                using (var reader = new StreamReader(file))
                {
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        if (isColumnName)
                        {//Сохраняем наименований колонок и их индексы
                            int i = 0;
                            foreach (var value in line.Split(';'))
                            {
                                if (ColumnNumber.ContainsKey(value))
                                {
                                    ColumnNumber[value] = i;
                                }
                                i++;
                            }
                            if (ColumnNumber.Values.Any(k => k == -1))
                            {
                                return(BadRequest($"Не найдено поле {ColumnNumber.Where(cl => cl.Value == -1).First().Key} в файле {file}"));
                            }
                            isColumnName = false;
                        }
                        else
                        {
                            try
                            {
                                var listValues = line.Split(';');

                                //ColumnNumber хранит индексы столбцов со значениями
                                //ColumnConfiguration.ReturnProviderColumnName возвращает наименований полей для конкретного поставщика
                                var vendor       = listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Производитель")]].ToString().ToUpper();
                                var number       = listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Номер запчасти")]].ToString().ToUpper();
                                var searchVendor = listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Производитель для поиска")]].ToString();
                                searchVendor = ValueValidator.ReturnStringWithOnlyLettersAndNumbers(searchVendor);
                                var searchNumber = listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Номер для поиска")]].ToString();
                                searchNumber = ValueValidator.ReturnStringWithOnlyLettersAndNumbers(searchNumber);
                                var description = listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Наименование")]].ToString();
                                if (description.Length > 512)
                                {
                                    description = description.Remove(512, description.Length - 512);
                                }
                                double price = 0;
                                Double.TryParse(listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Цена")]].ToString().Replace(",", "."),
                                                out price);
                                var strCount = listValues[ColumnNumber[ColumnConfiguration.ReturnProviderColumnName(ProviderName, "Количество")]].ToString();
                                strCount = ValueValidator.ReturnStringWithoutComparisonOperators(strCount);
                                var count = Int32.Parse(strCount);

                                if (!listAutoParts.Any(ap => ap.Number == number))
                                {
                                    listAutoParts.Add(new AutoParts(vendor, number, searchVendor, searchNumber, description, price, count));
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                }
            }

            try
            {
                using (var db = new ApplicationContext())
                {
                    foreach (var parts in listAutoParts)
                    {
                        db.AutoParts.Add(parts);
                    }
                    db.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(Ok("Информация успешно добавлена"));
        }