From c6a13cc83a234ec954d2fd84b2b9f941fb9f91e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Murta?= Date: Sun, 21 Jan 2024 11:26:55 +0000 Subject: [PATCH] Allow multi-category transactions through the use of tags. Instead of failing when categorizing a transaction which already has a category, add the new category as a tag for that transaction. Issue #2 --- pfbudget/transform/categorizer.py | 17 ++++++++++------- pfbudget/transform/exceptions.py | 4 ---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pfbudget/transform/categorizer.py b/pfbudget/transform/categorizer.py index 91aa110..22ee056 100644 --- a/pfbudget/transform/categorizer.py +++ b/pfbudget/transform/categorizer.py @@ -6,8 +6,8 @@ from pfbudget.db.model import ( CategorySelector, Transaction, TransactionCategory, + TransactionTag, ) -from .exceptions import TransactionCategorizedError from .transform import Transformer @@ -24,12 +24,15 @@ class Categorizer(Transformer): def transform_inplace(self, transactions: Sequence[Transaction]) -> None: for rule in self.rules: for transaction in transactions: - if transaction.category: - raise TransactionCategorizedError(transaction) - if not rule.matches(transaction): continue - transaction.category = TransactionCategory( - rule.name, CategorySelector.rules - ) + if not transaction.category: + transaction.category = TransactionCategory( + rule.name, CategorySelector.rules + ) + else: + if not transaction.tags: + transaction.tags = {TransactionTag(rule.name)} + else: + transaction.tags.add(TransactionTag(rule.name)) diff --git a/pfbudget/transform/exceptions.py b/pfbudget/transform/exceptions.py index 0c0d5fc..d761694 100644 --- a/pfbudget/transform/exceptions.py +++ b/pfbudget/transform/exceptions.py @@ -1,6 +1,2 @@ class MoreThanOneMatchError(Exception): pass - - -class TransactionCategorizedError(Exception): - pass