29 lines
1.2 KiB
PHP
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;
|
|
}
|
|
}
|
|
}
|