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>
43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
"""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"],
|
||
)
|