++ Primo Caricamento

This commit is contained in:
2026-03-30 19:15:13 +02:00
commit 663a68d59b
47 changed files with 3561 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
<?php
namespace Database\Seeders;
// ─────────────────────────────────────────────────────────────────────────────
// CustomerSeeder — Genera clienti di esempio per lo sviluppo
//
// Usa Faker (libreria inclusa in Laravel) per generare dati realistici
// in italiano. Questi dati servono per testare l'interfaccia.
//
// ⚠️ Non eseguire in produzione! Solo per sviluppo e staging.
// ─────────────────────────────────────────────────────────────────────────────
use App\Models\Customer;
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
class CustomerSeeder extends Seeder
{
public function run(): void
{
// Faker con locale italiano: nomi, città, ecc. italiani
$faker = Faker::create('it_IT');
$types = ['privato', 'azienda'];
$statuses = ['attivo', 'inattivo', 'prospect'];
$cities = ['Roma', 'Milano', 'Napoli', 'Torino', 'Bologna', 'Firenze', 'Venezia', 'Genova', 'Palermo', 'Bari'];
// Crea 30 clienti di esempio
for ($i = 0; $i < 30; $i++) {
$type = $faker->randomElement($types);
$name = $type === 'azienda'
? $faker->company()
: $faker->name();
Customer::create([
'name' => $name,
'email' => $faker->unique()->safeEmail(),
'phone' => $faker->phoneNumber(),
'city' => $faker->randomElement($cities),
'address' => $faker->streetAddress(),
'vat_number' => $type === 'azienda' ? 'IT' . $faker->numerify('###########') : null,
'fiscal_code' => $faker->numerify('??????????##??##??###?'),
'type' => $type,
'status' => $faker->randomElement($statuses),
'contract_value' => $faker->randomFloat(2, 500, 50000),
'notes' => $faker->optional(0.4)->paragraph(),
]);
}
$this->command->info('✓ 30 clienti di esempio inseriti.');
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace Database\Seeders;
// ─────────────────────────────────────────────────────────────────────────────
// DatabaseSeeder — Entry point di tutti i seeder
//
// Un Seeder popola il database con dati iniziali o di test.
// Il DatabaseSeeder è il punto di ingresso; chiama gli altri seeder
// nell'ordine corretto (rispettando le foreign key).
//
// Esecuzione:
// php artisan db:seed → esegue solo DatabaseSeeder
// php artisan db:seed --class=CustomerSeeder → esegue solo quello
// php artisan migrate:fresh --seed → ricrea tutto e semina
// ─────────────────────────────────────────────────────────────────────────────
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
// L'ordine conta: settings prima (nessuna dipendenza),
// poi customers (dipende da nulla, ma logicamente dopo la config)
$this->call([
SettingSeeder::class,
CustomerSeeder::class,
]);
}
}

View File

@@ -0,0 +1,50 @@
<?php
namespace Database\Seeders;
// ─────────────────────────────────────────────────────────────────────────────
// SettingSeeder — Popola la tabella settings con i valori di default
//
// Questo seeder legge i default da config/settings.php e li inserisce
// nel database al primo avvio.
//
// È idempotente: puoi eseguirlo più volte senza duplicati (usa updateOrCreate)
// ─────────────────────────────────────────────────────────────────────────────
use App\Models\Setting;
use Illuminate\Database\Seeder;
class SettingSeeder extends Seeder
{
public function run(): void
{
$defaults = config('settings.defaults', []);
$descriptions = config('settings.descriptions', []);
$types = config('settings.types', []);
$groups = config('settings.groups', []);
// Costruisce una mappa chiave → gruppo
$keyToGroup = [];
foreach ($groups as $groupName => $keys) {
foreach ($keys as $key) {
$keyToGroup[$key] = $groupName;
}
}
foreach ($defaults as $key => $value) {
// updateOrCreate: se esiste già una riga con quell'key, la aggiorna;
// altrimenti la crea. Perfetto per rieseguire il seeder in sicurezza.
Setting::updateOrCreate(
['key' => $key],
[
'value' => is_bool($value) ? ($value ? '1' : '0') : (string) $value,
'label' => $descriptions[$key] ?? $key,
'group' => $keyToGroup[$key] ?? 'Generale',
'type' => $types[$key] ?? 'string',
]
);
}
$this->command->info('✓ Impostazioni di default inserite nella tabella settings.');
}
}