Files
kreios/backoffice/app/Http/Controllers/Api/CatalogoController.php
T
carmine.savino 1e352eb2ef feat: Implement price list management and import functionality
- 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.
2026-10-19 16:51:24 +02:00

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,
];
}
}