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