Yhdistä Sijainnit ja Laitetilat samaksi konseptiksi

Sijainnit (sites) ja Laitetilat olivat käytännössä sama asia.
Nyt kaikki hallitaan Laitetilat-välilehdeltä:
- DB-migraatio kopioi vanhat sites → laitetilat (sama ID säilyy)
- Laitteiden site_id päivitetty automaattisesti laitetila_id:ksi
- IPAM JOINaa nyt laitetilat-taulua sites:n sijaan
- Sijainnit sub-tab poistettu Tekniikasta
- Laiteformissa yksi "Sijainti / Laitetila" dropdown
- Sites API-endpointit poistettu (sites palauttaa laitetilat)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 00:54:03 +02:00
parent 13feb31304
commit 8e9fa76f9c
4 changed files with 45 additions and 211 deletions

47
api.php
View File

@@ -1882,47 +1882,12 @@ switch ($action) {
echo json_encode(['success' => true]);
break;
// ---------- SIJAINNIT (SITES) ----------
// ---------- SIJAINNIT (SITES) — YHDISTETTY LAITETILOIHIN ----------
// sites-endpoint palauttaa nyt laitetilat (taaksepäin yhteensopivuus)
case 'sites':
requireAuth();
$companyId = requireCompany();
echo json_encode(dbLoadSites($companyId));
break;
case 'site_save':
requireAdmin();
$companyId = requireCompany();
if ($method !== 'POST') break;
$input = json_decode(file_get_contents('php://input'), true);
$site = [
'id' => $input['id'] ?? generateId(),
'nimi' => trim($input['nimi'] ?? ''),
'osoite' => trim($input['osoite'] ?? ''),
'kaupunki' => trim($input['kaupunki'] ?? ''),
];
if (empty($site['nimi'])) {
http_response_code(400);
echo json_encode(['error' => 'Sijainnin nimi vaaditaan']);
break;
}
dbSaveSite($companyId, $site);
dbAddLog($companyId, currentUser(), 'site_save', $site['id'], $site['nimi'], (isset($input['id']) ? 'Muokkasi' : 'Lisäsi') . ' sijainnin');
echo json_encode($site);
break;
case 'site_delete':
requireAdmin();
$companyId = requireCompany();
if ($method !== 'POST') break;
$input = json_decode(file_get_contents('php://input'), true);
$id = $input['id'] ?? '';
// Hae nimi logitusta varten
$sites = dbLoadSites($companyId);
$siteName = '';
foreach ($sites as $s) { if ($s['id'] === $id) { $siteName = $s['nimi']; break; } }
dbDeleteSite($id);
dbAddLog($companyId, currentUser(), 'site_delete', $id, $siteName, 'Poisti sijainnin');
echo json_encode(['success' => true]);
echo json_encode(dbLoadLaitetilat($companyId));
break;
// ---------- LAITTEET (DEVICES) ----------
@@ -1943,7 +1908,7 @@ switch ($action) {
'nimi' => trim($input['nimi'] ?? ''),
'hallintaosoite' => trim($input['hallintaosoite'] ?? ''),
'serial' => trim($input['serial'] ?? ''),
'site_id' => $input['site_id'] ?? null,
'site_id' => null,
'laitetila_id' => $input['laitetila_id'] ?? null,
'funktio' => trim($input['funktio'] ?? ''),
'tyyppi' => trim($input['tyyppi'] ?? ''),
@@ -1979,7 +1944,7 @@ switch ($action) {
// Päivitä olemassa oleva: merkitse varatuksi laitteelle
$existing['tila'] = 'varattu';
$existing['nimi'] = $device['nimi'];
$existing['site_id'] = $device['site_id'];
$existing['site_id'] = $device['laitetila_id'];
$existing['muokattu'] = date('Y-m-d H:i:s');
$existing['muokkaaja'] = currentUser();
dbSaveIpam($companyId, $existing);
@@ -1991,7 +1956,7 @@ switch ($action) {
'nimi' => $device['nimi'],
'verkko' => $cleanIp,
'vlan_id' => null,
'site_id' => $device['site_id'],
'site_id' => $device['laitetila_id'],
'tila' => 'varattu',
'asiakas' => '',
'lisatiedot' => 'Automaattinen varaus laitteelta: ' . $device['nimi'],