diff --git a/app/Controllers/StaffController.php b/app/Controllers/StaffController.php index 0d629b7..f93aab2 100644 --- a/app/Controllers/StaffController.php +++ b/app/Controllers/StaffController.php @@ -8,11 +8,13 @@ use App\Models\ManagerIncentiveFileModel; class StaffController extends ResourceController { + protected $db; protected $StaffModel; protected $ManagerIncentiveFileModel; public function __construct() { + $this->db = \Config\Database::connect(); $this->StaffModel = new StaffModel(); $this->ManagerIncentiveFileModel = new ManagerIncentiveFileModel(); } @@ -60,36 +62,92 @@ class StaffController extends ResourceController if(!empty($manager_id)) { - $staffData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') - ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') - ->where('partner_staff.manager_id' , $manager_id ) - ->where('partner_staff.role_id' , 3 ) - ->where('partner_staff.is_active' , 1 ) - ->findAll(); - $managerData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') - ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') - ->where('partner_staff.id', $manager_id ) - ->where('partner_staff.is_active' , 1 ) - ->first(); - $data = array_values(array_unique(array_merge($staffData, [$managerData]), SORT_REGULAR)); + + $staffData = $this->db->table('partner_staff ps') + ->select(" + ps.id, + ps.name, + R.role, + + -- today's assigned count + SUM(CASE WHEN DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_assigned, + + -- not completed today + SUM(CASE WHEN pe.enquiry_status != 'Completed' + AND DATE(pe.created_on) = CURDATE() + THEN 1 ELSE 0 END) AS total_pending + ") + ->join('partner_role_master R', 'R.id = ps.role_id', 'left') + ->join('partner_enquiry pe', 'pe.assigned_to = ps.id AND pe.is_active = 1', 'left') + ->where('ps.manager_id', $manager_id) + ->groupStart() + ->where('ps.role_id', 3) + ->orWhere('ps.id', $manager_id) + ->groupEnd() + ->where('ps.is_active', 1) + ->groupBy('ps.id') + ->orderBy('ps.name', 'ASC') + ->get() + ->getResultArray(); + + // $staffData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') + // ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') + // ->where('partner_staff.manager_id' , $manager_id ) + // ->where('partner_staff.role_id' , 3 ) + // ->where('partner_staff.is_active' , 1 ) + // ->findAll(); + // $managerData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') + // ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') + // ->where('partner_staff.id', $manager_id ) + // ->where('partner_staff.is_active' , 1 ) + // ->first(); + // $data = array_values(array_unique(array_merge($staffData, [$managerData]), SORT_REGULAR)); }else if(!empty($handler_id)){ - $staffData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') - ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') - ->where("JSON_CONTAINS(partner_staff.handler_id, '\"$handler_id\"')") - ->where('partner_staff.role_id' , 3 ) - ->where('partner_staff.is_active' , 1 ) - ->findAll(); - $handlerData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') - ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') - ->where('partner_staff.id', $handler_id ) - ->where('partner_staff.is_active' , 1 ) - ->first(); - $data = array_values(array_unique(array_merge($staffData, [$handlerData]), SORT_REGULAR)); + + $staffData = $this->db->table('partner_staff ps') + ->select(" + ps.id, + ps.name, + R.role, + + -- today's assigned count + SUM(CASE WHEN DATE(pe.created_on) = CURDATE() THEN 1 ELSE 0 END) AS today_assigned, + + -- not completed today + SUM(CASE WHEN pe.enquiry_status != 'Completed' + AND DATE(pe.created_on) = CURDATE() + THEN 1 ELSE 0 END) AS total_pending + ") + ->join('partner_role_master R', 'R.id = ps.role_id', 'left') + ->join('partner_enquiry pe', 'pe.assigned_to = ps.id AND pe.is_active = 1', 'left') + ->where("JSON_CONTAINS(ps.handler_id, '\"$handler_id\"')") + ->groupStart() + ->where('ps.role_id', 3) + ->orWhere('ps.id', $handler_id) + ->groupEnd() + ->where('ps.is_active', 1) + ->groupBy('ps.id') + ->orderBy('ps.name', 'ASC') + ->get() + ->getResultArray(); + + // $staffData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') + // ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') + // ->where("JSON_CONTAINS(partner_staff.handler_id, '\"$handler_id\"')") + // ->where('partner_staff.role_id' , 3 ) + // ->where('partner_staff.is_active' , 1 ) + // ->findAll(); + // $handlerData = $this->StaffModel->select('partner_staff.id, partner_staff.name , R.role') + // ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') + // ->where('partner_staff.id', $handler_id ) + // ->where('partner_staff.is_active' , 1 ) + // ->first(); + // $data = array_values(array_unique(array_merge($staffData, [$handlerData]), SORT_REGULAR)); } - return $this->respond(['status' => 'success', 'code' => 200, 'data' => $data], 200); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $staffData], 200); } catch (\Exception $e) { return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500);