netgescon-master/app/Models/Amministratore.php
Pikappa2 3005bf46b0 Feature: Sistema completo Amministratori con cartelle dedicate
 Aggiunto:
- Comando 'netgescon:create-amministratore' completo
- Auto-creazione cartelle per ogni amministratore
- Struttura dati organizzata (documenti, backup, temp, logs, exports)
- Codici univoci 8 caratteri (ADM + 5 random)
- Integrazione con ruoli e permessi

🏢 Amministratore creato:
- Marco Bianchi (marco.bianchi@esempio.it)
- Password: Admin4853!
- Codice: KPL9F3XP
- Stabile: Condominio Porta Nuova Milano

🎯 Prossimo: Test interfaccia grafica per amministratori
2025-07-07 18:30:03 +02:00

145 lines
4.1 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany; // Aggiunto per condomini()
use Illuminate\Database\Eloquent\SoftDeletes; // Aggiunto per soft deletes
use Illuminate\Support\Str;
class Amministratore extends Model
{
use HasFactory;
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'amministratori';
// Rimossa la primaryKey personalizzata - usa 'id' standard Laravel
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'user_id',
'nome',
'cognome',
'denominazione_studio',
'partita_iva',
'codice_fiscale_studio',
'indirizzo_studio',
'cap_studio',
'citta_studio',
'provincia_studio',
'telefono_studio',
'email_studio',
'pec_studio',
'codice_univoco',
];
/**
* Get the user associated with the Amministratore.
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
/**
* Get the condomini for the Amministratore.
*/
public function stabili(): HasMany
{
return $this->hasMany(Stabile::class, 'amministratore_id', 'id_amministratore');
}
/**
* Get the fornitori for the Amministratore.
*/
public function fornitori(): HasMany
{
return $this->hasMany(Fornitore::class, 'amministratore_id', 'id_amministratore');
}
protected static function boot()
{
parent::boot();
static::creating(function ($amministratore) {
if (empty($amministratore->codice_univoco)) {
do {
$code = Str::upper(Str::random(8));
} while (self::where('codice_univoco', $code)->exists());
$amministratore->codice_univoco = $code;
}
});
// Auto-crea cartelle dopo la creazione
static::created(function ($amministratore) {
$amministratore->createFolderStructure();
});
}
/**
* Crea la struttura di cartelle per l'amministratore
*/
public function createFolderStructure(): void
{
$basePath = "amministratori/{$this->codice_univoco}";
$folders = [
'documenti/allegati',
'documenti/contratti',
'documenti/assemblee',
'documenti/preventivi',
'backup/database',
'backup/files',
'temp/upload',
'temp/processing',
'logs',
'exports',
];
foreach ($folders as $folder) {
\Storage::disk('local')->makeDirectory("{$basePath}/{$folder}");
}
// Crea file README informativo
$readme = "# Cartella Amministratore: {$this->nome_completo}\n\n";
$readme .= "**Codice**: {$this->codice_univoco}\n";
$readme .= "**Creato**: " . $this->created_at->format('d/m/Y H:i') . "\n\n";
$readme .= "## Struttura Cartelle\n\n";
$readme .= "- `documenti/` - Documenti dell'amministratore\n";
$readme .= "- `backup/` - Backup automatici\n";
$readme .= "- `temp/` - File temporanei\n";
$readme .= "- `logs/` - Log specifici\n";
$readme .= "- `exports/` - Esportazioni dati\n";
\Storage::disk('local')->put("{$basePath}/README.md", $readme);
}
/**
* Ottieni il path della cartella dell'amministratore
*/
public function getFolderPath(): string
{
return "amministratori/{$this->codice_univoco}";
}
/**
* Genera codice univoco alfanumerico 8 caratteri
*/
public function generateCodiceUnivoco(): string
{
do {
$codice = 'ADM' . strtoupper(substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 5));
} while (self::where('codice_univoco', $codice)->exists());
return $codice;
}
}