Double entry & first account mapping
This commit is contained in:
@@ -28,36 +28,77 @@ class MyCSVImporter(importer.ImporterProtocol):
|
||||
entries = []
|
||||
|
||||
with open(file.contents, encoding='utf-8')
|
||||
as f:
|
||||
reader = csv.reader(f, delimiter=',')
|
||||
next(reader, None)
|
||||
as f:
|
||||
reader = csv.reader(f, delimiter=';')
|
||||
for skip in range(0,8):
|
||||
next(reader, None)
|
||||
|
||||
for index, row in enumerate(reader):
|
||||
if not row or not row[0]:
|
||||
continue
|
||||
|
||||
# De index begint bij 0, dus de 12e kolom is index 11.
|
||||
# Boekingsdatum = index 0
|
||||
# Ontvanger = index 3
|
||||
# Omschrijving = index 4
|
||||
# Bedrag = index 11
|
||||
# Valuta = index 17
|
||||
datum_str = row[0]
|
||||
omschrijving = row[1]
|
||||
bedrag_str = row[2]
|
||||
ontvanter = row[3]
|
||||
omschrijving_str = row[4]
|
||||
bedrag_str = row[11]
|
||||
valuta = row [17]
|
||||
|
||||
dag, maand, jaar = datum_str.split('.')
|
||||
transactie_datum = data.D(int(jaar)), int(maand), int(dag))
|
||||
bedrag = D(bedrag_str)
|
||||
|
||||
payee = ontvanter
|
||||
narration = omschrijving_str
|
||||
bedrag = D(bedrag_str).replace(',','.')
|
||||
|
||||
meta = data.new_metadata(file.name, index)
|
||||
|
||||
# Bepaal of het een inkomst of uitgave is op basis van het voorteken van het bedrag.
|
||||
if bedrag < D(0):
|
||||
# Uitgave: bedrag is negatief.
|
||||
# Geld gaat van de bankrekening naar een uitgavenrekening.
|
||||
tegenrekening = self._map_payee_to_account(payee + " " + omschrijving_str)
|
||||
postings = [
|
||||
data.Posting(self.file_account(file), bedrag, data.get_currency_meta(currency), None, None, None),
|
||||
data.Posting(tegenrekening, -bedrag, data.get_currency_meta(currency), None, None, None),
|
||||
]
|
||||
else:
|
||||
# Inkomsten: bedrag is positief.
|
||||
# Geld gaat van een inkomstenrekening naar de bankrekening.
|
||||
tegenrekening = self._map_payee_to_account(payee + " " + omschrijving_str)
|
||||
postings = [
|
||||
data.Posting(tegenrekening, -bedrag, data.get_currency_meta(currency), None, None, None),
|
||||
data.Posting(self.file_account(file), bedrag, data.get_currency_meta(currency), None, None, None),
|
||||
]
|
||||
|
||||
transaction = data.Transaction(
|
||||
meta=meta,
|
||||
date=transactie_datum,
|
||||
flag='*',
|
||||
payee=omschrijving,
|
||||
narration="",
|
||||
payee=payee,
|
||||
narration=narration,
|
||||
tags=data.frozenset(),
|
||||
links=data.frozenset(),
|
||||
postings=[
|
||||
data.Posting(self.file_account(file)), - bedrag, data.get_currency_meta('EUR'), None, None, None),
|
||||
data.Posting("Expenses:Uncategorized", bedrag, data.get_currency_meta('EUR'), None, None, None),
|
||||
]
|
||||
postings=postings
|
||||
)
|
||||
|
||||
entries.append(transaction)
|
||||
return entries
|
||||
|
||||
return entries
|
||||
|
||||
def _map_payee_to_account(self, payee):
|
||||
mapping = {
|
||||
"Lohn": "Income:Salary",
|
||||
"Miete": "Expenses:Rent",
|
||||
"Sachsen":"Expenses:Electricity",
|
||||
}
|
||||
for sleutelwoord, rekening in mapping.items():
|
||||
if sleutelwoord.lower() in payee.lower():
|
||||
return rekening
|
||||
|
||||
return "Expenses:Uncategorized"
|
||||
Reference in New Issue
Block a user