/// <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; } } } }
/// <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; } } }
/// <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); }
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; } }
/// <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; } }
/// <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(); } } }
/// <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; } } }
/// <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); }
/// <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; } } }
/// <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) { }
/// <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; } } } }