Source code for portfolio_toolkit.cli.commands.portfolio.transactions

import click

from portfolio_toolkit.account.account import Account
from portfolio_toolkit.asset.portfolio_asset import PortfolioAsset
from portfolio_toolkit.data_provider.yf_data_provider import YFDataProvider
from portfolio_toolkit.portfolio.load_portfolio_json import load_portfolio_json

from ..utils import load_json_file


@click.command()
@click.argument("file", type=click.Path(exists=True))
@click.option(
    "--output",
    type=click.Path(),
    default=None,
    help="Save results to CSV file instead of printing to console",
)
@click.option("--cash", is_flag=True, default=False, help="Cash transactions")
@click.option("--income", is_flag=True, default=False, help="Income transactions")
def transactions(file, output, cash, income):
    """Show portfolio transactions"""
    data = load_json_file(file)
    data_provider = YFDataProvider()
    portfolio = load_portfolio_json(data, data_provider=data_provider)

    if cash:
        cash_transactions(portfolio, output, income)
    else:
        asset_transactions(portfolio, output)


[docs] def cash_transactions(portfolio, output, income): """Show cash transactions""" click.echo( f"📊 Portfolio transactions for: {portfolio.name} ({portfolio.currency})" ) transactions_df = Account.to_dataframe(portfolio.account) # Save to CSV file or display in console if output: transactions_df.to_csv(output, index=False) click.echo(f"✅ Results saved to: {output}") else: click.echo("\n📊 Account transactions") click.echo("=" * 60) click.echo(transactions_df.to_string())
[docs] def asset_transactions(portfolio, output): """Show asset transactions""" click.echo("\n📊 Portfolio asset transactions") click.echo("=" * 60) assets_df = PortfolioAsset.to_dataframe(portfolio.assets) # Save to CSV file or display in console if output: assets_df.to_csv(output, index=False) click.echo(f"✅ Results saved to: {output}") else: click.echo(assets_df.to_string()) click.echo("=" * 60)