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
This commit is contained in:
@@ -24,7 +24,7 @@ func NoviServisniDeloviRepo(db *sql.DB) *ServisniDeloviRepo {
|
|||||||
func (r *ServisniDeloviRepo) DohvatiZaNalog(ctx context.Context, nalogID int64) ([]model.ServisniDeoSaArtiklom, error) {
|
func (r *ServisniDeloviRepo) DohvatiZaNalog(ctx context.Context, nalogID int64) ([]model.ServisniDeoSaArtiklom, error) {
|
||||||
redovi, err := r.db.QueryContext(ctx, `
|
redovi, err := r.db.QueryContext(ctx, `
|
||||||
SELECT sd.id, sd.nalog_id, sd.artikal_id, sd.kolicina, sd.cena_komada, sd.datum,
|
SELECT sd.id, sd.nalog_id, sd.artikal_id, sd.kolicina, sd.cena_komada, sd.datum,
|
||||||
sd.predlozeno, a.naziv, a.sifra
|
sd.predlozeno, a.naziv, a.sifra, a.pdv_stopa
|
||||||
FROM servisni_delovi sd
|
FROM servisni_delovi sd
|
||||||
JOIN artikli a ON a.id = sd.artikal_id
|
JOIN artikli a ON a.id = sd.artikal_id
|
||||||
WHERE sd.nalog_id = ?
|
WHERE sd.nalog_id = ?
|
||||||
@@ -39,11 +39,12 @@ func (r *ServisniDeloviRepo) DohvatiZaNalog(ctx context.Context, nalogID int64)
|
|||||||
var d model.ServisniDeoSaArtiklom
|
var d model.ServisniDeoSaArtiklom
|
||||||
err := redovi.Scan(
|
err := redovi.Scan(
|
||||||
&d.ID, &d.NalogID, &d.ArtikalID, &d.Kolicina, &d.CenaKomada, &d.Datum,
|
&d.ID, &d.NalogID, &d.ArtikalID, &d.Kolicina, &d.CenaKomada, &d.Datum,
|
||||||
&d.Predlozeno, &d.ArtikalNaziv, &d.ArtikalSifra,
|
&d.Predlozeno, &d.ArtikalNaziv, &d.ArtikalSifra, &d.PdvStopa,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("ntech: ServisniDeloviRepo.DohvatiZaNalog: scan: %w", err)
|
return nil, fmt.Errorf("ntech: ServisniDeloviRepo.DohvatiZaNalog: scan: %w", err)
|
||||||
}
|
}
|
||||||
|
d.CenaSaPdv = d.CenaKomada * (1 + d.PdvStopa/100)
|
||||||
rezultat = append(rezultat, d)
|
rezultat = append(rezultat, d)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func NoviServisniRadoviRepo(baza *sql.DB) *ServisniRadoviRepo {
|
|||||||
func (r *ServisniRadoviRepo) DohvatiZaNalog(ctx context.Context, nalogID int64) ([]model.ServisniRad, error) {
|
func (r *ServisniRadoviRepo) DohvatiZaNalog(ctx context.Context, nalogID int64) ([]model.ServisniRad, error) {
|
||||||
redovi, err := r.db.QueryContext(ctx, `
|
redovi, err := r.db.QueryContext(ctx, `
|
||||||
SELECT sr.id, sr.nalog_id, COALESCE(sr.usluga_id, 0), sr.naziv, sr.kolicina, sr.cena_komada, sr.datum, sr.predlozeno,
|
SELECT sr.id, sr.nalog_id, COALESCE(sr.usluga_id, 0), sr.naziv, sr.kolicina, sr.cena_komada, sr.datum, sr.predlozeno,
|
||||||
COALESCE(u.sifra, '')
|
COALESCE(u.sifra, ''), COALESCE(u.pdv_stopa, 20.0)
|
||||||
FROM servis_radovi sr
|
FROM servis_radovi sr
|
||||||
LEFT JOIN usluge u ON u.id = sr.usluga_id
|
LEFT JOIN usluge u ON u.id = sr.usluga_id
|
||||||
WHERE sr.nalog_id = ? ORDER BY sr.id`, nalogID)
|
WHERE sr.nalog_id = ? ORDER BY sr.id`, nalogID)
|
||||||
@@ -34,9 +34,10 @@ func (r *ServisniRadoviRepo) DohvatiZaNalog(ctx context.Context, nalogID int64)
|
|||||||
var radovi []model.ServisniRad
|
var radovi []model.ServisniRad
|
||||||
for redovi.Next() {
|
for redovi.Next() {
|
||||||
var rad model.ServisniRad
|
var rad model.ServisniRad
|
||||||
if err := redovi.Scan(&rad.ID, &rad.NalogID, &rad.UslugaID, &rad.Naziv, &rad.Kolicina, &rad.CenaKomada, &rad.Datum, &rad.Predlozeno, &rad.Sifra); err != nil {
|
if err := redovi.Scan(&rad.ID, &rad.NalogID, &rad.UslugaID, &rad.Naziv, &rad.Kolicina, &rad.CenaKomada, &rad.Datum, &rad.Predlozeno, &rad.Sifra, &rad.PdvStopa); err != nil {
|
||||||
return nil, fmt.Errorf("ntech: ServisniRadoviRepo.DohvatiZaNalog: %w", err)
|
return nil, fmt.Errorf("ntech: ServisniRadoviRepo.DohvatiZaNalog: %w", err)
|
||||||
}
|
}
|
||||||
|
rad.CenaSaPdv = rad.CenaKomada * (1 + rad.PdvStopa/100)
|
||||||
radovi = append(radovi, rad)
|
radovi = append(radovi, rad)
|
||||||
}
|
}
|
||||||
return radovi, redovi.Err()
|
return radovi, redovi.Err()
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ type PodaciStampeProdaje struct {
|
|||||||
Nalog model.ProdajniNalog
|
Nalog model.ProdajniNalog
|
||||||
Stavke []model.StavkaProdajeSaArtiklom
|
Stavke []model.StavkaProdajeSaArtiklom
|
||||||
KlijentNaziv string
|
KlijentNaziv string
|
||||||
|
Moduli map[string]bool
|
||||||
|
UkupnoBezPdv float64
|
||||||
NazivFirme string
|
NazivFirme string
|
||||||
Podnazlov string
|
Podnazlov string
|
||||||
Adresa string
|
Adresa string
|
||||||
@@ -370,10 +372,18 @@ func (h *Handler) StampaProdaje(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
moduli := config.SviModuli(podesavanja)
|
||||||
|
var ukupnoBezPdv float64
|
||||||
|
for _, s := range stavke {
|
||||||
|
ukupnoBezPdv += s.CenaBezPdv * float64(s.Kolicina)
|
||||||
|
}
|
||||||
|
|
||||||
podaci := PodaciStampeProdaje{
|
podaci := PodaciStampeProdaje{
|
||||||
Nalog: *nalog,
|
Nalog: *nalog,
|
||||||
Stavke: stavke,
|
Stavke: stavke,
|
||||||
KlijentNaziv: klijentNaziv,
|
KlijentNaziv: klijentNaziv,
|
||||||
|
Moduli: moduli,
|
||||||
|
UkupnoBezPdv: ukupnoBezPdv,
|
||||||
NazivFirme: podesavanja["naziv_firme"],
|
NazivFirme: podesavanja["naziv_firme"],
|
||||||
Podnazlov: podesavanja["podnazlov"],
|
Podnazlov: podesavanja["podnazlov"],
|
||||||
Adresa: podesavanja["adresa"],
|
Adresa: podesavanja["adresa"],
|
||||||
|
|||||||
@@ -70,9 +70,13 @@ type PodaciDetaljiNaloga struct {
|
|||||||
Sacuvano bool
|
Sacuvano bool
|
||||||
UkupnoDelovi float64
|
UkupnoDelovi float64
|
||||||
UkupnoRadovi float64
|
UkupnoRadovi float64
|
||||||
|
UkupnoDeloviSaPdv float64
|
||||||
|
UkupnoRadoviSaPdv float64
|
||||||
UkupnoSve float64
|
UkupnoSve float64
|
||||||
|
UkupnoSveSaPdv float64
|
||||||
Avans float64
|
Avans float64
|
||||||
PreostaloSve float64
|
PreostaloSve float64
|
||||||
|
PreostaloSveSaPdv float64
|
||||||
ZakljucanStatus bool // onemogući promenu statusa dok ima potraživanih delova
|
ZakljucanStatus bool // onemogući promenu statusa dok ima potraživanih delova
|
||||||
CenaDijagnostikePredlog string // podrazumevana cena dijagnostike iz podešavanja (za prefill input-a)
|
CenaDijagnostikePredlog string // podrazumevana cena dijagnostike iz podešavanja (za prefill input-a)
|
||||||
KorisceneUsluge map[int64]bool // ID-evi usluga već dodatih na nalog — izostavljaju se iz dropdown-a
|
KorisceneUsluge map[int64]bool // ID-evi usluga već dodatih na nalog — izostavljaju se iz dropdown-a
|
||||||
@@ -645,13 +649,16 @@ func (h *Handler) DetaljiNaloga(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ukupnoDelovi, ukupnoRadovi float64
|
var ukupnoDelovi, ukupnoRadovi float64
|
||||||
|
var ukupnoDeloviSaPdv, ukupnoRadoviSaPdv float64
|
||||||
for _, d := range delovi {
|
for _, d := range delovi {
|
||||||
ukupnoDelovi += d.Ukupno()
|
ukupnoDelovi += d.Ukupno()
|
||||||
|
ukupnoDeloviSaPdv += d.CenaSaPdv * float64(d.Kolicina)
|
||||||
}
|
}
|
||||||
// skup već dodatih usluga — izostavljaju se iz dropdown-a da se ista usluga ne doda dvaput
|
// skup već dodatih usluga — izostavljaju se iz dropdown-a da se ista usluga ne doda dvaput
|
||||||
korisceneUsluge := make(map[int64]bool, len(radovi))
|
korisceneUsluge := make(map[int64]bool, len(radovi))
|
||||||
for _, rad := range radovi {
|
for _, rad := range radovi {
|
||||||
ukupnoRadovi += rad.Ukupno()
|
ukupnoRadovi += rad.Ukupno()
|
||||||
|
ukupnoRadoviSaPdv += rad.CenaSaPdv * rad.Kolicina
|
||||||
if rad.UslugaID != 0 {
|
if rad.UslugaID != 0 {
|
||||||
korisceneUsluge[rad.UslugaID] = true
|
korisceneUsluge[rad.UslugaID] = true
|
||||||
}
|
}
|
||||||
@@ -665,6 +672,14 @@ func (h *Handler) DetaljiNaloga(w http.ResponseWriter, r *http.Request) {
|
|||||||
} else {
|
} else {
|
||||||
ukupnoSve = ukupnoRadovi + ukupnoDelovi
|
ukupnoSve = ukupnoRadovi + ukupnoDelovi
|
||||||
}
|
}
|
||||||
|
// ukupno sa PDV-om —suma CenaSaPdv za radove i delove
|
||||||
|
var ukupnoSveSaPdv float64
|
||||||
|
for _, rad := range radovi {
|
||||||
|
ukupnoSveSaPdv += rad.CenaSaPdv * rad.Kolicina
|
||||||
|
}
|
||||||
|
for _, d := range delovi {
|
||||||
|
ukupnoSveSaPdv += d.CenaSaPdv * float64(d.Kolicina)
|
||||||
|
}
|
||||||
avans := 0.0
|
avans := 0.0
|
||||||
if nalog.Avans != nil {
|
if nalog.Avans != nil {
|
||||||
avans = *nalog.Avans
|
avans = *nalog.Avans
|
||||||
@@ -673,6 +688,10 @@ func (h *Handler) DetaljiNaloga(w http.ResponseWriter, r *http.Request) {
|
|||||||
if preostaloSve < 0 {
|
if preostaloSve < 0 {
|
||||||
preostaloSve = 0
|
preostaloSve = 0
|
||||||
}
|
}
|
||||||
|
preostaloSveSaPdv := ukupnoSveSaPdv - avans
|
||||||
|
if preostaloSveSaPdv < 0 {
|
||||||
|
preostaloSveSaPdv = 0
|
||||||
|
}
|
||||||
|
|
||||||
zakljucanStatus := false
|
zakljucanStatus := false
|
||||||
for _, d := range delovi {
|
for _, d := range delovi {
|
||||||
@@ -704,9 +723,13 @@ func (h *Handler) DetaljiNaloga(w http.ResponseWriter, r *http.Request) {
|
|||||||
Sacuvano: r.URL.Query().Get("sacuvano") == "1",
|
Sacuvano: r.URL.Query().Get("sacuvano") == "1",
|
||||||
UkupnoDelovi: ukupnoDelovi,
|
UkupnoDelovi: ukupnoDelovi,
|
||||||
UkupnoRadovi: ukupnoRadovi,
|
UkupnoRadovi: ukupnoRadovi,
|
||||||
|
UkupnoDeloviSaPdv: ukupnoDeloviSaPdv,
|
||||||
|
UkupnoRadoviSaPdv: ukupnoRadoviSaPdv,
|
||||||
UkupnoSve: ukupnoSve,
|
UkupnoSve: ukupnoSve,
|
||||||
|
UkupnoSveSaPdv: ukupnoSveSaPdv,
|
||||||
Avans: avans,
|
Avans: avans,
|
||||||
PreostaloSve: preostaloSve,
|
PreostaloSve: preostaloSve,
|
||||||
|
PreostaloSveSaPdv: preostaloSveSaPdv,
|
||||||
ZakljucanStatus: zakljucanStatus,
|
ZakljucanStatus: zakljucanStatus,
|
||||||
CenaDijagnostikePredlog: podesavanja["servis_cena_dijagnostike"],
|
CenaDijagnostikePredlog: podesavanja["servis_cena_dijagnostike"],
|
||||||
KorisceneUsluge: korisceneUsluge,
|
KorisceneUsluge: korisceneUsluge,
|
||||||
@@ -1375,12 +1398,17 @@ type PodaciOtpremnice struct {
|
|||||||
Radovi []model.ServisniRad
|
Radovi []model.ServisniRad
|
||||||
ServisniDelovi []model.ServisniDeoSaArtiklom
|
ServisniDelovi []model.ServisniDeoSaArtiklom
|
||||||
UkupnoDelovi float64
|
UkupnoDelovi float64
|
||||||
|
UkupnoDeloviSaPdv float64
|
||||||
|
UkupnoSve float64
|
||||||
|
UkupnoSveSaPdv float64
|
||||||
PreostaloSve float64
|
PreostaloSve float64
|
||||||
|
PreostaloSveSaPdv float64
|
||||||
ImaAvans bool
|
ImaAvans bool
|
||||||
QRKod string
|
QRKod string
|
||||||
Klijent *model.Klijent
|
Klijent *model.Klijent
|
||||||
KlijentNaziv string
|
KlijentNaziv string
|
||||||
TehnicarNaziv string
|
TehnicarNaziv string
|
||||||
|
Moduli map[string]bool
|
||||||
NazivFirme string
|
NazivFirme string
|
||||||
LogoPutanja string
|
LogoPutanja string
|
||||||
Podnazlov string
|
Podnazlov string
|
||||||
@@ -1446,14 +1474,17 @@ func (h *Handler) StampaOtpremnice(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ukupnoDelovi float64
|
var ukupnoDelovi float64
|
||||||
|
var ukupnoDeloviSaPdv float64
|
||||||
for _, d := range delovi {
|
for _, d := range delovi {
|
||||||
ukupnoDelovi += d.Ukupno()
|
ukupnoDelovi += d.Ukupno()
|
||||||
|
ukupnoDeloviSaPdv += d.CenaSaPdv * float64(d.Kolicina)
|
||||||
}
|
}
|
||||||
var preostaloSve float64
|
var ukupnoSve, ukupnoSveSaPdv, preostaloSve, preostaloSveSaPdv float64
|
||||||
var imaAvans bool
|
var imaAvans bool
|
||||||
if nalog.PopravkaOdbijena {
|
if nalog.PopravkaOdbijena {
|
||||||
// klijent odbio popravku — naplaćuje se samo dijagnostika
|
// klijent odbio popravku — naplaćuje se samo dijagnostika
|
||||||
ukupnoSve := nalog.CenaDijagnostike
|
ukupnoSve = nalog.CenaDijagnostike
|
||||||
|
ukupnoSveSaPdv = nalog.CenaDijagnostike
|
||||||
avans := 0.0
|
avans := 0.0
|
||||||
if nalog.Avans != nil && *nalog.Avans > 0 {
|
if nalog.Avans != nil && *nalog.Avans > 0 {
|
||||||
avans = *nalog.Avans
|
avans = *nalog.Avans
|
||||||
@@ -1463,8 +1494,10 @@ func (h *Handler) StampaOtpremnice(w http.ResponseWriter, r *http.Request) {
|
|||||||
if preostaloSve < 0 {
|
if preostaloSve < 0 {
|
||||||
preostaloSve = 0
|
preostaloSve = 0
|
||||||
}
|
}
|
||||||
|
preostaloSveSaPdv = preostaloSve
|
||||||
} else if nalog.CenaKonacna != nil {
|
} else if nalog.CenaKonacna != nil {
|
||||||
ukupnoSve := *nalog.CenaKonacna + ukupnoDelovi
|
ukupnoSve = *nalog.CenaKonacna + ukupnoDelovi
|
||||||
|
ukupnoSveSaPdv = *nalog.CenaKonacna + ukupnoDeloviSaPdv
|
||||||
avans := 0.0
|
avans := 0.0
|
||||||
if nalog.Avans != nil && *nalog.Avans > 0 {
|
if nalog.Avans != nil && *nalog.Avans > 0 {
|
||||||
avans = *nalog.Avans
|
avans = *nalog.Avans
|
||||||
@@ -1474,7 +1507,13 @@ func (h *Handler) StampaOtpremnice(w http.ResponseWriter, r *http.Request) {
|
|||||||
if preostaloSve < 0 {
|
if preostaloSve < 0 {
|
||||||
preostaloSve = 0
|
preostaloSve = 0
|
||||||
}
|
}
|
||||||
|
preostaloSveSaPdv = ukupnoSveSaPdv - avans
|
||||||
|
if preostaloSveSaPdv < 0 {
|
||||||
|
preostaloSveSaPdv = 0
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
moduli := config.SviModuli(podesavanja)
|
||||||
|
|
||||||
nalogURL := qrNalogURL(r, nalog.JavniToken, podesavanja["qr_bazni_url"])
|
nalogURL := qrNalogURL(r, nalog.JavniToken, podesavanja["qr_bazni_url"])
|
||||||
var qrKodOtpr string
|
var qrKodOtpr string
|
||||||
@@ -1499,12 +1538,17 @@ func (h *Handler) StampaOtpremnice(w http.ResponseWriter, r *http.Request) {
|
|||||||
Radovi: radovi,
|
Radovi: radovi,
|
||||||
ServisniDelovi: delovi,
|
ServisniDelovi: delovi,
|
||||||
UkupnoDelovi: ukupnoDelovi,
|
UkupnoDelovi: ukupnoDelovi,
|
||||||
|
UkupnoDeloviSaPdv: ukupnoDeloviSaPdv,
|
||||||
|
UkupnoSve: ukupnoSve,
|
||||||
|
UkupnoSveSaPdv: ukupnoSveSaPdv,
|
||||||
PreostaloSve: preostaloSve,
|
PreostaloSve: preostaloSve,
|
||||||
|
PreostaloSveSaPdv: preostaloSveSaPdv,
|
||||||
ImaAvans: imaAvans,
|
ImaAvans: imaAvans,
|
||||||
QRKod: qrKodOtpr,
|
QRKod: qrKodOtpr,
|
||||||
Klijent: klijent,
|
Klijent: klijent,
|
||||||
KlijentNaziv: klijentNaziv,
|
KlijentNaziv: klijentNaziv,
|
||||||
TehnicarNaziv: tehnicarNaziv,
|
TehnicarNaziv: tehnicarNaziv,
|
||||||
|
Moduli: moduli,
|
||||||
NazivFirme: podesavanja["naziv_firme"],
|
NazivFirme: podesavanja["naziv_firme"],
|
||||||
LogoPutanja: logoZaDokument(podesavanja),
|
LogoPutanja: logoZaDokument(podesavanja),
|
||||||
Podnazlov: podesavanja["podnazlov"],
|
Podnazlov: podesavanja["podnazlov"],
|
||||||
@@ -1527,6 +1571,7 @@ type PodaciGarantnog struct {
|
|||||||
KlijentNaziv string
|
KlijentNaziv string
|
||||||
TehnicarNaziv string
|
TehnicarNaziv string
|
||||||
Uslovi string
|
Uslovi string
|
||||||
|
Moduli map[string]bool
|
||||||
NazivFirme string
|
NazivFirme string
|
||||||
LogoPutanja string
|
LogoPutanja string
|
||||||
Podnazlov string
|
Podnazlov string
|
||||||
@@ -1612,6 +1657,7 @@ func (h *Handler) StampaGarantnog(w http.ResponseWriter, r *http.Request) {
|
|||||||
KlijentNaziv: klijentNaziv,
|
KlijentNaziv: klijentNaziv,
|
||||||
TehnicarNaziv: tehnicarNaziv,
|
TehnicarNaziv: tehnicarNaziv,
|
||||||
Uslovi: vrednostIliDefault(podesavanja, "servis_uslovi", podrazumevaniUsloviServisa),
|
Uslovi: vrednostIliDefault(podesavanja, "servis_uslovi", podrazumevaniUsloviServisa),
|
||||||
|
Moduli: config.SviModuli(podesavanja),
|
||||||
NazivFirme: podesavanja["naziv_firme"],
|
NazivFirme: podesavanja["naziv_firme"],
|
||||||
LogoPutanja: logoZaDokument(podesavanja),
|
LogoPutanja: logoZaDokument(podesavanja),
|
||||||
Podnazlov: podesavanja["podnazlov"],
|
Podnazlov: podesavanja["podnazlov"],
|
||||||
@@ -1720,9 +1766,12 @@ type PodaciPredracuna struct {
|
|||||||
Nalog model.ServisniNalog
|
Nalog model.ServisniNalog
|
||||||
Radovi []model.ServisniRad
|
Radovi []model.ServisniRad
|
||||||
UkupnoRad float64
|
UkupnoRad float64
|
||||||
|
UkupnoRadSaPdv float64
|
||||||
ServisniDelovi []model.ServisniDeoSaArtiklom
|
ServisniDelovi []model.ServisniDeoSaArtiklom
|
||||||
UkupnoDelovi float64
|
UkupnoDelovi float64
|
||||||
|
UkupnoDeloviSaPdv float64
|
||||||
UkupnoSve float64
|
UkupnoSve float64
|
||||||
|
UkupnoSveSaPdv float64
|
||||||
DatumIzdavanja time.Time
|
DatumIzdavanja time.Time
|
||||||
VaziDo time.Time
|
VaziDo time.Time
|
||||||
Klauzula string
|
Klauzula string
|
||||||
@@ -1730,6 +1779,7 @@ type PodaciPredracuna struct {
|
|||||||
Klijent *model.Klijent
|
Klijent *model.Klijent
|
||||||
KlijentNaziv string
|
KlijentNaziv string
|
||||||
TehnicarNaziv string
|
TehnicarNaziv string
|
||||||
|
Moduli map[string]bool
|
||||||
NazivFirme string
|
NazivFirme string
|
||||||
LogoPutanja string
|
LogoPutanja string
|
||||||
Podnazlov string
|
Podnazlov string
|
||||||
@@ -1791,14 +1841,22 @@ func (h *Handler) StampaPredracuna(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ukupnoRad float64
|
var ukupnoRad float64
|
||||||
|
var ukupnoRadSaPdv float64
|
||||||
for _, rd := range radovi {
|
for _, rd := range radovi {
|
||||||
ukupnoRad += rd.Ukupno()
|
ukupnoRad += rd.Ukupno()
|
||||||
|
ukupnoRadSaPdv += rd.CenaSaPdv * rd.Kolicina
|
||||||
}
|
}
|
||||||
var ukupnoDelovi float64
|
var ukupnoDelovi float64
|
||||||
|
var ukupnoDeloviSaPdv float64
|
||||||
for _, d := range delovi {
|
for _, d := range delovi {
|
||||||
ukupnoDelovi += d.Ukupno()
|
ukupnoDelovi += d.Ukupno()
|
||||||
|
ukupnoDeloviSaPdv += d.CenaSaPdv * float64(d.Kolicina)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ukupnoSve := ukupnoRad + ukupnoDelovi
|
||||||
|
ukupnoSveSaPdv := ukupnoRadSaPdv + ukupnoDeloviSaPdv
|
||||||
|
moduli := config.SviModuli(podesavanja)
|
||||||
|
|
||||||
// rok važenja iz podešavanja (default 7 dana)
|
// rok važenja iz podešavanja (default 7 dana)
|
||||||
rok := 7
|
rok := 7
|
||||||
if v, err := strconv.Atoi(podesavanja["predracun_rok_dana"]); err == nil && v > 0 {
|
if v, err := strconv.Atoi(podesavanja["predracun_rok_dana"]); err == nil && v > 0 {
|
||||||
@@ -1817,9 +1875,12 @@ func (h *Handler) StampaPredracuna(w http.ResponseWriter, r *http.Request) {
|
|||||||
Nalog: *nalog,
|
Nalog: *nalog,
|
||||||
Radovi: radovi,
|
Radovi: radovi,
|
||||||
UkupnoRad: ukupnoRad,
|
UkupnoRad: ukupnoRad,
|
||||||
|
UkupnoRadSaPdv: ukupnoRadSaPdv,
|
||||||
ServisniDelovi: delovi,
|
ServisniDelovi: delovi,
|
||||||
UkupnoDelovi: ukupnoDelovi,
|
UkupnoDelovi: ukupnoDelovi,
|
||||||
UkupnoSve: ukupnoRad + ukupnoDelovi,
|
UkupnoDeloviSaPdv: ukupnoDeloviSaPdv,
|
||||||
|
UkupnoSve: ukupnoSve,
|
||||||
|
UkupnoSveSaPdv: ukupnoSveSaPdv,
|
||||||
DatumIzdavanja: datumIzdavanja,
|
DatumIzdavanja: datumIzdavanja,
|
||||||
VaziDo: vaziDo,
|
VaziDo: vaziDo,
|
||||||
Klauzula: vrednostIliDefault(podesavanja, "servis_klauzula_predracuna", podrazumevanaKlauzulaPredracuna),
|
Klauzula: vrednostIliDefault(podesavanja, "servis_klauzula_predracuna", podrazumevanaKlauzulaPredracuna),
|
||||||
@@ -1827,6 +1888,7 @@ func (h *Handler) StampaPredracuna(w http.ResponseWriter, r *http.Request) {
|
|||||||
Klijent: klijent,
|
Klijent: klijent,
|
||||||
KlijentNaziv: klijentNaziv,
|
KlijentNaziv: klijentNaziv,
|
||||||
TehnicarNaziv: tehnicarNaziv,
|
TehnicarNaziv: tehnicarNaziv,
|
||||||
|
Moduli: moduli,
|
||||||
NazivFirme: podesavanja["naziv_firme"],
|
NazivFirme: podesavanja["naziv_firme"],
|
||||||
LogoPutanja: logoZaDokument(podesavanja),
|
LogoPutanja: logoZaDokument(podesavanja),
|
||||||
Podnazlov: podesavanja["podnazlov"],
|
Podnazlov: podesavanja["podnazlov"],
|
||||||
@@ -2544,12 +2606,16 @@ type PodaciJavnogStatusa struct {
|
|||||||
Radovi []model.ServisniRad // ugrađeni/odobreni
|
Radovi []model.ServisniRad // ugrađeni/odobreni
|
||||||
ServisniDelovi []model.ServisniDeoSaArtiklom // ugrađeni/odobreni
|
ServisniDelovi []model.ServisniDeoSaArtiklom // ugrađeni/odobreni
|
||||||
UkupnoSve float64 // zbir ugrađenih (radovi + delovi)
|
UkupnoSve float64 // zbir ugrađenih (radovi + delovi)
|
||||||
|
UkupnoSveSaPdv float64
|
||||||
PredlozeniRadovi []model.ServisniRad
|
PredlozeniRadovi []model.ServisniRad
|
||||||
PredlozeniDelovi []model.ServisniDeoSaArtiklom
|
PredlozeniDelovi []model.ServisniDeoSaArtiklom
|
||||||
UkupnoPredlog float64 // zbir predloženih (radovi + delovi)
|
UkupnoPredlog float64 // zbir predloženih (radovi + delovi)
|
||||||
|
UkupnoPredlogSaPdv float64
|
||||||
ImaPredlog bool
|
ImaPredlog bool
|
||||||
UkupnoSaPredlogom float64 // ukupno ugrađeno + predloženo
|
UkupnoSaPredlogom float64 // ukupno ugrađeno + predloženo
|
||||||
Odgovoreno bool // klijent već odgovorio (nema predloga, nije „Primljeno")
|
UkupnoSaPredlogomSaPdv float64
|
||||||
|
Odgovoreno bool // klijent vec odgovorio (nema predloga, nije "Primljeno")
|
||||||
|
Moduli map[string]bool
|
||||||
SviStatusi []string
|
SviStatusi []string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2578,14 +2644,16 @@ func (h *Handler) ServisJavniStatus(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
// razdvajamo ugrađene/odobrene od predloženih (čekaju odluku klijenta)
|
// razdvajamo ugrađene/odobrene od predloženih (čekaju odluku klijenta)
|
||||||
var ugrRadovi, predRadovi []model.ServisniRad
|
var ugrRadovi, predRadovi []model.ServisniRad
|
||||||
var ukupnoSve, ukupnoPredlog float64
|
var ukupnoSve, ukupnoSveSaPdv, ukupnoPredlog, ukupnoPredlogSaPdv float64
|
||||||
for _, rd := range radovi {
|
for _, rd := range radovi {
|
||||||
if rd.Predlozeno {
|
if rd.Predlozeno {
|
||||||
predRadovi = append(predRadovi, rd)
|
predRadovi = append(predRadovi, rd)
|
||||||
ukupnoPredlog += rd.Ukupno()
|
ukupnoPredlog += rd.Ukupno()
|
||||||
|
ukupnoPredlogSaPdv += rd.UkupnoSaPdv()
|
||||||
} else {
|
} else {
|
||||||
ugrRadovi = append(ugrRadovi, rd)
|
ugrRadovi = append(ugrRadovi, rd)
|
||||||
ukupnoSve += rd.Ukupno()
|
ukupnoSve += rd.Ukupno()
|
||||||
|
ukupnoSveSaPdv += rd.UkupnoSaPdv()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var ugrDelovi, predDelovi []model.ServisniDeoSaArtiklom
|
var ugrDelovi, predDelovi []model.ServisniDeoSaArtiklom
|
||||||
@@ -2593,13 +2661,16 @@ func (h *Handler) ServisJavniStatus(w http.ResponseWriter, r *http.Request) {
|
|||||||
if d.Predlozeno {
|
if d.Predlozeno {
|
||||||
predDelovi = append(predDelovi, d)
|
predDelovi = append(predDelovi, d)
|
||||||
ukupnoPredlog += d.Ukupno()
|
ukupnoPredlog += d.Ukupno()
|
||||||
|
ukupnoPredlogSaPdv += d.UkupnoSaPdv()
|
||||||
} else {
|
} else {
|
||||||
ugrDelovi = append(ugrDelovi, d)
|
ugrDelovi = append(ugrDelovi, d)
|
||||||
ukupnoSve += d.Ukupno()
|
ukupnoSve += d.Ukupno()
|
||||||
|
ukupnoSveSaPdv += d.UkupnoSaPdv()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB)
|
podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB)
|
||||||
|
moduli := config.SviModuli(podesavanja)
|
||||||
|
|
||||||
// kad je klijent odbio popravku, ne prikazujemo radove i delove
|
// kad je klijent odbio popravku, ne prikazujemo radove i delove
|
||||||
if nalog.PopravkaOdbijena {
|
if nalog.PopravkaOdbijena {
|
||||||
@@ -2608,7 +2679,9 @@ func (h *Handler) ServisJavniStatus(w http.ResponseWriter, r *http.Request) {
|
|||||||
predRadovi = nil
|
predRadovi = nil
|
||||||
predDelovi = nil
|
predDelovi = nil
|
||||||
ukupnoSve = 0
|
ukupnoSve = 0
|
||||||
|
ukupnoSveSaPdv = 0
|
||||||
ukupnoPredlog = 0
|
ukupnoPredlog = 0
|
||||||
|
ukupnoPredlogSaPdv = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
h.renderujStandalone(w, "servis_status_javni", PodaciJavnogStatusa{
|
h.renderujStandalone(w, "servis_status_javni", PodaciJavnogStatusa{
|
||||||
@@ -2623,12 +2696,16 @@ func (h *Handler) ServisJavniStatus(w http.ResponseWriter, r *http.Request) {
|
|||||||
Radovi: ugrRadovi,
|
Radovi: ugrRadovi,
|
||||||
ServisniDelovi: ugrDelovi,
|
ServisniDelovi: ugrDelovi,
|
||||||
UkupnoSve: ukupnoSve,
|
UkupnoSve: ukupnoSve,
|
||||||
|
UkupnoSveSaPdv: ukupnoSveSaPdv,
|
||||||
PredlozeniRadovi: predRadovi,
|
PredlozeniRadovi: predRadovi,
|
||||||
PredlozeniDelovi: predDelovi,
|
PredlozeniDelovi: predDelovi,
|
||||||
UkupnoPredlog: ukupnoPredlog,
|
UkupnoPredlog: ukupnoPredlog,
|
||||||
|
UkupnoPredlogSaPdv: ukupnoPredlogSaPdv,
|
||||||
ImaPredlog: len(predRadovi) > 0 || len(predDelovi) > 0,
|
ImaPredlog: len(predRadovi) > 0 || len(predDelovi) > 0,
|
||||||
UkupnoSaPredlogom: ukupnoSve + ukupnoPredlog,
|
UkupnoSaPredlogom: ukupnoSve + ukupnoPredlog,
|
||||||
|
UkupnoSaPredlogomSaPdv: ukupnoSveSaPdv + ukupnoPredlogSaPdv,
|
||||||
Odgovoreno: nalog.OdlukaKlijenta != "" || (!(len(predRadovi) > 0 || len(predDelovi) > 0) && nalog.Status != model.StatusPrimljeno),
|
Odgovoreno: nalog.OdlukaKlijenta != "" || (!(len(predRadovi) > 0 || len(predDelovi) > 0) && nalog.Status != model.StatusPrimljeno),
|
||||||
|
Moduli: moduli,
|
||||||
SviStatusi: model.SviStatusi,
|
SviStatusi: model.SviStatusi,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,11 @@ type StavkaProdaje struct {
|
|||||||
CenaBezPdv float64
|
CenaBezPdv float64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UkupnoBezPdv vraća ukupno bez PDV-a za stavku (CenaBezPdv × količina)
|
||||||
|
func (s StavkaProdaje) UkupnoBezPdv() float64 {
|
||||||
|
return s.CenaBezPdv * float64(s.Kolicina)
|
||||||
|
}
|
||||||
|
|
||||||
// ProdajniNalogSaDetaljem je nalog sa nazivom klijenta — za prikaz u listi
|
// ProdajniNalogSaDetaljem je nalog sa nazivom klijenta — za prikaz u listi
|
||||||
type ProdajniNalogSaDetaljem struct {
|
type ProdajniNalogSaDetaljem struct {
|
||||||
ProdajniNalog
|
ProdajniNalog
|
||||||
|
|||||||
@@ -78,11 +78,18 @@ func (d ServisniDeo) Ukupno() float64 {
|
|||||||
return float64(d.Kolicina) * d.CenaKomada
|
return float64(d.Kolicina) * d.CenaKomada
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UkupnoSaPdv vraća ukupnu vrednost dela sa PDV-om (kolicina × cena_sa_pdv)
|
||||||
|
func (d ServisniDeoSaArtiklom) UkupnoSaPdv() float64 {
|
||||||
|
return float64(d.Kolicina) * d.CenaSaPdv
|
||||||
|
}
|
||||||
|
|
||||||
// ServisniDeoSaArtiklom je servisni deo sa nazivom artikla — za prikaz
|
// ServisniDeoSaArtiklom je servisni deo sa nazivom artikla — za prikaz
|
||||||
type ServisniDeoSaArtiklom struct {
|
type ServisniDeoSaArtiklom struct {
|
||||||
ServisniDeo
|
ServisniDeo
|
||||||
ArtikalNaziv string
|
ArtikalNaziv string
|
||||||
ArtikalSifra string
|
ArtikalSifra string
|
||||||
|
PdvStopa float64
|
||||||
|
CenaSaPdv float64
|
||||||
Potrazivano int // komada koji nedostaju (iz servisni_potrazivani_delovi), 0 ako nema
|
Potrazivano int // komada koji nedostaju (iz servisni_potrazivani_delovi), 0 ako nema
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,6 +117,8 @@ type ServisniRad struct {
|
|||||||
Sifra string
|
Sifra string
|
||||||
Kolicina float64
|
Kolicina float64
|
||||||
CenaKomada float64
|
CenaKomada float64
|
||||||
|
PdvStopa float64
|
||||||
|
CenaSaPdv float64 // CenaKomada * (1 + PdvStopa/100)
|
||||||
Datum string
|
Datum string
|
||||||
Predlozeno bool // true = serviser predložio posle dijagnostike; čeka odobrenje klijenta
|
Predlozeno bool // true = serviser predložio posle dijagnostike; čeka odobrenje klijenta
|
||||||
}
|
}
|
||||||
@@ -119,6 +128,11 @@ func (r ServisniRad) Ukupno() float64 {
|
|||||||
return r.Kolicina * r.CenaKomada
|
return r.Kolicina * r.CenaKomada
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UkupnoSaPdv vraća ukupnu vrednost rada sa PDV-om (kolicina × cena_sa_pdv)
|
||||||
|
func (r ServisniRad) UkupnoSaPdv() float64 {
|
||||||
|
return r.Kolicina * r.CenaSaPdv
|
||||||
|
}
|
||||||
|
|
||||||
// ServisniNalogSaKlijentom proširuje ServisniNalog sa nazivom klijenta za prikaz u listi
|
// ServisniNalogSaKlijentom proširuje ServisniNalog sa nazivom klijenta za prikaz u listi
|
||||||
type ServisniNalogSaKlijentom struct {
|
type ServisniNalogSaKlijentom struct {
|
||||||
ServisniNalog
|
ServisniNalog
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
<html lang="sr">
|
<html lang="sr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Priznanica {{.Nalog.BrojNaloga}}</title>
|
<title>Priznanica {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 14px; color: #111; background: #f5f5f5; padding: 32px 16px; }
|
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 14px; color: #111; background: #f5f5f5; padding: 32px 16px; min-width: 640px; }
|
||||||
.stranica { background: #fff; max-width: 640px; margin: 0 auto; padding: 40px; border-radius: 8px; box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08); }
|
.stranica { background: #fff; max-width: 640px; margin: 0 auto; padding: 40px; border-radius: 8px; box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08); }
|
||||||
.zaglavlje { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 32px; padding-bottom: 24px; border-bottom: 1px solid #e5e7eb; }
|
.zaglavlje { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 32px; padding-bottom: 24px; border-bottom: 1px solid #e5e7eb; }
|
||||||
.firma-naziv { font-size: 20px; font-weight: 600; color: #111; }
|
.firma-naziv { font-size: 20px; font-weight: 600; color: #111; }
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
.btn { padding: 9px 20px; border-radius: 8px; font-size: 14px; font-weight: 500; cursor: pointer; border: none; text-decoration: none; display: inline-block; }
|
.btn { padding: 9px 20px; border-radius: 8px; font-size: 14px; font-weight: 500; cursor: pointer; border: none; text-decoration: none; display: inline-block; }
|
||||||
.btn-primarni { background: #2563eb; color: #fff; }
|
.btn-primarni { background: #2563eb; color: #fff; }
|
||||||
.btn-sekundarni { background: #f3f4f6; color: #374151; }
|
.btn-sekundarni { background: #f3f4f6; color: #374151; }
|
||||||
@media print { body { background: #fff; padding: 0; } .stranica { box-shadow: none; border-radius: 0; padding: 20px; max-width: 100%; } .ekran-dugmad { display: none; } }
|
@media print { body { background: #fff; padding: 0; } .stranica { box-shadow: none; border-radius: 0; padding: 40px; max-width: 640px; } .ekran-dugmad { display: none; } }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -73,8 +73,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Artikal</th>
|
<th>Artikal</th>
|
||||||
<th>Kol.</th>
|
<th>Kol.</th>
|
||||||
<th>Cena/kom</th>
|
<th>Cena/kom{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th>Ukupno</th>
|
<th>Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -82,15 +82,15 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{.ArtikalNaziv}}</td>
|
<td>{{.ArtikalNaziv}}</td>
|
||||||
<td>{{.Kolicina}} {{.JedinicaMere}}</td>
|
<td>{{.Kolicina}} {{.JedinicaMere}}</td>
|
||||||
<td>{{dinari .CenaPoKomadu}} din</td>
|
<td>{{if index $.Moduli "pdv"}}{{dinari .CenaPoKomadu}}{{else}}{{dinari .CenaBezPdv}}{{end}} din</td>
|
||||||
<td>{{dinari .Ukupno}} din</td>
|
<td>{{if index $.Moduli "pdv"}}{{dinari .Ukupno}}{{else}}{{dinari .UkupnoBezPdv}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3" class="ukupno-label">Ukupno za naplatu:</td>
|
<td colspan="3" class="ukupno-label">Ukupno za naplatu:</td>
|
||||||
<td class="ukupno-iznos">{{dinari .Nalog.Ukupno}} din</td>
|
<td class="ukupno-iznos">{{if index .Moduli "pdv"}}{{dinari .Nalog.Ukupno}}{{else}}{{dinari .UkupnoBezPdv}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -102,10 +102,17 @@
|
|||||||
<button type="submit" class="premesti-zatvori" aria-label="Zatvori">×</button>
|
<button type="submit" class="premesti-zatvori" aria-label="Zatvori">×</button>
|
||||||
</form>
|
</form>
|
||||||
<div style="display:flex;flex-direction:column;gap:10px;padding:16px;">
|
<div style="display:flex;flex-direction:column;gap:10px;padding:16px;">
|
||||||
|
{{if index .Moduli "pdv"}}
|
||||||
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
|
<span style="color:var(--tekst-sporedni);">Ukupno sa PDV-om</span>
|
||||||
|
<span style="color:var(--tekst-glavni);">{{dinari .UkupnoSveSaPdv}} din</span>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
<div style="display:flex;justify-content:space-between;align-items:center;">
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
<span style="color:var(--tekst-sporedni);">Ukupno</span>
|
<span style="color:var(--tekst-sporedni);">Ukupno</span>
|
||||||
<span style="color:var(--tekst-glavni);">{{dinari .UkupnoSve}} din</span>
|
<span style="color:var(--tekst-glavni);">{{dinari .UkupnoSve}} din</span>
|
||||||
</div>
|
</div>
|
||||||
|
{{end}}
|
||||||
{{if gt .Avans 0.0}}
|
{{if gt .Avans 0.0}}
|
||||||
<div style="display:flex;justify-content:space-between;align-items:center;">
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
<span style="color:var(--tekst-sporedni);">Avans (uplaćeno)</span>
|
<span style="color:var(--tekst-sporedni);">Avans (uplaćeno)</span>
|
||||||
@@ -116,7 +123,7 @@
|
|||||||
{{end}}
|
{{end}}
|
||||||
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:4px;padding-top:10px;border-top:0.5px solid var(--ivica);">
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:4px;padding-top:10px;border-top:0.5px solid var(--ivica);">
|
||||||
<span style="font-size:16px;font-weight:600;color:var(--tekst-glavni);">Za naplatu</span>
|
<span style="font-size:16px;font-weight:600;color:var(--tekst-glavni);">Za naplatu</span>
|
||||||
<span style="font-size:18px;font-weight:600;color:var(--tekst-glavni);" id="za-naplatu-iznos">{{dinari .PreostaloSve}} din</span>
|
<span style="font-size:18px;font-weight:600;color:var(--tekst-glavni);" id="za-naplatu-iznos">{{if index .Moduli "pdv"}}{{dinari .PreostaloSveSaPdv}}{{else}}{{dinari .PreostaloSve}}{{end}} din</span>
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-top:10px;padding-top:10px;border-top:0.5px solid var(--ivica);">
|
<div style="margin-top:10px;padding-top:10px;border-top:0.5px solid var(--ivica);">
|
||||||
<label class="polje-labela">Primljeno (din)</label>
|
<label class="polje-labela">Primljeno (din)</label>
|
||||||
@@ -129,7 +136,7 @@
|
|||||||
<form method="POST" action="/servis/{{.Nalog.ID}}/status" data-refresh="#sadrzaj" style="margin-top:8px;">
|
<form method="POST" action="/servis/{{.Nalog.ID}}/status" data-refresh="#sadrzaj" style="margin-top:8px;">
|
||||||
<input type="hidden" name="_csrf" value="{{.CsrfToken}}">
|
<input type="hidden" name="_csrf" value="{{.CsrfToken}}">
|
||||||
<input type="hidden" name="status" value="Preuzeto">
|
<input type="hidden" name="status" value="Preuzeto">
|
||||||
<input type="hidden" name="naplaceno" value="{{printf "%.2f" .PreostaloSve}}">
|
<input type="hidden" name="naplaceno" value="{{if index .Moduli "pdv"}}{{printf "%.2f" .PreostaloSveSaPdv}}{{else}}{{printf "%.2f" .PreostaloSve}}{{end}}">
|
||||||
<div style="margin-bottom:10px;">
|
<div style="margin-bottom:10px;">
|
||||||
<label class="polje-labela">Način plaćanja</label>
|
<label class="polje-labela">Način plaćanja</label>
|
||||||
<select name="nacin_placanja" id="nacin-placanja-sel" style="width:100%;padding:8px 12px;background:var(--pozadina);border:0.5px solid var(--ivica);border-radius:8px;color:var(--tekst-glavni);font-size:13px;" onchange="ntechNacinPlacanjaBroj(this)">
|
<select name="nacin_placanja" id="nacin-placanja-sel" style="width:100%;padding:8px 12px;background:var(--pozadina);border:0.5px solid var(--ivica);border-radius:8px;color:var(--tekst-glavni);font-size:13px;" onchange="ntechNacinPlacanjaBroj(this)">
|
||||||
@@ -581,7 +588,9 @@
|
|||||||
<th style="padding:8px 10px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:90px;">Šifra</th>
|
<th style="padding:8px 10px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:90px;">Šifra</th>
|
||||||
<th style="padding:8px 10px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:80px;">Kol.</th>
|
<th style="padding:8px 10px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:80px;">Kol.</th>
|
||||||
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Cena/kom</th>
|
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Cena/kom</th>
|
||||||
|
{{if index .Moduli "pdv"}}<th style="padding:8px 10px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:60px;">PDV %</th>{{end}}
|
||||||
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Ukupno</th>
|
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Ukupno</th>
|
||||||
|
{{if index .Moduli "pdv"}}<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Sa PDV</th>{{end}}
|
||||||
<th style="width:50px;"></th>
|
<th style="width:50px;"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -592,7 +601,9 @@
|
|||||||
<td style="padding:9px 10px;font-size:12px;color:var(--tekst-sporedni);font-family:monospace;">{{.Sifra}}</td>
|
<td style="padding:9px 10px;font-size:12px;color:var(--tekst-sporedni);font-family:monospace;">{{.Sifra}}</td>
|
||||||
<td style="padding:9px 10px;text-align:center;font-size:14px;color:var(--tekst-glavni);">{{.Kolicina}}</td>
|
<td style="padding:9px 10px;text-align:center;font-size:14px;color:var(--tekst-glavni);">{{.Kolicina}}</td>
|
||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">{{dinari .CenaKomada}} din</td>
|
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">{{dinari .CenaKomada}} din</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:center;font-size:12px;color:var(--tekst-sporedni);">{{printf "%.0f" .PdvStopa}}%</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{dinari .Ukupno}} din</td>
|
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{dinari .Ukupno}} din</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{dinari .CenaSaPdv}} din</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:center;">
|
<td style="padding:9px 10px;text-align:center;">
|
||||||
{{if and (not $.ZakljucaniUgradjeni) (index $.Dozvole "servis.izmeni")}}
|
{{if and (not $.ZakljucaniUgradjeni) (index $.Dozvole "servis.izmeni")}}
|
||||||
<form method="POST" action="/servis/{{$.Nalog.ID}}/radovi/{{.ID}}/obrisi" style="display:inline;" data-refresh="#radovi-blok, #nalog-ukupno, #predlozeno-blok">
|
<form method="POST" action="/servis/{{$.Nalog.ID}}/radovi/{{.ID}}/obrisi" style="display:inline;" data-refresh="#radovi-blok, #nalog-ukupno, #predlozeno-blok">
|
||||||
@@ -613,7 +624,9 @@
|
|||||||
<td style="padding:9px 10px;font-size:12px;color:var(--tekst-sporedni);font-family:monospace;">{{.Sifra}}</td>
|
<td style="padding:9px 10px;font-size:12px;color:var(--tekst-sporedni);font-family:monospace;">{{.Sifra}}</td>
|
||||||
<td style="padding:9px 10px;text-align:center;font-size:14px;color:var(--tekst-glavni);">{{.Kolicina}}</td>
|
<td style="padding:9px 10px;text-align:center;font-size:14px;color:var(--tekst-glavni);">{{.Kolicina}}</td>
|
||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">{{dinari .CenaKomada}} din</td>
|
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">{{dinari .CenaKomada}} din</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:center;font-size:12px;color:var(--tekst-sporedni);">{{printf "%.0f" .PdvStopa}}%</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{dinari .Ukupno}} din</td>
|
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{dinari .Ukupno}} din</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{dinari .CenaSaPdv}} din</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:center;">
|
<td style="padding:9px 10px;text-align:center;">
|
||||||
{{if and (index $.Dozvole "servis.izmeni") (ne $.Nalog.Status "U popravci")}}
|
{{if and (index $.Dozvole "servis.izmeni") (ne $.Nalog.Status "U popravci")}}
|
||||||
<form method="POST" action="/servis/{{$.Nalog.ID}}/radovi/{{.ID}}/obrisi" style="display:inline;" data-refresh="#radovi-blok, #nalog-ukupno, #predlozeno-blok">
|
<form method="POST" action="/servis/{{$.Nalog.ID}}/radovi/{{.ID}}/obrisi" style="display:inline;" data-refresh="#radovi-blok, #nalog-ukupno, #predlozeno-blok">
|
||||||
@@ -703,7 +716,9 @@
|
|||||||
<th style="padding:8px 10px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:90px;">Šifra</th>
|
<th style="padding:8px 10px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:90px;">Šifra</th>
|
||||||
<th style="padding:8px 10px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:80px;">Kol.</th>
|
<th style="padding:8px 10px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:80px;">Kol.</th>
|
||||||
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Cena/kom</th>
|
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Cena/kom</th>
|
||||||
|
{{if index .Moduli "pdv"}}<th style="padding:8px 10px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:60px;">PDV %</th>{{end}}
|
||||||
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Ukupno</th>
|
<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Ukupno</th>
|
||||||
|
{{if index .Moduli "pdv"}}<th style="padding:8px 10px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);width:130px;">Sa PDV</th>{{end}}
|
||||||
<th style="width:50px;"></th>
|
<th style="width:50px;"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -718,9 +733,13 @@
|
|||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">
|
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">
|
||||||
{{if .Kolicina}}{{dinari .CenaKomada}} din{{else}}—{{end}}
|
{{if .Kolicina}}{{dinari .CenaKomada}} din{{else}}—{{end}}
|
||||||
</td>
|
</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:center;font-size:12px;color:var(--tekst-sporedni);">{{printf "%.0f" .PdvStopa}}%</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">
|
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">
|
||||||
{{if .Kolicina}}{{dinari .Ukupno}} din{{else}}—{{end}}
|
{{if .Kolicina}}{{dinari .Ukupno}} din{{else}}—{{end}}
|
||||||
</td>
|
</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">
|
||||||
|
{{if .Kolicina}}{{dinari .CenaSaPdv}} din{{else}}—{{end}}
|
||||||
|
</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:center;">
|
<td style="padding:9px 10px;text-align:center;">
|
||||||
{{if and (not $.ZakljucaniUgradjeni) (index $.Dozvole "servis.izmeni")}}
|
{{if and (not $.ZakljucaniUgradjeni) (index $.Dozvole "servis.izmeni")}}
|
||||||
<form method="POST" action="/servis/{{$.Nalog.ID}}/delovi/{{.ID}}/obrisi" style="display:inline;" data-refresh="#delovi-blok, #nalog-zaglavlje, #nalog-ukupno, #predlozeno-blok">
|
<form method="POST" action="/servis/{{$.Nalog.ID}}/delovi/{{.ID}}/obrisi" style="display:inline;" data-refresh="#delovi-blok, #nalog-zaglavlje, #nalog-ukupno, #predlozeno-blok">
|
||||||
@@ -745,9 +764,13 @@
|
|||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">
|
<td style="padding:9px 10px;text-align:right;font-size:14px;color:var(--tekst-glavni);">
|
||||||
{{if .Kolicina}}{{dinari .CenaKomada}} din{{else}}—{{end}}
|
{{if .Kolicina}}{{dinari .CenaKomada}} din{{else}}—{{end}}
|
||||||
</td>
|
</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:center;font-size:12px;color:var(--tekst-sporedni);">{{printf "%.0f" .PdvStopa}}%</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">
|
<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">
|
||||||
{{if .Kolicina}}{{dinari .Ukupno}} din{{else}}—{{end}}
|
{{if .Kolicina}}{{dinari .Ukupno}} din{{else}}—{{end}}
|
||||||
</td>
|
</td>
|
||||||
|
{{if index $.Moduli "pdv"}}<td style="padding:9px 10px;text-align:right;font-size:14px;font-weight:500;color:var(--tekst-glavni);">
|
||||||
|
{{if .Kolicina}}{{dinari .CenaSaPdv}} din{{else}}—{{end}}
|
||||||
|
</td>{{end}}
|
||||||
<td style="padding:9px 10px;text-align:center;">
|
<td style="padding:9px 10px;text-align:center;">
|
||||||
{{if and (index $.Dozvole "servis.izmeni") (ne $.Nalog.Status "U popravci")}}
|
{{if and (index $.Dozvole "servis.izmeni") (ne $.Nalog.Status "U popravci")}}
|
||||||
{{if .ID}}
|
{{if .ID}}
|
||||||
@@ -903,20 +926,41 @@
|
|||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
{{if index .Moduli "pdv"}}
|
||||||
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
|
<span style="font-size:14px;color:var(--tekst-sporedni);">Usluge (rad) sa PDV-om</span>
|
||||||
|
<span style="font-size:14px;color:var(--tekst-glavni);">{{dinari .UkupnoRadoviSaPdv}} din</span>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
<div style="display:flex;justify-content:space-between;align-items:center;">
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
<span style="font-size:14px;color:var(--tekst-sporedni);">Usluge (rad)</span>
|
<span style="font-size:14px;color:var(--tekst-sporedni);">Usluge (rad)</span>
|
||||||
<span style="font-size:14px;color:var(--tekst-glavni);">{{dinari .UkupnoRadovi}} din</span>
|
<span style="font-size:14px;color:var(--tekst-glavni);">{{dinari .UkupnoRadovi}} din</span>
|
||||||
</div>
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{if index .Moduli "pdv"}}
|
||||||
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
|
<span style="font-size:14px;color:var(--tekst-sporedni);">Ugrađeni delovi sa PDV-om</span>
|
||||||
|
<span style="font-size:14px;color:var(--tekst-glavni);">{{dinari .UkupnoDeloviSaPdv}} din</span>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
<div style="display:flex;justify-content:space-between;align-items:center;">
|
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||||
<span style="font-size:14px;color:var(--tekst-sporedni);">Ugrađeni delovi</span>
|
<span style="font-size:14px;color:var(--tekst-sporedni);">Ugrađeni delovi</span>
|
||||||
<span style="font-size:14px;color:var(--tekst-glavni);">{{dinari .UkupnoDelovi}} din</span>
|
<span style="font-size:14px;color:var(--tekst-glavni);">{{dinari .UkupnoDelovi}} din</span>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
{{if index .Moduli "pdv"}}
|
||||||
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:4px;">
|
||||||
|
<span style="font-size:16px;font-weight:700;color:var(--tekst-glavni);">UKUPNO sa PDV-om</span>
|
||||||
|
<span style="font-size:20px;font-weight:700;color:var(--tekst-glavni);">{{dinari .UkupnoSveSaPdv}} din</span>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:14px;border-top:1px solid var(--ivica);">
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:14px;border-top:1px solid var(--ivica);">
|
||||||
<span style="font-size:16px;font-weight:700;color:var(--tekst-glavni);">UKUPNO</span>
|
<span style="font-size:16px;font-weight:700;color:var(--tekst-glavni);">UKUPNO</span>
|
||||||
<span style="font-size:20px;font-weight:700;color:var(--tekst-glavni);">{{dinari .UkupnoSve}} din</span>
|
<span style="font-size:20px;font-weight:700;color:var(--tekst-glavni);">{{dinari .UkupnoSve}} din</span>
|
||||||
</div>
|
</div>
|
||||||
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<title>Garantni list — {{.Nalog.BrojNaloga}}</title>
|
<title>Garantni list — {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { 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; }
|
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; }
|
.strana { max-width: 780px; margin: 0 auto; padding: 32px 40px; }
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
body { font-size: 12px; }
|
body { font-size: 12px; }
|
||||||
.strana { padding: 16px 20px; max-width: 100%; }
|
.strana { padding: 32px 40px; max-width: 780px; }
|
||||||
.dugme-stampa { display: none !important; }
|
.dugme-stampa { display: none !important; }
|
||||||
@page { size: A4; margin: 12mm 14mm; }
|
@page { size: A4; margin: 12mm 14mm; }
|
||||||
}
|
}
|
||||||
@@ -153,8 +153,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Opis rada</th>
|
<th>Opis rada</th>
|
||||||
<th>Kol.</th>
|
<th>Kol.</th>
|
||||||
<th>Cena</th>
|
<th>Cena{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th>Ukupno</th>
|
<th>Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -162,8 +162,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{.Naziv}}</td>
|
<td>{{.Naziv}}</td>
|
||||||
<td style="text-align:right;">{{printf "%.0f" .Kolicina}}</td>
|
<td style="text-align:right;">{{printf "%.0f" .Kolicina}}</td>
|
||||||
<td style="text-align:right;">{{dinari .CenaKomada}}</td>
|
<td style="text-align:right;">{{if index $.Moduli "pdv"}}{{dinari .CenaSaPdv}}{{else}}{{dinari .CenaKomada}}{{end}}</td>
|
||||||
<td>{{dinari .Ukupno}}</td>
|
<td>{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -183,8 +183,8 @@
|
|||||||
<th>Naziv</th>
|
<th>Naziv</th>
|
||||||
<th>Šifra</th>
|
<th>Šifra</th>
|
||||||
<th>Kol.</th>
|
<th>Kol.</th>
|
||||||
<th>Cena</th>
|
<th>Cena{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th>Ukupno</th>
|
<th>Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -194,8 +194,8 @@
|
|||||||
<td>{{.ArtikalNaziv}}</td>
|
<td>{{.ArtikalNaziv}}</td>
|
||||||
<td style="font-family:monospace;">{{.ArtikalSifra}}</td>
|
<td style="font-family:monospace;">{{.ArtikalSifra}}</td>
|
||||||
<td style="text-align:right;">{{.Kolicina}}</td>
|
<td style="text-align:right;">{{.Kolicina}}</td>
|
||||||
<td style="text-align:right;">{{dinari .CenaKomada}}</td>
|
<td style="text-align:right;">{{if index $.Moduli "pdv"}}{{dinari .CenaSaPdv}}{{else}}{{dinari .CenaKomada}}{{end}}</td>
|
||||||
<td>{{dinari .Ukupno}}</td>
|
<td>{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<title>Nalepnica — {{.Nalog.BrojNaloga}}</title>
|
<title>Nalepnica — {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
html, body { background: #f4f4f5; }
|
html, body { background: #f4f4f5; min-width: 70mm; }
|
||||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif; color: #111; }
|
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif; color: #111; }
|
||||||
|
|
||||||
/* nalepnica 70×40 mm */
|
/* nalepnica 70×40 mm */
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<title>Otpremnica — {{.Nalog.BrojNaloga}}</title>
|
<title>Otpremnica — {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { 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; }
|
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; }
|
.strana { max-width: 780px; margin: 0 auto; padding: 32px 40px; }
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
body { font-size: 12px; }
|
body { font-size: 12px; }
|
||||||
.strana { padding: 16px 20px; max-width: 100%; }
|
.strana { padding: 32px 40px; max-width: 780px; }
|
||||||
.dugme-stampa { display: none !important; }
|
.dugme-stampa { display: none !important; }
|
||||||
@page { size: A4; margin: 12mm 14mm; }
|
@page { size: A4; margin: 12mm 14mm; }
|
||||||
/* red tabele se ne sme prelomiti preko granice stranice — prelom pada između stavki */
|
/* red tabele se ne sme prelomiti preko granice stranice — prelom pada između stavki */
|
||||||
@@ -177,8 +177,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Opis rada</th>
|
<th>Opis rada</th>
|
||||||
<th class="desno" style="width:70px;">Kol.</th>
|
<th class="desno" style="width:70px;">Kol.</th>
|
||||||
<th class="desno" style="width:120px;">Cena/kom</th>
|
<th class="desno" style="width:120px;">Cena/kom{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th class="desno" style="width:120px;">Ukupno</th>
|
<th class="desno" style="width:120px;">Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -186,8 +186,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{.Naziv}}</td>
|
<td>{{.Naziv}}</td>
|
||||||
<td class="desno">{{printf "%.0f" .Kolicina}}</td>
|
<td class="desno">{{printf "%.0f" .Kolicina}}</td>
|
||||||
<td class="desno">{{dinari .CenaKomada}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .CenaSaPdv}}{{else}}{{dinari .CenaKomada}}{{end}} din</td>
|
||||||
<td class="desno">{{dinari .Ukupno}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -204,8 +204,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Artikal</th>
|
<th>Artikal</th>
|
||||||
<th class="desno" style="width:70px;">Kol.</th>
|
<th class="desno" style="width:70px;">Kol.</th>
|
||||||
<th class="desno" style="width:120px;">Cena/kom</th>
|
<th class="desno" style="width:120px;">Cena/kom{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th class="desno" style="width:120px;">Ukupno</th>
|
<th class="desno" style="width:120px;">Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -213,13 +213,13 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{.ArtikalNaziv}}</td>
|
<td>{{.ArtikalNaziv}}</td>
|
||||||
<td class="desno">{{.Kolicina}}</td>
|
<td class="desno">{{.Kolicina}}</td>
|
||||||
<td class="desno">{{dinari .CenaKomada}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .CenaSaPdv}}{{else}}{{dinari .CenaKomada}}{{end}} din</td>
|
||||||
<td class="desno">{{dinari .Ukupno}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
<tr class="ukupno-red">
|
<tr class="ukupno-red">
|
||||||
<td colspan="3">Ukupno delovi</td>
|
<td colspan="3">Ukupno delovi</td>
|
||||||
<td class="desno">{{dinari .UkupnoDelovi}} din</td>
|
<td class="desno">{{if index .Moduli "pdv"}}{{dinari .UkupnoDeloviSaPdv}}{{else}}{{dinari .UkupnoDelovi}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -246,7 +246,7 @@
|
|||||||
</table>
|
</table>
|
||||||
<div class="naplata-blok">
|
<div class="naplata-blok">
|
||||||
<div class="naplata-labela">Za naplatu pri preuzimanju:</div>
|
<div class="naplata-labela">Za naplatu pri preuzimanju:</div>
|
||||||
<div class="naplata-iznos">{{dinari .PreostaloSve}} din</div>
|
<div class="naplata-iznos">{{if index .Moduli "pdv"}}{{dinari .PreostaloSveSaPdv}}{{else}}{{dinari .PreostaloSve}}{{end}} din</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{else if .Nalog.CenaKonacna}}
|
{{else if .Nalog.CenaKonacna}}
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
{{if gt .UkupnoDelovi 0.0}}
|
{{if gt .UkupnoDelovi 0.0}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>Ugrađeni delovi i materijal</td>
|
<td>Ugrađeni delovi i materijal</td>
|
||||||
<td class="desno">{{dinari .UkupnoDelovi}} din</td>
|
<td class="desno">{{if index .Moduli "pdv"}}{{dinari .UkupnoDeloviSaPdv}}{{else}}{{dinari .UkupnoDelovi}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if .ImaAvans}}
|
{{if .ImaAvans}}
|
||||||
@@ -274,7 +274,7 @@
|
|||||||
</table>
|
</table>
|
||||||
<div class="naplata-blok">
|
<div class="naplata-blok">
|
||||||
<div class="naplata-labela">Za naplatu pri preuzimanju:</div>
|
<div class="naplata-labela">Za naplatu pri preuzimanju:</div>
|
||||||
<div class="naplata-iznos">{{dinari .PreostaloSve}} din</div>
|
<div class="naplata-iznos">{{if index .Moduli "pdv"}}{{dinari .PreostaloSveSaPdv}}{{else}}{{dinari .PreostaloSve}}{{end}} din</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<title>Predračun — {{.Nalog.BrojNaloga}}</title>
|
<title>Predračun — {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { 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; }
|
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; }
|
.strana { max-width: 780px; margin: 0 auto; padding: 32px 40px; }
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
body { font-size: 12px; }
|
body { font-size: 12px; }
|
||||||
.strana { padding: 16px 20px; max-width: 100%; }
|
.strana { padding: 32px 40px; max-width: 780px; }
|
||||||
.dugme-stampa { display: none !important; }
|
.dugme-stampa { display: none !important; }
|
||||||
@page { size: A4; margin: 12mm 14mm; }
|
@page { size: A4; margin: 12mm 14mm; }
|
||||||
.tabela tr { break-inside: avoid; }
|
.tabela tr { break-inside: avoid; }
|
||||||
@@ -152,8 +152,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Usluga</th>
|
<th>Usluga</th>
|
||||||
<th class="desno" style="width:70px;">Kol.</th>
|
<th class="desno" style="width:70px;">Kol.</th>
|
||||||
<th class="desno" style="width:120px;">Cena</th>
|
<th class="desno" style="width:120px;">Cena{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th class="desno" style="width:120px;">Ukupno</th>
|
<th class="desno" style="width:120px;">Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -161,8 +161,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{.Naziv}}</td>
|
<td>{{.Naziv}}</td>
|
||||||
<td class="desno">{{.Kolicina}}</td>
|
<td class="desno">{{.Kolicina}}</td>
|
||||||
<td class="desno">{{dinari .CenaKomada}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .CenaSaPdv}}{{else}}{{dinari .CenaKomada}}{{end}} din</td>
|
||||||
<td class="desno">{{dinari .Ukupno}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -179,8 +179,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Artikal</th>
|
<th>Artikal</th>
|
||||||
<th class="desno" style="width:70px;">Kol.</th>
|
<th class="desno" style="width:70px;">Kol.</th>
|
||||||
<th class="desno" style="width:120px;">Cena/kom</th>
|
<th class="desno" style="width:120px;">Cena/kom{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
<th class="desno" style="width:120px;">Ukupno</th>
|
<th class="desno" style="width:120px;">Ukupno{{if index .Moduli "pdv"}} sa PDV{{end}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -188,8 +188,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{.ArtikalNaziv}}</td>
|
<td>{{.ArtikalNaziv}}</td>
|
||||||
<td class="desno">{{.Kolicina}}</td>
|
<td class="desno">{{.Kolicina}}</td>
|
||||||
<td class="desno">{{dinari .CenaKomada}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .CenaSaPdv}}{{else}}{{dinari .CenaKomada}}{{end}} din</td>
|
||||||
<td class="desno">{{dinari .Ukupno}} din</td>
|
<td class="desno">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -208,11 +208,11 @@
|
|||||||
|
|
||||||
<!-- rekapitulacija: ponavlja sume po sekciji (korisno kad tabele pređu na prethodnu stranu) -->
|
<!-- rekapitulacija: ponavlja sume po sekciji (korisno kad tabele pređu na prethodnu stranu) -->
|
||||||
<div class="rekap">
|
<div class="rekap">
|
||||||
{{if .Radovi}}<div class="rekap-red" style="font-weight:600;"><span>Ukupno radovi</span><span>{{dinari .UkupnoRad}} din</span></div>{{end}}
|
{{if .Radovi}}<div class="rekap-red" style="font-weight:600;"><span>Ukupno radovi</span><span>{{if index .Moduli "pdv"}}{{dinari .UkupnoRadSaPdv}}{{else}}{{dinari .UkupnoRad}}{{end}} din</span></div>{{end}}
|
||||||
{{if .ServisniDelovi}}<div class="rekap-red" style="font-weight:600;"><span>Ukupno delovi</span><span>{{dinari .UkupnoDelovi}} din</span></div>{{end}}
|
{{if .ServisniDelovi}}<div class="rekap-red" style="font-weight:600;"><span>Ukupno delovi</span><span>{{if index .Moduli "pdv"}}{{dinari .UkupnoDeloviSaPdv}}{{else}}{{dinari .UkupnoDelovi}}{{end}} din</span></div>{{end}}
|
||||||
<div class="rekap-ukupno">
|
<div class="rekap-ukupno">
|
||||||
<div class="rekap-ukupno-labela">Ukupno (procena):</div>
|
<div class="rekap-ukupno-labela">Ukupno (procena):</div>
|
||||||
<div class="rekap-ukupno-iznos">{{dinari .UkupnoSve}} din</div>
|
<div class="rekap-ukupno-iznos">{{if index .Moduli "pdv"}}{{dinari .UkupnoSveSaPdv}}{{else}}{{dinari .UkupnoSve}}{{end}} din</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<title>Radni nalog {{.Nalog.BrojNaloga}}</title>
|
<title>Radni nalog {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { 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; }
|
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; }
|
.strana { max-width: 780px; margin: 0 auto; padding: 32px 40px; }
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
body { font-size: 12px; }
|
body { font-size: 12px; }
|
||||||
.strana { padding: 12px 16px; max-width: 100%; }
|
.strana { padding: 32px 40px; max-width: 780px; }
|
||||||
.dugme-stampa { display: none !important; }
|
.dugme-stampa { display: none !important; }
|
||||||
@page { size: A4; margin: 8mm 10mm; }
|
@page { size: A4; margin: 8mm 10mm; }
|
||||||
.odeljak { margin-bottom: 10px; }
|
.odeljak { margin-bottom: 10px; }
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<title>Revers — {{.Nalog.BrojNaloga}}</title>
|
<title>Revers — {{.Nalog.BrojNaloga}}</title>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
* { 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; }
|
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; }
|
.strana { max-width: 780px; margin: 0 auto; padding: 32px 40px; }
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
@page { size: A4; margin: 12mm 14mm 18mm; }
|
@page { size: A4; margin: 12mm 14mm 18mm; }
|
||||||
@media print {
|
@media print {
|
||||||
body { font-size: 12px; }
|
body { font-size: 12px; }
|
||||||
.strana { padding: 16px 20px; max-width: 100%; }
|
.strana { padding: 32px 40px; max-width: 780px; }
|
||||||
.dugme-stampa { display: none !important; }
|
.dugme-stampa { display: none !important; }
|
||||||
/* uslovi servisa (sa potpisima) idu na novu stranicu */
|
/* uslovi servisa (sa potpisima) idu na novu stranicu */
|
||||||
.uslovi-strana { break-before: page; }
|
.uslovi-strana { break-before: page; }
|
||||||
|
|||||||
@@ -243,26 +243,26 @@
|
|||||||
{{range .Radovi}}
|
{{range .Radovi}}
|
||||||
<div class="red">
|
<div class="red">
|
||||||
<span class="red-labela">{{.Naziv}}{{if gt .Kolicina 1.0}} ×{{.Kolicina}}{{end}}</span>
|
<span class="red-labela">{{.Naziv}}{{if gt .Kolicina 1.0}} ×{{.Kolicina}}{{end}}</span>
|
||||||
<span class="red-vrednost">{{dinari .Ukupno}} din</span>
|
<span class="red-vrednost">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</span>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
{{range .ServisniDelovi}}
|
{{range .ServisniDelovi}}
|
||||||
<div class="red">
|
<div class="red">
|
||||||
<span class="red-labela">{{.ArtikalNaziv}}{{if gt .Kolicina 1}} ×{{.Kolicina}}{{end}}</span>
|
<span class="red-labela">{{.ArtikalNaziv}}{{if gt .Kolicina 1}} ×{{.Kolicina}}{{end}}</span>
|
||||||
<span class="red-vrednost">{{dinari .Ukupno}} din</span>
|
<span class="red-vrednost">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</span>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
<div class="cena-blok" style="margin-top:12px;display:flex;justify-content:space-between;align-items:center;">
|
<div class="cena-blok" style="margin-top:12px;display:flex;justify-content:space-between;align-items:center;">
|
||||||
<span class="cena-labela" style="margin:0;">Ukupno (procena)</span>
|
<span class="cena-labela" style="margin:0;">Ukupno (procena)</span>
|
||||||
<span class="cena-vrednost">{{dinari .UkupnoSve}} din</span>
|
<span class="cena-vrednost">{{if index .Moduli "pdv"}}{{dinari .UkupnoSveSaPdv}}{{else}}{{dinari .UkupnoSve}}{{end}} din</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{if .ImaPredlog}}
|
{{if .ImaPredlog}}
|
||||||
<div class="cena-blok" style="margin-top:8px;padding:10px 14px;display:flex;justify-content:space-between;align-items:center;background:#0f172a;border:1px solid #f59e0b;border-radius:8px;">
|
<div class="cena-blok" style="margin-top:8px;padding:10px 14px;display:flex;justify-content:space-between;align-items:center;background:#0f172a;border:1px solid #f59e0b;border-radius:8px;">
|
||||||
<span class="cena-labela" style="margin:0;color:#fbbf24;">Sa predlogom</span>
|
<span class="cena-labela" style="margin:0;color:#fbbf24;">Sa predlogom</span>
|
||||||
<span class="cena-vrednost" id="sa-predlogom-zbir" data-base="{{printf "%.2f" .UkupnoSve}}" style="font-size:16px;font-weight:700;color:#fbbf24;">{{dinari .UkupnoSaPredlogom}} din</span>
|
<span class="cena-vrednost" id="sa-predlogom-zbir" data-base="{{if index .Moduli "pdv"}}{{printf "%.2f" .UkupnoSveSaPdv}}{{else}}{{printf "%.2f" .UkupnoSve}}{{end}}" style="font-size:16px;font-weight:700;color:#fbbf24;">{{if index .Moduli "pdv"}}{{dinari .UkupnoSaPredlogomSaPdv}}{{else}}{{dinari .UkupnoSaPredlogom}}{{end}} din</span>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
@@ -286,11 +286,11 @@
|
|||||||
{{range .PredlozeniRadovi}}
|
{{range .PredlozeniRadovi}}
|
||||||
<label style="display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:0.5px solid #1e293b;cursor:pointer;">
|
<label style="display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:0.5px solid #1e293b;cursor:pointer;">
|
||||||
<span style="display:flex;align-items:center;gap:10px;flex:1;">
|
<span style="display:flex;align-items:center;gap:10px;flex:1;">
|
||||||
<input type="checkbox" name="rad_id" value="{{.ID}}" checked data-iznos="{{printf "%.2f" .Ukupno}}"
|
<input type="checkbox" name="rad_id" value="{{.ID}}" checked data-iznos="{{if index $.Moduli "pdv"}}{{printf "%.2f" .UkupnoSaPdv}}{{else}}{{printf "%.2f" .Ukupno}}{{end}}"
|
||||||
style="width:18px;height:18px;accent-color:#f59e0b;flex-shrink:0;">
|
style="width:18px;height:18px;accent-color:#f59e0b;flex-shrink:0;">
|
||||||
<span style="font-size:13px;color:#e2e8f0;">{{.Naziv}}{{if gt .Kolicina 1.0}} × {{printf "%.0f" .Kolicina}}{{end}}</span>
|
<span style="font-size:13px;color:#e2e8f0;">{{.Naziv}}{{if gt .Kolicina 1.0}} × {{printf "%.0f" .Kolicina}}{{end}}</span>
|
||||||
</span>
|
</span>
|
||||||
<span style="font-size:13px;font-weight:600;color:#fbbf24;white-space:nowrap;">{{dinari .Ukupno}} din</span>
|
<span style="font-size:13px;font-weight:600;color:#fbbf24;white-space:nowrap;">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</span>
|
||||||
</label>
|
</label>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
@@ -300,18 +300,18 @@
|
|||||||
{{range .PredlozeniDelovi}}
|
{{range .PredlozeniDelovi}}
|
||||||
<label style="display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:0.5px solid #1e293b;cursor:pointer;">
|
<label style="display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:0.5px solid #1e293b;cursor:pointer;">
|
||||||
<span style="display:flex;align-items:center;gap:10px;flex:1;">
|
<span style="display:flex;align-items:center;gap:10px;flex:1;">
|
||||||
<input type="checkbox" name="artikal_id" value="{{.ArtikalID}}" checked data-iznos="{{printf "%.2f" .Ukupno}}"
|
<input type="checkbox" name="artikal_id" value="{{.ArtikalID}}" checked data-iznos="{{if index $.Moduli "pdv"}}{{printf "%.2f" .UkupnoSaPdv}}{{else}}{{printf "%.2f" .Ukupno}}{{end}}"
|
||||||
style="width:18px;height:18px;accent-color:#f59e0b;flex-shrink:0;">
|
style="width:18px;height:18px;accent-color:#f59e0b;flex-shrink:0;">
|
||||||
<span style="font-size:13px;color:#e2e8f0;">{{.ArtikalNaziv}}{{if gt .Kolicina 1}} × {{.Kolicina}}{{end}}</span>
|
<span style="font-size:13px;color:#e2e8f0;">{{.ArtikalNaziv}}{{if gt .Kolicina 1}} × {{.Kolicina}}{{end}}</span>
|
||||||
</span>
|
</span>
|
||||||
<span style="font-size:13px;font-weight:600;color:#fbbf24;white-space:nowrap;">{{dinari .Ukupno}} din</span>
|
<span style="font-size:13px;font-weight:600;color:#fbbf24;white-space:nowrap;">{{if index $.Moduli "pdv"}}{{dinari .UkupnoSaPdv}}{{else}}{{dinari .Ukupno}}{{end}} din</span>
|
||||||
</label>
|
</label>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
<div class="cena-blok predlog-ukupno" style="margin-top:12px;display:flex;justify-content:space-between;align-items:center;">
|
<div class="cena-blok predlog-ukupno" style="margin-top:12px;display:flex;justify-content:space-between;align-items:center;">
|
||||||
<span class="cena-labela" style="margin:0;">Predlog ukupno</span>
|
<span class="cena-labela" style="margin:0;">Predlog ukupno</span>
|
||||||
<span class="cena-vrednost" id="predlog-zbir">{{dinari .UkupnoPredlog}} din</span>
|
<span class="cena-vrednost" id="predlog-zbir">{{if index .Moduli "pdv"}}{{dinari .UkupnoPredlogSaPdv}}{{else}}{{dinari .UkupnoPredlog}}{{end}} din</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<textarea name="komentar" placeholder="Poruka serviseru (opciono)..." rows="2"
|
<textarea name="komentar" placeholder="Poruka serviseru (opciono)..." rows="2"
|
||||||
|
|||||||
Reference in New Issue
Block a user