Beispiel #1
0
        public override DbfParser GetParser()
        {
            var parcer = new DbfParser()
                         .DocumentHeader(d => d.DocumentDate, "DATEDOC")
                         .DocumentHeader(d => d.ProviderDocumentId, "NDOC")
                         .Invoice(i => i.Amount, "SUMDOC")
                         .Invoice(i => i.InvoiceDate, "BILLDT")
                         .Invoice(i => i.InvoiceNumber, "BILLNUM")
                         .Invoice(i => i.RecipientId, "PODRCD")
                         .Invoice(i => i.RecipientName, "APTEKA")
                         .Line(l => l.Amount, "SUMPAY")
                         .Line(l => l.BillOfEntryNumber, "NUMGTD")
                         .Line(l => l.CertificateAuthority, "SERTORG")
                         .Line(l => l.Certificates, "SERTIF")
                         .Line(l => l.CertificatesDate, "SERTGIVE")
                         .Line(l => l.CertificatesEndDate, "SERTDATE")
                         .Line(l => l.Code, "CODEPST")
                         .Line(l => l.Country, "CNTR")
                         .Line(l => l.DateOfManufacture, "DATEMADE")
                         .Line(l => l.EAN13, "EAN13")
                         .Line(l => l.Nds, "NDS")
                         .Line(l => l.NdsAmount, "NDSPST")
                         .Line(l => l.Period, "GDATE")
                         .Line(l => l.Producer, "FIRM")
                         .Line(l => l.ProducerCostWithoutNDS, "PRICE1")
                         .Line(l => l.Product, "NAME")
                         .Line(l => l.Quantity, "QNT")
                         .Line(l => l.RegistryCost, "REGPRC")
                         .Line(l => l.RegistryDate, "DATEPRC")
                         .Line(l => l.SerialNumber, "SER")
                         .Line(l => l.SupplierCost, "PRICE2N")
                         .Line(l => l.VitallyImportant, "GNVLS");

            return(parcer);
        }
