add spatial plannings retribution calculations
This commit is contained in:
101
app/Console/Commands/CheckSpatialPlanningConstraints.php
Normal file
101
app/Console/Commands/CheckSpatialPlanningConstraints.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\SpatialPlanning;
|
||||
use App\Models\RetributionProposal;
|
||||
|
||||
class CheckSpatialPlanningConstraints extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'spatial:check-constraints';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Check spatial planning foreign key constraints and show statistics';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$this->info('Checking Spatial Planning Constraints...');
|
||||
$this->newLine();
|
||||
|
||||
try {
|
||||
// Get total spatial plannings
|
||||
$totalSpatialPlannings = SpatialPlanning::count();
|
||||
|
||||
// Get spatial plannings with retribution proposals
|
||||
$withProposals = SpatialPlanning::whereHas('retributionProposals')->count();
|
||||
|
||||
// Get spatial plannings without retribution proposals
|
||||
$withoutProposals = SpatialPlanning::whereDoesntHave('retributionProposals')->count();
|
||||
|
||||
// Get total retribution proposals
|
||||
$totalProposals = RetributionProposal::count();
|
||||
|
||||
// Get retribution proposals linked to spatial plannings
|
||||
$linkedProposals = RetributionProposal::whereNotNull('spatial_planning_id')->count();
|
||||
|
||||
// Get standalone retribution proposals
|
||||
$standaloneProposals = RetributionProposal::whereNull('spatial_planning_id')->count();
|
||||
|
||||
// Display statistics
|
||||
$this->table(
|
||||
['Metric', 'Count'],
|
||||
[
|
||||
['Total Spatial Plannings', $totalSpatialPlannings],
|
||||
['├─ With Retribution Proposals', $withProposals],
|
||||
['└─ Without Retribution Proposals', $withoutProposals],
|
||||
['', ''],
|
||||
['Total Retribution Proposals', $totalProposals],
|
||||
['├─ Linked to Spatial Planning', $linkedProposals],
|
||||
['└─ Standalone Proposals', $standaloneProposals],
|
||||
]
|
||||
);
|
||||
|
||||
$this->newLine();
|
||||
|
||||
// Show constraint implications
|
||||
if ($withProposals > 0) {
|
||||
$this->warn("⚠️ CONSTRAINT WARNING:");
|
||||
$this->warn(" {$withProposals} spatial plannings have retribution proposals linked to them.");
|
||||
$this->warn(" These cannot be deleted directly due to foreign key constraints.");
|
||||
$this->newLine();
|
||||
|
||||
$this->info("💡 TRUNCATE OPTIONS:");
|
||||
$this->info(" • Use --truncate to delete ALL data (spatial plannings + linked proposals)");
|
||||
$this->info(" • Use --safe-truncate to delete only spatial plannings without proposals");
|
||||
$this->info(" • Manual cleanup: Delete proposals first, then spatial plannings");
|
||||
} else {
|
||||
$this->info("✅ No foreign key constraints found.");
|
||||
$this->info(" All spatial plannings can be safely truncated.");
|
||||
}
|
||||
|
||||
$this->newLine();
|
||||
|
||||
// Show example commands
|
||||
$this->info("📋 EXAMPLE COMMANDS:");
|
||||
$this->info(" php artisan spatial:init --truncate # Delete all data (smart method)");
|
||||
$this->info(" php artisan spatial:init --safe-truncate # Delete safe data only");
|
||||
$this->info(" php artisan spatial:init --force-truncate # Force truncate (disable FK checks)");
|
||||
$this->info(" php artisan spatial:init file.csv --truncate # Import with truncate");
|
||||
|
||||
return 0;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$this->error('Error checking constraints: ' . $e->getMessage());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user