Commit Graph
311 Commits
Author SHA1 Message Date
Dasko 263aefe9fc README: usklađeno sa stvarnim stanjem — servis modul, troškovi, usluge, izveštaji, HTMX 2026-06-24 22:15:49 +02:00
Dasko 07666b30c9 README: Teron mock server sekcija, fiskalizacija u toku 2026-06-24 22:13:15 +02:00
Dasko 65dd976bb4 Docker: uklonjen example compose (osetljive informacije) 2026-06-24 22:10:06 +02:00
Dasko 0fb573552d Docker: interna mreža između ntech i teron-mock, port 4566 nije izložen 2026-06-24 22:08:50 +02:00
Dasko 23c4c7ded0 Docker: primer compose fajla za README (ntech + teron-mock) 2026-06-24 22:07:57 +02:00
Dasko c30d4cb34a Teron mock: jedan compose fajl, named volume za podatke 2026-06-24 22:06:34 +02:00
Dasko 18b4199d0a Teron mock: docker-compose za Dockge (named volume) 2026-06-24 22:05:27 +02:00
Dasko 1a93fc739d Teron mock: Dockerfile, requirements.txt i docker-compose za Docker deploy 2026-06-24 22:03:06 +02:00
Dasko 550750fe88 Fisk mock server: preuredjen za Teron API (port 4566, Teron putanje i format odgovora) 2026-06-24 21:23:31 +02:00
Dasko 23173e79b2 Fisk mock server: PDV obračun iz bruto cene po poreskoj oznaci 2026-06-24 20:42:10 +02:00
Dasko 37801fca2a Servis predlog delovi: lager integracija, brisanje predloženih delova, odluka klijenta (migracija 079) 2026-06-24 19:39:30 +02:00
Dasko d6b3e7149c Javno odobravanje predloga: Prihvati/Odbij sa komentarom
- Dodati handleri za prihvatanje i odbijanje predloga sa mobilnog
- Prihvatanje: predložene stavke prelaze u ugrađene (predlozeno 1→0)
- Odbijanje: brišu se predložene stavke
- Komentar klijenta uz odluku (textarea na mobilnom, prikaz u detaljima)
- Oznaka na kanbanu za naloge sa predlozima (narandžasta tačka + leva ivica)
- Oznaka na kanbanu za poruku klijenta (💬 dugme, tap za prikaz)
- Spojene kartice Radovi/Predložene usluge i Delovi/Predloženi delovi
- Auto-detekcija predlozeno=1 kad status != Primljeno
- Obrisana Otključaj/Zaključaj dugmad
- Ukupno sa predlogom na javnoj status stranici
- CSRF middleware premešten u zaštićenu grupu
- Migracija 078: komentar_klijenta
- Repo metode: ObrisiPredlozene, AzurirajKomentarKlijenta
- Popravljeno: 405 na odbij, duple rute, razmak između kartica
2026-06-24 02:41:06 +02:00
Dasko af33d5c20d Dashboard: klikabilne stavke u kartici Poslednji servisi (link ka detaljima naloga) 2026-06-23 23:01:29 +02:00
Dasko 7aa15c7594 Servis: modal Preuzeto sa naplatom i avansom pri preuzimanju 2026-06-23 23:01:10 +02:00
Dasko 541000d1c7 Servis: tok dijagnostike/popravke, kartice Utvrđeni kvar i Urađeno, cena dijagnostike
- Cena dijagnostike u Podešavanja → Servis; na nalogu se predlaže iz podešavanja
- Odbijanje popravke: status Završeno + naplata samo dijagnostike (popravka_odbijena),
  sklanjaju se Radovi/Delovi, Ukupno = dijagnostika
