Commit Graph

37 Commits

Author SHA1 Message Date
f913a87b14 Lisää kansion poisto -toiminto dokumenttien hallintaan
- Poisto-nappi (🗑) näkyy kansion päällä hover-tilassa
- Vahvistusikkuna ennen poistoa
- Kansion dokumentit ja alikansiot siirtyvät ylätasolle poistettaessa

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 00:24:01 +02:00
f40b387383 Dokumentit: kokousmuistiot, kansiorakenne, sub-tabit, asiakaslinkkaus
- Uusi dokumenttityyppi "kokousmuistio" jolla inline tekstieditori (ei tiedostopohjainen)
- document_versions.content -sarake kokousmuistioiden tekstin tallennukseen
- Sub-tabit Dokumentit-välilehdelle (Kaikki / Kokoukset) Tekniikka-mallin mukaan
- Kansiorakenne: document_folders-taulu, kansionavigaatio breadcrumbsilla
- Uudet API-endpointit: document_folders, document_folder_save/delete, document_content_save, document_move
- Asiakasprofiilin Dokumentit-osio: näyttää linkitetyt dokumentit + pikanapit luontiin
- Asiakasprofiilista voi avata dokumentin suoraan tai luoda uuden linkitettynä asiakkaaseen

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:19:05 +02:00
1587d85902 Kehitysehdotus-nappi fixed-positioon oikeaan alakulmaan
Nappi näkyy nyt aina ruudun oikeassa alakulmassa kelluvana
painikkeena (position: fixed), ei enää piilossa footerissa.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:17:17 +02:00
b4f687acb1 Kehitysehdotus-nappi footeriin
💡-nappi sivun alareunassa avaa kehitysehdotuslomakkeen suoraan
(navigoi todo/features-välilehdelle ja avaa uuden ehdotuksen).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:14:03 +02:00
f05313530f NetAdmin-moduuli: liittymien listaus ja haku
Kokoaa kaikki asiakkaiden liittymät yhteen näkymään haulla ja suodattimilla.
Sarakkeet: asiakas, osoite, kaupunki, nopeus, VLAN, laite, portti, IP, hinta.
Suodattimet: kaupunki, nopeus, laite. Laitetietojen ping-status näkyvissä.
Klikkaus avaa asiakkaan muokkaukseen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:39:24 +02:00
e6fa65165e Versioiva dokumentinhallinta + Laitetilat-moduuli
Dokumentit: versioiva tiedostonhallinta asiakkaille (sopimukset, laskut, ohjeet).
Sisältää versiohistorian, tiedostojen latauksen/palautuksen ja asiakas-suodatuksen.

Laitetilat: laitetilojen hallinta kuvagallerialla ja tiedostolistauksella.
Sisältää korttipohjaisen listanäkymän, kuvien esikatselun ja tiedostojen hallinnan.

Molemmat moduulit: 4 DB-taulua, 14 API-endpointtia, täysi CRUD, tiedostoupload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:18:32 +02:00
093f40ac09 Osatehtävät (subtaskit) TODO-tehtäviin
Uusi todo_subtasks-taulu + 3 API-endpointtia (add/toggle/delete).
Tehtävän lukunäkymässä checkbox-lista osatehtäville, lisäys
Enter-näppäimellä tai Lisää-napilla. Valmiit yliviivataan.
Tehtävälistassa näkyy edistyminen (esim. ☑ 2/5).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 14:45:47 +02:00
40879b3db1 Deadline-sarake ekaksi tehtävälistassa, käynnissä-rivit vihreällä
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:39:40 +02:00
e3891463e9 Tehtäviin Tyyppi-kenttä (tekniikka, laskutus, myynti, asennus, muu)
Uusi category-sarake todosiin. Näkyy listassa badgena, lomakkeessa
dropdownina ja lukunäkymässä. Tyypillä voi myös suodattaa listaa.
Värikoodatut badget kullekin tyypille.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:35:17 +02:00
46b40cfc83 TODO-listaus tauluriveinä korttien sijaan, deadline-lajittelu
Tehtävät ja kehitysehdotukset näytetään nyt taulukkoriveinä
(kuten tukitiketit) kortti-gridin sijaan. Tehtävät lajitellaan
deadlinen mukaan (lähimmät ensin), valmiit loppuun. Myöhästyneet
rivit punaisella ja pian erääntyvät keltaisella taustalla.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:26:43 +02:00
4a1dccb6ff Uusi TODO-moduuli: Tehtävät + Kehitysehdotukset + Ajanseuranta
Talon sisäinen tehtävienhallinta kahdella alatabilla:

