NetAdmin: Gateway-kenttä, IPAM-integraatio VLAN/IP-tietoihin

- Lisää Gateway-sarake ja -valitsin NetAdmin-näkymään (devices-linkitys)
- VLAN ja IP näytetään IPAM:sta automaattisesti asiakkaan nimellä
- Muokkausmodaalissa asiakkaan IPAM VLANit/IP:t näkyvät ensimmäisinä
- DB: gateway_device_id LEFT JOIN devices, IPAM-enrichment API:ssa

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 11:09:52 +02:00
parent 6c38ba7bcb
commit 70bd095b24
5 changed files with 145 additions and 11 deletions

39
api.php
View File

@@ -4384,12 +4384,33 @@ switch ($action) {
$vlans = array_values(array_filter($ipamAll, fn($e) => $e['tyyppi'] === 'vlan'));
$ips = array_values(array_filter($ipamAll, fn($e) => $e['tyyppi'] === 'ip' || $e['tyyppi'] === 'subnet'));
// Rikasta liittymädata laitetiedoilla
// Rikasta liittymädata laitetiedoilla ja IPAM-tiedoilla
// Rakenna IPAM-lookup asiakkaan nimen perusteella
$ipamByCustomer = [];
foreach ($ipamAll as $entry) {
$asiakas = $entry['asiakas'] ?? '';
if ($asiakas) {
$ipamByCustomer[$asiakas][] = $entry;
}
}
foreach ($connections as &$conn) {
$deviceName = $conn['laite'] ?? '';
if ($deviceName && isset($deviceMap[$deviceName])) {
$conn['device_info'] = $deviceMap[$deviceName];
}
// Auto-populate VLAN ja IP IPAMista asiakkaan nimen perusteella
$custName = $conn['customer_name'] ?? '';
$ipamEntries = $ipamByCustomer[$custName] ?? [];
$conn['ipam_vlans'] = [];
$conn['ipam_ips'] = [];
foreach ($ipamEntries as $ie) {
if ($ie['tyyppi'] === 'vlan') {
$conn['ipam_vlans'][] = ['vlan_id' => $ie['vlan_id'], 'nimi' => $ie['nimi'], 'site_name' => $ie['site_name'] ?? ''];
} elseif ($ie['tyyppi'] === 'ip' || $ie['tyyppi'] === 'subnet') {
$conn['ipam_ips'][] = ['verkko' => $ie['verkko'], 'nimi' => $ie['nimi'], 'tila' => $ie['tila'], 'site_name' => $ie['site_name'] ?? ''];
}
}
}
echo json_encode([
@@ -4421,6 +4442,22 @@ switch ($action) {
echo json_encode(['error' => 'Liittymää ei löytynyt']);
break;
}
// Lisää IPAM-data asiakkaan nimen perusteella
$ipamAll = dbLoadIpam($companyId);
$custName = $conn['customer_name'] ?? '';
$conn['ipam_vlans'] = [];
$conn['ipam_ips'] = [];
if ($custName) {
foreach ($ipamAll as $ie) {
$asiakas = $ie['asiakas'] ?? '';
if ($asiakas !== $custName) continue;
if ($ie['tyyppi'] === 'vlan') {
$conn['ipam_vlans'][] = ['vlan_id' => $ie['vlan_id'], 'nimi' => $ie['nimi'], 'site_name' => $ie['site_name'] ?? ''];
} elseif ($ie['tyyppi'] === 'ip' || $ie['tyyppi'] === 'subnet') {
$conn['ipam_ips'][] = ['verkko' => $ie['verkko'], 'nimi' => $ie['nimi'], 'tila' => $ie['tila'], 'site_name' => $ie['site_name'] ?? ''];
}
}
}
echo json_encode($conn);
} catch (Exception $e) {
http_response_code(500);