Beispiel #2
0
        //tested with files from https://www.naturalearthdata.com/downloads/50m-cultural-vectors/50m-admin-0-countries-2/
        public static void Main(string[] args)
        {
            //parse DBF file with countries shape description
            DataTable countries;

            using (var stream = File.Open("ne_50m_admin_0_countries.dbf", FileMode.Open))
            {
                countries = DbfParser.Parse(stream);
            }
            //parse shapefile
            using (var stream = File.Open("ne_50m_admin_0_countries.shp", FileMode.Open))
            {
                var shapefile = ShapefileParser.ShapefileParser.Parse(stream);

                //match description with shape
                for (var i = 0; i < countries.Rows.Count; i++)
                {
                    var country = countries.Rows[i];
                    //column no. 45 is ISO code
                    if ((string)country[45] == "PL")
                    {
                        Console.WriteLine(country[45] + ": " + shapefile.Records[i + 1].Shapes[0]);
                        //check if Lublin is inside Poland
                        Console.WriteLine(shapefile.Records[i + 1].Shapes[0].IsInside(new Point2D(22.566206, 51.248545)));
                    }
                }
            }
        }
        public override DbfParser GetParser()
        {
            var parcer = new DbfParser()
                         .DocumentHeader(d => d.DocumentDate, "DOCDATE")
                         .DocumentHeader(d => d.ProviderDocumentId, "NDOC")
                         .Invoice(i => i.InvoiceDate, "SF_DATE")
                         .Invoice(i => i.InvoiceNumber, "SF_NUMB")
                         .Invoice(i => i.RecipientAddress, "ADDRESS")
                         //.Invoice(i => i.RecipientId, "GRUZ_RN") больше int
                         .Invoice(i => i.RecipientName, "AGN_DEST")
                         .Line(l => l.Amount, "SUMMWNDS")
                         .Line(l => l.BillOfEntryNumber, "GTD")
                         .Line(l => l.CertificateAuthority, "SERT_AGN")
                         .Line(l => l.Certificates, "SERT_NUMB")
                         .Line(l => l.CertificatesDate, "SERT_FROM")
                         .Line(l => l.CertificatesEndDate, "SERT_TO")
                         .Line(l => l.Code, "SNOMMODIF")
                         .Line(l => l.Country, "COUNTRY")
                         .Line(l => l.EAN13, "BARCODE")
                         .Line(l => l.Nds, "NDS")
                         .Line(l => l.NdsAmount, "NDS_SUMM2")
                         .Line(l => l.Period, "SROK_GODN")
                         .Line(l => l.Producer, "PRODUCER")
                         .Line(l => l.ProducerCostWithoutNDS, "PRICE_PROD")
                         .Line(l => l.Product, "NAME_LS")
                         .Line(l => l.Quantity, "KOL_LS")
                         .Line(l => l.RegistryCost, "REESTRUB")
                         .Line(l => l.SerialNumber, "SERNUMB")
                         .Line(l => l.SupplierCost, "PRICEWNDS")
                         .Line(l => l.SupplierCostWithoutNDS, "PRICEWONDS")
                         .Line(l => l.Unit, "ED_IZM")
                         .Line(l => l.VitallyImportant, "GVN");

            return(parcer);
        }
        public override DbfParser GetParser()
        {
            var x = new DbfParser()
                    .DocumentHeader(h => h.ProviderDocumentId, "N_NACL")
                    .DocumentHeader(h => h.DocumentDate, "D_NACL")
                    .Invoice(i => i.BuyerName, "APTEKA")
                    .Invoice(i => i.ShipperInfo, "FILIAL")
                    .Invoice(i => i.Amount, "SUMM")
                    .Line(l => l.Code, "CODE")
                    .Line(l => l.Product, "NAME")
                    .Line(l => l.Producer, "FACTORY")
                    .Line(l => l.Country, "COUNTRY")
                    .Line(l => l.Quantity, "QUANTITY")
                    .Line(l => l.ProducerCostWithoutNDS, "PRICE_NAKE")
                    .Line(l => l.SupplierCost, "PRICE_MAKE")
                    .Line(l => l.Nds, "NDS_PR")
                    .Line(l => l.RegistryCost, "PRICE_REES")
                    .Line(l => l.RegistryDate, "DATE_REES")
                    .Line(l => l.VitallyImportant, "ISLIFE")
                    .Line(l => l.SerialNumber, "SERIES")
                    .Line(l => l.Period, "DATE_VALID")
                    .Line(l => l.Certificates, "SERT")
                    .Line(l => l.NdsAmount, "NDS_SUM")
                    .Line(l => l.Amount, "SUM_SNDS")
                    .Line(l => l.BillOfEntryNumber, "GTD")
                    .Line(l => l.EAN13, "SCANCOD")
                    .Line(l => l.CertificateAuthority, "ORGAN");

            return(x);
        }
        public static RejectHeader Parse(DocumentReceiveLog log, List <RejectDataParser> parsers)
        {
            var filePath = log.GetFileName();

            if (!Path.GetExtension(filePath).Match(".dbf"))
            {
                return(null);
            }
            DataTable table;

            try {
                table = Dbf.Load(filePath);
            } catch (Exception e) {
                Log.Warn($"Не удалось разобрать документ {filePath} номер входящего документа {log.Id}", e);
                return(null);
            }

            var columns = table.Columns.Cast <DataColumn>().Select(x => x.ColumnName).ToArray();

            foreach (var parser in parsers)
            {
                if (columns.Intersect(parser.Lines.Select(x => x.Src), StringComparer.CurrentCultureIgnoreCase).Count() !=
                    parser.Lines.Count)
                {
                    continue;
                }

                var reject = new RejectHeader(log);
                foreach (var dataRow in table.AsEnumerable())
                {
                    var docLine = new RejectLine();
                    foreach (var parserLine in parser.Lines)
                    {
                        var propertyName = parserLine.Dst;
                        if (String.IsNullOrEmpty(propertyName) || String.IsNullOrEmpty(parserLine.Src))
                        {
                            continue;
                        }
                        var property = docLine.GetType().GetProperty(propertyName);
                        var value    = DbfParser.ConvertIfNeeded(dataRow[parserLine.Src], property.PropertyType);
                        property.SetValue(docLine, value);
                    }
                    docLine.Header = reject;
                    reject.Lines.Add(docLine);
                }
                reject.Parser = parser.Name;
                return(reject);
            }
            return(null);
        }
