session = session(); $this->ServiceModel = new ServiceModel(); $this->TemplateModel = new TemplateModel(); $this->StaffModel = new StaffModel(); $this->ClientDocsModel = new ClientDocsModel(); $this->ClientModel = new ClientModel(); $this->BusinessModel = new BusinessModel(); $this->BranchModel = new BranchModel(); $this->ServiceGroupModel = new ServiceGroupModel(); $this->ClientBranchModel = new ClientBranchModel(); $this->DocsStatusModel = new DocsStatusModel(); } public function service_group_list() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $data['serviceGroupList'] = $this->ServiceGroupModel->select('service_group.* , COUNT(services.service_id) as service_count') ->join('services', 'service_group.service_group_id = services.service_group_id', 'left') ->where('service_group.business_id',$this->session->get('logged_in_staff_business_id')) ->groupBy('service_group.service_group_id') ->findAll(); $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('service_group_list',$data); echo view('layout/footer'); } public function service_group_create() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } if($this->request->getmethod() == 'POST') { $serviceGroupData = $this->request->getVar(); if( isset($serviceGroupData['service_group_id']) ){ $this->ServiceGroupModel->where('service_group_id', $this->request->getVar('service_group_id') )->set($serviceGroupData)->update(); }else{ $serviceGroupData = $this->request->getVar(); $serviceGroupData['business_id'] = $this->session->get('logged_in_staff_business_id'); $serviceGroupData['branch_id'] = $this->session->get('logged_in_staff_branch_id'); $this->ServiceGroupModel->insert($serviceGroupData); } return redirect()->to(base_url()."service_group_list"); } } public function service_group_edit() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $service_group_id = $this->request->getVar('service_group_id'); $data = $this->ServiceGroupModel->where('service_group_id',$service_group_id)->get()->getRow(); return $this->response->setJSON(['success' => true , 'data' =>$data]); } public function service_list() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $data['serviceList'] = $this->ServiceModel->select('services.* , service_group.group_name ,COUNT(template.template_id) as template_count') ->join('template', 'services.service_id = template.service_id', 'left') ->join('service_group', 'services.service_group_id = service_group.service_group_id', 'left') ->where('services.branch_id',$this->session->get('logged_in_staff_branch_id')) ->groupBy('services.service_id') ->orderBy('services.service_group_id') ->findAll(); $data['serviceGroupData'] = $this->ServiceGroupModel->where('is_active',1)->findall(); $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('service_list',$data); echo view('layout/footer'); } public function service_create() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } if($this->request->getmethod() == 'POST') { $serviceData = $this->request->getVar(); if( isset($serviceData['service_id']) ){ $this->ServiceModel->where('service_id', $this->request->getVar('service_id') )->set($serviceData)->update(); }else{ $serviceData = $this->request->getVar(); $serviceData['branch_id'] = $this->session->get('logged_in_staff_branch_id'); $this->ServiceModel->insert($serviceData); } return redirect()->to(base_url()."service_list"); }else{ $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('service_form'); echo view('layout/footer'); } } public function service_edit() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $service_id = $this->request->getVar('service_id'); $data = $this->ServiceModel->where('service_id',$service_id)->get()->getRow(); return $this->response->setJSON(['success' => true , 'data' =>$data]); } public function template_list() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $data['templateData'] = $this->TemplateModel->select('template.* , services.service_name , service_group.group_name') ->join('services', 'services.service_id = template.service_id', 'left') ->join('service_group', 'template.service_group_id = service_group.service_group_id', 'left') ->findAll(); $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('template_list',$data); echo view('layout/footer'); } public function template_create() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } if($this->request->getmethod() == 'POST') { $templateData = $this->request->getVar(); if($this->request->getVar('template_id') != 'null'){ $id = $this->request->getVar('template_id'); unset($templateData['template_id']); $this->TemplateModel->where('template_id', $id )->set($templateData)->update(); return $this->response->setJSON(['success' => true , 'service_id' =>$this->request->getVar('service_id')]); }else{ unset($templateData['template_id']); $this->TemplateModel->insert($templateData); return $this->response->setJSON(['success' => true , 'service_id' =>$this->request->getVar('service_id')]); } }else{ $id = $this->request->getVar('service_id'); $data['AllServiceGroupData'] = $this->ServiceGroupModel->findAll(); $data['AllBusinessData'] = $this->BusinessModel->findAll(); $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('template_form',$data); echo view('layout/footer'); } } public function template_edit() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $id = $this->request->getVar('template_id'); $data['templateData'] = $this->TemplateModel->where('md5(template_id)',$id)->get()->getRow(); $data['serviceData'] = $this->ServiceModel->where('service_id',$data['templateData']->service_id)->get()->getRow(); $data['AllServiceData'] = $this->ServiceModel->where('branch_id',$this->session->get('logged_in_staff_branch_id'))->findAll(); $data['serviceGroupData'] = $this->ServiceGroupModel->where('service_group_id',$data['templateData']->service_group_id)->get()->getRow(); $data['AllServiceGroupData'] = $this->ServiceGroupModel->where('branch_id',$this->session->get('logged_in_staff_branch_id'))->findAll(); $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('template_form',$data); echo view('layout/footer'); } public function template_preview() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $id = $this->request->getVar('template_id'); $data['templateData'] = $this->TemplateModel->where('md5(template_id)',$id)->get()->getRow(); $data['serviceData'] = $this->ServiceModel->where('service_id',$data['templateData']->service_id)->get()->getRow(); $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); $data['body_html'] = $data['templateData']->body_html; // echo view('layout/header', ['Data'=>$staffdata]); echo view('template_preview',$data); // echo view('layout/footer'); } public function shared_docs_list() { if(!$this->session->has('is_staff_logged_in')){ return redirect()->to(base_url().'staff'); } $data['doc_list'] = $this->ClientDocsModel->select('client_docs.* , services.service_name , service_group.group_name , client_branch.name as client_branch_name , client.name as client_name') ->join('template', 'template.template_id = client_docs.template_id', 'left') ->join('services', 'services.service_id = template.service_id', 'left') ->join('service_group', 'service_group.service_group_id = template.service_group_id', 'left') ->join('client_branch', 'client_branch.id = client_docs.client_branch_id', 'left') ->join('client', 'client.client_id = client_branch.client_id', 'left') ->orderBy('client_docs.id','DESC') ->findAll(); $data['clientdata'] = $this->ClientBranchModel->select('client.name as client_name , client_branch.name as client_branch_name , client_branch.id as client_branch_id') ->join('client', 'client_branch.client_id = client.client_id', 'left') ->where('client.business_id',$this->session->get('logged_in_staff_business_id')) ->findAll(); $data['serviceGroupData'] = $this->ServiceGroupModel->findAll(); // print_r($data['doc_list']);die; $staffdata = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); echo view('layout/header', ['Data'=>$staffdata]); echo view('share_docs',$data); echo view('layout/footer'); } public function get_service_data() { $service_group_id = $this->request->getVar('service_group_id'); $result = $this->ServiceModel->where('service_group_id',$service_group_id)->findAll(); return $this->response->setJSON(['count'=>count($result) , 'data'=>$result ]); } public function get_templates() { $result = $this->TemplateModel->where('service_id',$this->request->getVar('service_id'))->findAll(); return $this->response->setJSON(['count'=>count($result) , 'data'=>$result ]); } public function create_docs() { $docData = $this->request->getVar(); $docData['created_by'] = $this->session->has('is_staff_logged_in'); $docData['body_html'] = $this->TemplateModel->where('template_id',$this->request->getVar('template_id'))->get()->getRow()->body_html; $insert = $this->ClientDocsModel->insert($docData); if($insert){ $data['client_docs_id'] = $insert; $data['is_staff'] = 1; $data['created_by'] = $this->session->get('is_staff_logged_in'); $data['status'] = 'Created'; $this->DocsStatusModel->insert($data); echo true; } else { echo false; } } public function client_docs_preview() { if($this->session->has('is_staff_logged_in')){ $userData = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); }else if($this->session->has('is_client_logged_in')){ $userData = $this->ClientBranchModel->where('id',$this->session->get('is_client_logged_in'))->get()->getRow(); } $doc_id = $this->request->getVar('doc_id'); $data['docData'] = $this->ClientDocsModel->docPreview($doc_id); $data['clientData'] = $this->ClientBranchModel->select('client.* , client_branch.*') ->join('client', 'client_branch.client_id = client.client_id', 'left') ->where('client_branch.id',$data['docData']->client_branch_id)->get()->getRow(); $data['body_html'] = $data['docData']->body_html; foreach ($data['clientData'] as $key => $value) { $placeHolder = '%'.$key.'%'; $data['body_html'] = str_replace($placeHolder,$value,$data['body_html']); } echo view('layout/header', ['Data'=>$userData]); echo view('client_docs_preview',$data); echo view('layout/footer'); } public function client_docs_histroy($doc_id) { if($this->session->has('is_staff_logged_in')){ $userData = $this->StaffModel->where('staff_id',$this->session->get('is_staff_logged_in'))->get()->getRow(); }else if($this->session->has('is_client_logged_in')){ $userData = $this->ClientBranchModel->where('id',$this->session->get('is_client_logged_in'))->get()->getRow(); } $data['docData'] = $this->ClientDocsModel->docPreview($doc_id); // Fetch the document history $clientDocHistory = $this->DocsStatusModel->select('*') ->where('client_docs_id', $doc_id) ->get() ->getResult(); // Initialize an array to store the augmented results $augmentedHistory = []; foreach ($clientDocHistory as $history) { if ($history->is_staff == 1) { // Fetch staff details $staffDetails = $this->StaffModel->select('name, email') // Adjust the columns as needed ->where('staff_id', $history->created_by) ->get() ->getRow(); $history->creator_details = $staffDetails; $history->creator_type = 'staff'; } else { // Fetch client details $clientDetails = $this->ClientBranchModel->select('name, email') // Adjust the columns as needed ->where('id', $history->created_by) ->get() ->getRow(); $history->creator_details = $clientDetails; $history->creator_type = 'client'; } // Add the augmented history to the array $augmentedHistory[] = $history; } // Assign the augmented history to the data array $data['client_doc_history'] = $augmentedHistory; // Debug output // echo "
";
        // print_r($data['client_doc_history']);
        // die;
        return json_encode($data);
        
        // echo view('layout/header', ['Data'=>$userData]);
        // echo view('doc_history',$data);
        // echo view('layout/footer');
            
    }

    
    public function change_doc_status()
    {
        try {
            $doc_id = $this->request->getPost('doc_id');
            $is_active = $this->request->getPost('is_active'); 
            $data = [
                'is_active' => $is_active
            ];
            if($is_active == 1){
                $MailHelper = new MailHelper();

                $clientData =  $this->ClientDocsModel->select('client.name , client_branch.email')
                                    ->join('client_branch', 'client_docs.client_branch_id = client_branch.id', 'left')
                                    ->join('client', 'client_branch.client_id = client.client_id', 'left')
                                    ->where('client_docs.id', $doc_id)->get()->getRow();

                $url = 'Click here';

                $businessData = $this->BranchModel->select('branches.* , business.business_name ')
                                                    ->join('business', 'branches.business_id = business.business_id', 'left')
                                                    ->where('branches.branch_id',$this->session->get('logged_in_staff_branch_id'))
                                                    ->get()->getRow();
    
                $MailHelper->send_url_email($clientData->email , $url , $clientData->name , $businessData->business_name, $businessData->email);

                $statusData['client_docs_id'] = $doc_id;
                $statusData['is_staff'] = 1;
                $statusData['created_by'] = $this->session->get('is_staff_logged_in');
                $statusData['status'] = 'Shared';
                $this->DocsStatusModel->insert($statusData);
            }else{
                $statusData['client_docs_id'] = $doc_id;
                $statusData['is_staff'] = 1;
                $statusData['created_by'] = $this->session->get('is_staff_logged_in');
                $statusData['status'] = 'Revert';
                $this->DocsStatusModel->insert($statusData);
            }
        
            $updated = $this->ClientDocsModel->update($doc_id, $data);

            if ($updated) {
                return $this->response->setJSON(['status' => 'success','code' => 200,'data' => true],200);
            } else {
                $result = "No Match's";
                return $this->response->setJSON(['status' => 'failed','code' => 404,'data' => $result],404);
            }
        } catch (\Exception $exception) {
            return $this->response->setJSON(['status' => 'failed','code' => 500,'data' => $exception],500);
       }
    }
    

    public function doc_generate_otp()
    {
        try {
            $mobile_no = $this->request->getPost('mobile_no');

            $client_data = $this->ClientBranchModel->where('mobile_no', $mobile_no )->first();


            if($client_data){

                $id =  $this->request->getPost('doc_id');
                $data = [
                    'otp' => '123456',
                ];
                $update = $this->ClientDocsModel->update($id, $data);

                if($update){
                    return json_encode(true);
                }
            } else {
                return false;
            }
        } catch (\Exception $e) {
            // Handle any exceptions that occur during execution
            return $this->response->setJSON(['status' => 'error', 'code' => 500, 'message' => $e->getMessage()], 500);
        }
    }
    
    
    public function doc_verify_otp()
    {
        try {
            $id = $this->request->getPost('doc_id');
            $otp = $this->request->getPost('otp');
            
            $client_doc_data = $this->ClientDocsModel->where('id', $id )->where('otp', $otp)->first();
            $data = ['otp' =>'' ,'rejection_reason' =>''];

            if($client_doc_data){

                $data['is_approved'] = $this->request->getPost('is_approved');
                $data['ip_address'] = $this->request->getPost('clientIp');

                $update = $this->ClientDocsModel->update($id , $data);

                if($this->session->has('is_client_logged_in')){ 
                    $logged_user =  $this->session->get('is_client_logged_in'); 
                    $statusData['is_staff'] = 0;
                }else{
                    $logged_user =  $this->session->get('is_staff_logged_in'); 
                    $statusData['is_staff'] = 1;
                }
                $statusData['client_docs_id'] = $id;
                $statusData['created_by'] = $logged_user;
                $statusData['status'] = 'Approved';
                $statusData['note'] = $this->request->getPost('clientIp');
                $this->DocsStatusModel->insert($statusData);

                if($update){
                    return json_encode(true);
                }
            } else {


                return json_encode('');
            }
        } catch (\Exception $e) {
            // Handle any exceptions that occur during execution
            return $this->response->setJSON(['status' => 'error', 'code' => 500, 'message' => $e->getMessage()], 500);
        }
    }




    public function status_service()
    {
        try {
            $service_id = $this->request->getPost('service_id');
            $is_active = $this->request->getPost('is_active'); 
            $data = ['is_active' => $is_active];
        
            $updated = $this->ServiceModel->update($service_id, $data);
            if ($updated) {
                return $this->respond(['status' => 'success','code' => 200,'data' => true],200);
            } else {
                $result = "No Match's";
                return $this->respond(['status' => 'failed','code' => 404,'data' => $result],404);
            }
        } catch (\Exception $exception) {
            return $this->respond(['status' => 'failed','code' => 500,'data' => $exception],500);
        }
    }


    public function download_doc(){
        if ($this->request->getMethod() === 'POST') {
            // Get the HTML content from the POST request
            $htmlContent = $this->request->getPost('htmlContent');

            try {
                // Create new PDF document
                $mpdf = new Mpdf();
                $mpdf->WriteHTML($htmlContent);

                // Output PDF to a string
                $pdfContent = $mpdf->Output('', 'S');

                // Encode PDF content to base64
                $base64Pdf = base64_encode($pdfContent);
                // print_r("hello");die;

                // Set response headers
                return $this->respond(['pdf' => $base64Pdf], 200);
            } catch (\Exception $e) {
                // Log error
                log_message('error', 'Error generating PDF: ' . $e->getMessage());
                return $this->failServerError('Error generating PDF');
            }
        } else {
            return $this->fail('Invalid request method', 405);
        }
    }


}