Files
SGF/app/Http/Controllers/Api/V1/SgcInvoiceIngressController.php
T
2026-11-11 09:00:17 +02:00

29 lines
1.2 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Requests\Sgc\StoreInvoiceRequest;
use App\Modules\Purchasing\SgcInvoiceIngress;
use Illuminate\Database\QueryException;
final class SgcInvoiceIngressController
{
public function context(int $order, \App\Modules\Purchasing\InvoiceController $controller, \App\Modules\Purchasing\ReceiptRuntime $runtime)
{
$state = $controller->show($order, $runtime)->getData(true);
return response()->json(['order'=>$state['order'], 'revision'=>$state['revision'], 'receipt_progress'=>$state['receipt_progress']]);
}
public function __invoke(StoreInvoiceRequest $request, SgcInvoiceIngress $ingress)
{
try { return $ingress->receive($request); }
catch (QueryException $error) {
if (in_array($error->getCode(), ['55P03','40P01','40001'], true)) {
return response()->json(['error'=>'RETRY_SAME_KEY', 'message'=>'Operação concorrente; recuperar com a mesma chave e conteúdo.'], 503)->header('Retry-After', '1');
}
if ($error->getCode() === '23505') return response()->json(['error'=>'DOCUMENT_CONFLICT'], 409);
throw $error;
}
}
}