Tehtävät (admin luo):
- Prioriteetti (normaali/tärkeä/kiireellinen), status, deadline
- Vastuuhenkilö-osoitus, inline-muokkaus lukunäkymässä
- Aikakirjaukset: pvm, tunnit, kuvaus - kaikki voivat kirjata
- Myöhästyneet = punainen reunus, lähestyvät = keltainen
- Kommentointi kaikille käyttäjille

Kehitysehdotukset (kaikki voivat luoda):
- Status: ehdotettu → harkinnassa → toteutettu/hylätty (admin muuttaa)
- Kommentointi kaikille
- Ehdottaja voi muokata omia

Tietokanta: 3 taulua (todos, todo_comments, todo_time_entries)
API: 10 endpointtia oikeustarkistuksineen
Frontend: Sub-tab navigointi, kortti-grid, 3-näkymämalli per alatabi

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:14:53 +02:00
ec86263c5c Ohjeiden kuvat oletuksena max 400px, klikkaa suurentaa lightboxissa
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:51:08 +02:00
42b815116b Ohjeet: screenshot-upload paste & drag-drop + kuva-lightbox
Screenshottien lisääminen ohjeisiin nyt helpompaa:
- Ctrl+V / Cmd+V: liitä kuvakaappaus suoraan leikepöydältä editoriin
- Drag & drop: raahaa kuvatiedostoja suoraan textarea-editoriin
- Upload-placeholder näkyy latauksen aikana (![Ladataan: ...]())
- Vihjeet editorin alla kertovat käytettävissä olevat tavat
- Kuva-lightbox: klikkaa kuvaa lukunäkymässä → avautuu isona
- Kuvien hover-efekti (zoom-in kursori, kevyt varjo)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:48:21 +02:00
7c4060bfa8 Ohjeet-moduuli: Confluence-tyylinen tietopankki asiakaspalvelijoille
Uusi moduuli "Ohjeet" jossa ylläpitäjä voi kirjoittaa ohjeita
asiakaspalvelijoille miten asioita tehdään.

Ominaisuudet:
- Korttipohjainen listanäkymä (grid) hakutoiminnolla ja kategoriasuodatuksella
- Markdown-editori toolbarilla (B, I, H2, H3, listat, linkit, koodi, lainaukset)
- Esikatselu-toggle muokkausnäkymässä
- Artikkelien lukunäkymä renderoitulla Markdownilla
- Kategorioiden hallinta (lisää/poista)
- Tagit ja kiinnitys (pinned) -toiminto
- Oikeushallinta: kaikki lukevat, admin luo/muokkaa/poistaa
- Moduuli näkyy/piiloutuu yrityskohtaisista asetuksista
- Muutokset kirjautuvat muutoslokiin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:19:00 +02:00
44053d27f2 IPAM: duplikaatti-IP-tarkistus, vapaat lohkot, asiakas-kentän poisto + varattu oletus
- Duplikaatti-IP/verkko -tarkistus: estää saman verkko-osoitteen lisäämisen kahdesti
- Vapaan tilan näyttö: kun subnet avataan, näytetään vapaat osoitelohkot lasten välissä (vihreä "Vapaa"-rivi)
- Asiakas-kenttä poistettu IPAM-näkymästä (taulukot, lomake, haku)
- Varattu oletustilaksi verkkoa/VLANia lisättäessä

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:50:18 +02:00
7222f817ab IPAM: IPv6-tuki + subnetin käyttöaste-laskuri
- parseNetwork() ja isSubnetOf() tukevat nyt IPv4 ja IPv6 (BigInt)
- IPv6 verkot (esim. 2001:db8::/32) sijoittuvat puuhierarkiaan
- Subnetin kohdalla näytetään käyttöaste: esim. "3/256" kertoo
  kuinka monta alisubnettia on käytössä vs kapasiteetti
