feat: Import-Vorlage richtet sich nach dem gewaehlten Konto

Beim Kontowechsel musste man die Vorlage jedes Mal neu waehlen – und las
im schlimmsten Fall den Revolut-Auszug mit der Raiffeisen-Vorlage ein
(genau das steht im Verlauf).

Eigene Vorlagen standen schon als template_id im Verlauf; Bank-Vorlagen
sind fest im Code und hinterliessen nichts. Der Verlauf merkt sich deshalb
jetzt auch deren Namen (Migration 0014). Die Oberflaeche waehlt beim
Kontowechsel, womit zuletzt in dieses Konto importiert wurde.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-21 20:44:50 +02:00
co-authored by Claude Opus 5
parent 78835d1e40
commit 3a44509e77
7 changed files with 79 additions and 5 deletions
+4
View File
@@ -530,6 +530,10 @@ class ImportBatch(Base):
template_id: Mapped[int | None] = mapped_column(
ForeignKey("import_templates.id", ondelete="SET NULL"), nullable=True
)
# Name der Bank-Vorlage (Raiffeisen, N26 …). Eigene Vorlagen stehen in
# template_id; die fest eingebauten haben keine ID und wuerden sonst
# vergessen, sobald der Import durch ist.
preset: Mapped[str | None] = mapped_column(String(64), nullable=True)
filename: Mapped[str] = mapped_column(String(255), nullable=False, default="")
row_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
imported_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
+2 -1
View File
@@ -142,7 +142,8 @@ async def preview(
@router.post("/commit", response_model=ImportBatchOut)
def commit(payload: ImportCommitIn, db: Session = Depends(get_db), user: User = Depends(get_current_user)):
account = get_owned(db, Account, payload.account_id, user)
return csv_import.commit_import(db, user, account, payload.template_id, payload.filename, payload.rows)
return csv_import.commit_import(db, user, account, payload.template_id, payload.filename,
payload.rows, preset=payload.preset)
@router.get("/batches", response_model=list[ImportBatchOut])
+2
View File
@@ -419,6 +419,7 @@ class ImportBatchOut(BaseModel):
id: int
account_id: int
template_id: int | None
preset: str | None
filename: str
row_count: int
imported_count: int
@@ -429,6 +430,7 @@ class ImportBatchOut(BaseModel):
class ImportCommitIn(BaseModel):
account_id: int
template_id: int | None = None
preset: str | None = None
filename: str = ""
rows: list[dict] = Field(default_factory=list)
+3 -2
View File
@@ -698,11 +698,12 @@ def _apply_counterpart_amount(db: Session, user: User, account: Account, row: di
return True
def commit_import(db: Session, user: User, account: Account, template_id: int | None, filename: str, rows: list[dict]) -> ImportBatch:
def commit_import(db: Session, user: User, account: Account, template_id: int | None, filename: str,
rows: list[dict], preset: str | None = None) -> ImportBatch:
accounts = {a.id: a for a in db.query(Account).filter(Account.owner_id == user.id)}
batch = ImportBatch(
owner_id=user.id, account_id=account.id, template_id=template_id,
filename=(filename or "")[:255], row_count=len(rows),
preset=(preset or None), filename=(filename or "")[:255], row_count=len(rows),
imported_count=0, status=ImportStatus.committed,
)
db.add(batch)