fix calculation of dividends

This commit is contained in:
hackerESQ
2024-09-16 00:18:19 -05:00
parent 273f67e883
commit bb8f3ce59d
+18 -6
View File
@@ -104,22 +104,34 @@ class Dividend extends Model
// group by holdings // group by holdings
$dividends = self::select(['holdings.portfolio_id', 'dividends.date', 'dividends.symbol', 'dividends.dividend_amount']) $dividends = self::select(['holdings.portfolio_id', 'dividends.date', 'dividends.symbol', 'dividends.dividend_amount'])
->selectRaw(' ->selectRaw('
(COALESCE(SUM(CASE WHEN transactions.transaction_type = "BUY" COALESCE(CASE WHEN transactions.transaction_type = "BUY"
AND date(transactions.date) <= date(dividends.date) AND date(transactions.date) <= date(dividends.date)
THEN transactions.quantity ELSE 0 END), 0) THEN transactions.quantity ELSE 0 END, 0)
- COALESCE(SUM(CASE WHEN transactions.transaction_type = "SELL" - COALESCE(CASE WHEN transactions.transaction_type = "SELL"
AND date(transactions.date) <= date(dividends.date) AND date(transactions.date) <= date(dividends.date)
THEN transactions.quantity ELSE 0 END), 0)) THEN transactions.quantity ELSE 0 END, 0)
* dividends.dividend_amount AS owned
')
->selectRaw('
(COALESCE(CASE WHEN transactions.transaction_type = "BUY"
AND date(transactions.date) <= date(dividends.date)
THEN transactions.quantity ELSE 0 END, 0)
- COALESCE(CASE WHEN transactions.transaction_type = "SELL"
AND date(transactions.date) <= date(dividends.date)
THEN transactions.quantity ELSE 0 END, 0))
* dividends.dividend_amount
AS dividends_received AS dividends_received
') ')
->join('transactions', 'transactions.symbol', '=', 'dividends.symbol') ->join('transactions', 'transactions.symbol', '=', 'dividends.symbol')
->join('holdings', 'transactions.portfolio_id', '=', 'holdings.portfolio_id') ->join('holdings', 'transactions.portfolio_id', '=', 'holdings.portfolio_id')
->where('dividends.symbol', $dividend_data->last()['symbol']) ->where('dividends.symbol', $dividend_data->last()['symbol'])
->groupBy('holdings.portfolio_id', 'dividends.date', 'dividends.symbol', 'dividends.dividend_amount') ->groupBy('holdings.portfolio_id', 'dividends.date', 'dividends.symbol', 'dividends.dividend_amount', 'owned', 'dividends_received')
->havingRaw('dividends_received > 0') ->havingRaw('dividends_received > 0')
->get(); ->get();
dump($dividends->toArray());
// iterate through holdings and update // iterate through holdings and update
Holding::where(['symbol' => $symbol]) Holding::where(['symbol' => $symbol])
->get() ->get()