middleware('auth'); $this->_service = 'contact'; $this->_module = 'contact'; $this->_viewname = 'contact'; $this->_title = 'Paramedics Enrolled'; $this->_base_url = '/contact'; $this->_listtype = 'ajaxlist'; $this->_allcourses = []; $this->_parents = []; } public function ajaxlist(Request $request) { $params = $request->input(); $user = Auth::user(); $permissions = json_decode($user->permissions); if (in_array('all_data_access', $permissions)) { // $contacts = DB::table("lms_users") // ->join("lms_courses_completion", "lms_users.contact_id", "=", "lms_courses_completion.contact_id") // ->select("lms_users.contact_id","lms_users.name","lms_users.phone","lms_users.email","lms_users.rep_name","lms_users.employee_code","lms_users.city", // "state","lms_users.english_article_count","lms_users.english_quiz_count","lms_users.hindi_article_count","lms_users.hindi_quiz_count", "lms_courses_completion.created_date as latest_date") // ->skip($params['start']) // ->take($params['length']); // if(isset($params['search']['value']) && $params['search']['value'] != '') { // $contacts->whereRaw("MATCH(name,phone,email,rep_name,employee_code)AGAINST('".$params['search']['value']."' IN BOOLEAN MODE)"); // } // $contacts = $contacts->get(); $latest_dates = DB::table('lms_courses_completion') ->select('contact_id', DB::raw('MAX(created_date) as latest_date')) ->groupBy('contact_id'); $contacts = DB::table('lms_users') ->leftJoinSub($latest_dates, 'latest_dates', function ($join) { $join->on('lms_users.contact_id', '=', 'latest_dates.contact_id'); }) ->select( "lms_users.contact_id", "lms_users.name", "lms_users.phone", "lms_users.email", "lms_users.rep_name", "lms_users.employee_code", "lms_users.city", "state", "lms_users.english_article_count", "lms_users.english_quiz_count", "lms_users.hindi_article_count", "lms_users.hindi_quiz_count", "latest_dates.latest_date" ) ->skip($params['start']) ->take($params['length']); if (isset($params['search']['value']) && $params['search']['value'] != '') { $contacts->whereRaw("MATCH(name,phone,email,rep_name,employee_code)AGAINST('" . $params['search']['value'] . "' IN BOOLEAN MODE)"); } $contacts = $contacts->get(); $count = DB::table("lms_users")->select(DB::raw("count(*) as count"))->first(); } else { $contacts = DB::table("lms_users")->where('parents', 'like', '%' . $user->hierarchy_id . '%')->orWhere('user_id', $user->user_id)->select("contact_id", "name", "phone", "email", "rep_name", "employee_code", "city", "state", "english_article_count", "english_quiz_count", "hindi_article_count", "hindi_quiz_count")->skip($params['start'])->take($params['length'])->get(); $count = DB::table("lms_users")->where('parents', 'like', '%' . $user->hierarchy_id . '%')->orWhere('user_id', $user->user_id)->select(DB::raw("count(*) as count"))->first(); } // echo "
";
        // print_r($contacts);
        // exit;

        // if(in_array('all_data_access',$permissions)) {
        //     $contacts = DB::table("lms_users as u")->select("u.contact_id","u.name","u.phone","u.email","u.rep_name","u.employee_code","u.city","u.state","u.english_article_count","u.english_quiz_count","u.hindi_article_count","u.hindi_quiz_count","r.is_sent")->skip($params['start'])->take($params['length'])
        //         ->leftjoin("raphiwa_send as r", "u.phone", "r.to");
        //     if(isset($params['search']['value']) && $params['search']['value'] != '') {
        //         $contacts->whereRaw("MATCH(u.name,u.phone,u.email,u.rep_name,u.employee_code)AGAINST('".$params['search']['value']."' IN BOOLEAN MODE)");
        //     }
        //     $contacts = $contacts->get();
        // $count = DB::table("lms_users")->select(DB::raw("count(*) as count"))->first();
        // } else {
        //     $contacts = DB::table("lms_users as u")->where('u.parents', 'like', '%'.$user->hierarchy_id.'%')->orWhere('u.user_id', $user->user_id)->select("u.contact_id","u.name","u.phone","u.email","u.rep_name","u.employee_code","u.city","u.state","u.english_article_count","u.english_quiz_count","u.hindi_article_count","u.hindi_quiz_count","r.is_sent")->skip($params['start'])->take($params['length'])->leftjoin("raphiwa_send as r", "r.to", "u.phone")->get();
        //     $count = DB::table("lms_users")->where('parents', 'like', '%'.$user->hierarchy_id.'%')->orWhere('user_id', $user->user_id)->select(DB::raw("count(*) as count"))->first();
        // }

        // if(in_array('all_data_access',$permissions)) {
        //     $contacts = DB::table("lms_users as u")->select("u.contact_id","u.name","u.phone","u.email","u.rep_name","u.employee_code","u.city","u.state","u.english_article_count","u.english_quiz_count","u.hindi_article_count","u.hindi_quiz_count","r.is_sent")->skip($params['start'])->take($params['length'])
        //         ->leftjoin("raphiwa_send as r", "u.phone", "r.to");
        //     if(isset($params['search']['value']) && $params['search']['value'] != '') {
        //         $contacts->whereRaw("MATCH(u.name,u.phone,u.email,u.rep_name,u.employee_code)AGAINST('".$params['search']['value']."' IN BOOLEAN MODE)");
        //     }
        //     $contacts = $contacts->get();
        //     $count = DB::table("lms_users")->select(DB::raw("count(*) as count"))->first();
        // } else {
        //     $contacts = DB::table("lms_users as u")->where('u.parents', 'like', '%'.$user->hierarchy_id.'%')->orWhere('u.user_id', $user->user_id)->select("u.contact_id","u.name","u.phone","u.email","u.rep_name","u.employee_code","u.city","u.state","u.english_article_count","u.english_quiz_count","u.hindi_article_count","u.hindi_quiz_count","r.is_sent")->skip($params['start'])->take($params['length'])->leftjoin("raphiwa_send as r", "r.to", "u.phone")->get();
        //     $count = DB::table("lms_users")->where('parents', 'like', '%'.$user->hierarchy_id.'%')->orWhere('user_id', $user->user_id)->select(DB::raw("count(*) as count"))->first();
        // }

        // $depts = DB::table("hierarchy_departments")->select("name", "employee_code", "sub_department_3")->get();
        // $sdepts = [];
        // foreach($depts as $dept) {
        //     $sdepts[$dept->employee_code] = $dept->sub_department_3;
        // }

        // $conts = [];
        // foreach($contacts as $contact) {
        //     $conts[$contact->contact_id] = $contact;
        // }

        // $conts = array_values($conts);

        // foreach($conts as &$contact) {
        //     $contact->english_completed_status =  $contact->english_quiz_count >= 3 ? 'Completed' : 'Not Completed';
        //     $contact->hindi_completed_status =  $contact->hindi_quiz_count >= 3 ? 'Completed' : 'Not Completed';

        //     $contact->actions = [];
        //     $contact->actions[] = ['link' => '/edit?id='.$contact->contact_id, 'icon' => 'square-edit-outline text-warning'];
        //     $contact->actions[] = ['link' => '/delete?id='.$contact->contact_id, 'icon' => 'delete text-danger'];
        //     $contact->team_name = isset($sdepts[$contact->employee_code]) ? $sdepts[$contact->employee_code] : '-';
        // }

        $depts = DB::table("hierarchy_departments")->select("name", "employee_code", "sub_department_3")->get();
        $sdepts = [];
        foreach ($depts as $dept) {
            $sdepts[$dept->employee_code] = $dept->sub_department_3;
        }

        foreach ($contacts as &$contact) {
            $contact->english_completed_status =  $contact->english_quiz_count >= 3 ? 'Completed' : 'Not Completed';
            $contact->hindi_completed_status =  $contact->hindi_quiz_count >= 3 ? 'Completed' : 'Not Completed';

            $contact->actions = [];
            $contact->actions[] = ['link' => '/edit?id=' . $contact->contact_id, 'icon' => 'square-edit-outline text-warning'];
            $contact->actions[] = ['link' => '/delete?id=' . $contact->contact_id, 'icon' => 'delete text-danger'];
            $contact->team_name = isset($sdepts[$contact->employee_code]) ? $sdepts[$contact->employee_code] : '-';
        }



        return response()->json(['data' => $contacts, 'iTotalRecords' => $count->count, 'iTotalDisplayRecords' => $count->count]);







        $search = ['type' => 'lmsuser'];
        foreach ($params['columns'] as $col) {
            if ($col['search']['value'] != '') {
                $search[$col['data']] = $col['search']['value'];
            }
        }
        $fields = $this->get_list_fields();
        $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module . '/get_all', ['start' => $params['start'], 'length' => $params['length'], 'search' => json_encode($search), 'keyword' => $params['search']['value'], 'source' => 'dynamodb', 'belowme' => true, 'fields' => json_encode(['city', 'state', 'is_verified', 'article_count', 'completed_article_count', 'user_info'])]);
        //echo '
'; print_r($response); exit;
        //Log::debug(print_r($response, true));
        $depts = DB::table("hierarchy_departments")->select("name", "employee_code", "sub_department_3")->get();
        $sdepts = [];
        foreach ($depts as $dept) {
            $sdepts[$dept->employee_code] = $dept->sub_department_3;
        }

        $article_counts = DB::table("lms_courses_completion")->select("contact_id", "course_id", DB::raw("count(article_id) as article_count"))->groupBy("contact_id", "course_id")->get();
        $article_counts_arr = [];
        foreach ($article_counts as $ac) {
            $article_counts_arr[$ac->contact_id . '_' . $ac->course_id] = $ac->article_count;
        }

        //Log::debug(json_encode(['start' => $params['start'], 'length' => $params['length'], 'search' => json_encode($search), 'keyword' => $params['search']['value'], 'belowme' => true, 'fields' => json_encode(['city','state','is_verified','article_count','completed_article_count'])  ]));
        // Log::debug(print_r(['start' => $params['start'], 'length' => $params['length'], 'search' => json_encode($search), 'keyword' => $params['search']['value']  ], true));
        $users = [];
        foreach ($response->data->items as $item) {
            $user = [];
            foreach ($fields as $field => $props) {
                if ($field != 'actions') {
                    switch ($props['type']) {
                        case ('image'):
                            $user[$field] = ' ';
                            break;
                        case ('text'):
                        case ('select'):
                            $user[$field] = isset($item->{$field}) ? $item->{$field} : '';
                            break;
                        case ('date'):
                            $user[$field] = date("d M Y", strtotime($item->{$field}));
                            break;
                    }
                } else {
                    $user['actions'] = [];
                    foreach ($props['buttons'] as $key => $button) {
                        switch ($button) {
                            case 'edit':
                                $user['actions'][] = ['link' => '/edit?id=' . $item->id, 'icon' => 'square-edit-outline text-warning'];
                                break;
                            case 'delete':
                                $user['actions'][] = ['link' => '/delete?id=' . $item->id, 'icon' => 'delete text-danger'];
                                break;
                            default:
                                $querystring = $button['querystring'];
                                foreach ((array)$item as $k => $v) {
                                    if (strpos($querystring, '{' . strtoupper($k) . '}') !== false)
                                        $querystring = str_replace('{' . strtoupper($k) . '}', $v, $querystring);
                                }
                                $user['actions'][] = ['link' => '/' . $key . '?' . $querystring, 'icon' => $button['icon']];
                                break;
                        }
                    }
                }
            }

            $user['english_completed_articles'] = isset($article_counts_arr[$item->id . '_1692237077-7be9a215-dae1-4af0-9350-d336ea54176f']) ? $article_counts_arr[$item->id . '_1692237077-7be9a215-dae1-4af0-9350-d336ea54176f'] : 0;
            $user['hindi_completed_articles'] = isset($article_counts_arr[$item->id . '_1692263655-25749640-2bfb-476c-9116-cbc9aa958335']) ? $article_counts_arr[$item->id . '_1692263655-25749640-2bfb-476c-9116-cbc9aa958335'] : 0;

            $user['english_completed_status'] =  $user['english_completed_articles'] >= 3 ? 'Completed' : 'Not Completed';
            $user['hindi_completed_status'] =  $user['hindi_completed_articles'] >= 3 ? 'Completed' : 'Not Completed';




            // $user['completed_vs_total'] = (isset($item->article_count) ? $item->article_count : '-') . ' / ' . (isset($item->completed_article_count) ? $item->completed_article_count : '-');
            // $user['is_completed'] = ((isset($item->article_count) ? $item->article_count : 0) == (isset($item->completed_article_count) ? $item->completed_article_count : 0) && (isset($item->article_count) ? $item->article_count : 0) > 0 && (isset($item->completed_article_count) ? $item->completed_article_count : 0)) ? 'Completed' : 'Not Completed';

            $user['rep_name'] = isset($item->user_info) && isset($item->user_info->name) ? $item->user_info->name : '-';
            $user['employee_code'] = isset($item->user_info) && isset($item->user_info->employee_code) ? $item->user_info->employee_code : '-';
            $user['team_name'] = isset($sdepts[$user['employee_code']]) ? $sdepts[$user['employee_code']] : '-';

            $users[] = $user;
        }
        if (!isset($response->data->count)) {
            $response->data->count = sizeof($response->data->items);
        }
        return response()->json(['data' => $users, 'iTotalRecords' => $response->data->count, 'iTotalDisplayRecords' => $response->data->count]);
    }


    public function list(Request $request)
    {
        $fields = $this->get_list_fields();
        return $this->view($this->_listtype)->with([
            'title' => $this->_title,
            'fields' => $fields,
            'base_url' => $this->_base_url,
            //'items' => $response->data->items,
            'buttons' => $this->get_list_buttons()
        ]);
    }

    protected function get_list_buttons()
    {
        // return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ], ['title' => 'Import Users', 'link' => $this->_base_url.'/import'] ];
        return [['title' => 'Export', 'link' => $this->_base_url . '/export']];
    }

    protected function get_import_fields($records)
    {
        $response = LambdaRequest::signedrequest('get', 'contact', 'contactattribute/get_all');
        $hierar = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
        $hierar_dd = [];
        foreach ($hierar->data->items as $hier) {
            $hierar_dd[$hier->code] = $hier->name . ' (' . $hier->code . ')';
        }

        //echo '
'; print_r($response); exit;
        $fields = [
            'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
            'email' => ['title' => 'Email', 'type' => 'email', 'required' => true],
            'phone' => ['title' => 'Phone', 'type' => 'text', 'required' => true],
            'msl_code' => ['title' => 'MSL Code', 'type' => 'text'],
            'position' => ['title' => 'Position', 'type' => 'select', 'required' => true, 'values' => $hierar_dd],
            'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
        ];

        foreach ($response->data->items as $item) {
            $values = [];
            if (in_array($item->type, ['select', 'radio', 'checkbox'])) {
                foreach ($item->options as $op) {
                    $values[$op->value] = $op->display;
                }
            }
            $fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required == 'yes' ? true : false, 'values' => $values];
        }

        return $fields;
    }

    // public function list(Request $request) {
    //     $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all');
    //     //echo '
