X7ROOT File Manager
Current Path:
/home/hamdjcne/app.hamdalillahitravel.com/app/Controllers
home
/
hamdjcne
/
app.hamdalillahitravel.com
/
app
/
Controllers
/
ðŸ“
..
📄
.DS_Store
(6 KB)
📄
Accounts.php
(52.25 KB)
📄
Activity.php
(4.49 KB)
📄
Analytics.php
(12.22 KB)
📄
Api.php
(41.41 KB)
📄
Auth.php
(34.64 KB)
📄
BaseController.php
(1.77 KB)
📄
Dashboard.php
(42.95 KB)
📄
Notification.php
(6.22 KB)
📄
Order.php
(118.16 KB)
📄
Service.php
(61.77 KB)
📄
Settings.php
(40.13 KB)
📄
Staff.php
(67.17 KB)
📄
Tour.php
(32.09 KB)
📄
Wallets.php
(43.15 KB)
📄
Webhook.php
(5.14 KB)
Editing: Service.php
<?php namespace App\Controllers; class Service extends BaseController { //////// Schedule //////// public function flight($param1='', $param2='', $param3='') { // check session login if($this->session->get('hdt_id') == ''){ $request_uri = uri_string(); $this->session->set('hdt_redirect', $request_uri); return redirect()->to(site_url('auth')); } $mod = 'service/flight'; $log_id = $this->session->get('hdt_id'); $switch_id = $this->session->get('switch_church_id'); $role_id = $this->Crud->read_field('id', $log_id, 'user', 'role_id'); $role = strtolower($this->Crud->read_field('id', $role_id, 'access_role', 'name')); $role_c = $this->Crud->module($role_id, $mod, 'create'); $role_r = $this->Crud->module($role_id, $mod, 'read'); $role_u = $this->Crud->module($role_id, $mod, 'update'); $role_d = $this->Crud->module($role_id, $mod, 'delete'); if($role_r == 0){ return redirect()->to(site_url('dashboard')); } $data['log_id'] = $log_id; $data['role'] = $role; $data['role_c'] = $role_c; $table = 'flight_request'; $form_link = site_url($mod); if($param1){$form_link .= '/'.$param1;} if($param2){$form_link .= '/'.$param2.'/';} if($param3){$form_link .= $param3;} // pass parameters to view $data['param1'] = $param1; $data['param2'] = $param2; $data['param3'] = $param3; $data['form_link'] = rtrim($form_link, '/'); $data['current_language'] = $this->session->get('current_language'); // manage record if($param1 == 'manage') { // prepare for delete if($param2 == 'delete') { if($param3) { $edit = $this->Crud->read_single('id', $param3, $table); //echo var_dump($edit); if(!empty($edit)) { foreach($edit as $e) { $data['d_id'] = $e->id; } } if($this->request->getMethod() == 'post'){ $del_id = $this->request->getVar('d_id'); $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by.' deleted Flight Request '; if($this->Crud->deletes('id', $del_id, $table) > 0) { $this->Crud->activity('flight_request', $del_id, $action); echo $this->Crud->msg('success', 'Flight Request Deleted'); echo '<script>location.reload(false);</script>'; } else { echo $this->Crud->msg('danger', 'Please try later'); } die; } } } else { $data['isEdit'] = ''; // prepare for edit if($param2 == 'edit') { if($param3) { $edit = $this->Crud->read_single('id', $param3, $table); $data['isEdit'] = isset($edit); if(!empty($edit)) { foreach($edit as $e) { $data['e_id'] = $e->id; $data['e_trip_type'] = $e->trip_type; $data['e_travel_class'] = $e->travel_class; $data['e_from_city'] = $e->from_city; $data['e_to_city'] = $e->to_city; $data['e_departure_date'] = $e->departure_date; $data['e_return_date'] = $e->return_date; $data['e_adults'] = $e->adults; $data['e_children'] = $e->children; $data['e_infants'] = $e->infants; if($e->booking_status) { $status = 'Approved'; } else { $status = $e->booking_status; } $data['e_status'] = $status; $data['e_reg_date'] = date('M d, Y h:i A', strtotime($e->reg_date)); } } } } // prepare for view if ($param2 == 'view') { if ($param3) { $edit = $this->Crud->read_single('id', $param3, $table); if (!empty($edit)) { foreach ($edit as $e) { $data['e_id'] = $e->id; $data['e_from_city'] = $e->from_city; $data['e_to_city'] = $e->to_city; $data['e_trip_type'] = $e->trip_type; $data['e_travel_class'] = $e->travel_class; $data['e_departure_date'] = $e->departure_date; $data['e_return_date'] = $e->return_date; $data['e_adults'] = $e->adults; $data['e_children'] = $e->children; $data['e_infants'] = $e->infants; $data['e_status'] = ucfirst($e->booking_status); $data['e_created_at'] = $e->reg_date; $data['e_updated_date'] = $e->updated_date; } } } } if ($this->request->getMethod() == 'post') { $booking_id = $this->request->getVar('booking_id'); // flight id if editing $from_city = $this->request->getVar('from_city'); $from_code = $this->request->getVar('from_airport_code'); $to_city = $this->request->getVar('to_city'); $to_code = $this->request->getVar('to_airport_code'); $trip_type = $this->request->getVar('trip_type'); $travel_class = $this->request->getVar('travel_class'); $departure_date = $this->request->getVar('departure_date'); $return_date = $this->request->getVar('return_date'); $adults = $this->request->getVar('adults'); $children = $this->request->getVar('children'); $infants = $this->request->getVar('infants'); $booking_status = $this->request->getVar('booking_status'); /// Build insert/update data $data = [ 'from_city' => $from_city, 'user_id' => $log_id, 'to_city' => $to_city, 'trip_type' => $trip_type, 'travel_class' => $travel_class, 'booking_status' => $booking_status, 'departure_date' => $departure_date, 'return_date' => !empty($return_date) ? $return_date : null, 'adults' => $adults, 'children' => $children, 'infants' => $infants, 'updated_date' => date('Y-m-d H:i:s'), ]; // Create or Update if (!empty($booking_id)) { $updated = $this->Crud->updates('id', $booking_id, $table, $data); if ($updated > 0) { // Activity Log $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by . ' updated a flight booking to ' . ucwords($to_city); $this->Crud->activity('flight', $booking_id, $action); echo $this->Crud->msg('success', 'Flight booking updated'); echo '<script>location.reload();</script>'; } else { echo $this->Crud->msg('info', 'No changes made'); } } else { $data['reg_date'] = date('Y-m-d H:i:s'); $inserted = $this->Crud->create($table, $data); if ($inserted > 0) { // Activity Log $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by . ' booked a flight to ' . ucwords($to_city); $this->Crud->activity('flight', $inserted, $action); echo $this->Crud->msg('success', 'Flight booking created'); echo '<script>location.reload();</script>'; } else { echo $this->Crud->msg('danger', 'Failed to book flight. Try again.'); } } die; } } } if ($param1 == 'load') { $limit = $param2; $offset = $param3; $rec_limit = 50; $item = ''; if (empty($limit)) { $limit = $rec_limit; } if (empty($offset)) { $offset = 0; } $status = $this->request->getPost('status') ?? ''; $search = $this->request->getPost('search'); $log_id = $this->session->get('hdt_id'); if (!$log_id) { $item = '<div class="text-center text-muted">Session Timeout! - Please login again</div>'; } else { $all_rec = $this->Crud->filter_flight('', '', $log_id, $status, $search); $counts = !empty($all_rec) ? count($all_rec) : 0; $query = $this->Crud->filter_flight($limit, $offset, $log_id, $status, $search); if (!empty($query)) { foreach ($query as $q) { $id = $q->id; $reg_date = date('M d, Y h:i A', strtotime($q->created_at ?? $q->reg_date)); $from_city = $q->from_city; $to_city = $q->to_city; $trip_type = $q->trip_type; $user = $this->Crud->read_field('id', $q->user_id, 'user', 'fullname'); $travel_class = $q->travel_class; $departure = date('Y-m-d', strtotime($q->departure_date)); $return = !empty($q->return_date) ? date('Y-m-d', strtotime($q->return_date)) : '-'; $status = $q->booking_status; $passenger_count = $q->adults + $q->children + $q->infants; // Status badge $status_badge = '<span class="badge bg-warning">Pending</span>'; if ($status === 'Confirmed') { $status_badge = '<span class="badge bg-success">Confirmed</span>'; } elseif ($status === 'Cancelled') { $status_badge = '<span class="badge bg-danger">Cancelled</span>'; } // Trip badge $trip_badge = '<span class="badge bg-info">' . $trip_type . '</span>'; // Buttons $all_btn = ' <a href="javascript:;" class="me-2 btn btn-icon btn-primary btn-active-color-light btn-sm" data-bs-toggle="tooltip" title="View Booking" onclick="ticket('.$id.')" > <i class="ki-outline ki-eye fs-2"></i> </a> '; $rt = '<td> <span class="text">Depart: ' . $departure . '<br>Return: ' . $return . '</span> </td>'; if($trip_type == 'One Way'){ $rt = '<td> <span class="text">Depart: ' . $departure . '</span> </td>'; } $item .= ' <tr> <td>'.$reg_date.'</td> <td>'.ucwords($user).'</td> <td> <div class="user-card"> <div class="user-name"> <span class="tb-lead" ' . $trip_badge . ' <span class="small text-muted">| ' . $travel_class . '</span> </div> </div> </td> <td> <div class="user-card"> <div class="user-name"> <span class="tb-lead">' . ucwords($from_city . ' to ' . $to_city) . '</span> </div> </div> </td> '.$rt.' <td> <span class="text">Passengers: ' . $passenger_count . '<br>' . $status_badge . '</span> </td> <td> <div class="d-flex justify-content-end flex-shrink-0">' . $all_btn . '</div> </td> </tr> '; } } } // echo $item; // Response setup if (empty($item)) { $resp['item'] = ' <tr> <td colspan="8"> <div class="text-center text-muted"> <br/><br/><br/> <i class="ki-outline ki-airplane" style="font-size:150px;"></i><br/><br/>' . translate_phrase('No Request Returned') . ' </div> </td> </tr> '; } else { $resp['item'] = $item; } $resp['count'] = $counts; $more_record = $counts - ($offset + $rec_limit); $resp['left'] = $more_record; if ($counts > ($offset + $rec_limit)) { $resp['limit'] = $rec_limit; $resp['offset'] = $offset + $limit; } else { $resp['limit'] = 0; $resp['offset'] = 0; } echo json_encode($resp); die; } if($param1 == 'manage') { // view for form data posting return view($mod.'_form', $data); } else { // view for main page $data['title'] = 'Flight Request - '.app_name; $data['page_active'] = $mod; return view($mod, $data); } } public function request($param1='', $param2='', $param3='') { // check session login if($this->session->get('hdt_id') == ''){ $request_uri = uri_string(); $this->session->set('hdt_redirect', $request_uri); return redirect()->to(site_url('auth')); } $mod = 'service/request'; $log_id = $this->session->get('hdt_id'); $switch_id = $this->session->get('switch_church_id'); $role_id = $this->Crud->read_field('id', $log_id, 'user', 'role_id'); $role = strtolower($this->Crud->read_field('id', $role_id, 'access_role', 'name')); $role_c = $this->Crud->module($role_id, $mod, 'create'); $role_r = $this->Crud->module($role_id, $mod, 'read'); $role_u = $this->Crud->module($role_id, $mod, 'update'); $role_d = $this->Crud->module($role_id, $mod, 'delete'); if($role_r == 0){ return redirect()->to(site_url('dashboard')); } $data['log_id'] = $log_id; $data['role'] = $role; $data['role_c'] = $role_c; $table = 'service_request'; $form_link = site_url($mod); if($param1){$form_link .= '/'.$param1;} if($param2){$form_link .= '/'.$param2.'/';} if($param3){$form_link .= $param3;} // pass parameters to view $data['param1'] = $param1; $data['param2'] = $param2; $data['param3'] = $param3; $data['form_link'] = rtrim($form_link, '/'); $data['current_language'] = $this->session->get('current_language'); // manage record if($param1 == 'manage') { // prepare for delete if($param2 == 'delete') { if($param3) { $edit = $this->Crud->read_single('id', $param3, $table); //echo var_dump($edit); if(!empty($edit)) { foreach($edit as $e) { $data['d_id'] = $e->id; } } if($this->request->getMethod() == 'post'){ $del_id = $this->request->getVar('d_id'); $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by.' deleted Flight Request '; if($this->Crud->deletes('id', $del_id, $table) > 0) { $this->Crud->activity('flight_request', $del_id, $action); echo $this->Crud->msg('success', 'Flight Request Deleted'); echo '<script>location.reload(false);</script>'; } else { echo $this->Crud->msg('danger', 'Please try later'); } die; } } } elseif ($param2 == 'view') { if ($param3) { $main = $this->Crud->read_single('id', $param3, $table); if (!empty($main)) { $data['request'] = $main[0]; // Fetch user info $data['user'] = $this->Crud->read_single('id', $main[0]->user_id, 'user')[0]; // Get service-specific record $service_type = strtolower($main[0]->service_type ?? ''); $service_id = $main[0]->service_id ?? 0; $data['service_type'] = ucwords($service_type); $data['service_details'] = null; switch ($service_type) { case 'flight': $req = $this->Crud->read_single('id', $service_id, 'fl_flight_request'); if ($req) { $req = $req[0]; $html = ' <h5 class="mt-4">Flight Booking Details</h5> <ul class="list-group mb-3"> <li class="list-group-item"><strong>From:</strong> ' . esc($req->from_city) . '</li> <li class="list-group-item"><strong>To:</strong> ' . esc($req->to_city) . '</li> <li class="list-group-item"><strong>Trip Type:</strong> ' . esc($req->trip_type) . '</li> <li class="list-group-item"><strong>Travel Class:</strong> ' . esc($req->travel_class) . '</li> <li class="list-group-item"><strong>Departure Date:</strong> ' . esc($req->departure_date) . '</li> <li class="list-group-item"><strong>Return Date:</strong> ' . esc($req->return_date) . '</li> <li class="list-group-item"><strong>Adults:</strong> ' . esc($req->adults) . '</li> <li class="list-group-item"><strong>Children:</strong> ' . esc($req->children) . '</li> <li class="list-group-item"><strong>Infants:</strong> ' . esc($req->infants) . '</li> <li class="list-group-item"><strong>Status:</strong> ' . esc($req->booking_status) . '</li> </ul>'; $data['service_html'] = $html; } break; case 'hotel': $req = $this->Crud->read_single('id', $service_id, 'fl_hotel_request'); if ($req) { $req= $req[0]; $html = ' <h5 class="mt-4">Hotel Booking Details</h5> <ul class="list-group mb-3"> <li class="list-group-item"><strong>City:</strong> ' . esc($req->city) . '</li> <li class="list-group-item"><strong>Country:</strong> ' . esc($req->country) . '</li> <li class="list-group-item"><strong>Check-In Date:</strong> ' . esc($req->check_in_date) . '</li> <li class="list-group-item"><strong>Check-Out Date:</strong> ' . esc($req->check_out_date) . '</li> <li class="list-group-item"><strong>Rooms:</strong> ' . esc($req->rooms) . '</li> <li class="list-group-item"><strong>Adults:</strong> ' . esc($req->adults) . '</li> <li class="list-group-item"><strong>Children:</strong> ' . esc($req->children) . '</li> <li class="list-group-item"><strong>Infants:</strong> ' . esc($req->infants) . '</li> <li class="list-group-item"><strong>Special Requests:</strong> ' . esc($req->special_requests) . '</li> </ul>'; $data['service_html'] = $html; } break; case 'hajj': $req = $this->Crud->read_single('id', $service_id, 'fl_hajj_request'); if ($req) { $req = $req[0]; $html = ' <h5 class="mt-4">Hajj Request Details</h5> <ul class="list-group mb-3"> <li class="list-group-item"><strong>Preferred Package:</strong> ' . esc($req->preferred_package) . '</li> <li class="list-group-item"><strong>Departure City:</strong> ' . esc($req->departure_city) . '</li> <li class="list-group-item"><strong>Travel Date:</strong> ' . esc($req->travel_date) . '</li> <li class="list-group-item"><strong>Passport Number:</strong> ' . esc($req->passport_number) . '</li> <li class="list-group-item"><strong>Nationality:</strong> ' . esc($req->nationality) . '</li> <li class="list-group-item"><strong>Emergency Contact:</strong> ' . esc($req->emergency_contact_name) . ' (' . esc($req->emergency_contact_relationship) . ') - ' . esc($req->emergency_contact_phone) . '</li> <li class="list-group-item"><strong>Medical Conditions:</strong> ' . esc($req->medical_conditions) . '</li> <li class="list-group-item"><strong>Special Assistance:</strong> ' . esc($req->special_assistance) . '</li> <li class="list-group-item"><strong>Passport Photo:</strong><br><img src="' . base_url($req->passport_photo) . '" class="img-fluid rounded shadow-sm mt-2" style="max-width:200px;"></li> </ul>'; $data['service_html'] = $html; } break; case 'tour': $tour_request = $this->Crud->read_single('tour_id', $service_id, 'fl_tour_request'); // Optional if needed $tour = $this->Crud->read_single('id', $service_id, 'fl_tours'); $itinerary = $this->Crud->read_single('tour_id', $service_id, 'fl_itinerary'); $tour_html = ''; if ($tour) { $tour = $tour[0]; $tour_html .= ' <h5 class="mt-4">Tour Details</h5> <ul class="list-group mb-3"> <li class="list-group-item"><strong>Title:</strong> ' . esc($tour->title) . '</li> <li class="list-group-item"><strong>Description:</strong> ' . esc($tour->description) . '</li> <li class="list-group-item"><strong>Location:</strong> ' . esc($tour->location) . '</li> <li class="list-group-item"><strong>Start Date:</strong> ' . esc($tour->start_date) . '</li> <li class="list-group-item"><strong>End Date:</strong> ' . esc($tour->end_date) . '</li> <li class="list-group-item"><strong>Tour Type:</strong> ' . esc($tour->tour_type) . '</li> <li class="list-group-item"><strong>Language:</strong> ' . esc($tour->language) . '</li> <li class="list-group-item"><strong>Group Size:</strong> ' . esc($tour->group_size) . '</li> <li class="list-group-item"><strong>Duration (Days):</strong> ' . esc($tour->duration_days) . '</li> <li class="list-group-item"><strong>Terms:</strong> ' . esc($tour->terms_conditions) . '</li> <li class="list-group-item"><strong>Payment Details:</strong> ' . esc($tour->payment_details) . '</li> <li class="list-group-item"><strong>Thumbnail:</strong><br><img src="' . base_url('uploads/tours/thumbnails/' . $tour->thumbnail_url) . '" class="img-fluid rounded shadow-sm mt-2" style="max-width:250px;"></li> </ul>'; } $itinerary_html = ''; if ($itinerary) { $itinerary_html .= '<h5 class="mt-4">Itinerary</h5><div class="accordion" id="itineraryAccordion">'; foreach ($itinerary as $item) { $itinerary_html .= ' <div class="accordion-item mb-2"> <h2 class="accordion-header" id="heading' . $item->id . '"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse' . $item->id . '" aria-expanded="false" aria-controls="collapse' . $item->id . '"> Day ' . esc($item->day_number) . ': ' . esc($item->title) . ' </button> </h2> <div id="collapse' . $item->id . '" class="accordion-collapse collapse" aria-labelledby="heading' . $item->id . '" data-bs-parent="#itineraryAccordion"> <div class="accordion-body"> <p>' . nl2br(esc($item->description)) . '</p> </div> </div> </div>'; } $itinerary_html .= '</div>'; } $data['service_html'] = $tour_html . $itinerary_html; break; default: $data['service_html'] = '<p class="text-muted">No view defined for this service type.</p>'; } } } } elseif($param2 == 'invoice_create'){ if ($param3) { $edit = $this->Crud->read_single('service_request_id', $param3, 'fl_invoices'); if (!empty($edit)) { $edit = $edit[0]; $data['id'] = $edit->id; $data['invoice_number'] = $edit->invoice_number; $data['amount'] = $edit->amount; $data['currency'] = $edit->currency; $data['payment_status'] = $edit->payment_status; $data['payment_method'] = $edit->payment_method; $data['due_date'] = $edit->due_date; $data['remark'] = $edit->remark; } else { $data['invoice_number'] = $this->generate_unique_invoice_number(); $data['amount'] = ''; $data['currency'] = 'NGN'; $data['payment_status'] = 'pending'; $data['payment_method'] = ''; $data['due_date'] = ''; $data['remark'] = ''; } $data['service_request_id'] = $param3; if ($this->request->getMethod() == 'post') { $save = [ 'service_request_id' => $this->request->getPost('service_request_id'), 'invoice_number' => $this->request->getPost('invoice_number'), 'amount' => $this->request->getPost('amount'), 'currency' => $this->request->getPost('currency'), 'payment_status' => $this->request->getPost('payment_status'), 'payment_method' => $this->request->getPost('payment_method'), 'due_date' => $this->request->getPost('due_date'), 'remark' => $this->request->getPost('remark'), ]; if (!empty($edit)) { $this->Crud->update('id', $edit->id, 'fl_invoices', $save); $msg = 'Invoice updated successfully.'; } else { $this->Crud->create('fl_invoices', $save); $msg = 'Invoice created successfully.'; } echo $this->Crud->msg('success', $msg); echo '<script>location.reload(false);</script>'; die; } } } elseif ($param2 == 'invoice_view') { if ($param3) { $invoice = $this->Crud->read_single('id', $param3, 'fl_invoices'); $request_id = $this->Crud->read_field('id', $param3, 'fl_invoices', 'service_request_id'); $request_type = $this->Crud->read_field('id', $request_id, 'service_request', 'service_type'); $user_id = $this->Crud->read_field('id', $request_id, 'service_request', 'user_id'); if ($invoice) { $invoice = $invoice[0]; $customer_name = $this->Crud->read_field('id', $user_id ?? 0, 'user', 'fullname'); $email = $this->Crud->read_field('id', $user_id ?? 0, 'user', 'email'); $html = '<div class="border p-4">'; $html .= '<h3 class="text-center mb-1">INVOICE</h3>'; $html .= '<p class="text-center text-muted">Invoice #: <strong>' . esc($invoice->invoice_number) . '</strong></p>'; $html .= '<div class="row mb-3"> <div class="col-sm-6"> <h5 class="text-uppercase">Billed To</h5> <p><b>' . esc($customer_name ?? 'N/A') . '</b><br> ' . esc($email ?? 'N/A') . '<br> Service Type: ' . ucfirst(esc($request_type)) . '<br> Request ID: ' . esc($param3) . '</p> </div> <div class="col-sm-6 text-end"> <h5 class="text-uppercase">Details</h5> <p>Amount: <strong>' . number_format($invoice->amount, 2) . ' ' . esc($invoice->currency) . '</strong><br> Status: <strong>' . ucfirst($invoice->payment_status) . '</strong><br> Method: ' . esc($invoice->payment_method ?? 'N/A') . '<br> Due Date: ' . esc($invoice->due_date ?? 'N/A') . '</p> </div> </div>'; $html .= '<hr>'; $html .= '<h6 class="text-uppercase">Notes</h6>'; $html .= '<p>' . nl2br(esc($invoice->remark ?? 'None')) . '</p>'; if ($invoice->payment_status != 'paid') { $html .= ''; } $html .= '</div>'; $data['invoice_html'] = $html; } else { $data['invoice_html'] = '<div class="alert alert-warning text-center">Invoice not found.</div>'; } } } elseif ($param2 == 'invoice_email') { if ($param3) { $invoice = $this->Crud->read_single('id', $param3, 'fl_invoices'); if($invoice){ $service_id = $this->Crud->read_field('id', $param3, 'fl_invoices','service_request_id'); $user_id = $this->Crud->read_field('id', $service_id, 'fl_service_request', 'user_id'); $service_type = $this->Crud->read_field('id', $service_id, 'fl_service_request', 'service_type'); $email = $this->Crud->read_field('id', $user_id, 'user', 'email'); $fullname = $this->Crud->read_field('id', $user_id, 'user', 'fullname'); $summary = ''; switch (strtolower($service_type)) { case 'flight': $r = $this->Crud->read_single('id', $service_id, 'fl_flight_request'); if ($r) { $summary = '<strong>Trip:</strong> ' . $r->from_location . ' to ' . $r->to_location . '<br><strong>Departure:</strong> ' . $r->departure_date; } break; case 'hotel': $r = $this->Crud->read_single('id', $service_id, 'fl_hotel_request'); if ($r) { $summary = '<strong>Hotel:</strong> ' . $r->hotel_name . '<br><strong>Check-In:</strong> ' . $r->checkin_date; } break; case 'hajj': $r = $this->Crud->read_single('id', $service_id, 'fl_hajj_request'); if ($r) { $r = $r[0]; $summary = '<strong>Hajj Package:</strong> ' . $r->preferred_package . '<br><strong>Departure:</strong> ' . $r->travel_date; } break; case 'tour': $r = $this->Crud->read_single('tour_id', $service_id, 'fl_tour_request'); $tour = $this->Crud->read_single('id', $service_id, 'fl_tours'); if ($r && $tour) { $summary = '<strong>Tour:</strong> ' . $tour->title . '<br><strong>Destination:</strong> ' . $tour->location; } break; } if ($invoice && $email) { $invoice = $invoice[0]; $pay_link = site_url('payment/pay_invoice/' . $param3); $message = ' <p>Dear ' . esc($fullname) . ',</p> <p>Please find your invoice <strong>#' . esc($invoice->invoice_number) . '</strong> below. Kindly review and complete your payment.</p> <p> <strong>Amount:</strong> ' .curr. number_format($invoice->amount, 2) . ' ' . esc($invoice->currency) . '<br> <strong>Status:</strong> ' . ucfirst(esc($invoice->payment_status)) . '<br> <strong>Due Date:</strong> ' . esc($invoice->due_date ?? '-') . ' </p> <p><strong>Service Summary:</strong><br>' . $summary . '</p> <p> <a href="' . $pay_link . '" style="display:inline-block;padding:10px 20px;background-color:#28a745;color:white;text-decoration:none;border-radius:5px;" target="_blank"> Click here to Pay Now </a> </p> <p><strong>Or copy this link:</strong><br> <code style="word-break:break-all;">' . $pay_link . '</code> </p> <p>Thank you for choosing us.</p> <p>Best regards,<br>'.app_name.'</p>'; $data['invoice_id'] = $param3; $data['email'] = $email; $data['name'] = $fullname; $data['invoice_number'] = $invoice->invoice_number; $data['preview'] = $message; } } if($this->request->getMethod() == 'post'){ $invoice_id = $this->request->getPost('invoice_id'); $email = $this->request->getPost('recipient_email'); $subject = $this->request->getPost('subject'); $invoice = $this->Crud->read_single('id', $invoice_id, 'fl_invoices'); $service_id = 0; $invoice = $invoice[0]; $service_id = $invoice->service_request_id; $user_id = $this->Crud->read_field('id', $service_id, 'fl_service_request', 'user_id'); $fullname = $this->Crud->read_field('id', $user_id, 'user', 'fullname'); $pay_link = site_url('payment/pay_invoice/' . $invoice_id); $summary = ''; switch (strtolower($service_type)) { case 'flight': $r = $this->Crud->read_single('id', $service_id, 'fl_flight_request'); if ($r) { $summary = '<strong>Trip:</strong> ' . $r->from_location . ' to ' . $r->to_location . '<br><strong>Departure:</strong> ' . $r->departure_date; } break; case 'hotel': $r = $this->Crud->read_single('id', $service_id, 'fl_hotel_request'); if ($r) { $summary = '<strong>Hotel:</strong> ' . $r->hotel_name . '<br><strong>Check-In:</strong> ' . $r->checkin_date; } break; case 'hajj': $r = $this->Crud->read_single('id', $service_id, 'fl_hajj_request'); if ($r) { $r = $r[0]; $summary = '<strong>Hajj Package:</strong> ' . $r->preferred_package . '<br><strong>Departure:</strong> ' . $r->travel_date; } break; case 'tour': $r = $this->Crud->read_single('tour_id', $service_id, 'fl_tour_request'); $tour = $this->Crud->read_single('id', $service_id, 'fl_tours'); if ($r && $tour) { $summary = '<strong>Tour:</strong> ' . $tour->title . '<br><strong>Destination:</strong> ' . $tour->location; } break; } $message = ' <p>Dear ' . esc($fullname) . ',</p> <p>Please find your invoice <strong>#' . esc($invoice->invoice_number) . '</strong> below. Kindly review and complete your payment.</p> <p> <strong>Amount:</strong> ' . number_format($invoice->amount, 2) . ' ' . esc($invoice->currency) . '<br> <strong>Status:</strong> ' . ucfirst(esc($invoice->payment_status)) . '<br> <strong>Due Date:</strong> ' . esc($invoice->due_date ?? '-') . ' </p> <p><strong>Service Summary:</strong><br>' . $summary . '</p> <p> <a href="' . $pay_link . '" style="display:inline-block;padding:10px 20px;background-color:#28a745;color:white;text-decoration:none;border-radius:5px;" target="_blank"> Click here to Pay Now </a> </p> <p>Thank you for choosing us.</p> <p>Best regards,<br>Your Company Name</p>'; $sent = $this->Crud->send_email($email, $subject, $message); if ($sent) { echo $this->Crud->msg('success', 'Invoice sent successfully to ' . $email); echo '<script>setTimeout(() => location.reload(), 1500);</script>'; } else { echo $this->Crud->msg('danger', 'Failed to send invoice. Please try again.'); } die; } } } elseif ($param2 == 'download_invoice_html') { $invoice = $this->Crud->read_single('id', $param3, 'fl_invoices'); $service_id = $invoice->service_request_id; $user_id = $this->Crud->read_field('id', $service_id, 'fl_requests', 'user_id'); $fullname = $this->Crud->read_field('id', $user_id, 'user', 'fullname'); header('Content-Type: text/html'); header('Content-Disposition: attachment; filename="invoice_' . $invoice->invoice_number . '.html"'); echo ' <h2>Invoice #' . esc($invoice->invoice_number) . '</h2> <p>Dear ' . esc($fullname) . ',</p> <p>Please find your invoice below.</p> <p><strong>Amount:</strong> ' . number_format($invoice->amount, 2) . ' ' . esc($invoice->currency) . '<br> <strong>Status:</strong> ' . ucfirst(esc($invoice->payment_status)) . '<br> <strong>Due Date:</strong> ' . esc($invoice->due_date ?? '-') . '</p> <p>Thank you!</p>'; die; } else { $data['isEdit'] = ''; // prepare for edit if($param2 == 'edit') { if($param3) { $edit = $this->Crud->read_single('id', $param3, $table); $data['isEdit'] = isset($edit); if(!empty($edit)) { foreach($edit as $e) { $data['e_id'] = $e->id; $data['e_trip_type'] = $e->trip_type; $data['e_travel_class'] = $e->travel_class; $data['e_from_city'] = $e->from_city; $data['e_to_city'] = $e->to_city; $data['e_departure_date'] = $e->departure_date; $data['e_return_date'] = $e->return_date; $data['e_adults'] = $e->adults; $data['e_children'] = $e->children; $data['e_infants'] = $e->infants; if($e->booking_status) { $status = 'Approved'; } else { $status = $e->booking_status; } $data['e_status'] = $status; $data['e_reg_date'] = date('M d, Y h:i A', strtotime($e->reg_date)); } } } } // prepare for view if ($param2 == 'view') { if ($param3) { $edit = $this->Crud->read_single('id', $param3, $table); if (!empty($edit)) { foreach ($edit as $e) { $data['e_id'] = $e->id; $data['e_from_city'] = $e->from_city; $data['e_to_city'] = $e->to_city; $data['e_trip_type'] = $e->trip_type; $data['e_travel_class'] = $e->travel_class; $data['e_departure_date'] = $e->departure_date; $data['e_return_date'] = $e->return_date; $data['e_adults'] = $e->adults; $data['e_children'] = $e->children; $data['e_infants'] = $e->infants; $data['e_status'] = ucfirst($e->booking_status); $data['e_created_at'] = $e->reg_date; $data['e_updated_date'] = $e->updated_date; } } } } if ($this->request->getMethod() == 'post') { $booking_id = $this->request->getVar('booking_id'); // flight id if editing $from_city = $this->request->getVar('from_city'); $from_code = $this->request->getVar('from_airport_code'); $to_city = $this->request->getVar('to_city'); $to_code = $this->request->getVar('to_airport_code'); $trip_type = $this->request->getVar('trip_type'); $travel_class = $this->request->getVar('travel_class'); $departure_date = $this->request->getVar('departure_date'); $return_date = $this->request->getVar('return_date'); $adults = $this->request->getVar('adults'); $children = $this->request->getVar('children'); $infants = $this->request->getVar('infants'); $booking_status = $this->request->getVar('booking_status'); /// Build insert/update data $data = [ 'from_city' => $from_city, 'user_id' => $log_id, 'to_city' => $to_city, 'trip_type' => $trip_type, 'travel_class' => $travel_class, 'booking_status' => $booking_status, 'departure_date' => $departure_date, 'return_date' => !empty($return_date) ? $return_date : null, 'adults' => $adults, 'children' => $children, 'infants' => $infants, 'updated_date' => date('Y-m-d H:i:s'), ]; // Create or Update if (!empty($booking_id)) { $updated = $this->Crud->updates('id', $booking_id, $table, $data); if ($updated > 0) { // Activity Log $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by . ' updated a flight booking to ' . ucwords($to_city); $this->Crud->activity('flight', $booking_id, $action); echo $this->Crud->msg('success', 'Flight booking updated'); echo '<script>location.reload();</script>'; } else { echo $this->Crud->msg('info', 'No changes made'); } } else { $data['reg_date'] = date('Y-m-d H:i:s'); $inserted = $this->Crud->create($table, $data); if ($inserted > 0) { // Activity Log $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by . ' booked a flight to ' . ucwords($to_city); $this->Crud->activity('flight', $inserted, $action); echo $this->Crud->msg('success', 'Flight booking created'); echo '<script>location.reload();</script>'; } else { echo $this->Crud->msg('danger', 'Failed to book flight. Try again.'); } } die; } } } if ($param1 == 'load') { $limit = $param2; $offset = $param3; $rec_limit = 50; $item = ''; if (empty($limit)) { $limit = $rec_limit; } if (empty($offset)) { $offset = 0; } $status = $this->request->getPost('status') ?? ''; $search = $this->request->getPost('search') ?? ''; $service_type = $this->request->getPost('service_type') ?? ''; $log_id = $this->session->get('hdt_id'); if (!$log_id) { $item = '<div class="text-center text-muted">Session Timeout! - Please login again</div>'; } else { // Count total records $all_rec = $this->Crud->filter_service_request('', '', $log_id, $status, $service_type, $search); $counts = !empty($all_rec) ? count($all_rec) : 0; // Get paginated records $query = $this->Crud->filter_service_request($limit, $offset, $log_id, $status, $service_type, $search); if (!empty($query)) { foreach ($query as $q) { $id = $q->id; $reg_date = date('M d, Y h:i A', strtotime($q->reg_date ?? now())); $request_date = date('M d, Y h:i A', strtotime($q->request_date)); $user = $this->Crud->read_field('id', $q->user_id, 'user', 'fullname'); $service_type_text = ucfirst($q->service_type); $status_text = ucfirst($q->status); $remarks = $q->remarks ?? '-'; // Status badge $status_badge = '<span class="badge bg-warning">Pending</span>'; if (stripos($status_text, 'confirmed') !== false) { $status_badge = '<span class="badge bg-success">Confirmed</span>'; } elseif (stripos($status_text, 'cancelled') !== false) { $status_badge = '<span class="badge bg-danger">Cancelled</span>'; } // Check if an invoice exists for the service request $invoice_id = $this->Crud->read_field('service_request_id', $id, 'invoices', 'id'); $action_btns = ' <a href="javascript:;" class="me-2 btn btn-icon btn-primary btn-sm pop" pageName="' . site_url('service/request/manage/view/' . $id) . '" pageTitle="Service Request Details" pageSize="modal-xl" title="View Service Request"> <i class="ki-outline ki-eye fs-2"></i> </a>'; if (!$invoice_id) { // If no invoice has been created $action_btns .= ' <a href="javascript:;" class="me-2 btn btn-icon btn-success btn-sm pop" pageName="' . site_url('service/request/manage/invoice_create/' . $id) . '" pageTitle="Create Invoice" pageSize="modal-lg" title="Create Invoice"> <i class="ki-outline ki-plus fs-2"></i> </a>'; } else { // If invoice exists, add View, Download, Send options $action_btns .= ' <a href="javascript:;" class="me-2 btn btn-icon btn-info btn-sm pop" pageName="' . site_url('service/request/manage/invoice_view/' . $invoice_id) . '" pageTitle="View Invoice" pageSize="modal-md" title="View Invoice"> <i class="ki-outline ki-document fs-2"></i> </a> <a href="javascript:;" class="btn btn-icon btn-warning btn-sm pop send-invoice-email" pageName="' . site_url('service/request/manage/invoice_email/' . $invoice_id) . '" pageTitle="Send Invoice to Email" pageSize="modal-md" title="Send Invoice to Email"> <i class="ki-outline ki-send fs-2"></i> </a>'; } $item .= ' <tr> <td>' . $reg_date . '</td> <td>' . ucwords($user) . '</td> <td>' . $service_type_text . '</td> <td>' . $request_date . '</td> <td>' . $remarks . '</td> <td>' . $status_badge . '</td> <td> <div class="d-flex justify-content-end flex-shrink-0"> ' . $action_btns . ' </div> </td> </tr> '; } } } // Response if (empty($item)) { $resp['item'] = ' <tr> <td colspan="7"> <div class="text-center text-muted"> <br/><br/><i class="ki-outline ki-folder" style="font-size:150px;"></i><br/><br/>No Service Request Found </div> </td> </tr> '; } else { $resp['item'] = $item; } $resp['count'] = $counts; $more_record = $counts - ($offset + $rec_limit); $resp['left'] = $more_record; if ($counts > ($offset + $rec_limit)) { $resp['limit'] = $rec_limit; $resp['offset'] = $offset + $limit; } else { $resp['limit'] = 0; $resp['offset'] = 0; } echo json_encode($resp); die; } if($param1 == 'manage') { // view for form data posting return view($mod.'_form', $data); } else { // view for main page $data['title'] = 'Service Requests - '.app_name; $data['page_active'] = $mod; return view($mod, $data); } } protected function generate_unique_invoice_number() { do { $code = 'INV-' . strtoupper(bin2hex(random_bytes(3))); $exists = $this->Crud->read_field('invoice_number', $code, 'fl_invoices', 'id'); } while ($exists); return $code; } public function hotel($param1='', $param2='', $param3='') { // check session login if($this->session->get('hdt_id') == ''){ $request_uri = uri_string(); $this->session->set('hdt_redirect', $request_uri); return redirect()->to(site_url('auth')); } $mod = 'service/hotel'; $log_id = $this->session->get('hdt_id'); $switch_id = $this->session->get('switch_church_id'); $role_id = $this->Crud->read_field('id', $log_id, 'user', 'role_id'); $role = strtolower($this->Crud->read_field('id', $role_id, 'access_role', 'name')); $role_c = $this->Crud->module($role_id, $mod, 'create'); $role_r = $this->Crud->module($role_id, $mod, 'read'); $role_u = $this->Crud->module($role_id, $mod, 'update'); $role_d = $this->Crud->module($role_id, $mod, 'delete'); if($role_r == 0){ return redirect()->to(site_url('dashboard')); } $data['log_id'] = $log_id; $data['role'] = $role; $data['role_c'] = $role_c; $table = 'hotel_request'; $form_link = site_url($mod); if($param1){$form_link .= '/'.$param1;} if($param2){$form_link .= '/'.$param2.'/';} if($param3){$form_link .= $param3;} // pass parameters to view $data['param1'] = $param1; $data['param2'] = $param2; $data['param3'] = $param3; $data['form_link'] = rtrim($form_link, '/'); $data['current_language'] = $this->session->get('current_language'); // manage record if($param1 == 'manage') { // prepare for delete if($param2 == 'delete') { if($param3) { $edit = $this->Crud->read_single('id', $param3, $table); //echo var_dump($edit); if(!empty($edit)) { foreach($edit as $e) { $data['d_id'] = $e->id; } } if($this->request->getMethod() == 'post'){ $del_id = $this->request->getVar('d_id'); $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by.' deleted Flight Request '; if($this->Crud->deletes('id', $del_id, $table) > 0) { $this->Crud->activity('flight_request', $del_id, $action); echo $this->Crud->msg('success', 'Flight Request Deleted'); echo '<script>location.reload(false);</script>'; } else { echo $this->Crud->msg('danger', 'Please try later'); } die; } } } else { $data['isEdit'] = ''; // prepare for edit if($param2 == 'edit') { if($param3) { $edit = $this->Crud->read_single('id', $param3, $table); $data['isEdit'] = isset($edit); if(!empty($edit)) { foreach($edit as $hotel) { $data = [ 'isEdit' => true, 'e_id' => $hotel->id, 'e_city' => $hotel->city, 'e_country' => $hotel->country, 'e_check_in_date' => $hotel->check_in_date, 'e_check_out_date' => $hotel->check_out_date, 'e_rooms' => $hotel->rooms, 'e_adults' => $hotel->adults, 'e_children' => $hotel->children, 'e_infants' => $hotel->infants, 'e_special_requests' => $hotel->special_requests, 'e_status' => $hotel->booking_status ]; } } } } // prepare for view if ($param2 == 'view') { if ($param3) { $edit = $this->Crud->read_single('id', $param3, $table); if (!empty($edit)) { foreach ($edit as $hotel) { $data = [ 'isEdit' => true, 'e_id' => $hotel->id, 'e_city' => $hotel->city, 'e_location' => $hotel->city.' '.$hotel->country, 'e_check_in_date' => $hotel->check_in_date, 'e_check_out_date' => $hotel->check_out_date, 'e_rooms' => $hotel->rooms, 'e_adults' => $hotel->adults, 'e_children' => $hotel->children, 'e_infants' => $hotel->infants, 'e_special_requests' => $hotel->special_requests, 'e_status' => $hotel->booking_status ]; $data['e_created_at'] = $hotel->reg_date; $data['e_updated_date'] = $hotel->updated_at; } } } } if ($this->request->getMethod() == 'post') { $booking_id = $this->request->getVar('booking_id'); $city = $this->request->getVar('city'); $country = $this->request->getVar('country'); $check_in_date = $this->request->getVar('check_in_date'); $check_out_date = $this->request->getVar('check_out_date'); $rooms = $this->request->getVar('rooms'); $adults = $this->request->getVar('adults'); $children = $this->request->getVar('children'); $infants = $this->request->getVar('infants'); $special_requests = $this->request->getVar('special_requests'); $booking_status = $this->request->getVar('booking_status') ?? 'Pending'; // Build data array $data = [ 'user_id' => $log_id, 'city' => $city, 'country' => $country, 'check_in_date' => $check_in_date, 'check_out_date' => $check_out_date, 'rooms' => $rooms, 'adults' => $adults, 'children' => $children, 'infants' => $infants, 'special_requests' => $special_requests, 'booking_status' => $booking_status, 'updated_at' => date('Y-m-d H:i:s'), ]; // Create or Update if (!empty($booking_id)) { $updated = $this->Crud->updates('id', $booking_id, $table, $data); if ($updated > 0) { $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by . ' updated a hotel booking at ' . ucwords($city); $this->Crud->activity('hotel', $booking_id, $action); echo $this->Crud->msg('success', 'Hotel Booking Request updated'); echo '<script>location.reload();</script>'; } else { echo $this->Crud->msg('info', 'No changes made'); } } else { $data['reg_date'] = date('Y-m-d H:i:s'); $inserted = $this->Crud->create($table, $data); if ($inserted > 0) { $by = $this->Crud->read_field('id', $log_id, 'user', 'fullname'); $action = $by . ' booked a hotel in ' . ucwords($city); $this->Crud->activity('hotel', $inserted, $action); echo $this->Crud->msg('success', 'Hotel Booking Request created'); echo '<script>location.reload();</script>'; } else { echo $this->Crud->msg('danger', 'Failed to book hotel. Try again.'); } } die; } } } if ($param1 == 'load') { $limit = $param2; $offset = $param3; $rec_limit = 50; $item = ''; if (empty($limit)) { $limit = $rec_limit; } if (empty($offset)) { $offset = 0; } $status = $this->request->getPost('status') ?? ''; $search = $this->request->getPost('search'); $log_id = $this->session->get('hdt_id'); if (!$log_id) { $item = '<div class="text-center text-muted">Session Timeout! - Please login again</div>'; } else { $all_rec = $this->Crud->filter_hotel('', '', $log_id, $status, $search); $counts = !empty($all_rec) ? count($all_rec) : 0; $query = $this->Crud->filter_hotel($limit, $offset, $log_id, $status, $search); if (!empty($query)) { foreach ($query as $q) { $id = $q->id; $reg_date = date('M d, Y h:i A', strtotime($q->created_at ?? $q->reg_date)); $user = $this->Crud->read_field('id', $q->user_id, 'user', 'fullname'); $city = $q->city; $country = $q->country; $check_in = date('Y-m-d', strtotime($q->check_in_date)); $check_out = date('Y-m-d', strtotime($q->check_out_date)); $status = $q->booking_status; $rooms = $q->rooms; $adults = $q->adults; $children = $q->children; $infants = $q->infants; $guests = $adults + $children + $infants; // Status badge $status_badge = '<span class="badge bg-warning">Pending</span>'; if ($status === 'Confirmed') { $status_badge = '<span class="badge bg-success">Confirmed</span>'; } elseif ($status === 'Cancelled') { $status_badge = '<span class="badge bg-danger">Cancelled</span>'; } // Action buttons $all_btn = ' <a href="javascript:;" class="me-2 btn btn-icon btn-primary btn-active-color-light btn-sm" data-bs-toggle="tooltip" title="View Booking" onclick="ticket('.$id.')" > <i class="ki-outline ki-eye fs-2"></i> </a> '; $item .= ' <tr> <td>' . $reg_date . '</td> <td>' . ucwords($user) . '</td> <td>' . ucwords($city . ', ' . $country) . '</td> <td> <span class="text">Check-in: ' . $check_in . '<br>Check-out: ' . $check_out . '</span> </td> <td> <span class="text">Rooms: ' . $rooms . '<br>Guests: ' . $guests . '<br>' . $status_badge . '</span> </td> <td> <div class="d-flex justify-content-end flex-shrink-0">' . $all_btn . '</div> </td> </tr> '; } } } // echo $item; // Response setup if (empty($item)) { $resp['item'] = ' <tr> <td colspan="8"> <div class="text-center text-muted"> <br/><br/><br/> <i class="ki-outline ki-cheque" style="font-size:150px;"></i><br/><br/>' . translate_phrase('No Request Returned') . ' </div> </td> </tr> '; } else { $resp['item'] = $item; } $resp['count'] = $counts; $more_record = $counts - ($offset + $rec_limit); $resp['left'] = $more_record; if ($counts > ($offset + $rec_limit)) { $resp['limit'] = $rec_limit; $resp['offset'] = $offset + $limit; } else { $resp['limit'] = 0; $resp['offset'] = 0; } echo json_encode($resp); die; } // pass parameters to view $data['param1'] = $param1; $data['param2'] = $param2; $data['param3'] = $param3; $data['form_link'] = rtrim($form_link, '/'); $data['current_language'] = $this->session->get('current_language'); if($param1 == 'manage') { // view for form data posting return view($mod.'_form', $data); } else { // view for main page $data['title'] = 'Hotel Booking Request - '.app_name; $data['page_active'] = $mod; return view($mod, $data); } } public function ticket($param1='', $param2=''){ if ($param1 == 'load') { $id = $this->request->getPost('id') ?? ''; $type = $this->request->getPost('type'); $log_id = $this->session->get('hdt_id'); $user_id = $this->Crud->read_field('id', $id, $type.'_request', 'user_id'); $reg_date = $this->Crud->read_field('id', $id, $type.'_request', 'reg_date'); $adults = $this->Crud->read_field('id', $id, $type.'_request', 'adults'); $children = $this->Crud->read_field('id', $id, $type.'_request', 'children'); $infants = $this->Crud->read_field('id', $id, $type.'_request', 'infants'); $user = $this->Crud->read_field('id', $user_id, 'user', 'fullname'); $timez = $this->Crud->timespan(strtotime($reg_date)); $regdate = date('d F Y, h:iA', strtotime($reg_date)); if ($type === 'hotel') { $city = $this->Crud->read_field('id', $id, $type.'_request', 'city'); $country = $this->Crud->read_field('id', $id, $type.'_request', 'country'); $rooms = $this->Crud->read_field('id', $id, $type.'_request', 'rooms'); $hotel_location = $city.' '.$country; $check_in_date = date('d F Y', strtotime($this->Crud->read_field('id', $id, $type.'_request', 'check_in_date'))); $check_out_date = date('d F Y', strtotime($this->Crud->read_field('id', $id, $type.'_request', 'check_out_date'))); $special_request = $this->Crud->read_field('id', $id, $type.'_request', 'special_requests'); // Hotel Request Sentence $summary = "{$user} requested a hotel booking service in {$hotel_location}, "; $summary .= "for {$rooms} room(s), "; $summary .= "with {$adults} adult(s), {$children} child(ren), and {$infants} infant(s), "; $summary .= "checking in on {$check_in_date} and checking out on {$check_out_date}."; if (!empty($special_request)) { $summary .= " Specially requesting {$special_request}."; } } elseif ($type === 'flight') { $from_city = $this->Crud->read_field('id', $id, $type.'_request', 'from_city'); $to_city = $this->Crud->read_field('id', $id, $type.'_request', 'to_city'); $trip_type = $this->Crud->read_field('id', $id, $type.'_request', 'trip_type'); $travel_class = $this->Crud->read_field('id', $id, $type.'_request', 'travel_class'); $departure_date = $this->Crud->read_field('id', $id, $type.'_request', 'departure_date'); // Flight Request Sentence $summary = "{$user} requested a flight booking service from {$from_city} to {$to_city}, "; $summary .= "for a {$trip_type} trip in {$travel_class} class, "; $summary .= "departing on {$departure_date}"; if (!empty($return_date)) { $summary .= " and returning on {$return_date}"; } $summary .= ". Travel party includes {$adults} adult(s), {$children} child(ren), and {$infants} infant(s)."; if (!empty($special_request)) { $summary .= " Specially requesting {$special_request}."; } } else { // Default fallback $summary = "{$user} submitted a travel service request. Please review the details."; } $header = ' <!--begin::Title--> <h1 class="text-gray-800 fw-semibold">'.strtoupper($type.' Booking Request'). '- 00'.$id.'</h1> <!--end::Title--> <!--begin::Info--> <div class=""> <!--begin::Label--> <span class="fw-semibold text-muted me-6">Service: <a href="#" class="text-muted text-hover-primary">'.ucwords($type).'</a></span> <!--end::Label--> <!--begin::Label--> <span class="fw-semibold text-muted me-6">By: <a href="javascript:;" class="text-muted text-hover-primary">'.ucwords($user).'</a></span> <!--end::Label--> <!--begin::Label--> <span class="fw-semibold text-muted">Created: <span class="fw-bold text-gray-600 me-1">'.$timez.'</span>('.$regdate.')</span> <!--end::Label--> </div> <!--end::Info--> '; $body = ' <!--begin::Description--> <div class="mb-15 fs-5 fw-normal text-gray-800"> <!--begin::Text--> <div class="mb-5 fs-5">Hello,</div> <!--end::Text--> <!--begin::Text--> <div class="mb-10"> '.$summary.' </div> </div> <!--end::Description--> <!--begin::Input group--> <div class="mb-0"> <textarea class="form-control form-control-solid placeholder-gray-600 fw-bold fs-4 ps-9 pt-7" rows="6" name="message" id="ticket_message_'.$id.'" placeholder="Type Response"></textarea> <!--begin::Submit--> <button type="button" data-id="'.$id.'" data-type="'.$type.'" class="btn btn-primary mt-n20 mb-20 position-relative float-end me-7 message_btn">Send</button> <!--end::Submit--> </div> <!-- Response Message (hidden initially) --> <div id="message_response_'.$id.'" class="mt-3 text-success fw-semibold" style="display: none;"></div> '; $resp['header'] = $header; $resp['body'] = $body; echo json_encode($resp); die; } if ($param1 == 'get_message') { $id = $this->request->getPost('ticket_id'); $type = $this->request->getPost('type'); $query = $this->Crud->read2('request_type', $type, 'request_id', $id, 'request_message'); $item = ''; if (!empty($query)) { foreach ($query as $q) { $id = $q->id; $reg_date = date('M d, Y h:i A', strtotime($q->created_at ?? $q->reg_date)); $user = $this->Crud->read_field('id', $q->user_id, 'user', 'fullname'); $user_type = $q->user_type; $message = $q->message; $img = $this->Crud->image_name($user); $timeago = $this->Crud->timespan(strtotime($q->reg_date)); $item .= ' <div class="mb-9"> <!--begin::Card--> <div class="card card-bordered w-100"> <!--begin::Body--> <div class="card-body"> <!--begin::Wrapper--> <div class="w-100 d-flex flex-stack mb-8"> <!--begin::Container--> <div class="d-flex align-items-center f"> <!--begin::Author--> <div class="symbol symbol-50px me-5"> <div class="symbol-label fs-1 fw-bold bg-light-success text-success"> '.$img.' </div> </div> <!--end::Author--> <!--begin::Info--> <div class="d-flex flex-column fw-semibold fs-5 text-gray-600 text-gray-900"> <!--begin::Text--> <div class="d-flex align-items-center"> <!--begin::Username--> <a href="javascript:;" class="text-gray-800 fw-bold text-hover-primary fs-5 me-3">'.ucwords($user).'</a> <!--end::Username--> <span class="m-0"></span> </div> <!--end::Text--> <!--begin::Date--> <span class="text-muted fw-semibold fs-6">'.$timeago.'</span> <!--end::Date--> </div> <!--end::Info--> </div> </div> <!--end::Wrapper--> <!--begin::Desc--> <p class="fw-normal fs-5 text-gray-700 m-0"> '.ucwords($q->message).' </p> <!--end::Desc--> </div> <!--end::Body--> </div> <!--end::Card--> </div> '; } } // echo $item; // Response setup if (empty($item)) { $resp['item'] = ' <div class="text-center text-muted"> <br/><br/><br/> <i class="ki-outline ki-message-notif" style="font-size:150px;"></i><br/><br/>' . translate_phrase('No Message Returned') . ' </div> '; } else { $resp['item'] = $item; } echo json_encode($resp); die; } $log_id = $this->session->get('hdt_id'); if ($param1 == 'message'){ $request_id = $this->request->getPost('ticket_id'); $request_type = $this->request->getPost('type'); $message = $this->request->getPost('message'); $is_member = $this->Crud->read_field('id', $log_id, 'user', 'is_member'); $user_type = ($is_member > 0) ? 'Member' : 'Admin'; $ins = [ 'user_id' => $log_id, 'user_type' => $user_type, 'request_id'=> $request_id, 'request_type' => $request_type, 'message' => $message, 'reg_date'=> date(fdate) ]; $ins_rec = $this->Crud->create('request_message', $ins); if ($ins_rec > 0) { $notify_template = [ 'from_id' => $log_id, 'item' => $request_type, 'item_id' => $request_id, 'content' => 'New message on request #' . $request_id, 'new' => 1, 'reg_date' => date(fdate) ]; if ($user_type == 'Member') { // Notify all admins and developers $admin_role_id = $this->Crud->read_field('name', 'Administrator', 'access_role', 'id'); $dev_role_id = $this->Crud->read_field('name', 'Developer', 'access_role', 'id'); $db = db_connect(); $admins = $db->table('user') ->whereIn('role_id', [$admin_role_id, $dev_role_id]) ->get()->getResult(); foreach ($admins as $admin) { $notify = $notify_template; $notify['to_id'] = $admin->id; $this->Crud->create('notify', $notify); } } else { // Notify the user who made the request $to_id = $this->Crud->read_field('id', $request_id, 'request_message', 'user_id'); if ($to_id) { $notify = $notify_template; $notify['to_id'] = $to_id; $this->Crud->create('notify', $notify); } } } die; } } }
Upload File
Create Folder