diff --git a/app/Http/Controllers/HoldingController.php b/app/Http/Controllers/HoldingController.php index fed192a..19d39f2 100644 --- a/app/Http/Controllers/HoldingController.php +++ b/app/Http/Controllers/HoldingController.php @@ -15,10 +15,12 @@ class HoldingController extends Controller public function show(Request $request, Portfolio $portfolio, String $symbol) { - $holding = Holding::where([ - 'portfolio_id' => $portfolio->id, - 'symbol' => $symbol - ])->firstOrFail(); + $holding = $request->user() + ->holdings() + ->where([ + 'holdings.portfolio_id' => $portfolio->id, + 'holdings.symbol' => $symbol + ])->firstOrFail(); $market_data = $holding->market_data; diff --git a/app/Models/Holding.php b/app/Models/Holding.php index 56aa9d0..5037090 100644 --- a/app/Models/Holding.php +++ b/app/Models/Holding.php @@ -31,6 +31,11 @@ class Holding extends Model 'dividends_synced_at' => 'datetime', ]; + protected $attributes = [ + 'realized_gain_dollars' => 0, + 'dividends_earned' => 0, + ]; + /** * Market data for holding * @@ -106,7 +111,7 @@ class Holding extends Model ->selectRaw('@total_market_value:=COALESCE(SUM(holdings.quantity * market_data.market_value),0) AS total_market_value') ->selectRaw('@sum_total_cost_basis:=COALESCE(SUM(holdings.total_cost_basis),0) AS total_cost_basis') ->selectRaw('@total_gain_dollars:=COALESCE((@total_market_value - @sum_total_cost_basis),0) AS total_gain_dollars') - ->selectRaw('COALESCE((@total_gain_dollars / @sum_total_cost_basis) * 100,0) AS total_gain_percent') + // ->selectRaw('COALESCE((@total_gain_dollars / @sum_total_cost_basis) * 100,0) AS total_gain_percent') ->join('market_data', 'market_data.symbol', 'holdings.symbol'); } diff --git a/app/Models/Portfolio.php b/app/Models/Portfolio.php index 57675ae..67a42da 100644 --- a/app/Models/Portfolio.php +++ b/app/Models/Portfolio.php @@ -55,7 +55,7 @@ class Portfolio extends Model ->withAggregate('market_data', 'updated_at') ->selectRaw('COALESCE(market_data.market_value * holdings.quantity, 0) AS total_market_value') ->selectRaw('COALESCE((market_data.market_value - holdings.average_cost_basis) * holdings.quantity, 0) AS market_gain_dollars') - ->selectRaw('COALESCE(((market_data.market_value - holdings.average_cost_basis) / holdings.average_cost_basis) * 100, 0) AS market_gain_percent') + ->selectRaw('COALESCE(((market_data.market_value - holdings.average_cost_basis) / holdings.average_cost_basis), 0) AS market_gain_percent') ->join('market_data', 'holdings.symbol', 'market_data.symbol'); } diff --git a/app/Models/User.php b/app/Models/User.php index 36014fe..d4462d9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -64,7 +64,7 @@ class User extends Authenticatable ->withAggregate('market_data', 'updated_at') ->selectRaw('COALESCE(market_data.market_value * holdings.quantity, 0) AS total_market_value') ->selectRaw('COALESCE((market_data.market_value - holdings.average_cost_basis) * holdings.quantity, 0) AS market_gain_dollars') - ->selectRaw('COALESCE(((market_data.market_value - holdings.average_cost_basis) / holdings.average_cost_basis) * 100, 0) AS market_gain_percent') + ->selectRaw('COALESCE(((market_data.market_value - holdings.average_cost_basis) / holdings.average_cost_basis), 0) AS market_gain_percent') ->join('market_data', 'holdings.symbol', 'market_data.symbol'); } @@ -80,7 +80,7 @@ class User extends Authenticatable ->selectRaw('COALESCE(transactions.cost_basis * transactions.quantity, 0) AS total_cost_basis') ->selectRaw('COALESCE(market_data.market_value * transactions.quantity, 0) AS total_market_value') ->selectRaw('COALESCE((market_data.market_value - transactions.cost_basis) * transactions.quantity, 0) AS market_gain_dollars') - ->selectRaw('COALESCE(((market_data.market_value - transactions.cost_basis) / transactions.cost_basis) * 100, 0) AS market_gain_percent') + ->selectRaw('COALESCE(((market_data.market_value - transactions.cost_basis) / transactions.cost_basis), 0) AS market_gain_percent') ->join('market_data', 'transactions.symbol', 'market_data.symbol');; } diff --git a/resources/views/components/fifty-two-week-range.blade.php b/resources/views/components/fifty-two-week-range.blade.php new file mode 100644 index 0000000..9b884e5 --- /dev/null +++ b/resources/views/components/fifty-two-week-range.blade.php @@ -0,0 +1,17 @@ + + + @for ($x = 0; $x < 10; $x++) + @if ((($current - $low) * 100) / ($high - $low) > ($x * 10)) + + ● + + @else + + ○ + @endif + @endfor + \ No newline at end of file diff --git a/resources/views/holding/show.blade.php b/resources/views/holding/show.blade.php index b260aaf..70d6146 100644 --- a/resources/views/holding/show.blade.php +++ b/resources/views/holding/show.blade.php @@ -20,7 +20,23 @@

{{ Number::currency($market_data->market_value) }} - ▲ 9% + + @if ($holding->average_cost_basis) + + @php + $isUp = $holding->average_cost_basis <= $market_data->market_value; + $percent = ($market_data->market_value - $holding->average_cost_basis) / $holding->average_cost_basis + @endphp + + + {!! $isUp ? '▲' :'▼' !!} + {{ Number::percentage( + $percent, + $percent < 1 ? 2 : 1 + ) }} + + @endif +

@@ -30,27 +46,33 @@

{{ __('Average Cost Basis') }}: - {{ $holding->average_cost_basis }} + {{ Number::currency($holding->average_cost_basis) }}

{{ __('Total Cost Basis') }}: - {{ $holding->total_cost_basis }} + {{ Number::currency($holding->total_cost_basis) }}

{{ __('Realized Gain/Loss') }}: - {{ $holding->realized_gain_dollars }} + {{ Number::currency($holding->realized_gain_dollars) }}

{{ __('Dividends Earned') }}: - {{ $holding->dividends_earned }} + {{ Number::currency($holding->dividends_earned) }}

{{ __('52 week') }}: - ● ● ● ● ● ● ● ● ● ● + + +