+
Outstanding Payments
R {{ outstanding_total|floatformat:2 }}
+ {# === BREAKDOWN — only shown when there are pending adjustments === #}
+ {% if pending_adj_add_total or pending_adj_sub_total %}
+
+
+ Unpaid wages
+ R {{ unpaid_wages_total|floatformat:2 }}
+
+ {% if pending_adj_add_total %}
+
+ + Additions
+ R {{ pending_adj_add_total|floatformat:2 }}
+
+ {% endif %}
+ {% if pending_adj_sub_total %}
+
+ - Deductions
+ -R {{ pending_adj_sub_total|floatformat:2 }}
+
+ {% endif %}
+
+ {% endif %}
+
+ Loan repayments deducted at payment time
+
diff --git a/core/views.py b/core/views.py
index f2596d4..29c4eb1 100644
--- a/core/views.py
+++ b/core/views.py
@@ -781,6 +781,10 @@ def payroll_dashboard(request):
workers_data = []
outstanding_total = Decimal('0.00')
+ # === OUTSTANDING BREAKDOWN (same as home dashboard) ===
+ unpaid_wages_total = Decimal('0.00') # Pure daily rates for unpaid workers
+ pending_adj_add_total = Decimal('0.00') # Unpaid additive adjustments
+ pending_adj_sub_total = Decimal('0.00') # Unpaid deductive adjustments
all_ot_data = [] # For the Price Overtime modal
for worker in active_workers:
@@ -817,11 +821,15 @@ def payroll_dashboard(request):
# Calculate net adjustment amount
pending_adjs = worker.pending_adjustments_list
adj_total = Decimal('0.00')
+ worker_adj_add = Decimal('0.00')
+ worker_adj_sub = Decimal('0.00')
for adj in pending_adjs:
if adj.type in ADDITIVE_TYPES:
adj_total += adj.amount
+ worker_adj_add += adj.amount
elif adj.type in DEDUCTIVE_TYPES:
adj_total -= adj.amount
+ worker_adj_sub += adj.amount
total_payable = log_amount + adj_total
@@ -839,6 +847,9 @@ def payroll_dashboard(request):
'day_rate': float(worker.daily_rate),
})
outstanding_total += max(total_payable, Decimal('0.00'))
+ unpaid_wages_total += log_amount
+ pending_adj_add_total += worker_adj_add
+ pending_adj_sub_total += worker_adj_sub
# --- Payment history ---
paid_records = PayrollRecord.objects.select_related(
@@ -1059,6 +1070,9 @@ def payroll_dashboard(request):
'workers_data': workers_data,
'paid_records': paid_records,
'outstanding_total': outstanding_total,
+ 'unpaid_wages_total': unpaid_wages_total,
+ 'pending_adj_add_total': pending_adj_add_total,
+ 'pending_adj_sub_total': pending_adj_sub_total,
'recent_payments_total': recent_payments_total,
'outstanding_project_costs': outstanding_project_costs,
'active_tab': status_filter,