public virtual Document Parse(string file, Document document)
        {
            SetIndexes();

            using (var parser = new HeaderBodyParser(file, CommentMark)) {
                ReadHeader(document, parser.Header().First());
                foreach (var body in parser.Body())
                {
                    ReadBody(document, body);
                }
            }

            return(document);
        }
        public override Document Parse(string file, Document document)
        {
            var match = regex.Match(file);

            document.ProviderDocumentId = match.Groups["pd"].Value;
            document.DocumentDate       = DateTime.Today;
            document.SetInvoice().BuyerName    = match.Groups["bn"].Value;
            document.SetInvoice().BuyerAddress = match.Groups["ba"].Value;

            SetIndexes();
            using (var reader = new StreamReader(file, Encoding.GetEncoding(866))) {
                using (var parser = new HeaderBodyParser(reader, CommentMark)) {
                    foreach (var body in parser.Lines())
                    {
                        ReadBody(document, body);
                    }
                }
            }
            return(document);
        }
        public static bool CheckByHeaderPart(string file, IEnumerable <string> name, string commentMark)
        {
            if (!Path.GetExtension(file).Match(".txt"))
            {
                return(false);
            }

            using (var parser = new HeaderBodyParser(file, commentMark)) {
                var header = parser.Header().FirstOrDefault();
                if (header == null)
                {
                    return(false);
                }
                var parts = header.Split(';');
                if (parts.Length < 4)
                {
                    return(false);
                }
                if (name.All(n => !parts[3].Equals(n, StringComparison.CurrentCultureIgnoreCase)))
                {
                    return(false);
                }
                if (GetString(parts[4]) != null && GetString(parts[4]).Contains("ЛИПЕЦК, *ЛИПЕЦКФАРМАЦИЯ Аптека"))
                {
                    return(false);
                }

                var line = parser.Body().FirstOrDefault();
                if (line == null)
                {
                    return(false);
                }

                parts = line.Split(';');
                if (GetDecimal(parts[6]) == null)
                {
                    return(false);
                }
                return(true);
            }
        }
Example #4
0
        public static bool CheckFileFormat(string file)
        {
            bool isHeader = false;
            bool isBody   = false;
            int  counter  = 0;

            using (var parser = new HeaderBodyParser(file, null)) {
                var content = parser.Lines();

                foreach (var line in content)
                {
                    if (line.ToLower() == "[заголовок]")
                    {
                        isHeader = true;
                        continue;
                    }
                    if (line.ToLower() == "[таблица]")
                    {
                        isBody = true;
                        continue;
                    }
                    var parts = line.Split(';');
                    if (parts.Length < 2)
                    {
                        return(false);
                    }

                    if (parts[0].ToLower().Contains("продавец") ||
                        parts[0].ToLower().Contains("номер накладной") ||
                        parts[0].ToLower().Contains("дата накладной") ||
                        parts[0].ToLower().Contains("номер с/ф") ||
                        parts[0].ToLower().Contains("дата с/ф"))
                    {
                        counter++;
                    }
                }
            }
            return(isHeader & isBody & (counter == 5));
        }
Example #5
0
 public override Document Parse(string file, Document document)
 {
     SetIndexes();
     using (var parser = new HeaderBodyParser(file, CommentMark)) {
         var       lineCounter      = 0;
         const int headerLinesCount = 23;
         foreach (var headline in parser.Header())
         {
             var parts = headline.Split(';');
             var key   = parts[0].ToLower().Trim();
             if (key.ToLower() == "номер накладной")
             {
                 document.ProviderDocumentId = GetString(parts[1]);
             }
             if (key.ToLower() == "дата накладной")
             {
                 if (!String.IsNullOrEmpty(parts[1]))
                 {
                     document.DocumentDate = Convert.ToDateTime(parts[1]);
                 }
             }
             if (key.ToLower() == "номер с/ф")
             {
                 document.SetInvoice().InvoiceNumber = GetString(parts[1]);
             }
             if (key.ToLower() == "дата с/ф")
             {
                 if (!String.IsNullOrEmpty(parts[1]))
                 {
                     document.SetInvoice().InvoiceDate = Convert.ToDateTime(parts[1]);
                 }
             }
             if (key.ToLower() == "продавец")
             {
                 document.SetInvoice().SellerName = GetString(parts[1]);
             }
             if (key.ToLower() == "адрес продавца")
             {
                 document.SetInvoice().SellerAddress = GetString(parts[1]);
             }
             if (key.ToLower() == "инн/кпп продавца")
             {
                 if (parts[1].Contains("/"))
                 {
                     document.SetInvoice().SellerINN = GetString(parts[1].Split('/')[0]);
                     document.SetInvoice().SellerKPP = GetString(parts[1].Split('/')[1]);
                 }
             }
             if (key == "грузоотправитель и его адрес")
             {
                 document.SetInvoice().ShipperInfo = GetString(parts[1]);
             }
             if (key == "грузополучатель и его адрес")
             {
                 document.SetInvoice().RecipientAddress = GetString(parts[1]);
             }
             if (key == "к платежно-расчетному документу n")
             {
                 document.SetInvoice().PaymentDocumentInfo = GetString(parts[1]);
             }
             if (key == "покупатель")
             {
                 document.SetInvoice().BuyerName = GetString(parts[1]);
             }
             if (key == "адрес покупателя")
             {
                 document.SetInvoice().BuyerAddress = GetString(parts[1]);
             }
             if (key == "инн/кпп покупателя")
             {
                 if (parts[1].Contains("/"))
                 {
                     document.SetInvoice().BuyerINN = GetString(parts[1].Split('/')[0]);
                     document.SetInvoice().BuyerKPP = GetString(parts[1].Split('/')[1]);
                 }
             }
             if (key == "стоимость без ндс 0%")
             {
                 document.SetInvoice().AmountWithoutNDS0 = GetDecimal(parts[1]);
             }
             if (key == "стоимость без ндс 10%")
             {
                 document.SetInvoice().AmountWithoutNDS10 = GetDecimal(parts[1]);
             }
             if (key == "сумма ндс 10%")
             {
                 document.SetInvoice().NDSAmount10 = GetDecimal(parts[1]);
             }
             if (key == "стоимость с ндс 10%")
             {
                 document.SetInvoice().Amount10 = GetDecimal(parts[1]);
             }
             if (key == "стоимость без ндс 18%")
             {
                 document.SetInvoice().AmountWithoutNDS18 = GetDecimal(parts[1]);
             }
             if (key == "сумма ндс 18%")
             {
                 document.SetInvoice().NDSAmount18 = GetDecimal(parts[1]);
             }
             if (key == "стоимость с ндс 18%")
             {
                 document.SetInvoice().Amount18 = GetDecimal(parts[1]);
             }
             if (key == "общая стоимость без ндс")
             {
                 document.SetInvoice().AmountWithoutNDS = GetDecimal(parts[1]);
             }
             if (key == "общая сумма ндс")
             {
                 document.SetInvoice().NDSAmount = GetDecimal(parts[1]);
             }
             if (key == "общая стоимость с ндс")
             {
                 document.SetInvoice().Amount = GetDecimal(parts[1]);
             }
             if (++lineCounter == headerLinesCount)
             {
                 break;
             }
         }
         foreach (var body in parser.Body())
         {
             var line = body.Split(';');
             int ival;
             if (!Int32.TryParse(line[0], out ival))
             {
                 continue;
             }
             ReadBody(document, body);
         }
     }
     return(document);
 }