|
|
<?php |
|
|
session_start(); |
|
|
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { |
|
|
header('Location: ../../index.php'); |
|
|
exit; |
|
|
} |
|
|
|
|
|
require_once '../../db.php'; |
|
|
require_once 'agent_claim.php'; |
|
|
|
|
|
header('Content-Type: application/json'); |
|
|
|
|
|
$response = ['success' => false, 'message' => '']; |
|
|
|
|
|
try { |
|
|
$database = new Database(); |
|
|
$db = $database->getConnection(); |
|
|
$claim = new AgentClaim($db); |
|
|
|
|
|
$action = $_POST['action'] ?? ''; |
|
|
|
|
|
switch ($action) { |
|
|
case 'submit_claim': |
|
|
|
|
|
$required_fields = ['claim_type', 'amount', 'description']; |
|
|
foreach ($required_fields as $field) { |
|
|
if (empty($_POST[$field])) { |
|
|
throw new Exception("Missing required field: $field"); |
|
|
} |
|
|
} |
|
|
|
|
|
$claim->user_id = $_SESSION['user_id']; |
|
|
$claim->username = $_SESSION['username']; |
|
|
$claim->email = $_SESSION['email']; |
|
|
$claim->claim_type = $_POST['claim_type']; |
|
|
$claim->amount = floatval($_POST['amount']); |
|
|
$claim->description = $_POST['description']; |
|
|
$claim->evidence_file = $_POST['evidence_file'] ?? null; |
|
|
|
|
|
|
|
|
if ($claim->amount <= 0) { |
|
|
throw new Exception("Invalid claim amount"); |
|
|
} |
|
|
|
|
|
|
|
|
if ($claim->hasPendingClaims($claim->user_id)) { |
|
|
throw new Exception("You already have a pending claim. Please wait for it to be processed."); |
|
|
} |
|
|
|
|
|
$claim_id = $claim->create(); |
|
|
if ($claim_id) { |
|
|
$response['success'] = true; |
|
|
$response['message'] = 'Claim submitted successfully! It will be reviewed within 3-5 business days.'; |
|
|
$response['claim_id'] = $claim_id; |
|
|
} else { |
|
|
throw new Exception("Failed to submit claim"); |
|
|
} |
|
|
break; |
|
|
|
|
|
case 'approve_claim': |
|
|
|
|
|
if ($_SESSION['role'] !== 'admin') { |
|
|
throw new Exception("Insufficient permissions"); |
|
|
} |
|
|
|
|
|
$claim_id = $_POST['claim_id'] ?? 0; |
|
|
if (!$claim_id) { |
|
|
throw new Exception("Invalid claim ID"); |
|
|
} |
|
|
|
|
|
if ($claim->updateStatus($claim_id, 'approved', $_SESSION['user_id'])) { |
|
|
$response['success'] = true; |
|
|
$response['message'] = 'Claim approved successfully'; |
|
|
} else { |
|
|
throw new Exception("Failed to approve claim"); |
|
|
} |
|
|
break; |
|
|
|
|
|
case 'reject_claim': |
|
|
|
|
|
if ($_SESSION['role'] !== 'admin') { |
|
|
throw new Exception("Insufficient permissions"); |
|
|
} |
|
|
|
|
|
$claim_id = $_POST['claim_id'] ?? 0; |
|
|
$rejection_reason = $_POST['rejection_reason'] ?? ''; |
|
|
|
|
|
if (!$claim_id) { |
|
|
throw new Exception("Invalid claim ID"); |
|
|
} |
|
|
|
|
|
if (empty($rejection_reason)) { |
|
|
throw new Exception("Rejection reason is required"); |
|
|
} |
|
|
|
|
|
if ($claim->updateStatus($claim_id, 'rejected', null, $rejection_reason)) { |
|
|
$response['success'] = true; |
|
|
$response['message'] = 'Claim rejected successfully'; |
|
|
} else { |
|
|
throw new Exception("Failed to reject claim"); |
|
|
} |
|
|
break; |
|
|
|
|
|
default: |
|
|
throw new Exception("Invalid action"); |
|
|
} |
|
|
|
|
|
} catch (Exception $e) { |
|
|
$response['message'] = $e->getMessage(); |
|
|
error_log("Process Claim Error: " . $e->getMessage()); |
|
|
} |
|
|
|
|
|
echo json_encode($response); |
|
|
?> |