@@ -3,6 +3,9 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Tenant;
|
||||
use App\Services\AiPreparationPlan;
|
||||
use App\Services\ComparisonPolicy;
|
||||
use App\Services\IntelligencePolicy;
|
||||
use App\Services\OrganizationAccess;
|
||||
use App\Services\OrganizationConfiguration;
|
||||
use Brick\Math\BigDecimal;
|
||||
@@ -23,6 +26,11 @@ class OrganizationConfigurationController extends Controller
|
||||
Inertia::encryptHistory();
|
||||
$response = Inertia::render('company/parameters', ['ready' => $ready, 'active' => (bool) ($state->active ?? false), 'version' => $state->version ?? 1,
|
||||
'companyRules' => $this->companyRules((int) $actor->tenant_id),
|
||||
'comparisonPolicy' => app(ComparisonPolicy::class)->company(Tenant::query()->findOrFail($actor->tenant_id)),
|
||||
'intelligencePolicy' => app(IntelligencePolicy::class)->company(Tenant::query()->findOrFail($actor->tenant_id)),
|
||||
'intelligenceReady' => Schema::hasColumn('tenants', 'intelligence_policy'),
|
||||
'aiPlan' => app(AiPreparationPlan::class)->company(Tenant::query()->findOrFail($actor->tenant_id)),
|
||||
'aiDomains' => AiPreparationPlan::DOMAINS, 'aiDataScopes' => AiPreparationPlan::SCOPES,
|
||||
'permissions' => OrganizationAccess::PERMISSIONS,
|
||||
'profiles' => $ready ? DB::table('organization_profiles')->where('tenant_id', $actor->tenant_id)->orderBy('name')->get()->map(fn ($p) => ['id' => $p->id, 'name' => $p->name, 'permissions' => json_decode($p->permissions, true, 32, JSON_THROW_ON_ERROR)]) : [],
|
||||
'memberships' => $ready ? DB::table('organization_memberships')->where('tenant_id', $actor->tenant_id)->get(['user_id', 'profile_id', 'maintenance', 'expires_at', 'reason']) : [],
|
||||
@@ -51,6 +59,19 @@ class OrganizationConfigurationController extends Controller
|
||||
'expires_at' => 'nullable|date|after:now', 'reason' => 'required|string|min:10|max:4000'];
|
||||
} elseif ($command === 'rules') {
|
||||
$rules += ['first_limit' => ['required', 'string', 'regex:/^\d{1,12}(\.\d{1,2})?$/D'], 'second_limit' => ['required', 'string', 'regex:/^\d{1,12}(\.\d{1,2})?$/D'], 'includes_tax' => 'required|boolean', 'reason' => 'required|string|min:10|max:4000'];
|
||||
} elseif ($command === 'comparison') {
|
||||
$rules += ['minimum_proposals' => 'required|integer|between:1,100', 'minimum_evaluators' => 'required|integer|between:1,100',
|
||||
'weights' => 'required|array:price,quality,delivery,history,payment', 'reason' => 'required|string|min:10|max:4000'];
|
||||
foreach (array_keys(ComparisonPolicy::DEFAULTS['weights']) as $criterion) {
|
||||
$rules['weights.'.$criterion] = 'required|integer|between:0,100';
|
||||
}
|
||||
} elseif ($command === 'ai_plan') {
|
||||
$rules += app(AiPreparationPlan::class)->rules() + ['reason' => 'required|string|min:10|max:4000'];
|
||||
} elseif ($command === 'intelligence') {
|
||||
$rules += ['procurement_brief' => 'required|boolean', 'people_brief' => 'required|boolean', 'reason' => 'required|string|min:10|max:4000',
|
||||
'api_key' => 'prohibited', 'external_processing_enabled' => 'prohibited'];
|
||||
} elseif ($command === 'tax') {
|
||||
$rules += ['default_tax_rate' => 'required|numeric|decimal:0,2|between:0,100', 'reason' => 'required|string|min:10|max:4000'];
|
||||
} else {
|
||||
abort_unless($command === 'activate', 404);
|
||||
$rules += ['reason' => 'required|string|min:10|max:4000', 'confirm' => 'required|accepted'];
|
||||
@@ -67,6 +88,7 @@ class OrganizationConfigurationController extends Controller
|
||||
|
||||
return ['first_limit' => (string) BigDecimal::of((string) $company->first_limit_minor)->dividedBy(100, 2),
|
||||
'second_limit' => (string) BigDecimal::of((string) $company->second_limit_minor)->dividedBy(100, 2),
|
||||
'includes_tax' => $company->approval_includes_tax, 'provisional' => $company->rules_provisional];
|
||||
'includes_tax' => $company->approval_includes_tax, 'provisional' => $company->rules_provisional,
|
||||
'default_tax_rate' => (string) ($company->default_tax_rate ?? '16.00')];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user