{{ t('profile.noEmailsYet') || 'Zatím vám nebyly odeslány žádné notifikační emaily.' }}
{{ formatQueueBody(item.body) }}
Čeština
English
{{ t('auth.twoFactor.backupTitle') }}
{{ c }}
{{ t('auth.twoFactor.backupWarn') }}
{{ t('auth.features.description') }}
{{ editingUserProfile ? (t('admin.editUserProfile') || 'Profil uživatele') : t('profile.title') }}
{{ c }}
Žádné stahování ani klíč. Vlož adresu konektoru do Clauda (Settings → Connectors → Add custom connector) a přihlas se přes OAuth. Návod krok za krokem.
Alerty
Hlídá fakturační modely, alokace uživatelů a podtrekované projekty. Respektuje aktivní fakturační okno, dovolenou a iCal absence. Manažerský email obsahuje souhrn deficitu a nefakturovatelný náklad.
| Projekt | Uživatel | Budget | Očekáváno | Natrékováno | Deficit | Nefakt. |
|---|---|---|---|---|---|---|
| {{ t.project_name }} | {{ t.user_name || '—' }} | {{ t.budget_hours }} h | {{ t.expected_hours }} h | {{ t.actual_hours }} h | {{ t.deficit_hours }} h | {{ t.unbilled_cost }} {{ alertsLastResult[rule.id].currency }} |
{{ 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) }}{{ 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') }} | Nasmlouváno | |
|---|---|---|---|---|---|---|---|
|
{{ 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) }} | {{ formatMinutesHHMM(Math.round(u.contracted_hours * 60)) }} – | |
| {{ 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
Načítání…
| Projekt | Schéma fakturace | Typ | Nasmlouváno | Odpracováno (celkem) |
|---|---|---|---|---|
|
{{ c.project_name }}
fakturace ukončena
{{ c.billing_days_remaining === 0 ? 'končí dnes' : (c.billing_days_remaining === 1 ? 'končí zítra' : 'končí za ' + c.billing_days_remaining + ' ' + (c.billing_days_remaining < 5 ? 'dny' : 'dní')) }}
|
{{ c.schedule_name }} {{ pricingModelLabel(c.pricing_model) || '–' }} | měsíčně celkem – | {{ formatMinutesHHMM(Math.round(c.budget_hours * 60)) }} | {{ formatSecondsHHMM(c.tracked_seconds_all_time) }} |
Tento uživatel nemá nasmlouvané hodiny na žádném projektu.
{{ t('reporting.deepLoading') || 'Načítání hloubkové analýzy…' }}
Nasmlouváno aktuálně: {{ userDeepInsightsData.utilization.contracted_hours_monthly }}h / měsíc · období cca {{ userDeepInsightsData.period.months_approx }} měs.
{{ t('reporting.deepNoContract') || 'Uživatel nemá nasmlouvané hodiny.' }}
Z {{ userDeepInsightsData.lead_time.completed_count }} úkolů dokončených v období ({{ userDeepInsightsData.lead_time.avg_hours }} h).
{{ t('reporting.deepNoCompleted') || 'V tomto období nebyl dokončen žádný úkol.' }}
{{ userDeepInsightsData.behavior.days_worked }} {{ t('reporting.deepDaysWorked') || 'pracovních dnů s aktivitou' }}
Žádná data k analýze.
{{ 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') }}
Tady uvidíš nápady, které ti někdo navrhl k diskuzi, i ty, které jsi navrhl ostatním.
{{ t('myTasks.noAssignedTasks') }}
Úkoly, které zadáte ostatním, se zobrazí zde.
{{ t('myTasks.noAssignedTodos') }}
{{ t('myActivity.noActivity') }}
{{ t('home.welcomeSubtitle') }}
Projekt je nejvyšší kontejner pro úkoly. Můžete to být klient, produkt, nebo interní iniciativa.
Zadejte jen jméno a email. Heslo si vygeneruji a ukážu vám na konci — pak je pošlete dotyčným jakkoli (Slack, papírek, …).
Vytvořil jsem {{ onboardingResult.created.length }} uživatelský účet/y. Hesla jsou zobrazena pouze TEĎ — uložte si je nebo pošlete dotyčným. Projekt je založený. Můžete se vrhnout do práce.
{{ onboardingResult.login_url }}
{{ 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 || '—' }} |
Zapni, ať vedle „odesláno přes SMTP" víme i to, jestli byl email doručen, otevřen, případně spadl (bounce / complaint). SES posílá události přes SNS na náš webhook.
X-SES-CONFIGURATION-SET + tag email_log_id do každého emailu.
X-BCM-Webhook-Secret s touto hodnotou.
Standard, jméno např. bcsemtix-ses-events.
Po vytvoření zkopíruj jeho ARN (budeš ho potřebovat v dalším kroku).
HTTPS{{ sesWebhookUrl }}SubscriptionConfirmation — náš webhook ho automaticky potvrdí (refresh stránky SNS po cca 30s; status musí být Confirmed).
{{ globalSettings.ses_configuration_set || 'bcsemtix-events' }} (přesně tu samou hodnotu pak ulož i sem nahoru).
Send, Delivery, Open, Click, Bounce, Complaint, Reject, Rendering failure.Amazon SNS.r.region.awstrack.me.
Confirmed a vyplníš sem nahoře „Configuration Set" + zapneš toggle, klikni dolu „Otestovat doručitelnost". Pošle se test email a do několika vteřin uvidíš sled událostí.
{{ sesTestResult.log_id }}
— sleduj v email-logs
sloupce delivered_at, opened_at.
global_settings tabulky.
Uživatelé si mohou připojit workspace do Clauda jednou adresou konektoru (přes OAuth) — návod a adresu najdou ve svém profilu nebo na stránce /claude. Žádné stahování ani klíč. Superadmin má přístup vždy. Ostatním ho povolíš tímto přepínačem (opt-in).
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.
Jednou týdně (pondělí ráno) odešle na zadaný e-mail souhrn položek, které jsou aktuálně k vystavení (po splatnosti + blížící se obnovy + roční položky starší než rok).
Denně (ráno) automaticky vystaví do Fakturoidu faktury za splatné položky z Nákladů produktů. Položky v režimu „Vystavit + e-mail klientovi" se rovnou odešlou klientovi. U opakujících se položek se po vystavení posune další termín fakturace (obnova). Položky v režimu „Jen upozornit" se nefakturují.
Položky a jejich režim fakturace spravuješ na stránce Náklady produktů.
Lehký příjem malých požadavků. Padají jako návrh do inbox projektu a odtud se rozhazují do cílových projektů (servis, marketing, …).
Při změně časové proměnné (např. rozpočtu) se zapíše komentář do projektového dokumentu, jehož název odpovídá zadanému řetězci.
changelog (dokument si v projektu vytvoříte sami).
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.
Dvoufaktorové ověření přes TOTP (Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden…) chrání pouze přihlášení do GUI. API klíče a tokeny 2FA nepodléhají.
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í). Výchozí je SEMTIX SMS brána
(https://sms.smtx.cz) — funguje hned, bez vyplňování. URL i API klíč lze přepsat.
POST /sms s Bearer API klíčem.
Legacy režim: URL šablona se značkami {phone} a {text} (volá se 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).
Pravidelně maže staré SQL zálohy v db/deploy_snapshots/, db/backup/ a storage/db_backups/. Aplikuje se podle stáří i podle počtu (priorita: stáří první, pak ořez na max. počet). Spouští se přes Rundeck (denně), nebo manuálně tlačítkem níž.
Jednou denně se vytvoří mysqldump | gzip a nahraje na S3 bucket. Funguje s AWS S3, Backblaze B2, Cloudflare R2, Wasabi, MinIO i DigitalOcean Spaces. Spouští se přes Rundeck.
https://s3.<region>.amazonaws.com.
https://s3.us-west-002.backblazeb2.com, region us-west-002.
https://<account>.r2.cloudflarestorage.com, region auto.
s3:HeadBucket, s3:PutObject, s3:DeleteObject (test).
Konfigurace pro endpoint POST /api/v1/intake/request. Tyto hodnoty určují, kdo bude vlastníkem
nového projektu založeného z externí zakázky a komu se přiřadí vzniklý úkol.
Dokumentace
todo_assignees;
první z nich je nastaven jako primární řešitel. Pokud nikdo, použije se vlastník výše.
billing.hourly_rate.
Rundeck spouští naplánované úlohy (process_notifications, fakturace, e-mail catch-all atd.). Po zadání URL a API tokenu klikněte na „Otestovat spojení"; pokud projde, tlačítko „Nainstalovat / synchronizovat joby" nahraje všechny očekávané joby do Rundecku.
{{ rundeckTestResult.config?.project }}
{{ rundeckTestResult.project_exists ? 'už existuje' : 'zatím neexistuje (vznikne při synchronizaci)' }}.
— {{ rundeckTestResult.error }}
Propojte účet s Telegram botem pro přístup k Director AI přímo z mobilu.
{{ t('comments.title') }} ({{ publicComments.length }})