Compare commits

...

3 Commits

Author SHA1 Message Date
7453ffbd3a
[Interactive] Adds new format for tags
Now tags can be defined along side categories by starting with :.
E.g. eating out:work:today will classify the transaction with the eating
out category and work and today tags.
2023-01-29 23:48:48 +00:00
da348c4ffb
[Fix] Splitted categories were not being commited 2023-01-29 23:48:27 +00:00
2da721d53c
[Interactive] Adds skip command 2023-01-29 23:48:22 +00:00
2 changed files with 40 additions and 18 deletions

View File

@ -24,35 +24,47 @@ def interactive(manager: Manager):
quit = False
next = True
while next:
match (input("(<category>/split/tag/note/quit): ")):
match (input("(<category>(:tag)/split/note/skip/quit): ")):
case "skip":
next = False
continue
case "quit" | "exit":
next = False
quit = True
case "split":
manager.action(Operation.Split, split(transaction, categories))
manager.action(Operation.Split, split(transaction, categories, tags))
next = False
case "tag":
tag = input("tag: ")
if tag not in [t.name for t in tags]:
session.add([type.Tag(tag)])
transaction.tags.add(type.TransactionTag(tag))
case "note":
note = input("note: ")
transaction.note = type.Note(note)
case other:
if other not in [c.name for c in categories]:
print(f"{other} is not a valid category")
if len(li := other.split(":")) > 1:
_category = li[0]
_tags = li[1:]
else:
_category = other
_tags = []
if _category not in [c.name for c in categories]:
print(f"{other} doesn't have a valid category")
continue
transaction.category = type.TransactionCategory(
other,
_category,
type.CategorySelector(type.Selector_T.manual),
)
for tag in _tags:
if tag not in [t.name for t in tags]:
session.add([type.Tag(tag)])
tags = session.get(type.Tag)
transaction.tags.add(type.TransactionTag(tag))
next = False
session.commit()
@ -61,7 +73,9 @@ def interactive(manager: Manager):
def split(
original: type.Transaction, categories: Sequence[type.Category]
original: type.Transaction,
categories: Sequence[type.Category],
tags: Sequence[type.Tag],
) -> list[type.Transaction]:
total = original.amount

View File

@ -197,12 +197,20 @@ class Manager:
assert len(originals) == 1, ">1 transactions matched {original.id}!"
originals[0].split = True
transactions = [
SplitTransaction(
originals[0].date, t.description, t.amount, originals[0].id
transactions = []
for t in params[1:]:
if originals[0].date != t.date:
t.date = originals[0].date
print(
f"{t.date} is different from original date {originals[0].date}, using original"
)
for t in params[1:]
]
splitted = SplitTransaction(
t.date, t.description, t.amount, originals[0].id
)
splitted.category = t.category
transactions.append(splitted)
session.add(transactions)
case Operation.Export: