- 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
206 lines
9.6 KiB
HTML
206 lines
9.6 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; }
|
|
|
|
.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; }
|
|
|
|
/* zavrsetak — vreme i potpis */
|
|
.zavrsetak { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; margin-top: 28px; padding-top: 16px; border-top: 0.5px solid #ccc; }
|
|
.linija { border-top: 1px solid #888; margin-top: 40px; padding-top: 6px; font-size: 11px; color: #555; }
|
|
|
|
@media print {
|
|
body { font-size: 12px; }
|
|
.strana { padding: 16px 20px; max-width: 100%; }
|
|
.dugme-stampa { display: none !important; }
|
|
@page { size: A4; margin: 12mm 14mm; }
|
|
/* 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 .KlijentTelefon}}<div style="color:#555;">Tel: {{telefon .KlijentTelefon}}</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>
|
|
|
|
<!-- rezervisani/ugrađeni delovi — bez cena -->
|
|
{{if .ServisniDelovi}}
|
|
<div class="odeljak">
|
|
<div class="odeljak-naslov">Delovi na nalogu</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}}
|
|
|
|
<!-- prazna polja za servisera -->
|
|
<div class="odeljak">
|
|
<div class="upis-labela">Dijagnoza / utvrđen kvar</div>
|
|
<div class="upis-okvir upis-veliki"></div>
|
|
</div>
|
|
|
|
<div class="odeljak">
|
|
<div class="upis-labela">Urađen rad</div>
|
|
<div class="upis-okvir upis-veliki"></div>
|
|
</div>
|
|
|
|
<!-- vreme i potpis -->
|
|
<div class="zavrsetak">
|
|
<div>
|
|
<div class="polje-labela">Datum završetka / utrošeno vreme</div>
|
|
<div class="linija"> </div>
|
|
</div>
|
|
<div>
|
|
<div class="polje-labela">Potpis servisera</div>
|
|
<div class="linija"> </div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<button class="dugme-stampa" onclick="window.print()">Štampaj</button>
|
|
|
|
</body>
|
|
</html>
|