$expected=(int)$db->fetchColumn("SELECT COUNT(*) FROM daily_reports WHERE user_id = ? AND report_date LIKE ?",[$cid,$month.'%']);
$endDate=date('Y-m-t',strtotime($startDate));
$onTime=(int)$db->fetchColumn("SELECT COUNT(*) FROM daily_reports WHERE user_id = ? AND report_date LIKE ? AND is_on_time = 1",[$cid,$month.'%']);
$violations=(int)$db->fetchColumn("SELECT COUNT(*) FROM deductions WHERE contractor_id = ? AND payroll_month = ? AND deleted_at IS NULL AND status NOT IN ('dismissed')",[$cid,$month]);
$assigned=(int)$db->fetchColumn("SELECT COUNT(DISTINCT ca.card_id) FROM card_assignments ca JOIN cards c ON c.id = ca.card_id WHERE ca.user_id = ? AND c.created_at BETWEEN ? AND ?",[$cid,$start.' 00:00:00',$end.' 23:59:59']);
$endDate=date('Y-m-t',strtotime($startDate));
$done=(int)$db->fetchColumn("SELECT COUNT(DISTINCT ca.card_id) FROM card_assignments ca JOIN cards c ON c.id = ca.card_id WHERE ca.user_id = ? AND c.done_at BETWEEN ? AND ?",[$cid,$start.' 00:00:00',$end.' 23:59:59']);
$withDeadline=(int)$db->fetchColumn("SELECT COUNT(DISTINCT ca.card_id) FROM card_assignments ca JOIN cards c ON c.id = ca.card_id WHERE ca.user_id = ? AND c.deadline IS NOT NULL AND c.done_at IS NOT NULL AND c.done_at BETWEEN ? AND ?",[$cid,$start.' 00:00:00',$end.' 23:59:59']);
$onTime=(int)$db->fetchColumn("SELECT COUNT(DISTINCT ca.card_id) FROM card_assignments ca JOIN cards c ON c.id = ca.card_id WHERE ca.user_id = ? AND c.deadline IS NOT NULL AND c.done_at IS NOT NULL AND c.done_at <= c.deadline AND c.done_at BETWEEN ? AND ?",[$cid,$start.' 00:00:00',$end.' 23:59:59']);
$cardsAssigned=(int)$db->fetchColumn(
"SELECT COUNT(DISTINCT ca.card_id) FROM card_assignments ca
$cycles=$db->fetchAll("SELECT * FROM evaluation_cycles WHERE status IN ('open','technical_phase','professional_phase')");
return;
}
foreach($cyclesas$cycle){
$contractors=$db->fetchAll(
$contractors=$db->fetchAll(
"SELECT DISTINCT contractor_id FROM evaluations WHERE cycle_id = ?",
"SELECT DISTINCT contractor_id FROM evaluations WHERE cycle_id = ?",[$cycle['id']]
[$activeCycle['id']]
);
);
$allCompiled=true;
foreach($contractorsas$c){
foreach($contractorsas$c){
$contractorId=$c['contractor_id'];
$cid=$c['contractor_id'];
$alreadyCompiled=$db->fetchOne(
$already=$db->fetchOne("SELECT id FROM compiled_evaluations WHERE cycle_id = ? AND contractor_id = ?",[$cycle['id'],$cid]);
"SELECT id FROM compiled_evaluations WHERE cycle_id = ? AND contractor_id = ?",
if($already)continue;
[$activeCycle['id'],$contractorId]
);
if($alreadyCompiled){
continue;
}
$techEval=$db->fetchOne(
$tech=$db->fetchOne("SELECT total_score FROM evaluations WHERE cycle_id = ? AND contractor_id = ? AND type = 'technical' AND submitted_at IS NOT NULL",[$cycle['id'],$cid]);
"SELECT * FROM evaluations WHERE cycle_id = ? AND contractor_id = ? AND type = 'technical'",
$prof=$db->fetchOne("SELECT total_score FROM evaluations WHERE cycle_id = ? AND contractor_id = ? AND type = 'professional' AND submitted_at IS NOT NULL",[$cycle['id'],$cid]);
[$activeCycle['id'],$contractorId]
);
$profEval=$db->fetchOne(
"SELECT * FROM evaluations WHERE cycle_id = ? AND contractor_id = ? AND type = 'professional'",
"{$goal['contractor_name']}'s auto-generated learning goal \"{$goal['title']}\" has exceeded double the original deadline. Termination review required.",
"SELECT COALESCE(SUM(amount), 0) FROM bounty_payouts WHERE recipient_id = ? AND payroll_month = ?",
[$userId,$month]
);
$deductions=(float)$this->db->fetchColumn(
"SELECT COALESCE(SUM(COALESCE(final_amount, calculated_amount)), 0) FROM deductions
WHERE contractor_id = ? AND payroll_month = ? AND status IN ('applied','applied_no_response','reduced','accepted') AND deleted_at IS NULL",
[$userId,$month]
);
$posAdj=(float)$this->db->fetchColumn(
$user=$db->fetchOne("SELECT actual_salary FROM users WHERE id = ?",[$userId]);
"SELECT COALESCE(SUM(amount), 0) FROM manual_adjustments
$actual=(float)($user['actual_salary']??0);
WHERE contractor_id = ? AND effective_month = ? AND type = 'positive' AND status = 'approved' AND deleted_at IS NULL",
[$userId,$month]
);
$negAdj=(float)$this->db->fetchColumn(
$bounties=(float)$db->fetchColumn("SELECT COALESCE(SUM(amount),0) FROM bounty_payouts WHERE recipient_id = ? AND payroll_month = ?",[$userId,$month]);
"SELECT COALESCE(SUM(amount), 0) FROM manual_adjustments
$deductions=(float)$db->fetchColumn("SELECT COALESCE(SUM(COALESCE(final_amount,calculated_amount)),0) FROM deductions WHERE contractor_id = ? AND payroll_month = ? AND status IN ('applied','applied_no_response','reduced','accepted') AND deleted_at IS NULL",[$userId,$month]);
WHERE contractor_id = ? AND effective_month = ? AND type = 'negative' AND status = 'approved' AND deleted_at IS NULL",
$posAdj=(float)$db->fetchColumn("SELECT COALESCE(SUM(amount),0) FROM manual_adjustments WHERE contractor_id = ? AND effective_month = ? AND type = 'positive' AND status = 'approved' AND deleted_at IS NULL",[$userId,$month]);
[$userId,$month]
$negAdj=(float)$db->fetchColumn("SELECT COALESCE(SUM(amount),0) FROM manual_adjustments WHERE contractor_id = ? AND effective_month = ? AND type = 'negative' AND status = 'approved' AND deleted_at IS NULL",[$userId,$month]);
<div style="background:var(--bg-primary,#fff);border-radius:12px;padding:32px;max-width:500px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,0.3)">
<divclass="card"><p>Custom report builder. Use the API endpoint <code>POST /analytics/report-builder/execute</code> with source, columns, filters, and aggregation parameters.</p>
<divclass="form-group"><labelclass="form-label">Confirm New Password</label><inputtype="password"name="confirm_password"class="form-control"required></div>
<?phpif($card['deadline']):?><divclass="stat-row"><span>⏰ Deadline</span><strong><?=date('M j, Y g:ia',strtotime($card['deadline']))?></strong></div><?phpendif;?>
<html><head><title>404 Not Found</title><linkrel="stylesheet"href="/assets/css/app.css"></head>
<bodyclass="error-page"><divclass="error-container"><h1>404</h1><p>Page not found.</p><ahref="/dashboard"class="btn btn-primary">Go Home</a></div></body></html>
<bodyclass="error-page"><divclass="error-container"><h1>404</h1><p>Page not found.</p><ahref="/dashboard"class="btn btn-primary">Go Home</a></div></body></html>
<divclass="dashboard-header"><h1>📊 Professional Evaluation</h1><span><?=htmlspecialchars($contractor_name)?> — <?=$month?></span></div>
<divclass="container mx-auto px-4 py-6">
<divclass="card"><p>Evaluation form for professional criteria. Submit scores via API.</p><pre><?=json_encode($auto_scores,JSON_PRETTY_PRINT)?></pre></div>
<divclass="card"><p>Evaluation form for technical criteria. Submit scores via API.</p><pre><?=json_encode($auto_scores,JSON_PRETTY_PRINT)?></pre></div>
<formmethod="POST"action="/notifications/read-all"><inputtype="hidden"name="csrf_token"value="<?=htmlspecialchars($_SESSION['csrf_token']??'')?>"><buttonclass="btn btn-sm btn-ghost">Mark All Read</button></form>
<buttontype="submit"class="btn btn-sm btn-secondary">Mark All as Read</button>
<formmethod="POST"action="/reports/<?=$r['id']?>/review"><inputtype="hidden"name="csrf_token"value="<?=htmlspecialchars($_SESSION['csrf_token']??'')?>"><inputtype="hidden"name="action"value="flag_vague"><buttonclass="btn btn-warning btn-sm">⚠️ Flag Vague</button></form>
<divclass="form-group"><labelclass="form-label">Work Description *</label><textareaname="tasks[0][work_description]"class="form-control"requiredminlength="50"placeholder="Describe what you worked on in detail..."></textarea></div>
<buttontype="button"class="btn btn-secondary btn-sm"onclick="addTaskEntry()">+ Add Another Task</button>
<hrstyle="margin:20px 0">
<buttontype="button"class="btn btn-ghost mb-3"onclick="addTaskEntry()">+ Add Another Task</button>
<divclass="form-group">
<divclass="form-group"><labelclass="form-label">Blockers</label><textareaname="blockers"class="form-control"placeholder="Any blockers or impediments?"></textarea></div>
<label>Blockers (required if any task is blocked)</label>
<divclass="form-group"><labelclass="form-label">Additional Notes</label><textareaname="additional_notes"class="form-control"placeholder="Anything else to note?"></textarea></div>
<textareaname="blockers"rows="2"></textarea>
<divclass="form-group"><labelclass="form-label">How are you feeling?</label><selectname="mood"class="form-control"><optionvalue="">—</option><optionvalue="on_fire">🔥 On Fire</option><optionvalue="good">😊 Good</option><optionvalue="neutral">😐 Neutral</option><optionvalue="frustrated">😤 Frustrated</option></select></div>