diff --git a/finance/VERSION b/finance/VERSION index a82804c..4214542 100644 --- a/finance/VERSION +++ b/finance/VERSION @@ -1 +1 @@ -0.2.0 +0.3.0 diff --git a/finance/app/routers/imports.py b/finance/app/routers/imports.py index b024133..d8f9818 100644 --- a/finance/app/routers/imports.py +++ b/finance/app/routers/imports.py @@ -150,6 +150,25 @@ def confirm(statement_id: int, session: Session = Depends(get_session)): return StatementOut.model_validate(stmt) +@router.post("/{statement_id}/rollback") +def rollback(statement_id: int, session: Session = Depends(get_session)): + stmt = session.get(Statement, statement_id) + if stmt is None: + raise HTTPException(404, "Import nicht gefunden") + if stmt.status != "confirmed": + raise HTTPException(409, "Nur bestätigte Importe können zurückgerollt werden") + txs = session.execute( + select(Transaction).where(Transaction.statement_id == statement_id) + ).scalars().all() + deleted = len(txs) + for tx in txs: + session.delete(tx) + session.flush() + session.delete(stmt) + session.commit() + return {"deleted_transactions": deleted, "statement_id": statement_id} + + @router.delete("/{statement_id}", status_code=204) def delete_import(statement_id: int, session: Session = Depends(get_session)): stmt = session.get(Statement, statement_id) diff --git a/finance/app/templates/_import_list.html b/finance/app/templates/_import_list.html index 110301b..1b1c525 100644 --- a/finance/app/templates/_import_list.html +++ b/finance/app/templates/_import_list.html @@ -41,6 +41,11 @@ {% elif s.status == "confirmed" %} Bestätigt — Buchungen übernommen +
{% else %}