- Ei-parsittavat osoitteet näytetään puun juuressa

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:36:11 +02:00
565a7b6ab3 IPAM: Hierarkkinen puunäkymä + VLANit erilleen
- Subnetit ja IP:t näytetään hierarkkisena puuna jossa pienemmät
  verkot menevät isomman sisään (esim. /24 → /16 → /8)
- Expand/collapse klikkaamalla ▶/▼ ikonia
- Drill-down: poraudu verkon sisään → -nuolella, breadcrumb ylhäällä
- VLANit erotettu omaksi luetteloksi verkkojen alapuolelle
- Omat "Lisää verkko/IP" ja "Lisää VLAN" -napit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:13:53 +02:00
417728683c Piilota asiakashinnat oletuksena + näytä sopimuksen jäljellä oleva aika
Hinnat:
- Asiakastaulukon hinnat blurrattu oletuksena (privacy)
- Hinta/kk -otsikossa silmä-checkbox jolla saa hinnat näkyviin/piiloon
- Blur pätee myös asiakaskortin detail-näkymään

Sopimuskausi:
- Näyttää jäljellä olevan ajan sulkeissa: "36 kk (30 kk jäljellä)"
- Päättyneet sopimukset punaisella: "36 kk (päättynyt)"
- Aloituspäivä poistettu luettelonäkymästä (näkyy detail-kortissa)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:24:38 +02:00
f6e11f8426 feat: oma profiili -toiminto + placeholder-siivous + poista fix-skriptit
- Lisätty "Oma profiili" -nappi headeriin (⚙ + nimen klikkaus)
- Profiili-modaali: muokkaa nimi, sähköposti, salasana, allekirjoitukset
- Uusi profile_update API-endpoint (vaatii vain kirjautumisen)
- check_auth palauttaa nyt myös email-kentän
- Siivottu kaikki yrityskohtaiset placeholder-tekstit geneerisiksi
  (cuitunet.fi → yritys.fi, Kauppakatu → Esimerkkikatu, jne.)
- Poistettu väliaikaiset fix_role.php ja fix_saatavuus.php

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:38:32 +02:00
9140c912cd feat: Tekniikka-moduuli sub-tabeilla (Laitteet + Sijainnit + IPAM)
- Laitteet-tabi → Tekniikka (sub-tabit: Laitteet, Sijainnit, IPAM)
- Sijainnit siirretty omaksi taulukkonäkymäksi (+ "Lisää sijainti" laitteiden yhteydessä)
- Uusi IPAM-näkymä: IP-osoitteet, subnetit ja VLANit hallintaan
- IPAM: tyyppi (subnet/vlan/ip), verkko, VLAN-nro, sijainti, tila, asiakas
- Sub-tab-tyylit ja logiikka
- Yhteensopivuus: vanha 'devices' moduuli → 'tekniikka'

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:18:56 +02:00
a135aaaaef feat: moduulijärjestelmä + käyttäjäroolit + suhteellinen aika
- Moduulijärjestelmä: yrityskohtaiset tabit (customers, support, leads, archive,
  changelog, settings) valittavissa checkboxeina yrityksen asetuksissa
- Käyttäjäroolit: superadmin (pääkäyttäjä), admin (yritysadmin), user (käyttäjä)
  - Superadmin: kaikki oikeudet kuten ennen
  - Yritysadmin: muokkaa oman yrityksen asetuksia, moduuleita, postilaatikoita
  - Käyttäjä: peruskäyttö ilman hallintaoikeuksia
