- 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.
43 lines
2.3 KiB
PHP
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']);
|
|
});
|