improved ipam

This commit is contained in:
2025-08-26 17:18:58 +02:00
parent 68c4e50b20
commit 177a02c8c8
11 changed files with 324 additions and 71 deletions

View File

@@ -8,7 +8,7 @@ class RMLWorkorderAdminController extends TTCrud
protected array $permissionCheck = ['RMLAdmin'];
protected array $columns = [
// ['key' => 'id', 'text' => 'Auftrag-Nr.', 'table' => ['sortable' => true]],
['key' => 'id', 'text' => 'Auftrag-Nr.', 'table' => ['sortable' => false]],
['key' => 'preordercampaign_id', 'text' => 'Cluster', 'modal' => false, 'table' => ['filter' => 'select']],
['key' => 'preorderInfo', 'text' => 'Kunde / Projekt', 'modal' => false, 'table' => ['sortable' => false]],
['key' => 'rimo_fcp_name', 'text' => 'FCP', 'modal' => false, 'table' => ['sortable' => false]],
@@ -23,7 +23,7 @@ class RMLWorkorderAdminController extends TTCrud
['value' => 'documented', 'text' => 'Dokumentiert', 'icon' => 'fas fa-file-alt text-success'],
['value' => 'completed', 'text' => 'Abgeschlossen', 'icon' => 'fas fa-check-double text-secondary'],
]]],
['key' => 'deadlineDate', 'text' => 'Deadline', 'modal' => false, 'table' => ['filter' => 'date']],
['key' => 'deadlineDate', 'text' => 'Deadline', 'modal' => false, 'table' => ['filter' => 'date', 'sortable' => false]],
];
private function getStatusText(string $statusKey): string {
@@ -105,18 +105,32 @@ class RMLWorkorderAdminController extends TTCrud
}
private function createWorkordersFromPreorders() {
$newPreorders = PreorderModel::searchActive(['status_code' => 220, 'preorder_status_flags_all' => [3,5]]);
if (empty($newPreorders)) return;
$configs = RMLWorkorderTenantConfigModel::getAll();
foreach ($configs as $config) {
$filters = json_decode($config->workorderCreationFilters, true);
if (empty($filters)) continue;
foreach ($newPreorders as $preorder) {
if (!RMLWorkorderModel::getFirst(['preorderId' => $preorder->id])) {
RMLWorkorderModel::create([
'preorderId' => $preorder->id,
'clusterId' => $preorder->preordercampaign_id,
'status' => 'new',
'create' => time(),
'createBy' => $this->user->id
]);
$networks = NetworkModel::getAll(['owner_id' => $config->addressId]);
if(empty($networks)) continue;
$tenantCampaigns = array_map(fn($n) => $n->id, PreordercampaignModel::getAll(['network_id' => array_map(fn($n) => $n->id, $networks)]));
if(empty($tenantCampaigns)) continue;
$filters['preordercampaign_id'] = $tenantCampaigns;
$newPreorders = PreorderModel::searchActive($filters);
if (empty($newPreorders)) continue;
foreach ($newPreorders as $preorder) {
if (!RMLWorkorderModel::getFirst(['preorderId' => $preorder->id])) {
RMLWorkorderModel::create([
'preorderId' => $preorder->id,
'clusterId' => $preorder->preordercampaign_id,
'status' => 'new',
'create' => time(),
'createBy' => 0 // System User
]);
}
}
}
}
@@ -262,9 +276,22 @@ class RMLWorkorderAdminController extends TTCrud
}
protected function getCompaniesAction() {
$tenantId = $this->request->tenantId ?? null;
$companies = RMLWorkorderCompanyModel::getAll([], null, 0, ['key' => 'name', 'order' => 'ASC']);
if ($tenantId) {
$companies = array_filter($companies, function($company) use ($tenantId) {
// RML Infrastruktur GmbH is always available as a fallback/default
if ($company->addressId == 4807 && empty($company->visibleForAddressId)) {
return true;
}
$visibleFor = !empty($company->visibleForAddressId) ? json_decode($company->visibleForAddressId, true) : [];
return in_array($tenantId, $visibleFor);
});
}
$items = array_map(fn($c) => ['value' => $c->id, 'text' => $c->name], $companies);
self::returnJson($items);
self::returnJson(array_values($items)); // re-index
}
protected function addJournalAction() {
@@ -329,7 +356,7 @@ class RMLWorkorderAdminController extends TTCrud
$preorder = new Preorder($workorder->preorderId);
if ($preorder) {
$preorder->status_id = 15; // Assuming 11 is the status for "fiber in building"
$preorder->status_id = 15; // Assuming 15 is the status for "completed"
$preorder->edit_by = $this->user->id;
$preorder->save();
}