feat: asiakasyhteyksiin erilliset VLAN/laite/portti/IP-kentät

Korvattu yleinen lisätiedot-tekstikenttä neljällä erillisellä
kentällä (vlan, laite, portti, ip) jotta tiedoista voi hakea
ja filtteröidä tarkemmin.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 19:26:22 +02:00
parent c6e68fd1e3
commit 03655956ac
3 changed files with 37 additions and 11 deletions

View File

@@ -307,7 +307,11 @@ function renderTable() {
(l.asennusosoite || '').toLowerCase().includes(query) ||
(l.postinumero || '').toLowerCase().includes(query) ||
(l.kaupunki || '').toLowerCase().includes(query) ||
(l.liittymanopeus || '').toLowerCase().includes(query)
(l.liittymanopeus || '').toLowerCase().includes(query) ||
(l.vlan || '').toLowerCase().includes(query) ||
(l.laite || '').toLowerCase().includes(query) ||
(l.portti || '').toLowerCase().includes(query) ||
(l.ip || '').toLowerCase().includes(query)
);
return c.yritys.toLowerCase().includes(query) ||
(c.yhteyshenkilö || '').toLowerCase().includes(query) || inL;
@@ -484,8 +488,11 @@ function showDetail(id) {
<div class="detail-item"><div class="detail-label">Hinta / kk</div><div class="detail-value price-cell">${formatPrice(l.hinta)}</div></div>
<div class="detail-item"><div class="detail-label">Sopimuskausi</div><div class="detail-value">${l.sopimuskausi ? l.sopimuskausi + ' kk' : '-'}</div></div>
<div class="detail-item"><div class="detail-label">Alkaen</div><div class="detail-value">${detailVal(l.alkupvm)}</div></div>
<div class="detail-item"><div class="detail-label">VLAN</div><div class="detail-value">${detailVal(l.vlan)}</div></div>
<div class="detail-item"><div class="detail-label">Laite</div><div class="detail-value">${detailVal(l.laite)}</div></div>
<div class="detail-item"><div class="detail-label">Portti</div><div class="detail-value">${detailVal(l.portti)}</div></div>
<div class="detail-item"><div class="detail-label">IP</div><div class="detail-value">${detailVal(l.ip)}</div></div>
</div>
${l.lisatiedot ? `<div class="detail-item" style="margin-top:0.25rem"><div class="detail-label">Lisätiedot</div><div class="detail-value" style="white-space:pre-line">${esc(l.lisatiedot)}</div></div>` : ''}
</div>`;
}).join('');
const totalH = liittymat.reduce((s, l) => s + (parseFloat(l.hinta) || 0), 0);
@@ -600,7 +607,10 @@ function createLiittymaRow(data = {}, index = 0) {
<option value="36" ${data.sopimuskausi === '36' ? 'selected' : ''}>36 kk</option>
</select></div>
<div class="form-group"><label>Alkaen</label><input type="date" class="l-alkupvm" value="${esc(data.alkupvm || '')}"></div>
<div class="form-group full-width"><label>Lisätiedot <small style="font-weight:normal;color:var(--text-light)">(kytkin, portti, IP, VLAN yms.)</small></label><textarea class="l-lisatiedot" rows="2" placeholder="esim. SW1 port Gi0/1, IP 10.0.0.5, VLAN 100">${esc(data.lisatiedot || '')}</textarea></div>
<div class="form-group"><label>VLAN</label><input type="text" class="l-vlan" value="${esc(data.vlan || '')}" placeholder="esim. 100"></div>
<div class="form-group"><label>Laite</label><input type="text" class="l-laite" value="${esc(data.laite || '')}" placeholder="esim. SW-CORE-01"></div>
<div class="form-group"><label>Portti</label><input type="text" class="l-portti" value="${esc(data.portti || '')}" placeholder="esim. Gi0/1"></div>
<div class="form-group"><label>IP</label><input type="text" class="l-ip" value="${esc(data.ip || '')}" placeholder="esim. 10.0.0.5"></div>
</div>`;
div.querySelector('.btn-remove-row').addEventListener('click', () => { div.remove(); renumberLiittymaRows(); });
return div;
@@ -622,7 +632,10 @@ function collectLiittymatFromForm() {
hinta: row.querySelector('.l-hinta').value,
sopimuskausi: row.querySelector('.l-sopimuskausi').value,
alkupvm: row.querySelector('.l-alkupvm').value,
lisatiedot: row.querySelector('.l-lisatiedot').value,
vlan: row.querySelector('.l-vlan').value,
laite: row.querySelector('.l-laite').value,
portti: row.querySelector('.l-portti').value,
ip: row.querySelector('.l-ip').value,
}));
}