✅ 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
145 lines
4.1 KiB
PHP
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;
|
|
}
|
|
} |