feat: add fix command for cost basis for sale transaction

This commit is contained in:
hackerESQ
2025-08-27 20:22:13 -05:00
parent e4e08091af
commit 7d77b6fbc8
+30 -2
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Models\Portfolio;
use App\Models\Transaction; use App\Models\Transaction;
use Illuminate\Console\Command; use Illuminate\Console\Command;
@@ -15,7 +16,8 @@ class FixCostBasisForSales extends Command
* @var string * @var string
*/ */
protected $signature = 'fix:cost-basis-for-sales protected $signature = 'fix:cost-basis-for-sales
{portfolio_id : The ID of the portfolio to fix.}'; {--portfolio= : The ID of the portfolio to fix.}
{--user= : The user ID of transactions to fix.}';
/** /**
* The console command description. * The console command description.
@@ -42,7 +44,31 @@ class FixCostBasisForSales extends Command
public function handle() public function handle()
{ {
$transactions = Transaction::where(['transaction_type' => 'SELL', 'portfolio_id' => $this->argument('portfolio_id')])->get(); if (empty($this->option('user')) && empty($this->option('portfolio'))) {
$this->error('Must provide at least a user or portfolio.');
return;
}
$transactions = Transaction::where(['transaction_type' => 'SELL']);
if ($this->option('user')) {
$portfolios = Portfolio::fullAccess($this->option('user'))->get('id')
->pluck('id')
->toArray();
$transactions->whereIn('portfolio_id', $portfolios);
} else {
$transactions->where(['portfolio_id' => $this->option('portfolio')]);
}
$transactions = $transactions->get();
$this->line("Fixing cost basis for {$transactions->count()} sale transactions...");
$transactions->chunk(10)->each(function ($chunk) { $transactions->chunk(10)->each(function ($chunk) {
@@ -69,5 +95,7 @@ class FixCostBasisForSales extends Command
}); });
}); });
}); });
$this->line('Done!');
} }
} }