Files
GoNtech/web/templates/stranice/servis_radni_nalog.html
Dasko 60e7debad5 PDV pravilo na štampanim dokumentima + fiksni layout + QR popravka
- PDV uslovi (Moduli.pdv) na: predračun, otpremnica, garantni list, prodaja_stampa
- Modal za preuzimanje: jedna cena (sa/bez PDV), ne duplo
- Javna status stranica: PDV uslovi za cene, predlog, checkbox-ove
- Svi print templejti: viewport=device-width+min-width, bez responsive
- JavniToken generisan za postojeće naloge bez tokena (QR popravka)
- UkupnoSaPdv() metode na ServisniRad i ServisniDeoSaArtiklom
- UkupnoBezPdv() na StavkaProdaje
2026-06-27 02:06:18 +02:00

243 lines
11 KiB
HTML

<!DOCTYPE html>
<html lang="sr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Radni nalog {{.Nalog.BrojNaloga}}</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif; font-size: 13px; color: #111; background: #fff; min-width: 780px; }
.strana { max-width: 780px; margin: 0 auto; padding: 32px 40px; }
/* zaglavlje */
.zaglavlje { display: flex; align-items: stretch; margin-bottom: 20px; gap: 12px; }
.zg-okvir { flex: 1; padding: 12px 14px; border: 0.5px solid #ddd; border-radius: 6px; }
.firma-naziv { font-size: 16px; font-weight: 700; }
.firma-podnaslov { font-size: 11px; color: #666; text-transform: uppercase; letter-spacing: 1px; margin-top: 2px; }
.nalog-naslov { font-size: 11px; color: #555; text-transform: uppercase; letter-spacing: 0.6px; margin-bottom: 2px; }
.nalog-broj { font-size: 18px; font-weight: 700; font-family: monospace; }
.status { display: inline-block; margin-top: 6px; padding: 2px 10px; border-radius: 20px; font-size: 11px; font-weight: 600; border: 1.5px solid #111; }
.barkod { margin-bottom: 10px; }
.barkod img { display: block; width: 100%; max-height: 46px; object-fit: contain; }
/* odeljci */
.odeljak { margin-bottom: 18px; }
.odeljak-naslov { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.8px; color: #555; margin-bottom: 8px; padding-bottom: 4px; border-bottom: 0.5px solid #ccc; }
/* grid sa podacima */
.podaci-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.podaci-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.polje-labela { font-size: 10px; color: #777; text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 3px; }
.polje-vrednost { font-size: 13px; font-weight: 500; }
.polje-vrednost-mono { font-family: monospace; font-size: 14px; font-weight: 600; }
.polje-tekst { font-size: 13px; line-height: 1.6; white-space: pre-wrap; }
.prazno { color: #aaa; font-style: italic; }
/* istaknut PIN/lozinka — serviseru treba pristup */
.pin-blok { display: inline-block; padding: 4px 12px; background: #fef9c3; border: 1px solid #facc15; border-radius: 6px; }
/* tabela delova bez cena */
.tabela { width: 100%; border-collapse: collapse; margin-top: 6px; }
.tabela th { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.4px; color: #555; padding: 6px 8px; border-bottom: 1.5px solid #111; text-align: left; }
.tabela th.desno { text-align: right; }
.tabela td { padding: 7px 8px; border-bottom: 0.5px solid #ddd; font-size: 13px; }
.tabela td.desno { text-align: right; }
/* prazni okviri za rukom upisivanje */
.upis-okvir { border: 0.5px solid #bbb; border-radius: 6px; padding: 10px 12px; min-height: 70px; background:
repeating-linear-gradient(to bottom, transparent, transparent 27px, #eee 27px, #eee 28px); }
.upis-veliki { min-height: 110px; }
.upis-labela { font-size: 10px; color: #777; text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 6px; }
/* potpis */
.zavrsetak { margin-top: 14px; padding-top: 10px; border-top: 0.5px solid #ccc; }
.linija { border-top: 1px solid #888; margin-top: 24px; padding-top: 4px; font-size: 11px; color: #555; }
@media print {
body { font-size: 12px; }
.strana { padding: 32px 40px; max-width: 780px; }
.dugme-stampa { display: none !important; }
@page { size: A4; margin: 8mm 10mm; }
.odeljak { margin-bottom: 10px; }
.zaglavlje { margin-bottom: 12px; }
.podaci-grid, .podaci-grid-2 { gap: 8px; }
.upis-veliki { min-height: 80px; }
.upis-okvir { min-height: 50px; }
.zavrsetak { margin-top: 10px; padding-top: 8px; break-inside: avoid; }
/* red tabele se ne sme prelomiti preko granice stranice — prelom pada između stavki */
.tabela tr { break-inside: avoid; }
/* zaglavlje tabele se ponavlja na svakoj stranici kad tabela pređe na novu */
.tabela thead { display: table-header-group; }
}
.dugme-stampa { position: fixed; bottom: 24px; right: 24px; background: #111; color: #fff; border: none; padding: 12px 22px; border-radius: 8px; font-size: 14px; font-weight: 500; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.2); }
.dugme-stampa:hover { background: #333; }
</style>
</head>
<body>
<div class="strana">
<!-- zaglavlje -->
<div class="zaglavlje">
<!-- LEVO: firma — logo na vrhu, tekst ispod -->
<div class="zg-okvir">
{{if .LogoPutanja}}
<img src="{{.LogoPutanja}}" alt="Logo" style="max-height:50px;max-width:100%;object-fit:contain;display:block;margin-bottom:8px;">
{{else}}
<div class="firma-naziv">{{if .NazivFirme}}{{.NazivFirme}}{{else}}— naziv firme —{{end}}</div>
{{end}}
<div class="firma-podnaslov">Radni nalog — interni</div>
</div>
<!-- SREDINA: klijent -->
<div class="zg-okvir" style="font-size:12px;line-height:1.6;">
<div class="polje-labela">Klijent</div>
<div class="polje-vrednost">{{if .KlijentNaziv}}{{.KlijentNaziv}}{{else}}<span class="prazno"></span>{{end}}</div>
{{if .Klijent}}
<div style="color:#555;">
{{if .Klijent.Telefon}}Tel: {{telefon .Klijent.Telefon}}<br>{{end}}
{{if .Klijent.Email}}{{.Klijent.Email}}<br>{{end}}
{{if .Klijent.Mesto}}{{.Klijent.Mesto}}<br>{{end}}
{{if .Klijent.PIB}}PIB: {{.Klijent.PIB}}{{end}}
</div>
{{end}}
</div>
<!-- DESNO: barkod na vrhu, ispod broj + status + datumi + serviser -->
<div class="zg-okvir" style="flex:1.3;">
{{if .Barkod}}
<div class="barkod"><img src="data:image/png;base64,{{.Barkod}}" alt="Barkod {{.Nalog.BrojNaloga}}"></div>
{{end}}
<div class="nalog-naslov">Broj naloga</div>
<div class="nalog-broj">{{.Nalog.BrojNaloga}}</div>
<div><span class="status">{{.Nalog.Status}}</span></div>
<div style="font-size:11px;color:#555;margin-top:6px;line-height:1.7;">
Prijem: {{.Nalog.DatumPrijema.Format "02.01.2006."}}
{{if .Nalog.PredvidjenDatum}}<br>Rok: {{.Nalog.PredvidjenDatum.Format "02.01.2006."}}{{end}}
{{if .TehnicarNaziv}}<br>Serviser: {{.TehnicarNaziv}}{{end}}
</div>
</div>
</div>
<!-- uređaj -->
<div class="odeljak">
<div class="odeljak-naslov">Uređaj</div>
<div class="podaci-grid" style="margin-bottom:12px;">
<div>
<div class="polje-labela">Naziv uređaja</div>
<div class="polje-vrednost">{{.Nalog.Uredjaj}}</div>
</div>
<div>
<div class="polje-labela">Serijski broj</div>
<div class="polje-vrednost-mono">{{if .Nalog.SerijskiBroj}}{{.Nalog.SerijskiBroj}}{{else}}<span class="prazno"></span>{{end}}</div>
</div>
{{if .Nalog.PinUredjaja}}
<div>
<div class="polje-labela">PIN / lozinka</div>
<div class="pin-blok polje-vrednost-mono">{{.Nalog.PinUredjaja}}</div>
</div>
{{end}}
</div>
<div style="margin-bottom:10px;">
<div class="polje-labela">Prijavljen kvar</div>
<div class="polje-tekst">{{if .Nalog.OpisKvara}}{{.Nalog.OpisKvara}}{{else}}<span class="prazno"></span>{{end}}</div>
</div>
{{if .Nalog.TrazeneNadogradnje}}
<div style="margin-bottom:10px;">
<div class="polje-labela">Tražene nadogradnje</div>
<div class="polje-tekst">{{.Nalog.TrazeneNadogradnje}}</div>
</div>
{{end}}
{{if or .Nalog.Ostecenja .Nalog.Pribor}}
<div class="podaci-grid-2">
{{if .Nalog.Ostecenja}}
<div>
<div class="polje-labela">Oštećenja pri prijemu</div>
<div class="polje-tekst">{{.Nalog.Ostecenja}}</div>
</div>
{{end}}
{{if .Nalog.Pribor}}
<div>
<div class="polje-labela">Pribor i oprema</div>
<div class="polje-tekst">{{.Nalog.Pribor}}</div>
</div>
{{end}}
</div>
{{end}}
</div>
<!-- utvrđen kvar (rezultat dijagnostike) -->
{{if .Nalog.NalazDijagnostike}}
<div class="odeljak">
<div class="odeljak-naslov">Utvrđeni kvar</div>
<div class="polje-tekst">{{.Nalog.NalazDijagnostike}}</div>
</div>
{{end}}
<!-- napomena klijentu -->
{{if .Nalog.NapomenaKlijentu}}
<div class="odeljak">
<div class="odeljak-naslov">Napomena klijentu</div>
<div class="polje-tekst">{{.Nalog.NapomenaKlijentu}}</div>
</div>
{{end}}
<!-- usluge koje serviser treba da uradi — bez cena -->
{{if .Radovi}}
<div class="odeljak">
<div class="odeljak-naslov">Usluge (radovi)</div>
<table class="tabela">
<thead>
<tr>
<th>Usluga</th>
<th class="desno" style="width:90px;">Količina</th>
</tr>
</thead>
<tbody>
{{range .Radovi}}
<tr>
<td>{{.Naziv}}</td>
<td class="desno">{{.Kolicina}}</td>
</tr>
{{end}}
</tbody>
</table>
</div>
{{end}}
<!-- rezervisani/ugrađeni delovi — bez cena -->
{{if .ServisniDelovi}}
<div class="odeljak">
<div class="odeljak-naslov">Delovi za ugradnju</div>
<table class="tabela">
<thead>
<tr>
<th>Artikal</th>
<th class="desno" style="width:90px;">Količina</th>
</tr>
</thead>
<tbody>
{{range .ServisniDelovi}}
<tr>
<td>{{.ArtikalNaziv}}</td>
<td class="desno">{{.Kolicina}}</td>
</tr>
{{end}}
</tbody>
</table>
</div>
{{end}}
<!-- potpis -->
<div class="zavrsetak">
<div>
<div class="polje-labela">Potpis servisera</div>
<div class="linija">&nbsp;</div>
</div>
</div>
</div>
<button class="dugme-stampa" onclick="window.print()">Štampaj</button>
</body>
</html>