| | <?php |
| | class AgentClaim { |
| | private $conn; |
| | private $table_name = "agent_claims"; |
| |
|
| | public $id; |
| | public $user_id; |
| | public $username; |
| | public $email; |
| | public $claim_type; |
| | public $amount; |
| | public $description; |
| | public $status; |
| | public $evidence_file; |
| | public $created_at; |
| | public $updated_at; |
| | public $approved_at; |
| | public $approved_by; |
| | public $rejection_reason; |
| |
|
| | public function __construct($db) { |
| | $this->conn = $db; |
| | } |
| |
|
| | |
| | public function create() { |
| | try { |
| | $query = "INSERT INTO " . $this->table_name . " |
| | (user_id, username, email, claim_type, amount, description, evidence_file) |
| | VALUES (:user_id, :username, :email, :claim_type, :amount, :description, :evidence_file)"; |
| | |
| | $stmt = $this->conn->prepare($query); |
| | |
| | |
| | $this->user_id = htmlspecialchars(strip_tags($this->user_id)); |
| | $this->username = htmlspecialchars(strip_tags($this->username)); |
| | $this->email = htmlspecialchars(strip_tags($this->email)); |
| | $this->claim_type = htmlspecialchars(strip_tags($this->claim_type)); |
| | $this->amount = htmlspecialchars(strip_tags($this->amount)); |
| | $this->description = htmlspecialchars(strip_tags($this->description)); |
| | $this->evidence_file = htmlspecialchars(strip_tags($this->evidence_file)); |
| | |
| | |
| | $stmt->bindParam(":user_id", $this->user_id); |
| | $stmt->bindParam(":username", $this->username); |
| | $stmt->bindParam(":email", $this->email); |
| | $stmt->bindParam(":claim_type", $this->claim_type); |
| | $stmt->bindParam(":amount", $this->amount); |
| | $stmt->bindParam(":description", $this->description); |
| | $stmt->bindParam(":evidence_file", $this->evidence_file); |
| | |
| | if ($stmt->execute()) { |
| | return $this->conn->lastInsertId(); |
| | } |
| | return false; |
| | |
| | } catch (PDOException $exception) { |
| | error_log("Create Claim Error: " . $exception->getMessage()); |
| | return false; |
| | } |
| | } |
| |
|
| | |
| | public function getClaimsByUser($user_id, $status = null) { |
| | try { |
| | $query = "SELECT * FROM " . $this->table_name . " WHERE user_id = :user_id"; |
| | |
| | if ($status) { |
| | $query .= " AND status = :status"; |
| | } |
| | |
| | $query .= " ORDER BY created_at DESC"; |
| | |
| | $stmt = $this->conn->prepare($query); |
| | $stmt->bindParam(":user_id", $user_id); |
| | |
| | if ($status) { |
| | $stmt->bindParam(":status", $status); |
| | } |
| | |
| | $stmt->execute(); |
| | return $stmt->fetchAll(PDO::FETCH_ASSOC); |
| | |
| | } catch (PDOException $exception) { |
| | error_log("Get Claims Error: " . $exception->getMessage()); |
| | return []; |
| | } |
| | } |
| |
|
| | |
| | public function getClaimById($id) { |
| | try { |
| | $query = "SELECT ac.*, u.full_name, u.phone |
| | FROM " . $this->table_name . " ac |
| | JOIN users u ON ac.user_id = u.id |
| | WHERE ac.id = :id"; |
| | |
| | $stmt = $this->conn->prepare($query); |
| | $stmt->bindParam(":id", $id); |
| | $stmt->execute(); |
| | |
| | return $stmt->fetch(PDO::FETCH_ASSOC); |
| | |
| | } catch (PDOException $exception) { |
| | error_log("Get Claim Error: " . $exception->getMessage()); |
| | return false; |
| | } |
| | } |
| |
|
| | |
| | public function updateStatus($id, $status, $approved_by = null, $rejection_reason = null) { |
| | try { |
| | $query = "UPDATE " . $this->table_name . " |
| | SET status = :status, |
| | updated_at = CURRENT_TIMESTAMP"; |
| | |
| | if ($status == 'approved') { |
| | $query .= ", approved_at = CURRENT_TIMESTAMP, approved_by = :approved_by"; |
| | } |
| | |
| | if ($status == 'rejected' && $rejection_reason) { |
| | $query .= ", rejection_reason = :rejection_reason"; |
| | } |
| | |
| | $query .= " WHERE id = :id"; |
| | |
| | $stmt = $this->conn->prepare($query); |
| | $stmt->bindParam(":status", $status); |
| | $stmt->bindParam(":id", $id); |
| | |
| | if ($status == 'approved') { |
| | $stmt->bindParam(":approved_by", $approved_by); |
| | } |
| | |
| | if ($status == 'rejected' && $rejection_reason) { |
| | $stmt->bindParam(":rejection_reason", $rejection_reason); |
| | } |
| | |
| | return $stmt->execute(); |
| | |
| | } catch (PDOException $exception) { |
| | error_log("Update Status Error: " . $exception->getMessage()); |
| | return false; |
| | } |
| | } |
| |
|
| | |
| | public function getClaimStatistics($user_id) { |
| | try { |
| | $query = "SELECT |
| | COUNT(*) as total_claims, |
| | SUM(CASE WHEN status = 'approved' THEN 1 ELSE 0 END) as approved_claims, |
| | SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) as pending_claims, |
| | SUM(CASE WHEN status = 'rejected' THEN 1 ELSE 0 END) as rejected_claims, |
| | SUM(CASE WHEN status = 'processing' THEN 1 ELSE 0 END) as processing_claims, |
| | SUM(CASE WHEN status = 'approved' THEN amount ELSE 0 END) as approved_amount, |
| | SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) as pending_amount, |
| | SUM(CASE WHEN status = 'processing' THEN amount ELSE 0 END) as processing_amount, |
| | SUM(amount) as total_amount |
| | FROM " . $this->table_name . " |
| | WHERE user_id = :user_id"; |
| | |
| | $stmt = $this->conn->prepare($query); |
| | $stmt->bindParam(":user_id", $user_id); |
| | $stmt->execute(); |
| | |
| | return $stmt->fetch(PDO::FETCH_ASSOC); |
| | |
| | } catch (PDOException $exception) { |
| | error_log("Statistics Error: " . $exception->getMessage()); |
| | return []; |
| | } |
| | } |
| |
|
| | |
| | public function hasPendingClaims($user_id) { |
| | try { |
| | $query = "SELECT COUNT(*) as pending_count |
| | FROM " . $this->table_name . " |
| | WHERE user_id = :user_id AND status = 'pending'"; |
| | |
| | $stmt = $this->conn->prepare($query); |
| | $stmt->bindParam(":user_id", $user_id); |
| | $stmt->execute(); |
| | |
| | $result = $stmt->fetch(PDO::FETCH_ASSOC); |
| | return $result['pending_count'] > 0; |
| | |
| | } catch (PDOException $exception) { |
| | error_log("Pending Check Error: " . $exception->getMessage()); |
| | return false; |
| | } |
| | } |
| | } |
| | ?> |