feat: ein Schlagwort darf mehrere Beträge haben
Ein Wort war je Art nur einmal erlaubt, also ließ sich genau ein Preis hinterlegen. Im Personalrestaurant zahlt man aber mal 5.00 und mal 7.50 – der zweite Preis ließ sich nicht erfassen. Der Betrag gehört jetzt in den Unique-Schlüssel: „sv gruppe = 5.00" und „sv gruppe = 7.50" sind zwei Regeln derselben Kategorie, dasselbe Wort OHNE Betrag bleibt der Auffang für alle übrigen Beträge (und darf in einer anderen Kategorie liegen). Betrags-Regeln greifen vor dem Auffang. - Migration 0011 (Unique-Schlüssel um amount_cents erweitert) - Konflikt nur noch bei gleichem Wort UND gleichem Betrag; gilt auch beim Umbenennen und für Transfer-Schlagwörter - Test: zwei Preise treffen die Kategorie, ein dritter Betrag den Auffang; 88 grün Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
"""Schlagwörter: mehrere Beträge je Wort erlauben.
|
||||
|
||||
Bisher durfte ein Wort je Art nur einmal existieren – damit ließ sich genau ein
|
||||
Betrag hinterlegen. Wer im Personalrestaurant mal 5.00 und mal 7.50 zahlt, konnte
|
||||
den zweiten Preis nicht erfassen. Der Betrag gehört deshalb in den Unique-Schlüssel:
|
||||
„sv = 5.00" und „sv = 7.50" sind zwei Regeln, „sv" ohne Betrag bleibt der Auffang.
|
||||
|
||||
Revision ID: 0011
|
||||
Revises: 0010
|
||||
Create Date: 2026-08-21
|
||||
"""
|
||||
from alembic import op
|
||||
|
||||
revision = "0011"
|
||||
down_revision = "0010"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
with op.batch_alter_table("categorization_rules") as batch:
|
||||
batch.drop_constraint("uq_rule_owner_field_pattern_kind", type_="unique")
|
||||
batch.create_unique_constraint(
|
||||
"uq_rule_owner_field_pattern_kind_amount",
|
||||
["owner_id", "match_field", "pattern", "kind", "amount_cents"],
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Mehrfach-Beträge je Wort auf einen zusammenführen, sonst greift der alte
|
||||
# Schlüssel nicht mehr.
|
||||
op.execute(
|
||||
"DELETE FROM categorization_rules WHERE id NOT IN ("
|
||||
" SELECT MIN(id) FROM categorization_rules"
|
||||
" GROUP BY owner_id, match_field, pattern, kind)"
|
||||
)
|
||||
with op.batch_alter_table("categorization_rules") as batch:
|
||||
batch.drop_constraint("uq_rule_owner_field_pattern_kind_amount", type_="unique")
|
||||
batch.create_unique_constraint(
|
||||
"uq_rule_owner_field_pattern_kind",
|
||||
["owner_id", "match_field", "pattern", "kind"],
|
||||
)
|
||||
Reference in New Issue
Block a user