'; print_r($items); exit;
    //     $items = [];
    //     foreach ($response->data->items as $item) {
    //         $item->position = $item->hierarchy_info->code;
    //         unset($item->hierarchy_info);
    //         $items[] = $item;
    //     }

    //     $fields = $this->get_list_fields();
    //     return $this->view('list')->with([
    //         'title' => $this->_title,
    //         'fields' => $fields,
    //         'base_url' => $this->_base_url,
    //         'items' => $items,
    //         'buttons' => $this->get_list_buttons()
    //     ]);
    // }

    protected function get_list_fields()
    {
        return [
            'actions' => ['title' => 'Actions', 'buttons' => ['edit', 'delete']],
            'name' => ['title' => 'Name', 'type' => 'text'],
            'phone' => ['title' => 'Phone', 'type' => 'text'],
            'email' => ['title' => 'Email', 'type' => 'text'],
            'rep_name' => ['title' => 'Rep Name', 'type' => 'text'],
            'employee_code' => ['title' => 'Employee Code', 'type' => 'text'],
            'team_name' => ['title' => 'Team Name', 'type' => 'text'],

            'city' => ['title' => 'City', 'type' => 'text'],
            'state' => ['title' => 'State', 'type' => 'text'],
            // 'completed_vs_total' => ['title' => 'Completed / Total', 'type' => 'text'],
            // 'is_completed' => ['title' => 'Course Status', 'type' => 'text'],
            'english_article_count' => ['title' => 'English Completed Articles', 'type' => 'text'],
            'english_quiz_count' => ['title' => 'English Completed Quiz', 'type' => 'text'],
            'english_completed_status' => ['title' => 'English Course Status', 'type' => 'text'],

            'hindi_article_count' => ['title' => 'Hindi Completed Articles', 'type' => 'text'],
            'hindi_quiz_count' => ['title' => 'Hindi Completed Quiz', 'type' => 'text'],
            'hindi_completed_status' => ['title' => 'Hindi Course Status', 'type' => 'text'],
            'latest_date' => ['title' => 'Course Completion Date', 'type' => 'text'],

            //'status' => ['title' => 'Status', 'type' => 'select'],
            //'is_verified' => ['title' => 'Is Verified', 'type' => 'select'],
        ];
    }

    protected function get_form_fields($type, $values)
    {
        $response = LambdaRequest::signedrequest('get', 'contact', 'contactattribute/get_all');
        $hierar = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
        $hierar_dd = [];
        foreach ($hierar->data->items as $hier) {
            $hierar_dd[$hier->code] = $hier->name . ' (' . $hier->code . ')';
        }

        //echo '
'; print_r($response); exit;
        $fields = [
            'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
            'email' => ['title' => 'Email', 'type' => 'email', 'required' => true],
            'phone' => ['title' => 'Phone', 'type' => 'text', 'required' => true],
            'msl_code' => ['title' => 'MSL Code', 'type' => 'text', 'required' => true],
            'position' => ['title' => 'Position', 'type' => 'select', 'required' => true, 'values' => $hierar_dd],
            'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
        ];

        foreach ($response->data->items as $item) {
            $values = [];
            if (in_array($item->type, ['select', 'radio', 'checkbox'])) {
                foreach ($item->options as $op) {
                    $values[$op->value] = $op->display;
                }
            }
            $fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required == 'yes' ? true : false, 'values' => $values];
        }

        return $fields;
    }

    protected function _beforesave($type, $request)
    {
        $data = $request->except('_token');
        $data['entity_id'] = $request->session()->get('entity_id');
        $options = [];
        if (isset($data['option_value'])) {
            foreach ($data['option_value'] as $k => $ov) {
                $options[] = ['value' => $ov, 'display' => $data['option_name'][$k]];
            }
            $data['options'] = $options;
            unset($data['option_value']);
            unset($data['option_name']);
        }
        return $data;
    }

    public function editall(Request $request)
    {
        $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module . '/get_my_contacts');
        //echo '
