{{ proposal.title or "Project Report" }}

{% if proposal.client_name %}
{{ proposal.client_name }}{% if proposal.subtitle %} · {{ proposal.subtitle }}{% endif %}
{% endif %}
Generated: {{ proposal.updated_at[:10] if proposal.updated_at else "" }}
{{ overall_pct }}%
Tasks Completed
{{ tasks|length }}
Total Tasks
${{ total_with_indirect|currency }}
Budget
{{ milestones|length }}
Milestones

Tasks

{% for task in tasks %}

{{ task.name }}

Status: {% if task.get('status') == 'completed' %}Completed {% elif task.get('status') == 'in_progress' %}In Progress {% elif task.get('status') == 'delayed' %}Delayed {% else %}Not Started{% endif %}  ·  Progress: {{ task.get('progress_pct', 0) }}% {% if task.get('actual_start') %}  ·  Start: {{ task.get('actual_start') }}{% endif %} {% if task.get('actual_end') %}  ·  End: {{ task.get('actual_end') }}{% endif %}
{% if task.get('notes') %}

{{ task.get('notes', '') }}

{% endif %}
{% endfor %}

Budget Tracking

{% for task in tasks %} {% if task.id in task_budgets %} {% for item in task_budgets[task.id]["items"] %} {% endfor %} {% endif %} {% endfor %}
Task Item Planned Actual Variance
{{ task.name }} ${{ task_budgets[task.id].subtotal|currency }} ${{ task_budgets[task.id].actual_total|currency }} ${{ (task_budgets[task.id].actual_total - task_budgets[task.id].subtotal)|currency }}
{{ item.name }} ${{ (item.cost_per_unit * item.units)|currency }} ${{ item.get('actual_cost', 0)|currency }} ${{ (item.get('actual_cost', 0) - item.cost_per_unit * item.units)|currency }}
Total ${{ total_with_indirect|currency }} ${{ (total_actual + indirect_amount)|currency }}
{% if milestones %}

Milestones

{% for m in milestones %}
{% if m.completed %}☑{% else %}☐{% endif %} {{ m.name }}{% if m.date %} ({{ m.date }}){% endif %}
{% endfor %} {% endif %} {% if reports %}

Reports

{% for r in reports|reverse %}

{{ r.title }} {{ r.date }}

{% if r.content %}
{{ r.content }}
{% endif %}
{% endfor %} {% endif %}