- Kartica Nalaz dijagnostike preimenovana u Utvrđeni kvar; editabilna samo u dijagnostici, kasnije readonly
- Nova kartica Urađeno (polje uradjeno) — upis dok je U popravci/Čeka delove, posle readonly
- Dugmad statusa: Završi u U popravci; promena statusa osvežava ceo sadržaj
- Predračun dostupan od Primljeno; radni nalog u U dijagnostici/Čeka delove
- Dropdown radova izostavlja već dodate usluge; kartica radova se osvežava pri izmeni
- Javni status: badge U dijagnostici, prikaz utvrđenog kvara, wordwrap naziva u tabeli
- Štampa: prelom između stavki, ponavljanje zaglavlja, završni blok bez preloma
2026-06-23 22:21:12 +02:00
Dasko 941d60fc4b Servis: logo na dokumentima, jedinstveno 3-kolonsko zaglavlje, podesiva QR adresa, javni status
- Logo na dokumentima ako je ukljucen prikaz loga; helper logoZaDokument
- Jedinstveno zaglavlje (revers/predracun/otpremnica/radni nalog): firma | klijent | barkod+broj+datumi+QR; dodati MB i barkod
- Revers: QR u sekciju Uredjaj desno, bez JMBG, Primio bez imena servisera
- Podesavanja Opste: auto-snimanje sve 3 sekcije (marker _sekcija_firma za checkbox loga)
- Podesiva adresa za QR (qr_bazni_url) za pristup sa telefona / Caddy HTTPS
- Javni status: token se gasi po preuzimanju; predvidjeni datum zavrsetka, garancija i napomena iz baze; nova kartica Radovi i delovi sa procenom
2026-06-23 14:38:26 +02:00
Dasko 29cab6e29b Servis: revers i predracun (iz stavki radova+delova), uslovi servisa u podesavanjima, status U dijagnostici
- Revers (servis_revers.html) - dokument prijema bez cena, sa QR, oscecenjima i uslovima servisa
- Predracun (servis_predracun.html) - procena iz stavki radova i delova, klauzula, dugme uvek dostupno
- Podesavanja > Servis: kartica Uslovi servisa (servis_uslovi + servis_klauzula_predracuna), auto-snimanje, bez dugmeta Sacuvaj
- Genericki data-autosave obrazac u base.html
- Status U dijagnostici: konstanta + kanban kolona + dugme Pocni dijagnostiku (vidljivo u Primljeno)
2026-06-23 13:23:07 +02:00
Dasko f97538c2ba Servis: radni nalog za servisera, hover napomena, responsive popravke
- Nalepnica: uklonjen QR (ostaje na uređaju u servisu, klijent nema šta da skenira);
  oslobođen prostor iskorišćen za telefon klijenta i datume (prijem + rok)
- Radni nalog: obrisani „servis_stampa" i „servis_predracun"; nov interni
  „servis_radni_nalog" (ruta /servis/{id}/radni-nalog) sa podacima samo za
  servisera, bez cena, sa barkodom i praznim poljima (dijagnoza, urađen rad, potpis)
- Forma „Izmeni nalog": kartice „Serviser" i „Avans i napomena" spojene u jednu
  „Serviser, avans i napomena"
- Servis kanban: dugme uz SN broj otvara internu napomenu (hover na desktopu,
  tap→focus na mobilnom); okidač na omotaču da napomena ne treperi
- Detalji naloga (responsive): forme „Dodaj rad/deo" izvučene iz inline grid-a u
  klase + @media (2 kolone na telefonu); tabele radova/delova u tabela-skrol
2026-06-23 11:08:58 +02:00
Dasko 79dc9cd949 Servis: Code128 barkod na vrhu nalepnice (laserski skener) 2026-06-23 02:54:42 +02:00
Dasko deecdebd42 Servis: nalepnica za uređaj (70×40 mm) sa QR kodom 2026-06-23 02:46:36 +02:00
Dasko 6f1d63a3ca Servis: garancija kao trajanje u danima + Tehničar → Serviser
- Garancija se u detaljima prikazuje kao trajanje na srpskom (npr. „1 mesec i 15 dana",
  „2 meseca", „20 dana"); helper garancijaTekst + srpska deklinacija
- Nova kolona garancija_dana (trajanje od završetka); garancija_do ostaje za fazu Završeno
- Modal: textbox „Trajanje garancije (dana)" umesto kalendara; Podrazumevano i Bez garancije
- Nova ruta/handler AzurirajGarancijaDana; forma izmene čuva trajanje (ne briše)
- Podešavanja → Servis: rok garancije prebačen iz meseci u dane (servis_garancija_dana, default 60)
- „Garancija do" uklonjena iz forme Izmeni nalog (kod arhiviran u docs/garancija-buduca-logika.md);
  SacuvajIzmenaNaloga čuva garanciju iz baze da je auto-snimanje ne pregazi