'; print_r($response); exit;
        $fields = $this->get_list_fields();
        return $this->view('editall')->with([
            'title' => $this->_title,
            'fields' => $response->data->attributes,
            'base_url' => $this->_base_url,
            'items' => $response->data->items
        ]);
    }

    public function export(Request $request)
    {
        $user = Auth::user();
        $permissions = json_decode($user->permissions);

        if (in_array('all_data_access', $permissions)) {
            // $contacts = DB::table("lms_users")->select("contact_id", "name", "phone", "email", "rep_name", "employee_code", "city", "state", "english_article_count", "english_quiz_count", "hindi_article_count", "hindi_quiz_count", "clinic_institute_name")->get();
            $latest_dates = DB::table('lms_courses_completion')
                ->select('contact_id', DB::raw('MAX(created_date) as latest_date'))
                ->groupBy('contact_id');

            $contacts = DB::table('lms_users')
                ->leftJoinSub($latest_dates, 'latest_dates', function ($join) {
                    $join->on('lms_users.contact_id', '=', 'latest_dates.contact_id');
                })

                ->select(
                    "lms_users.contact_id",
                    "lms_users.name",
                    "lms_users.phone",
                    "lms_users.email",
                    "lms_users.rep_name",
                    "lms_users.employee_code",
                    "lms_users.city",
                    "lms_users.state",
                    "lms_users.english_article_count",
                    "lms_users.english_quiz_count",
                    "lms_users.hindi_article_count",
                    "lms_users.hindi_quiz_count",
                    "latest_dates.latest_date",
                    "lms_users.clinic_institute_name"
                );

            $contacts = $contacts->get();
        } else {
            $contacts = DB::table("lms_users")->where('parents', 'like', '%' . $user->hierarchy_id . '%')->orWhere('user_id', $user->user_id)->select("contact_id", "name", "phone", "email", "rep_name", "employee_code", "city", "state", "english_article_count", "english_quiz_count", "hindi_article_count", "hindi_quiz_count", "clinic_institute_name")->get();
        }

        $depts = DB::table("hierarchy_departments")->select("name", "employee_code", "sub_department_3")->get();
        $sdepts = [];
        foreach ($depts as $dept) {
            $sdepts[$dept->employee_code] = $dept->sub_department_3;
        }

        foreach ($contacts as &$contact) {
            $contact->english_completed_status =  $contact->english_quiz_count >= 3 ? 'Completed' : 'Not Completed';
            $contact->hindi_completed_status =  $contact->hindi_quiz_count >= 3 ? 'Completed' : 'Not Completed';
            $contact->team_name = isset($sdepts[$contact->employee_code]) ? $sdepts[$contact->employee_code] : '-';
        }

        $headers = ['ID', 'Name', 'Phone', 'Email', 'Rep Name', 'Employee Code', 'Team Name', 'City', 'State', 'Clinic Institute Name', 'English Completed Articles', 'English Completed Quiz', 'English Course Status', 'Hindi Completed Articles', 'Hindi Completed Quiz', 'Hindi Course Status', 'Completion Date'];
        $exceldata[] = $headers;
        foreach ($contacts as $user) {
            $row = [];
            $row[] = isset($user->contact_id) ? $user->contact_id : '-';
            $row[] = isset($user->name) ? $user->name : '-';
            $row[] = isset($user->phone) ? $user->phone : '-';
            $row[] = isset($user->email) ? $user->email : '-';
            $row[] = isset($user->rep_name) ? $user->rep_name : '-';
            $row[] = isset($user->employee_code) ? $user->employee_code : '-';
            $row[] = isset($user->team_name) ? $user->team_name : '-';

            $row[] = isset($user->city) ? $user->city : '-';
            $row[] = isset($user->state) ? $user->state : '-';
            $row[] = isset($user->clinic_institute_name) ? $user->clinic_institute_name : '-';

            $row[] = isset($user->english_article_count) ? $user->english_article_count : '-';
            $row[] = isset($user->english_quiz_count) ? $user->english_quiz_count : '-';
            $row[] = isset($user->english_completed_status) ? $user->english_completed_status : '-';

            $row[] = isset($user->hindi_article_count) ? $user->hindi_article_count : '-';
            $row[] = isset($user->hindi_quiz_count) ? $user->hindi_quiz_count : '-';
            $row[] = isset($user->hindi_completed_status) ? $user->hindi_completed_status : '-';
            // $row[] = isset($user->status) ? $user->status : '-';

            if (isset($user->latest_date)) {
                $utcDate = new DateTime($user->latest_date, new DateTimeZone('UTC'));
                $utcDate->setTimezone(new DateTimeZone('Asia/Kolkata'));
                $formattedDate = $utcDate->format('Y-m-d g:i A'); 
                $row[] = $formattedDate;
            } else {
                $row[] = '-';
            }


            $exceldata[] = $row;
        }

        return Excel::download(new InvoicesExport($exceldata), 'Paramedics.xlsx');





        $search = ['type' => 'lmsuser'];
        $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module . '/get_all', ['search' => json_encode($search), 'source' => 'dynamodb', 'belowme' => true, 'fields' => json_encode(['city', 'state', 'is_verified', 'article_count', 'completed_article_count', 'user_info', 'clinic_institute_name'])]);
        //echo '
