Files
mrKamooandClaude Sonnet 5 3c87ced1e4 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>
2026-08-21 15:55:23 +02:00

103 lines
2.3 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Storage;
#[Fillable(['name', 'slug', 'org_type', 'status', 'description', 'allowed_ip_ranges', 'logo_path', 'glpi_entity_id', 'technician_user_id', 'isp_name', 'public_ips'])]
class Organization extends Model
{
use SoftDeletes;
protected function casts(): array
{
return [
'allowed_ip_ranges' => 'array',
'public_ips' => 'array',
];
}
protected function logoUrl(): Attribute
{
return Attribute::get(
fn () => $this->logo_path ? Storage::disk('public')->url($this->logo_path) : asset('images/default-organization-logo.svg')
);
}
public function users()
{
return $this->belongsToMany(User::class);
}
public function locations()
{
return $this->hasMany(Location::class);
}
public function contacts()
{
return $this->hasMany(Contact::class);
}
public function passwords()
{
return $this->hasMany(Password::class);
}
public function flexibleAssets()
{
return $this->hasMany(FlexibleAsset::class);
}
public function documents()
{
return $this->hasMany(Document::class);
}
public function domains()
{
return $this->hasMany(Domain::class);
}
public function sslCertificates()
{
return $this->hasMany(SslCertificate::class);
}
public function virtualMachines()
{
return $this->hasMany(VirtualMachine::class);
}
public function logEntries()
{
return $this->hasMany(OrganizationLogEntry::class)->orderByDesc('created_at');
}
public function todos()
{
return $this->hasMany(Todo::class);
}
public function shortcuts()
{
return $this->hasMany(Shortcut::class);
}
public function technician()
{
return $this->belongsTo(User::class, 'technician_user_id');
}
public function providers()
{
return $this->belongsToMany(Provider::class, 'organization_provider')
->withPivot('id', 'label')
->withTimestamps();
}
}