8 lines
2.8 KiB
PHP
8 lines
2.8 KiB
PHP
<?php
|
|
require __DIR__.'/sgf-ledger-proof-bootstrap.php';config(['stock_catalogue.enabled'=>true,'stock_catalogue.binding_sha256'=>hash_file('sha256',$s['root'].'/stock-catalogue-binding.json'),'stock_catalogue.schema_sha256'=>hash_file('sha256',$repo.'/database/sql/stock_catalogue.sql'),'stock_operations.enabled'=>true]);
|
|
set_exception_handler(function($e){echo json_encode(['passed'=>false,'type'=>get_class($e),'message'=>$e->getMessage(),'frames'=>array_map(fn($f)=>[basename($f['file']??''),$f['line']??0],array_slice($e->getTrace(),0,5))]).PHP_EOL;exit(1);});
|
|
$catalogue=app(App\Modules\Inventory\StockCatalogueController::class);$catalogueCall=function(int $actor,string $method,array $input=[],?string $key=null,string $generation='catalogue-proof',string $module='stock')use($app,$catalogue,$f){Illuminate\Support\Facades\Auth::forgetGuards();Illuminate\Support\Facades\Auth::shouldUse('web');$user=App\Models\User::findOrFail($actor);Illuminate\Support\Facades\Auth::guard('web')->setUser($user);$get=in_array($method,['index','receipt','screen'],true);$r=Illuminate\Http\Request::create('/api/stock-catalogue',$get?'GET':'POST',$input);$r->headers->set('Idempotency-Key',$key??(string)Illuminate\Support\Str::uuid());$r->attributes->set('sgf_module',$module);$r->setUserResolver(fn()=>$user);$session=app('session')->driver();$session->start();$session->put('company_context',$f['scope']+['module_id'=>$module,'token'=>$generation.'-'.$actor]);$r->setLaravelSession($session);$app->instance('request',$r);app(App\Shared\Context\CompanyContext::class)->selectFor($actor,1,2,2);$response=$method==='receipt'?$catalogue->receipt($r,app(App\Modules\Purchasing\ReceiptRuntime::class),$key):$catalogue->$method($r,app(App\Modules\Purchasing\ReceiptRuntime::class));return['status'=>$response->getStatusCode(),'value'=>method_exists($response,'getData')?$response->getData(true):$response->getContent()];};
|
|
$catalogueInput=fn($action,$key,$version,$data)=>['action'=>$action,'record_key'=>$key,'version'=>$version,'data'=>$data,'reason'=>'Decisão individual QA de catálogo, sem stock, custo ou lançamento.'];
|
|
$catalogueCommand=function($actor,$input,$key=null)use($catalogueCall){$key??=(string)Illuminate\Support\Str::uuid();$preview=$catalogueCall($actor,'preview',$input,$key);if($preview['status']!==200)throw new RuntimeException(json_encode($preview));$out=$catalogueCall($actor,'confirm',['preview'=>$preview['value']['preview']]);if(!in_array($out['status'],[200,201],true))throw new RuntimeException(json_encode($out));return[$out['value'],$preview['value'],$key];};
|
|
$rejectCatalogue=function($fn,$status,$label)use($ok){$actual=null;try{$response=$fn();$actual=$response['status']??null;}catch(Symfony\Component\HttpKernel\Exception\HttpExceptionInterface$e){$actual=$e->getStatusCode();}catch(Illuminate\Validation\ValidationException){$actual=422;}$ok($actual===$status,$label);};
|