'; print_r($response); exit;
        //Log::debug(print_r($response, true));
        $depts = DB::table("hierarchy_departments")->select("name", "employee_code", "sub_department_3")->get();
        $sdepts = [];
        foreach ($depts as $dept) {
            $sdepts[$dept->employee_code] = $dept->sub_department_3;
        }

        $article_counts = DB::table("lms_courses_completion")->select("contact_id", "course_id", DB::raw("count(article_id) as article_count"))->groupBy("contact_id", "course_id")->get();
        $article_counts_arr = [];
        foreach ($article_counts as $ac) {
            $article_counts_arr[$ac->contact_id . '_' . $ac->course_id] = $ac->article_count;
        }

        //Log::debug(json_encode(['start' => $params['start'], 'length' => $params['length'], 'search' => json_encode($search), 'keyword' => $params['search']['value'], 'belowme' => true, 'fields' => json_encode(['city','state','is_verified','article_count','completed_article_count'])  ]));
        // Log::debug(print_r(['start' => $params['start'], 'length' => $params['length'], 'search' => json_encode($search), 'keyword' => $params['search']['value']  ], true));
        $users = [];
        foreach ($response->data->items as $item) {
            $user = (array)$item;
            // $user['completed_vs_total'] = (isset($item->article_count) ? $item->article_count : '-') . ' / ' . (isset($item->completed_article_count) ? $item->completed_article_count : '-');
            // $user['is_completed'] = ((isset($item->article_count) ? $item->article_count : 0) == (isset($item->completed_article_count) ? $item->completed_article_count : 0) && (isset($item->article_count) ? $item->article_count : 0) > 0 && (isset($item->completed_article_count) ? $item->completed_article_count : 0)) ? 'Completed' : 'Not Completed';

            $user['english_completed_articles'] = isset($article_counts_arr[$item->id . '_1692237077-7be9a215-dae1-4af0-9350-d336ea54176f']) ? $article_counts_arr[$item->id . '_1692237077-7be9a215-dae1-4af0-9350-d336ea54176f'] : 0;
            $user['hindi_completed_articles'] = isset($article_counts_arr[$item->id . '_1692263655-25749640-2bfb-476c-9116-cbc9aa958335']) ? $article_counts_arr[$item->id . '_1692263655-25749640-2bfb-476c-9116-cbc9aa958335'] : 0;

            $user['english_completed_status'] =  $user['english_completed_articles'] >= 3 ? 'Completed' : 'Not Completed';
            $user['hindi_completed_status'] =  $user['hindi_completed_articles'] >= 3 ? 'Completed' : 'Not Completed';

            $user['rep_name'] = isset($item->user_info) && isset($item->user_info->name) ? $item->user_info->name : '-';
            $user['employee_code'] = isset($item->user_info) && isset($item->user_info->employee_code) ? $item->user_info->employee_code : '-';
            $user['team_name'] = isset($sdepts[$user['employee_code']]) ? $sdepts[$user['employee_code']] : '-';

            $users[] = (object)$user;
        }

        //echo '
