Files
SGF/scripts/sgf-service-documents-proof-bootstrap.php
T
2026-11-11 09:00:17 +02:00

8 lines
2.1 KiB
PHP

<?php
use Illuminate\Support\Facades\Auth;use Illuminate\Support\Str;use App\Shared\Context\CompanyContext;use App\Modules\Services\{ServiceDocuments,ServiceInvoicing,ServiceReceivables};
require __DIR__.'/sgf-ledger-proof-bootstrap.php';$inputs=json_decode(file_get_contents($s['root'].'/single-document-inputs.json'),true);config(['service_documents.enabled'=>true,'service_documents.invoice_receipt_enabled'=>true,'service_documents.inputs_sha256'=>hash_file('sha256',$s['root'].'/single-document-inputs.json')]);
set_exception_handler(function($e){echo json_encode(['passed'=>false,'exception'=>get_class($e),'message'=>$e->getMessage(),'errors'=>$e instanceof Illuminate\Validation\ValidationException?$e->errors():null,'frames'=>array_map(fn($x)=>[basename($x['file']??''),$x['line']??0,$x['function']??''],array_slice($e->getTrace(),0,9))]).PHP_EOL;exit(1);});
$select=function($role)use($profiles,$app){Auth::forgetGuards();Auth::shouldUse('web');$u=App\Models\User::findOrFail($profiles[$role]['user_id']);Auth::guard('web')->setUser($u);$r=Illuminate\Http\Request::create('/api/service-documents','POST');$r->attributes->set('sgf_module','commercial');$r->setUserResolver(fn()=>$u);$session=app('session')->driver();$session->start();$session->put('company_context',['tenant_id'=>1,'company_id'=>2,'unit_id'=>2,'module_id'=>'commercial','token'=>'documents-'.$role]);$r->setLaravelSession($session);$app->instance('request',$r);app(CompanyContext::class)->selectFor($u->id,1,2,2);return $u->id;};
$command=function($role,$kind,$action,$key,$version,$data=[])use($select){$actor=$select($role);$w=app(ServiceDocuments::class);$p=$w->preview($actor,['kind'=>$kind,'action'=>$action,'document_key'=>$key,'version'=>$version,'data'=>$data,'reason'=>'Decisão documental sintética individual com origem e evidência.'],(string)Str::uuid());return [$w->confirm($actor,$p['preview']),$p];};
$reject=function(Closure $fn,int $status,string $label)use($ok){$bad=false;try{$fn();}catch(Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e){$bad=$e->getStatusCode()===$status;}catch(Illuminate\Validation\ValidationException){$bad=$status===422;}$ok($bad,$label);};