Beispiel #6
0
        public Document Parse(string file, Document document)
        {
            var data = Dbf.Load(file);

            document.ProviderDocumentId = data.Rows[0]["SERIA"].ToString();
            document.DocumentDate       = Convert.ToDateTime(data.Rows[0]["SROK_GOD"]);
            data.Rows.Remove(data.Rows[0]);

            var parcer = new DbfParser()
                         .Line(l => l.Code, "CODE")
                         .Line(l => l.Product, "TOVAR")
                         .Line(l => l.Producer, "PROIZV")
                         .Line(l => l.Country, "STRANA")
                         .Line(l => l.Period, "SROK_GOD")
                         .Line(l => l.Quantity, "KOLVO")
                         .Line(l => l.ProducerCostWithoutNDS, "CENA_PRB")
                         .Line(l => l.SupplierCostWithoutNDS, "CENA_POB")
                         .Line(l => l.Nds, "ST_NDS")
                         .Line(l => l.RegistryCost, "CENA_GRU")
                         .Line(l => l.Certificates, "SER_NOM")
                         .Line(l => l.SerialNumber, "SERIA")
                         .Line(l => l.BillOfEntryNumber, "GTD")
                         .Line(l => l.Amount, "SUM_SNDS")
                         .Line(l => l.NdsAmount, "SUM_NDS")
                         .Line(l => l.CertificatesDate, "SER_DATE")
                         .Line(l => l.EAN13, "PRV_CODE");

            if (data.Columns.Contains("VID"))
            {
                data.Rows.Cast <DataRow>().Each(r => {
                    if (r["VID"].ToString() == "ЖВЛС")
                    {
                        r["VID"] = "True";
                    }
                    else
                    {
                        r["VID"] = "False";
                    }
                });
                parcer = parcer.Line(l => l.VitallyImportant, "VID");
            }

            parcer.ToDocument(document, data);

            return(document);
        }
        public override DbfParser GetParser()
        {
            var x = new DbfParser()
                    .DocumentHeader(h => h.ProviderDocumentId, "N_NACL")
                    .DocumentHeader(h => h.DocumentDate, "D_NACL")
                    .Line(l => l.Code, "CODE")
                    .Line(l => l.Product, "NAME")
                    .Line(l => l.Producer, "FACTORY")
                    .Line(l => l.Country, "COUNTRY")
                    .Line(l => l.Quantity, "QUANTITY")
                    .Line(l => l.SupplierCostWithoutNDS, "PRICE_MAKE")
                    .Line(l => l.SupplierCost, "PRICE_MAKE")
                    .Line(l => l.Amount, "SUM_NAKED")
                    .Line(l => l.SerialNumber, "SERIES")
                    .Line(l => l.Period, "DATE_VALID")
                    .Line(l => l.Certificates, "SERT");

            return(x);
        }
        public override DbfParser GetParser()
        {
            var parcer = new DbfParser()
                         .DocumentHeader(d => d.ProviderDocumentId, "NDOC")
                         .DocumentHeader(d => d.DocumentDate, "DATEDOC")
                         .Invoice(i => i.RecipientId, "PODRCD")
                         .Invoice(i => i.RecipientAddress, "PODADR")
                         .Invoice(i => i.SellerName, "DISTRIB")
                         .Invoice(i => i.Amount, "TSUMPAY")
                         .Invoice(i => i.NDSAmount, "TSUMNDS")
                         .Invoice(i => i.NDSAmount10, "TSUMNDS10")
                         .Invoice(i => i.NDSAmount18, "TSUMNDS20")
                         .Invoice(i => i.AmountWithoutNDS10, "TSUM10")
                         .Invoice(i => i.AmountWithoutNDS18, "TSUM20")
                         .Invoice(i => i.AmountWithoutNDS0, "TSUM0")
                         .Line(l => l.Code, "CODEPST")
                         .Line(l => l.EAN13, "EAN13")
                         .Line(l => l.ProducerCostWithoutNDS, "PRICE1")
                         .Line(l => l.SupplierCost, "PRICE2")
                         .Line(l => l.SupplierCostWithoutNDS, "PRICE2N")
                         .Line(l => l.Quantity, "QNT")
                         .Line(l => l.SerialNumber, "SER")
                         .Line(l => l.Period, "GDATE")
                         .Line(l => l.DateOfManufacture, "DateMade")
                         .Line(l => l.Product, "NAME")
                         .Line(l => l.Country, "CNTR")
                         .Line(l => l.Producer, "FIRM")
                         .Line(l => l.Nds, "NDS")
                         .Line(l => l.VitallyImportant, "GNVLS")
                         .Line(l => l.RegistryCost, "REGPRC")
                         .Line(l => l.RegistryDate, "DATEPRC")
                         .Line(l => l.BillOfEntryNumber, "NUMGTD")
                         .Line(l => l.Certificates, "SERTIF")
                         .Line(l => l.CertificatesDate, "SERTDATE")
                         .Line(l => l.CertificateAuthority, "SERTORG")
                         .Line(l => l.Amount, "SUMPAY")
                         .Line(l => l.NdsAmount, "SUMNDS")
                         .Line(l => l.OrderId, "NUMZ");

            return(parcer);
        }
        public static Document Parse(DocumentReceiveLog log, string file, List <Parser> parsers)
        {
            if (!Path.GetExtension(file).Match(".dbf"))
            {
                return(null);
            }
            DataTable table;

            try {
                table = Dbf.Load(file);
            } catch (Exception e) {
                Log.Warn($"Не удалось разобрать документ {file} номер входящего документа {log.Id}", e);
                return(null);
            }

            var columns = table.Columns.Cast <DataColumn>().Select(x => x.ColumnName).ToArray();

            foreach (var parser in parsers)
            {
                if (columns.Intersect(parser.Lines.Select(x => x.Src), StringComparer.CurrentCultureIgnoreCase).Count() != parser.Lines.Count)
                {
                    continue;
                }

                if (parser.Encoding != EncodingEnum.Default)
                {
                    if (parser.Encoding == EncodingEnum.UTF8)
                    {
                        table = Dbf.Load(file, System.Text.Encoding.UTF8, false);
                    }

                    if (parser.Encoding == EncodingEnum.UTF7)
                    {
                        table = Dbf.Load(file, System.Text.Encoding.UTF7, false);
                    }

                    if (parser.Encoding == EncodingEnum.CP1251)
                    {
                        table = Dbf.Load(file, System.Text.Encoding.GetEncoding(1251), false);
                    }

                    if (parser.Encoding == EncodingEnum.CP866)
                    {
                        table = Dbf.Load(file, System.Text.Encoding.GetEncoding(866), false);
                    }
                }
                var document = new Document(log, parser.Name);
                foreach (var dataRow in table.AsEnumerable())
                {
                    var docLine = document.NewLine();
                    foreach (var parserLine in parser.Lines)
                    {
                        var propertyName = parserLine.Dst;
                        if (String.IsNullOrEmpty(propertyName) || String.IsNullOrEmpty(parserLine.Src))
                        {
                            continue;
                        }
                        object target = docLine;
                        if (propertyName.StartsWith("Header_"))
                        {
                            target       = document;
                            propertyName = propertyName.Replace("Header_", "");
                        }
                        else if (propertyName.StartsWith("Invoice_"))
                        {
                            if (document.Invoice == null)
                            {
                                document.SetInvoice();
                            }
                            target       = document.Invoice;
                            propertyName = propertyName.Replace("Invoice_", "");
                        }
                        var property = target.GetType().GetProperty(propertyName);
                        var value    = DbfParser.ConvertIfNeeded(dataRow[parserLine.Src], property.PropertyType);

                        property.SetValue(target, value);
                    }
                }
                return(document);
            }
            return(null);
        }
