CrestRoad/laravel/app/Http/Controllers/MetricreportController.php

295 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\LambdaRequest;
use DB;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\InvoicesExport;
use Auth;
use App\Mail\ReportExcel;
use Mail;
use Log;
class MetricreportController extends Controller
{
public function __construct()
{
$this->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 '<pre>'; 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 '<pre>';print_r($post); exit;
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/view', $post, 300);
//echo '<pre>'; print_r($response); exit;
if($post['type'] == 'incremental') {
//echo '<pre>'; print_r($response->data); print_r($post); exit;
}
//echo '<pre>'; 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 '<pre>'; print_r($response); exit;
$post = array_merge((array)$response->data->post,$post);
if(isset($post['metrics']) ) {
$post['metrics'] = explode(',', $post['metrics']);
}
//echo '<pre>'; 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 '<pre>'; 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 '<pre>'; 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 '<pre>'; 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 '<pre>'; 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');
}
}
}