diff --git a/app/Console/Commands/FixCostBasisForSales.php b/app/Console/Commands/FixCostBasisForSales.php new file mode 100644 index 0000000..2e9544c --- /dev/null +++ b/app/Console/Commands/FixCostBasisForSales.php @@ -0,0 +1,73 @@ + 'SELL', 'portfolio_id' => $this->argument('portfolio_id')])->get(); + + $transactions->chunk(10)->each(function ($chunk) { + + dispatch(function () use ($chunk) { + + $chunk->each(function ($transaction) { + + $cost_basis = Transaction::where([ + 'portfolio_id' => $transaction->portfolio_id, + 'symbol' => $transaction->symbol, + 'transaction_type' => 'BUY', + ])->whereDate('date', '<=', $transaction->date) + ->selectRaw('SUM(transactions.cost_basis * transactions.quantity) as total_cost_basis') + ->selectRaw('SUM(transactions.quantity) as total_quantity') + ->first(); + + $average_cost_basis = empty($cost_basis->total_quantity) + ? 0 + : $cost_basis->total_cost_basis / $cost_basis->total_quantity; + + $transaction->cost_basis = $average_cost_basis ?? 0; + + $transaction->save(); + }); + }); + }); + } +}