🚀 مُصادَق: تحديث برمجي جديد 2026-05-03 15:28
This commit is contained in:
@@ -20,12 +20,17 @@ final class DashboardController
|
||||
$params[] = $assignedCompanyId;
|
||||
}
|
||||
|
||||
// Total this month
|
||||
// Invoices this month
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM invoices i
|
||||
WHERE i.tenant_id = ? {$companyScope} AND MONTH(i.created_at) = MONTH(CURDATE()) AND YEAR(i.created_at) = YEAR(CURDATE()) AND i.deleted_at IS NULL");
|
||||
$stmt->execute($params);
|
||||
$thisMonth = (int)$stmt->fetchColumn();
|
||||
|
||||
// Total invoices
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM invoices i WHERE i.tenant_id = ? {$companyScope} AND i.deleted_at IS NULL");
|
||||
$stmt->execute($params);
|
||||
$total = (int)$stmt->fetchColumn();
|
||||
|
||||
// Status distribution
|
||||
$stmt = $db->prepare("SELECT status, COUNT(*) as count FROM invoices i
|
||||
WHERE i.tenant_id = ? {$companyScope} AND i.deleted_at IS NULL GROUP BY status");
|
||||
@@ -49,20 +54,50 @@ final class DashboardController
|
||||
$stmt->execute($params);
|
||||
$recent = $stmt->fetchAll();
|
||||
|
||||
// Pending extraction (from queue)
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM queue_jobs WHERE tenant_id = ? AND status = 'pending' AND job_type = 'ExtractInvoiceJob'");
|
||||
$stmt->execute([$tenantId]);
|
||||
// Approved count
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM invoices i WHERE i.tenant_id = ? {$companyScope} AND i.status = 'approved' AND i.deleted_at IS NULL");
|
||||
$stmt->execute($params);
|
||||
$approved = (int)$stmt->fetchColumn();
|
||||
|
||||
// Pending extraction (from invoices table)
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM invoices WHERE tenant_id = ? {$companyScope} AND status IN ('uploaded', 'extracting') AND deleted_at IS NULL");
|
||||
$stmt->execute($params);
|
||||
$pendingExtraction = (int)$stmt->fetchColumn();
|
||||
|
||||
// Unresolved risk alerts
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM risk_scores WHERE tenant_id = ? AND is_resolved = 0");
|
||||
$stmt->execute([$tenantId]);
|
||||
$riskCount = (int)$stmt->fetchColumn();
|
||||
|
||||
// Companies count
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM companies WHERE tenant_id = ? AND is_active = 1 AND deleted_at IS NULL");
|
||||
$stmt->execute([$tenantId]);
|
||||
$companiesCount = (int)$stmt->fetchColumn();
|
||||
|
||||
Response::json([
|
||||
'success' => true,
|
||||
'data' => [
|
||||
'total_this_month' => $thisMonth,
|
||||
'subscription_usage' => $usagePct,
|
||||
'pending_extraction' => $pendingExtraction,
|
||||
'status_distribution' => $statusDistribution,
|
||||
'recent_invoices' => $recent,
|
||||
'pending_extraction' => $pendingExtraction
|
||||
'companies_count' => $companiesCount,
|
||||
'risk_alerts_count' => $riskCount
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function getRiskStats(Request $request): void
|
||||
{
|
||||
$db = Database::getInstance();
|
||||
$tenantId = $request->tenantId;
|
||||
$stmt = $db->prepare("SELECT risk_type, COUNT(*) AS count FROM risk_scores WHERE tenant_id = ? AND is_resolved = 0 GROUP BY risk_type");
|
||||
$stmt->execute([$tenantId]);
|
||||
|
||||
Response::json([
|
||||
'success' => true,
|
||||
'data' => $stmt->fetchAll(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user