{% include "_pwa_head.html" %} {% set toolbar_username = (dashboard_user.username if dashboard_user and dashboard_user.username else (session.get('username') or 'User')) %} {% set toolbar_profile_picture_url = ('/profile-picture/' ~ toolbar_username) if dashboard_user and dashboard_user.profile_picture else '' %}
{% set onsite_alert_count = onsite_dashboard_alert_count or 0 %} {% set onsite_alert_badge = '99+' if onsite_alert_count > 99 else onsite_alert_count %} {% set onsite_alert_label = onsite_dashboard_alert_label or 'onsite call' %}
Mobile Workspace

Dashboard

Faster daily actions for {{ scope_label or branch or 'your branch' }}.
New Job
{% if onsite_alert_count %} {% else %}
{% endif %}
New Job Onsite Calls Immediate attention {{ onsite_alert_badge }}
{% if from_date or to_date or filter_branch or filter_status or filter_closure or filter_engineer %}
Active Filters {% if can_switch_dashboard_branch and selected_dashboard_branch != 'ALL' %} • Scope: {{ scope_label }}{% endif %} {% if from_date %} • From: {{ from_date }}{% endif %} {% if to_date %} • To: {{ to_date }}{% endif %} {% if filter_branch %} • Branch: {{ filter_branch }}{% endif %} {% if filter_status %} • Status: {{ filter_status }}{% endif %}
{% endif %}
Total Job Cards
{{ total_cases }}
View →
Pending Jobs
{{ pending_jobs }}
View →
Open Jobs
{{ open_cases }}
View → {% if open_cases_over_2_days %}
{{ open_cases_over_2_days }} Cases above 2 days, Take Immediate Action
{% endif %}
Completed Jobs
{{ completed_jobs }}
View →
{% if active_transfer_jobs %}
Transfer Jobs
{{ active_transfer_jobs }}
View →
{% endif %}
Pending Spare Billing
{{ pending_spare_billing }}
View →
Dashboard Insights
SYSCARE Progress Target: {{ syscare_target }}
Target {{ syscare_target }}
Achieved {{ syscare_achieved }}
Balance {{ syscare_remaining }}
% Complete {{ '%.1f'|format(syscare_percentage or 0) }}%
{{ syscare_advice }}
Revenue Mix {{ revenue_target_branch }}
Target {{ '%.0f'|format(total_target or 0) }}
Achieved {{ '%.0f'|format(achieved_total or 0) }}
Balance {{ '%.0f'|format(total_target_remaining or 0) }}
% Complete {{ '%.1f'|format(achieved_percentage or 0) }}%
{{ revenue_advice }}
Cashflow Today {{ scope_label }}
Cash {{ '%.0f'|format(cashflow_today_cash or 0) }}
Card {{ '%.0f'|format(cashflow_today_card or 0) }}
UPI {{ '%.0f'|format(cashflow_today_upi or 0) }}
Total {{ '%.0f'|format(cashflow_today_total or 0) }}
{% if cashflow_has_data %} Today {{ cashflow_today_date }} | Current day service charges only. Cash deposit and cash request are tracked separately inside Cashflow. {% else %} No cashflow entry reported for today. {% endif %}
{% if session.role in ['super_admin', 'admin'] and cashflow_pending_transfer_count %}
{{ cashflow_pending_transfer_count }} transfer review pending. Pending amount {{ '%.0f'|format(cashflow_pending_transfers or 0) }}. Open Transfer Review
{% endif %}
{% set report_chart_mode = 'closed' if date_field_filter == 'closed' else 'created' %} {% if session.role in ['super_admin', 'admin'] %}
Branch-Wise Job Report
Export CSV
{% for status_name in status_columns %} {% endfor %} {% for row in branch_wise_rows %} {% for status_name in status_columns %} {% set value = row.counts[status_name] %} {% endfor %} {% endfor %} {% for status_name in status_columns %} {% set t = branch_wise_totals[status_name] %} {% endfor %}
Service Location{{ status_name }}Total
{{ row.branch_name }} {% if value > 0 %} {{ value }} {% else %} - {% endif %} {% if row.total > 0 %} {{ row.total }} {% else %} 0 {% endif %}
Total {% if t > 0 %} {{ t }} {% else %} 0 {% endif %} {{ branch_wise_grand_total }}
{% endif %} {% if session.role in ['coordinator', 'engineer'] %}
Branch Report ({{ scope_label }})
Export CSV
{% for status_name in status_columns %} {% endfor %} {% for status_name in status_columns %} {% set value = branch_report_counts[status_name] %} {% endfor %}
{{ status_name }}Total
{% if value > 0 %} {{ value }} {% else %} - {% endif %} {{ branch_report_total }}
{% endif %} {% if session.role in ['super_admin', 'admin', 'coordinator', 'engineer'] %}
Ageing Analysis
Export CSV
{% for bucket in age_buckets %} {% endfor %} {% for row in ageing_rows %} {% for bucket in age_buckets %} {% set value = row.counts[bucket] %} {% endfor %} {% endfor %} {% for bucket in age_buckets %} {% set t = ageing_totals_by_bucket[bucket] %} {% endfor %}
Job Card Status{{ bucket }} DaysTotal
{{ row.status }} {% if value > 0 %} {{ value }} {% else %} - {% endif %} {% if row.total > 0 %} {{ row.total }} {% else %} 0 {% endif %}
Total {% if t > 0 %} {{ t }} {% else %} 0 {% endif %} {{ ageing_grand_total }}
{% endif %}
Call Analysis
New Calls by Device
Call Types Distribution