Aggiungi campi per immagini e diametro del foro nel modello Articolo e nelle relative migrazioni; aggiorna i form e le viste per gestire i nuovi campi
This commit is contained in:
@@ -5,8 +5,8 @@ namespace App\Http\Controllers\Admin;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Articolo;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Database\Seeders\ArticoloSeeder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use SimpleSoftwareIO\QrCode\Facades\QrCode;
|
||||
use \PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
@@ -40,6 +40,7 @@ class ArticoloController extends Controller
|
||||
$validated = $request->validate([
|
||||
'codice_articolo' => 'required|string|max:255|unique:articoli',
|
||||
'ciclo' => 'nullable|string|max:255',
|
||||
'hole_diameter' => 'nullable|string|max:255',
|
||||
'diametro' => 'nullable|string|max:255',
|
||||
'descrizione' => 'nullable|string',
|
||||
'posizione' => 'nullable|string|max:255',
|
||||
@@ -75,6 +76,7 @@ class ArticoloController extends Controller
|
||||
$validated = $request->validate([
|
||||
'codice_articolo' => 'required|string|max:255|unique:articoli,codice_articolo,' . $articolo->id,
|
||||
'ciclo' => 'nullable|string|max:255',
|
||||
'hole_diameter' => 'nullable|string|max:255',
|
||||
'diametro' => 'nullable|string|max:255',
|
||||
'descrizione' => 'nullable|string',
|
||||
'posizione' => 'nullable|string|max:255',
|
||||
@@ -87,8 +89,36 @@ class ArticoloController extends Controller
|
||||
'max_thrust_a' => 'nullable|string|max:255',
|
||||
'min_torque_a' => 'nullable|string|max:255',
|
||||
'quantita_fori' => 'nullable|integer|min:0',
|
||||
'immagine_articolo' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:4096',
|
||||
'immagine_thrust' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:4096',
|
||||
'immagine_tourque' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:4096',
|
||||
'rimuovi_immagine_articolo' => 'nullable|boolean',
|
||||
'rimuovi_immagine_thrust' => 'nullable|boolean',
|
||||
'rimuovi_immagine_tourque' => 'nullable|boolean',
|
||||
]);
|
||||
|
||||
$imageFields = ['immagine_articolo', 'immagine_thrust', 'immagine_tourque'];
|
||||
|
||||
foreach ($imageFields as $field) {
|
||||
$removeKey = 'rimuovi_' . $field;
|
||||
|
||||
if ($request->boolean($removeKey)) {
|
||||
if ($articolo->$field) {
|
||||
Storage::disk('public')->delete($articolo->$field);
|
||||
}
|
||||
$validated[$field] = null;
|
||||
} elseif ($request->hasFile($field)) {
|
||||
if ($articolo->$field) {
|
||||
Storage::disk('public')->delete($articolo->$field);
|
||||
}
|
||||
$validated[$field] = $request->file($field)->store('articoli', 'public');
|
||||
} else {
|
||||
unset($validated[$field]);
|
||||
}
|
||||
|
||||
unset($validated[$removeKey]);
|
||||
}
|
||||
|
||||
$articolo->update($validated);
|
||||
|
||||
return redirect()->route('admin.articoli.show', $articolo)
|
||||
@@ -164,7 +194,7 @@ class ArticoloController extends Controller
|
||||
public function import(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xlsx,xls',
|
||||
'file' => 'required|file|mimetypes:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/octet-stream',
|
||||
'clean_import' => 'nullable|boolean',
|
||||
]);
|
||||
|
||||
@@ -172,7 +202,6 @@ class ArticoloController extends Controller
|
||||
$cleanImport = $request->boolean('clean_import', false);
|
||||
|
||||
try {
|
||||
$seeder = new ArticoloSeeder();
|
||||
$result = $this->importFromExcel($file->getPathname(), $cleanImport);
|
||||
|
||||
$message = "Import completato! ";
|
||||
@@ -216,6 +245,11 @@ class ArticoloController extends Controller
|
||||
}
|
||||
|
||||
// Skip header rows (first 2 rows)
|
||||
// Column layout (v2): 0=Codice Articolo, 1=Immagine Articolo (skip), 2=Ciclo,
|
||||
// 3=Hole Diameter, 4=Diametro, 5=Descrizione, 6=Posizione, 7=Quantità,
|
||||
// 8=Tipo lavorazione, 9=Materiale, 10=Max Thickness, 11=Speed RPM, 12=Feed,
|
||||
// 13=Max Thrust A, 14=Immagine Thrust (skip), 15=Min Torque A,
|
||||
// 16=Immagine Tourque (skip), 17=Quantità fori
|
||||
foreach (array_slice($rows, 2) as $index => $row) {
|
||||
// Skip empty rows
|
||||
if (empty($row[0])) {
|
||||
@@ -228,19 +262,20 @@ class ArticoloController extends Controller
|
||||
Articolo::updateOrCreate(
|
||||
['codice_articolo' => $row[0]],
|
||||
[
|
||||
'ciclo' => $row[1] ?? null,
|
||||
'diametro' => $row[2] ?? null,
|
||||
'descrizione' => $row[3] ?? null,
|
||||
'posizione' => $row[4] ?? null,
|
||||
'quantita' => is_numeric($row[5]) ? (int) $row[5] : 0,
|
||||
'tipo_lavorazione' => $row[6] ?? null,
|
||||
'materiale_lavorare' => $row[7] ?? null,
|
||||
'maximum_thickness' => $row[8] ?? null,
|
||||
'speed_rpm' => is_numeric($row[9]) ? (int) $row[9] : null,
|
||||
'feed' => is_numeric($row[10]) ? (float) $row[10] : null,
|
||||
'max_thrust_a' => $row[11] ?? null,
|
||||
'min_torque_a' => $row[12] ?? null,
|
||||
'quantita_fori' => is_numeric($row[13]) ? (int) $row[13] : null,
|
||||
'ciclo' => $row[2] ?? null,
|
||||
'hole_diameter' => $row[3] ?? null,
|
||||
'diametro' => $row[4] ?? null,
|
||||
'descrizione' => $row[5] ?? null,
|
||||
'posizione' => $row[6] ?? null,
|
||||
'quantita' => is_numeric($row[7]) ? (int) round((float) $row[7]) : 0,
|
||||
'tipo_lavorazione' => $row[8] ?? null,
|
||||
'materiale_lavorare' => $row[9] ?? null,
|
||||
'maximum_thickness' => $row[10] ?? null,
|
||||
'speed_rpm' => is_numeric($row[11]) ? (int) round((float) $row[11]) : null,
|
||||
'feed' => is_numeric($row[12]) ? round((float) $row[12], 2) : null,
|
||||
'max_thrust_a' => $row[13] ?? null,
|
||||
'min_torque_a' => $row[15] ?? null,
|
||||
'quantita_fori' => is_numeric($row[17]) ? (int) round((float) $row[17]) : null,
|
||||
]
|
||||
);
|
||||
|
||||
@@ -250,18 +285,11 @@ class ArticoloController extends Controller
|
||||
$imported++;
|
||||
}
|
||||
|
||||
if (isset($this->command)) {
|
||||
$this->command->info('Importato articolo: ' . $row[0]);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$errors[] = "Riga " . ($index + 3) . ": " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($this->command)) {
|
||||
$this->command->info('Import completato! Totale articoli: ' . Articolo::count());
|
||||
}
|
||||
|
||||
return [
|
||||
'imported' => $imported,
|
||||
'updated' => $updated,
|
||||
|
||||
@@ -9,7 +9,9 @@ class Articolo extends Model
|
||||
|
||||
protected $fillable = [
|
||||
'codice_articolo',
|
||||
'immagine_articolo',
|
||||
'ciclo',
|
||||
'hole_diameter',
|
||||
'diametro',
|
||||
'descrizione',
|
||||
'posizione',
|
||||
@@ -20,7 +22,9 @@ class Articolo extends Model
|
||||
'speed_rpm',
|
||||
'feed',
|
||||
'max_thrust_a',
|
||||
'immagine_thrust',
|
||||
'min_torque_a',
|
||||
'immagine_tourque',
|
||||
'quantita_fori',
|
||||
'qr_code',
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user