Source code for portfolio_toolkit.account.transaction

from dataclasses import dataclass
from datetime import date
from typing import List, Optional

import pandas as pd


[docs] @dataclass class AccountTransaction: """ Represents a transaction in an account. """ transaction_date: date transaction_type: str amount: float description: Optional[str] = None def __post_init__(self): allowed_types = {"buy", "sell", "deposit", "withdrawal", "income", "adjustment"} if self.transaction_type not in allowed_types: raise ValueError(f"Invalid transaction type: {self.transaction_type}")
[docs] def to_list(self) -> List[dict]: """Convert a list of AccountTransaction objects to a list of dictionaries.""" data = [] for tx in self.transactions: data.append( { "date": tx.transaction_date, "type": tx.transaction_type, "amount": tx.amount, "description": tx.description, } ) return data
[docs] def to_dataframe(self) -> pd.DataFrame: """Convert the account transactions to a pandas DataFrame.""" data = self.to_list() return pd.DataFrame(data)
def __repr__(self): return ( f"AccountTransaction(date={self.transaction_date}, " f"type={self.transaction_type}, amount={self.amount}, " f"description={self.description})" )