FILTR:
Všichni
{{ t.short_name || t.full_name }}{{ t.id===user.id ? ' ★' : '' }}
{{ periodKindLabel(periodDetail.kind) }} — {{ periodDetail.label }}
Od–do: {{ fmtDate(periodDetail.date_from) }} – {{ fmtDate(periodDetail.date_to) }}
{{ periodDetail.description }}
🔒 Vidí jen administrátoři
{{ periodModal.id ? 'Upravit období' : 'Nové významné období' }}
{{ dayDetailTitle }}
{{ ev.object_name || 'Bez objektu' }}
! ! 🔒{{ ev.title }}
Žádné zakázky na tento den.
Koš je prázdný — nic nebylo vyhozeno.
{{ it.kind==='note' ? '📝' : '🗂️' }}
{{ it.title || '(bez názvu)' }}
{{ it.object }} · {{ fmtDate(it.when) }}
{{ d }}
Techniciukládám…×
{{ b.p.label }}
‹
! ! {{ evStartTime(bar.ev) }} 🔒{{ bar.ev.object_name }} · {{ bar.ev.title }}
{{ initials(te.short_name, te.full_name) }}
+
›
{{ day.num }}
{{ av.name }} {{ av.unavailable ? '✕' : minToStr(av.s)+'–'+minToStr(av.e) }}
{{ initials(te.short_name, te.full_name) }}
🔒
{{ (cn.start_at && !cn.all_day) ? cn.start_at.substring(11,16) + ' ' + cn.text : cn.text }}
+ pozn.
{{ initials(ev.creator_name, ev.creator_full_name) }}
! ! 🔒{{ ev.title }}
{{ dayNames[i] }} {{ day.num }}.{{ parseInt(day.date.substring(5,7)) }}.
{{ initials(te.short_name, te.full_name) }}
🔒
{{ (cn.start_at && !cn.all_day) ? cn.start_at.substring(11,16) + ' ' + cn.text : cn.text }}
{{ av.name }} {{ av.unavailable ? '✕' : minToStr(av.s)+'–'+minToStr(av.e) }}
+ pozn.
{{ initials(ev.creator_name, ev.creator_full_name) }}
! ! 🔒{{ ev.title }}
ukládám…
{{ initials(note.owner ? note.owner.short_name : '', note.owner ? note.owner.full_name : '') }}
{{ initials(sw.short_name, sw.full_name) }}
Zatím tu nic není.
Klikni na + Papírek a hoď sem cokoli, na co nechceš zapomenout —
třeba „sehnat projektanta" nebo „sehnat revizáka na Balabenku".
Klikni na + Papírek a hoď sem cokoli, na co nechceš zapomenout —
třeba „sehnat projektanta" nebo „sehnat revizáka na Balabenku".
Sdílet papírek
Vyber kolegy — papírek se jim zobrazí na jejich nástěnce (jen ke čtení).
📅 Datum {{ dashSortCol.key==='term' ? (dashSortCol.dir>0?'▲':'▼') : '' }}
📍 Lokalita {{ dashSortCol.key==='locality' ? (dashSortCol.dir>0?'▲':'▼') : '' }}
🔤 A–Z {{ dashSortCol.key==='object' ? (dashSortCol.dir>0?'▲':'▼') : '' }}
Termín
{{ q.l }}
Rozsah termínu
–
Lokalita
Všechny
📍 {{ l }}
Provádí
Všichni
{{ t.short_name || t.full_name }}
! 🔒{{ objShort(t.object_name) }} {{ t.title }}
{{ fmtDate(t.start_at||t.end_at) }}
{{ initials(te.short_name, te.full_name) }}
Žádné zakázky pro zvolený filtr.
| Objekt {{ dashSortCol.key==='object' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Lokalita {{ dashSortCol.key==='locality' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Zakázka {{ dashSortCol.key==='title' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Provádí | Založil | Termín {{ dashSortCol.key==='term' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Zbývá {{ dashSortCol.key==='remaining' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Priorita {{ dashSortCol.key==='priority' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Stav {{ dashSortCol.key==='status' ? (dashSortCol.dir>0?'▲':'▼') : '' }} | Vznik {{ dashSortCol.key==='created' ? (dashSortCol.dir>0?'▲':'▼') : '' }} |
|---|---|---|---|---|---|---|---|---|---|
| {{ t.object_name || '—' }} | {{ t.object_locality || '—' }} | 🔒 {{ t.title }} |
{{ initials(te.short_name, te.full_name) }}
—
|
{{ initials(t.creator_name, t.creator_full_name) }} — | {{ dayName(t.start_at) }} {{ fmtDate(t.start_at) }} {{ t.start_at.substring(11,16) }} → {{ dayName(t.end_at) }} {{ fmtDate(t.end_at) }} bez termínu | {{ daysLeft(t.end_at || t.start_at) }} — | ! — | {{ dashStatusLabel(t.status) }} | {{ fmtDate(t.created_at) }} |
Celkem {{ dashRows.length }} {{ dashRows.length===1 ? 'zakázka' : (dashRows.length>=2 && dashRows.length<=4 ? 'zakázky' : 'zakázek') }}
Žádné zakázky pro zvolený filtr.
Řazení:
{{ o.name }}
{{ recentTasks(o.tasks).length }}/{{ o.tasks.length }}
{{ t.title }}
{{ initials(te.short_name, te.full_name) }}
{{ fmtDate(t.start_at) }}
Žádné aktivní zakázky
+ {{ o.tasks.length - 8 }} dalších
Osobni
{{ o.name }}
{{ recentTasks(o.tasks).length }}/{{ o.tasks.length }}
●
{{ t.title }}
{{ fmtDate(t.start_at) }}
+ {{ recentTasks(o.tasks).length - 4 }} dalsich
Zadne aktivni zakazky
Žádné objekty.
Technici
{{ initials(u.short_name, u.full_name) }}
⚠ {{ uaDaysInactive(u) }} dní bez aktivity
⚠ nikdy
{{ u.full_name }}
{{ u.role }} · {{ u.short_name }}
{{ isOnline(u) ? 'Online' : (isRecent(u) ? 'Nedávno' : 'Offline') }}
Poslední přihlášení
{{ u.last_login ? fmtDateTime(u.last_login) : 'Nikdy' }}
Poslední aktivita
{{ u.last_active ? fmtDateTime(u.last_active) : 'Nikdy' }}
Akce (24h / 7d)
{{ u.actions_24h || 0 }} / {{ u.actions_7d || 0 }}
Přihlášení:
{{ fmtDateTime(l.created_at) }}
{{ l.ip_address || '?' }}
Poslední akce:
{{ fmtDateTime(a.created_at) }}
{{ uaDescription(a) }}
▶
Objednávky (vidí jen administrátor)
{{ ordersUploading ? 'Importuji…' : 'Přetáhni objednávku nebo e-mail sem (PDF / obrázek / .eml)…' }}
Vyber objednávku pro zakázku: {{ orderPickTask.title }} — klikni na řádek a připojí se.
Načítám…
| Datum {{ orderSort.key==='created_at' ? (orderSort.dir>0?'▲':'▼') : '' }} | Obsah objednávky {{ orderSort.key==='summary' ? (orderSort.dir>0?'▲':'▼') : '' }} | Odběratel {{ orderSort.key==='customer_name' ? (orderSort.dir>0?'▲':'▼') : '' }} | Objekt {{ orderSort.key==='object_name' ? (orderSort.dir>0?'▲':'▼') : '' }} | Částka {{ orderSort.key==='amount_total' ? (orderSort.dir>0?'▲':'▼') : '' }} | Vystaveno {{ orderSort.key==='order_date' ? (orderSort.dir>0?'▲':'▼') : '' }} | Termín {{ orderSort.key==='delivery_date' ? (orderSort.dir>0?'▲':'▼') : '' }} | |
|---|---|---|---|---|---|---|---|
| {{ euDate(o.created_at) }} | 🕓 Ke schválení{{ o.summary || '—' }} | {{ o.amount_total != null ? (o.amount_total + ' ' + (o.currency || 'CZK')) : '—' }} | {{ euDate(o.order_date) }} | {{ euDate(o.delivery_date) }} | |||
| Žádné objednávky | |||||||
Ukončené zakázky
Ukončeno
–
{{ archiveView.length }} z {{ archiveItems.length }}
| Č. {{ archSort.key==='seq' ? (archSort.dir>0?'▲':'▼') : '' }} | Název zakázky {{ archSort.key==='title' ? (archSort.dir>0?'▲':'▼') : '' }} | Objekt {{ archSort.key==='object_name' ? (archSort.dir>0?'▲':'▼') : '' }} | Odběratel {{ archSort.key==='_cust' ? (archSort.dir>0?'▲':'▼') : '' }} | Datum ukončení {{ archSort.key==='_completed' ? (archSort.dir>0?'▲':'▼') : '' }} | Technik | Akce | |
|---|---|---|---|---|---|---|---|
| ✅ | {{ a.seq ? '#' + a.seq : '—' }} |
{{ a.title || 'Bez názvu' }}
{{ a.description }}
|
{{ a.object_name || '—' }} | {{ custName(a.customer_id) }} | {{ fmtDateTime(a.completed_at || a.updated_at || a.created_at) }} | {{ a.technician_names || '—' }} |
Žádné ukončené zakázky.
📒 Rejstřík ukončených zakázek
Nepřerušená řada pořadových čísel — smazané zakázky zůstávají v řadě. Chybějící číslo = ztracená položka.
⚠️ V řadě chybí čísla: {{ registryGaps.join(', ') }} — to by nemělo nastat, něco se ztratilo!
| Č. | Zakázka | Objekt | Ukončeno | Kdo | Stav | Pozn. |
|---|---|---|---|---|---|---|
| #{{ r.seq }} | {{ r.title || 'Bez názvu' }} | {{ r.object_name || '—' }} | {{ fmtDate(r.completed_at) }} | {{ r.completed_by_name || '—' }} | {{ registryLabel(r.status) }} | smazal(a) {{ r.deleted_by_name || '?' }} {{ fmtDate(r.deleted_at) }} faktura č. {{ r.invoice_number }} |
Rejstřík je zatím prázdný — první číslo dostane příští ukončená zakázka.
Nová zakázka do archivu
{{ fmtDateTime(archDetail.updated_at || archDetail.created_at) }}
· {{ archDetail.technician_names }}
{{ archDetail.description }}
🧾 Fakturační údaje
povinné pro odeslání k fakturaci
✓ Kompletní
⚠️ Chybí: {{ archMissingFields.join(', ') }}
{{ f.original_name || f.filename }}
({{ (f.size_bytes/1024).toFixed(0) }} KB)
⚠️ {{ f._excelError }}
{{ f.original_name || f.filename }}
({{ (f.size_bytes/1024).toFixed(0) }} KB)
Objednávka ze schránky (jen admin)
{{ o.order_number || ('#'+o.id) }}
{{ o.customer_name || '—' }}
· {{ o.amount_total }} {{ o.currency||'CZK' }}
náhled
Žádná připojená objednávka.
Nevyčerpané objednávky odběratele této zakázky:
{{ o.order_number || ('#'+o.id) }}
{{ o.customer_name || '—' }}
· {{ o.amount_total }} {{ o.currency||'CZK' }}
Žádné volné objednávky tohoto odběratele.
⚠️ {{ f._excelError }}
({{ taskActivity.length }})
{{ taskActivity.length ? 'Žádné události pro tento filtr.' : 'Zatím žádné události.' }}
| Zdr. | Datum a čas | Kdo | Akce | Co se stalo |
|---|---|---|---|---|
| {{ histSource(a).icon }} | {{ fmtDateTime(a.created_at) }} | {{ initials(a.user_short, a.user_name) }}{{ a.user_name }} | {{ histAction(a) }} | {{ histChangeText(a) }} |
Nastavení fakturace
jeden email na řádek
Fakturace
| Č. {{ invSort.key==='seq' ? (invSort.dir>0?'▲':'▼') : '' }} | Název zakázky {{ invSort.key==='task_title' ? (invSort.dir>0?'▲':'▼') : '' }} | Objekt {{ invSort.key==='object_name' ? (invSort.dir>0?'▲':'▼') : '' }} | Odběratel {{ invSort.key==='customer_name' ? (invSort.dir>0?'▲':'▼') : '' }} | Částka {{ invSort.key==='amount' ? (invSort.dir>0?'▲':'▼') : '' }} | DÚZP {{ invSort.key==='duzp' ? (invSort.dir>0?'▲':'▼') : '' }} | Odesláno {{ invSort.key==='created_at' ? (invSort.dir>0?'▲':'▼') : '' }} | Číslo faktury {{ invSort.key==='invoice_number' ? (invSort.dir>0?'▲':'▼') : '' }} | Podklad (AH) | Schválil (RM) | Komentář | Stav {{ invSort.key==='status' ? (invSort.dir>0?'▲':'▼') : '' }} | Akce |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ inv.seq ? '#' + inv.seq : '—' }} | {{ inv.task_title || 'Bez názvu' }} | {{ inv.object_name || '-' }} | {{ inv.customer_name || '-' }} | {{ fmtDate(inv.created_at) }} |
|
{{ inv.approved_by }} – | {{ inv.approved_by_rm }} – | {{ inv.status==='invoiced' ? 'Vyfakturováno' : 'Čeká' }} | ||||
| Celkem — {{ invCount }} {{ invCount===1 ? 'položka' : (invCount>=2 && invCount<=4 ? 'položky' : 'položek') }} · měsíc {{ invMonth }} · k fakturaci · vyfakturováno | {{ fmtKc(invTotal) }} | |||||||||||
Žádné položky k zobrazení
Žádné položky pro zvolený měsíc.
{{ invZoomIdx+1 }} / {{ invDetailFiles.length }}
📄
{{ invZoom.original_name || invZoom.filename }}
Tento typ souboru prohlížeč přímo nezobrazí.
Revize
{{ revYear }}
{{ revMonthNames[month-1] }}
Zadne
{{ rev.type }}
{{ rev.object_name }}
{{ revStatusLabel(rev.status) }}
{{ t }}
{{ rev.notes }}
{{ revDetailItem.object_name }}
Měsíc: {{ revDetailItem.month }}/{{ revDetailItem.year }}
Odběratelé
| Název | IČO | Objekty | |
|---|---|---|---|
| {{ cust.name }} | {{ cust.ico || '' }} |
{{ objNameById(oid) }}
|
Žádní odběratelé. Klikněte na + Nový odběratel.
📖 Odborný slovník pojmů
Asistent podle tohoto slovníku opravuje zkomolená slova z hlasu i diktátu (např. „sériák" na „sériové číslo", „kion" na „KION") ve všech vstupech — diktafon, hlasový asistent, faktury i výkaz.
⏳ Návrhy ke schválení ({{ glossarySuggestions.length }})
{{ t.correct }}
← {{ t.variants }}
{{ t.note }}
{{ glossaryEdit.id ? 'Upravit pojem' : 'Nový pojem' }}
Varianty odděl čárkou — všechny tvary, jak je přepis komolí.
Slovník ({{ glossaryApproved.length }})
| Správný tvar | Jak to zní | Poznámka | Druh | Akce |
|---|---|---|---|---|
| {{ t.correct }} | {{ t.variants }} | {{ t.note }} | {{ t.kind }} | |
| Zatím žádné pojmy. Přidej první přes „+ Přidat pojem". | ||||
{{ wlMonthNames[wlMonth-1] }} {{ wlYear }}
{{ t.short_name || t.full_name || t.name }}
| Datum | Den | Od | Do | Hodiny | Fond | Cinnost | Objekt | Popis |
|---|---|---|---|---|---|---|---|---|
| {{ day.label }} | {{ day.dayName }} | {{ e.time_from || '' }} | {{ e.time_to || '' }} | {{ wlHoursDisplay(e.hours) }} | {{ day.quota === 'Svátek' ? 'Svátek' : (day.quota ? day.quota : '') }} | {{ wlActivityDisplay(e.activity) }} | {{ e.location || '' }} | {{ e.description || '' }} |
| {{ day.label }} | {{ day.dayName }} | {{ day.quota === 'Svátek' ? '0' : '' }} | {{ day.quota === 'Svátek' ? 'Svátek' : (day.quota ? day.quota : '') }} | {{ day.quota === 'Svátek' ? 'Svátek' : '' }}--- | {{ day.quota === 'Svátek' ? 'Státní svátek' : '' }} | |||
| Celkem (vše kromě Neplaceného volna) | {{ wlWorkedDecimal }} | {{ wlQuotaTotal }} | neplacené volno: {{ wlUnpaidDecimal }} h {{ wlRemainingDisplay }} | |||||
📋 Historie změn výkazu ({{ wlHistory.length }} záznamů)
Zatím žádné změny.
📅 {{ wlhDateFull(h) }} · 📍 {{ wlhLocation(h) }} · 👤 {{ wlhTechName(h) }}
{{ wlhFieldLabel(key) }}: {{ wlhFmt(key, h.old_values[key]) }} → {{ wlhFmt(key, nv) }}
{{ h.new_values.time_from }}–{{ h.new_values.time_to }} · {{ h.new_values.hours }} h · {{ h.new_values.activity }} · {{ h.new_values.description }}
{{ h.old_values.time_from }}–{{ h.old_values.time_to }} · {{ h.old_values.hours }} h · {{ h.old_values.activity }} · {{ h.old_values.description }}