Compare commits
3 Commits
7453ffbd3a
...
e670d3ddee
| Author | SHA1 | Date | |
|---|---|---|---|
| e670d3ddee | |||
| 2263175348 | |||
| d289473271 |
@ -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
|
||||
|
||||
@ -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"
|
||||
)
|
||||
|
||||
splitted = SplitTransaction(
|
||||
t.date, t.description, t.amount, originals[0].id
|
||||
)
|
||||
for t in params[1:]
|
||||
]
|
||||
splitted.category = t.category
|
||||
transactions.append(splitted)
|
||||
|
||||
session.add(transactions)
|
||||
|
||||
case Operation.Export:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user