354 lines
13 KiB
PHP
354 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Dashboard;
|
|
|
|
//Internal Libraries
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Khill\Lavacharts\Lavacharts;
|
|
use Carbon\Carbon;
|
|
|
|
//Application Library
|
|
use App\Library\Esi\Esi;
|
|
use App\Library\Helpers\StructureHelper;
|
|
|
|
//Models
|
|
use App\Models\Esi\EsiScope;
|
|
use App\Models\Esi\EsiToken;
|
|
use App\Models\User\UserPermission;
|
|
use App\Models\User\UserRole;
|
|
use App\Models\SRP\SRPShip;
|
|
use App\Models\User\UserAlt;
|
|
use App\Models\MiningTax\Invoice;
|
|
use App\Models\MiningTax\Ledger;
|
|
|
|
class DashboardController extends Controller
|
|
{
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
$this->middleware('role:Guest');
|
|
}
|
|
|
|
/**
|
|
* Show the application dashboard.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
//Set some variables to be used in if statements
|
|
$open = array();
|
|
$approved = array();
|
|
$denied = array();
|
|
$ores = array();
|
|
$altCount = null;
|
|
$alts = null;
|
|
$structures = array();
|
|
$esiHelper = new Esi;
|
|
$config = config('esi');
|
|
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
|
|
$lava = new Lavacharts;
|
|
|
|
|
|
/**
|
|
* Alt Counts
|
|
*/
|
|
//Get the number of the user's alt which are registered so we can process the alt's on the main dashboard page
|
|
$altCount = UserAlt::where([
|
|
'main_id' => auth()->user()->character_id,
|
|
])->count();
|
|
|
|
//If the alt count is greater than 0 get all of the alt accounts
|
|
if($altCount > 0) {
|
|
$alts = UserAlt::where([
|
|
'main_id' => auth()->user()->character_id,
|
|
])->get();
|
|
}
|
|
|
|
/**
|
|
* SRP Items
|
|
*/
|
|
//See if we can get all of the open SRP requests
|
|
$openCount = SRPShip::where([
|
|
'character_id' => auth()->user()->character_id,
|
|
'approved' => 'Under Review',
|
|
])->count();
|
|
if($openCount > 0) {
|
|
$open = SRPShip::where([
|
|
'character_id' => auth()->user()->character_id,
|
|
'approved' => 'Under Review'
|
|
])->get()->toArray();
|
|
}
|
|
|
|
//See if we can get all of the closed and approved SRP requests
|
|
$approvedCount = SRPShip::where([
|
|
'character_id' => auth()->user()->character_id,
|
|
'approved' => 'Approved',
|
|
])->count();
|
|
if($approvedCount > 0) {
|
|
$approved = SRPShip::where([
|
|
'character_id' => auth()->user()->character_id,
|
|
'approved' => 'Approved',
|
|
])->take(10)->get()->toArray();
|
|
}
|
|
|
|
//See if we can get all of the closed and denied SRP requests
|
|
$deniedCount = SRPShip::where([
|
|
'character_id' => auth()->user()->character_id,
|
|
'approved' => 'Denied',
|
|
])->count();
|
|
if($deniedCount > 0) {
|
|
$denied = SRPShip::where([
|
|
'character_id' => auth()->user()->character_id,
|
|
'approved' => 'Denied',
|
|
])->take(10)->get()->toArray();
|
|
}
|
|
|
|
//Process all types of srp requests for the alt of the main and add to the main's page
|
|
if($altCount > 0) {
|
|
//For each alt, get the open requests, and increment the open request counter
|
|
foreach($alts as $alt) {
|
|
$altOpenCount = SRPShip::where([
|
|
'character_id' => $alt->character_id,
|
|
'approved' => 'Under Review',
|
|
])->count();
|
|
if($altOpenCount > 0) {
|
|
//If the number of open requests is greater than zero, add to the open count
|
|
$openCount += $altOpenCount;
|
|
|
|
//Get the alt's open srp requests
|
|
$altOpen = SRPShip::where([
|
|
'character_id' => $alt->character_id,
|
|
'approved' => 'Under Review',
|
|
])->get()->toArray();
|
|
|
|
//Add the alt's open requests to the open requests array
|
|
foreach($altOpen as $aOpen) {
|
|
array_push($open, $aOpen);
|
|
}
|
|
}
|
|
|
|
$altApprovedCount = SRPShip::where([
|
|
'character_id' => $alt->character_id,
|
|
'approved' => 'Approved',
|
|
])->count();
|
|
if($altApprovedCount > 0) {
|
|
//If the number of approved requests is greater than zero, add to the approved count
|
|
$approvedCount += $altApprovedCount;
|
|
|
|
//Get the alt's approved srp request
|
|
$altApproved = SRPShip::where([
|
|
'character_id' => $alt->character_id,
|
|
'approved' => 'Approved',
|
|
])->take(5)->get()->toArray();
|
|
|
|
//For each alt add it to the array
|
|
foreach($altApproved as $aApproved) {
|
|
array_push($approved, $aApproved);
|
|
}
|
|
}
|
|
|
|
$altDeniedCount = SRPShip::where([
|
|
'character_id' => $alt->character_id,
|
|
'approved' => 'Denied',
|
|
])->count();
|
|
if($altDeniedCount > 0) {
|
|
//If the denied count is greater then zero for the alt, add it to the count
|
|
$deniedCount += $altDeniedCount;
|
|
|
|
//Get the denied alt's srp requests
|
|
$altDenied = SRPShip::where([
|
|
'character_id' => $alt->character_id,
|
|
'approved' => 'Denied',
|
|
])->take(5)->get()->toArray();
|
|
|
|
//For each alt's denied request add it to the array
|
|
foreach($altDenied as $aDenied) {
|
|
array_push($denied, $aDenied);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Create a chart of number of approved, denied, and open requests via a fuel gauge chart
|
|
$adur = $lava->DataTable();
|
|
|
|
$adur->addStringColumn('Type')
|
|
->addNumberColumn('Number')
|
|
->addRow(['SRP', $openCount]);
|
|
|
|
$lava->GaugeChart('SRP', $adur, [
|
|
'width' => 200,
|
|
'max' => 15,
|
|
'greenFrom' => 0,
|
|
'greenTo' => 5,
|
|
'yellowFrom' => 5,
|
|
'yellowTo' => 10,
|
|
'redFrom' => 10,
|
|
'redTo' => 15,
|
|
'majorTicks' => [
|
|
'Safe',
|
|
'Warning',
|
|
'Critical',
|
|
],
|
|
]);
|
|
|
|
/**
|
|
* Mining Tax Items
|
|
*/
|
|
//Check for the correct scopes
|
|
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
|
|
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the correct scopes for the services site.');
|
|
}
|
|
|
|
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
|
|
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
|
|
|
|
//Get the esi data for extractions
|
|
try {
|
|
$extractions = $esi->invoke('get', '/corporation/{corporation_id}/mining/extractions', [
|
|
'corporation_id' => $config['corporation'],
|
|
]);
|
|
} catch(RequestFailedException $e) {
|
|
Log::critical('Could not retrieve the extractions from ESI in DisplayExtractionCalendar in MiningTaxesController');
|
|
return redirect('/dashboard')->with('error', 'Failed to get extraction data from ESI');
|
|
}
|
|
|
|
/**
|
|
* Create a 3 month calendar for the past, current, and future extractions
|
|
*/
|
|
//Create the data tables
|
|
$calendar = $lava->DataTable();
|
|
|
|
$calendar->addDateTimeColumn('Date')
|
|
->addNumberColumn('Total');
|
|
|
|
foreach($extractions as $extraction) {
|
|
$sInfo = $sHelper->GetStructureInfo($extraction->structure_id);
|
|
array_push($structures, [
|
|
'date' => $esiHelper->DecodeDate($extraction->chunk_arrival_time),
|
|
'total' => 0,
|
|
]);
|
|
}
|
|
|
|
foreach($extractions as $extraction) {
|
|
for($i = 0; $i < sizeof($structures); $i++) {
|
|
//Create the dates in a carbon object, then only get the Y-m-d to compare.
|
|
$tempStructureDate = Carbon::createFromFormat('Y-m-d H:i:s', $structures[$i]['date'])->toDateString();
|
|
$extractionDate = Carbon::createFromFormat('Y-m-d H:i:s', $esiHelper->DecodeDate($extraction->chunk_arrival_time))->toDateString();
|
|
//check if the dates are equal then increase the total by 1
|
|
if($tempStructureDate == $extractionDate) {
|
|
$structures[$i]['total'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach($structures as $structure) {
|
|
$calendar->addRow([
|
|
$structure['date'],
|
|
$structure['total'],
|
|
]);
|
|
}
|
|
|
|
$lava->CalendarChart('Extractions', $calendar, [
|
|
'title' => 'Upcoming Extractions',
|
|
'unusedMonthOutlineColor' => [
|
|
'stroke' => '#ECECEC',
|
|
'strokeOpacity' => 0.75,
|
|
'strokeWidth' => 1,
|
|
],
|
|
'dayOfWeekLabel' => [
|
|
'color' => '#4f5b0d',
|
|
'fontSize' => 16,
|
|
'italic' => true,
|
|
],
|
|
'noDataPattern' => [
|
|
'color' => '#DDD',
|
|
'backgroundColor' => '#11FFFF',
|
|
],
|
|
'colorAxis' => [
|
|
'values' => [0, 5],
|
|
'colors' => ['green', 'red'],
|
|
],
|
|
]);
|
|
|
|
return view('dashboard')->with('openCount', $openCount)
|
|
->with('approvedCount', $approvedCount)
|
|
->with('deniedCount', $deniedCount)
|
|
->with('open', $open)
|
|
->with('approved', $approved)
|
|
->with('denied', $denied)
|
|
->with('lava', $lava)
|
|
->with('calendar', $calendar);
|
|
}
|
|
|
|
/**
|
|
* Display the profile of the user
|
|
* The profile will include the ESI Scopes Registered, the character image, and character name
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function profile() {
|
|
//Declare some variables
|
|
$alts = null;
|
|
$scopes = null;
|
|
$permissions = null;
|
|
$roles = null;
|
|
|
|
//Get the Esi scopes, user permission set, and roles
|
|
$scopeCount = EsiScope::where('character_id', Auth()->user()->character_id)->count();
|
|
if($scopeCount > 0) {
|
|
$scopes = EsiScope::where('character_id', Auth()->user()->character_id)->get();
|
|
}
|
|
|
|
//Get the permission count and permission of the user
|
|
$permissionCount = UserPermission::where('character_id', auth()->user()->character_id)->count();
|
|
if($permissionCount > 0) {
|
|
$permissions = UserPermission::where('character_id', auth()->user()->character_id)->get();
|
|
}
|
|
|
|
//Get the roles and role count of the user
|
|
$roleCount = UserRole::where('character_id', Auth()->user()->character_id)->count();
|
|
if($roleCount > 0) {
|
|
$roles = UserRole::where('character_id', Auth()->user()->character_id)->get();
|
|
}
|
|
|
|
//Get the alt count and alts of the user
|
|
$altCount = UserAlt::where('main_id', Auth()->user()->character_id)->count();
|
|
if($altCount > 0) {
|
|
$alts = UserAlt::where(['main_id' => Auth()->user()->character_id])->get();
|
|
}
|
|
|
|
//Return the view with that data
|
|
return view('dashboard.profile')->with('scopeCount', $scopeCount)
|
|
->with('scopes', $scopes)
|
|
->with('permissionCount', $permissionCount)
|
|
->with('permissions', $permissions)
|
|
->with('roleCount', $roleCount)
|
|
->with('roles', $roles)
|
|
->with('altCount', $altCount)
|
|
->with('alts', $alts);
|
|
}
|
|
|
|
public function removeAlt(Request $request) {
|
|
$this->validate($request, [
|
|
'character' => 'required',
|
|
]);
|
|
|
|
UserAlt::where([
|
|
'main_id' => auth()->user()->character_id,
|
|
'character_id' => $request->character,
|
|
])->delete();
|
|
|
|
return redirect('/dashboard');
|
|
}
|
|
}
|