Houd rekening met commissies op creditcardbetalingen bij het herkennen van gecodificeerde rekeningafschriften (CODA)

0000002371     -      01-03-2021

In dit voorbeeld wordt de AfterCodaRecognition-gebeurtenis gebruikt om de lijnen die overeenkomen met credit bewegingen na betalingen die met een creditcard zijn ontvangen, in 2 verschillende lijnen te scheiden. De moeilijkheid is dat het nettobedrag standaard op het bankafschrift wordt vermeld. Het brutobedrag en de af te trekken commissie zijn opgenomen in eenvoudige commentaar lijnen, dus a priori moeilijk te gebruiken. We hebben deze customizer als voorbeeld gemaakt op basis van uittreksels met betalingen met een creditcard beheerd door Europabank. Deze programmering moet gemakkelijk kunnen worden aangepast aan andere aanbieders van creditcardbetalingen. Aangezien deze programmering is gebaseerd op een "parsing" van een eenvoudig commentaar in tekstvorm, is het natuurlijk onderhevig aan toekomstige wijzigingen in dit bericht.

In ons voorbeeld werd vastgesteld dat de betrokken records gemakkelijk konden worden herkend door deze test: naam = 'EUROPABANK N.V.'

Bovendien heeft voor deze lijnen het veld commentair2 de volgende vorm :

BRUT: 371,10 - COMM 4,10 REF.OP.03935.

De lijnen met de commissie worden automatisch gekoppeld aan algemene rekening 650001.

Op basis van deze vaststellingen en hypotheses kan de customizer als volgt worden geschreven :

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {

        public void Main(MercatorUi.ICustomizers.ExecAction Action)
        {
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
                MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognition += new MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognitionEventHandler(AccountingBankCodaForm_AfterCodaRecognition);
            else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
                MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognition -= new MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognitionEventHandler(AccountingBankCodaForm_AfterCodaRecognition);
        }

        void AccountingBankCodaForm_AfterCodaRecognition(MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognitionEventArgs e)
        {
            //MercatorUi._Divers.ViewData(e.DtMouvements.Copy(), true);
            foreach (DataRow dr in e.DtMouvements.Select("nom='EUROPABANK N.V.'"))
            {
                string sbrut = Api.StrExtract(dr["communic2"].ToString(), "BRUT: ", " -").Replace(".", "").Replace(",", ".");
                string scomm = Api.StrExtract(dr["communic2"].ToString(), "COMM ", " REF").Replace(".", "").Replace("," ,".");
                double brut;
                double comm;
                if ((sbrut != "") && (scomm != "") && double.TryParse(sbrut, out brut) && double.TryParse(scomm, out comm))
                {
                    DataRow dr_new = e.DtMouvements.NewRow();
                    Api.DataRowMerge(dr_new, dr); // kopieer inhoud van dr naar dr_new
                    e.DtMouvements.Rows.InsertAt(dr_new, Api.DataRowIndexInDataTable(dr));
                    dr["montant"] = -comm;
                    MercatorUi.Forms.Accounting.AccountingBankCodaForm.CodaInsertAccount(MercatorUi.Sig._SigEnum.GEN, "650001", dr); // 650001 = compte de commissions carte de crédit - à adapter selon plan comptable
                    dr_new["montant"] = brut;
                }
            }
        }
    }
}

 

Trefwoorden : Visa; Bancontact.