public InvoiceModel EdiDecode(string strEdi) { InvoiceModel invoice = new InvoiceModel(); string[] segments = Edi.ParseToSegmets(strEdi); int nSegments = segments.Length; // ustawiam czy odczytywane dane należą do dostwcy czy nabywcy, lub czy są to dane dostwy // 0 - dostawca, 1 - nabywca, 2 - dane do dostwy int who = 0; string[] arguments; string[] parameters; InvoiceAddressModel address; int productIndex = -1; InvoiceProductModel product; List <InvoiceProductModel> products = new List <InvoiceProductModel>(); bool details = false; for (int i = 0; i < nSegments; i++) { if (i == 23) { } segments[i] = segments[i].Trim(); if (String.IsNullOrEmpty(segments[i])) { continue; } arguments = Edi.ParseToArguments(segments[i]); switch (arguments[0]) { case "UNH": parameters = Edi.ParseToParameters(arguments[2]); if (parameters[0] != "INVOIC") { return(null); } break; case "BGM": if (arguments[1] == "380") { invoice.Number = arguments[2]; invoice.Type = Int16.Parse(arguments[3]); } break; case "DTM": DateTime date; parameters = Edi.ParseToParameters(arguments[1]); if (parameters[2] == "102") { date = DateTime.ParseExact(parameters[1], "yyyyMMdd", null); } else { date = DateTime.Parse(parameters[1]); } switch (parameters[0]) { case "137": invoice.SaleDate = date; break; case "13": invoice.PaymentDate = date; break; } break; case "NAD": address = new InvoiceAddressModel(); parameters = Edi.ParseToParameters(arguments[5]); address.Street = parameters[0]; address.City = arguments[6]; address.PostCode = arguments[8]; address.CountryCode = arguments[9]; switch (arguments[1]) { case "SU": //dane dostawcy who = 0; parameters = Edi.ParseToParameters(arguments[4]); invoice.ProviderName = parameters[0]; invoice.ProviderAddress = address; break; case "BY": //dane nabywcy who = 1; parameters = Edi.ParseToParameters(arguments[4]); invoice.BuyerName = parameters[0]; invoice.BuyerAddress = address; break; case "DP": //dane do dostawy who = 2; parameters = Edi.ParseToParameters(arguments[4]); invoice.DeliveryName = parameters[0]; invoice.DeliveryAddress = address; break; } break; case "RFF": parameters = Edi.ParseToParameters(arguments[1]); if (parameters[0] == "VA") { switch (who) { case 0: //nip dostawcy invoice.ProviderNip = parameters[1]; break; case 1: //nip nabywcy invoice.BuyerNip = parameters[1]; break; } } break; case "PAT": details = true; break; case "LIN": productIndex++; product = new InvoiceProductModel(); product.ItemNumber = Int16.Parse(arguments[1]); parameters = Edi.ParseToParameters(arguments[3]); product.Number = parameters[0]; products.Insert(productIndex, product); break; case "IMD": product = products[productIndex]; product.Name = arguments[2]; parameters = Edi.ParseToParameters(arguments[3]); product.Type = parameters[0]; break; case "QTY": product = products[productIndex]; parameters = Edi.ParseToParameters(arguments[1]); product.QuantityType = Int16.Parse(parameters[0]); product.Quantity = int.Parse(parameters[1]); break; case "MOA": parameters = Edi.ParseToParameters(arguments[1]); if (details) { switch (parameters[0]) { case "66": case "35E": product = products[productIndex]; product.SumAmountType = parameters[0]; product.SumAmountNet = float.Parse(parameters[1]); break; } } else { float amount = float.Parse(parameters[1]); switch (parameters[0]) { case "77": invoice.AmountGross = amount; break; case "79": invoice.AmountNet = amount; break; case "124": invoice.AmountTax = amount; break; } } break; case "PRI": parameters = Edi.ParseToParameters(arguments[1]); if (parameters[0] == "AAA") { product = products[productIndex]; product.UnitPriceNet = float.Parse(parameters[1]); } break; case "TAX": if (arguments[1] == "7" && arguments[2] == "VAT") { parameters = Edi.ParseToParameters(arguments[5]); if (details) { product = products[productIndex]; product.Tax = Int16.Parse(parameters[3]); } else { invoice.Tax = Int16.Parse(parameters[3]); } } break; case "UNS": if (arguments[1] == "S") { invoice.Products = products; details = false; } break; case "CNT": parameters = Edi.ParseToParameters(arguments[1]); invoice.ProductQuntity = int.Parse(parameters[0]); break; } } return(invoice); }