Deploy: 2026-05-23 03:23:22
This commit is contained in:
@@ -46,24 +46,28 @@ class SuperAdminController extends BaseController
|
||||
cs.plan_id,
|
||||
sp.name as plan_name,
|
||||
cs.status as subscription_status,
|
||||
cs.starts_at as subscription_starts,
|
||||
cs.ends_at as subscription_ends,
|
||||
(SELECT COUNT(*) FROM whatsapp_sessions WHERE company_id = c.id) as sessions_count,
|
||||
(SELECT COUNT(*) FROM whatsapp_sessions WHERE company_id = c.id AND status = 'connected') as active_sessions,
|
||||
COALESCE(cu.request_count, 0) as request_usage,
|
||||
COALESCE(cu.voice_count, 0) as voice_usage,
|
||||
COALESCE(cu.ocr_count, 0) as ocr_usage
|
||||
SELECT c.id, c.name, c.status as company_status, c.created_at,
|
||||
cs.plan_id, cs.status as sub_status, cs.starts_at, cs.ends_at, cs.payment_method, cs.receipt_reference,
|
||||
p.name as plan_name
|
||||
FROM companies c
|
||||
LEFT JOIN company_subscriptions cs ON cs.company_id = c.id AND cs.status = 'active'
|
||||
LEFT JOIN subscription_plans sp ON cs.plan_id = sp.id
|
||||
LEFT JOIN company_subscription_usage cu ON cu.company_id = c.id
|
||||
AND cu.billing_start <= CURRENT_DATE()
|
||||
AND cu.billing_end >= CURRENT_DATE()
|
||||
ORDER BY c.id ASC
|
||||
LEFT JOIN company_subscriptions cs ON c.id = cs.company_id AND cs.status IN ('active', 'trialing', 'pending_approval')
|
||||
LEFT JOIN subscription_plans p ON cs.plan_id = p.id
|
||||
ORDER BY c.created_at DESC
|
||||
");
|
||||
|
||||
// Fetch list of available subscription plans
|
||||
$plans = Database::select("SELECT id, name, price, max_sessions FROM subscription_plans ORDER BY price ASC");
|
||||
$pendingApprovals = [];
|
||||
$activeCompanies = [];
|
||||
|
||||
foreach ($companies as $c) {
|
||||
if ($c['sub_status'] === 'pending_approval') {
|
||||
$pendingApprovals[] = $c;
|
||||
} else {
|
||||
$activeCompanies[] = $c;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. Fetch all available plans to allow admin to upgrade them manually
|
||||
$plans = Database::select("SELECT id, name, price FROM subscription_plans ORDER BY price ASC");
|
||||
|
||||
$response->json([
|
||||
'status' => 'success',
|
||||
@@ -73,7 +77,8 @@ class SuperAdminController extends BaseController
|
||||
'total_sessions' => (int)$sessionsCount,
|
||||
'connected_sessions' => (int)$connectedSessions
|
||||
],
|
||||
'companies' => $companies,
|
||||
'companies' => $activeCompanies,
|
||||
'pending_approvals' => $pendingApprovals,
|
||||
'plans' => $plans
|
||||
]
|
||||
]);
|
||||
@@ -138,4 +143,46 @@ class SuperAdminController extends BaseController
|
||||
$response->status(500)->json(['error' => 'Failed to update subscription: ' . $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Approve a pending billing request
|
||||
* POST /api/admin/companies/approve-billing
|
||||
*/
|
||||
public function approveBilling(Request $request, Response $response): void
|
||||
{
|
||||
$body = $request->getBody();
|
||||
$targetCompanyId = isset($body['company_id']) ? (int)$body['company_id'] : null;
|
||||
|
||||
if (!$targetCompanyId) {
|
||||
$response->status(400)->json(['error' => 'Missing company_id']);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Find the pending subscription
|
||||
$pending = Database::selectOne("SELECT * FROM company_subscriptions WHERE company_id = ? AND status = 'pending_approval' ORDER BY id DESC LIMIT 1", [$targetCompanyId]);
|
||||
if (!$pending) {
|
||||
$response->status(404)->json(['error' => 'No pending approval found for this company']);
|
||||
return;
|
||||
}
|
||||
|
||||
// Deactivate other active/trialing subscriptions
|
||||
Database::execute("UPDATE company_subscriptions SET status = 'expired' WHERE company_id = ? AND status IN ('active', 'trialing')", [$targetCompanyId]);
|
||||
|
||||
// Mark the pending one as active
|
||||
Database::execute("UPDATE company_subscriptions SET status = 'active' WHERE id = ?", [$pending['id']]);
|
||||
|
||||
// Clear active subscription cache for the company
|
||||
if (class_exists('App\Core\Cache')) {
|
||||
\App\Core\Cache::delete("company_subscription_{$targetCompanyId}");
|
||||
}
|
||||
|
||||
$response->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Billing approved and subscription activated successfully'
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$response->status(500)->json(['error' => 'Failed to approve billing: ' . $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user