- Päivitetty-kenttä näyttää suhteellista aikaa (15min sitten, 2h sitten, 3pv sitten)
- DB: enabled_modules sarake companies-tauluun, role ENUM laajennettu
- Automaattinen migraatio: vanhat admin → superadmin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:42:07 +02:00
8485da8cbf feat: ticket reply improvements + priority + templates + Telegram
Reply form:
- Mailbox/sender selection dropdown (choose which email to reply from)
- CC field (auto-filled from incoming email CC, editable)
- Reply templates dropdown (quick insert pre-made responses)

Priority system:
- Three levels: normaali, tärkeä, urgent
- Priority dropdown in ticket detail view
- Priority-based sorting (urgent/tärkeä always on top)
- Visual indicators in ticket list (colored rows, emoji badges)
- Priority emails: per-company email list that auto-sets "tärkeä"

Response templates:
- CRUD management in Settings tab
- Dropdown selector in reply form
- Templates insert into textarea

Telegram alerts:
- Bot token + chat ID configuration in Settings
- Test button to verify connection
- Auto-alert on urgent tickets (both manual and from email fetch)
- Alert on priority email matches

Database changes:
- New tables: reply_templates, customer_priority_emails
- New columns: tickets.cc, tickets.priority
- ALTER TABLE migration in initDatabase()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:42:05 +02:00
351ed70c6d ui: move theme color to nav tab bar, white header
Header is now white with neutral text colors.
Nav tab bar uses primary-color background with white text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:24:47 +02:00
caf0ce8aa2 ui: white header bar with primary color accents
Changed header from colored gradient background to clean white
with primary-color text, border-bottom accent line, and updated
button styles. Logos now display nicely against white background.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:15:43 +02:00
095dc90b6f White-label multi-domain tuki (Noxus Intra)
- CSS-muuttujat: kaikki kovakoodatut #0f3460/#16213e korvattu var(--primary-color)/var(--primary-dark)
- Uudet API-endpointit: branding (julkinen, domain-pohjainen), company_logo, company_logo_upload
- Domain-pohjainen brändäys: HTTP_HOST → yrityksen domains-arrayn matchaus
- Login: domain asettaa oletusyrityksen sessioon
- check_auth: palauttaa branding-objektin (primary_color, subtitle, logo_url)
- company_create/update: käsittelee domains, primary_color, subtitle, logo_file
- Dynaaminen login-sivu, header ja footer (logo, nimi, alaotsikko, värit)
- JS: loadBranding(), applyBranding(), yritysvaihdon brändäyspäivitys
- Admin-paneeli: brändäysasetukset (logo-upload, väri, alaotsikko, domainit)
- Git-repo siirretty intra.noxus.fi:hin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 13:44:49 +02:00
11e1103eb4 Siirrä yritysvalitsin header-yläpalkkiin nappien joukkoon
Dropdown siirretty header-left → header-right, kompaktimpi nappikoko
headerissa, flex-wrap tukee kapeampia näyttöjä.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:46:49 +02:00
c34b5a2c26 Add multi-tenant support with per-company data isolation
Implement full multi-company architecture:
- Per-company directory structure (data/companies/{id}/)
- Automatic migration from single-tenant to multi-tenant
- Company management admin tab (create, edit, delete companies)
- Per-company IMAP mailbox configuration (multiple mailboxes per company)
- User access control per company (companies array on users)
- Company switcher in header (shown when user has access to >1 company)
- Session-based company context with check_auth fallback for old sessions
- Ticket list shows mailbox name instead of sender
- IMAP settings moved from global config to company-specific config
- All data endpoints protected with requireCompany() guard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:04:24 +02:00
562153e040 Add ticket tags system, tag filtering, and auto-close feature
- Fix tickets API endpoint: add type, customer_name, customer_id, tags fields
- Add tags array to ticket data structure with add/remove UI
- Add tag filter input to toolbar and tag column in ticket list
- Add ticket_tags API endpoint for updating tags
- Add set_tags and auto_close_days actions to auto-rules
- Auto-close check runs on ticket list load, closes expired tickets
- Add tag CSS styles with editable tag badges in detail view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 10:32:09 +02:00
91930c9420 Add ticket types, move Asiakaspalvelu tab first, hide closed tickets
- Asiakaspalvelu tab moved to first position in navigation
- Added ticket type field (Laskutus, Tekniikka, Vika, Muu) with
  type filter dropdown and type column in ticket list
