{{ 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 }}"
{{ t('reporting.loadingReport') }}
{{ t('reporting.thisMonthOverview') }}
{{ t('reporting.noOneOnline') }}
{{ t('reporting.forServiceProjects') }}
{{ t('reporting.selectProjectForReport') }}
| {{ t('reporting.user') }} | {{ t('reporting.hours') }} | {{ t('reporting.entries') }} |
|---|---|---|
|
|
{{ formatSecondsHHMM(u.total_seconds) }} | {{ u.entry_count }} |
| {{ t('reporting.list') }} | {{ t('reporting.hours') }} | {{ t('reporting.tasks') }} |
|---|---|---|
| {{ l.list_name }} | {{ formatSecondsHHMM(l.total_seconds) }} | {{ 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') }}
{{ t('reporting.selectProjectForReport') }}
| {{ 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') }} | {{ t('reporting.hours') }} | {{ t('reporting.tasks') }} |
|---|---|---|
| {{ l.list_name }} | {{ formatSecondsHHMM(l.total_seconds) }} | {{ 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') }} | {{ t('reporting.minutes') }} | {{ t('reporting.entries') }} | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
{{ p.project_name }}
{{ p.project_name }}
|
{{ formatSecondsHHMM(p.total_seconds) }} | {{ p.entry_count }} | |||||||||||||
|
Načítání úkolů...
Žádné úkoly v tomto období
{{ userReportProjectTodos.length }} úkolů
|
|||||||||||||||
| Ú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') }}
{{ t('myTasks.noAssignedTasks') }}
{{ t('myTasks.noAssignedTasks') }}
{{ 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ý vyhledávací 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
{{ t('project.variablesHint') || 'Uložte si libovolné údaje k projektu - odkazy, ceny, kontakty apod.' }}
{{ t('project.connectionDesc') }}
{{ t('management.archiveDesc') }}
{{ t('management.deleteDesc') }}
{{ 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('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' }}
{{ t('projectPeople.noMembers') }}
{{ group.description }}
{{ t('groups.noGroups') }}
✅ {{ syncUsersResult }}
| ID | {{ t('admin.user') }} | {{ t('admin.role') }} | 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()) }} | 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.actions') }} |
|---|---|---|---|---|---|
| {{ formatDateTime(log.created_at) }} | {{ log.status }} |
{{ log.to_email }}
{{ t('admin.originalTo') }}: {{ log.original_to_email }}
|
{{ log.project_name || '-' }} | ||
| {{ 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.todo') || 'Úkol' }} | Status | {{ t('admin.actions') }} | |
|---|---|---|---|---|---|---|---|
| {{ formatDateTime(m.received_at || m.created_at) }} | #{{ 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) }} |
| 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.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.' }}
{{ 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.
global_settings tabulky.
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
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.
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).
{{ t('comments.title') }} ({{ publicComments.length }})