Automatisch importeren van e-facturen in de boekhouding

0000003289     -      11-04-2025

Het importeren van facturen en creditnota's afkomstig van Peppol kan gebeuren via de interface van Mercator. Het is echter ook mogelijk om dit proces volledig te automatiseren. De trigger voor dit automatische importproces kan een taak in consolemodus zijn. In deze code moet gebruikgemaakt worden van de tools die beschikbaar zijn via de PeppolBoxHelper.

De methode ImportIntoAccounting van MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper.PeppolMessage wordt hiervoor gebruikt. Deze verwacht een parameter van het type ImportFromEinvoiceDescriptor, die volgende eigenschappen bevat:

  • bool Silent : op true zetten voor een import zonder gebruikersinterface.
  • string Journal : het boekhoudjournaal van bestemming. Verplicht indien Silent op true staat.
  • string IdGen : de algemene rekening die moet worden gebruikt. Mag leeg zijn indien de leveranciersfiche een standaard algemene rekening bevat.

De methode ImportIntoAccounting retourneert een BookingEngine. Deze BookingEngine is nog niet opgeslagen, waardoor het makkelijk is om nog wijzigingen aan te brengen alvorens de methode Save aan te roepen. Het PDF-bestand dat in de XML zit, wordt automatisch toegevoegd aan het boekhoudkundig document door Mercator (in de SQL-bestanden). Ook de XML-inhoud wordt toegevoegd als XML-bestand. Zo kan het bericht uit de PeppolBox veilig verwijderd worden.

De code ziet er als volgt uit:  

Zoom
public void ImportEinvoiceIntoAccounting()
{
    using (MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper peppolBoxHelper = new MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper())
    {
        if (peppolBoxHelper.DataTable == null)
        {
            MercatorUi.Globals.MercatorTasksToMain.Log("Fout bij het initialiseren van de PeppolBoxHelper: " + Api.LastError, isError: true);
            return;
        }

        MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper.PeppolMessage message = peppolBoxHelper.Messages.FirstOrDefault(m => m.IsInvoiceOrCreditNote); // hier logica voorzien om het te importeren bericht te selecteren
        if (message == null)
        {
            MercatorUi.Globals.MercatorTasksToMain.Log("Bericht niet gevonden", isError: true);
            return;
        }

        using (MercatorUi.Engine.Cpta.BookingEngine bookingEngine = message.ImportIntoAccounting(new MercatorUi.Forms.Accounting.AccountingClasses.ImportFromEinvoiceDescriptor { Silent = true, Journal = "ACH" }, out string error))
        {
            if (error != null)
            {
                MercatorUi.Globals.MercatorTasksToMain.Log(error, isError: true);
                return;
            }
            bookingEngine.PeppolBoxId = message.Id;


            // hier kunnen in het boekhoudkundig document extra gegevens uit de XML worden toegevoegd, zoals naam en e-mailadres van de contactpersoon
            MercatorPeppol.ReceivedDoc.ParseContentRet parsedContent = message.ReceivedDoc.ParseContent(MercatorUi.Globals.Langue);
            bookingEngine.PiedsCRecord.NOTE1 = parsedContent.XmlSelectNodes("cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:Name").FirstOrDefault()?.InnerText + " "
                + parsedContent.XmlSelectNodes("cac:AccountingSupplierParty/cac:Party/cac:Contact/cbc:ElectronicMail").FirstOrDefault()?.InnerText;

            if (!bookingEngine.Save())
            {
                MercatorUi.Globals.MercatorTasksToMain.Log("Fout bij het opslaan van het boekhoudkundig document: " + bookingEngine.LastError, isError: true);
                return;
            }

            if (!message.RemoveFromListAndDb()) // bericht uit de PeppolBox verwijderen
            {
                MercatorUi.Globals.MercatorTasksToMain.Log("Fout bij het verwijderen van het bericht: " + Api.LastError, isError: true);
                return;
            }

            MercatorUi.Globals.MercatorTasksToMain.Log(string.Format("Import voltooid {0} {1} succesvol", bookingEngine.Journal, bookingEngine.Piece));
        }
    }
}

Bij een stille import is de context van de BookingEngine ContextEnum.ImportEinvoiceSilent.



Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)