- Type selector in ticket detail view with API endpoint
- Closed tickets hidden by default (selectable via "Kaikki tilat")
- Käsittelyssä rows highlighted with green background
- Type badges with color coding per category

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 10:01:29 +02:00
42e3648e3d Add Asiakaspalvelu email ticketing system
IMAP client for fetching emails from asiakaspalvelu@cuitunet.fi,
Freshdesk-style ticket management with status tracking, message
threading, reply/note functionality, and IMAP settings in API tab.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 08:52:00 +02:00
8ba925d3dc Add leads (liidit) tab for tracking potential customers
- New Liidit tab with table, search, add/edit/delete
- Lead fields: company, contact, phone, email, address, city, status, notes
- Status workflow: Uusi → Kontaktoitu → Kiinnostunut → Odottaa toimitusta
- Color-coded status badges
- Detail view with notes display
- "Muuta asiakkaaksi" converts lead to customer with pre-filled data
- Lead CRUD endpoints in api.php with changelog logging
- leads.json added to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:35:04 +02:00
8a07689a1f Add security hardening, captcha login, and password reset via email
- .htaccess: HTTPS enforcement, security headers, block sensitive files
- data/.htaccess: deny all direct access to data directory
- Secure session settings (httponly, secure, strict mode, samesite)
- Rate limiting on login (10 attempts per 15 min per IP)
- Math captcha on login form (server-side validated)
- Password reset via email with token (1 hour expiry)
- Forgot password UI with reset link flow
- Email field added to user management
- Updated .gitignore for reset_tokens.json and login_attempts.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:00:19 +02:00
e4914e9edb Add user management, change log and customer archive
- Multi-user auth with username/password (replaces single password)
- Default admin account created automatically (admin/cuitunet2024)
- User CRUD with admin/user roles (only admin can manage users)
- All customer changes logged with timestamp, user and details
- Customer deletion now archives instead of permanently removing
- Archive view with restore and permanent delete options
- Tab navigation: Asiakkaat, Arkisto, Muutosloki, Käyttäjät
- Protect users.json, changelog.json and archive.json in .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:41:40 +02:00
695d8c6545 Add multiple connections per customer, contract period, and layout redesign
- Refactor data model: each customer now has a liittymat array (auto-migration from old format)
- Add sopimuskausi (1/12/24/36 kk) and alkupvm fields per connection
- Form supports adding/removing multiple connection rows per company
- Add "use same as installation address" checkbox for billing address
- Move stat cards to compact sidebar on the right
- Place search bar above customer table

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:21:31 +02:00
c648c9311c Add file uploads and speed distribution chart
- File upload/download/delete per customer (max 20MB, stored in data/files/)
- Files section shown in customer detail modal
- Speed distribution chart replaces single "top speed" stat
- Bar chart shows all speeds with count, top speed bolded
- Customer delete also cleans up associated files
- data/files/ added to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:05:21 +02:00
127b581a69 Add address fields, e-invoice, stats and auto-backup
- Split address into street, postal code, city (sortable)
- Add billing postal code/city fields
- Add e-invoice address and operator fields
- Add trivia stats (top postal code, top speed, avg price)
- Improved layout with stat cards grid and max-width container
- Sticky header, modal animations, search icon
- Auto-backup on every save (keeps last 30 backups)
- Footer added

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:01:43 +02:00
297ba39c4f Add CuituNet Intra customer management CMS
Password-protected intranet for managing fiber internet customers:
- Customer table (company, address, speed, price)
- Click row to view full details (contact & billing info)
- Add, edit, delete customers
- Search and sortable columns
- Total billing summary
- PHP + vanilla JS + JSON storage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:50:11 +02:00