From 292d43b1549577175439ee3a1990d287bd403a11 Mon Sep 17 00:00:00 2001 From: hackerESQ Date: Tue, 26 Aug 2025 23:03:23 -0500 Subject: [PATCH] feat: adds cost basis fixer --- app/Console/Commands/FixCostBasisForSales.php | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 app/Console/Commands/FixCostBasisForSales.php 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(); + }); + }); + }); + } +}