254 lines
13 KiB
PHP
254 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Requests\LambdaRequest;
|
|
use DB;
|
|
use Auth;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use App\Exports\InvoicesExport;
|
|
use App\Mail\ReportExcel;
|
|
use Mail;
|
|
|
|
class CampaignController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
$this->_service = 'competition';
|
|
$this->_module = 'campaign';
|
|
$this->_viewname = 'campaign';
|
|
$this->_title = 'Campaign';
|
|
$this->_base_url = '/campaign';
|
|
}
|
|
|
|
public function list(Request $request) {
|
|
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all');
|
|
foreach($response->data->items as &$item) {
|
|
$item->validity_start = date("m/d/Y", strtotime($item->validity_start));
|
|
$item->validity_end = date("m/d/Y", strtotime($item->validity_end));
|
|
}
|
|
$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' => [ 'edit', 'delete', 'rules' => ['icon' => 'brightness-percent', 'querystring' => 'id={ID}'], 'teammembers' => ['icon' => 'account-multiple', 'querystring' => 'id={ID}'] ] ],
|
|
'title' => ['title' => 'Title', 'type' => 'text'],
|
|
'validity_start' => ['title' => 'Validity start', 'type' => 'text'],
|
|
'validity_end' => ['title' => 'Validity end', 'type' => 'text'],
|
|
'status' => ['title' => 'Status', 'type' => 'select'],
|
|
|
|
];
|
|
}
|
|
|
|
protected function get_list_buttons() {
|
|
return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ] ];
|
|
}
|
|
|
|
protected function get_form_fields($type, $values){
|
|
// $metrics = $this->getlambda('get', 'metric', 'metric', 'get_all');
|
|
// $metrics_dd = [];
|
|
// foreach($metrics->data->items as $metric){
|
|
// $metrics_dd[$metric->id] = $metric->name;
|
|
// }
|
|
// $domain = LambdaRequest::signedrequest('get', 'ums', 'domain/get_one');
|
|
// //echo '<pre>'; print_r($domain); exit;
|
|
// $designations_dd = [];
|
|
// foreach($domain->data->item->designations as $designation){
|
|
// $designations_dd[$designation] = $designation;
|
|
// }
|
|
//echo '<pre>'; print_r($values); exit;
|
|
|
|
$users = $this->getlambda('get', 'ums', 'users', 'dropdown');
|
|
//echo '<pre>'; print_r($users); exit;
|
|
$users_dd = [];
|
|
foreach($users->data->items as $user){
|
|
$users_dd[$user->id] = $user->firstname .' '. $user->lastname . ' ('.$user->employee_code.')';
|
|
}
|
|
|
|
$teams = $this->getlambda('get', 'ums', 'team', 'dropdown');
|
|
$teams_dd = [];
|
|
foreach($teams->data->items as $team){
|
|
$teams_dd[$team->id] = $team->name;
|
|
}
|
|
|
|
$fields = [
|
|
'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
|
|
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
|
|
// 'display_status' => ['title' => 'Compatition Status', 'type' => 'select', 'required' => true, 'values' => ['-' => '-', 'Ongoing' => 'Ongoing', 'Completed' => 'Completed' ] ],
|
|
// 'result_text' => ['title' => 'Result Text', 'type' => 'text', 'required' => true],
|
|
'description' => ['title' => 'Description', 'type' => 'textarea', 'required' => true, 'fullwidth' => true ],
|
|
'validity_start' => ['title' => 'Validity start', 'type' => 'date', 'required' => true],
|
|
'validity_end' => ['title' => 'Validity end', 'type' => 'date', 'required' => true],
|
|
'cover_image' => ['title' => 'Cover Image', 'type' => 'image', 'required' => true],
|
|
//'target_metrics' => ['title' => 'Choose Metric', 'type' => 'multiselect', 'required' => true, 'values' => $metrics_dd, 'fullwidth' => true ],
|
|
'fans' => ['title' => 'Fans', 'type' => 'bigmultiselect', 'values' => $users_dd, 'required' => true, 'fullwidth' => true],
|
|
'teams' => ['title' => 'Teams', 'type' => 'bigmultiselect', 'values' => $teams_dd, 'required' => true, 'fullwidth' => true],
|
|
|
|
];
|
|
//echo '<pre>'; print_r($fields); exit;
|
|
return $fields;
|
|
}
|
|
|
|
protected function _beforesave($type, $request) {
|
|
$data = $request->except('_token');
|
|
if( $request->file('cover_image') ) {
|
|
$data['cover_image'] = $this->_uploadMedia($request, 'cover_image', 'competition');
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
protected function _beforeform($type, $values) {
|
|
if ($type == 'edit') {
|
|
$values->validity_start = date("m-d-Y", strtotime($values->validity_start));
|
|
$values->validity_end = date('m-d-Y', strtotime($values->validity_end));
|
|
}
|
|
return $values;
|
|
}
|
|
|
|
public function rules(Request $request) {
|
|
$id = $request->input('id', 0);
|
|
if($id === 0) {
|
|
return redirect('/campaigns')->withError('Campaign not found!');
|
|
} else {
|
|
$request->session()->put('campaign_id', $id);
|
|
return redirect('/campaignrules');
|
|
}
|
|
}
|
|
|
|
public function teammembers(Request $request) {
|
|
$id = $request->input('id', 0);
|
|
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_one', ['id' => $id]);
|
|
$values = $response->data->item;
|
|
$teams = [];
|
|
foreach($values->teams as $t) {
|
|
$team = LambdaRequest::signedrequest('get', 'ums', 'team/get_one', ['id' => $t, 'players' => true]);
|
|
$players = [];
|
|
foreach($team->data->players as $player) {
|
|
$players[] = $player->owner_info;
|
|
}
|
|
$teams[] = ['team_details' => ['id' => $team->data->item->id, 'name' => $team->data->item->name, 'description' => $team->data->item->description], 'players' => $players ];
|
|
}
|
|
$teams = json_decode(json_encode($teams), FALSE);
|
|
//echo '<pre>'; print_r($teams); exit;
|
|
return $this->view('teammembers')->with(['teams' => $teams]);
|
|
}
|
|
|
|
public function report(Request $request) {
|
|
$post = $request->except('_token');
|
|
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/view', $post, 60);
|
|
//echo '<pre>'; print_r($response); exit;
|
|
return $this->view('report')->with(['periods' => $response->data->periods, 'users' => $response->data->users, 'metrics' => $response->data->metrics, 'post' => $response->data->post, 'base_level' => $response->data->base_level ]);
|
|
|
|
}
|
|
public function dashboard(Request $request) {
|
|
$post = $request->except('_token');
|
|
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/view', $post, 60);
|
|
$user = false;
|
|
foreach($response->data->users as $u) {
|
|
if($u->user_id == Auth::user()->user_id) {
|
|
$user = $u;
|
|
}
|
|
}
|
|
//echo '<pre>'; print_r($response); exit;
|
|
return $this->view('dashboard')->with(['periods' => $response->data->periods, 'user' => $user, 'metrics' => $response->data->metrics, 'post' => $response->data->post ]);
|
|
|
|
}
|
|
|
|
|
|
public function export(Request $request) {
|
|
$post = $request->except('_token');
|
|
$post['export'] = 1;
|
|
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/view', $post, 60);
|
|
//echo '<pre>'; print_r($response); exit;
|
|
//echo '<pre>'; print_r($response); print_r($post); exit;
|
|
$exceldata = [];
|
|
// foreach($response->data->periods as $v) {
|
|
// if($post['period'] == $v->value) {
|
|
// $exceldata[] = ['Period: '.ucwords($v->label)];
|
|
// }
|
|
// }
|
|
if(!isset($post['type'])) {
|
|
$post['type'] = 'details';
|
|
}
|
|
$exceldata[] = [''];
|
|
switch($post['type']) {
|
|
case 'leaderboard':
|
|
$exceldata[] = ["Rank", "User", "Designation", "Units", "Percent"];
|
|
foreach($response->data->graph->values as $val) {
|
|
$exceldata[] = [(string)$val->rank, (string)$val->user->name, $val->user->designation, (string)round($val->score, 2), (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 ];
|
|
}
|
|
break;
|
|
|
|
case 'details':
|
|
$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", "Rank", "Total Units", "Total Points"];
|
|
foreach($response->data->metrics as $metric) {
|
|
$headers[] = $metric->name . ' Units';
|
|
$headers[] = $metric->name . ' Points';
|
|
}
|
|
$exceldata[] = $headers;
|
|
foreach($response->data->users as $user) {
|
|
$row = [];
|
|
$row[] = $user->user_info->name;
|
|
$row[] = $user->user_info->employee_code;
|
|
$row[] = $user->user_info->email;
|
|
$row[] = $user->user_info->designation;
|
|
|
|
$row[] = isset($user->user_info->manager1->name) ? $user->user_info->manager1->name : '-';
|
|
$row[] = isset($user->user_info->manager1->employee_code) ? $user->user_info->manager1->employee_code : '-';
|
|
$row[] = isset($user->user_info->manager1->email) ? $user->user_info->manager1->email : '-';
|
|
$row[] = isset($user->user_info->manager2->name) ? $user->user_info->manager2->name : '-';
|
|
$row[] = isset($user->user_info->manager2->employee_code) ? $user->user_info->manager2->employee_code : '-';
|
|
$row[] = isset($user->user_info->manager2->email) ? $user->user_info->manager2->email : '-';
|
|
|
|
$row[] = isset($user->user_info->positions->Zone) ? $user->user_info->positions->Zone : '-';
|
|
$row[] = isset($user->user_info->positions->Region) ? $user->user_info->positions->Region : '-';
|
|
$row[] = isset($user->user_info->positions->Area) ? $user->user_info->positions->Area : '-';
|
|
$row[] = isset($user->user_info->positions->Territory) ? $user->user_info->positions->Territory : '-';
|
|
|
|
$row[] = $user->rank;
|
|
$row[] = $user->units;
|
|
$row[] = $user->total;
|
|
|
|
foreach($response->data->metrics as $metric) {
|
|
$row[] = isset($user->metrics->{$metric->id}) ? $user->metrics->{$metric->id} : '-';
|
|
$row[] = isset($user->metric_points->{$metric->id}) ? $user->metric_points->{$metric->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 = 'support1@stratawiz.com';
|
|
$data->subject = 'Attached Report';
|
|
$data->body = '';
|
|
|
|
$report = Excel::raw(new InvoicesExport($exceldata), 'Xlsx');
|
|
$data->attachment = $report;
|
|
$data->attachment_name = 'campaign.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), 'campaign.xlsx');
|
|
}
|
|
}
|
|
}
|