Add importer for Mollie invoices
This commit is contained in:
parent
36115b452a
commit
3351e2d0d4
8 changed files with 154 additions and 34 deletions
120
import/rabobank.py
Normal file
120
import/rabobank.py
Normal file
|
@ -0,0 +1,120 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from os.path import basename
|
||||
from beangulp import mimetypes
|
||||
from beangulp.importers import csvbase
|
||||
from deelnemers import deelnemers
|
||||
|
||||
|
||||
participants = deelnemers()
|
||||
|
||||
|
||||
class RaboAmount(csvbase.Amount):
|
||||
def __init__(self, col):
|
||||
super().__init__(col, subs={"\\+": "", ",": "."})
|
||||
|
||||
|
||||
class Importer(csvbase.Importer):
|
||||
encoding = "iso-8859-15"
|
||||
|
||||
date = csvbase.Date("Datum", "%Y-%m-%d")
|
||||
payee = csvbase.Columns("Naam tegenpartij", "Tegenrekening IBAN/BBAN", sep="; ")
|
||||
narration = csvbase.Columns(
|
||||
"Omschrijving-1", "Omschrijving-2", "Omschrijving-3", sep=" "
|
||||
)
|
||||
amount = RaboAmount("Bedrag")
|
||||
balance = RaboAmount("Saldo na trn")
|
||||
|
||||
def identify(self, filepath):
|
||||
mimetype, encoding = mimetypes.guess_type(filepath)
|
||||
if mimetype != "text/csv":
|
||||
return False
|
||||
with open(filepath, "rb") as fd:
|
||||
head = fd.read(1024)
|
||||
return head.startswith(
|
||||
b'"IBAN/BBAN","Munt","BIC","Volgnr","Datum","Rentedatum","Bedrag","Saldo na trn","Tegenrekening IBAN/BBAN"'
|
||||
)
|
||||
|
||||
def filename(self, filepath):
|
||||
return "rabobank." + basename(filepath)
|
||||
|
||||
|
||||
def guess_contra(entry):
|
||||
posting = entry.postings[0]
|
||||
|
||||
def have_keyword(*keywords):
|
||||
l_description = entry.narration.lower()
|
||||
return any(kw in l_description for kw in keywords)
|
||||
|
||||
if entry.payee == "Kosten" or (
|
||||
entry.payee == "Rabobank; NL89RABO0111741386"
|
||||
and entry.narration.startswith("Kosten")
|
||||
):
|
||||
return "Uitgaven:Bankkosten"
|
||||
|
||||
if entry.payee == "Stichting Bitlair; NL09RABO3159222187":
|
||||
return "Activa:Spaarrekening"
|
||||
|
||||
if (
|
||||
entry.payee == "Symbiose Beheer B.V.; NL84ABNA0630587221"
|
||||
and posting.units.number < -3400
|
||||
):
|
||||
return "Uitgaven:Huur"
|
||||
|
||||
if (
|
||||
entry.payee == "Stichting EventInfra; NL59RABO0312574800"
|
||||
and entry.narration == "Verhuur opslagruimte "
|
||||
):
|
||||
return "Activa:Debiteuren:EventInfra"
|
||||
|
||||
if (
|
||||
entry.payee == "JONGE ONDERZOEKERS AMERS; NL30ABNA0119774844"
|
||||
and 590 < posting.units.number < 700
|
||||
):
|
||||
return "Activa:Debiteuren:DJO"
|
||||
|
||||
if (
|
||||
entry.payee == "Furthermore B.V.; NL06REVO8135470894"
|
||||
and 600 < posting.units.number < 800
|
||||
):
|
||||
return "Activa:Debiteuren:UnicornDept"
|
||||
|
||||
if entry.payee == "Gebr. Schurman GmbH; DE68441600141300702500":
|
||||
return "Uitgaven:Bar:Mate"
|
||||
|
||||
if entry.payee == "Sligro ZB 5037":
|
||||
return "Uitgaven:Bar:Snacks"
|
||||
|
||||
if entry.payee == "STATIEGELD NEDERLAND; NL59ABNA0100073913":
|
||||
return "Uitgaven:Bar"
|
||||
|
||||
if entry.narration.startswith("Decla") and posting.units.number < 0:
|
||||
return "Passiva:Declaraties"
|
||||
|
||||
if have_keyword(
|
||||
"deposit",
|
||||
"revbank",
|
||||
" bar ",
|
||||
"kassa vulling",
|
||||
"desposit",
|
||||
"(RB QR)",
|
||||
"rev-bank",
|
||||
" bank",
|
||||
"elena transfer",
|
||||
"barsaldo",
|
||||
):
|
||||
return "Passiva:RevBank"
|
||||
|
||||
if entry.payee == "Stichting Mollie Payments; NL70CITI2032329018":
|
||||
return "Passiva:RevBank"
|
||||
|
||||
for p in participants:
|
||||
if (
|
||||
hasattr(p, "maandbedrag")
|
||||
and hasattr(p, "ibans")
|
||||
and p.maandbedrag == posting.units.number
|
||||
and any(iban in entry.payee for iban in p.ibans)
|
||||
):
|
||||
return f"Activa:Debiteuren:Deelnemers:{p.nickname.title().replace('_', '')}"
|
||||
|
||||
return None
|
Loading…
Add table
Add a link
Reference in a new issue