goodsReceiptRepository->all(); return response()->json([ 'data' => GoodsReceiptResource::collection($goodsReceipts), 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error fetching goods receipts: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des réceptions de marchandises.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Store a newly created goods receipt. */ public function store(StoreGoodsReceiptRequest $request): JsonResponse { try { $payload = $request->validated(); if (empty($payload['lines']) && !empty($payload['purchase_order_id'])) { $purchaseOrder = PurchaseOrder::query() ->with('lines') ->find($payload['purchase_order_id']); if ($purchaseOrder) { $payload['lines'] = $purchaseOrder->lines ->filter(fn($line) => !empty($line->product_id)) ->map(fn($line) => [ 'product_id' => (int) $line->product_id, 'packaging_id' => null, 'packages_qty_received' => null, 'units_qty_received' => (float) $line->quantity, 'qty_received_base' => (float) $line->quantity, 'unit_price' => (float) $line->unit_price, 'unit_price_per_package' => null, 'tva_rate_id' => null, ]) ->values() ->all(); } } $goodsReceipt = $this->goodsReceiptRepository->create($payload); return response()->json([ 'data' => new GoodsReceiptResource($goodsReceipt), 'message' => 'Réception de marchandise créée avec succès.', 'status' => 'success' ], 201); } catch (\Exception $e) { Log::error('Error creating goods receipt: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la création de la réception de marchandise.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Display the specified goods receipt. */ public function show(string $id): JsonResponse { try { $goodsReceipt = $this->goodsReceiptRepository->find((int) $id); if (!$goodsReceipt) { return response()->json(['message' => 'Réception de marchandise non trouvée.'], 404); } return response()->json([ 'data' => new GoodsReceiptResource($goodsReceipt), 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error fetching goods receipt: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération de la réception de marchandise.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Update the specified goods receipt. */ public function update(UpdateGoodsReceiptRequest $request, string $id): JsonResponse { try { $updated = $this->goodsReceiptRepository->update((int) $id, $request->validated()); if (!$updated) { return response()->json(['message' => 'Réception de marchandise non trouvée ou échec de la mise à jour.'], 404); } $goodsReceipt = $this->goodsReceiptRepository->find((int) $id); return response()->json([ 'data' => new GoodsReceiptResource($goodsReceipt), 'message' => 'Réception de marchandise mise à jour avec succès.', 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error updating goods receipt: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la mise à jour de la réception de marchandise.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Remove the specified goods receipt. */ public function destroy(string $id): JsonResponse { try { $deleted = $this->goodsReceiptRepository->delete((int) $id); if (!$deleted) { return response()->json(['message' => 'Réception de marchandise non trouvée ou échec de la suppression.'], 404); } return response()->json([ 'message' => 'Réception de marchandise supprimée avec succès.', 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error deleting goods receipt: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la suppression de la réception de marchandise.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } }