예제 #1
0
 /// <summary>
 /// Парсер для формата файла TXT
 /// </summary>
 protected void ParseTXT(RejectHeader reject, string filename)
 {
     using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
     {
         string line;
         while ((line = reader.ReadLine()) != null)
         {
             if (line != "")
             {
                 var rejectLine = new RejectLine();
                 reject.Lines.Add(rejectLine);
                 var splat          = line.Trim().Split(' ');
                 var splatCountLast = splat.Count() - 1;
                 var splatLast      = splat[splatCountLast];
                 splat[splatCountLast] = "";
                 var product = String.Join(" ", splat, 0, splat.Count());
                 rejectLine.Product = product.Trim();
                 var ordered = splatLast.Split('>');
                 rejectLine.Ordered = NullableConvert.ToUInt32(ordered[0].Replace("-", ""));
                 var received = NullableConvert.ToUInt32(ordered[1]);
                 var rejected = rejectLine.Ordered - received;
                 rejectLine.Rejected = rejected != null ? rejected.Value : 0;
             }
         }
     }
 }
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Заказали"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    var fields     = line.Split('\t');
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code    = fields[0];
                    rejectLine.Product = fields[5];
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[1]);
                    var rejected = NullableConvert.ToUInt32(fields[3]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding("Utf-8")))
            {
                string line;
                var    rejectFound = false;
                //Читаем, пока не кончатся строки в файле
                while ((line = reader.ReadLine()) != null)
                {
                    var fields = line.Split(';');
                    if (fields[0].Trim() == "Код")
                    {
                        rejectFound = true;
                        continue;
                    }

                    //Если мы еще не дошли до места с которого начинаются отказы, то продолжаем
                    if (!rejectFound)
                    {
                        continue;
                    }

                    //Если мы дошли до этого места, значит все что осталось в файле - это строки с отказами
                    fields = line.Trim().Split(';');
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code    = fields[0].Trim();
                    rejectLine.Product = fields[1].Trim();
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[2].Trim());
                    var rejected = NullableConvert.ToUInt32(fields[3].Trim());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            DataTable data;

            try
            {
                data = Dbf.Load(filename);
            }
            catch (Exception e)
            {
                var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                Logger.Warn(err, e);
                return;
            }
            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Product = data.Rows[i][10].ToString();
                rejectLine.Code    = data.Rows[i][9].ToString();
                rejectLine.Cost    = NullableConvert.ToDecimal(data.Rows[i][13].ToString());
                rejectLine.Ordered = NullableConvert.ToUInt32(data.Rows[i][14].ToString());
                var rejected = NullableConvert.ToUInt32(data.Rows[i][15].ToString());
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("ИД заявки"))
                    {
                        rejectFound = true;
                        reader.ReadLine();
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    var splat = line.Trim().Split(':');
                    rejectLine.Product = splat[0].Trim();
                    rejectLine.Ordered = NullableConvert.ToUInt32(splat[1].Replace("-", ""));
                    var rejected = NullableConvert.ToUInt32(splat[1]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла TXT и OTK
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                //пропускаем первую строку и начинаем считывание
                reader.ReadLine();
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    var splat = line.Trim().Split(new[] { "\t" }, StringSplitOptions.None);

                    //по причине того,что есть файлы без поля кода товара
                    if (splat.Count() <= 2)
                    {
                        rejectLine.Product = splat[0].Replace("|", "");
                        rejectLine.Ordered = NullableConvert.ToUInt32(splat[1]);
                        var splat2 = NullableConvert.ToUInt32(splat[1]);
                        rejectLine.Rejected = splat2 != null ? splat2.Value : 0;
                    }
                    else
                    {
                        rejectLine.Product = splat[1];
                        rejectLine.Code    = splat[0];
                        rejectLine.Ordered = NullableConvert.ToUInt32(splat[2]);
                        var rejected = NullableConvert.ToUInt32(splat[2]);
                        rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    }
                }
            }
        }
