[Fix] Changes rule's money type to Decimal

Also fixes comparison w/ max amount.
This commit is contained in:
Luís Murta 2022-12-10 18:58:03 +00:00
parent 72a8995fe6
commit 17d8d5d813
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
4 changed files with 65 additions and 6 deletions

View File

@ -0,0 +1,58 @@
"""Rules min/max money
Revision ID: e36e6321568e
Revises: 0ce89e987770
Create Date: 2022-12-10 18:55:07.149010+00:00
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "e36e6321568e"
down_revision = "0ce89e987770"
branch_labels = None
depends_on = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column(
"categories_rules",
"min_amount",
existing_type=sa.DOUBLE_PRECISION(precision=53),
type_=sa.Numeric(precision=16, scale=2),
existing_nullable=True,
schema="transactions",
)
op.alter_column(
"categories_rules",
"max_amount",
existing_type=sa.DOUBLE_PRECISION(precision=53),
type_=sa.Numeric(precision=16, scale=2),
existing_nullable=True,
schema="transactions",
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column(
"categories_rules",
"max_amount",
existing_type=sa.Numeric(precision=16, scale=2),
type_=sa.DOUBLE_PRECISION(precision=53),
existing_nullable=True,
schema="transactions",
)
op.alter_column(
"categories_rules",
"min_amount",
existing_type=sa.Numeric(precision=16, scale=2),
type_=sa.DOUBLE_PRECISION(precision=53),
existing_nullable=True,
schema="transactions",
)
# ### end Alembic commands ###

View File

@ -1,6 +1,7 @@
from pathlib import Path from pathlib import Path
import argparse import argparse
import datetime as dt import datetime as dt
import decimal
import re import re
from pfbudget.common.types import Operation from pfbudget.common.types import Operation
@ -369,8 +370,8 @@ def category_rule(parser: argparse.ArgumentParser, universal: argparse.ArgumentP
add.add_argument("--description", nargs=1, type=str) add.add_argument("--description", nargs=1, type=str)
add.add_argument("--regex", nargs=1, type=str) add.add_argument("--regex", nargs=1, type=str)
add.add_argument("--bank", nargs=1, type=str) add.add_argument("--bank", nargs=1, type=str)
add.add_argument("--min", nargs=1, type=float) add.add_argument("--min", nargs=1, type=decimal.Decimal)
add.add_argument("--max", nargs=1, type=float) add.add_argument("--max", nargs=1, type=decimal.Decimal)
remove = commands.add_parser("remove", parents=[universal]) remove = commands.add_parser("remove", parents=[universal])
remove.set_defaults(op=Operation.RuleRemove) remove.set_defaults(op=Operation.RuleRemove)

View File

@ -79,7 +79,7 @@ class Categorizer:
if rule.min_amount > transaction.amount: if rule.min_amount > transaction.amount:
continue continue
if rule.max_amount: if rule.max_amount:
if rule.max_amount <= transaction.amount: if rule.max_amount < transaction.amount:
continue continue
# passed all conditions, assign category # passed all conditions, assign category

View File

@ -69,7 +69,7 @@ class Bank(Base):
bankfk = Annotated[str, mapped_column(Text, ForeignKey(Bank.name))] bankfk = Annotated[str, mapped_column(Text, ForeignKey(Bank.name))]
idpk = Annotated[int, mapped_column(BigInteger, primary_key=True)] idpk = Annotated[int, mapped_column(BigInteger, primary_key=True)]
money = Annotated[Decimal, mapped_column(Numeric(16, 2), nullable=False)] money = Annotated[Decimal, mapped_column(Numeric(16, 2))]
class Transaction(Base): class Transaction(Base):
@ -183,8 +183,8 @@ class CategoryRule(Base):
description: Mapped[Optional[str]] description: Mapped[Optional[str]]
regex: Mapped[Optional[str]] regex: Mapped[Optional[str]]
bank: Mapped[Optional[str]] bank: Mapped[Optional[str]]
min_amount: Mapped[Optional[float]] min_amount: Mapped[Optional[money]]
max_amount: Mapped[Optional[float]] max_amount: Mapped[Optional[money]]
def __hash__(self): def __hash__(self):
return hash(self.id) return hash(self.id)