';print_r($users); exit;

        $headers = ['ID', 'Name', 'Phone', 'Email', 'Rep Name', 'Employee Code', 'Team Name', 'City', 'State', 'Clinic Institute Name', 'English Completed Articles', 'English Course Status', 'Hindi Completed Articles', 'Hindi Course Status', 'Status'];
        $exceldata[] = $headers;
        foreach ($users as $user) {
            $row = [];
            $row[] = isset($user->id) ? $user->id : '-';
            $row[] = isset($user->name) ? $user->name : '-';
            $row[] = isset($user->phone) ? $user->phone : '-';
            $row[] = isset($user->email) ? $user->email : '-';
            $row[] = isset($user->rep_name) ? $user->rep_name : '-';
            $row[] = isset($user->employee_code) ? $user->employee_code : '-';
            $row[] = isset($user->team_name) ? $user->team_name : '-';

            $row[] = isset($user->city) ? $user->city : '-';
            $row[] = isset($user->state) ? $user->state : '-';
            $row[] = isset($user->clinic_institute_name) ? $user->clinic_institute_name : '-';


            $row[] = isset($user->english_completed_articles) ? $user->english_completed_articles : '-';
            $row[] = isset($user->english_completed_status) ? $user->english_completed_status : '-';

            $row[] = isset($user->hindi_completed_articles) ? $user->hindi_completed_articles : '-';
            $row[] = isset($user->hindi_completed_status) ? $user->hindi_completed_status : '-';

            $row[] = isset($user->status) ? $user->status : '-';
            $exceldata[] = $row;
        }

        return Excel::download(new InvoicesExport($exceldata), 'Paramedics.xlsx');
    }

    public function sendwhatsapp(Request $request)
    {
        $contact_id = $request->input('id', 0);
        $force = $request->input('force', 0);
        $record = DB::table("lms_users")->where('contact_id', $contact_id)->first();

        if (!DB::table("raphiwa_send")->where("contact_id", $record->contact_id)->exists() || $force) {
            $rsdata = [
                'to' => $record->phone,
                'text' => json_encode(['countryCode' => '+91', 'phoneNumber' => $record->phone, 'callbackData' => rand(10000, 99999) . '-' . $record->contact_id, 'type' => 'Template', 'template' => ['name' => 'paramedic_course_registration_success', 'languageCode' => 'en', 'bodyValues' => [$record->name, $record->contact_id]]]),
                'is_sent' => 0,
                'session_id' => 0,
                'contact_id' => $record->contact_id,
                'status' => 1
            ];
            DB::table("raphiwa_send")->insert($rsdata);
            return redirect($this->_base_url . 's')->withMessage('Successfully Sent Link Message to ' . $record->name . ' on ' . $record->phone . ' !!!');
        } else {
            $sent = DB::table("raphiwa_send")->where("contact_id", $record->contact_id)->latest('created_at')->first();
            return redirect($this->_base_url . 's')->withError('Message NOT Sent to ' . $record->name . ' because its already sent on ' . date("d M Y, h:iA", strtotime($sent->created_at) + 19800));
        }
    }

    // public function postimport(Request $request) {
    //     if( $request->file('importfile') ) {
    //         $path = $request->file('importfile')->store('user_import');
    //         $request->session()->put('user_import_path', $path);

    //         $csv = Reader::createFromPath(storage_path('app') .'/' . $path, 'r');
    //         $csv->setHeaderOffset(0);

    //         $header = $csv->getHeader(); //returns the CSV header record
    //         $records = $csv->getRecords(); //returns all the CSV records as an Iterator 
    //         $contacts = [];
    //          echo '