- Prikazni tekst „Tehničar" → „Serviser" svuda (identifikatori Tehnicar/tehnicar_id netaknuti)
2026-06-23 02:35:49 +02:00
Dasko 7b4f3ea355 Servis: popup izmena polja u detaljima (predviđen datum, garancija, tehničar)
- Klik na vrednost otvara modal (obrazac kao „Promeni cenu" u Magacinu);
  snima se na zatvaranje modala, samo ako je vrednost promenjena (bez dugmeta Sačuvaj)
- Predviđen datum vraćen u bazu kao ručni override (migracija 071); ako nije
  postavljen, prikaz računa izvedeni default (prijem + rok iz podešavanja)
- Nove rute/handleri AzurirajPredvidjenDatum i AzurirajTehnicar
- Garancija usklađena između modala i forme „Izmeni nalog" (isti izgled i logika);
  dugme „Podrazumevano" (prijem + meseci) na oba mesta
- Checkbox „Bez garancije" čita stanje iz baze; odčekiravanjem se u kalendaru
  prikaže datum (garancija iz baze ili podrazumevani)
- Validacija: garancija ne može biti pre datuma prijema (frontend min + backend)
2026-06-23 02:10:43 +02:00
Dasko 8668c3d3e8 Navigacija: hx-boost na sve navigacione linkove (bez bljeska pozadine)
- 'Nazad' linkovi (.nazad-link) i akcioni/ulazni linkovi kroz 38 šablona
  dobili isti hx-boost set kao sidebar (swap #glavni-sadrzaj, bez punog reloda)
- Preskočeni: target=_blank (štampa), brisanje, odjava, već boosted
- Pozadina (html/body) se više ne re-renderuje pri navigaciji → ne trepće
2026-06-23 01:16:55 +02:00
Dasko 69bfaef0d9 Servis: auto-snimanje forme izmene + hx-boost navigacija (bez bljeska)
- Forma Izmeni nalog snima se automatski (change na celoj formi, X-Autosave→204), bez dugmeta Sačuvaj
- Ispravka: trazene_nadogradnje je NOT NULL — slati prazan string umesto NULL
- Iz kartice detalja uklonjeni dropdown statusa i datum završetka
- Forma izmene više ne ubacuje težak JSON svih klijenata (nepotreban u izmeni)
- Navigacioni linkovi (Kategorije, Izmeni, Nazad) dobili hx-boost — swap #glavni-sadrzaj bez punog reloda, pozadina ne trepće
2026-06-23 01:08:14 +02:00
Dasko cd836d09c4 Servis: predviđen datum popravke (prijem + rok iz podešavanja, readonly) 2026-06-22 23:55:20 +02:00
Dasko 4c38897408 Servis: polja Tražene nadogradnje i Napomena klijentu (auto-snimanje) 2026-06-22 19:39:49 +02:00
Dasko 20b161a89d Servis: garancija u formi izmene, kartica Ukupno, povraćaj delova pri brisanju
- Forma izmene: polje Garancija do sa kvačicom Bez garancije, pored Avansa; veći razmak između kartica
- Detalji: kartica Ukupno (usluge + ugrađeni delovi) pre zone za brisanje
- Brisanje naloga vraća ugrađene delove na stanje u magacin (transakcija), čisti potraživane delove
2026-06-22 17:20:45 +02:00
Dasko 5973cd02d7 Servis: pojednostavljena forma Izmeni nalog
Izmeni nalog sada ima samo: Uređaj, Tehničar, Avans, Napomena. Uklonjene
kartice Klijent i Status i datumi (status se menja u detaljima, klijent je
vezan pri prijemu), procena od/do, cena rada (računa se iz radova) i
garancija. Nazad/Odustani vode na detalje naloga. Handler čuva postojeće
vrednosti (status, cene, klijent, garancija, datum završetka) da ih prazna
forma ne pregazi.
2026-06-22 16:47:08 +02:00
Dasko 2e4c0bd769 Servis: garancija u detaljima samo prikaz (ne edit), dugme Arhiva → Preuzeto
Garancija se unosi i menja pri kreiranju naloga, pa je u detaljima sada
samo prikaz. Dugme Arhiva na servis tabli preimenovano u Preuzeto.
2026-06-22 16:29:43 +02:00
Dasko 801f004e2d Servis: zabrana ručnog postavljanja statusa Čeka delove
Čeka delove je automatski status (kad nedostaje deo). Server odbija ručni
ulazak iz bilo kog drugog statusa, a dropdown više ne nudi tu opciju
osim ako je nalog već u njoj.
2026-06-22 16:25:15 +02:00
Dasko 4668c5819a Servis: self-heal pri otvaranju detalja — povuci dostupno stanje u potraživane
Pri otvaranju detalja naloga, ako za potraživani artikal ima stanja na
magacinu, automatski se povlači (delimično ili u celosti) i skida sa lagera.
Hvata sve načine na koje stanje poraste (i brisanje dela, povraćaj prodaje),
ne samo nabavku/izmenu/popis. Dodat test za delimično pokrivanje.
2026-06-22 16:19:19 +02:00
Dasko 1f3d366372 Servis: ispravka logike potraživanih delova (5 bugova)
- BUG 1: pokriveni deo se sada prebacuje u ugrađene delove (servisni_delovi),
  ne samo skida sa magacina — roba više ne nestaje iz evidencije
- BUG 2: DodajDeloNalogu sada atomično (UgradiIliPotrazuj) čita stanje i
  ugrađuje u istoj transakciji — nema TOCTOU, lager ne ide u minus
- BUG 4: direktna izmena količine artikla beleži magacinski trag (korekcija)
- BUG 5: greška pri dodavanju dela se propagira korisniku, ne guta se
- uklonjen mrtav kod (Dodaj, DodajIliUvecaj) sa pogrešnim komentarom o minusu
- migracija 068: cena_komada u potraživanim delovima
- test TestPotrazivaniTok pokriva ceo tok
2026-06-22 16:13:16 +02:00
Dasko 699df4bbf6 Servis: hook potraživanih delova i pri direktnoj izmeni količine artikla 2026-06-22 15:47:05 +02:00
Dasko da2f5766a8 Servis: pokrivanje potraživanih delova skida magacin i otključava nalog 2026-06-22 15:42:22 +02:00
Dasko 51b37e3dcf Servis: nabavka automatski vraća nalog iz Čeka delove na Primljeno 2026-06-22 15:26:12 +02:00
Dasko c9920691c3 Servis: uklonjen status U dijagnostici 2026-06-22 15:23:22 +02:00
Dasko 85cbfc7c3c Servis: otključavanje naloga pri nabavci potraživanih delova
Nakon što nabavka poveća stanje artikla, SacuvajNabavku poziva
ProveriIPocistiZaArtikal koja FIFO briše/smanjuje potraživane redove.
Kada nestanu svi potraživani redovi, nalog izlazi iz Čeka delove.
2026-06-22 15:19:50 +02:00
Dasko 8138ce7115 Servis: potrazivani delovi, garancija, zakljucavanje statusa
Nova tabela servisni_potrazivani_delovi — visak preko stanja ide u potrazivane, lager NE ide u minus. Merge istog artikla na nalogu. Vizuelni indikator prekoracenja u tabeli (crveno). Status zakljucan na Ceka delove dok ima potrazivanih. Garancija: kalendar sa default vrednoscu. data-refresh podrzava vise selektora. Brisanje dela brise i potrazivane. Inline animation:none za AJAX refresh.
2026-06-22 03:17:29 +02:00
Dasko 49bce64f05 Servis delovi: merge istog artikla, poravnanje, reset magacina
Dodaj: isti artikal na istom nalogu sabira kolicinu (bez duplikata). CSS: #deo-umagacinu height 38px — poravnat sa inputima. JS: reset event vraca U magacinu na — nakon dodavanja.
2026-06-22 02:29:07 +02:00
Dasko 49e0220a76 Servis: vizuelni indikator prekoracenja — backorder i crvena boja
Dozvoljen backorder ugradnje delova (lager ide u minus), handler prebacuje nalog u Ceka delove, a JS boji polja crveno kad je kolicina > stanje. CSS klasa .prekoraceno umesto inline stilova.
2026-06-22 02:05:53 +02:00
Dasko 18e3faa25b gofmt -s -w . — formatiranje celog projekta 2026-06-22 02:05:46 +02:00
Dasko d8ba8b7937 Servis: prekoračenje dela prebacuje nalog u Čeka delove
Kad tražena količina dela prelazi magacinsko stanje, deo se ne ugrađuje (lager ne
ide u minus), a nalog se automatski prebacuje u status Čeka delove uz poruku da se
naruči deo.
2026-06-22 01:20:16 +02:00
Dasko d8edaebf43 Servis detalji: osvežavaj samo tabelu, bez animacije i skoka
Dodavanje/brisanje rada i dela osvežava SAMO svoju tabelu (#radovi-spisak /
#delovi-spisak), promena statusa samo zaglavlje (#nalog-zaglavlje) — više se ne
iscrtava cela stranica. Posle osvežavanja ponovo se vežu handleri (ntechInicijalizuj)
pa brisanje opet traži potvrdu i ne ide punim POST-om (nema skoka na vrh). bez-anim
isključuje animaciju kartica i redova pri svakoj radnji; scroll se čuva preko #sadrzaj.
2026-06-22 01:19:58 +02:00
Dasko 862b5f3d7a Servis detalji: select umesto datalist, bez skoka i treperenja
Izbor usluge/artikla je sada običan <select> (otvara se jednim klikom, ima
native pretragu kucanjem, prikazuje samo naziv bez '(N kom)') umesto datalist
combobox-a koji je tražio dvostruki klik. Kategorija filtrira artikle, 'U magacinu'
i kontrole su poravnate u istom redu. Skok na vrh rešen čuvanjem/vraćanjem
scrollTop pravog scroll kontejnera (#sadrzaj), uz bez-anim protiv treptaja.
2026-06-22 01:07:28 +02:00
Dasko 2e01199d73 Servis detalji: glatko osvežavanje bez treperenja i skoka
Sve forme na detaljima (dodavanje/brisanje rada i dela, promena statusa) sada
osvežavaju ceo #glavni-sadrzaj preko data-refresh umesto punog reloda: status
badge se ažurira odmah, nema skoka na vrh ni treptaja pozadine. AJAX grana dodaje
bez-anim reflow (CSS #glavni-sadrzaj.bez-anim) i re-izvršava inline skripte da se
combobox pretrage ponovo povežu nakon zamene.
2026-06-22 00:42:59 +02:00
Dasko 6287a354c1 Servis detalji: radovi (usluge) na nalogu + UX popravke
Nova sekcija Radovi: biraš uslugu iz cenovnika (pretraživ datalist combobox),
cena se predloži ali je možeš izmeniti, količina; zbir radova = cena rada,
ukupno = radovi + delovi. Tabela servis_radovi + repo + handleri.

Combobox pretraga i za artikle (delovi). Skinuta kartica Cene sa detalja.
Dodavanje/brisanje rada i dela osvežava samo svoju tabelu (data-refresh) bez
skoka na vrh i treptaja; data-potvrda sada koristi requestSubmit da prolazi kroz
AJAX logiku. Popravljen CSRF (_csrf) i tip kolone datum kod radova.
2026-06-22 00:17:12 +02:00
Dasko 0728631d44 Magacin: rezervisani prefiksi USL- i TRO- za šifre
Artikal ne sme imati šifru sa prefiksom USL-/TRO- (provera u parseFormuArtikla,
važi za nov i izmenu); kôd kategorije ne sme biti USL/TRO da auto-šifra ne padne
u rezervisani prostor usluga i troškova.
2026-06-21 23:35:14 +02:00
Dasko 8fe727f927 Troškovi: zaseban modul (šifrarnik vrsta troškova)
Opcija 1 — katalog dodatnih troškova (Prevoz, Carina, Ambalaža) koji se vezuju
za radni nalog i ulaze u cenu koštanja. Zaseban entitet: tabela troskovi (šifra
TRO-001…999, naziv, podrazumevana cena, opis), repo, handleri, forma i lista.
Stari tip-filter handler uklonjen iz magacina. (Knjiga rashoda firme je zaseban
budući modul — Opcija 2.)
2026-06-21 23:18:44 +02:00
Dasko ef0b917bf6 Usluge: zaseban modul (cenovnik usluga)
Usluga je zaseban entitet, ne artikal: svoja tabela usluge (naziv, šifra,
jedinica mere, cena, PDV, opis), repo, handleri i forma. Auto-šifra USL-001…999,
jedinica mere (usluga/sat/kom). Bez nabavne/prodajne cene, dobavljača, lagera i
marže. /usluge lista + CRUD; stari tip-filter handler uklonjen iz magacina.
2026-06-21 23:04:56 +02:00
Dasko 31d8917adc Magacin: razdvojeni Magacin/Usluge/Troškovi i izbačen Tip iz forme
ArtikalFilter dobija polje Tip; zajednički magacinPrikaz parametrizovan tipom
servi listu proizvoda (/magacin), usluga (/usluge) i troškova (/troskovi) preko
istog šablona (OsnovniUrl za HTMX). Sidebar dobija stavke Usluge i Troškovi.
Magacin forma više ne nudi izbor tipa — artikal je uvek proizvod.
2026-06-21 22:31:19 +02:00