From a863e376238a89c6216e45ff86cd09257b0c9eba Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Wed, 25 Feb 2026 19:26:37 +0530 Subject: [PATCH] FIX_ISSUE --- app/Controllers/SalesController.php | 104 ++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 5 deletions(-) diff --git a/app/Controllers/SalesController.php b/app/Controllers/SalesController.php index 904217b1..459b919b 100644 --- a/app/Controllers/SalesController.php +++ b/app/Controllers/SalesController.php @@ -7,6 +7,7 @@ use App\Models\SalesActualLeadModel; use App\Models\SalesContactPersonModel; use App\Models\SalesActivityModel; use App\Models\SalesLeadNoteModel; +use App\Models\UserModel; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\API\ResponseTrait; @@ -18,6 +19,7 @@ class SalesController extends BaseController protected $contactModel; protected $activityModel; protected $noteModel; + protected $userModel; public function __construct() { @@ -25,6 +27,7 @@ class SalesController extends BaseController $this->contactModel = new SalesContactPersonModel(); $this->activityModel = new SalesActivityModel(); $this->noteModel = new SalesLeadNoteModel(); + $this->userModel = new UserModel(); } @@ -142,9 +145,11 @@ class SalesController extends BaseController ]); // 2. Handle follow-up if requested + $google_calender_response = []; if (!empty($data['schedule_followup']) && $data['schedule_followup'] === 'yes') { + $activity = $this->activityModel->find($id); - $this->activityModel->insert([ + $activity_data = [ 'lead_id' => $activity['lead_id'], 'activity_type' => $data['followup_type'], 'notes' => $data['followup_notes'], @@ -152,10 +157,14 @@ class SalesController extends BaseController 'assigned_to' => $activity['assigned_to'], 'status' => 'pending', 'created_by' => $this->getUserId() - ]); + ]; + $this->activityModel->insert($activity_data); + + // add google calender event + $google_calender_response = $this->addCalenderEvent($activity_data); } - return $this->respond(['status' => 'success', 'message' => 'Activity updated']); + return $this->respond(['status' => 'success', 'message' => 'Activity updated', 'google_calender_response' => $google_calender_response]); } catch (\Exception $e) { return $this->failServerError($e->getMessage()); } @@ -463,7 +472,8 @@ class SalesController extends BaseController 'total' => $result['total'], 'limit' => $limit, 'offset' => $offset - ]); + ], 200); + } catch (\Exception $e) { return $this->fail($e->getMessage(), ResponseInterface::HTTP_INTERNAL_SERVER_ERROR); } @@ -542,6 +552,9 @@ class SalesController extends BaseController if (!$this->activityModel->insert($data)) { return $this->fail($this->activityModel->errors(), ResponseInterface::HTTP_BAD_REQUEST); } + + // add google calender event + $response = $this->addCalenderEvent($data); $activityId = $this->activityModel->getInsertID(); $activity = $this->activityModel->find((int)$activityId); @@ -549,7 +562,8 @@ class SalesController extends BaseController return $this->respondCreated([ 'status' => 'success', 'message' => 'Activity created successfully', - 'data' => $activity + 'data' => $activity, + 'google_calender_response' => $response ]); } catch (\Exception $e) { return $this->fail($e->getMessage(), ResponseInterface::HTTP_INTERNAL_SERVER_ERROR); @@ -928,4 +942,84 @@ class SalesController extends BaseController return $achievedAmountData[0]['achieved_amount'] ?? 0.00; } + + public function addCalenderEvent($input) + { + try { + + log_message('error', '[GOOGLE_CALENDER] Calendar Event Input: ' . json_encode($input)); + + /* ---------------- VALIDATION ---------------- */ + + if (empty($input['lead_id']) || empty($input['assigned_to']) || empty($input['scheduled_date'])) { + log_message('error', '[GOOGLE_CALENDER] Calendar Event Missing Required Data'); + return [ + 'status' => false, + 'message' => 'Required data missing' + ]; + } + + /* ---------------- FETCH DATA ---------------- */ + + $lead_data = $this->leadModel + ->where('lead_id', $input['lead_id']) + ->first(); + + if (!$lead_data) { + log_message('error', '[GOOGLE_CALENDER] Lead Not Found: ' . $input['lead_id']); + return [ + 'status' => false, + 'message' => 'Lead not found' + ]; + } + + $user_data = $this->userModel + ->where('id', $input['assigned_to']) + ->first(); + + if (!$user_data) { + log_message('error', '[GOOGLE_CALENDER] User Not Found: ' . $input['assigned_to']); + return [ + 'status' => false, + 'message' => 'Assigned user not found' + ]; + } + + /* ---------------- SUMMARY ---------------- */ + + $summary = ucfirst($input['activity_type']) . + ' with ' . + $lead_data['company_name']; + + /* ---------------- GOOGLE PAYLOAD ---------------- */ + + $eventData = [ + 'summary' => $summary, + 'meeting_date' => $input['scheduled_date'], + 'description' => $input['notes'] ?? '', + 'emails' => [$user_data['email']], + ]; + + log_message('error', '[GOOGLE_CALENDER] Google Calendar Payload: ' . json_encode($eventData)); + + /* ---------------- API CALL ---------------- */ + + $response = add_google_calender_event($eventData); + + log_message('error', '[GOOGLE_CALENDER] Google Calendar Response: ' . json_encode($response)); + + return $response; + + } catch (\Throwable $e) { + + log_message('error', '[GOOGLE_CALENDER] Calendar Event Exception: ' . $e->getMessage()); + log_message('error', '[GOOGLE_CALENDER] Calendar Event Trace: ' . $e->getTraceAsString()); + + return [ + 'status' => false, + 'message' => 'Calendar event failed', + 'error' => $e->getMessage() + ]; + } + } } \ No newline at end of file