Adding auto creation of opening transaction on create
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
from account.resource import AccountResource
|
||||
from account.schemas import AccountCreate, CategoryCreate
|
||||
@@ -29,36 +30,42 @@ fixtures_account = [
|
||||
"parent_path": None,
|
||||
"type": "Asset",
|
||||
"opening_date": date(1970, 1, 1),
|
||||
"opening_balance": Decimal("0.00"),
|
||||
},
|
||||
{
|
||||
"name": "Cash in Wallet",
|
||||
"parent_path": "/Accounts/Asset/Current Assets/",
|
||||
"type": "Asset",
|
||||
"opening_date": date(1970, 1, 1),
|
||||
"opening_balance": Decimal("0.00"),
|
||||
},
|
||||
{
|
||||
"name": "Checking Account",
|
||||
"parent_path": "/Accounts/Asset/Current Assets/",
|
||||
"type": "Asset",
|
||||
"opening_date": date(1970, 1, 1),
|
||||
"opening_balance": Decimal("0.00"),
|
||||
},
|
||||
{
|
||||
"name": "Savings Account",
|
||||
"parent_path": "/Accounts/Asset/Current Assets/",
|
||||
"type": "Asset",
|
||||
"opening_date": date(1970, 1, 1),
|
||||
"opening_balance": Decimal("0.00"),
|
||||
},
|
||||
{
|
||||
"name": "Debt Accounts",
|
||||
"parent_path": None,
|
||||
"type": "Liability",
|
||||
"opening_date": date(1970, 1, 1),
|
||||
"opening_balance": Decimal("0.00"),
|
||||
},
|
||||
{
|
||||
"name": "Credit Card",
|
||||
"parent_path": "/Accounts/Liability/Debt Accounts/",
|
||||
"type": "Liability",
|
||||
"opening_date": date(1970, 1, 1),
|
||||
"opening_balance": Decimal("0.00"),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from sqlmodel import select
|
||||
|
||||
from account.models import Account
|
||||
from transaction.models import Split, Transaction
|
||||
|
||||
|
||||
class AccountResource:
|
||||
@classmethod
|
||||
@@ -18,6 +20,25 @@ class AccountResource:
|
||||
model.parent_account = cls.get(session, model.parent_account_id)
|
||||
return model.parent_account
|
||||
|
||||
@classmethod
|
||||
def create_opening_transaction(cls, session, account, schema):
|
||||
|
||||
equity_account = cls.get_by_path(session, "/Equity/")
|
||||
t = Transaction()
|
||||
split_opening = Split()
|
||||
split_opening.id = 0
|
||||
split_opening.transaction = t
|
||||
split_opening.account = account
|
||||
split_opening.amount = schema.opening_balance
|
||||
|
||||
split_equity = Split()
|
||||
split_equity.id = 1
|
||||
split_equity.transaction = t
|
||||
split_equity.account = equity_account
|
||||
split_equity.amount = - schema.opening_balance
|
||||
|
||||
account.transaction_splits.append(split_opening)
|
||||
|
||||
@classmethod
|
||||
def schema_to_model(cls, session, schema, model=None):
|
||||
try:
|
||||
@@ -27,6 +48,7 @@ class AccountResource:
|
||||
schema.path = ""
|
||||
schema.family = ""
|
||||
model = Account.model_validate(schema)
|
||||
cls.create_opening_transaction(session, model, schema)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
raise
|
||||
@@ -34,6 +56,7 @@ class AccountResource:
|
||||
model.compute_family()
|
||||
cls.validate_parent(session, model)
|
||||
model.compute_path()
|
||||
|
||||
return model
|
||||
|
||||
@classmethod
|
||||
@@ -68,12 +91,10 @@ class AccountResource:
|
||||
|
||||
@classmethod
|
||||
def create_equity_account(cls, session):
|
||||
account_db = Account(name="Equity", family="Equity", type="Equity", path="/Equity/")
|
||||
session.add(account_db)
|
||||
session.commit()
|
||||
session.refresh(account_db)
|
||||
|
||||
return account_db
|
||||
if cls.get_by_path(session, "/Equity/") is None:
|
||||
account_db = Account(name="Equity", family="Equity", type="Equity", path="/Equity/")
|
||||
session.add(account_db)
|
||||
session.commit()
|
||||
|
||||
@classmethod
|
||||
def select(cls):
|
||||
|
||||
@@ -63,6 +63,9 @@ class CategoryWrite(BaseAccountWrite):
|
||||
}
|
||||
})
|
||||
|
||||
opening_date: SkipJsonSchema[date] = Field(default=date(1970, 1, 1))
|
||||
opening_balance: SkipJsonSchema[Decimal] = Field(default=0)
|
||||
|
||||
class CategoryCreate(CategoryWrite):
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user