Beispiel #10
0
        public override DbfParser GetParser()
        {
            var parcer = new DbfParser()
                         .DocumentHeader(d => d.DocumentDate, "DATEDOC")
                         .DocumentHeader(d => d.ProviderDocumentId, "NDOC")
                         .Invoice(i => i.InvoiceNumber, "BILLNUM")
                         .Invoice(i => i.InvoiceDate, "BILLDT")
                         .Invoice(i => i.AmountWithoutNDS, "SUMPAY")
                         .Invoice(i => i.AmountWithoutNDS10, "SUM10")
                         .Invoice(i => i.AmountWithoutNDS18, "SUM20")
                         .Invoice(i => i.AmountWithoutNDS0, "SUM0")
                         .Invoice(i => i.Amount, "SUMPAY")
                         .Line(l => l.Code, "CODEPST")
                         .Line(l => l.Product, "NAME")
                         .Line(l => l.Producer, "FIRM")
                         .Line(l => l.Country, "CNTR")
                         .Line(l => l.SupplierCostWithoutNDS, "PRICE2N")
                         .Line(l => l.SupplierCost, "PRICE2")
                         .Line(l => l.Quantity, "QNT")
                         .Line(l => l.Nds, "NDS")
                         .Line(l => l.Period, "GDATE")
                         .Line(l => l.Certificates, "SERTIF")
                         .Line(l => l.RegistryCost, "REGPRC")
                         .Line(l => l.VitallyImportant, "GNVLS")
                         .Line(l => l.SerialNumber, "SER")
                         .Line(l => l.SupplierPriceMarkup, "PROCNDB")
                         .Line(l => l.EAN13, "EAN13")
                         .Line(l => l.CertificateAuthority, "SERTORG")
                         .Line(l => l.CertificatesDate, "SERTGIVE", "SERTDATE")
                         .Line(l => l.OrderId, "NUMZ")
                         .Line(l => l.CountryCode, "cntrcode")
                         .Line(l => l.UnitCode, "unitcode")
                         .Line(l => l.BillOfEntryNumber, "NUMGTD");

            if (Data.Columns.Contains("TSUMNDS"))
            {
                parcer = parcer.Invoice(i => i.NDSAmount, "TSUMNDS")
                         .Invoice(i => i.NDSAmount10, "TSUMNDS10")
                         .Invoice(i => i.NDSAmount18, "TSUMNDS20");
            }
            else
            {
                parcer = parcer.Invoice(i => i.NDSAmount10, "SUMNDS10")
                         .Invoice(i => i.NDSAmount18, "SUMNDS20");
            }

            if (!Data.Columns.Contains("ADRPOL"))
            {
                if (!Data.Columns.Contains("PRICE1N") && !Data.Columns.Contains("PRICEMAN"))
                {
                    parcer = parcer.Line(l => l.ProducerCostWithoutNDS, "MAKERPRICE", "PRICE1");
                }
                else if (Data.Columns.Contains("PRICE1N"))
                {
                    parcer = parcer.Line(l => l.ProducerCost, "PRICE1")
                             .Line(l => l.ProducerCostWithoutNDS, "PRICE1N");
                }
                else
                {
                    parcer = parcer.Line(l => l.ProducerCost, "PRICE1")
                             .Line(l => l.ProducerCostWithoutNDS, "PRICEMAN");
                }
                if (Data.Columns.Contains("SUMMANDS"))
                {
                    parcer
                    .Line(l => l.NdsAmount, "SUMMANDS");
                }
                else
                {
                    parcer
                    .Line(l => l.NdsAmount, "SUMSNDS")
                    .Line(l => l.Amount, "SUMS0");
                }
            }
            else
            {
                parcer = parcer.Line(l => l.ProducerCost, "PRICE1N")
                         .Line(l => l.Amount, "SUMSNDS")
                         .Line(l => l.ProducerCostWithoutNDS, "PRICE1");
            }

            if (!Data.Columns.Contains("ADRPOL"))
            {
                if (Data.Columns.Contains("PRICEMAN"))
                {
                    parcer = parcer.Invoice(i => i.RecipientId, "PODRCD");
                }
                else
                {
                    parcer = parcer.Invoice(i => i.RecipientAddress, "PODRCD");
                }
            }
            else
            {
                parcer = parcer.Invoice(i => i.RecipientAddress, "ADRPOL");
            }

            return(parcer);
        }