Add price list management across the API, store, services, routes, navigation, and sales views. Support quotes for either a client or a client group, including PDF download and nullable client validation for group-based recipients. Extend client groups to manage assigned clients directly from the form and detail views, and refresh supplier, intervention, stock, and order screens with updated interactions and layouts.
155 lines
4.9 KiB
PHP
155 lines
4.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\StorePriceListRequest;
|
|
use App\Http\Requests\UpdatePriceListRequest;
|
|
use App\Http\Resources\PriceListResource;
|
|
use App\Repositories\PriceListRepositoryInterface;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class PriceListController extends Controller
|
|
{
|
|
public function __construct(
|
|
private readonly PriceListRepositoryInterface $priceListRepository
|
|
) {
|
|
}
|
|
|
|
/**
|
|
* Display a listing of price lists.
|
|
*/
|
|
public function index(): AnonymousResourceCollection|JsonResponse
|
|
{
|
|
try {
|
|
$priceLists = $this->priceListRepository->all()->sortBy('name')->values();
|
|
|
|
return PriceListResource::collection($priceLists);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error fetching price lists: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la récupération des listes de prix.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Store a newly created price list.
|
|
*/
|
|
public function store(StorePriceListRequest $request): PriceListResource|JsonResponse
|
|
{
|
|
try {
|
|
$priceList = $this->priceListRepository->create($request->validated());
|
|
|
|
return new PriceListResource($priceList);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error creating price list: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'data' => $request->validated(),
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la création de la liste de prix.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display the specified price list.
|
|
*/
|
|
public function show(string $id): PriceListResource|JsonResponse
|
|
{
|
|
try {
|
|
$priceList = $this->priceListRepository->find($id);
|
|
|
|
if (! $priceList) {
|
|
return response()->json([
|
|
'message' => 'Liste de prix non trouvée.',
|
|
], 404);
|
|
}
|
|
|
|
return new PriceListResource($priceList);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error fetching price list: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'price_list_id' => $id,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la récupération de la liste de prix.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update the specified price list.
|
|
*/
|
|
public function update(UpdatePriceListRequest $request, string $id): PriceListResource|JsonResponse
|
|
{
|
|
try {
|
|
$updated = $this->priceListRepository->update($id, $request->validated());
|
|
|
|
if (! $updated) {
|
|
return response()->json([
|
|
'message' => 'Liste de prix non trouvée ou échec de la mise à jour.',
|
|
], 404);
|
|
}
|
|
|
|
$priceList = $this->priceListRepository->find($id);
|
|
|
|
return new PriceListResource($priceList);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error updating price list: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'price_list_id' => $id,
|
|
'data' => $request->validated(),
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la mise à jour de la liste de prix.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove the specified price list.
|
|
*/
|
|
public function destroy(string $id): JsonResponse
|
|
{
|
|
try {
|
|
$deleted = $this->priceListRepository->delete($id);
|
|
|
|
if (! $deleted) {
|
|
return response()->json([
|
|
'message' => 'Liste de prix non trouvée ou échec de la suppression.',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Liste de prix supprimée avec succès.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error deleting price list: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'price_list_id' => $id,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la suppression de la liste de prix.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
}
|