{% extends "base.html" %} {% from "components/ui.html" import confirm_dialog %} {% block content %}
{{ project.client }}
{% if project.code_display %} {{ project.code_display }} {% else %} — {% endif %}
{{ 'Billable' if project.billable else 'Not Billable' }} {% if project.hourly_rate %}({{ "%.2f"|format(project.hourly_rate) }}/hr){% endif %}
{{ project.archived_reason }}
{% set link_template = link_templates_by_field.get(key) if link_templates_by_field else None %} {% if link_template and value %} {# Render as clickable link using link template #} {% set rendered_url = link_template.render_url(value) %} {% if rendered_url %} {{ value }} {% else %} {{ value }} {% endif %} {% elif value is string and (value.startswith('http://') or value.startswith('https://')) %} {# Fallback: If the value looks like a URL, render it as a clickable link #} {{ value }} {% elif value is string and value.startswith('www.') %} {# Handle www. URLs #} {{ value }} {% else %} {{ value }} {% endif %}
{{ attachment.description }}
{% endif %}{{ attachment.file_size_display }} • {{ attachment.uploaded_at|user_datetime('%Y-%m-%d %H:%M') if attachment.uploaded_at else '' }} {% if attachment.is_visible_to_client %} {{ _('Client Visible') }} {% endif %}
{{ _('No attachments yet') }}
{% endif %}| {{ _('Name') }} | {{ _('Priority') }} | {{ _('Status') }} | {{ _('Due') }} | {{ _('Progress') }} | {{ _('Actions') }} |
|---|---|---|---|---|---|
| {{ task.name }} | {% set p = task.priority %} {% set pcls = {'low':'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300', 'medium':'bg-sky-100 text-sky-700 dark:bg-sky-900/30 dark:text-sky-300', 'high':'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300', 'urgent':'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300'}[p] if p in ['low','medium','high','urgent'] else 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300' %} {{ task.priority_display }} | {% set s = task.status %} {% set scls = {'todo':'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300', 'in_progress':'bg-indigo-100 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300', 'review':'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300', 'done':'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300', 'cancelled':'bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-200'}[s] if s in ['todo','in_progress','review','done','cancelled'] else 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300' %} {{ task.status_display }} | {% if task.due_date %} {% set overdue = task.is_overdue %} {{ task.due_date.strftime('%Y-%m-%d') }} {% else %} — {% endif %} |
{% set pct = task.progress_percentage or 0 %}
|
{{ _('View') }} |
| {{ _('No tasks for this project.') }} | |||||