Files
SGF/scripts/workshop-billing-permissions-preview.php
T

11 lines
2.5 KiB
PHP

<?php
// Read-only; no apply or real activation branch.
require __DIR__.'/../vendor/autoload.php';$app=require __DIR__.'/../bootstrap/app.php';$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
use Illuminate\Support\Facades\DB;
if(!\App\Modules\Identity\Services\LocalDatabaseGuard::allows())throw new RuntimeException('Own SGF development application database required.');
if(!DB::table('companies')->where(['id'=>1,'tenant_id'=>1,'name'=>'Tempo Lda'])->exists()||!DB::table('units')->where(['id'=>1,'tenant_id'=>1,'company_id'=>1,'name'=>'SEGI'])->exists())throw new RuntimeException('Scope differs.');
$proposals=[];foreach([1=>['workshop_billing.view','workshop_billing.prepare','workshop_billing.generate'],2=>['workshop_billing.view','workshop_billing.review','workshop.view']] as $user=>$rights){if(!DB::table('users')->where('id',$user)->exists()||!DB::table('company_memberships')->where(['user_id'=>$user,'tenant_id'=>1,'company_id'=>1])->exists())throw new RuntimeException('Existing account membership required.');foreach($rights as $permission){$g=['user_id'=>$user,'tenant_id'=>1,'company_id'=>1,'unit_id'=>1,'permission'=>$permission];$proposals[]=$g+['already_granted'=>DB::table('permission_grants')->where($g)->exists()];}}
$prerequisites=[];foreach([1,2] as $user){foreach(['clients.view','services.view'] as $permission)$prerequisites[]=['user_id'=>$user,'permission'=>$permission,'unit_id'=>null,'present'=>DB::table('permission_grants')->where(['user_id'=>$user,'tenant_id'=>1,'company_id'=>1,'permission'=>$permission])->whereNull('unit_id')->exists()];}foreach(['workshop.view','service_drafts.view','service_drafts.create','billing_drafts.view','billing_drafts.create'] as $permission)$prerequisites[]=['user_id'=>1,'permission'=>$permission,'unit_id'=>1,'present'=>DB::table('permission_grants')->where(['user_id'=>1,'tenant_id'=>1,'company_id'=>1,'unit_id'=>1,'permission'=>$permission])->exists()];
try{\App\Modules\Workshop\WorkshopBilling::guard();throw new RuntimeException('Real conversion allowed.');}catch(\Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e){if($e->getStatusCode()!==403)throw $e;}
echo json_encode(['mode'=>'preview_only','destination'=>'sgf_tempo_dev','migration_120000_applied'=>DB::table('migrations')->where('migration','2026_10_28_120000_create_workshop_billing_drafts')->exists(),'proposed_grants'=>$proposals,'existing_prerequisites'=>$prerequisites,'real_conversion_blocked'=>true,'applied'=>false],JSON_PRETTY_PRINT|JSON_THROW_ON_ERROR).PHP_EOL;