Snippet:
public string Import(IEnumerable<InvoiceLine> lines) { // TODO: To increase efficiency, comment out any unused DB links. using (HuAPConnection Connection = new HuAPConnection()) using (HuView APIBC = Connection.GetView("AP0020")) using (HuView APIBH = Connection.GetView("AP0021")) using (HuView APIBD = Connection.GetView("AP0022")) using (HuView APIBS = Connection.GetView("AP0023")) using (HuView APIBHO = Connection.GetView("AP0402")) using (HuView APIBDO = Connection.GetView("AP0401")) { APIBC.Compose(APIBH); APIBH.Compose(APIBC, APIBD, APIBS, APIBHO); APIBD.Compose(APIBH, APIBC, APIBDO); APIBS.Compose(APIBH); APIBHO.Compose(APIBH); APIBDO.Compose(APIBD); APIBC.Browse("((BTCHSTTS = 1) OR (BTCHSTTS = 7))"); using (HuView APIVPT = Connection.GetView("AP0039")) { APIBC.RecordCreate(1); APIBC["PROCESSCMD"] = "1"; // Process Command Code APIBC.Process(); APIBC.Read(); APIBC["BTCHDESC"] = "Generated invoice batch"; APIBC.Update(); // Group invoices by vendor num and doc num foreach (IGrouping<string, InvoiceLine> invoice in lines.GroupBy(line => line.VendorNumber + " - " + line.DocuementNumber)) { APIBH.RecordCreate(2); APIBD.Cancel(); APIBH["IDVEND"] = invoice.First().VendorNumber; // Vendor Number APIBH["PROCESSCMD"] = "7"; // Process Command Code APIBH.Process(); APIBH["PROCESSCMD"] = "4"; // Process Command Code APIBH.Process(); APIBH["IDINVC"] = invoice.First().DocuementNumber; // Document Number APIBH["DATEINVC"] = invoice.First().DocumentDate; APIBH["DATEBUS"] = invoice.First().PostingDate; // Clear default detail lines - we only want lines based on import file while (APIBD.Fetch()) { APIBD.Delete(); } foreach (InvoiceLine invoiceLine in invoice) { APIBD.RecordClear(); APIBD.RecordCreate(0); APIBD["PROCESSCMD"] = "0"; // Process Command Code APIBD.Process(); APIBD["IDGLACCT"] = invoiceLine.Account; // G/L Account APIBD["AMTDIST"] = invoiceLine.Amount; // Distributed Amount APIBD.Insert(); } APIBH["AMTGROSTOT"] = -(decimal)APIBH["AMTUNDISTR"]; // Document Total Including Tax APIBH.Insert(); } } return APIBC["CNTBTCH"].ToString(); } }
Explanation:
APIBC – AP Invoice batches
APIBH – AP Invoice header
APIBD – AP Invoice detail line