[Fix] Changes rule's money type to Decimal
Also fixes comparison w/ max amount.
This commit is contained in:
parent
72a8995fe6
commit
17d8d5d813
58
alembic/versions/e36e6321568e_rules_min_max_money.py
Normal file
58
alembic/versions/e36e6321568e_rules_min_max_money.py
Normal 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 ###
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user