middleware('auth'); $this->_service = 'metric'; $this->_module = 'metric_report'; $this->_viewname = 'metricreport'; $this->_title = 'Metric Reports'; $this->_base_url = '/metricreport'; } public function list(Request $request) { $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/list'); //echo '
'; print_r($response); exit;
        $fields = $this->get_list_fields();
        return $this->view('list')->with([
            'title' => $this->_title,
            'fields' => $fields,
            'base_url' => $this->_base_url,
            'items' => $response->data->items,
            'buttons' => $this->get_list_buttons()
        ]);
    }

    protected function get_list_fields(){
        return [
            'actions' => ['title' => 'Actions', 'buttons' => [ 'report' => ['icon' => 'chart-bar', 'querystring' => 'id={ID}'] ] ],
            'name' => ['title' => 'Name', 'type' => 'text'],
            'type' => ['title' => 'Type', 'type' => 'text'],
            'validity_start' => ['title' => 'Validity start', 'type' => 'date'],
            'validity_end' => ['title' => 'Validity end', 'type' => 'date'],
            'agg_type' => ['title' => 'Aggregation type', 'type' => 'text'],            
        ];
    }

    public function report(Request $request) {
        $post = $request->except('_token');
        //echo '
';print_r($post); exit;
        $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/view', $post, 300);
        //echo '
'; print_r($response); exit;
        if($post['type'] == 'incremental') {
            //echo '
'; print_r($response->data); print_r($post); exit;
        }
        //echo '
'; print_r($response->data); print_r($post); exit;
        $colors = ['FECD00', '01C14B', 'FF8050', '4A5CD0', '707070'];
        $breadcrumbs = [];
        if(isset($post['hid'])){
            if($request->session()->has('leaderboard_breadcrumbs')) {
                $breadcrumbs = $request->session()->get('leaderboard_breadcrumbs');
            }
            $breadcrumbs[$post['level']] = ['hid' => $post['hid'], 'username' => $post['username'], 'level' => $post['level'] ];
            $request->session()->put('leaderboard_breadcrumbs', $breadcrumbs);
            $breadcrumbs = array_filter($breadcrumbs, function($k) use($post) { return $k >= $post['level']; }, ARRAY_FILTER_USE_KEY);
            krsort($breadcrumbs);
        }
        //echo '
'; print_r($response); exit;
        $post = array_merge((array)$response->data->post,$post);
        if(isset($post['metrics']) ) {
            $post['metrics'] = explode(',', $post['metrics']);
        }
        //echo '
'; print_r(['periods' => $response->data->periods, 'charts' => $response->data->available_charts, 'graph' => $response->data->graph, 'post' => $post, 'colors' => $colors, 'breadcrumbs' => $breadcrumbs]); exit;
        $depts = DB::table("hierarchy_departments")->select("name", "email_id", "sub_department_3")->get();
        $sdepts = [];
        foreach($depts as $dept) {
            $sdepts[$dept->email_id] = $dept->sub_department_3;
            $sdepts_name[$dept->name] = $dept->sub_department_3;
        }
        //echo '
'; print_r($response->data->graph); print_r($depts); exit;
        return $this->view('report')->with(['periods' => $response->data->periods, 'charts' => $response->data->available_charts, 'graph' => $response->data->graph, 'post' => $post , 'colors' => $colors, 'breadcrumbs' => $breadcrumbs, 'sdepts' => $sdepts, 'sdepts_name' => $sdepts_name]);
    }

    public function export(Request $request) {
        $post = $request->except('_token');
        $post['export'] = 1;
        $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/view', $post, 300);
        //echo '
'; print_r($response); print_r($post); exit;
        $post = (array)$response->data->post;
        $exceldata = [];
        $exceldata[] = [$response->data->graph->name];
        $exceldata[] = ['Report: '.ucwords($response->data->graph->agg_type).' Report'];
        $exceldata[] = ['Type: '.ucwords($response->data->graph->type).' Metric'];
        foreach($response->data->periods as $v) {
            if($post['period'] == $v->value) {
                $exceldata[] = ['Period: '.ucwords($v->label)];
            }
        }
        $depts = DB::table("hierarchy_departments")->select("name", "email_id", "sub_department_3")->get();
        $sdepts = [];
        foreach($depts as $dept) {
            $sdepts[$dept->email_id] = $dept->sub_department_3;
            $sdepts_name[$dept->name] = $dept->sub_department_3;
        }

        $exceldata[] = [''];
        switch($response->data->post->type) {
            case 'leaderboard':
            case 'scoreboard':
                $headings = ["Rank", "User", "User Id", "Employee Code", "Designation", 'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email',  'Zone', 'Region', "Area", "Territory", "Sub Depeartment", "Units", "Percent", "Active User"];
                if(count($response->data->graph->values) > 0 && isset($response->data->graph->values[0]->stats->prescribers) ){
                    $headings[] = "Prescribers";
                }
                foreach($response->data->graph->metrics as $val) {
                    $headings[] = $val->display;
                }

                $exceldata[] = $headings;
                foreach($response->data->graph->values as $val) {
                    $rowdata = [(string)$val->rank, (string)$val->user->name, (string)$val->user->id,(isset($val->user->owner_info) && isset($val->user->owner_info->employee_code) ? $val->user->owner_info->employee_code : '-'), $val->user->designation];
                    $user = $val->user;
                    $rowdata[] = isset($user->manager1->name) ? $user->manager1->name : '-';
                    $rowdata[] = isset($user->manager1->employee_code) ? $user->manager1->employee_code : '-';
                    $rowdata[] = isset($user->manager1->email) ? $user->manager1->email : '-';
                    $rowdata[] = isset($user->manager2->name) ? $user->manager2->name : '-';
                    $rowdata[] = isset($user->manager2->employee_code) ? $user->manager2->employee_code : '-';
                    $rowdata[] = isset($user->manager2->email) ? $user->manager2->email : '-';

                    $rowdata[] = isset($user->positions->Zone) ? $user->positions->Zone : (isset($user->positions->Country) ? $user->positions->Country : '-' );
                    $rowdata[] = isset($user->positions->Region) ? $user->positions->Region : '-';
                    $rowdata[] = isset($user->positions->Area) ? $user->positions->Area : '-';
                    $rowdata[] = isset($user->positions->Territory) ? $user->positions->Territory : '-';
                    list($name, $waste) = explode(' (', $val->user->name);
                    $rowdata[] = isset($sdepts_name[$name]) ? $sdepts_name[$name] : '-';

                    $rowdata[] = (string)round($val->score, 2);
                    $rowdata[] = (string)$response->data->graph->values[0]->rank != 0 ? ($response->data->graph->values[0]->rank == 1 ? ($response->data->graph->values[0]->score ? ceil(($val->score/$response->data->graph->values[0]->score)*100) : 0) : ($response->data->graph->values[1]->score ? ceil(($val->score/$response->data->graph->values[1]->score)*100) : 0 ) ) : 0;
                    $rowdata[] = (String)isset($val->stats->ucount) ? $val->stats->ucount:0;

                    if(isset($val->stats->prescribers) ) {
                        $rowdata[] = $val->stats->prescribers;
                    }
                    foreach($response->data->graph->metrics as $m) {
                        $rowdata[] = isset($val->stats->{$m->metric}) ? $val->stats->{$m->metric} : 0;
                    }
                    $exceldata[] = $rowdata;
                }
                break;
            case 'trend':
                $headings = ['Periods'];
                if($response->data->graph->type == 'grouped') {
                    foreach($response->data->graph->values as $met) {
                        $headings[] = $met->metric;
                    }
                    $exceldata[] = $headings;
                    foreach($response->data->graph->values[0]->stats as $i => $stat) {
                        $row = [$stat->x];
                        foreach($response->data->graph->values as $met) {
                            $row[] = isset($met->stats[$i])?$met->stats[$i]->y:0;
                        }
                        $exceldata[] = $row;
                    }
                } else {
                    $headings[] = $response->data->graph->label;
                    $exceldata[] = $headings;
                    foreach($response->data->graph->values as $i => $val) {
                        $exceldata[] = [$val->x, $val->y];
                    }
                }
                break;
            case 'graphical':
                if($response->data->graph->type == 'grouped') {
                    $exceldata[] = ['Metric Name', 'Units', 'Percent'];
                    $total = 0; 
                    foreach($response->data->graph->values as $val) {
                        $total = $total + $val->value;
                    }
                    foreach($response->data->graph->values as $val) {
                        $exceldata[] = [$val->label, $val->value, (string)round(($val->value/$total)*100, 2)];
                    }
                }
                break;
            case 'details':
                if($response->data->graph->chart == 'tabular') {
                    $headers = ['User', 'Employee Code', 'Email', 'Designation', 'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email',  'Zone', 'Region', "Area", "Territory", "Sub Depeartment", "Role"];
                    foreach($response->data->graph->values->metrics as $metric) {
                        $headers[] = $metric->metric;
                    }
                    $exceldata[] = $headers;
                    foreach($response->data->graph->values->users as $user) {
                        $row = [];
                        $row[] = $user->name;
                        $row[] = $user->employee_code;
                        $row[] = $user->email;
                        $row[] = $user->designation;

                        $row[] = isset($user->manager1->name) ? $user->manager1->name : '-';
                        $row[] = isset($user->manager1->employee_code) ? $user->manager1->employee_code : '-';
                        $row[] = isset($user->manager1->email) ? $user->manager1->email : '-';
                        $row[] = isset($user->manager2->name) ? $user->manager2->name : '-';
                        $row[] = isset($user->manager2->employee_code) ? $user->manager2->employee_code : '-';
                        $row[] = isset($user->manager2->email) ? $user->manager2->email : '-';

                        $row[] = isset($user->positions->Zone) ? $user->positions->Zone : '-';
                        $row[] = isset($user->positions->Region) ? $user->positions->Region : '-';
                        $row[] = isset($user->positions->Area) ? $user->positions->Area : '-';
                        $row[] = isset($user->positions->Territory) ? $user->positions->Territory : '-';
                        $row[] = isset($sdepts[$user->email]) ? $sdepts[$user->email] : '-';

                        $row[] = isset($user->roles) ? (is_array($user->roles) ? implode(',', $user->roles) : $user->roles) : '-';
                        foreach($response->data->graph->values->metrics as $metric) {
                            $row[] = isset($metric->stats->{$user->id}) ? $metric->stats->{$user->id} : '-';
                        }
                        $exceldata[] = $row;
                    }
                }
                break;
            case 'contacts':
                if($response->data->graph->chart == 'contacts') {
                    //echo '
'; print_r($response->data->graph->values); exit;

                    $headers = ['Doctor', 'MSL Code'];
                    foreach($response->data->graph->contact_attributes as $attr) {
                        $headers[] = ucwords($attr);
                    }
                    $headers = array_merge($headers, ['User', 'Employee Code', 'Email', 'Designation', 'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email',  'Zone', 'Region', "Area", "Territory"]);
                    foreach($response->data->graph->values->metrics as $metric) {
                        $headers[] = $metric->metric;
                    }
                    $exceldata[] = $headers;
                    foreach($response->data->graph->values->contacts as $contact) {
                        $row = [];
                        $row[] = $contact->name;
                        $row[] = $contact->msl_code;

                        foreach($response->data->graph->contact_attributes as $attr) {
                            $row[] = isset($contact->{$attr}) ? $contact->{$attr} : '';
                        }

                        $user = $response->data->graph->values->users->{$contact->id};
                        $row[] = $user->name;
                        $row[] = $user->employee_code;
                        $row[] = $user->email;
                        $row[] = $user->designation;

                        $row[] = isset($user->manager1->name) ? $user->manager1->name : '-';
                        $row[] = isset($user->manager1->employee_code) ? $user->manager1->employee_code : '-';
                        $row[] = isset($user->manager1->email) ? $user->manager1->email : '-';
                        $row[] = isset($user->manager2->name) ? $user->manager2->name : '-';
                        $row[] = isset($user->manager2->employee_code) ? $user->manager2->employee_code : '-';
                        $row[] = isset($user->manager2->email) ? $user->manager2->email : '-';

                        $row[] = isset($user->positions->Zone) ? $user->positions->Zone : '-';
                        $row[] = isset($user->positions->Region) ? $user->positions->Region : '-';
                        $row[] = isset($user->positions->Area) ? $user->positions->Area : '-';
                        $row[] = isset($user->positions->Territory) ? $user->positions->Territory : '-';

                        foreach($response->data->graph->values->metrics as $metric) {
                            $row[] = isset($metric->stats->{$contact->id}) ? $metric->stats->{$contact->id} : '-';
                        }
                        $exceldata[] = $row;
                    }
                }
                break;

        }
        //echo '
'; print_r($exceldata); exit;
        if(isset($post['email']) && $post['email'] == 1) {
            $data = new \StdClass;
            $data->sender_name = 'Rapport Support';
            $data->sender_email = 'support@stratawiz.com';
            $data->subject = 'Attached Report';
            $data->body = '';

            $report = Excel::raw(new InvoicesExport($exceldata), 'Xlsx');
            $data->attachment = $report;
            $data->attachment_name = 'report.xlsx';

            Mail::to( $response->data->user->email )->send(new ReportExcel($data));
            //Mail::to( 'ravigulhane1983@gmail.com' )->send(new ReportExcel($data));
            return response()->json(['sent' => 'yes']);
        } elseif(isset($post['s3']) && $post['s3'] == 1) {
            $filename = 'reports/'.strtotime("now").'-report.xlsx';
            $res = Excel::store(new InvoicesExport($exceldata), $filename);
            Log::debug('https://did94hhhcgq1d.cloudfront.net/'.$filename);
            return response()->json(['sent' => 'yes', 'filename' => 'https://did94hhhcgq1d.cloudfront.net/'.$filename]);
        } else {
            return Excel::download(new InvoicesExport($exceldata), 'report.xlsx');
        }
    }
    
}