diff --git a/app/Console/Commands/Correction/CorrectsDatabase.php b/app/Console/Commands/Correction/CorrectsDatabase.php index 4288a4af40..8a0c416d41 100644 --- a/app/Console/Commands/Correction/CorrectsDatabase.php +++ b/app/Console/Commands/Correction/CorrectsDatabase.php @@ -74,6 +74,7 @@ class CorrectsDatabase extends Command 'correction:group-accounts', 'correction:recalculates-liabilities', 'correction:preferences', + 'correction:corrects-inverted-budget-limits', // 'correction:transaction-types', // resource heavy, disabled. 'correction:recalculate-pc-amounts', 'correction:remove-links-to-deleted-objects', diff --git a/app/Console/Commands/Correction/CorrectsInvertedBudgetLimits.php b/app/Console/Commands/Correction/CorrectsInvertedBudgetLimits.php new file mode 100644 index 0000000000..bf214ba4ab --- /dev/null +++ b/app/Console/Commands/Correction/CorrectsInvertedBudgetLimits.php @@ -0,0 +1,74 @@ +. + */ + +namespace FireflyIII\Console\Commands\Correction; + +use FireflyIII\Console\Commands\ShowsFriendlyMessages; +use FireflyIII\Models\BudgetLimit; +use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; + +class CorrectsInvertedBudgetLimits extends Command +{ + use ShowsFriendlyMessages; + + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'correction:corrects-inverted-budget-limits'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Reverse budget limits where the dates are inverted.'; + + /** + * Execute the console command. + */ + public function handle(): int + { + + $set = BudgetLimit::where('start_date', '>', DB::raw('end_date'))->get(); + if (0 === $set->count()) { + Log::debug('No inverted budget limits found.'); + return Command::SUCCESS; + } + /** @var BudgetLimit $budgetLimit */ + foreach ($set as $budgetLimit) { + $start = $budgetLimit->start_date->copy(); + $end = $budgetLimit->end_date->copy(); + $budgetLimit->start_date = $end; + $budgetLimit->end_date = $start; + $budgetLimit->saveQuietly(); + } + if (1 === $set->count()) { + $this->friendlyInfo('Corrected one budget limit to have the right start/end dates.'); + return Command::SUCCESS; + } + $this->friendlyInfo(sprintf('Corrected %d budget limits to have the right start/end dates.', count($set))); + return Command::SUCCESS; + } +}