feat: lisätiedot-kenttä asiakasyhteyksiin (kytkin, IP, VLAN yms.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 19:09:45 +02:00
parent 18d378be63
commit c6e68fd1e3
3 changed files with 11 additions and 4 deletions

View File

@@ -597,10 +597,11 @@ function parseLiittymat(array $input): array {
'hinta' => floatval($l['hinta'] ?? 0), 'hinta' => floatval($l['hinta'] ?? 0),
'sopimuskausi' => trim($l['sopimuskausi'] ?? ''), 'sopimuskausi' => trim($l['sopimuskausi'] ?? ''),
'alkupvm' => trim($l['alkupvm'] ?? ''), 'alkupvm' => trim($l['alkupvm'] ?? ''),
'lisatiedot' => trim($l['lisatiedot'] ?? ''),
]; ];
} }
if (empty($liittymat)) { if (empty($liittymat)) {
$liittymat[] = ['asennusosoite' => '', 'postinumero' => '', 'kaupunki' => '', 'liittymanopeus' => '', 'hinta' => 0, 'sopimuskausi' => '', 'alkupvm' => '']; $liittymat[] = ['asennusosoite' => '', 'postinumero' => '', 'kaupunki' => '', 'liittymanopeus' => '', 'hinta' => 0, 'sopimuskausi' => '', 'alkupvm' => '', 'lisatiedot' => ''];
} }
return $liittymat; return $liittymat;
} }
@@ -1559,7 +1560,7 @@ switch ($action) {
'elaskuvalittaja' => '', 'elaskuvalittaja' => '',
'ytunnus' => '', 'ytunnus' => '',
'lisatiedot' => $lead['muistiinpanot'] ?? '', 'lisatiedot' => $lead['muistiinpanot'] ?? '',
'liittymat' => [['asennusosoite' => $lead['osoite'] ?? '', 'postinumero' => '', 'kaupunki' => $lead['kaupunki'] ?? '', 'liittymanopeus' => '', 'hinta' => 0, 'sopimuskausi' => '', 'alkupvm' => '']], 'liittymat' => [['asennusosoite' => $lead['osoite'] ?? '', 'postinumero' => '', 'kaupunki' => $lead['kaupunki'] ?? '', 'liittymanopeus' => '', 'hinta' => 0, 'sopimuskausi' => '', 'alkupvm' => '', 'lisatiedot' => '']],
'luotu' => date('Y-m-d H:i:s'), 'luotu' => date('Y-m-d H:i:s'),
]; ];
dbSaveCustomer($companyId, $customer); dbSaveCustomer($companyId, $customer);

7
db.php
View File

@@ -408,6 +408,7 @@ function initDatabase(): void {
"ALTER TABLE customers ADD COLUMN priority_emails TEXT DEFAULT '' AFTER lisatiedot", "ALTER TABLE customers ADD COLUMN priority_emails TEXT DEFAULT '' AFTER lisatiedot",
"ALTER TABLE companies ADD COLUMN enabled_modules TEXT DEFAULT '' AFTER cors_origins", "ALTER TABLE companies ADD COLUMN enabled_modules TEXT DEFAULT '' AFTER cors_origins",
"ALTER TABLE users MODIFY COLUMN role ENUM('superadmin','admin','user') DEFAULT 'user'", "ALTER TABLE users MODIFY COLUMN role ENUM('superadmin','admin','user') DEFAULT 'user'",
"ALTER TABLE customer_connections ADD COLUMN lisatiedot TEXT DEFAULT '' AFTER alkupvm",
]; ];
foreach ($alters as $sql) { foreach ($alters as $sql) {
try { $db->query($sql); } catch (\Throwable $e) { /* sarake on jo olemassa / jo ajettu */ } try { $db->query($sql); } catch (\Throwable $e) { /* sarake on jo olemassa / jo ajettu */ }
@@ -702,6 +703,7 @@ function dbLoadCustomers(string $companyId): array {
'hinta' => (float)($conn['hinta'] ?? 0), 'hinta' => (float)($conn['hinta'] ?? 0),
'sopimuskausi' => $conn['sopimuskausi'] ?? '', 'sopimuskausi' => $conn['sopimuskausi'] ?? '',
'alkupvm' => $conn['alkupvm'] ?? '', 'alkupvm' => $conn['alkupvm'] ?? '',
'lisatiedot' => $conn['lisatiedot'] ?? '',
]; ];
}, $conns); }, $conns);
unset($c['company_id']); unset($c['company_id']);
@@ -755,8 +757,8 @@ function dbSaveCustomer(string $companyId, array $customer): void {
if (!empty($customer['liittymat'])) { if (!empty($customer['liittymat'])) {
foreach ($customer['liittymat'] as $l) { foreach ($customer['liittymat'] as $l) {
_dbExecute(" _dbExecute("
INSERT INTO customer_connections (customer_id, asennusosoite, postinumero, kaupunki, liittymanopeus, hinta, sopimuskausi, alkupvm) INSERT INTO customer_connections (customer_id, asennusosoite, postinumero, kaupunki, liittymanopeus, hinta, sopimuskausi, alkupvm, lisatiedot)
VALUES (?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
", [ ", [
$customer['id'], $customer['id'],
$l['asennusosoite'] ?? '', $l['asennusosoite'] ?? '',
@@ -766,6 +768,7 @@ function dbSaveCustomer(string $companyId, array $customer): void {
$l['hinta'] ?? 0, $l['hinta'] ?? 0,
$l['sopimuskausi'] ?? '', $l['sopimuskausi'] ?? '',
$l['alkupvm'] ?? '', $l['alkupvm'] ?? '',
$l['lisatiedot'] ?? '',
]); ]);
} }
} }

View File

@@ -485,6 +485,7 @@ function showDetail(id) {
<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">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">Alkaen</div><div class="detail-value">${detailVal(l.alkupvm)}</div></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>`; </div>`;
}).join(''); }).join('');
const totalH = liittymat.reduce((s, l) => s + (parseFloat(l.hinta) || 0), 0); const totalH = liittymat.reduce((s, l) => s + (parseFloat(l.hinta) || 0), 0);
@@ -599,6 +600,7 @@ function createLiittymaRow(data = {}, index = 0) {
<option value="36" ${data.sopimuskausi === '36' ? 'selected' : ''}>36 kk</option> <option value="36" ${data.sopimuskausi === '36' ? 'selected' : ''}>36 kk</option>
</select></div> </select></div>
<div class="form-group"><label>Alkaen</label><input type="date" class="l-alkupvm" value="${esc(data.alkupvm || '')}"></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>`; </div>`;
div.querySelector('.btn-remove-row').addEventListener('click', () => { div.remove(); renumberLiittymaRows(); }); div.querySelector('.btn-remove-row').addEventListener('click', () => { div.remove(); renumberLiittymaRows(); });
return div; return div;
@@ -620,6 +622,7 @@ function collectLiittymatFromForm() {
hinta: row.querySelector('.l-hinta').value, hinta: row.querySelector('.l-hinta').value,
sopimuskausi: row.querySelector('.l-sopimuskausi').value, sopimuskausi: row.querySelector('.l-sopimuskausi').value,
alkupvm: row.querySelector('.l-alkupvm').value, alkupvm: row.querySelector('.l-alkupvm').value,
lisatiedot: row.querySelector('.l-lisatiedot').value,
})); }));
} }