Files
kreios/backoffice/routes/api.php
T
carmine.savino 8bef57b64b feat: implement discount and transport features in the quote system
- Added maximum discount settings configurable by the administrator.
- Implemented discount calculations in the quote confirmation process.
- Introduced transport options with associated costs, including handling for exceeding maximum piece limits.
- Updated frontend to display discounts and transport information in the quote summary.
- Created new database migrations for storing discount and transport settings.
- Developed a new Filament page for managing global discount settings.
- Enhanced email templates to include discount and transport details.
- Added tests to ensure proper functionality of discounts and transport calculations.
2026-10-20 17:45:50 +02:00

43 lines
2.3 KiB
PHP

<?php
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\CarrelloController;
use App\Http\Controllers\Api\CatalogoController;
use App\Http\Controllers\Api\MediaController;
use Illuminate\Support\Facades\Route;
// Espone al configuratore l'URL corrente dell'app cliente (checkout), così il
// frontend non deve indovinare la porta su cui gira Vite (può cambiare se 5174 è occupata).
Route::get('config', fn () => response()->json([
'frontend_cliente_url' => config('preventivi.frontend_cliente_url'),
// Opzioni del contributo trasporto al checkout (importo per pezzo, null = da quantificare).
'trasporto' => collect(config('preventivi.trasporto.zone'))
->map(fn (array $zona, string $valore) => ['valore' => $valore] + $zona)
->values(),
'trasporto_nota' => config('preventivi.trasporto.nota_da_quantificare'),
'trasporto_max_pezzi' => config('preventivi.trasporto.max_pezzi'),
'trasporto_etichetta_oltre_max' => config('preventivi.trasporto.etichetta_oltre_max'),
]));
// Catalogo prodotti (sistemi e modelli con icone) per il configuratore.
Route::get('sistemi', [CatalogoController::class, 'sistemi']);
Route::get('sistemi/{codice}', [CatalogoController::class, 'sistemaPerCodice']);
Route::get('sistemi/{codice}/modelli/{modello}/listino', [CatalogoController::class, 'listino']);
Route::get('sistemi/{codice}/modelli/{modello}/configurazione', [CatalogoController::class, 'configurazione']);
Route::post('sistemi/{codice}/modelli/{modello}/prezzo', [CatalogoController::class, 'prezzo'])->middleware('throttle:240,1');
// Immagini del configuratore (finiture, vetri, icone) servite con gli header CORS.
Route::get('media/{percorso}', MediaController::class)->where('percorso', '.*')->name('media');
Route::prefix('auth')->group(function () {
Route::post('login', [AuthController::class, 'login']);
Route::middleware('auth:sanctum')->get('me', [AuthController::class, 'me']);
});
Route::prefix('carrello')->group(function () {
Route::post('aggiungi', [CarrelloController::class, 'aggiungi']);
Route::get('{token}', [CarrelloController::class, 'mostra']);
Route::delete('{token}/item/{item}', [CarrelloController::class, 'rimuoviItem']);
Route::post('{token}/conferma', [CarrelloController::class, 'conferma']);
});