Sparen zaehlt im Budget wie eine Ausgabe – zu Recht, das Geld ist diesen Monat gebunden. Es stand danach aber in Rot da, und wer tausend zuruecklegte statt achthundert, bekam eine Warnung fuer etwas Gutes. Ein Haken an der Kategorie stellt das ab. Zwei Folgen: Der Betrag steht neutral. NICHT gruen: Gruen heisst in Certain ueberall "Geld kommt rein", und CHF 1'010 in Gruen liest sich als Einnahme. Grau sagt genau das Richtige – kein Verlust, kein Gewinn. Und mehr als geplant ist keine Ueberschreitung mehr. Das gilt auch eine Ebene hoeher: Eine Gruppe misst sich an dem, was WIRKLICH zu viel war. Sonst faerbt sich "Finanzen" rot, weil jemand gespart hat, und die echte Ueberschreitung daneben faellt nicht mehr auf. Angezeigt werden weiter die vollen Summen; nur das Urteil laesst das Sparen aus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
921 B
Python
32 lines
921 B
Python
"""Eine Ausgabe, die kein Verlust ist.
|
||
|
||
Sparen zaehlt im Budget wie eine Ausgabe – zu Recht, denn das Geld ist diesen
|
||
Monat nicht mehr verfuegbar. Es stand danach aber in Rot da, und mehr gespart
|
||
als geplant galt als Budget-Ueberschreitung. Wer tausend zuruecklegt statt
|
||
achthundert, bekam eine Warnung fuer etwas Gutes.
|
||
|
||
Mit diesem Haken steht der Betrag neutral, und ein Ueberschreiten ist keins.
|
||
|
||
Revision ID: 0029
|
||
Revises: 0028
|
||
"""
|
||
|
||
import sqlalchemy as sa
|
||
from alembic import op
|
||
|
||
revision = "0029"
|
||
down_revision = "0028"
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
|
||
def upgrade() -> None:
|
||
with op.batch_alter_table("categories") as batch:
|
||
batch.add_column(sa.Column("spending_is_good", sa.Boolean(), nullable=False,
|
||
server_default=sa.false()))
|
||
|
||
|
||
def downgrade() -> None:
|
||
with op.batch_alter_table("categories") as batch:
|
||
batch.drop_column("spending_is_good")
|