38 lines
2.4 KiB
PHP
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]);
|
|
}
|
|
}
|