Files
SGF/scripts/sgf-assets-proof-bootstrap.php
T
2026-11-11 15:04:01 +02:00

10 lines
2.5 KiB
PHP

<?php
require __DIR__.'/sgf-ledger-proof-bootstrap.php';
config(['fixed_assets.enabled'=>true,'fixed_assets.schema_sha256'=>hash_file('sha256',$repo.'/database/sql/fixed_assets.sql'),'fixed_assets.native_schema_sha256'=>hash_file('sha256',$repo.'/database/sql/fixed_assets_native.sql')]);
$faCall=function(int $actor,string $method,array $input=[],?string $key=null,string $generation='assets-proof',string $module='accounting',?array $scope=null)use($app,$f){
Illuminate\Support\Facades\Auth::forgetGuards();Illuminate\Support\Facades\Auth::shouldUse('web');$u=App\Models\User::findOrFail($actor);Illuminate\Support\Facades\Auth::guard('web')->setUser($u);$r=Illuminate\Http\Request::create('/api/fixed-assets',$method==='index'?'GET':'POST',$input);$r->headers->set('Idempotency-Key',$key??(string)Illuminate\Support\Str::uuid());$r->attributes->set('sgf_module',$module);$r->setUserResolver(fn()=>$u);$session=app('session')->driver();$session->start();$session->put('company_context',($scope??$f['scope'])+['module_id'=>$module,'token'=>$generation.'-'.$actor]);$r->setLaravelSession($session);$app->instance('request',$r);$ctx=app(App\Shared\Context\CompanyContext::class);$v=$scope??$f['scope'];$ctx->selectFor($actor,$v['tenant_id'],$v['company_id'],$v['unit_id']);try{$c=app(App\Modules\Accounting\FixedAssetsController::class);$out=$method==='receipt'?$c->receipt($r,app(App\Modules\Accounting\FixedAssets::class),$key):$c->$method($r,app(App\Modules\Accounting\FixedAssets::class));return['status'=>$out->getStatusCode(),'value'=>$out->getData(true)];}finally{$ctx->clear();}
};
$faInput=fn($kind,$key,$version,$data,$action='prepare')=>['kind'=>$kind,'record_key'=>$key,'version'=>$version,'action'=>$action,'data'=>$data,'reason'=>'Conferência individual do ciclo de activos artificiais autorizado.'];
$faCommand=function($actor,$input,$key=null)use($faCall){$key??=(string)Illuminate\Support\Str::uuid();$cut=$faCall($actor,'preview',$input,$key);if($cut['status']!==200)throw new LogicException(json_encode($cut));$out=$faCall($actor,'confirm',['preview'=>$cut['value']['preview']]);if($out['status']!==200)throw new LogicException(json_encode($out));return[$out['value'],$cut['value'],$key];};
$reject=function($fn,$status,$label)use($ok){$actual=null;try{$v=$fn();$actual=$v['status']??null;}catch(Symfony\Component\HttpKernel\Exception\HttpExceptionInterface$e){$actual=$e->getStatusCode();}catch(Illuminate\Validation\ValidationException){$actual=422;}catch(DomainException){$actual=409;}$ok($actual===$status,$label);};