89 lines
4.7 KiB
C#
89 lines
4.7 KiB
C#
using System.Globalization;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Xml.Serialization;
|
|
using TofasIdocToEdiInvoice.Edifact;
|
|
|
|
namespace TofasIdocToEdiInvoice
|
|
{
|
|
internal class EdiInvoiceGenerator
|
|
{
|
|
public void Process()
|
|
{
|
|
string filename =
|
|
"C:\\Users\\pkus\\Desktop\\Invoices\\O_500_0000000002045042.txt" /*Console.ReadLine()?.Trim('"')*/;
|
|
string outFilename =
|
|
Path.Combine(AppContext.BaseDirectory, $"{DateTime.Now:yyyyMMddHHmmssffff}_INVOICE.edi");
|
|
|
|
string xml = File.ReadAllText(filename, Encoding.UTF8);
|
|
XmlSerializer serializer = new XmlSerializer(typeof(INVOIC01));
|
|
using StringReader reader = new StringReader(xml);
|
|
INVOIC01 invoice = (INVOIC01)serializer.Deserialize(reader)!;
|
|
|
|
EdifactGenerator edifact = new EdifactGenerator();
|
|
edifact.CreateHeader();
|
|
|
|
edifact.AddLine("UNB", new Group("UNOC", 3), new Group(invoice.IDOC.EDIDC40.SNDPRN),
|
|
new Group(invoice.IDOC.EDIDC40.RCVPFC),
|
|
new Group(DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmm")),
|
|
new Group(invoice.IDOC.EDIDC40.DOCNUM), null, new Group("INVOIC"));
|
|
edifact.AddLine("UNH", new Group("1"), new Group("INVOIC", "D", "96A", "UN"));
|
|
edifact.AddLine("BGM", new Group("380", invoice.IDOC.EDIDC40.DOCNUM, 9));
|
|
edifact.AddLine("DTM", new Group("137", invoice.IDOC.EDIDC40.CREDAT, 102));
|
|
edifact.AddLine("NAD", new Group("BY"), new Group(invoice.IDOC.EDIDC40.RCVPFC, null, 9));
|
|
edifact.AddLine("NAD", new Group("SE"), new Group(invoice.IDOC.E1EDKA1.First(x => x.PARVW == "RS").PARTN),
|
|
null, null, null, null, null, null, new Group("KR"));
|
|
edifact.AddLine("CUX", new Group(2, invoice.IDOC.E1EDK01.CURCY, 4));
|
|
edifact.AddLine("TDT", new Group("12"), new Group(invoice.IDOC.E1EDK29.FirstOrDefault()?.EXNUM),
|
|
new Group("T") /*ToConfirm*/);
|
|
edifact.AddLine("TOD", new Group(6), null, new Group("CIF"));
|
|
edifact.AddLine("PAC", new Group(invoice.IDOC.E1EDP01.Count), null, new Group(invoice.IDOC.E1EDP01.FirstOrDefault()?.MENEE));
|
|
edifact.AddLine("MEA", new Group("WT"), new Group("G"),
|
|
new Group(invoice.IDOC.E1EDP01.FirstOrDefault()?.GEWEI),
|
|
new Group(invoice.IDOC.E1EDP01.Sum(x => decimal.Parse(x.BRGEW, new CultureInfo("en-us")))));
|
|
edifact.AddLine("MEA", new Group("WT"), new Group("N"),
|
|
new Group(invoice.IDOC.E1EDP01.FirstOrDefault()?.GEWEI),
|
|
new Group(invoice.IDOC.E1EDP01.Sum(x => decimal.Parse(x.NTGEW, new CultureInfo("en-us")))));
|
|
|
|
int itemCounter = 0;
|
|
decimal totalPrice = 0M;
|
|
|
|
foreach (E1EDP01 item in invoice.IDOC.E1EDP01)
|
|
{
|
|
totalPrice += decimal.Parse(item.E1EDP26.First(x => x.QUALF == "001").BETRG, new CultureInfo("en-us"));
|
|
|
|
edifact.AddLine("LIN", new Group(++itemCounter), null, new Group(item.POSEX, "BP"));
|
|
edifact.AddLine("PIA", new Group(1), new Group(item.POSEX, "SA", null, 92));
|
|
edifact.AddLine("AMD", new Group("F"), new Group("ANM"), new Group(null, null, 9, item.POSEX));
|
|
edifact.AddLine("MEA", new Group("AAI"), new Group("G"), new Group(item.GEWEI),
|
|
new Group(invoice.IDOC.E1EDP01.Sum(x => decimal.Parse(x.BRGEW, CultureInfo.InvariantCulture))));
|
|
edifact.AddLine("MEA", new Group("AAI"), new Group("N"), new Group(item.GEWEI),
|
|
new Group(invoice.IDOC.E1EDP01.Sum(x => decimal.Parse(x.NTGEW, new CultureInfo("en-us")))));
|
|
edifact.AddLine("QTY", new Group("47", item.MENGE, item.MENEE));
|
|
edifact.AddLine("FTX", new Group("ZZZ"), null, null, new Group(item.POSEX));
|
|
edifact.AddLine("MOA",
|
|
new Group(203,
|
|
double.Parse(item.E1EDP26.First(x => x.QUALF == "001").BETRG, new CultureInfo("en-us"))));
|
|
edifact.AddLine("PRI",
|
|
new Group("AAA",
|
|
double.Parse(item.E1EDP26.First(x => x.QUALF == "002").BETRG, new CultureInfo("en-us"))));
|
|
edifact.AddLine("UNS", new Group("S"));
|
|
}
|
|
|
|
var pr = ConvertDecimal(totalPrice);
|
|
|
|
edifact.AddLine("MOA", new Group("77", pr));
|
|
edifact.CreateFooter();
|
|
|
|
edifact.Parse(outFilename);
|
|
}
|
|
|
|
private string ConvertDecimal(decimal value)
|
|
{
|
|
string replace = value.ToString(CultureInfo.InvariantCulture).Replace(",", ".");
|
|
|
|
return replace;
|
|
}
|
|
}
|
|
}
|