. */ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; use Exception; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Illuminate\Console\Command; use Illuminate\Database\QueryException; /** * Class DeleteZeroAmount */ class DeleteZeroAmount extends Command { /** * The console command description. * * @var string */ protected $description = 'Delete transactions with zero amount.'; /** * The name and signature of the console command. * * @var string */ protected $signature = 'firefly-iii:delete-zero-amount'; /** * Execute the console command. * * @return int */ public function handle(): int { $start = microtime(true); $set = Transaction::where('amount', 0)->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); $set = array_unique($set); $journals = TransactionJournal::whereIn('id', $set)->get(); /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $this->info(sprintf('Deleted transaction journal #%d because the amount is zero (0.00).', $journal->id)); try { $journal->delete(); } catch (QueryException $e) { $this->line($e->getMessage()); } Transaction::where('transaction_journal_id', $journal->id)->delete(); } if (0 === $journals->count()) { $this->info('No zero-amount transaction journals.'); } $end = round(microtime(true) - $start, 2); $this->info(sprintf('Verified zero-amount integrity in %s seconds', $end)); return 0; } }