';
    //         foreach($records as $record) {
    //             $contacts[] = (array)$record;
    //         }

    //         $created = 0;
    //         $updated = 0;
    //         $count = 0;
    //         $total = sizeof($contacts);

    //         while($count < $total) {
    //             $tempdata = array_slice($contacts, $count, 20);
    //             Log::debug(print_r($tempdata, true));
    //             $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/import', $tempdata);
    //             Log::debug(print_r($response, true));
    //             $count = $count + 20;
    //             $created = $created + $response->data->created_count;
    //             $updated = $updated + (isset($response->data->updated_count) ? $response->data->updated_count : 0);
    //             Log::debug(print_r(['$count' => $count, '$created' => $created, '$updated' => $updated], true));
    //         }

    //         //echo '
'; print_r($response); exit;
    //         if($response->statusCode == 200 && $response->status == "success") {
    //             return redirect($this->_base_url.'s')->withMessage('Successfully Imported ' .$created. ' records and Updated ' .$updated. ' records out of ' .$total. ' records!!!');
    //         } else {
    //             return \Redirect::back()->withMessage('Some Error occured!');
    //         }


    //         exit;
    //         return redirect($this->_base_url.'/importmap')->withMessage('Successfully Uploaded !!!');
    //     } else {
    //         return \Redirect::back()->withMessage('Some Error occured!');
    //     }
    // }
}