Laitetilat: laitelinkit kortteihin + Sijainnit pois yritysasetuksista

Laitetila-laite-yhteys:
- Lisätty laitetila_id -sarake devices-tauluun
- Laite-lomakkeeseen uusi "Laitetila" dropdown (Tekniikka → Laitteet)
- Laitetila-kortit näyttävät laitemäärän ja laitechipit (max 4 + "+N muuta")
- Laitetilan detailnäkymässä taulukko tilan laitteista (nimi, tyyppi, malli, IP, ping)
- dbLoadLaitetilat palauttaa device_count ja devices-listan per laitetila

Yritysasetukset:
- Poistettu Sijainnit-osio yrityksen tiedoista (hallitaan Tekniikka → Sijainnit)
- Sijainnit sub-tab Tekniikassa pysyy ennallaan

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 00:39:45 +02:00
parent 2cacea2a2c
commit 13feb31304
5 changed files with 101 additions and 101 deletions

13
db.php
View File

@@ -614,6 +614,7 @@ function initDatabase(): void {
"ALTER TABLE documents ADD COLUMN folder_id VARCHAR(20) DEFAULT NULL AFTER customer_id",
"ALTER TABLE documents ADD COLUMN max_versions INT DEFAULT 10 AFTER current_version",
"ALTER TABLE document_versions ADD COLUMN content MEDIUMTEXT DEFAULT NULL AFTER mime_type",
"ALTER TABLE devices ADD COLUMN laitetila_id VARCHAR(20) DEFAULT NULL AFTER site_id",
];
foreach ($alters as $sql) {
try { $db->query($sql); } catch (\Throwable $e) { /* sarake on jo olemassa / jo ajettu */ }
@@ -1070,9 +1071,10 @@ function dbDeleteSite(string $siteId): void {
function dbLoadDevices(string $companyId): array {
$devices = _dbFetchAll("
SELECT d.*, s.nimi AS site_name
SELECT d.*, s.nimi AS site_name, lt.nimi AS laitetila_name
FROM devices d
LEFT JOIN sites s ON d.site_id = s.id
LEFT JOIN laitetilat lt ON d.laitetila_id = lt.id
WHERE d.company_id = ?
ORDER BY d.nimi
", [$companyId]);
@@ -1085,11 +1087,11 @@ function dbLoadDevices(string $companyId): array {
function dbSaveDevice(string $companyId, array $device): void {
_dbExecute("
INSERT INTO devices (id, company_id, nimi, hallintaosoite, serial, site_id, funktio, tyyppi, malli, ping_check, lisatiedot, luotu, muokattu, muokkaaja)
VALUES (:id, :company_id, :nimi, :hallintaosoite, :serial, :site_id, :funktio, :tyyppi, :malli, :ping_check, :lisatiedot, :luotu, :muokattu, :muokkaaja)
INSERT INTO devices (id, company_id, nimi, hallintaosoite, serial, site_id, laitetila_id, funktio, tyyppi, malli, ping_check, lisatiedot, luotu, muokattu, muokkaaja)
VALUES (:id, :company_id, :nimi, :hallintaosoite, :serial, :site_id, :laitetila_id, :funktio, :tyyppi, :malli, :ping_check, :lisatiedot, :luotu, :muokattu, :muokkaaja)
ON DUPLICATE KEY UPDATE
nimi = VALUES(nimi), hallintaosoite = VALUES(hallintaosoite), serial = VALUES(serial),
site_id = VALUES(site_id), funktio = VALUES(funktio), tyyppi = VALUES(tyyppi),
site_id = VALUES(site_id), laitetila_id = VALUES(laitetila_id), funktio = VALUES(funktio), tyyppi = VALUES(tyyppi),
malli = VALUES(malli), ping_check = VALUES(ping_check), lisatiedot = VALUES(lisatiedot),
muokattu = VALUES(muokattu), muokkaaja = VALUES(muokkaaja)
", [
@@ -1099,6 +1101,7 @@ function dbSaveDevice(string $companyId, array $device): void {
'hallintaosoite' => $device['hallintaosoite'] ?? '',
'serial' => $device['serial'] ?? '',
'site_id' => !empty($device['site_id']) ? $device['site_id'] : null,
'laitetila_id' => !empty($device['laitetila_id']) ? $device['laitetila_id'] : null,
'funktio' => $device['funktio'] ?? '',
'tyyppi' => $device['tyyppi'] ?? '',
'malli' => $device['malli'] ?? '',
@@ -1950,6 +1953,8 @@ function dbLoadLaitetilat(string $companyId): array {
$tilat = _dbFetchAll("SELECT * FROM laitetilat WHERE company_id = ? ORDER BY nimi", [$companyId]);
foreach ($tilat as &$t) {
$t['file_count'] = (int)_dbFetchScalar("SELECT COUNT(*) FROM laitetila_files WHERE laitetila_id = ?", [$t['id']]);
$t['device_count'] = (int)_dbFetchScalar("SELECT COUNT(*) FROM devices WHERE laitetila_id = ? AND company_id = ?", [$t['id'], $companyId]);
$t['devices'] = _dbFetchAll("SELECT id, nimi, tyyppi, malli, hallintaosoite, ping_status FROM devices WHERE laitetila_id = ? AND company_id = ? ORDER BY nimi", [$t['id'], $companyId]);
}
return $tilat;
}