- Added ListinoRelationManager for managing price lists associated with models. - Introduced ImportaListiniAction for importing price lists from Excel files. - Created ListinoPrezzo model to represent price entries in the database. - Developed ListinoExcelParser for parsing Excel files containing price lists. - Implemented ListinoImporter to handle the import logic and associations. - Added migration for creating listino_prezzi table and converting measures to mm. - Updated frontend logic to handle new price list features and validations. - Enhanced tests for price list import and conversion functionalities.
84 lines
2.6 KiB
PHP
84 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Modello;
|
|
use App\Models\Sistema;
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
class CatalogoController extends Controller
|
|
{
|
|
/**
|
|
* GET /api/sistemi
|
|
* Sistemi attivi con i rispettivi modelli attivi, nell'ordine del menu.
|
|
*/
|
|
public function sistemi(): JsonResponse
|
|
{
|
|
$sistemi = Sistema::attivi()
|
|
->with(['modelli' => fn ($q) => $q->attivi()])
|
|
->get();
|
|
|
|
return response()->json($sistemi->map(fn (Sistema $s) => $this->sistema($s))->values());
|
|
}
|
|
|
|
/**
|
|
* GET /api/sistemi/{codice}
|
|
*/
|
|
public function sistemaPerCodice(string $codice): JsonResponse
|
|
{
|
|
$sistema = Sistema::attivi()
|
|
->where('codice', $codice)
|
|
->with(['modelli' => fn ($q) => $q->attivi()])
|
|
->firstOrFail();
|
|
|
|
return response()->json($this->sistema($sistema));
|
|
}
|
|
|
|
/**
|
|
* GET /api/sistemi/{codice}/modelli/{modello}/listino
|
|
* Griglia prezzi del modello (misure in mm), ordinata per altezza e larghezza.
|
|
*/
|
|
public function listino(string $codice, string $modello): JsonResponse
|
|
{
|
|
$modello = Modello::attivi()
|
|
->where('codice', $modello)
|
|
->whereHas('sistema', fn ($q) => $q->where('codice', $codice)->where('attivo', true))
|
|
->firstOrFail();
|
|
|
|
$prezzi = $modello->listino()
|
|
->orderBy('altezza')
|
|
->orderBy('larghezza')
|
|
->get(['altezza', 'larghezza', 'prezzo'])
|
|
->map(fn ($p) => ['altezza' => $p->altezza, 'larghezza' => $p->larghezza, 'prezzo' => $p->prezzo]);
|
|
|
|
return response()->json($prezzi);
|
|
}
|
|
|
|
private function sistema(Sistema $sistema): array
|
|
{
|
|
return [
|
|
'codice' => $sistema->codice,
|
|
'nome' => $sistema->nome,
|
|
'modelli' => $sistema->modelli->map(fn (Modello $m) => $this->modello($m))->values(),
|
|
];
|
|
}
|
|
|
|
// Stessa forma del vecchio modelli.json (id, nome, cartella, modello, ...) più descrizione e icona.
|
|
private function modello(Modello $modello): array
|
|
{
|
|
return [
|
|
'id' => $modello->codice,
|
|
'nome' => $modello->nome,
|
|
'descrizione' => $modello->descrizione,
|
|
'icona' => $modello->icona_url,
|
|
'cartella' => $modello->cartella,
|
|
'modello' => $modello->file_modello,
|
|
'categoria' => $modello->categoria,
|
|
'cartella_texture' => $modello->cartella_texture,
|
|
'moduli' => $modello->moduli ?? [],
|
|
'enabled' => true,
|
|
];
|
|
}
|
|
}
|