Izveštaji: prava zarada (cena - nabavna cena) za prodaju i servis

Nabavna cena se zamrzava na stavci prodaje i ugrađenom servisnom delu
u trenutku unosa (migracija 101), umesto naknadnog join-a na trenutnu
artikli.nabavna_cena. Tabela mesečnog prihoda sad prikazuje zaradu uz
prodaju/servis/ukupno, a grafikon dobija preklopljene tamne barove
(zarada) preko svetlih (ukupan prihod), odvojene za prodaju i servis.
This commit is contained in:
2026-07-03 03:49:18 +02:00
parent 54e9439430
commit 4a94db7684
8 changed files with 179 additions and 44 deletions
+55 -14
View File
@@ -51,23 +51,41 @@
<thead>
<tr style="border-bottom:0.5px solid var(--ivica);">
<th style="padding:8px 12px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Mesec</th>
<th style="padding:8px 12px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Prodaja</th>
<th style="padding:8px 12px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Servis</th>
<th style="padding:8px 12px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Ukupno</th>
<th style="padding:8px 12px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Prodaja</th>
<th style="padding:8px 12px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Servis</th>
<th style="padding:8px 12px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Ukupno</th>
</tr>
</thead>
<tbody>
{{range .MesecniPrihodi}}
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:8px 12px;font-size:13px;color:var(--tekst-glavni);">{{.MesecPrikaz}}</td>
<td style="padding:8px 12px;text-align:right;font-size:13px;color:var(--tekst-sporedni);">
{{if gt .Prodaja 0.0}}{{dinariCeli .Prodaja}} din{{else}}—{{end}}
<td style="padding:8px 12px;font-size:13px;color:var(--tekst-sporedni);">
{{if gt .Prodaja 0.0}}
<div style="display:grid;grid-template-columns:1fr auto 1fr;gap:6px;">
<span style="text-align:right;">{{dinariCeli .Prodaja}} din</span>
<span>-</span>
<span style="text-align:left;">{{dinariCeli .ZaradaProdaja}} din</span>
</div>
{{else}}<div style="text-align:center;"></div>{{end}}
</td>
<td style="padding:8px 12px;text-align:right;font-size:13px;color:var(--tekst-sporedni);">
{{if gt .Servis 0.0}}{{dinariCeli .Servis}} din{{else}}—{{end}}
<td style="padding:8px 12px;font-size:13px;color:var(--tekst-sporedni);">
{{if gt .Servis 0.0}}
<div style="display:grid;grid-template-columns:1fr auto 1fr;gap:6px;">
<span style="text-align:right;">{{dinariCeli .Servis}} din</span>
<span>-</span>
<span style="text-align:left;">{{dinariCeli .ZaradaServis}} din</span>
</div>
{{else}}<div style="text-align:center;"></div>{{end}}
</td>
<td style="padding:8px 12px;text-align:right;font-size:13px;font-weight:500;color:var(--tekst-glavni);">
{{if gt .Ukupno 0.0}}{{dinariCeli .Ukupno}} din{{else}}—{{end}}
<td style="padding:8px 12px;font-size:13px;font-weight:500;color:var(--tekst-glavni);">
{{if gt .Ukupno 0.0}}
<div style="display:grid;grid-template-columns:1fr auto 1fr;gap:6px;">
<span style="text-align:right;">{{dinariCeli .Ukupno}} din</span>
<span>-</span>
<span style="text-align:left;">{{dinariCeli .Zarada}} din</span>
</div>
{{else}}<div style="text-align:center;"></div>{{end}}
</td>
</tr>
{{end}}
@@ -207,18 +225,40 @@
labels: podaci.labele,
datasets: [
{
label: 'Prodaja',
label: 'Prodaja — ukupno',
data: podaci.prodaja,
backgroundColor: 'rgba(79, 126, 248, 0.75)',
backgroundColor: 'rgba(79, 126, 248, 0.35)',
borderRadius: 4,
borderSkipped: false,
stack: 'prodaja',
order: 2,
},
{
label: 'Servis',
label: 'Servis — ukupno',
data: podaci.servis,
backgroundColor: 'rgba(22, 163, 74, 0.75)',
backgroundColor: 'rgba(22, 163, 74, 0.35)',
borderRadius: 4,
borderSkipped: false,
stack: 'servis',
order: 2,
},
{
label: 'Zarada — prodaja',
data: podaci.zaradaProdaja,
backgroundColor: 'rgba(29, 66, 168, 0.9)',
borderRadius: 4,
borderSkipped: false,
stack: 'prodaja',
order: 1,
},
{
label: 'Zarada — servis',
data: podaci.zaradaServis,
backgroundColor: 'rgba(21, 94, 51, 0.9)',
borderRadius: 4,
borderSkipped: false,
stack: 'servis',
order: 1,
}
]
},
@@ -239,11 +279,12 @@
},
scales: {
x: {
stacked: false,
stacked: true,
ticks: { color: tekstBoja, font: { size: 11, family: 'DejaVu Sans, Ubuntu, system-ui, sans-serif' } },
grid: { color: ivicaBoja }
},
y: {
stacked: false,
ticks: {
color: tekstBoja,
font: { size: 11, family: 'DejaVu Sans, Ubuntu, system-ui, sans-serif' },