예제 #7
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// для формата txt много различных типов файлов
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            try {
                using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                    //считываем весь текст из файла и проверяем на наличие слова Отказы
                    //из-за проблемы с кодировкой в некоторых файлах
                    //это сделано на случай страховки,если вдруг текст в файле все же не будет считываться правильно
                    string file = reader.ReadToEnd();
                    if (!file.ToLower().Contains("отказаны следующие позиции"))
                    {
                        Logger.WarnFormat("Файл '{0}' не может быть распарсен, так как парсер {1} не может парсить данный файл из-за проблемы с кодировкой", filename, GetType().Name);
                    }
                    else
                    {
                        var parts = file.Split(new[] { "\r\n" }, StringSplitOptions.None);
                        for (var i = 1; i < parts.Count(); i++)
                        {
                            var rejectFound = true;

                            if (parts[i].Contains("По Клиент"))
                            {
                                rejectFound = false;
                            }

                            if (parts[i].Contains("По заявке"))
                            {
                                rejectFound = false;
                            }

                            if (parts[i] == "")
                            {
                                rejectFound = false;
                            }

                            if (!rejectFound)
                            {
                                continue;
                            }


                            var rejectLine = new RejectLine();
                            reject.Lines.Add(rejectLine);
                            var splat = parts[i].Split(new[] { '\t' }, StringSplitOptions.None);
                            rejectLine.Code    = splat[0];
                            rejectLine.Product = splat[1];
                            var rejected = NullableConvert.ToUInt32(splat[2]);
                            rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                var err = string.Format("Файл '{0}' не может быть распарсен, так как парсер {1} не может парсить данный файл так как он либо иного типа,либо с опечаткой", filename, GetType().Name);
                Logger.Warn(err, e);
            }
        }
        /// <summary>
        /// Парсер для формата файла XLS
        /// </summary>
        protected void ParseXLS(RejectHeader reject, string filename)
        {
            HSSFWorkbook hssfwb;

            using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                try
                {
                    hssfwb = new HSSFWorkbook(file);
                }
                catch (Exception e)
                {
                    var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                    Logger.Warn(err, e);
                    return;
                }
            }

            ISheet sheet = hssfwb.GetSheetAt(0);
            //запускаем цикл по строкам
            var rejectFound = false;

            for (var i = 0; i <= sheet.LastRowNum; i++)
            {
                var row = sheet.GetRow(i);
                if (row != null)
                {
                    var cell = row.GetCell(0);
                    if (cell != null && cell.ToString() == "Товар")
                    {
                        rejectFound = true;
                        continue;
                    }

                    //проверяем ячейку на null и остальные невидимые значения
                    if (cell == null || string.IsNullOrWhiteSpace(cell.StringCellValue))
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product  = row.GetCell(0).StringCellValue;
                    rejectLine.Code     = row.GetCell(6).NumericCellValue.ToString();
                    rejectLine.Producer = row.GetCell(4).StringCellValue;
                    rejectLine.Ordered  = NullableConvert.ToUInt32(row.GetCell(7).NumericCellValue.ToString());
                    var rejected = NullableConvert.ToUInt32(row.GetCell(8).NumericCellValue.ToString());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
예제 #9
0
        /// <summary>
        /// Создание отказа из лога приемки документа
        /// </summary>
        /// <param name="log">Объект лога документа</param>
        /// <returns></returns>
        public RejectHeader CreateReject(DocumentReceiveLog log)
        {
            BadLines = new List <RejectLine>();
            var rejectheader = new RejectHeader(log);
            var filename     = log.GetFileName();

            Parse(rejectheader, filename);
            rejectheader.Parser = this.GetType().Name;
            CheckRejectHeader(rejectheader);
            return(rejectheader);
        }
예제 #10
0
 public override void Parse(RejectHeader reject, string filename)
 {
     if (filename.Contains(".txt"))
     {
         ParseTXT(reject, filename);
     }
     else
     {
         Logger.WarnFormat("Файл '{0}' не может быть распарсен, так как парсер {1} не умеет парсить данный формат файла", filename, GetType().Name);
     }
 }
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            var data = Dbf.Load(filename);

            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Code    = data.Rows[i][0].ToString();
                rejectLine.Product = data.Rows[i][1].ToString();
                var ordered = data.Rows[i][2].ToString().Split(',');
                rejectLine.Ordered = NullableConvert.ToUInt32(ordered[0]);
                var rejected = NullableConvert.ToUInt32(ordered[0]);
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
예제 #12
0
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            var data = Dbf.Load(filename);

            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Product  = data.Rows[i][1].ToString();
                rejectLine.Producer = data.Rows[i][2].ToString();
                rejectLine.Ordered  = NullableConvert.ToUInt32(data.Rows[i][3].ToString());
                var rejected = NullableConvert.ToUInt32(data.Rows[i][4].ToString());
                rejectLine.Cost     = NullableConvert.ToDecimal(data.Rows[i][5].ToString());
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
예제 #13
0
 /// <summary>
 /// Парсер для формата файла TXT
 /// </summary>
 protected void ParseTXT(RejectHeader reject, string filename)
 {
     using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
     {
         string line;
         var    rejectFound = false;
         while ((line = reader.ReadLine()) != null)
         {
             if (line.Trim() == "О Т К А З Ы")
             {
                 rejectFound = true;
                 continue;
             }
             if (line.Trim() == "СФОРМИРОВАННЫЙ ЗАКАЗ")
             {
                 break;
             }
             if (!rejectFound)
             {
                 continue;
             }
             if (line.Length == 0)
             {
                 continue;
             }
             //пропускаем заголовок
             if (line[0] == '¦')
             {
                 continue;
             }
             //пропускаем разделители строк
             if (line.All(c => c == '-'))
             {
                 continue;
             }
             var rejectLine = new RejectLine();
             reject.Lines.Add(rejectLine);
             rejectLine.Product  = line.Substring(0, 35).Trim();
             rejectLine.Producer = line.Substring(35, 13).Trim();
             rejectLine.Cost     = NullableConvert.ToDecimal(line.Substring(48, 9).Trim(), CultureInfo.InvariantCulture);
             rejectLine.Ordered  = (uint?)NullableConvert.ToFloatInvariant(line.Substring(57, 9).Trim());
             var rejectedCount = (rejectLine.Ordered - (uint?)NullableConvert.ToFloatInvariant(line.Substring(66, 9).Trim()));
             rejectLine.Rejected = rejectedCount.GetValueOrDefault();
         }
     }
 }
예제 #14
0
        /// <summary>
        /// Парсер для формата файла CSV
        /// </summary>
        protected void ParseCSV(RejectHeader reject, string filename)
        {
            //Открываем файл, при помощи unsing, чтобы вконце си шарп отпустил занятые ресурсы. Подробнее гугли IDisposable.
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                //Читаем, пока не кончатся строки в файле
                while ((line = reader.ReadLine()) != null)
                {
                    //Делим строку на части по разделителю.
                    //CSV файл, который ожидает данный парсер - это эксел таблица, строки которой разделены переносом строки, а ячейки символом ";"
                    var fields = line.Split(';');
                    //Ищем в ячейке место, с которого начинаются отказы в таблице
                    if (fields[1].Trim() == "ОТКАЗАНО")
                    {
                        //После строчки с этой надписью, будет еще одна строка с наименованием таблицы, ее мы пропустим
                        //И со следующей строчки будут уже идти отказы
                        //В итоге надо пропустить 2 строчки и проставить флаг, что дальше пора считывать отказы
                        //Отказы идут прямо до конца файла, так что в условии остановки считывания нужды нет
                        reader.ReadLine();
                        rejectFound = true;
                        continue;
                    }
                    //Если мы еще не дошли до места с которого начинаются отказы, то продолжаем
                    if (!rejectFound)
                    {
                        continue;
                    }

                    //Если мы дошли до этого места, значит все что осталось в файле - это строки с отказами
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code     = fields[1];
                    rejectLine.Product  = fields[2];
                    rejectLine.Producer = fields[3];
                    rejectLine.Cost     = NullableConvert.ToDecimal(fields[4].Trim());
                    rejectLine.Ordered  = NullableConvert.ToUInt32(fields[5].Trim());
                    //тонкий момент - это поле является обязательным, но теоретически может отсутствовать в файле
                    //в случае отсутствия мы записываем 0, тогда далее другие классы разберут этот случай
                    //и сделают необходимые действия по урегулированию ситуации
                    var rejected = NullableConvert.ToUInt32(fields[7].Trim());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("К сожалению вся позиция уже отсутствует:"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var index = line.IndexOf("Добавлено:");
                    if (index <= 0)
                    {
                        continue;
                    }

                    var first      = line.Substring(0, index).Trim();
                    var product    = first.Remove(0, 2);
                    var rejectLine = new RejectLine();
                    rejectLine.Product = product;

                    var second = line.Substring(index).Trim().Replace(",", " ");
                    var fields = second.Split(' ');
                    rejectLine.Cost = NullableConvert.ToDecimal(fields[7].Trim().Replace(".", ","));
                    var ordered   = NullableConvert.ToUInt32(fields[4]);
                    var delivered = NullableConvert.ToUInt32(fields[1].Trim());
                    rejectLine.Ordered = ordered;
                    var rejected = ordered - delivered;
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    reject.Lines.Add(rejectLine);
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла TXT
        /// В файле допущена ошибка с тем что в графе запрошено стоит ноль
        /// Раз неизвестно количество заказанных товаров,то невозможно вычислить отказы
        /// Строки, где в запрошено стоит ноль - игнорируем
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Следующие расхождения с заявкой:"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    var first     = line.Replace("Отказ по количеству: ", "");
                    var splat     = first.Split(new[] { " - запрошено" }, StringSplitOptions.None);
                    var product   = splat[0];
                    var other     = splat[1];
                    var splat2    = other.Split(new[] { ", к получению " }, StringSplitOptions.None);
                    var ordered   = NullableConvert.ToUInt32(splat2[0]);
                    var requested = NullableConvert.ToUInt32(splat2[1]);
                    if (ordered == 0)
                    {
                        continue;
                    }
                    var rejected = ordered - requested;
                    rejectLine.Product  = product.Trim();
                    rejectLine.Ordered  = ordered;
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла CSV
        /// </summary>
        protected void ParseCSV(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                string line;
                var    rejectFound = false;
                //Читаем, пока не кончатся строки в файле
                while ((line = reader.ReadLine()) != null)
                {
                    //Делим строку на части по разделителю.
                    //CSV файл, который ожидает данный парсер - это эксел таблица, строки которой разделены переносом строки, а ячейки символом ";"
                    var fields = line.Split(';');
                    if (fields.Length == 0)
                    {
                        continue;
                    }
                    //Ищем в ячейке место, с которого начинаются отказы в таблице
                    if (fields[0].Trim() == "Номер заказа ПОСТАВЩИКу")
                    {
                        rejectFound = true;
                        continue;
                    }
                    //Если мы еще не дошли до места с которого начинаются отказы, то продолжаем
                    if (!rejectFound)
                    {
                        continue;
                    }
                    if (fields.Length < 11)
                    {
                        continue;
                    }

                    //Если мы дошли до этого места, значит все что осталось в файле - это строки с отказами
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Code    = fields[5];
                    rejectLine.Product = fields[6];
                    rejectLine.Cost    = NullableConvert.ToDecimal(fields[10].Trim());
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[7].Trim());
                    var rejected = NullableConvert.ToUInt32(fields[9].Trim());
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
예제 #18
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    //доходим до строчки, в которой содерится слово ТОВАР и начинаем чтение
                    if (line.Contains("ТОВАР"))
                    {
                        rejectFound = true;
                        //пропускаем линию-разделения таблицы
                        reader.ReadLine();
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    var rejectLine = new RejectLine();
                    //проверяем на наличие линий-разделения таблицы
                    if (line.Contains("+="))
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var fields = line.Split('|');
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product = fields[2];
                    rejectLine.Ordered = NullableConvert.ToUInt32(fields[5]);
                    var rejected = NullableConvert.ToUInt32(fields[5]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла XML
        /// </summary>
        protected void ParseXML(RejectHeader reject, string filename)
        {
            //получаем докуме5нт
            XDocument xdoc = XDocument.Load(filename);
            XElement  doc  = xdoc.Element("Reject");

            if (!doc.HasElements)
            {
                var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                Logger.Warn(err);
                return;
            }
            //парсим
            //получаем сначала динамику для проверки условий
            var xLines = doc.Elements("Line").Select(line => new
            {
                Code     = line.Element("Code")?.Value,
                CodeCr   = line.Element("CodeCr")?.Value,
                Product  = line.Element("Product")?.Value,
                Producer = line.Element("Producer")?.Value,
                Rejected = NullableConvert.ToUInt32(line.Element("Rejected")?.Value),
                Ordered  = NullableConvert.ToUInt32(line.Element("Ordered")?.Value),
                OrderId  = NullableConvert.ToUInt32(line.Element("OrderId")?.Value),
            }).ToList();

            //проверяем условия
            xLines = xLines.Where(s => s.Code != null && s.Product != null && s.Rejected != null && s.OrderId != null).ToList();
            //подходящие эл.ты кидаем в RejectLine
            var xRejectLines = xLines.Select(line => new RejectLine()
            {
                Code     = line.Code,
                CodeCr   = line.CodeCr,
                Product  = line.Product,
                Producer = line.Producer,
                Rejected = line.Rejected.Value,
                Ordered  = line.Ordered.Value,
                OrderId  = line.OrderId.Value,
            }).ToList();

            //RejectLine в список и отправляем дальше.
            reject.Lines.AddEach(xRejectLines);
        }
예제 #20
0
        /// <summary>
        /// Парсер для формата файла TXT
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                string line;
                var    rejectFound = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("Следующие расхождения с заявкой:"))
                    {
                        rejectFound = true;
                        continue;
                    }

                    if (line == "")
                    {
                        rejectFound = false;
                    }

                    if (!rejectFound)
                    {
                        continue;
                    }

                    var rejectLine = new RejectLine();
                    var fields     = line.Split(new[] { "; - запрошено" }, StringSplitOptions.None);
                    var product    = fields[0].Replace("Отказ по количеству:", "");
                    var fields2    = fields[1].Split(',');
                    var fields3    = fields2[0].Replace("шт.", "").Trim();
                    var ordered    = fields3.Split('.');
                    var fields4    = fields2[1].Replace("к получению", "").Replace("шт.", "");
                    var received   = fields4.Split('.');
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product = product.Trim();
                    rejectLine.Ordered = NullableConvert.ToUInt32(ordered[0]);
                    var rejected = NullableConvert.ToUInt32(ordered[0]) - NullableConvert.ToUInt32(received[0]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
예제 #21
0
        /// <summary>
        /// Проверяет отказ и удаляет невалидные строки
        /// </summary>
        /// <param name="rejectheader">Заголовок отказа</param>
        protected void CheckRejectHeader(RejectHeader rejectheader)
        {
            var skipLines = new List <RejectLine>();

            foreach (var line in rejectheader.Lines)
            {
                if (line.Rejected == 0)
                {
                    Logger.WarnFormat("Не удалось получить значение количества отказов по продукту '{0}' для лога документа {1}", line.Product, rejectheader.Log.Id);
                    skipLines.Add(line);
                    continue;
                }
                if (string.IsNullOrEmpty(line.Product))
                {
                    skipLines.Add(line);
                }
            }
            foreach (var line in skipLines)
            {
                rejectheader.Lines.Remove(line);
                BadLines.Add(line);
            }
        }
        /// <summary>
        /// Парсер для формата файла XLS
        /// Но на самом деле это файлы dbf
        /// </summary>
        protected void ParseXLS(RejectHeader reject, string filename)
        {
            DataTable data;

            try
            {
                data = Dbf.Load(filename);
            }
            catch (Exception e)
            {
                var err = string.Format("Не удалось получить файл с отказами '{0}' для лога документа {1}", filename, reject.Log.Id);
                Logger.Warn(err, e);
                return;
            }
            for (var i = 0; i < data.Rows.Count; i++)
            {
                var rejectLine = new RejectLine();
                reject.Lines.Add(rejectLine);
                rejectLine.Code     = data.Rows[i][0].ToString();
                rejectLine.Product  = data.Rows[i][1].ToString();
                rejectLine.Producer = data.Rows[i][2].ToString();

                //высчитываем сколько отказов (из того сколько заказано вычитаем то сколько доставлено)
                var ordered   = NullableConvert.ToUInt32(data.Rows[i][3].ToString());
                var delivered = NullableConvert.ToUInt32(data.Rows[i][4].ToString());
                rejectLine.Ordered = ordered;

                //если в ячейке доставлено пусто-считаем что доставлено ноль
                if (delivered == null)
                {
                    delivered = 0;
                }

                var rejected = ordered - delivered;
                rejectLine.Rejected = rejected != null ? rejected.Value : 0;
            }
        }
        /// <summary>
        /// Парсер для формата файла OTK
        /// </summary>
        protected void ParseOTK(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251)))
            {
                //пропускаем первую строку и начинаем считывание
                reader.ReadLine();
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    //для файлов в которых нет отказов и присутствует пустая строка
                    if (!line.IsNullOrEmpty())
                    {
                        var rejectLine = new RejectLine();
                        reject.Lines.Add(rejectLine);
                        var splat = line.Trim().Split(new[] { "\t" }, StringSplitOptions.None);

                        // проверяем на файл в котором нет кода товара
                        if (splat.Count() <= 2)
                        {
                            rejectLine.Product = splat[0].Replace("|", "");
                            rejectLine.Ordered = NullableConvert.ToUInt32(splat[1]);
                            var splatRejected = NullableConvert.ToUInt32(splat[1]);
                            rejectLine.Rejected = splatRejected != null ? splatRejected.Value : 0;
                        }
                        else
                        {
                            rejectLine.Product = splat[1];
                            rejectLine.Code    = splat[0];
                            rejectLine.Ordered = NullableConvert.ToUInt32(splat[2]);
                            var rejected = NullableConvert.ToUInt32(splat[2]);
                            rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Парсер для формата файла DBF
        /// </summary>
        protected void ParseDBF(RejectHeader reject, string filename)
        {
            var data = Dbf.Load(filename);

            //файлы в которых нет наименования товара не разбираем
            if (!data.Columns[0].ToString().Contains("KOD"))
            {
                Logger.WarnFormat("Файл '{0}' не может быть распарсен, так как парсер {1} не может парсить данный файл из-за отсутсвия наименования товара", filename, GetType().Name);
            }
            else
            {
                for (var i = 0; i < data.Rows.Count; i++)
                {
                    var rejectLine = new RejectLine();
                    reject.Lines.Add(rejectLine);
                    rejectLine.Product = data.Rows[i][1].ToString();
                    rejectLine.Code    = data.Rows[i][0].ToString();
                    var kolvo = data.Rows[i][4].ToString().Split(',');
                    rejectLine.Ordered = NullableConvert.ToUInt32(kolvo[0]);
                    var rejected = NullableConvert.ToUInt32(kolvo[0]);
                    rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                }
            }
        }
        public void filterDocument()
        {
            var catalogName = new TestCatalogName {
                Name = "testName"
            };
            var catalogForm = new TestCatalogForm {
                Form = "testForm"
            };

            session.Save(catalogForm);
            session.Save(catalogName);
            var catalog = new Catalog {
                Name = "testCatalog", NameId = catalogName.Id, FormId = catalogForm.Id
            };

            _product  = new Product(catalog);
            _producer = new Producer {
                Name = "testProducer"
            };
            session.Save(catalog);
            session.Save(_product);
            session.Save(_producer);
            session.Flush();

            _document = new DocumentReceiveLog(_supplier)
            {
                FileName     = "test.sst",
                ForClient    = _client,
                Address      = _address,
                DocumentType = DocumentType.Reject,
                Reject       = new RejectHeader(),
            };
            session.Save(_document);

            var reject = new RejectHeader()
            {
                Address   = _address,
                Lines     = new List <RejectLine>(),
                Log       = _document,
                Parser    = "TestParser",
                Supplier  = _supplier,
                WriteTime = SystemTime.Now()
            };

            reject.Lines.Add(new RejectLine()
            {
                Code           = "testCode",
                CodeCr         = "testCodeCr",
                Cost           = 777,
                Header         = reject,
                OrderId        = 333,
                Ordered        = 111,
                Producer       = _producer.Name,
                ProducerEntity = _producer,
                Product        = _product.Catalog.Name,
                ProductEntity  = _product,
                Rejected       = 10
            });
            session.Save(reject);
            _document.Reject = reject;
            session.Save(_document);

            var sendLog = new DocumentSendLog(_user, _document)
            {
                Committed = true
            };

            session.Save(sendLog);
            session.Flush();

            _controller.Documents(new DocumentFilter()
            {
                Supplier = _supplier
            });
            var items = _controller.PropertyBag["logEntities"] as IList <DocumentLog>;

            Assert.AreEqual(1, items.Count(s => s.DocumentType == DocumentType.Waybill));
            Assert.AreEqual(1, items.Count(s => s.DocumentType == DocumentType.Reject));

            var rejectFromDocument = items.First(s => s.DocumentType == DocumentType.Reject);

            Assert.AreEqual("test.sst", rejectFromDocument.FileName);
            Assert.AreEqual(_address.Name, rejectFromDocument.Address);
            Assert.AreEqual("TestParser", rejectFromDocument.Parser);
            Assert.AreEqual(_client.Id.ToString(), rejectFromDocument.ClientId);
            Assert.AreEqual(_supplier.Id.ToString(), rejectFromDocument.SupplierId);
        }
 public override void Parse(RejectHeader reject, string filename)
 {
 }
예제 #27
0
 /// <summary>
 /// Функция разбора отказов. Заполняет заголовок отказа строками по продуктам.
 /// </summary>
 /// <param name="rejectHeader">Заголовок отказа</param>
 /// <param name="filename">Путь к файлу</param>
 public abstract void Parse(RejectHeader rejectHeader, string filename);
        /// <summary>
        /// Парсер для формата файла TXT
        /// Типов отказов формата txt два
        /// </summary>
        protected void ParseTXT(RejectHeader reject, string filename)
        {
            using (var reader = new StreamReader(File.OpenRead(filename), Encoding.GetEncoding(1251))) {
                string file = reader.ReadToEnd();
                //если в файле содержится слово HEAD, то это первый тип файла формата txt
                //если в файле содержится слово Ваша заявка, то это второй тип файла формата txt
                if (file.Contains("HEAD"))
                {
                    var parts       = file.Split(new[] { "\r\n" }, StringSplitOptions.None);
                    var rejectFound = false;
                    for (var i = 0; i < parts.Count(); i++)
                    {
                        var fields = parts[i].Split(';');
                        if (fields[0].Trim() == "Код товара")
                        {
                            rejectFound = true;
                            continue;
                        }

                        if (parts[i] == "")
                        {
                            rejectFound = false;
                        }

                        if (!rejectFound)
                        {
                            continue;
                        }

                        var rejectLine = new RejectLine();
                        fields = parts[i].Trim().Split(';');
                        reject.Lines.Add(rejectLine);
                        rejectLine.Code    = fields[0].Trim();
                        rejectLine.Product = fields[1].Trim();
                        rejectLine.Ordered = NullableConvert.ToUInt32(fields[3].Trim());
                        var rejected = NullableConvert.ToUInt32(fields[4].Trim());
                        rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    }
                }
                else if (file.Contains("Ваша заявка"))
                {
                    var parts       = file.Split(new[] { "\r\n" }, StringSplitOptions.None);
                    var rejectFound = false;

                    for (var i = 0; i < parts.Count(); i++)
                    {
                        if (parts[i].Contains("L"))
                        {
                            rejectFound = true;
                            continue;
                        }

                        if (parts[i] == "")
                        {
                            rejectFound = false;
                        }
                        if (!rejectFound)
                        {
                            continue;
                        }
                        if (parts.Length == 0)
                        {
                            continue;
                        }

                        var rejectLine = new RejectLine();
                        reject.Lines.Add(rejectLine);
                        var parts2 = parts[i].Trim().Split('|');
                        rejectLine.Product = parts2[1].Trim();
                        rejectLine.Ordered = NullableConvert.ToUInt32(parts2[2].Trim());
                        var rejected = NullableConvert.ToUInt32(parts2[4].Trim());
                        rejectLine.Rejected = rejected != null ? rejected.Value : 0;
                    }
                }
            }
        }