Files
SGF/app/Modules/Purchasing/WorkspaceNavigation.php
T
2026-11-04 09:37:20 +02:00

38 lines
2.4 KiB
PHP

<?php
namespace App\Modules\Purchasing;
use App\Shared\Context\CompanyContext;
use App\Modules\Identity\Services\Permissions;
use Illuminate\Http\Request;
/** Navigation only: every destination retains its own current native authority checks. */
final class WorkspaceNavigation
{
public function links():array
{
if(config('receipt_qa.enabled')!==true||!app()->environment('budget-testing'))return [];
$c=app(CompanyContext::class);$scope=$c->identifiers();if(!$c->unitId())return [];
$definitions=[
['requests','requests','Requisições','Preparar, submeter e obter aprovação distinta.'],
['suppliers','suppliers','Fornecedores','Conferir cadastro e revisão antes das propostas.'],
['sourcing','sourcing','Propostas e adjudicação','Comparar propostas e fundamentar a escolha; aprovação distinta.'],
['orders','orders','Ordens','Emitir a partir da adjudicação aprovada.'],
['enabled','receipts','Recepções','Conferir quantidades e qualidade da ordem emitida.'],
['invoices','invoices','Facturas','Registar e validar o documento recebido.'],
['obligations','obligations','Obrigações','Preparar fotografia e reconhecer por pessoa distinta.'],
];$links=[];$permissions=app(Permissions::class);
foreach($definitions as[$flag,$path,$label,$description]){
$flag=$flag==='enabled'?$flag:$flag.'_enabled';$right='purchasing_'.$path.'.view';
if(config('receipt_qa.'.$flag)===true&&$permissions->has($c->userId(),$scope['tenant_id'],$scope['company_id'],$right,$c->unitId()))$links[]=['url'=>'/purchasing/'.$path,'label'=>$label,'description'=>$description,'right'=>$right];
}
if(config('receipt_qa.dossiers_enabled')===true&&array_filter($links,fn($link)=>$link['right']==='purchasing_requests.view'))$links[]=['url'=>'/purchasing/dossiers','label'=>'Dossiês e evidência','description'=>'Consultar as etapas e o histórico autorizado da mesma requisição.','right'=>'purchasing_requests.view'];
return $links;
}
public function screen(Request $r,ReceiptRuntime $runtime)
{
abort_unless(config('receipt_qa.enabled')===true,404);$links=$this->links();abort_unless($links,403);
$runtime->run($links[0]['right'],fn()=>null);
return response()->view('purchasing-workspace',['links'=>$links]);
}
}