{{ t('profile.noEmailsYet') || 'Zatím vám nebyly odeslány žádné notifikační emaily.' }}
{{ formatQueueBody(item.body) }}
Čeština
English
{{ t('auth.features.description') }}
{{ editingUserProfile ? (t('admin.editUserProfile') || 'Profil uživatele') : t('profile.title') }}
{{ t('trash.title') }}
{{ t('profile.notificationSettings') || 'Nastavení notifikací' }}
{{ t('profile.permissionDeniedDesc') }}
{{ t('profile.noEmailsYet') || 'Zatím vám nebyly odeslány žádné notifikační emaily.' }}
{{ publicTodo?.project_name || 'Shared todo' }} / {{ publicTodo.list_name }}
{{ t('todos.dragFilesHere') }}
{{ t('todos.orClickToSelect') }}
{{ item.event_type }} {{ formatCommentDate(item.created_at) }}{{ t('search.resultsFor') || 'Výsledky hledání pro' }}: "{{ searchQuery }}"
{{ user?.role === 'superadmin' ? t('reporting.title') : (t('reporting.myReport') || 'Můj report') }}
{{ t('reporting.loadingReport') }}
{{ getDashboardPeriodLabel() }}
{{ t('reporting.noOneOnline') }}
Sledujte čas a projekty napříč měsíci
Načítám historická data...
| Projekt | {{ new Date(mt.month + '-01T00:00:00').toLocaleDateString('cs-CZ', { month: 'short', year: '2-digit' }) }} | Celkem |
|---|---|---|
| {{ pt.project_name }} | {{ (pt.months[mt.month] || 0) > 0 ? formatHoursHHMM(pt.months[mt.month]) : '—' }} | {{ formatHoursHHMM(Object.values(pt.months).reduce((a, b) => a + b, 0)) }} |
{{ t('reporting.forServiceProjects') }}
{{ t('reporting.selectProjectForReport') }}
Žádné servisní projekty
| Projekt | Budget | Natrackováno | Zbývá | Využití |
|---|---|---|---|---|
| {{ p.name }} | {{ p.budget_hours ? formatHoursHHMM(p.budget_hours) : '—' }} | {{ formatHoursHHMM(p.tracked_hours) }} | {{ p.budget_hours ? formatHoursHHMM(p.hours_remaining) : '—' }} |
{{ p.used_percent }}%
|
| Celkem ({{ reportData.summary?.total_projects }}) | {{ formatHoursHHMM(reportData.summary?.total_budget_hours || 0) }} | {{ formatHoursHHMM(reportData.summary?.total_tracked_hours || 0) }} | {{ formatHoursHHMM(reportData.summary?.total_remaining_hours || 0) }} |
| {{ t('reporting.user') }} | {{ t('reporting.hours') }} | {{ t('reporting.entries') }} |
|---|---|---|
|
|
{{ formatSecondsHHMM(u.total_seconds) }} | {{ u.entry_count }} |
| {{ t('reporting.list') }} | Rozpočet | {{ t('reporting.hours') }} | Zbývá | {{ t('reporting.tasks') }} |
|---|---|---|---|---|
| {{ l.list_name }} | {{ l.budget_hours != null ? l.budget_hours + ' h' : '–' }} | {{ formatSecondsHHMM(l.total_seconds) }} | {{ l.remaining_hours != null ? (l.remaining_hours >= 0 ? '+' : '') + l.remaining_hours + ' h' : '–' }} | {{ l.todo_count }} |
| {{ t('reporting.list') }} | {{ t('reporting.task') }} | {{ t('reporting.estimate') }} | {{ t('reporting.tracked') }} | {{ t('reporting.overage') }} |
|---|---|---|---|---|
| {{ t.list_name }} | {{ t.todo_title }} | {{ formatHoursHHMM(t.estimate_hours) }} - | {{ formatHoursHHMM(t.tracked_hours) }} | +{{ formatHoursHHMM(t.overage_hours) }} OK - |
| {{ t('reporting.total') }} | {{ formatHoursHHMM(reportData.todo_summary.total_estimate_hours) }} - | {{ formatHoursHHMM(reportData.todo_summary?.total_tracked_hours || 0) }} | +{{ formatHoursHHMM(reportData.todo_summary.overage_hours) }} OK - | |
| {{ t('reporting.list') }} | {{ t('reporting.task') }} | {{ t('reporting.person') }} | {{ t('reporting.time') }} |
|---|---|---|---|
| {{ e.user_name }} | {{ formatHoursHHMM(e.hours) }} |
{{ t('reporting.forAllProjects') }}
Žádné projekty v této kategorii
| {{ t('reporting.project') }} | {{ t('reporting.budgetHours') }} | {{ t('reporting.hoursUsed') }} | {{ t('reporting.hoursRemaining') }} | {{ t('reporting.budgetUtilization') }} | {{ t('reporting.completedTasks') }} |
|---|---|---|---|---|---|
| {{ p.name }} | {{ formatHoursHHMM(p.budget_hours) }} – | {{ formatHoursHHMM(p.tracked_hours) }} | {{ formatHoursHHMM(p.hours_remaining) }} – |
{{ p.used_percent }}%
–
|
{{ p.completed_todos }}/{{ p.total_todos }} ({{ p.completion_percent }}%) |
| {{ t('reporting.total') }} | {{ formatHoursHHMM(overviewFilteredSummary.total_budget_hours) }} | {{ formatHoursHHMM(overviewFilteredSummary.total_tracked_hours) }} | {{ formatHoursHHMM(overviewFilteredSummary.total_remaining_hours) }} |
{{ t('reporting.loadingReport') }}
| {{ t('reporting.user') }} | {{ t('reporting.hours') }} | {{ t('reporting.percentOfTotal') }} |
|---|---|---|
|
|
{{ formatSecondsHHMM(u.total_seconds) }} | {{ Math.round(u.total_seconds / reportData.time.total_seconds * 100) }}% |
| {{ t('reporting.list') }} | Rozpočet | {{ t('reporting.hours') }} | Zbývá | {{ t('reporting.tasks') }} |
|---|---|---|---|---|
| {{ l.list_name }} | {{ l.budget_hours != null ? l.budget_hours + ' h' : '–' }} | {{ formatSecondsHHMM(l.total_seconds) }} | {{ l.remaining_hours != null ? (l.remaining_hours >= 0 ? '+' : '') + l.remaining_hours + ' h' : '–' }} | {{ l.todo_count }} |
| {{ t('reporting.list') }} | {{ t('todos.todo') }} | {{ t('reporting.type') }} | {{ t('reporting.estimate') }} | {{ t('reporting.tracked') }} | {{ t('reporting.overage') }} |
|---|---|---|---|---|---|
| {{ todo.list_name }} | {{ todo.todo_title }} | {{ t('reporting.extraWorkBadge') }} | {{ formatHoursHHMM(todo.estimate_hours) }} - | {{ formatHoursHHMM(todo.tracked_hours) }} | +{{ formatHoursHHMM(todo.overage_hours) }} OK - |
| {{ t('reporting.total') }} | {{ formatHoursHHMM(reportData.todo_summary.total_estimate_hours) }} - | {{ formatHoursHHMM(reportData.todo_summary?.total_tracked_hours || 0) }} | +{{ formatHoursHHMM(reportData.todo_summary.overage_hours) }} OK - | ||
| {{ t('reporting.list') }} | {{ t('todos.todo') }} | {{ t('reporting.person') }} | {{ t('reporting.time') }} |
|---|---|---|---|
| {{ e.user_name }} | {{ formatHoursHHMM(e.hours) }} |
{{ t('reporting.userReportSubtitle') }}
{{ t('reporting.loadingReport') }}
| {{ t('reporting.user') }} | {{ t('reporting.minutes') }} | {{ t('reporting.entries') }} | {{ t('reporting.projectsCount') }} | {{ t('reporting.openTasks') }} | {{ t('reporting.avgPerDay') }} | |
|---|---|---|---|---|---|---|
|
{{ u.name }}
{{ u.email }}
|
{{ formatMinutesHHMM(u.minutes_in_period) }}
{{ u.utilization }}%
|
{{ u.entries_in_period }} | {{ u.projects_in_period }} | {{ u.open_todos }} | {{ formatMinutesHHMM(u.avg_minutes_per_work_day) }} | |
| {{ t('reporting.total') }} ({{ usersOverviewData.users.length }}) | {{ formatMinutesHHMM(usersOverviewData.summary?.total_minutes || 0) }} | |||||
{{ t('reporting.noUsersFound') }}
{{ reportData.user?.email }}
| {{ t('reporting.project') }} | Fakturace | Přiděleno | Budget projektu | {{ t('reporting.minutes') }} | {{ t('reporting.entries') }} | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ pricingModelLabel(p.pricing_model) }} – |
{{ formatSecondsHHMM(p.total_seconds) }}
/ {{ Math.floor(p.user_budget_hours) }}:{{ String(Math.round((p.user_budget_hours % 1) * 60)).padStart(2, '0') }}
–
|
{{ p.project_budget_hours }}h
/měsíc
celkem
–
|
{{ formatSecondsHHMM(p.total_seconds) }} | {{ p.entry_count }} | ||||||||||||||
|
Načítání úkolů...
Žádné úkoly v tomto období
{{ userReportProjectTodos.length }} úkolů
|
||||||||||||||||||
Žádné projekty s trackovaným časem v tomto období
Zaškrtněte výše „Zobrazit i projekty s 0 hodin" pro zobrazení všech projektů
| Úkol | Projekt | Seznam | Odhad | Trackováno | Záznamů | |
|---|---|---|---|---|---|---|
| {{ t.todo_title }} {{ t.todo_title }} | {{ t.project_name }} {{ t.project_name }} | {{ t.list_name }} | {{ t.estimate_minutes ? formatMinutesHHMM(t.estimate_minutes) : '–' }} | {{ formatMinutesHHMM(t.tracked_minutes) }} | {{ t.entry_count }} | |
| Celkem ({{ sortedUserReportTodos.length }} úkolů) | {{ formatMinutesHHMM(sortedUserReportTodos.reduce((s, t) => s + t.tracked_minutes, 0)) }} | {{ sortedUserReportTodos.reduce((s, t) => s + t.entry_count, 0) }} | ||||
Žádné úkoly s trackovaným časem v tomto období
| Datum | Čas | Úkol | Projekt | Minuty | Popis |
|---|---|---|---|---|---|
| {{ formatDateCS(e.date) }} | {{ e.time_start }}–{{ e.time_end || '?' }} | {{ e.todo_title }} {{ e.todo_title }} | {{ e.project_name }} {{ e.project_name }} | {{ formatMinutesHHMM(e.minutes) }} | |
| Celkem ({{ sortedUserReportLog.length }} záznamů) | {{ formatMinutesHHMM(sortedUserReportLog.reduce((s, e) => s + e.minutes, 0)) }} | ||||
Žádné záznamy v tomto období
Žádná data
Žádná data
Žádné úkoly
{{ t('reporting.todosOverEstimateSubtitle') }}
| {{ t('reporting.task') }} | {{ t('reporting.project') }} | {{ t('reporting.estimate') }} | {{ t('reporting.actualColumn') }} | {{ t('reporting.overagePercent') }} |
|---|---|---|---|---|
|
{{ t.title }}
{{ t.list_name }}
|
{{ t.project_name }} | {{ formatMinutesHHMM(t.estimate_minutes) }} | {{ formatHoursHHMM(t.tracked_hours) }} | +{{ t.over_percent }}% |
{{ t('reporting.noTasksOverEstimate') }}
{{ t('reporting.projectAnalysisSubtitle') }}
| {{ t('reporting.project') }} | {{ t('reporting.contracted') }} | {{ t('reporting.used') }} | {{ t('reporting.remaining') }} | {{ t('reporting.utilization') }} | {{ t('reporting.status') }} |
|---|---|---|---|---|---|
| {{ p.name }} | {{ formatHoursHHMM(p.included_hours) }} | {{ formatHoursHHMM(p.used_hours) }} | {{ p.remaining_hours < 0 ? '+' : '' }}{{ formatHoursHHMM(Math.abs(p.remaining_hours)) }} |
{{ p.used_percent }}%
|
+{{ formatHoursHHMM(p.overage_hours) }} {{ t('reporting.approachingLimit') }} OK |
| {{ t('reporting.total') }} | {{ formatHoursHHMM(reportData.summary?.retainer_total_included || 0) }} | {{ formatHoursHHMM(reportData.summary?.retainer_total_used || 0) }} | {{ formatHoursHHMM((reportData.summary?.retainer_total_included || 0) - (reportData.summary?.retainer_total_used || 0)) }} |
| {{ t('reporting.project') }} | {{ t('reporting.tasksColumn') }} | {{ t('reporting.timeVsEstimate') }} | {{ t('reporting.projectPriceColumn') }} | {{ t('reporting.currentCosts') }} | {{ t('reporting.currentProfit') }} | {{ t('reporting.projectedCosts') }} | {{ t('reporting.projectedProfitColumn') }} | {{ t('reporting.projectedMargin') }} | {{ t('reporting.state') }} |
|---|---|---|---|---|---|---|---|---|---|
|
{{ p.name }}
{{ p.pricing_model_label }}
|
{{ p.completed_todos }}
/
{{ p.total_todos }}
{{ p.completion_percent }}%
|
{{ formatHoursHHMM(p.total_hours) }} / {{ formatHoursHHMM(p.budget_hours) }}
{{ Math.abs(p.progress_vs_time) }}% {{ p.progress_vs_time >= 0 ? t('reporting.ahead') : t('reporting.behind') }}
|
{{ formatMoney(p.fixed_price) }} | {{ formatMoney(p.internal_cost) }} |
{{ p.current_profit >= 0 ? '+' : '' }}{{ formatMoney(p.current_profit) }}
{{ p.current_margin }}%
|
{{ formatMoney(p.projected_cost) }}
~{{ formatHoursHHMM(p.projected_total_hours) }}
|
{{ p.projected_profit >= 0 ? '+' : '' }}{{ formatMoney(p.projected_profit) }} | {{ p.projected_margin }}% | {{ p.health === 'healthy' ? t('reporting.healthOnTrack') : (p.health === 'warning' ? t('reporting.healthNeedsAttention') : t('reporting.healthCritical')) }} |
| {{ t('reporting.total') }} | {{ formatMoney(reportData.summary?.fixed_price_total_value || 0) }} | {{ formatMoney(reportData.fixed_price_projects.reduce((s,p) => s + (p.internal_cost || 0), 0)) }} | {{ formatMoney(reportData.fixed_price_projects.reduce((s,p) => s + (p.current_profit || 0), 0)) }} | {{ formatMoney(reportData.fixed_price_projects.reduce((s,p) => s + (p.projected_cost || 0), 0)) }} | {{ formatMoney(reportData.summary?.fixed_price_projected_profit || 0) }} |
| {{ t('reporting.project') }} | {{ t('reporting.budgetHoursColumn') }} | {{ t('reporting.usedColumn') }} | {{ t('reporting.remainingColumn') }} | % |
|---|---|---|---|---|
| {{ p.name }} | {{ formatHoursHHMM(p.budget_hours) }} | {{ formatHoursHHMM(p.total_hours) }} | {{ formatHoursHHMM(p.remaining_hours) }} |
{{ p.used_percent }}%
|
{{ t('reporting.noBillingDataProjects') }}
{{ t('reporting.managementQualitySubtitle') }}
| {{ t('reporting.project') }} | {{ t('reporting.type') }} | {{ t('reporting.tasks') }} | {{ t('reporting.estimates') }} | {{ t('reporting.assignments') }} | {{ t('reporting.dueDates') }} | {{ t('reporting.overdueColumn') }} | {{ t('reporting.score') }} | {{ t('reporting.state') }} |
|---|---|---|---|---|---|---|---|---|
| {{ p.name }} | {{ t('reporting.pricingModel.' + (p.pricing_model || 'none')) }} | {{ p.total_todos }} ({{ p.completed_todos }} {{ t('reporting.completed') }}) |
{{ p.estimate_coverage }}%
{{ p.with_estimate }}/{{ p.total_todos }}
|
{{ p.assignee_coverage }}%
{{ p.with_assignee }}/{{ p.total_todos }}
|
{{ p.due_date_coverage }}%
{{ p.with_due_date }}/{{ p.total_todos }}
|
{{ p.overdue }} 0 |
{{ p.management_score }}
|
{{ p.health === 'good' ? t('reporting.healthGood') : (p.health === 'warning' ? t('reporting.healthCanImprove') : t('reporting.healthNeedsAttention')) }} |
{{ t('reporting.timeEstimatesDesc') }}
{{ t('reporting.assignmentsDescLong') }}
{{ t('reporting.dueDatesDescLong') }}
{{ t('reporting.managementScoreDesc') }}
{{ t('reporting.loadingData') }}
Kdo co dělal, kde byl, co vytvořil a dokončil
{{ t('reporting.noAuditData') }}
| {{ t('reporting.userColumn') }} | Aktivita | Detail | {{ t('reporting.ipColumn') }} | {{ t('reporting.dateColumn') }} |
|---|---|---|---|---|
|
{{ getInitials(entry.user_name) }}
{{ entry.user_name }}
|
{{ entry.action_type === 'pageview' ? 'Zobrazení' : entry.action_type === 'report_access' ? 'Report' : entry.action_type === 'todo_create' ? 'Nový úkol' : entry.action_type === 'todo_complete' ? (entry.metadata?.completed ? 'Dokončeno' : 'Znovu otevřeno') : entry.action_type === 'comment_create' ? 'Komentář' : entry.action_type === 'chat_message' ? 'Chat' : entry.action_type }} | {{ entry.ip_address }} | {{ formatDateTimeRelative(entry.created_at) }} |
Manažerský přehled plnění hodin — jsou projekty a lidé na správném tempu?
| Projekt | Rozpočet | Natrackováno | Očekáváno | Tempo | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ project.name }} {{ project.pricing_model }} | {{ formatMinutesHHMM(project.budget_hours * 60) }} | {{ formatMinutesHHMM(project.tracked_hours * 60) }} | {{ formatMinutesHHMM(project.expected_hours * 60) }} | {{ project.pace_percent }}% | |||||||
|
|||||||||||
| Žádní uživatelé s rozpočtem nebo trackovaným časem. | |||||||||||
| Osoba | Fond hodin | Natrackováno | Očekáváno | Tempo | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
{{ u.monthly_hours > 0 ? formatMinutesHHMM(u.monthly_hours * 60) : '—' }} | {{ formatMinutesHHMM(u.tracked_hours * 60) }} | {{ u.expected_hours > 0 ? formatMinutesHHMM(u.expected_hours * 60) : '—' }} | {{ u.pace_percent }}% — | |||||||
|
|||||||||||
| Žádné projekty s rozpočtem nebo trackovaným časem. | |||||||||||
Žádné projekty s nastavenými rozpočty hodin.
Nastavte rozpočty v nastavení projektů (Billing → Retainer/Fixed price).
Fakturace
Načítání přehledu fakturace...
Načítání přehledu připravenosti fakturace...
Tyto aktivní projekty nemají nastavený model fakturace. Kliknutím otevřete nastavení.
Nepodařilo se načíst přehled fakturace.
Načítání přehledu fakturace...
Nepodařilo se načíst přehled fakturace.
Tyto aktivní projekty nemají nastavený model fakturace. Kliknutím nastavíte fakturaci.
Načítání nadcházejících faktur...
Žádné nadcházející faktury
Načítání historie faktur...
Žádná historie faktur
| Projekt | Období | Částka | Stav | Splatnost | Zaplaceno | Fakturoid | Akce |
|---|---|---|---|---|---|---|---|
|
{{ inv.project_name }}
{{ inv.project_client }}
|
{{ inv.period_from ? new Date(inv.period_from).toLocaleDateString('cs-CZ', { month: 'short', year: 'numeric' }) : '—' }} |
{{ formatCurrency(inv.total, inv.currency) }}
Sleva
|
{{ getInvoiceStatusLabel(inv.status) }} | {{ new Date(inv.due_date).toLocaleDateString('cs-CZ') }} — | {{ new Date(inv.paid_at || inv.fakturoid_paid_at).toLocaleDateString('cs-CZ') }} — |
#{{ inv.fakturoid_invoice_number }}
#{{ inv.fakturoid_invoice_number || inv.fakturoid_invoice_id }}
—
|
|
| Žádné faktury neodpovídají filtru | |||||||
Kontrola subjektů, přehled faktur a hromadné operace
Klikněte na Analyzovat pro kontrolu subjektů a faktur
Klikněte na Načíst faktury pro zobrazení seznamu faktur z Fakturoidu
Žádná data k zobrazení
{{ t('myTasks.noAssignedTasks') }}
{{ t('myTasks.noAssignedTasks') }}
Úkoly, které zadáte ostatním, se zobrazí zde.
{{ t('myTasks.noAssignedTodos') }}
{{ t('myActivity.noActivity') }}
{{ t('home.createFirstDesc') || 'Vytvořte svůj první projekt a začněte organizovat práci' }}
{{ t('home.tryDifferent') || 'Zkuste jiný hledaný výraz' }}
{{ t('home.noProjects') || 'No projects yet' }}
{{ t('project.projectStatusDesc') }}
Všechny fakturační modely jsou v archivu.
Vytvořte první fakturační model pro tento projekt
Nastavení ovlivňující generování a odesílání faktur pro tento projekt.
Údaje o firmě klienta pro tento projekt. Používají se jako výchozí při vytváření faktur.
{{ t('project.variablesHint') || 'Uložte si libovolné údaje k projektu - odkazy, ceny, kontakty apod.' }}
({{ variable.var_key }})
{{ variable.var_value }}
{{ variable.var_value }}
Přiřaďte tagy pro kategorizaci a filtrování projektů na hlavní stránce.
{{ t('project.connectionDesc') }}
{{ t('management.archiveDesc') }}
{{ t('management.deleteDesc') }}
Přesuňte všechny todolisty, úkoly, dokumenty, čas a přílohy do jiného projektu. Členové budou zkopírováni. Tento projekt bude archivován (nic se nesmaže).
{{ t('management.transferTodosDesc') }}
{{ t('management.templatesDesc') }}
Porovnejte úkoly v projektu s nabídkou a automaticky označte vícepráce.
Automaticky odhadněte čas potřebný pro dokončení úkolů pomocí AI analýzy.
| Úkol | Seznam | AI odhad | Typ úkolu | |
|---|---|---|---|---|
|
{{ est.todo_title }}
{{ est.ai_reasoning }}
|
{{ est.list_name }} | min |
{{ est.default_task_name }}
-
|
Žádné odhady ke schválení.
Klikněte na "Vytvořit odhady pomocí AI" pro automatické generování odhadů.
{{ t('project.featuresDescription') }}
Ještě nemáte definované žádné stavy. Vyberte přednastavení:
{{ t('project.noCustomFieldsYet') }}
{{ t('knowledge.widgetHint') || 'Sdílené znalosti, odkazy a dokumentace týmu' }}
{{ t('common.loading') }}
{{ t('billing.notConfigured') || 'Fakturace není nastavena' }}
Žádné přiřazené chaty
Přiřaďte skupinový chat k tomuto projektu v nastavení chatu
{{ allSubscribers.length }} {{ allSubscribers.length === 1 ? t('common.personWillBeNotified') || 'osoba bude upozorněna' : (allSubscribers.length > 4 ? t('common.peopleWillBeNotified') || 'osob bude upozorněno' : t('common.peopleWillBeNotifiedFew') || 'osoby budou upozorněny') }} {{ t('common.whenSomeoneCompletesOrComments') || 'při dokončení nebo komentáři u tohoto úkolu' }}.
{{ t('common.youWillBeNotified') }}
{{ t('common.implicitSubscriptionDesc') || 'Jako přiřazená osoba, tvůrce nebo komentátor budete upozorňováni.' }}
{{ t('common.subscribeToGetNotifications') }}
{{ t('todos.sentEmailsDesc') }}
| Zobrazit starší emaily ({{ todoEmails.length - EMAILS_LIMIT }} skrytých) | ||||
| {{ getNotifModeLabel(email.delivery_mode, email.scheduled_for) }} {{ formatEmailDate(email.sent_at || email.created_at) }} | {{ email.recipient_name || getEmailRecipientName(email) }} souhrn |
{{ truncateEmailSubject(email.subject) }}
{{ truncateText(email.comment_content, 80) }}
|
||
AI projde {{ todoComments.length }} komentářů a navrhne rozdělení úkolu, shrne problémy a doporučí další kroky.
AI doporučuje rozdělit tento úkol na {{ aiAdvisorData._ai_analysis.split_suggestions.length }} menších:
{{ aiAdvisorData._ai_analysis.nudge_suggestion.reason }}
{{ t('changelog.noRecords') || 'No changelog entries yet' }}
{{ t('hey.noNotifications') }}
{{ t('chat.welcomeMessage') || 'Vyberte kontakt a začněte chatovat' }}
Zatím zde nejsou žádné odkazy
Odkazy budou automaticky extrahovány z příspěvků
Zatím zde nejsou žádné příspěvky
Napište něco do pole výše a začněte sdílet znalosti s týmem
{{ comment.content }}
{{ t('projectPeople.noMembers') }}
{{ group.description }}
{{ t('groups.noGroups') }}
Pluginy, domény, licence a další položky k fakturaci klientům
Zatím žádné produktové náklady
Přidejte pluginy, domény, licence nebo jiné položky
✅ {{ syncUsersResult }}
| ID | {{ t('admin.user') }} | {{ t('admin.role') }} | Skupiny | Status | Login | 💰 | {{ t('admin.language') }} | {{ t('admin.lastActivity') || 'Aktivita' }} | Notifikace | {{ t('admin.actions') }} |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ u.id }} |
{{ getInitials(u.name) }}
|
{{ u.role === 'superadmin' ? 'SUPERADMIN' : (u.role === 'user' ? t('admin.userRole') || 'USER' : u.role.toUpperCase()) }} |
{{ g.name }}
—
|
Vy | Vy | — |
|
{{ formatDateTimeShort(u.last_login_at) }}
{{ u.last_login_country }}
{{ formatDateTimeShort(u.last_seen_at) }}
|
Dovolená
{{ u.notif_summary.is_24x7 ? '0-24' : 'Rozvrh' }}
{{ u.notif_summary.instant_count }}×
{{ u.notif_summary.batch_count }}×
|
🔑 {{ t('admin.newPasswordFor') }} {{ generatedPasswordUser }}:
{{ generatedPassword }}{{ t('admin.copyPassword') }}
{{ t('admin.groupsDescription') || 'Definice skupin pro projekty. Členy do skupin přidáváte na jednotlivých projektech v sekci "Kdo může vidět projekt".' }}
{{ t('admin.noGroupsDesc') || 'Vytvořte první skupinu pro správu uživatelských rolí.' }}
{{ group.description }}
| {{ t('admin.date') }} | {{ t('admin.status') }} | {{ t('admin.to') }} | {{ t('admin.subject') }} | {{ t('admin.project') }} | {{ t('admin.template') || 'Šablona' }} | {{ t('admin.actions') }} |
|---|---|---|---|---|---|---|
| {{ formatDateTime(log.created_at) }} | {{ log.status }} |
{{ log.to_email }}
{{ t('admin.originalTo') }}: {{ log.original_to_email }}
|
{{ log.project_name || '-' }} | { emailTemplateSearchQuery = log.template_key; })" class="bc-template-link" :title="'Upravit šablonu: ' + log.template_key" > {{ log.template_key }} - | ||
| {{ t('admin.noEmailLogs') }} | ||||||
Vložte text emailu (bez hlaviček) a uvidíte jak systém email rozporcuje na jednotlivé úkoly.
{{ t('admin.enterEmailAndAnalyze') || 'Zadejte text emailu a klikněte na Analyzovat přes N8N' }}
{{ topic.description }}
| {{ t('admin.date') }} | {{ t('admin.from') }} | {{ t('admin.to') }} | {{ t('admin.subject') }} | {{ t('admin.project') || 'Projekt' }} | {{ t('admin.todo') || 'Úkol' }} | Status | {{ t('admin.actions') }} | |
|---|---|---|---|---|---|---|---|---|
| {{ formatDateTime(m.received_at || m.created_at) }} | {{ getProjectName(m.processed_project_id) || ('#' + m.processed_project_id) }} - | #{{ m.processed_todo_id }} #{{ m.processed_todo_id }} - | {{ m.status }} | |||||
| {{ t('common.noData') || 'Žádná data' }} | ||||||||
Pro jazyk {{ emailTemplatesLocale }} chybí {{ missingEmailTemplates.length }} šablon: {{ missingEmailTemplates.slice(0, 5).join(', ') }}{{ missingEmailTemplates.length > 5 ? '...' : '' }}
Tyto HTML šablony se automaticky vkládají na začátek a konec každého odeslaného emailu.
| {{ t('admin.templateKey') || 'ID šablony' }} | {{ t('admin.subject') }} | {{ t('admin.language') }} | {{ t('admin.actions') }} |
|---|---|---|---|
| {{ tpl.template_key }} | {{ tpl.subject }} | {{ tpl.locale }} | |
| Žádné šablony neodpovídají hledání "{{ emailTemplateSearchQuery }}" {{ t('admin.noEmailTemplates') || 'Žádné šablony' }} | |||
{{ t('admin.variablesHelp') || ('Do subjectu i těla můžete vkládat proměnné ve tvaru ' + '{' + '{' + 'project.name' + '}' + '}' + '. Neznámé proměnné zůstanou beze změny.') }}
{{ '{' + '{' + v.key + '}' + '}' }}
| ID | Typ | Příjemce | Titulek | Todo | Email šablona | Vytvořeno |
|---|---|---|---|---|---|---|
| {{ item.id }} | {{ item.type }} | {{ item.user_name || item.user_email }} | #{{ item.todo_id }} #{{ item.todo_id }} - | {{ item.template_key }} - | {{ formatCommentDate(item.created_at) }} |
| ID | Typ | Příjemce | Status | Režim | Naplánováno | Vytvořeno |
|---|---|---|---|---|---|---|
| {{ item.id }} | {{ item.event_type }} | {{ item.user_name || item.user_email }} | {{ item.status }} | {{ item.delivery_mode }} | {{ formatCommentDate(item.scheduled_for) }} | {{ formatCommentDate(item.created_at) }} |
| ID | Typ | Šablona | Příjemce | Odesláno |
|---|---|---|---|---|
| {{ item.id }} | {{ item.event_type }} | {{ item.template_key || '-' }} | {{ item.user_name || item.user_email }} | {{ formatCommentDate(item.sent_at) }} |
| ID | Příjemce | Předmět | Šablona | Status | Čas |
|---|---|---|---|---|---|
| {{ item.id }} | {{ item.to_email }} | {{ item.template_key || '-' }} | {{ item.status }} | {{ formatCommentDate(item.created_at) }} |
| Uživatel | Kanál | Titulek | Status | Čas |
|---|---|---|---|---|
| {{ log.user_name || ('ID: ' + log.user_id) }} | {{ log.channel }} | {{ log.status }} | {{ formatCommentDate(log.created_at) }} | |
| Žádné push notifikace | ||||
| {{ t('admin.cronJob') || 'Job' }} | {{ t('admin.cronStatus') || 'Status' }} | {{ t('admin.cronProcessed') || 'Zpracováno' }} | {{ t('admin.cronSent') || 'Odesláno' }} | {{ t('admin.cronDuration') || 'Trvání' }} | {{ t('admin.cronTime') || 'Čas' }} |
|---|---|---|---|---|---|
| {{ log.job_name }} | {{ log.status }} | {{ log.events_processed }} | {{ log.emails_sent }} | {{ log.duration_ms ? log.duration_ms + 'ms' : '-' }} | {{ formatCommentDate(log.created_at) }} |
| {{ t('admin.noCronLogs') || 'Žádné logy' }} | |||||
Zatím nemáte žádné prompty
{{ JSON.stringify(cmlTestResult, null, 2) }}
{{ healthCheckData.checks.database.message }}
{{ healthCheckData.checks.smtp.message }}
{{ healthCheckData.checks.basecamp.message }}
{{ healthCheckData.checks.algolia.message }}
{{ healthCheckData.checks.everhour.message }}
{{ healthCheckData.checks.fakturoid.message }}
{{ healthCheckData.checks.storage.message }}
{{ healthCheckData.checks.crons.message }}
{{ healthCheckData.checks.php_extensions.message }}
{{ healthCheckData.checks.env_vars.message }}
{{ healthCheckData.checks.email_templates.message }}
Klikněte na "Spustit kontrolu" pro diagnostiku systému
{{ t('admin.noSnapshotsDesc') }}
db/deploy_snapshots/.db/manual_snapshots/ a nikdy se nepřepisují.
Zatím nejsou žádné výchozí typy úkolů.
| Název | Kategorie | Průměr | Min | Max | Vzorků | Stav | |
|---|---|---|---|---|---|---|---|
|
{{ task.name }}
{{ task.slug }}
|
{{ task.category }} | {{ formatMinutes(task.avg_minutes) }} | {{ formatMinutes(task.min_minutes) }} | {{ formatMinutes(task.max_minutes) }} | 0 | {{ task.is_active ? 'Aktivní' : 'Neaktivní' }} |
|
Dokončené úkoly s trackovaným časem, které ještě nebyly přiřazeny k výchozímu typu úkolu. AI přiřadí každý úkol k nejbližšímu výchozímu typu.
Všechny dokončené úkoly jsou normalizované!
| Úkol | Projekt | Čas |
|---|---|---|
|
{{ todo.title }}
{{ todo.list_name }}
|
{{ todo.project_name }} | {{ formatMinutes(todo.time_tracked) }} |
Zkontrolujte a schvalte AI přiřazení úkolů k výchozím typům. Po schválení se přepočítají průměrné časy.
Žádné normalizace ke schválení.
Zatím žádné logy.
| Datum | Typ | Projekt | Vstup | Zpracováno | Čas | Stav |
|---|---|---|---|---|---|---|
| {{ new Date(log.created_at).toLocaleString(currentLang === 'en' ? 'en-US' : 'cs-CZ') }} | {{ log.type === 'normalize' ? 'Normalizace' : 'Odhady' }} | {{ log.project_name || '-' }} | {{ log.input_todos_count }} | {{ log.processed_count || '-' }} | {{ log.execution_time_ms }}ms | {{ log.success ? 'OK' : 'Chyba' }} |
{{ t('admin.templatesDescription') }}
{{ t('admin.loadingTemplates') }}
{{ t('admin.noTemplatesDesc') }}
{{ t('todoLists.todolistTemplatesAdminDesc') || 'Spravujte šablony pro rychlé vytváření nových seznamů úkolů.' }}
{{ t('todoLists.noTodolistTemplatesDesc') || 'Zatím nemáte žádné šablony seznamů úkolů. Vytvořte šablonu z existujícího seznamu pomocí kontextového menu.' }}
Definujte předdefinované proměnné pro projekty. Uživatelé si mohou vybrat z těchto šablon a nemohou změnit název proměnné.
Zatím nemáte žádné šablony proměnných.
| ID | Ikona | Název (klíč) | Popisek | Placeholder | Pořadí | Status | Hlavička | Akce |
|---|---|---|---|---|---|---|---|---|
| {{ tpl.id }} | — |
{{ tpl.name }}
|
{{ tpl.label }}
{{ tpl.description }}
|
{{ tpl.placeholder || '—' }} | {{ tpl.sort_order }} | Aktivní Neaktivní |
|
{{ t('admin.s3Description') }}
{{ t('admin.addFirstS3') }}
| {{ t('admin.dateTime') || 'Datum a čas' }} | {{ t('admin.user') }} | {{ t('admin.eventType') || 'Událost' }} | IP | {{ t('admin.country') || 'Země' }} | {{ t('admin.actions') }} |
|---|---|---|---|---|---|
|
{{ formatDateTime(entry.created_at) }}
|
{{ getInitials(entry.user_name) }}
{{ entry.user_name }}
{{ entry.user_email }}
|
{{ getLoginEventLabel(entry.event_type) }} |
{{ entry.ip_address }}
not logged
|
{{ entry.country_name }}
{{ entry.city }}
|
|
| {{ t('admin.noLoginHistory') || 'Žádná historie přihlášení' }} | |||||
Načítám nastavení...
Pro použití jako ikona PWA aplikace: PNG formát, čtvercové, min. 512×512 px. SVG logo bude použito pouze pro web, ne jako PWA ikona.
{{ globalSettings.app_url || 'https://example.com' }}{{ (globalSettings.app_url || 'https://example.com') + '/api/google/callback' }}{{ globalSettings.app_url || 'https://example.com' }}/*| Čas | Uživatel | Akce | Status | Google email | Detaily |
|---|---|---|---|---|---|
| {{ log.created_at }} | {{ log.user_name || '—' }} | {{ log.action }} | {{ log.google_email || '—' }} |
global_settings tabulky.
Automatická fakturace přes Fakturoid.cz. Client ID a Client Secret najdete v Nastavení → Uživatelský účet → API v3 přístupové údaje.
{{ acc.slug }}
({{ acc.name }}){{ i < fakturoidTestResult.data.accounts.length - 1 ? ', ' : '' }}
Fakturoid má limit 400 požadavků/min. Cache snižuje počet API volání. Subjekty a staré faktury se mění zřídka.
Pusher poskytuje real-time aktualizace (komentáře, typing indikátory). Jeden účet funguje pro všechny domény. Vytvořit účet na pusher.com →
Nastavení pro upozornění uživatelů, kteří mají nastavený měsíční úvazek (billing) a nedoplnili časy.
Výchozí nastavení pro notifikační systém. Uživatelé si mohou nastavit vlastní hodnoty.
Povolte přístup pouze z vybraných IP adres. Všichni ostatní budou zakázáni a odhlášeni.
Tabulka ip_whitelist nebyla nalezena v databázi.
Spusťte deploy nebo migraci pro její vytvoření.
Vaše IP adresa ({{ ipWhitelist.currentIp }}) není na whitelistu!
Pokud aktivujete IP omezení, budete okamžitě odhlášeni.
{{ ipWhitelist.currentIp }}
Tabulka neexistuje
Na whitelistu
Není na whitelistu
Tabulka ip_whitelist neexistuje
Spusťte deploy nebo migraci pro vytvoření tabulky
php deploy_ip_whitelist.php
Žádné IP adresy na whitelistu
Přidejte IP adresy výše pro povolení přístupu
Ve výchozím stavu je přihlášení přes magic link zakázáno pro superadmin účty. Tuto funkci můžete dočasně povolit, ale z bezpečnostních důvodů se doporučuje ji mít vypnutou.
Nastavení ovlivňuje jak se ukládají IP adresy v historii přihlášení a na uživatelském profilu. Změna se projeví u nových záznamů — stávající data zůstanou beze změny.
Ochrana proti zapomenutým běžícím časovačům. Frontend upozornění + automatický cron stop.
Konfigurace odesílání SMS zpráv (pošťouchnutí, upozornění). SMS se odesílají přes HTTP GET požadavek na zadanou URL.
{phone} = telefonní číslo příjemce,
{text} = text SMS zprávy.
URL bude volána metodou GET.
{{ globalSettings.sms_gateway_url.replace('{phone}', '420608321660').replace('{text}', 'Testovaci+SMS') }}
Klíč pro Director AI chatbot, Telegram AI odpovědi a další AI funkce.
Telegram bot pro time tracking, reporty a AI analýzy přímo z Telegramu. Vytvořit bota přes @BotFather →
OneSignal poskytuje spolehlivé push notifikace pro web i mobil bez složité konfigurace VAPID. Vytvořit účet na onesignal.com →
Otestujte, zda push notifikace fungují na tomto zařízení. Pro iOS je nutné přidat aplikaci na plochu (PWA).
Propojte účet s Telegram botem pro přístup k Director AI přímo z mobilu.
{{ t('comments.title') }} ({{ publicComments.length }})