Importing Receipts into Sage Using HuLib
Here is another code dump, this time for importing Receipts into AccPac.
public void ImportReceipts(IEnumerable<ReceiptLine> receipts, string bankCode, DateTime receiptDate, string batchDescription)
{
using (HuView ARBTA = Connection.GetView("AR0041"))
using (HuView ARTCR = Connection.GetView("AR0042"))
using (HuView ARTCP = Connection.GetView("AR0044"))
using (HuView ARTCU = Connection.GetView("AR0045"))
using (HuView ARTCN = Connection.GetView("AR0043"))
using (HuView ARPOOP = Connection.GetView("AR0061"))
using (HuView ARTCRO = Connection.GetView("AR0406"))
using (HuView ARTCC = Connection.GetView("AR0170"))
{
ARBTA.Compose(ARTCR);
ARTCR.Compose(ARBTA, ARTCN, ARTCP, ARTCRO, ARTCC);
ARTCP.Compose(ARTCR, ARTCU, ARPOOP);
ARTCU.Compose(ARTCP);
ARTCN.Compose(ARTCR);
ARPOOP.Compose(ARBTA, ARTCR, ARTCN, ARTCP, ARTCU);
ARTCRO.Compose(ARTCR);
ARTCC.Compose(ARTCR);
using (HuView ARPYPT = Connection.GetView("AR0049"))
{
ARBTA.RecordClear();
ARBTA["CODEPYMTYP"] = "CA"; // Batch Type
ARTCR["CODEPYMTYP"] = "CA"; // Batch Type
ARTCN["CODEPAYM"] = "CA"; // Batch Type
ARTCP["CODEPAYM"] = "CA"; // Batch Type
ARTCU["CODEPAYM"] = "CA"; // Batch Type
ARPOOP["PAYMTYPE"] = "CA"; // Batch Type
ARPOOP.Cancel();
ARBTA["CODEPYMTYP"] = "CA"; // Batch Type
ARBTA["CNTBTCH"] = "0"; // Batch Number
ARBTA.RecordCreate(1);
ARBTA["BATCHDESC"] = batchDescription;
ARBTA["IDBANK"] = bankCode;
ARBTA["PROCESSCMD"] = "2"; // Process Command
ARBTA.Process();
ARBTA.Update();
foreach (IGrouping<string, ReceiptLine> receiptLine in receipts.GroupBy(line => line.FleetID))
{
ARTCR.RecordCreate(2);
ARTCR["IDCUST"] = receiptLine.Key; // Customer Number
ARTCP.Cancel();
ARTCR["PROCESSCMD"] = "0"; // Process Command Code
ARTCR.Process();
ARTCR["DATERMIT"] = receiptDate;
ARTCP.RecordClear();
foreach (ReceiptLine line in receiptLine)
{
ARTCP.RecordCreate(0);
ARTCP["IDINVC"] = line.Invoice + "-" + line.Store.PadLeft(4, '0'); // Document Number
ARTCP["AMTPAYM"] = line.EntityCredit * -1;
ARTCP["AMTERNDISC"] = line.Discount + line.ProcessingFee;
ARTCP.Insert();
}
ARTCP["CNTLINE"] = "-1"; // Line Number
ARTCP.Read();
decimal unapplied = (decimal)ARTCR["REMUNAPL"];
ARTCR["AMTRMIT"] = unapplied * -1; // Bank Receipt Amount
ARTCP["CNTLINE"] = "-1"; // Line Number
ARTCP["CNTLINE"] = "-1"; // Line Number
ARTCP.Read();
ARTCR.Insert();
}
}
}
}
Explanation
ARBTA is the receipt batch. We are creating one of these.
ARTCR is the Receipt view. We are creating one per customer; multiple lines will be in a single invoice if they share the same customer.
ARTCP is the Receipt Detail view. There is one per line here.
After the line items are added, we set AMTRMIT to the unapplied amount multiplied by negative one. This sets the receipt amount to match what we have set in the detail lines.