Ajoute fiche d'identité informatique, catalogue prestataires et schémas draw.io

- Fiche d'identité par organisation (technicien référent, FAI, IP publiques,
  prestataires liés) accessible depuis un nouveau menu.
- Nouveau module Prestataires dédié (catalogue léger réutilisable entre
  communes, avec journal de suivi des échanges) plutôt que de détourner les
  organisations de type "Fournisseur".
- Nouveau menu Infrastructure par organisation avec schémas réseau/fonctionnel
  édités via draw.io embarqué (URL configurable, cf. réglages admin).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
mrKamoo
2026-08-21 15:55:23 +02:00
co-authored by Claude Sonnet 5
parent 74c0b01a2e
commit 3c87ced1e4
28 changed files with 1365 additions and 1 deletions
@@ -0,0 +1,25 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('organizations', function (Blueprint $table) {
$table->foreignId('technician_user_id')->nullable()->after('glpi_entity_id')->constrained('users')->nullOnDelete();
$table->string('isp_name')->nullable()->after('technician_user_id');
$table->json('public_ips')->nullable()->after('isp_name');
});
}
public function down(): void
{
Schema::table('organizations', function (Blueprint $table) {
$table->dropConstrainedForeignId('technician_user_id');
$table->dropColumn(['isp_name', 'public_ips']);
});
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('providers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('logo_path')->nullable();
$table->string('phone')->nullable();
$table->string('email')->nullable();
$table->string('website')->nullable();
$table->text('notes')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('providers');
}
};
@@ -0,0 +1,26 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('organization_provider', function (Blueprint $table) {
$table->id();
$table->foreignId('organization_id')->constrained()->cascadeOnDelete();
$table->foreignId('provider_id')->constrained()->cascadeOnDelete();
$table->string('label')->nullable();
$table->timestamps();
$table->unique(['organization_id', 'provider_id', 'label'], 'organization_provider_unique');
});
}
public function down(): void
{
Schema::dropIfExists('organization_provider');
}
};
@@ -0,0 +1,25 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('provider_log_entries', function (Blueprint $table) {
$table->id();
$table->foreignId('provider_id')->constrained()->cascadeOnDelete();
$table->string('category');
$table->text('note');
$table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();
$table->timestamp('created_at')->useCurrent();
});
}
public function down(): void
{
Schema::dropIfExists('provider_log_entries');
}
};