Compare commits
2 Commits
8a5330d08c
...
b24f25b939
| Author | SHA1 | Date | |
|---|---|---|---|
| b24f25b939 | |||
| d453213466 |
@@ -24,25 +24,81 @@ class MyCSVImporter(importer.ImporterProtocol):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def extract(self, file, existing_entries=None):
|
def extract(self, file, existing_entries=None):
|
||||||
|
"""Extracts entries from a files."""
|
||||||
entries = []
|
entries = []
|
||||||
|
|
||||||
print(f"Start extracting from: {file.name}")
|
with open(file.contents, encoding='utf-8')
|
||||||
print(f"Content will be processed from: {file.contents}")
|
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
|
||||||
|
|
||||||
meta = data.new_metadata(file.name, 0)
|
# De index begint bij 0, dus de 12e kolom is index 11.
|
||||||
transaction = data.Transaction(
|
# Boekingsdatum = index 0
|
||||||
meta=meta,
|
# Ontvanger = index 3
|
||||||
date=data.D(2025, 7, 29),
|
# Omschrijving = index 4
|
||||||
flag='*',
|
# Bedrag = index 11
|
||||||
payee="Dummy Payee",
|
# Valuta = index 17
|
||||||
narration="Dummy narration - REPLACE this",
|
datum_str = row[0]
|
||||||
tags=data.frozenset(['test']),
|
ontvanter = row[3]
|
||||||
links=data.frozenset(),
|
omschrijving_str = row[4]
|
||||||
postings=[
|
bedrag_str = row[11]
|
||||||
data.Postings("Assets:Bank:POSTBANK", D("-100.00"), data.get_currency_meta('EUR'), None, None, None),
|
valuta = row [17]
|
||||||
data.Postings("Expenses:Food", D("100.00"), data.get_currency_meta('EUR'), None, None, None),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
entries.append(transaction)
|
|
||||||
|
|
||||||
return entries
|
dag, maand, jaar = datum_str.split('.')
|
||||||
|
transactie_datum = data.D(int(jaar)), int(maand), int(dag))
|
||||||
|
|
||||||
|
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=payee,
|
||||||
|
narration=narration,
|
||||||
|
tags=data.frozenset(),
|
||||||
|
links=data.frozenset(),
|
||||||
|
postings=postings
|
||||||
|
)
|
||||||
|
|
||||||
|
entries.append(transaction)
|
||||||
|
|
||||||
|
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