Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot]
981245b503 Bump elliptic from 6.4.1 to 6.5.4
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.4.1 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.4.1...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-08 22:47:13 +00:00
1384 changed files with 24138 additions and 32186 deletions

24
.env
View File

@@ -2,7 +2,7 @@ APP_NAME='W4RP Services'
APP_ENV=local
APP_KEY=base64:PBOxrGFJAtwj9SDF4F0DZ1J+6MjrJmRiPZJQwRdy3XQ=
APP_DEBUG=true
APP_URL=https://services.w4rp.space
APP_URL=http://localhost
LOG_CHANNEL=daily
@@ -10,16 +10,14 @@ DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=w4rpservices2
DB_USERNAME=minerva
DB_PASSWORD=FuckingShit12
DB_USERNAME=
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
CACHE_PREFIX=w4rpservices_cache
CACHE_DRIVER=file
QUEUE_DRIVER=redis
QUEUE_CONNECTION=redis
QUEUE_PREFIX=w4rpservices_queue
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
@@ -27,8 +25,6 @@ SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DATABASE=0
REDIS_CACHE_DB=1
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
@@ -37,11 +33,9 @@ MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
ESI_CLIENT_ID=91a051aea72742068b51801042397c38
ESI_SECRET_KEY=1co6qRMoXyx1dG2iBbAZ1z6NUOoaJWyQnqEnsqoj
ESI_USERAGENT='W4RP Services'
ESI_CALLBACK_URI=https://services.w4rp.space/callback/
ESI_CLIENT_ID=
ESI_SECRET_KEY=
ESI_USERAGENT=
ESI_CALLBACK_URI=
ESI_PRIMARY_CHAR=93738489
ESI_ALLIANCE=99004116
HORIZON_PREFIX=w4rpservices_horizon

6
.gitignore vendored
View File

@@ -5,7 +5,5 @@
/public/logs/*
worker.log
/public/cache/*
.env
.vscode
/storage/logs
worker.log
/.env
.vscode

View File

@@ -7,6 +7,9 @@ use Illuminate\Console\Command;
use Carbon\Carbon;
use Log;
//Library
use Commands\Library\CommandHelper;
//Models
use App\Models\Lookups\AllianceLookup;
use App\Models\Lookups\CharacterLookup;
@@ -54,6 +57,9 @@ class CleanStaleDataCommand extends Command
*/
public function handle()
{
$command = new CommandHelper;
$command->CleanJobStatusTable();
//Empty the item lookup table
ItemLookup::truncate();

View File

@@ -8,7 +8,6 @@ use Carbon\Carbon;
//Models
use App\Models\ScheduledTask\ScheduleJob;
use App\Jobs\Commands\Eve\SendEveMail;
//Library
use Seat\Eseye\Exceptions\RequestFailedException;
@@ -50,39 +49,11 @@ class Test extends Command
*/
public function handle()
{
$esiHelper = new Esi;
$helper = new FinanceHelper;
$config = config('esi');
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
$recipient = $config['primary'];
$recipientType = 'character';
$subject = "Just A Test for Eseye";
$sender = $config['primary'];
$body = "F0KlvSA9vrXWYK0IuMhSAbfaOAMmQO5U2CD69Dn0JOk26B8HnSPPkhSG3JzlawHjbBd16HAIbaawbv9304EaoTRctpu5cnZo0GoHINi3R7pNGi0IZTWKG4EArwWbSujwX9KPvMqGNbcSorrIEslw6neXWW1kcDN0GMcvV6SeoM23cSkK33cAbR4DTeqUXZ9ULuFy31UPXfEcaNzKREbqKPlgChYcGdCyHG1J25qrEmPlOTPI1NQQkh71HvHJTVA7bmTgLEJMdFYHbc3ZzGOB9RFLfhdkGEGl2f3OQNyDAJIKW2mNQVlRVGc3Emvm42czpsH8ojn3BX5nuEFxNfjgue8hhdBIZSKm232U2l0xsPGZOzHvQdYs8bLw7ZQX1drV9qOPnbhgzbFLxEvQoGDquhKAdlo7bhkgoCn5IiY3BbQ5qnKVodymb58gj9Pd67GxjJ8K0854c91KkrJNEOCyiVcqKYqNDtKkB7hgjBLZUKRtWUkOf9j1qIRARoGzTGdqK20yvfaVIWetVqjw5UvzQC2pynHkvIw2X3aD49ghY7UOzXUceKJ8taF4ZaMvW34r5OvyTrjVo4PKV9TylIODmzg1U0s4joxz58f1A6BNp2fCs1YzNOObuMaxGjek47jv2gDgyhQnmi5uaREcGn5AAwgMUc55GPY2jevRTHo9scMqm5amaJUBQ3TgXvFSfS33LxD8xJjdKw7KB06stDQzdjyVb52mAdm5WchOOpGy3EXntBSzsfUHc4XEqql7lKTPLgBzeYxt9EagGP96Li4dABg2MaLuU4i1CWdV49ZdPwOt1OjwNU4QtfR02C6Vw7raCFl3mqWBgLke9O5dC8Lh3ojg7FBATstSuur2n41Rn4YwzGaiWJ3qKwTsJGL3k8PaHEsvwvq56w4Qjt8CqJsmAV1nsfKMFZaVlcbK3PFN5oHaDbQwDh4IVdwA8UPPnrn2wSuugi8QlVyUA8z9iVYMW8OdzHFn98zl7a2Bua5M";
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender);
/*
try {
$response = $esi->setBody([
'approved_cost' => 100,
'body' => "Welcome to this test message.<br>" . $body,
'recipients' => [[
'recipient_id' => $config['primary'],
'recipient_type' => 'character',
]],
'subject' => 'Just a Test',
])->invoke('post', '/characters/{character_id}/mail/', [
'character_id' => $config['primary'],
]);
} catch(RequestFailedException $e) {
return null;
}
var_dump($response);
dd($response->getErrorCode());
*/
$startTime = time();
$receipt = $helper->GetApiWalletJournal(1, $config['primary']);
$endTime = time();
var_dump($endTime - $startTime);
}
}

View File

@@ -6,6 +6,7 @@ use Illuminate\Console\Command;
//Library
use App\Library\Moons\MoonCalc;
use Comamnds\Library\CommandHelper;
//Job
use App\Jobs\Commands\Eve\ItemPricesUpdateJob;
@@ -45,10 +46,17 @@ class ItemPricesUpdateCommand extends Command
{
//Declare variables
$moonHelper = new MoonCalc;
$task = new CommandHelper('ItemPricesUpdateCommand');
//Set the task as started
$task->SetStartStatus();
//Fetch new prices from fuzzwork.co.uk for the item pricing schemes
$moonHelper->FetchNewPrices();
//Set the task as completed
$task->SetStopStatus();
return 0;
}
}

View File

@@ -1,73 +0,0 @@
<?php
//Namespace
namespace App\Console\Commands\Files;
//Internal Library
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\File;
use Carbon\Carbon;
use Log;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use DB;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MoonRental\AllianceMoonOre;
use App\Models\MoonRental\AllianceMoon;
class ImportAllianceMoons extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'files:import:moons';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Import moons from tab-delimited text.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
//Create the collection of lines for the input file.
$lines = new Collection;
///universe/moons/{moon_id}/
//Create the file handler
$data = Storage::get('public/alliance_moons.txt');
//Split the string into separate arrays based on the line
$data = preg_split("/\n\t/", $data);
var_dump($data);
dd();
}
}

View File

@@ -9,9 +9,7 @@ use Carbon\Carbon;
//Application Library
use App\Library\Helpers\FinanceHelper;
//Jobs
use App\Jobs\Commands\Finances\UpdateAllianceWalletJournalJob;
use Commands\Library\CommandHelper;
//Models
use App\Models\Finances\AllianceWalletJournal;
@@ -49,6 +47,18 @@ class UpdateAllianceWalletJournal extends Command
*/
public function handle()
{
UpdateAllianceWalletJournalJob::dispatch()->onQueue('finances');
//Declare variables
$fHelper = new FinanceHelper;
$config = config('esi');
$task = new CommandHelper('UpdateAllianceWalletJournal');
//Set the task as started
$task->SetStartStatus();
$fHelper->GetApiWalletJournal(1, $config['primary']);
//Set the task as stopped
$task->SetStopStatus();
return 0;
}
}

View File

@@ -0,0 +1,48 @@
<?php
namespace Commands\Library;
//Internal Libraries
use Carbon\Carbon;
//Models
use App\Models\ScheduledTask\ScheduleJob;
class CommandHelper {
private $job_name;
private $job_state;
private $system_time;
public function __construct($name) {
$this->job_name = $name;
$this->job_state = 'Starting';
$this->system_time = Carbon::now();
}
public function SetStartStatus() {
//Add an entry into the jobs table
$job = new ScheduleJob;
$job->job_name = $this->job_name;
$job->job_state = $this->job_state;
$job->system_time = $this->system_time;
$job->save();
}
public function SetStopStatus() {
//Mark the job as finished
ScheduleJob::where([
'system_time' => $this->system_time,
'job_name' => $this->job_name,
])->update([
'job_state' => 'Finished',
]);
}
public function CleanJobStatusTable() {
//Delete old jobs
ScheduleJob::where(['system_time', '<', Carbon::now()->subMonths(3)])->delete();
}
}
?>

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\PreFetchMiningTaxesLedgers as PreFetch;
class ExecuteMiningTaxesLedgersCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:ledgers';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute mining taxes ledgers jobs.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
PreFetch::dispatch()->onQueue('miningtaxes');
return 0;
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesObservers as FetchObservers;
class ExecuteMiningTaxesObserversCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:observer';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Dispatch a mining tax observer job.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
FetchObservers::dispatch()->onQueue('miningtaxes');
return 0;
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesPayments as PMTP;
class ExecuteProcesssMiningTaxesPaymentsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:payments';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process Mining Taxes payments from the console.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
PMTP::dispatch()->onQueue('miningtaxes');
return 0;
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\SendMiningTaxesInvoices as SendInvoice;
class ExecuteSendMiningTaxesInvoiceCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:send';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute send mining tax invoices.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
SendInvoice::dispatch()->onQueue('miningtaxes');
return 0;
}
}

View File

@@ -0,0 +1,155 @@
<?php
namespace App\Console\Commands\MiningTaxes;
//Internal Library
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
//Application Library
use Commands\Library\CommandHelper;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
//Jobs
use App\Jobs\Commands\Eve\ProcessSendEveMailJob;
class MiningTaxesInvoices extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'MiningTax:Invoice';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Mining Taxes Invoice Command';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$config = config('esi');
$body = null;
$task = new CommandHelper('MiningTaxesInvoices');
//Set the task as started
$task->SetStartStatus();
//Get the characters for each non-invoiced ledger entry
$charIds = Ledger::distinct('character_id')->pluck('character_id');
//Foreach character tally up the mining ledger.
foreach($charIds as $charId) {
//Declare some variables we need for each iteration of the loop
$invoice = array();
$ores = array();
$totalPrice = 0.00;
//Get the rows from the database for each character and the requirement of not been invoiced yet
$rows = Ledger::where([
'character_id' => $charId,
'invoiced' => 'No',
])->get()->toArray();
var_dump($rows);
//Taly up the item composition from each row and multiply by the quantity
foreach($rows as $row) {
if(!isset($ores[$row['type_id']])) {
$ores[$row['type_id']] = 0;
}
$ores[$row['type_id']] = $ores[$row['type_id']] + $row['quantity'];
//Add up the total price from the ledger rows for the report later
$totalPrice = $totalPrice + $row['amount'];
}
//Reduce the total price by the take percentage
$invoiceAmount = $totalPrice * 0.10;
$invoiceAmount = round($invoiceAmount, 2);
//Get the character name from the character id
$charName = $lookup->CharacterIdToName($charId);
//Generate a unique invoice id
$invoiceId = uniqid();
//Save the invoice model
$invoice = new Invoice;
$invoice->character_id = $charId;
$invoice->character_name = $charName;
$invoice->invoice_id = $invoiceId;
$invoice->invoice_amount = $invoiceAmount;
$invoice->date_issued = Carbon::now();
$invoice->date_due = Carbon::now()->addDays(7);
$invoice->status = 'Pending';
$invoice->save();
//Update the ledger entries
Ledger::where([
'character_id' => $charId,
'invoiced' => 'No',
])->update([
'invoiced' => 'Yes',
'invoice_id' => $invoiceId,
]);
//Create the mail body
$body .= "Dear Miner,<br><br>";
$body .= "Mining Taxes are due for the following ores mined from alliance moons: <br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "<br>";
}
$body .= "Please remit " . number_format($totalPrice, 2, ".", ",") . " ISK to Spatial Forces by " . $invoice->date_due . "<br>";
$body .= "Set the reason for transfer as MMT: " . $invoice->invoice_id . "<br>";
$body .= "<br><br>";
$body .= "You can also send a contract with the following ores in the contract with the reason set as MMT: " . $invoice->invoice_id . "<br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), ".", ",") . "<br>";
}
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Mail the invoice to the character if the character is in
//Warped Intentions or Legacy
$subject = 'Warped Intentions Mining Taxes';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $charId;
//Send the Eve Mail Job to the queue to be dispatched
ProcessSendEveMailJob::dispatch($body, $recipient, $recipientType, $subject, $sender)->onQueue('mail');
}
//Set the task as stopped
$task->SetStopStatus();
return 0;
}
}

View File

@@ -0,0 +1,138 @@
<?php
namespace App\Console\Commands\MiningTaxes;
//Internal Library
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
//Application Library
use Commands\Library\CommandHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//Models
use App\Models\MiningTax\Observer;
use App\Models\MiningTax\Ledger;
use App\Models\Moon\MineralPrice;
use App\Models\Moon\ItemComposition;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
//Jobs
//use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesLedgersJob;
class MiningTaxesLedgers extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'MiningTax:Ledgers';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Start getting the mining ledgers.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//Create the command helper container
$task = new CommandHelper('MiningTaxesLedger');
//Set the task as started
$task->SetStartStatus();
//Get the site configuration which holds some data we need
$config = config('esi');
//Get the observers from the database
$observers = Observer::all();
//Job Variables to be moved later
$esiHelper = new Esi;
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$esiHelper = new Esi;
/*
//For each of the observers, send a job to fetch the mining ledger
foreach($observers as $obs) {
//Dispatch the mining taxes ledger jobs
FetchMiningTaxesLedgersJob::dispatch($config['primary'], $config['corporation'], $obs->observer_id)->onQueue('miningtaxes');
}
*/
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
foreach($observers as $obs) {
try {
$response = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $config['corporation'],
'observer_id' => $obs->observer_id,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get the mining ledger in FetchMiningTaxesLedgersCommand for observer id: ' . $this->observerId);
return null;
}
$ledgers = json_decode($response->raw);
foreach($ledgers as $ledger) {
//Get some basic information we need to work with
$charName = $lookup->CharacterIdToName($ledger->character_id);
//Get the type name from the ledger ore stuff
$typeName = $lookup->ItemIdToName($ledger->type_id);
//Get the price from the helper function
$price = $mHelper->CalculateOrePrice($ledger->type_id);
//Calculate the total price based on the amount
$amount = $price * $ledger->quantity;
//Insert or update the entry in the database
$item = Ledger::updateOrCreate([
'character_id' => $ledger->character_id,
'character_name' => $charName,
'observer_id' => $obs->observer_id,
'last_updated' => $ledger->last_updated,
'type_id' => $ledger->type_id,
'ore_name' => $typeName,
'quantity' => $ledger->quantity,
'amount' => $amount,
], [
'character_id' => $ledger->character_id,
'character_name' => $charName,
'observer_id' => $obs->observer_id,
'last_updated' => $ledger->last_updated,
'type_id' => $ledger->type_id,
'ore_name' => $typeName,
'quantity' => $ledger->quantity,
'amount' => $amount,
]);
}
}
//Clean up old data
//Ledger::where(['updated_at', '<', Carbon::now()->subDays(120)])->delete();
//Return 0
return 0;
}
}

View File

@@ -0,0 +1,119 @@
<?php
namespace App\Console\Commands\MiningTaxes;
//Internal Library
use Illuminate\Console\Command;
use Log;
use Commands\Library\CommandHelper;
use Carbon\Carbon;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
//App Models
use App\Models\MiningTax\Observer;
//Jobs
use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesObserversJob;
class MiningTaxesObservers extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'MiningTax:Observer';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get mining tax observers.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//Create the command helper container
$task = new CommandHelper('MiningTaxesObservers');
//Set the task as started
$task->SetStartStatus();
$startTime = time();
//Declare variables
$config = config('esi');
$lookup = new LookupHelper;
$esiHelper = new Esi;
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
Log::critical('Esi scopes were not found for FetchMiningTaxesObserversJob.');
print("Esi scopes not found.");
return;
}
$char = $lookup->GetCharacterInfo($config['primary']);
//Get the refresh token for the character
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Get the esi variable
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
try {
$response = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $char->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::critical("Failed to get moon observers in FetchMiningTaxesObservers");
Log::critical($e);
dd($e);
}
$resp = json_decode($response->raw, false);
//Run through the mining observers, and add them to the database
foreach($resp as $observer) {
Observer::updateOrInsert([
'observer_id' => $observer->observer_id,
], [
'observer_id' => $observer->observer_id,
'observer_type' => $observer->observer_type,
'last_updated' => $observer->last_updated,
]);
}
/**
* Cleanup stale data that hasn't been updated in at least 1 week.
*/
$date = Carbon::now()->subDays(60);
Observer::where('last_updated', '<', $date)->delete();
$task->SetStopStatus();
$endTime = time();
printf("Time to complete: " . ($endTime - $startTime) . "\n\r");
//Return 0 saying everything is fine
return 0;
}
}

View File

@@ -0,0 +1,152 @@
<?php
namespace App\Console\Commands\MiningTaxes;
//Internal Library
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
//Application Library
use Commands\Library\CommandHelper;
use App\Library\Lookup\LookupHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
//Models
use App\Models\MiningTaxes\Invoice;
use App\Models\MiningTaxes\Payment;
use App\Models\Finances\PlayerDonationJournal;
//Jobs
use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesPaymentsJob;
class MiningTaxesPayments extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'MiningTax:Payments';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process mining tax payments';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//Create the command helper container
$task = new CommandHelper('MiningTaxesPayments');
//Set the task as started
$task->SetStartStatus();
//Declare variables for the function
$lookup = new LookupHelper;
$currentTime = Carbon::now();
$config = config('esi');
$esiHelper = new Esi;
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-contracts.read_corporation_contracts.v1')) {
Log::critical('Esi scopes were not found for MiningTaxesPayments');
print("Esi scope not found.");
return;
}
//Get the refresh token
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Get the esi variable
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Get all of the contracts from esi
try {
$response = $esi->invoke('get', '/corporations/{corporation_id}/contracts/', [
'corporation_id' => $config['corporation'],
]);
} catch(RequestFailedException $e) {
Log::critical("Failed to get contrcts in MiningTaxesPayments command.");
Log::critical($e);
dd($e);
}
//Decode the contracts from the json response
$contracts = json_decode($response->raw, false);
//Get the outstanding invoices
$outstanding = Invoice::where([
'status' => 'Pending',
])->get();
//Use the player donation and the journal in order to check over the pending contracts to attempt
//to pay the contract
foreach($outstanding as $invoice) {
//See if we have a reason with the correct uniqid from the player donation journal
$found = PlayerDonationJournal::where([
'reason' => "MMT: " . $invoice->invoice_id,
])->count();
if($found == 1) {
//If the bill is paid on time, then update the invoice as such
if($currentTime->lessThanOrEqualTo($invoice->due_date)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid',
]);
}
//If the bill is paid late, then update the invoice as such
if($currentTime->greaterThan($invoice->due_date)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
} else {
//If we didn't found a journal entry, then we shall check the contracts for a correct entry
foreach($contracts as $contract) {
if(($contract->title == ("MMT: " . $invoice->invoice_id)) && ($currentTime->lessThanOrEqualTo($invoice->due_date))) {
Invoice::where([
'invoice_i' => $invoice->invoice_id,
])->update([
'stauts' => 'Paid'
]);
}
if(($contract->title == ("MMT: " . $invoice_id)) && ($currentTime->greaterThan($invoice->due_date))) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
}
}
}
//Set the task as stopped
$task->SetStopStatus();
return 0;
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Console\Commands\Structures;
use Illuminate\Console\Command;
use App\Jobs\Commands\Assets\FetchAllianceAssets as FAA;
class ExecuteFetchAllianceAssetsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'structure:assets';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute fetch alliance command.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
FAA::dispatch();
return 0;
}
}

View File

@@ -4,23 +4,24 @@ namespace App\Console\Commands\Structures;
use Illuminate\Console\Command;
use App\Jobs\Commands\Structures\FetchAllianceStructures as FAS;
//Job
use App\Jobs\Commands\Structures\ProcessStructureJob;
class ExecuteFetchAllianceStructuresCommand extends Command
class GetStructuresCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'structure:structure';
protected $signature = 'services:GetStructures';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Fetch alliance structures command.';
protected $description = 'Get the list of structures ';
/**
* Create a new command instance.
@@ -35,12 +36,18 @@ class ExecuteFetchAllianceStructuresCommand extends Command
/**
* Execute the console command.
*
* @return int
* @return mixed
*/
public function handle()
{
FAS::dispatch();
//Get the esi config
$config = config('esi');
return 0;
//Declare some variables
$charId = $config['primary'];
$corpId = 98287666;
//Dispatch the job to be done when the application has time
ProcessStructureJob::dispatch($charId, $corpId);
}
}

View File

@@ -6,20 +6,8 @@ namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
//Jobs
use App\Jobs\Commands\MiningTaxes\PreFetchMiningTaxesLedgers;
use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesObservers;
use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesPayments;
use App\Jobs\Commands\MiningTaxes\SendMiningTaxesInvoices;
use App\Jobs\Commands\MiningTaxes\UpdateMiningTaxesLateInvoices1st;
use App\Jobs\Commands\MiningTaxes\UpdateMiningTaxesLateInvoices15th;
use App\Jobs\Commands\Finances\UpdateAllianceWalletJournalJob;
use App\Jobs\Commands\Finances\UpdateItemPrices as UpdateItemPricesJob;
use App\Jobs\Commands\Data\PurgeUsers as PurgeUsersJob;
use App\Jobs\Commands\Structures\FetchAllianceStructures;
use App\Jobs\Commands\Structures\PurgeAllianceStructures;
use App\Jobs\Commands\Assets\FetchAllianceAssets;
use App\Jobs\Commands\Assets\PurgeAllianceAssets;
//Library
use Commands\Library\CommandHelper;
class Kernel extends ConsoleKernel
{
@@ -29,17 +17,28 @@ class Kernel extends ConsoleKernel
* @var array
*/
protected $commands = [
/**
* Data Commands
*/
Commands\Data\PurgeUsers::class,
Commands\Data\EmptyJumpBridges::class,
Commands\Data\CleanStaleDataCommand::class,
Commands\Data\Test::class,
/**
* Eve Commands
*/
Commands\Eve\ItemPricesUpdateCommand::class,
/**
* Finance Commands
*/
Commands\Finances\UpdateAllianceWalletJournal::class,
Commands\MiningTaxes\ExecuteMiningTaxesObserversCommand::class,
Commands\MiningTaxes\ExecuteMiningTaxesLedgersCommand::class,
Commands\MiningTaxes\ExecuteSendMiningTaxesInvoiceCommand::class,
Commands\MiningTaxes\ExecuteProcesssMiningTaxesPaymentsCommand::class,
Commands\Structures\ExecuteFetchAllianceStructuresCommand::class,
Commands\Structures\ExecuteFetchAllianceAssetsCommand::class,
Commands\Files\ImportAllianceMoons::class,
/**
* Mining Tax Commands
*/
Commands\MiningTaxes\MiningTaxesInvoices::class,
Commands\MiningTaxes\MiningTaxesLedgers::class,
Commands\MiningTaxes\MiningTaxesObservers::class,
Commands\MiningTaxes\MiningTaxesPayments::class,
];
/**
@@ -50,71 +49,50 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
//Schedule Monitor Jobs
$schedule->command('schedule-monitor:sync')->dailyAt('04:56');
$schedule->command('schedule-monitor:clean')->daily();
//Horizon Graph Schedule
$schedule->command('horizon:snapshot')->everyFiveMinutes();
/**
* Purge Data Schedule
*/
$schedule->job(new PurgeUsersJob)
->weekly();
$schedule->command('data:CleanData')
->weekly(7, '11:00');
$schedule->command('data:PurgeCorpLedgers')
->monthly();
$schedule->command('data:PurgeUsers')
->dailyAt('23:00');
/**
* Finances Update Schedule
*/
$schedule->job(new UpdateAllianceWalletJournalJob)
$schedule->command('finances:UpdateJournals')
->hourlyAt('45')
->withoutOverlapping();
/**
* Item Update Schedule
*/
$schedule->job(new UpdateItemPricesJob)
->hourlyAT('30')
$schedule->command('services:ItemPriceUpdate')
->hourlyAt('30')
->withoutOverlapping();
/**
* Mining Tax Schedule
*/
$schedule->job(new FetchMiningTaxesObservers)
$schedule->command('MiningTaxes:Observers')
->dailyAt('22:00')
->withoutOverlapping();
$schedule->job(new PreFetchMiningTaxesLedgers)
$schedule->command('MiningTaxes:Ledgers')
->dailyAt('20:00')
->withoutOverlapping();
$schedule->job(new SendMiningTaxesInvoices)
->weeklyOn(1, '06:00')
/*
$schedule->command('MiningTaxes:Invoices')
->weeklyOn(1, '8:00')
->withoutOverlapping();
$schedule->job(new ProcessMiningTaxesPayments)
$schedule->command('MiningTaxes:Payments')
->hourlyAt('15')
->withoutOverlapping();
$schedule->job(new UpdateMiningTaxesLateInvoices1st)
->monthlyOn(1, '16:00')
->withoutOverlapping();
$schedule->job(new UpdateMiningTaxesLateInvoices15th)
->monthlyOn(15, '16:00')
->withoutOverlapping();
*/
/**
* Alliance Structure and Assets Schedule
*/
$schedule->job(new FetchAllianceStructures)
->dailyAt('21:00')
->withoutOverlapping();
$schedule->job(new FetchAllianceAssets)
->hourlyAt('15')
->withoutOverlapping();
$schedule->job(new PurgeAllianceStructures)
->monthlyOn(2, '14:00')
->withoutOverlapping();
$schedule->job(new PurgeAllianceAssets)
->monthlyOn(2, '15:00')
->withoutOverlapping();
}
/**
@@ -128,14 +106,4 @@ class Kernel extends ConsoleKernel
require base_path('routes/console.php');
}
/**
* Get the timezone that should be used by default for scheduled events.
*
* @return \DateTimeZone|string|null
*/
protected function scheduleTimezone()
{
return 'UTC';
}
}

View File

@@ -5,11 +5,10 @@ namespace App\Http\Controllers\AfterActionReports;
//Internal Library
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
//Models
use App\Models\AfterActionReports\AfterActionReport;
use App\Models\AfterActionReports\AfterActionReportComment;
use App\Models\AfterActionReports\Report;
use App\Models\AfterActionReports\Comment;
class AfterActionReportsController extends Controller
{
@@ -19,69 +18,18 @@ class AfterActionReportsController extends Controller
}
public function DisplayReportForm() {
return view('reports.user.form.report');
//
}
public function StoreReport(Request $request) {
$this->validate($request, [
'location' => 'required',
'time' => 'required',
'comms' => 'required',
'doctrine' => 'required',
'objective' => 'required',
'result' => 'required',
'summary' => 'required',
'improvements' => 'required',
'well' => 'required',
'comments' => 'required',
]);
$report = new Report;
$report->fc_id = auth()->user()->getId();
$report->fc_name = auth()->user()->getName();
$report->formup_time = $request->time;
$report->formup_location = $request->location;
$report->comms = $request->comms;
$report->doctrine = $request->doctrine;
$report->objective = $request->objective;
$report->objective_result = $request->result;
$report->summary = $request->summary;
$report->improvements = $request->improvements;
$report->worked_well = $request->well;
$report->additonal_comments = $request->comments;
$report->save();
public function StoreReport() {
return redirect('/reports/display/all')->with('success', 'Added report to the database.');
}
public function DisplayCommentForm($id) {
return view('reports.user.form.comment')->with('id', $id);
}
public function StoreComment() {
public function StoreComment(Request $request) {
$this->validate($request, [
'reportId' => 'required',
'comments' => 'required',
]);
$comment = new AfterActionReportComment;
$comment->report_id = $request->reportId;
$comment->character_id = auth()->user()->getId();
$comment->character_name = auth()->user()->getName();
$comment->comments = $required->comments;
$comment->save();
return redirect('/reports/display/all')->with('success', 'Added comemnt to the report.');
}
public function DisplayAllReports() {
//Grab all the reports
$reports = AfterActionReport::where('created_at', '>=', Carbon::now()->subDays(30));
$comments = AfterActionReportComment::where('created_at', '>=', Carbon::now()->subDays(30));
$reportCount = AfterActionReport::where('created_at', '>=', Carbon::now()->subDays(30))->count();
return view('reports.user.displayreports')->with('reports', $reports)
->with('comments', $comments)
->with('reportCount', $reportCount);
}
}

View File

@@ -77,8 +77,7 @@ class LoginController extends Controller
*/
public function redirectToProvider($profile = null, Socialite $social) {
//The default scope is public data for everyone due to OAuth2 Tokens
//We also add the send mail scope in order to be able to send mails more efficiently through jobs when other scopes are required.
$scopes = ['publicData', 'esi-mail.send_mail.v1'];
$scopes = ['publicData'];
//Collect any other scopes we need if we are logged in.
//If we are logged in we are linking another character to this one.
@@ -160,14 +159,9 @@ class LoginController extends Controller
* @param \Laravel\Socialite\Two\User $user
*/
private function createAlt($user, $orgCharacter) {
//Check to see if the alt is already in the database
$altCount = UserAlt::where(['character_id' => $user->id])->count();
//Check to see if the new character being added is already a main character
$mainCount = User::where(['character_id' => $user->id])->count();
//If not already in the database, then add the new character
if($altCount == 0 && $mainCount == 0) {
$altCount = UserAlt::where('character_id', $user->id)->count();
if($altCount == 0) {
//Create the new alt in the table
$newAlt = new UserAlt;
$newAlt->name = $user->getName();
@@ -180,6 +174,7 @@ class LoginController extends Controller
$newAlt->expires_in = $user->expiresIn;
$newAlt->save();
//Create the entry into the EsiToken table
//Create the entry into the EsiToken table
if(EsiToken::where(['character_id' => $user->id])->count() == 0) {
$this->SaveEsiToken($user);

View File

@@ -16,7 +16,7 @@ use App\Models\Contracts\SupplyChainBid;
use App\Models\Contracts\SupplyChainContract;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
use App\Jobs\Commands\Eve\ProcessSendEveMailJob;
class SupplyChainController extends Controller
{
@@ -454,7 +454,7 @@ class SupplyChainController extends Controller
$body .= "Notes: " . $contract->body . "<br>";
$body .= "Delivery Date: " . $contract->delivery_date . "<br>";
$body .= "<br>Sincerely on behalf of,<br>" . $contract->issuer_name . "<br>";
SendEveMail::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->delay(Carbon::now()->addSeconds(30));
ProcessSendEveMailJob::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(30));
}
/**
@@ -469,7 +469,7 @@ class SupplyChainController extends Controller
$body .= "Contract: " . $contract->title . "<br>";
$body .= "Notes: " . $contract->note . "<br>";
$body .= "<br>Sincerely on behalf of,<br>" . $contract->issuer_name;
SendEveMail::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->delay(Carbon::now()->addSeconds(30));
ProcessSendEveMailJob::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(30));
}
/**

View File

@@ -0,0 +1,335 @@
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use Carbon\Carbon;
//Libraries
use App\Library\Helpers\TaxesHelper;
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\SRPHelper;
//Models
use App\Models\User\User;
use App\Models\User\UserRole;
use App\Models\User\UserPermission;
use App\Models\User\AvailableUserPermission;
use App\Models\User\AvailableUserRole;
use App\Models\Admin\AllowedLogin;
class AdminController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Admin');
}
public function displayTestAdminDashboard() {
return view('admin.dashboards.testdashboard');
}
public function showJournalEntries() {
$dateInit = Carbon::now();
$date = $dateInit->subDays(30);
$journal = DB::select('SELECT amount,reason,description,date FROM `player_donation_journal` WHERE corporation_id=98287666 AND date >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH) ORDER BY date DESC');
return view('admin.dashboards.walletjournal')->with('journal', $journal);
}
public function displayUsersPaginated() {
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
$usersArr = User::orderBy('name', 'asc')->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.userspaged')->with('usersArr', $usersArr);
}
public function searchUsers(Request $request) {
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
//Validate the input from the form
$this->validate($request, [
'parameter' => 'required',
]);
$usersArr = User::where('name', 'like', $request->parameter . "%")->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.users.searched')->with('usersArr', $usersArr);
}
public function displayAllowedLogins() {
//Declare array variables
$entities = array();
/** Entities for allowed logins */
$legacys = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_name')->toArray();
$renters = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_name')->toArray();
//Compile a list of entities by their entity_id
foreach($legacys as $legacy) {
$entities[] = $legacy;
}
foreach($renters as $renter) {
$entities[] = $renter;
}
return view('admin.dashboards.allowed_logins')->with('entities', $entities);
}
public function displayTaxes() {
//Declare variables needed for displaying items on the page
$months = 3;
$pi = array();
$industry = array();
$reprocessing = array();
$office = array();
$corpId = 98287666;
$srpActual = array();
$srpLoss = array();
/** Taxes Pane */
//Declare classes needed for displaying items on the page
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
//Get the dates for the tab panes
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the Taxes Pane
foreach($dates as $date) {
//Get the srp actual pay out for the date range
$srpActual[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPActual($date['start'], $date['end']), 2, ".", ","),
];
//Get the srp loss value for the date range
$srpLoss[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPLoss($date['start'], $date['end']), 2, ".", ","),
];
//Get the pi taxes for the date range
$pis[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetPIGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the industry taxes for the date range
$industrys[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetIndustryGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the reprocessing taxes for the date range
$reprocessings[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetReprocessingGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the office taxes for the date range
$offices[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetOfficeGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the market taxes for the date range
$markets[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetAllianceMarketGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the jump gate taxes for the date range
$jumpgates[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetJumpGateGross($date['start'], $date['end']), 2, ".", ","),
];
}
return view('admin.dashboards.taxes')->with('pis', $pis)
->with('industrys', $industrys)
->with('offices', $offices)
->with('markets', $markets)
->with('jumpgates', $jumpgates)
->with('reprocessings', $reprocessings)
->with('srpActual', $srpActual)
->with('srpLoss', $srpLoss);
}
public function displayModifyUser(Request $request) {
$permissions = array();
$name = $request->user;
//Get the user information from the name
$user = User::where(['name' => $name])->first();
$perms = AvailableUserPermission::all();
foreach($perms as $p) {
$permissions[$p->permission] = $p->permission;
}
$roles = AvailableUserRole::all();
$role = $user->getRole();
//Pass the user information to the page for hidden text entries
return view('admin.user.modify')->with('user', $user)
->with('permissions', $permissions)
->with('role', $role)
->with('roles', $roles);
}
public function modifyRole(Request $request) {
$this->validate($request, [
'user' => 'required',
'role' => 'required|role!=None',
]);
UserRole::where(['character_id' => $user])->update([
'role' => $request->role,
]);
return redirect('/admin/dashboard/users')->with('success', "User: " . $user . " has been modified to a new role: " . $request->role . ".");
}
public function addPermission(Request $request) {
//Get the user and permission from the form
$character = $request->user;
$permission = $request->permission;
//Check to see if the character already has the permission
$check = UserPermission::where(['character_id' => $character, 'permission' => $permission])->get(['permission']);
if(!isset($check[0]->permission)) {
$perm = new UserPermission;
$perm->character_id = $character;
$perm->permission = $permission;
$perm->save();
return redirect('/admin/dashboard/users')->with('success', 'User udpated!');
} else {
return redirect('/admin/dashboard/users')->with('error', 'User not updated or already has the permission.');
}
}
public function removeUser(Request $request) {
//Get the user from the form to delete
$user = $request->user;
//Get the user data from the table
$data = User::where(['name' => $user])->get();
//Delete the user's ESI Scopes
DB::table('EsiScopes')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's ESI Token
DB::table('EsiTokens')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's role from the roles table
DB::table('user_roles')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user from the user table
DB::table('users')->where(['character_id' => $data[0]->character_id])->delete();
return redirect('/admin/dashboard/users')->with('success', 'User deleted from the site.');
}
public function addAllowedLogin(Request $request) {
//Set the parameters to validate the form
$this->validate($request, [
'allowedEntityId' => 'required',
'allowedEntityType' => 'required',
'allowedEntityName' => 'required',
'allowedLoginType' => 'required',
]);
//Check to see if the entity exists in the database already
$found = AllowedLogin::where([
'entity_type' => $request->allowedentityType,
'entity_name' => $request->allowedEntityName,
])->count();
if($found != 0) {
AllowedLogin::where([
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
])->update([
'entity_id' => $request->allowedEntityId,
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
'login_type' => $request->allowedLoginType,
]);
} else {
$login = new AllowedLogin;
$login->entity_id = $request->allowedEntityId;
$login->entity_name = $request->allowedEntityName;
$login->entity_type = $request->allowedEntityType;
$login->login_type = $request->allowedLoginType;
$login->save();
}
return redirect('/admin/dashboard')->with('success', 'Entity added to allowed login list.');
}
public function removeAllowedLogin(Request $request) {
//Set the parameters to validate the form
$this->validate($request, [
'removeAllowedLogin' => 'required',
]);
AllowedLogin::where([
'entity_name' => $request->removeAllowedLogin,
])->delete();
return redirect('/admin/dashboard')->with('success', 'Entity removed from allowed login list.');
}
}

View File

@@ -15,13 +15,7 @@ use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\SRPHelper;
//Models
use App\Models\User\User;
use App\Models\User\UserRole;
use App\Models\User\UserPermission;
use App\Models\User\AvailableUserPermission;
use App\Models\User\AvailableUserRole;
use App\Models\Admin\AllowedLogin;
use App\Models\Finances\AllianceWalletJournal;
class AdminDashboardController extends Controller
{
@@ -33,7 +27,7 @@ class AdminDashboardController extends Controller
public function __construct()
{
$this->middleware('auth');
$this->middleware('role:Admin');
$this->middleware('role:User');
}
/**
@@ -49,361 +43,4 @@ class AdminDashboardController extends Controller
return view('admin.dashboards.dashboard');
}
/**
* Display users in a paginated format
*/
public function displayUsersPaginated() {
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
$usersArr = User::orderBy('name', 'asc')->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.userspaged')->with('usersArr', $usersArr);
}
/**
* Search users for a specific user
*/
public function searchUsers(Request $request) {
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
//Validate the input from the form
$this->validate($request, [
'parameter' => 'required',
]);
$usersArr = User::where('name', 'like', $request->parameter . "%")->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.users.searched')->with('usersArr', $usersArr);
}
/**
* Display the allowed logins
*/
public function displayAllowedLogins() {
//Declare array variables
$entities = array();
/** Entities for allowed logins */
$legacys = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_name')->toArray();
$renters = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_name')->toArray();
//Compile a list of entities by their entity_id
foreach($legacys as $legacy) {
$entities[] = $legacy;
}
foreach($renters as $renter) {
$entities[] = $renter;
}
return view('admin.dashboards.allowed_logins')->with('entities', $entities);
}
/**
* Display the taxes for the alliance
*
*/
public function displayTaxes() {
//Declare variables needed for displaying items on the page
$months = 3;
$pi = array();
$industry = array();
$reprocessing = array();
$office = array();
$corpId = 98287666;
$srpActual = array();
$srpLoss = array();
$miningTaxes = array();
$miningTaxesLate = array();
/** Taxes Pane */
//Declare classes needed for displaying items on the page
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
//Get the dates for the tab panes
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the Taxes Pane
foreach($dates as $date) {
//Get the srp actual pay out for the date range
$srpActual[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPActual($date['start'], $date['end']), 2, ".", ","),
];
//Get the srp loss value for the date range
$srpLoss[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPLoss($date['start'], $date['end']), 2, ".", ","),
];
//Get the pi taxes for the date range
$pis[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetPIGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the industry taxes for the date range
$industrys[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetIndustryGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the reprocessing taxes for the date range
$reprocessings[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetReprocessingGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the office taxes for the date range
$offices[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetOfficeGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the market taxes for the date range
$markets[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetAllianceMarketGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the jump gate taxes for the date range
$jumpgates[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetJumpGateGross($date['start'], $date['end']), 2, ".", ","),
];
$miningTaxes[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonMiningTaxesGross($date['start'], $date['end']), 2, ".", ","),
];
$miningTaxesLate[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonMiningTaxesLateGross($date['start'], $date['end']), 2, ".", ","),
];
}
return view('admin.dashboards.taxes')->with('pis', $pis)
->with('industrys', $industrys)
->with('offices', $offices)
->with('markets', $markets)
->with('jumpgates', $jumpgates)
->with('reprocessings', $reprocessings)
->with('srpActual', $srpActual)
->with('srpLoss', $srpLoss)
->with('miningTaxes', $miningTaxes)
->with('miningTaxesLate', $miningTaxesLate);
}
/**
* Display the modify user form
*/
public function displayModifyUser(Request $request) {
$permissions = array();
$roles = array();
$name = $request->user;
//Get the user information from the name
$user = User::where(['name' => $name])->first();
$perms = AvailableUserPermission::all();
foreach($perms as $p) {
$permissions[$p->permission] = $p->permission;
}
$tempRoles = AvailableUserRole::all();
foreach($tempRoles as $tempRole) {
array_push($roles, [
$tempRole['role'] => $tempRole['role']
]);
}
$role = $user->getRole();
//Pass the user information to the page for hidden text entries
return view('admin.user.modify')->with('user', $user)
->with('permissions', $permissions)
->with('role', $role)
->with('roles', $roles);
}
/**
* Modify a user's role
*/
public function modifyRole(Request $request) {
$this->validate($request, [
'user' => 'required',
'role' => 'required',
]);
UserRole::where(['character_id' => $request->user])->update([
'role' => $request->role,
]);
return redirect('/admin/dashboard/users')->with('success', "User: " . $request->user . " has been modified to a new role: " . $request->role . ".");
}
public function addPermission(Request $request) {
//Get the user and permission from the form
$character = $request->user;
$permission = $request->permission;
//Check to see if the character already has the permission
$check = UserPermission::where(['character_id' => $character, 'permission' => $permission])->get(['permission']);
if(!isset($check[0]->permission)) {
$perm = new UserPermission;
$perm->character_id = $character;
$perm->permission = $permission;
$perm->save();
return redirect('/admin/dashboard/users')->with('success', 'User udpated!');
} else {
return redirect('/admin/dashboard/users')->with('error', 'User not updated or already has the permission.');
}
}
/**
* Delete a user to reset their permissions
*/
public function removeUser(Request $request) {
//Get the user from the form to delete
$user = $request->user;
//Get the user data from the table
$data = User::where(['name' => $user])->get();
//Delete the user's ESI Scopes
DB::table('EsiScopes')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's ESI Token
DB::table('EsiTokens')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's role from the roles table
DB::table('user_roles')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user from the user table
DB::table('users')->where(['character_id' => $data[0]->character_id])->delete();
return redirect('/admin/dashboard/users')->with('success', 'User deleted from the site.');
}
/**
* Add an entity to the allowed login table
*/
public function addAllowedLogin(Request $request) {
//Set the parameters to validate the form
$this->validate($request, [
'allowedEntityId' => 'required',
'allowedEntityType' => 'required',
'allowedEntityName' => 'required',
'allowedLoginType' => 'required',
]);
//Check to see if the entity exists in the database already
$found = AllowedLogin::where([
'entity_type' => $request->allowedentityType,
'entity_name' => $request->allowedEntityName,
])->count();
if($found != 0) {
AllowedLogin::where([
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
])->update([
'entity_id' => $request->allowedEntityId,
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
'login_type' => $request->allowedLoginType,
]);
} else {
$login = new AllowedLogin;
$login->entity_id = $request->allowedEntityId;
$login->entity_name = $request->allowedEntityName;
$login->entity_type = $request->allowedEntityType;
$login->login_type = $request->allowedLoginType;
$login->save();
}
return redirect('/admin/dashboard')->with('success', 'Entity added to allowed login list.');
}
/**
* Remove an entity from the allowed login table
*/
public function removeAllowedLogin(Request $request) {
//Set the parameters to validate the form
$this->validate($request, [
'removeAllowedLogin' => 'required',
]);
AllowedLogin::where([
'entity_name' => $request->removeAllowedLogin,
])->delete();
return redirect('/admin/dashboard')->with('success', 'Entity removed from allowed login list.');
}
/**
* Show journal entries in a table for admins from alliance wallets
*/
public function displayJournalEntries() {
$date = Carbon::now()->subDays(60);
$journal = AllianceWalletJournal::where('date', '>=', $date)
->where([
'corporation_id' => 98287666,
'ref_type' => 'player_donation',
])->orderByDesc('date',)->get(['amount', 'reason', 'description', 'date']);
return view('admin.dashboards.walletjournal')->with('journal', $journal);
}
}

View File

@@ -83,6 +83,6 @@ class FuelController extends Controller
]);
return view('logistics.fuel')->with('jumpGates', $jumpGates)
->with('lava', $lava);
->with('lava', $lava);
}
}

View File

@@ -33,27 +33,6 @@ class MiningTaxesAdminController extends Controller
$this->middleware('role:Admin');
}
/**
* Display the page to setup the form for corporations to rent a moon
*/
public function DisplayMoonRentalForm() {
}
/**
* Store the details for the form for corporations renting a specific moon
*/
public function StoreMoonRentalForm() {
}
/**
* Remove a moon from being rented from a specific corporation
*/
public function DeleteMoonRental(Request $request) {
}
/**
* Display current unpaid invoices
*/
@@ -64,51 +43,11 @@ class MiningTaxesAdminController extends Controller
'status' => 'Late',
])->orWhere([
'status' => 'Deferred',
])->orderByDesc('invoice_id')->paginate(50);
$totalAmount = Invoice::where([
'status' => 'Pending',
])->orWhere([
'status' => 'Late',
])->orWhere([
'status' => 'Deferred',
])->sum('invoice_amount');
])->paginate(50);
return view('miningtax.admin.display.unpaid')->with('invoices', $invoices);
}
/**
* Search unpaid invoices
*/
public function SearchUnpaidInvoice(Request $request) {
$invoices = Invoice::where('invoice_id', 'LIKE', '%' . $request->q . '%')
->where(['status' => 'Pending'])
->orWhere(['status' => 'Late'])
->orWhere(['status' => 'Deferred'])
->orderByDesc('invoice_id')
->paginate(25);
if(count($invoices) > 0) {
return view('miningtax.admin.display.unpaid')->with('invoices', $invoices);
}
return view('miningtax.admin.display.unpaid')->with('error', 'No invoices found');
}
/**
* Display page to modify an unpaid invoice
*/
public function DisplayModifyInvoice() {
}
/**
* Modify an unpaid invoice
*/
public function ProcessModifyInvoice() {
}
/**
* Mark an invoice paid
*/
@@ -137,13 +76,6 @@ class MiningTaxesAdminController extends Controller
'status' => 'Paid Late',
])->paginate(50);
$totalAmount = Invoice::where([
'status' => 'Paid',
])->orWhere([
'status' => 'Paid Late',
])->sum('invoice_amount');
return view('miningtax.admin.display.paidinvoices')->with('invoices', $invoices)
->with('totalAmount', $totalAmount);
return view('miningtax.admin.display.paidinvoices')->with('invoices', $invoices);
}
}

View File

@@ -5,7 +5,6 @@ namespace App\Http\Controllers\MiningTaxes;
//Internal Library
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use Log;
use Carbon\Carbon;
use Khill\Lavacharts\Lavacharts;
@@ -40,38 +39,6 @@ class MiningTaxesController extends Controller
$this->middleware('role:User');
}
/**
* Display an invoice based on it's id
*
* @var $invoiceId
*/
public function DisplayInvoice($invoiceId) {
$ores = array();
$totalPrice = 0.00;
$invoice = Invoice::where([
'invoice_id' => $invoiceId,
])->first();
$items = Ledger::where([
'character_id' => auth()->user()->getId(),
'invoice_id' => $invoice,
])->get();
foreach($items as $item) {
if(!isset($ores[$item['ore_name']])) {
$ores[$item['ore_name']] = 0;
}
$ores[$item['ore_name']] = $ores[$item['ore_name']] + $item['quantity'];
$totalPrice += $item['amount'];
}
return view('miningtax.user.display.details.invoice')->with('ores', $ores)
->with('invoice', $invoice)
->with('totalPrice', $totalPrice);
}
/**
* Display the users invoices
*/
@@ -106,12 +73,12 @@ class MiningTaxesController extends Controller
//Total up the unpaid invoices
foreach($unpaid as $un) {
$unpaidAmount += $un->invoice_amount;
$unpaidAmount += $un->amount;
}
//Total up the paid invoices
foreach($paid as $p) {
$paidAmount += $p->invoice_amount;
$paidAmount += $p;
}
return view('miningtax.user.display.invoices')->with('unpaid', $unpaid)
@@ -245,6 +212,7 @@ class MiningTaxesController extends Controller
$esiHelper = new Esi;
$lookup = new LookupHelper;
$config = config('esi');
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
@@ -260,46 +228,46 @@ class MiningTaxesController extends Controller
//Setup the esi container
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Declare the structure helper after the esi container has been created
$sHelper = new StructureHelper($config['primary'], $config['corporation'], $esi);
//Get the character data from the lookup table if possible or esi
$character = $lookup->GetCharacterInfo($config['primary']);
//Get the corporation information from the character id
$corpInfo = $lookup->GetCorporationInfo($character->corporation_id);
//Get the observers from the database
$observers = Observer::all();
$corpInfo = $lookup->GetCorporationInfo(auth()->user()->getId());
//Get the ledgers for each structure one at a time
foreach($observers as $obs) {
//Get the structure information
$structureInfo = $sHelper->GetStructureInfo($obs->observer_id);
//Add the name to the structures array
array_push($structures, $structureInfo->name);
/**
* Get the ledger from each observer.
* We don't care about observer type as it can only be an Athanor or Tatara
*/
$ledgers = Ledger::where([
'observer_id' => $obs->observer_id,
'observer_id' => $obs->structure_id,
'character_id' => auth()->user()->getId(),
])->where('last_updated', '>=', Carbon::now()->subDays(30))->get();
if($ledgers->count() > 0) {
if($ledgers != null) {
foreach($ledgers as $ledger) {
//Foreach ledger add it to the array
//Get the structure name from the database
$structure = $sHelper->GetStructureInfo($obs->observer_id);
array_push($miningLedgers, [
'structure' => $structureInfo->name,
'structure' => $structure->name,
'character' => auth()->user()->getName(),
'corpTicker' => $corpInfo->ticker,
'ore' => $ledger->ore_name,
'ore' => $ore,
'quantity' => $ledger->quantity,
'updated' => $ledger->last_updated,
]);
array_push($structures, [
'name' => $structure->name,
]);
}
} else {
redirect('/dashboard')->with('error', 'No available data for the mining ledger to be displayed.');
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Http\Controllers\MoonRental;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Log;
class MoonRentalAdminController extends Controller
{
//Constructor
public function __construct() {
$this->middleware('role:Admin');
$this->middleware('permission:moon.rental.manager');
}
/**
* Display rental requests
*/
public function displayRentalRequests() {
}
/**
* Create monthly moon rental
*/
public function storeRentalRequest() {
}
/**
* Delete / remove monthly moon rental
*/
public function updateRentalRequest() {
}
/**
* Display current monthly moon rentals
*/
public function displayCurrentRentals() {
}
}

View File

@@ -1,48 +0,0 @@
<?php
namespace App\Http\Controllers\MoonRental;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Log;
class MoonRentalController extends Controller
{
//Constructor
public function __construct() {
$this->middleware('role:user');
}
/**
* Display all of the available moons for rental
*/
public function displayMoons() {
$moons = AllianceMoon::where([
'rented' => 'No',
])->get();
return view('moon.rental.available.display')->with('moons', $moons);
}
/**
* Display moon rental request form
*/
public function displayMoonRentalRequestForm() {
}
/**
* Store moon rental from the request form
*/
public function storeMoonRentalRequest() {
}
/**
* Request a mail job be added to the mail queue to resend mining bill instantly
*/
public function requestMoonRentalBill() {
}
}

View File

@@ -2,24 +2,10 @@
namespace App\Http\Controllers\Test;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
use App\Library\Esi\Esi;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
use App\Models\MiningTax\Observer;
use App\Models\User\UserAlt;
use App\Models\User\User;
class TestController extends Controller
{
@@ -33,149 +19,7 @@ class TestController extends Controller
return view('test.char.display')->with('char', $char);
}
public function DebugMiningTaxesInvoices() {
$lookup = new LookupHelper;
$ledgers = new Collection;
$perms = new Collection;
public function CharacterLookupTest(Request $request) {
var_dump(auth()->user()->getAlts());
dd(auth()->user()->altCount());
//Get all of the users in the database
$users = User::all();
//Get a list of the alts for each character, then process the ledgers and combine them to send one mail out
//in this first part
foreach($users as $char) {
$altCount = $char->altCount();
if($altCount > 0) {
$alts = $char->getAlts();
foreach($alts as $alt) {
$perms->push([
'main_id' => $char->character_id,
'alt_id' => $alt->character_id,
'count' => $altCount,
]);
}
} else {
$perms->push([
'main_id' => $char->character_id,
'alt_id' => null,
'count' => 0,
]);
}
}
return view('test.miningtax.invoice')->with('perms', $perms);
}
public function DebugMiningObservers() {
//Declare variables
$mailDelay = 15;
$config = config('esi');
$mains = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$mainLedgerCount = 0;
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => $row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => $row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
if($ledgers->count() > 0) {
var_dump($ledgers);
var_dump(round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2));
}
}
}
}

View File

@@ -15,7 +15,7 @@ class Authenticate extends Middleware
protected function redirectTo($request)
{
if(!$this->auth->check()){
return '/';
return route('/');
}
}
}

View File

@@ -1,10 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
abstract class Request extends FormRequest
{
//
}

View File

@@ -1,168 +0,0 @@
<?php
namespace App\Jobs\Commands\Assets;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Application Library
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
//Models
use App\Models\Structure\Asset;
class FetchAllianceAssets implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('assets');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$config = config('esi');
$corpId = 98287666;
$esiHelper = new Esi;
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($config['primary']);
//Create the esi authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
//Check the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-assets.read_corporation_assets.v1')) {
Log::critical("Scope check failed in FetchAllianceAssets for esi-assets.read_corporation_assets.v1");
}
//Set the current page
$currentPage = 1;
//Set our default pages
$totalPages = 1;
do {
//Attempt to get the assets
$assets = $esi->page($currentPage)
->invoke('get', '/corporations/{corporation_id}/assets/', [
'corporation_id' => $corpId,
]);
//If on the first page, then update the total number of pages
if($currentPage == 1) {
$totalPages = $assets->pages;
}
//For each asset retrieved, let's process it.
foreach($assets as $a) {
ProcessAllianceAssets::dispatch($a);
}
//Increment the current page
$currentPage++;
} while($currentPage <= $totalPages);
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('FetchMiningTaxesObservers has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in FetchMiningTaxesObservers. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in FetchMiningTaxesObservers at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("FetchMiningTaxesObservers has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in FetchMiningTaxesObservers. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in FetchMiningTaxesObservers. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in FetchMiningTaxesObservers.\r\n");
$this->delete();
break;
}
}
}
/**
* Tags for jobs
*
* @var array
*/
public function tags() {
return ['FetchAllianceAssets', 'AllianceStructures', 'Assets'];
}
}

View File

@@ -1,109 +0,0 @@
<?php
namespace App\Jobs\Commands\Assets;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
//Models
use App\Models\Structure\Asset;
class ProcessAllianceAssets implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
//Private variable
private $asset;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($a)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('assets');
$this->asset = $a;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
/**
* If the asset is not in the database, then let's save it to the database,
* otherwise, we just update the old asset
*/
$count = Asset::where([
'item_id' => $this->asset->item_id,
])->count();
if($count == 0) {
$as = new Asset;
if(isset($this->asset->is_blueprint_copy)) {
$as->is_blueprint_copy = $this->asset->is_blueprint_copy;
}
$as->is_singleton = $this->asset->is_singleton;
$as->item_id = $this->asset->item_id;
$as->location_flag = $this->asset->location_flag;
$as->location_id = $this->asset->location_id;
$as->location_type = $this->asset->location_type;
$as->quantity = $this->asset->quantity;
$as->type_id = $this->asset->type_id;
$as->save();
} else {
//Update the previously found asset
Asset::where([
'item_id' => $this->asset->item_id,
])->update([
'is_singleton' => $this->asset->is_singleton,
'location_flag' => $this->asset->location_flag,
'location_id' => $this->asset->location_id,
'location_type' => $this->asset->location_type,
'quantity' => $this->asset->quantity,
'type_id' => $this->asset->type_id,
]);
if(isset($this->asset->is_blueprint_copy)) {
Asset::where([
'item_id' => $this->asset->item_id,
])->update([
'is_blueprint_copy' => $this->asset->is_blueprint_copy,
]);
}
}
}
/**
* Tags for jobs
*
* @var array
*/
public function tags() {
return ['FetchAllianceAssets', 'AllianceStructures', 'Assets'];
}
}

View File

@@ -1,59 +0,0 @@
<?php
namespace App\Jobs\Commands\Assets;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Jobs
use App\Jobs\Commands\Assets\FetchAllianceAssets;
//Models
use App\Models\Structure\Asset;
class PurgeAllianceAssets implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('assets');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Asset::truncate();
FetchAllianceAssets::dispatch();
}
}

View File

@@ -1,203 +0,0 @@
<?php
namespace App\Jobs\Commands\Data;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Libraries
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
//Models
use App\Models\User\User;
use App\Models\User\UserAlt;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\User\UserPermission;
use App\Models\User\UserRole;
use App\Models\Admin\AllowedLogin;
class PurgeUsers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
//Setup the esi variable
$esi = $esiHelper->SetupEsiAuthentication();
//Get all of the users from the database
$users = User::all();
//Get the allowed logins
$legacy = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_id')->toArray();
$renter = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_id')->toArray();
//Cycle through all of the users, and either update their role, or delete them.
foreach($users as $user) {
//Set the fail bit to false for the next user to check
$failed = false;
//Note a screen entry for when doing cli stuff
printf("Processing character with id of " . $user->character_id . "\r\n");
//Get the character information
try {
$character_info = $esi->invoke('get', '/characters/{character_id}/', [
'character_id' => $user->character_id,
]);
$corp_info = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $character_info->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get character information in purge user command for user ' . $user->character_id);
$failed = true;
}
//If the fail bit is still false, then continue
if($failed === false) {
//Get the user's role
$role = UserRole::where(['character_id' => $user->character_id])->first();
//We don't want to modify Admin and SuperUsers. Admins and SuperUsers are removed via a different process.
if($role->role != 'Admin') {
//Check if the user is allowed to login
if(isset($corp_info->alliance_id)) {
//Warped Intentions is allowed to login
if($corp_info->alliance_id == '99004116') {
//If the alliance is Warped Intentions, then modify the role if we need to
if($role->role != 'User') {
//Upate the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'W4RP',
]);
}
} else if(in_array($corp_info->alliance_id, $legacy)) { //Legacy Users
if($role->role != 'User') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Legacy',
]);
}
} else if(in_array($corp_info->alliance_id, $renter)) { //Renter Users
if($role->role != 'Renter') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'Renter',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Renter',
]);
}
} else {
//If the user is part of no valid login group, then delete the user.
//Delete all of the permissions first
UserPermission::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user's role
UserRole::where([
'character_id' => $user->character_id,
])->delete();
//Delete any alts the user might have registered.
$altCount = UserAlt::where(['main_id' => $user->character_id])->count();
if($altCount > 0) {
UserAlt::where([
'main_id' => $user->character_id,
])->delete();
}
//Delete the user from the user table
User::where([
'character_id' => $user->character_id,
])->delete();
EsiScope::where([
'character_id' => $user->character_id,
])->delete();
EsiToken::where([
'character_id' => $user->character_id,
])->delete();
}
}
}
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['Data', 'PurgeUsers'];
}
}

View File

@@ -12,24 +12,10 @@ use Log;
//Library
use App\Library\Moons\MoonCalc;
class ItemPricesUpdate implements ShouldQueue
class ItemPricesUpdateJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
@@ -37,8 +23,7 @@ class ItemPricesUpdate implements ShouldQueue
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
//
}
/**
@@ -52,13 +37,4 @@ class ItemPricesUpdate implements ShouldQueue
$moonHelper->FetchNewPrices();
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['Eve', 'ItemPricesUpdate'];
}
}

View File

@@ -0,0 +1,157 @@
<?php
namespace App\Jobs\Commands\Eve;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Spatie\RateLimitedMiddleware\RateLimited;
use Log;
use Carbon\Carbon;
//Library
use App\Library\Esi\Esi;
use Seat\Eseye\Exceptions\RequestFailedException;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
//Models
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\Jobs\JobStatus;
use App\Models\Mail\SentMail;
class ProcessSendEveMailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
* With new rate limiting, we shouldn't use this timeout
* @var int
*/
//public $timeout = 3600;
/**
* Retries
* With new rate limiting, we shouldn't use this timeout
* @var int
*/
//public $retries = 3;
private $sender;
private $body;
private $recipient;
private $recipient_type;
private $subject;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($body, $recipient, $recipient_type, $subject, $sender) {
$this->body = $body;
$this->recipient = $recipient;
$this->recipient_type = $recipient_type;
$this->subject = $subject;
$this->sender = $sender;
$this->connection = 'redis';
}
/**
* Execute the job.
* Utilized by using ProcessSendEveMailJob::dispatch($mail);
* The model is passed into the dispatch function, then added to the queue
* for processing.
*
* @return void
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
//Get the esi configuration
$config = config('esi');
//Retrieve the token for main character to send mails from
$token = $esiHelper->GetRefreshToken($config['primary']);
//Create the ESI authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
//Attemp to send the mail
try {
$esi->setBody([
'approved_cost' => 100,
'body' => $this->body,
'recipients' => [[
'recipient_id' => $this->recipient,
'recipient_type' => $this->recipient_type,
]],
'subject' => $this->subject,
])->invoke('post', '/characters/{character_id}/mail/', [
'character_id'=> $this->sender,
]);
} catch(RequestFailedException $e) {
Log::warning($e);
return null;
}
$this->SaveSentRecord($this->sender, $this->subject, $this->body, $this->recipient, $this->recipient_type);
$this->delete();
}
/**
* Middleware to only allow 4 jobs to be run per minute
* After a failed job, the job is released back into the queue for at least 1 minute x the number of times attempted
*
*/
public function middleware() {
//Allow 4 jobs per minute, and implement a rate limited backoff on failed jobs
$rateLimitedMiddleware = (new RateLimited())
->allow(4)
->everySeconds(60)
->releaseAfterOneMinute()
->releaseAfterBackoff($this->attempts());
return [new RateLimited()];
}
/*
* Determine the time at which the job should timeout.
*
*/
public function retryUntil() : \DateTime
{
return Carbon::now()->addDay();
}
/**
* The job failed to process.
*
* @param Exception $exception
* @return void
*/
public function failed($exception)
{
Log::critical($exception);
}
private function SaveSentRecord($sender, $subject, $body, $recipient, $recipientType) {
$sentmail = new SentMail;
$sentmail->sender = $sender;
$sentmail->subject = $subject;
$sentmail->body = $body;
$sentmail->recipient = $recipient;
$sentmail->recipient_type = $recipientType;
$sentmail->save();
}
}

View File

@@ -1,216 +0,0 @@
<?php
namespace App\Jobs\Commands\Eve;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Spatie\RateLimitedMiddleware\RateLimited;
use Log;
use Carbon\Carbon;
//Library
use App\Library\Esi\Esi;
use Seat\Eseye\Exceptions\RequestFailedException;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
//Models
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\Jobs\JobStatus;
use App\Models\Mail\SentMail;
use Seat\Eseye\Containers\EsiResponse;
class SendEveMail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Retries
* With new rate limiting, we need a retry basis versus timeout basis
* @var int
*/
public $retries = 1;
private $sender;
private $body;
private $recipient;
private $recipient_type;
private $subject;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($body, $recipient, $recipient_type, $subject, $sender) {
//Set the connection
$this->connection = 'redis';
$this->onQueue('mail');
//Set the middleware for the job
$this->middleware = $this->middleware();
//Private variables
$this->body = $body;
$this->recipient = $recipient;
$this->recipient_type = $recipient_type;
$this->subject = $subject;
$this->sender = $sender;
}
/**
* Execute the job.
* Utilized by using SendEveMail::dispatch($mail);
* The model is passed into the dispatch function, then added to the queue
* for processing.
*
* @return void
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
$errorCode = null;
//Get the esi configuration
$config = config('esi');
//Retrieve the token for main character to send mails from
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Create the ESI authentication container
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Check to see if the token is valid or not
if($esiHelper->TokenExpired($refreshToken)) {
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
}
$esi->setBody([
'approved_cost' => 10000,
'body' => $this->body,
'recipients' => [[
'recipient_id' => $this->recipient,
'recipient_type' => $this->recipient_type,
]],
'subject' => $this->subject,
])->invoke('post', '/characters/{character_id}/mail/', [
'character_id'=> $this->sender,
]);
}
/**
* Middleware to only allow 4 jobs to be run per minute
* After a failed job, the job is released back into the queue for at least 1 minute x the number of times attempted
*
*/
public function middleware() {
//Allow 4 jobs per minute, and implement a rate limited backoff on failed jobs
$rateLimitedMiddleware = (new RateLimited())
->enabled()
->key('psemj')
->connectionName('default')
->allow(4)
->everySeconds(60)
->releaseAfterOneMinute()
->releaseAfterBackoff($this->attempts());
return [$rateLimitedMiddleware];
}
/*
* Determine the time at which the job should timeout.
*
*/
public function retryUntil() : \DateTime
{
return Carbon::now()->addDay();
}
/**
* The job failed to process.
*
* @param Exception $exception
* @return void
*/
public function failed($exception)
{
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('SendEveMail has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in SendEveMail. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in SendEveMail at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("SendEveMail has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in SendEveMail. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in SendEveMail. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in SendEveMail. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in SendEveMail. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 520: //Internal Error -- Mostly comes when rate limited hit
Log::warning("Rate limit hit for SendEveMail. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->SaveSentRecord($this->sender, $this->subject, $this->body, $this->recipient, $this->recipient_type);
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in SendEveMail.\r\n");
$this->delete();
break;
}
}
}
public function tags() {
return ['ProcessEveMails'];
}
private function SaveSentRecord($sender, $subject, $body, $recipient, $recipientType) {
$sentmail = new SentMail;
$sentmail->sender = $sender;
$sentmail->subject = $subject;
$sentmail->body = $body;
$sentmail->recipient = $recipient;
$sentmail->recipient_type = $recipientType;
$sentmail->save();
}
}

View File

@@ -1,74 +0,0 @@
<?php
namespace App\Jobs\Commands\Finances;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\FinanceHelper;
//Models
use App\Models\Finances\AllianceWalletJournal;
class UpdateAllianceWalletJournalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 1800;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('finances');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$fHelper = new FinanceHelper;
$config = config('esi');
$pages = $fHelper->GetAllianceWalletJournalPages(1, $config['primary']);
for($i = 1; $i <= $pages; $i++) {
UpdateAllianceWalletJournalPage::dispatch(1, $config['primary'], $i)->onQueue('journal');
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateAllianceWalletJournal', 'Finances'];
}
}

View File

@@ -1,170 +0,0 @@
<?php
namespace App\Jobs\Commands\Finances;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
use Log;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\Finances\AllianceWalletJournal;
class UpdateAllianceWalletJournalPage implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
private $division;
private $charId;
private $page;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($division, $charId, $page)
{
$this->connection = 'redis';
$this->onQueue('finances');
$this->division = $division;
$this->charId = $charId;
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables in the handler
$lookup = new LookupHelper;
$esiHelper = new Esi;
//Setup the esi container.
$token = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($token);
//Check the scope
if(!$esiHelper->HaveEsiScope($this->charId, 'esi-wallet.read_corporation_wallets.v1')) {
Log::critical('Scope check failed for esi-wallet.read_corporation_wallets.v1 for character id: ' . $charId);
return null;
}
if($esiHelper->TokenExpired($token)) {
$token = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($token);
}
//Reference the character id to the corporation id
$char = $lookup->GetCharacterInfo($this->charId);
$corpId = $char->corporation_id;
/**
* Attempt to get the data from the esi api. If it fails, we skip the page, and go onto the next page, unless
* the failed page is the first page.
*/
try {
$journals = $esi->page($this->page)
->invoke('get', '/corporations/{corporation_id}/wallets/{division}/journal/', [
'corporation_id' => $corpId,
'division' => $this->division,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get wallet journal page ' . $currentPage . ' for character id: ' . $charId);
Log::warning($e);
$this->delete();
}
//Decode the json data, and return it as an array
$wallet = json_decode($journals->raw, true);
//Foreach journal entry, add the journal entry to the table
foreach($wallet as $entry) {
//See if we find the entry id in the database already
$found = AllianceWalletJournal::where([
'id' => $entry['id'],
])->count();
if($found == 0) {
$awj = new AllianceWalletJournal;
$awj->id = $entry['id'];
$awj->corporation_id = $corpId;
$awj->division = $this->division;
if(isset($entry['amount'])) {
$awj->amount = $entry['amount'];
}
if(isset($entry['balance'])) {
$awj->balance = $entry['balance'];
}
if(isset($entry['context_id'])) {
$awj->context_id = $entry['context_id'];
}
if(isset($entry['date'])) {
$awj->date = $esiHelper->DecodeDate($entry['date']);
}
if(isset($entry['description'])) {
$awj->description = $entry['description'];
}
if(isset($entry['first_party_id'])) {
$awj->first_party_id = $entry['first_party_id'];
}
if(isset($entry['reason'])) {
$awj->reason = $entry['reason'];
}
if(isset($entry['ref_type'])) {
$awj->ref_type = $entry['ref_type'];
}
if(isset($entry['tax'])) {
$awj->tax = $entry['tax'];
}
if(isset($entry['tax_receiver_id'])) {
$awj->tax_receiver_id = $entry['tax_receiver_id'];
}
$awj->save();
}
}
//Return as completed
return 0;
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateAllianceWalletJournalPage', 'Finances'];
}
}

View File

@@ -1,66 +0,0 @@
<?php
namespace App\Jobs\Commands\Finances;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Library Functions
use App\Library\Moons\MoonCalc;
class UpdateItemPrices implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 1800;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$moonHelper = new MoonCalc;
//Fetch new prices from fuzzwork.co.uk for the item pricing schemes
$moonHelper->FetchNewPrices();
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateItemPrices', 'Finances'];
}
}

View File

@@ -1,65 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
class CreateMiningTaxesInvoice implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$mainAlts = array();
$mainIds = new Collection;
//Get all of the users in the database
$characters = User::all();
}
}

View File

@@ -1,164 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//Jobs
use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesLedgers;
//App Models
use App\Models\MiningTax\Observer;
use App\Models\MiningTax\Ledger;
use App\Models\Moon\MineralPrice;
use App\Models\Moon\ItemComposition;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
class FetchMiningTaxesLedgers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Job Variables
*/
private $charId;
private $corpId;
private $observerId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($charId, $corpId, $observerId)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('miningtaxes');
//Import the variables from the calling function
$this->charId = $charId;
$this->corpId = $corpId;
$this->observerId = $observerId;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$esiHelper = new Esi;
$pageFailed = false;
$config = config('esi');
//Check for the correct scope
if(!$esiHelper->haveEsiScope($this->charId, 'esi-industry.read_corporation_mining.v1')) {
Log::critical('Character: ' . $this->charId . ' did not have the correct esi scope in FetchMiningTaxesLedgersJob.');
return null;
}
//Get the esi token in order to pull data from esi
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Set the current page
$currentPage = 1;
$totalPages = 1;
//Setup a do-while loop to sort through the ledgers by pages
do {
/**
* During the course of the operation, we want to ensure our token stays valid.
* If the token, expires, then we want to refresh the token through the esi helper
* library functionality.
*/
if($esiHelper->TokenExpired($refreshToken)) {
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
}
/**
* Attempt to get the data from the esi api. If it fails, we skip the page
*/
try {
$response = $esi->page($currentPage)
->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $config['corporation'],
'observer_id' => $this->observerId,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get the mining ledger in FetchMiningTaxesLedgersCommand for observer id: ' . $this->observerId);
$pageFailed = true;
}
/**
* If the current page is the first one and the page didn't fail, then update the total pages.
* If the first page failed, just return as we aren't going to be able to get the total amount of data needed.
*/
if($currentPage == 1 && $pageFailed == false) {
$totalPages = $response->pages;
} else if($currentPage == 1 && $pageFailed == true) {
return null;
}
if($pageFailed == true) {
//If the page failed, then reset the variable, and skip the current iteration
//of creating the jobs.
$pageFailed = false;
} else {
//Decode the json response from the ledgers
$ledgers = json_decode($response->raw);
//Dispatch jobs to process each of the mining ledger entries
foreach($ledgers as $ledger) {
ProcessMiningTaxesLedgers::dispatch($ledger, $this->observerId)->onQueue('miningtaxes');
}
}
//Increment the current pages
$currentPage++;
} while($currentPage <= $totalPages);
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['FetchMiningTaxesLedgers', 'MiningTaxes', 'MiningTaxesLedgers'];
}
}

View File

@@ -0,0 +1,142 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//App Models
use App\Models\MiningTax\Observer;
use App\Models\MiningTax\Ledger;
use App\Models\Moon\MineralPrice;
use App\Models\Moon\ItemComposition;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
class FetchMiningTaxesLedgersJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Job Variables
*/
private $charId;
private $corpId;
private $observerId;
private $esi;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($charId, $corpId, $observerId)
{
//Set the connection for the job
$this->connection = 'redis';
//Import the variables from the calling function
$this->charId = $charId;
$this->corpId = $corpId;
$this->observerId = $observerId;
//Setup the ESI stuff
$esiHelper = new Esi;
//Setup the private esi variables
if(!$esiHelper->haveEsiScope($this->charId, 'esi-industry.read_corporation_mining.v1')) {
Log::critical('Character: ' . $this->charId . ' did not have the correct esi scope in FetchMiningTaxesLedgersJob.');
return null;
}
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
$this->esi = $esiHelper->SetupEsiAuthentication($refreshToken);
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$esiHelper = new Esi;
//Get the ledger from ESI
try {
$response = $this->esi->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $this->corpId,
'observer_id' => $this->observerId,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get the mining ledger in FetchMiningTaxesLedgersJob for observer id: ' . $this->observerId);
return null;
}
$ledgers = json_decode($response);
//Sort through the array, and create the variables needed for database entries
foreach($ledgers as $ledger) {
//Get some basic information we need to work with
$charName = $lookup->CharacterIdToName($ledger->character_id);
//Get the type name from the ledger ore stuff
$typeName = $lookup->ItemIdToName($ledger->type_id);
//Decode the date and store it.
//$updated = $esiHelper->DecodeDate($ledger->last_updated);
$price = $mHelper->CalculateOrePrice($ledger->type_id);
$amount = $price * $ledger->quantity;
//Insert or update the entry in the database
$item = Ledger::updateOrCreate([
'character_id' => $ledger->character_id,
'character_name' => $charName,
'observer_id' => $this->observerId,
'last_updated' => $ledger->last_updated,
'type_id' => $ledger->type_id,
'ore_name' => $typeName,
'quantity' => $ledger->quantity,
'price' => $amount,
], [
'character_id' => $ledger->character_id,
'character_name' => $charName,
'observer_id' => $this->observerId,
'last_updated' => $ledger->last_updated,
'type_id' => $ledger->type_id,
'ore_name' => $typeName,
'quantity' => $ledger->quantity,
'price' => $amount,
]);
}
//Clean up old data
Ledger::where(['updated_at', '<', Carbon::now()->subDays(120)])->delete();
}
}

View File

@@ -1,200 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\StructureHelper;
//Models
use App\Models\MiningTax\Observer;
class FetchMiningTaxesObservers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$config = config('esi');
$lookup = new LookupHelper;
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
$esiHelper = new Esi;
//Check for the ESI scope needed.
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
Log::critical('Esi scopes were not found for FetchMiningTaxesObserversJob.');
print("Esi scopes not found.");
return;
}
//Check for the other ESI scope needed.
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1')) {
Log::critical('Esi scope esi-universe.read_structures.v1 was not found for FetchMiningTaxesObserversJob.');
print("Esi scopes not found 2");
return;
}
//Get the refresh token for the character
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Get the esi variable
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Invoke the call to ESI API.
$response = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $config['corporation'],
]);
//Decode the json response, but leave it as objects rather than an array
$resp = json_decode($response->raw, false);
//Run through the mining observers, and add them to the database
foreach($resp as $observer) {
//See if the observer is found in the database
$found = Observer::where([
'observer_id' => $observer->observer_id,
])->count();
//Get the observer name from esi
$structureInfo = $sHelper->GetStructureInfo($observer->observer_id);
//If found, then update the structure
if($found > 0) {
//Update the existing structure in the database
Observer::where([
'observer_id' => $observer->observer_id,
])->update([
'observer_id' => $observer->observer_id,
'observer_name' => $structureInfo->name,
'last_updated' => $observer->last_updated,
]);
} else {
//Add a new observer into the observer table
$newObs = new Observer;
$newObs->observer_id = $observer->observer_id;
$newObs->observer_type = $observer->observer_type;
$newObs->observer_name = $structureInfo->name;
$newObs->last_updated = $observer->last_updated;
$newObs->solar_system_id = $structureInfo->solar_system_id;
$newObs->solar_system_name = $lookup->SystemIdToName($structureInfo->solar_system_id);
$newObs->save();
}
}
/**
* Cleanup stale data that hasn't been updated in at least 1 week.
*/
$date = Carbon::now()->subDays(7);
Observer::where('last_updated', '<', $date)->delete();
//Return 0 saying everything is fine
return 0;
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('FetchMiningTaxesObservers has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in FetchMiningTaxesObservers. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in FetchMiningTaxesObservers at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("FetchMiningTaxesObservers has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in FetchMiningTaxesObservers. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in FetchMiningTaxesObservers. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in FetchMiningTaxesObservers.\r\n");
$this->delete();
break;
}
}
}
/**
* Set the tags for Horizon
*
* @var array
*/
public function tags() {
return ['FetchMiningObservers', 'MiningTaxes'];
}
}

View File

@@ -1,75 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Models
use App\Models\MiningTax\Observer;
//Jobs
use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesLedgers;
class PreFetchMiningTaxesLedgers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Get the site configuration which holds some data we need
$config = config('esi');
//Get the observers from the database
$observers = Observer::all();
//For each of the observers, send a job to fetch the mining ledger
foreach($observers as $obs) {
//Dispatch the mining taxes ledger jobs
FetchMiningTaxesLedgers::dispatch($config['primary'], $config['corporation'], $obs->observer_id)->onQueue('miningtaxes');
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['PreFetchMiningTaxesLedgers', 'MiningTaxes', 'MiningTaxesLedgers'];
}
}

View File

@@ -1,120 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
//App Library
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//Models
use App\Models\MiningTax\Ledger;
use App\Models\Moon\MineralPrice;
use App\Models\Moon\ItemComposition;
class ProcessMiningTaxesLedgers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Job Variables
*/
private $ledger;
private $observerId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($ledger, $observerId)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('miningtaxes');
//Import variables from the calling function
$this->ledger = $ledger;
$this->observerId = $observerId;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$config = config('esi');
//Create a starting date for the ledger
$ledgerDate = Carbon::createFromFormat('Y-m-d', $this->ledger->last_updated);
//If the ledger is more than one day old, then process it, otherwise, we don't process it
//or add it to the database as it may still be updating.
if($ledgerDate->lessThan(Carbon::now()->subDay())) {
//Get some of the basic information we need to work with
$charName = $lookup->CharacterIdToName($this->ledger->character_id);
//Get the type name from the ledger ore
$typeName = $lookup->ItemIdToName($this->ledger->type_id);
//Get the price from the helper function
$price = $mHelper->CalculateOrePrice($this->ledger->type_id);
//Calculate the total price based on the amount
$amount = (($price * $this->ledger->quantity) * $config['refine_rate']);
$found = Ledger::where([
'character_id' => $this->ledger->character_id,
'observer_id' => $this->observerId,
'type_id' => $this->ledger->type_id,
'last_updated' => $this->ledger->last_updated,
])->count();
if($found == 0) {
$ledg = new Ledger;
$ledg->character_id = $this->ledger->character_id;
$ledg->character_name = $charName;
$ledg->observer_id = $this->observerId;
$ledg->last_updated = $this->ledger->last_updated;
$ledg->type_id = $this->ledger->type_id;
$ledg->ore_name = $typeName;
$ledg->quantity = $this->ledger->quantity;
$ledg->amount = $amount;
$ledg->save();
}
}
return 0;
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['ProcessMiningTaxesLedgers', 'MiningTaxes', 'MiningTaxesLedgers'];
}
}

View File

@@ -1,143 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
use Log;
//Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Payment;
use App\Models\Finances\AllianceWalletJournal;
class ProcessMiningTaxesPayments implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare the variables we will need
$looup = new LookupHelper;
$currentTime = Carbon::now();
//Get the outstanding invoices
$outstanding = Invoice::where([
'status' => 'Pending',
])->get();
//Use the player donation journal from finances to see if the invoice_id is present
//as a reason
foreach($outstanding as $invoice) {
//See if we have a reason with the correct uniqid from the player donation journal
$found = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->count();
//If we have received the invoice, then mark the invoice as paid
if($found > 0) {
//If we have the count, then grab the journal entry in order to do some things with it
$journal = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->first();
//If the bill is paid on time, then update the invoice as such
if($currentTime->lessThanOrEqualTo($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid',
]);
}
if($currentTime->greaterThan($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
} else {
$count = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->count();
if($count > 0) {
//If we have the count, then grab the journal entry in order to do some things with it
$journal = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->first();
//If the bill is paid on time, then update the invoice as such
if($currentTime->lessThanOrEqualTo($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid',
]);
}
if($currentTime->greaterThan($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
}
}
}
//Use the contract descriptions from the esi to see if the invoice_id is present.
//If the invoice is present, then mark it off as sent in correctly
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['ProcessMiningTaxesPayments', 'MiningTaxes', 'Payments'];
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
use Log;
//Library
use App\Library\Lookups\LookupHelper;
//Models
use App\Models\MiningTaxes\Invoice;
use App\Models\MiningTaxes\Payment;
use App\Models\Finances\PlayerDonationJournal;
class ProcessMiningTaxesPaymentsJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare the variables we will need
$looup = new LookupHelper;
$currentTime = Carbon::now();
//Get the outstanding invoices
$outstanding = Invoice::where([
'status' => 'Pending',
])->get();
//Use the player donation journal from finances to see if the invoice_id is present
//as a reason
foreach($outstanding as $invoice) {
//See if we have a reason with the correct uniqid from the player donation journal
$found = PlayerDonationJournal::where([
'reason' => "MMT: " . $invoice->invoice_id,
])->count();
//If we have received the invoice, then mark the invoice as paid
if($count > 0) {
//If we have the count, then grab the journal entry in order to do some things with it
$journal = PlayerDonationJournal::where([
'reason' => "MMT: " . $invoice->invoice_id,
])->first();
//If the bill is paid on time, then update the invoice as such
if($currentTime->lessThanOrEqualTo($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid',
]);
}
if($currentTime->greaterThan($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
}
}
}
}

View File

@@ -1,316 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
use App\Models\User\UserAlt;
use App\Models\User\User;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class SendMiningTaxesInvoices implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$mailDelay = 15;
$mains = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
//Cycle through the array of mains, and remove any characters which are in the User Alt table,
//as those characters will be grouped with their correct main later.
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
/**
* Send the collected information over to the function to send the actual mail
*/
if($ledgers->count() > 0) {
$this->CreateInvoice($main, $ledgers, $mailDelay);
}
}
}
/**
* Create the invoice to the mail out
*
* @var charId
* @var ledgers
* @var mailDelay
*/
private function CreateInvoice($charId, Collection $ledgers, int &$mailDelay) {
$ores = array();
$characters = array();
$characterIds = array();
$totalPrice = 0.00;
$body = null;
$lookup = new LookupHelper;
$config = config('esi');
//Create an invoice id
$invoiceId = "M" . uniqid();
//Get the sum of all the ledgers
$invoiceAmount = round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2);
//Get the character name from the lookup table
$charName = $lookup->CharacterIdToName($charId);
//Create the date due and the invoice date
$dateDue = Carbon::now()->addDays(7);
$invoiceDate = Carbon::now();
//Set the mining tax from the config file
$numberMiningTax = number_format(((float)$config['mining_tax'] * (float)100.00), 2, ".", ",");
//Create the list of ores to put in the mail
$temp = $ledgers->toArray();
foreach($temp as $t) {
//If the key isn't set, set it to the default of 0
if(!isset($ores[$t['type_id']])) {
$ores[$t['type_id']] = (int)0;
}
//Add the quantity into the ores array
$ores[$t['type_id']] += (int)$t['quantity'];
//Create a list of character names
if(!isset($characters[$t['character_name']])) {
$characters[$t['character_name']] = $t['character_name'];
}
//Create a list of character ids
if(!isset($characterIds[$t['character_id']])) {
$characterIds[$t['character_id']] = $t['character_id'];
}
}
/**
* Create the mail body to send to the main character
*/
$body .= "Dear " . $charName . ",<br><br>";
$body .= "Mining Taxes are due for the following ores mined from alliance moons: <br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format($quantity, 0, ".", ",") . "<br>";
}
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br><br>";
$body .= "You can also send a contract with the following ores in the contract with the reason set as: " . $invoiceId . "<br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "<br>";
}
$body .= "<br>";
$body .= "Characters Processed: <br>";
foreach($characters as $character) {
$body .= $character . "<br>";
}
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Check if the mail body is greater than 2000 characters. If greater than 2,000 characters, then
if(strlen($body) > 2000) {
$body = "Dear " . $charName . "<br><br>";
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as: " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
}
//Mail the invoice to the character if the character is in
//Warped Intentions or Legacy
$subject = 'Warped Intentions Mining Taxes';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $charId;
//Send the Eve Mail Job to the queue to be dispatched
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
/**
* Create a new invoice model, and save it to the database
*/
$invoice = new Invoice;
$invoice->character_id = $charId;
$invoice->character_name = $charName;
$invoice->invoice_id = $invoiceId;
$invoice->invoice_amount = $invoiceAmount;
$invoice->date_issued = $invoiceDate;
$invoice->date_due = $dateDue;
$invoice->status = 'Pending';
$invoice->mail_body = $body;
$invoice->save();
/**
* Mark the invoices as paid
*/
foreach($characterIds as $char) {
Ledger::where([
'character_id' => $char,
'invoiced' => 'No',
])->update([
'invoice' => $invoiceId,
'invoiced' => 'Yes',
]);
}
/**
* Increment the mail delay for the next cycle
*/
$mailDelay += 20;
}
/**
* Set the tags for Horizon
*
* @var array
*/
public function tags() {
return ['MiningTaxes', 'SendMiningTaxesInvoics', 'Invoices'];
}
}

View File

@@ -1,316 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
use App\Models\User\UserAlt;
use App\Models\User\User;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class SendMiningTaxesInvoicesOld implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$mailDelay = 15;
$mains = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
//Cycle through the array of mains, and remove any characters which are in the User Alt table,
//as those characters will be grouped with their correct main later.
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
/**
* Send the collected information over to the function to send the actual mail
*/
if($ledgers->count() > 0) {
$this->CreateInvoice($main, $ledgers, $mailDelay);
}
}
}
/**
* Create the invoice to the mail out
*
* @var charId
* @var ledgers
* @var mailDelay
*/
private function CreateInvoice($charId, Collection $ledgers, int &$mailDelay) {
$ores = array();
$characters = array();
$characterIds = array();
$totalPrice = 0.00;
$body = null;
$lookup = new LookupHelper;
$config = config('esi');
//Create an invoice id
$invoiceId = "M" . uniqid();
//Get the sum of all the ledgers
$invoiceAmount = round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2);
//Get the character name from the lookup table
$charName = $lookup->CharacterIdToName($charId);
//Create the date due and the invoice date
$dateDue = Carbon::now()->addDays(7);
$invoiceDate = Carbon::now();
//Set the mining tax from the config file
$numberMiningTax = number_format(((float)$config['mining_tax'] * (float)100.00), 2, ".", ",");
//Create the list of ores to put in the mail
$temp = $ledgers->toArray();
foreach($temp as $t) {
//If the key isn't set, set it to the default of 0
if(!isset($ores[$t['type_id']])) {
$ores[$t['type_id']] = (int)0;
}
//Add the quantity into the ores array
$ores[$t['type_id']] += (int)$t['quantity'];
//Create a list of character names
if(!isset($characters[$t['character_name']])) {
$characters[$t['character_name']] = $t['character_name'];
}
//Create a list of character ids
if(!isset($characterIds[$t['character_id']])) {
$characterIds[$t['character_id']] = $t['character_id'];
}
}
/**
* Create the mail body to send to the main character
*/
$body .= "Dear " . $charName . ",<br><br>";
$body .= "Mining Taxes are due for the following ores mined from alliance moons: <br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format($quantity, 0, ".", ",") . "<br>";
}
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br><br>";
$body .= "You can also send a contract with the following ores in the contract with the reason set as: " . $invoiceId . "<br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "<br>";
}
$body .= "<br>";
$body .= "Characters Processed: <br>";
foreach($characters as $character) {
$body .= $character . "<br>";
}
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Check if the mail body is greater than 2000 characters. If greater than 2,000 characters, then
if(strlen($body) > 2000) {
$body = "Dear " . $charName . "<br><br>";
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as: " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
}
//Mail the invoice to the character if the character is in
//Warped Intentions or Legacy
$subject = 'Warped Intentions Mining Taxes';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $charId;
//Send the Eve Mail Job to the queue to be dispatched
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
/**
* Create a new invoice model, and save it to the database
*/
$invoice = new Invoice;
$invoice->character_id = $charId;
$invoice->character_name = $charName;
$invoice->invoice_id = $invoiceId;
$invoice->invoice_amount = $invoiceAmount;
$invoice->date_issued = $invoiceDate;
$invoice->date_due = $dateDue;
$invoice->status = 'Pending';
$invoice->mail_body = $body;
$invoice->save();
/**
* Mark the invoices as paid
*/
foreach($characterIds as $char) {
Ledger::where([
'character_id' => $char,
'invoiced' => 'No',
])->update([
'invoice' => $invoiceId,
'invoiced' => 'Yes',
]);
}
/**
* Increment the mail delay for the next cycle
*/
$mailDelay += 20;
}
/**
* Set the tags for Horizon
*
* @var array
*/
public function tags() {
return ['MiningTaxes', 'SendMiningTaxesInvoics', 'Invoices'];
}
}

View File

@@ -1,108 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\User\User;
use App\Models\User\UserAlt;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class UpdateMiningTaxesLateInvoices15th implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$config = config('esi');
$mailDelay = 15;
$today = Carbon::now();
//Get all of the invoices that are still pending.
$invoices = Invoice::where([
'status' => 'Pending',
])->get();
//Cycle through the invoices, and see if they are late or not.
foreach($invoices as $invoice) {
$dueDate = Carbon::create($invoice->date_due);
if($dueDate->greaterThan($today->subDays(7))) {
//Update the invoice in the database
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Late',
]);
//Build the mail
$subject = 'Warped Intentions Mining Taxes - Invoice Late';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $invoice->character_id;
$body = "Dear " . $invoice->character_name . ",<br><br>";
$body .= "The Mining Invoice: " . $invoice->invoice_id . " is late.<br>";
$body .= "Please remite " . number_format($invoice->invoice_amount, 2, ".", ",") . "to Spatial Forces.<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Send a reminder to the user through eve mail about the late invoice
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateMiningTaxesLateInvoices', 'MiningTaxes', 'Invoices'];
}
}

View File

@@ -1,108 +0,0 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\User\User;
use App\Models\User\UserAlt;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class UpdateMiningTaxesLateInvoices1st implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$config = config('esi');
$mailDelay = 15;
$today = Carbon::now();
//Get all of the invoices that are still pending.
$invoices = Invoice::where([
'status' => 'Pending',
])->get();
//Cycle through the invoices, and see if they are late or not.
foreach($invoices as $invoice) {
$dueDate = Carbon::create($invoice->date_due);
if($dueDate->greaterThan($today->subDays(7))) {
//Update the invoice in the database
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Late',
]);
//Build the mail
$subject = 'Warped Intentions Mining Taxes - Invoice Late';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $invoice->character_id;
$body = "Dear " . $invoice->character_name . ",<br><br>";
$body .= "The Mining Invoice: " . $invoice->invoice_id . " is late.<br>";
$body .= "Please remite " . number_format($invoice->invoice_amount, 2, ".", ",") . "to Spatial Forces.<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Send a reminder to the user through eve mail about the late invoice
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateMiningTaxesLateInvoices', 'MiningTaxes', 'Invoices'];
}
}

View File

@@ -1,174 +0,0 @@
<?php
namespace App\Jobs\Commands\Structures;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Application Library
use App\Library\Esi\Esi;
use Seat\Eseye\Exception\RequestFailedException;
use App\Library\Structures\StructureHelper;
//Models
use App\Models\Structure\Structure;
use App\Models\Structure\Service;
class FetchAllianceStructures implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('structures');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$config = config('esi');
$corpId = 98287666;
$esiHelper = new Esi;
$structureScope = $esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1');
$corpStructureScope = $esiHelper->HaveEsiScope($config['primary'], 'esi-corporations.read_structures.v1');
//Check scopes
if($structureScope == false || $corpStructureScope == false) {
if($structureScope == false) {
Log::critical("Scope check for esi-universe.read_structures.v1 has failed.");
}
if($corpStructureScope == false) {
Log::critical("Scope check for esi-corporations.read_structures.v1 has failed.");
}
return -1;
}
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($config['primary']);
//Create the esi authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
//Set the current page
$currentPage = 1;
//Set our default pages
$totalPages = 1;
do {
//Attempt to get the entire page worth of structures
$structures = $esi->page($currentPage)
->invoke('get', '/corporations/{corporation_id}/structures/', [
'corporation_id' => $corpId,
]);
//If on the first page, then update the total number of pages
if($currentPage == 1) {
$totalPages = $structures->pages;
}
//For each asset retrieved, let's process it.
foreach($structures as $s) {
ProcessAllianceStructures::dispatch($s)->onQueue('structures');
}
//Increment the current page
$currentPage++;
} while($currentPage <= $totalPages);
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('FetchMiningTaxesObservers has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in FetchMiningTaxesObservers. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in FetchMiningTaxesObservers at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("FetchMiningTaxesObservers has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in FetchMiningTaxesObservers. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in FetchMiningTaxesObservers. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in FetchMiningTaxesObservers.\r\n");
$this->delete();
break;
}
}
}
public function tags() {
return ['FetchAllianceStructures', 'AllianceStructures', 'Structures'];
}
}

View File

@@ -1,216 +0,0 @@
<?php
namespace App\Jobs\Commands\Structures;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Application Library
use App\Library\Helpers\LookupHelper;
use App\Library\Esi\Esi;
//Models
use App\Models\Structure\Structure;
use App\Models\Structure\Service;
class ProcessAllianceStructures implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
private $structure;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($s)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('structures');
//Set variables
$this->structure = $s;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
/**
* Update the structure if it already exists, or add the structure if it doesn't exist in the database
*/
if(Structure::where(['structure_id' => $this->structure->structure_id])->count() > 0) {
$this->UpdateStructure($this->structure);
} else {
$this->SaveNewStructure($this->structure);
}
}
/**
* Set the tags for the job
*
* @var array
*/
public function tags() {
return ['ProcessAllianceStructures', 'AllianceStructures', 'Structures'];
}
private function SaveNewStructure($structure) {
//Declare variables
$lookup = new LookupHelper;
$esiHelper = new Esi;
//Get the solar system name
$solarName = $lookup->SystemIdToName($structure->system_id);
$s = new Structure;
$s->structure_id = $structure->structure_id;
$s->structure_name = $structure->name;
$s->solar_system_id = $structure->system_id;
$s->solar_system_name = $solarName;
$s->type_id = $structure->type_id;
$s->type_name = $lookup->StructureTypeIdToName($structure->type_id);
$s->corporation_id = $structure->corporation_id;
if(isset($structure->services)) {
$s->services = true;
foreach($structure->services as $service) {
$serv = new Service;
$serv->structure_id = $structure->structure_id;
$serv->name = $service->name;
$serv->state = $service->state;
}
} else {
$s->services = false;
}
$s->state = $structure->state;
if(isset($structre->state_timer_start)) {
$s->state_timer_start = $esiHelper->DecodeDate($structure->state_timer_start);
}
if(isset($structure->state_timer_end)) {
$s->state_timer_end = $esiHelper->DecodeDate($structure->state_timer_end);
}
if(isset($structure->fuel_expires)) {
$s->fuel_expires = $esiHelper->DecodeDate($structure->fuel_expires);
}
$s->profile_id = $structure->profile_id;
if(isset($structure->next_reinforce_apply)) {
$s->next_reinforce_apply = $structure->next_reinforce_apply;
}
if(isset($structure->next_reinforce_hour)) {
$s->next_reinforce_hour = $structure->next_reinforce_hour;
}
$s->reinforce_hour = $structure->reinforce_hour;
if(isset($structure->unanchors_at)) {
$s->unanchors_at = $esiHelper->DecodeDate($s->unanchors_at);
}
$s->save();
}
private function UpdateStructure($structure) {
$esiHelper = new Esi;
if(isset($structure->corporation_id)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'corporation_id' => $structure->corporation_id,
]);
}
if(isset($structure->state)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'state' => $structure->state,
]);
}
if(isset($structure->state_timer_start)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'state_timer_start' => $esiHelper->DecodeDate($structure->state_timer_start),
]);
}
if(isset($structure->state_timer_end)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'state_timer_end' => $esiHelper->DecodeDate($structure->state_timer_end),
]);
}
if(isset($structure->fuel_expires)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'fuel_expires' => $esiHelper->DecodeDate($structure->fuel_expires),
]);
}
if(isset($structure->profile_id)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'profile_id' => $structure->profile_id,
]);
}
if(isset($structure->next_reinforce_apply)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'next_reinforce_apply' => $structure->next_reinforce_apply,
]);
}
if(isset($structure->next_reinforce_hour)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'next_reinforce_hour' => $structure->next_reinforce_hour,
]);
}
if(isset($structure->reinforce_hour)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'reinforce_hour' => $structure->reinforce_hour,
]);
}
if(isset($structure->unanchors_at)) {
Structure::where([
'structure_id' => $structure->structure_id,
])->update([
'unanchors_at' => $esiHelper->DecodeDate($structure->unanchors_at),
]);
}
if(Service::where(['structure_id' => $structure->structure_id])->count() > 0) {
foreach($structure->services as $service) {
Service::where([
'structure_id' => $structure->structure_id,
])->update([
'state' => $service->state,
]);
}
}
}
}

View File

@@ -1,70 +0,0 @@
<?php
namespace App\Jobs\Commands\Structures;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Jobs
use App\Jobs\Commands\FetchAllianceStructures;
//Models
use App\Models\Structure\Structure;
use App\Models\Structure\Service;
class PurgeAllianceStructures implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('structures');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Structure::truncate();
Service::truncate();
FetchAllianceStructures::dispatch();
}
/**
* Set the tags for the job
*
* @var array
*/
public function tags() {
return ['PurgeAllianceStructures', 'AllianceStructures', 'Structures'];
}
}

View File

@@ -18,7 +18,7 @@ use App\Models\Contracts\SupplyChainBid;
use App\Models\Contracts\SupplyChainContract;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
use App\Jobs\Commands\Eve\ProcessSendEveMailJob;
class EndSupplyChainContractJob implements ShouldQueue
{

View File

@@ -13,7 +13,7 @@ use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
use App\Jobs\Commands\Eve\ProcessSendEveMailJob;
//Seat Stuff
use Seat\Eseye\Cache\NullCache;
@@ -46,7 +46,7 @@ class Esi {
$subject = 'W4RP Services - Incorrect ESI Scope';
$body = "Please register on https://services.w4rp.space with the scope: " . $scope;
SendEveMail::dispatch($body, (int)$charId, 'character', $subject, $config['primary'])->delay(Carbon::now()->addSeconds(5));
ProcessSendEveMailJob::dispatch($body, (int)$charId, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(5));
return false;
}

View File

@@ -26,6 +26,7 @@ class FinanceHelper {
public function GetApiWalletJournal($division, $charId) {
//Declare class variables
$lookup = new LookupHelper;
$finance = new FinanceHelper;
$esiHelper = new Esi;
//Setup the esi container.
@@ -158,47 +159,6 @@ class FinanceHelper {
return 0;
}
/**
* Get the pages for the alliance wallet journal
*/
public function GetAllianceWalletJournalPages($division, $charId) {
$lookup = new LookupHelper;
$esiHelper = new Esi;
//Setup the esi container.
$token = $esiHelper->GetRefreshToken($charId);
$esi = $esiHelper->SetupEsiAuthentication($token);
//Check the scope
if(!$esiHelper->HaveEsiScope($charId, 'esi-wallet.read_corporation_wallets.v1')) {
Log::critical('Scope check failed for esi-wallet.read_corporation_wallets.v1 for character id: ' . $charId);
return null;
}
//Reference the character id to the corporation id
$char = $lookup->GetCharacterInfo($charId);
$corpId = $char->corporation_id;
/**
* Attempt to get the data from the esi api. If it fails, we skip the page, and go onto the next page, unless
* the failed page is the first page.
*/
try {
$journals = $esi->page(1)
->invoke('get', '/corporations/{corporation_id}/wallets/{division}/journal/', [
'corporation_id' => $corpId,
'division' => $division,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get wallet journal pages for character id: ' . $charId);
Log::warning($e);
return 0;
}
//Return the total pages
return $journals->pages;
}
private function GetPIMaterialsArray() {
//Setup array for PI items
$pi_items = [

View File

@@ -19,7 +19,6 @@ use App\Models\Lookups\CorporationLookup;
use App\Models\Lookups\AllianceLookup;
use App\Models\Lookups\SolarSystem;
use App\Models\Lookups\ItemLookup;
use App\Models\Lookups\MoonLookup;
class LookupHelper {
@@ -30,45 +29,10 @@ class LookupHelper {
public function __construct() {
//Declare a variable for use by the construct
$esiHelper = new Esi;
$this->esi = $esiHelper->SetupEsiAuthentication();
}
public function StructureTypeIdToName($typeId) {
$structureTypes = [
35841 => 'Ansiblex Jump Gate',
35840 => 'Pharolux Cyno Beacon',
37534 => 'Tenebrex Cyno Jammer',
35834 => 'Keepstar',
35833 => 'Fortizar',
35832 => 'Astrahus',
35836 => 'Tatara',
35835 => 'Athanor',
35827 => 'Sotiyo',
35826 => 'Azbel',
35825 => 'Raitaru',
];
return $structureTypes[$typeId];
}
public function StructureNameToTypeId($name) {
$structureTypes = [
'Ansiblex Jump Gate' => 35841,
'Pharolux Cyno Beacon' => 35840,
'Tenebrex Cyno Jammer' => 37534,
'Keepstar' => 35834,
'Fortizar' => 35833,
'Astrahus' => 35832,
'Tatara' => 35836,
'Athanor' => 35835,
'Sotiyo' => 35827,
'Azbel' => 35826,
'Raitaru' => 35825,
];
return $structureTypes[$name];
}
public function ItemNameToId($itemName) {
$item = ItemLookup::where([
'name' => $itemName,
@@ -253,58 +217,6 @@ class LookupHelper {
}
}
/**
* Get moon information from the database, or store it in the database if it's not found
*/
public function GetMoonInfo($moonId) {
//Check our own database first
$moon = $this->LookupMoonInfo($moonId);
//If no data was found in the database, then save the data, and return what is found through esi
if( $moon == null) {
try {
$response = $this->esi->invoke('get', '/universe/moons/{moon_id}/', [
'moon_id' => $moonId,
]);
} catch(RequestFailedException $e) {
Log::critical("Failed to get moon information in LookupHelper.");
return null;
}
$this->SaveMoonInfo($response);
return $response;
} else {
//Return the moon info
return $moon;
}
}
/**
* Lookup moon info from the database
*/
private function LookupMoonInfo($moonId) {
$moon = MoonLookup::where([
'moon_id' => $moonId,
])->first();
return $moon;
}
/**
* Save moon info into the lookup database
*/
private function SaveMoonInfo($moon) {
$newMoon = new MoonLookup;
$newMoon->moon_id = $moon->id;
$newMoon->name = $moon->name;
$newMoon->position_x = $moon->position->x;
$newMoon->position_y = $moon->position->y;
$newMoon->position_z = $moon->position->z;
$newMoon->system_id = $moon->system_id;
$newMoon->save();
}
public function GetCharacterInfo($charId) {
//Check our own database first
$char = $this->LookupCharacter($charId, null);
@@ -335,7 +247,7 @@ class LookupHelper {
public function GetCorporationInfo($corpId) {
//Check our own database first
$corp = $this->LookupCorporation($corpId, null);
//If the corporation was not found in the database, then get the information and store it in our database for later
if($corp == null) {
try {

View File

@@ -1,72 +0,0 @@
<?php
namespace App\Library\Helpers;
//Internal Libraries
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class MiningTaxHelper {
/**
* Private variables
*/
/**
* Constructor
*/
public function __construct() {
}
/**
* Get the ledgers for a certain character and send back as a collection
*
* @var $charId
* @return collection $ledgers
*/
public function GetLedgers(int $charId) {
$ledgers = new Collection;
$rowCount = Ledger::where([
'character_id' => $charId,
'invoiced' => 'No',
])->count();
if($rowCount > 0) {
$rows = Ledger::where([
'character_id' => $charId,
'invoiced' => 'No',
])->get()->toArray();
foreach($rows as $row) {
$ledgers->push($row);
}
}
return $ledgers;
}
/**
* Create the invoice and mail it
*
* @var int $charId
* @var collection $ledgers
* @var int $mailDelay
*
*/
public function MailMiningInvoice(int $charId, collection $ledgers, int &$mailDelay) {
}
}

View File

@@ -14,7 +14,7 @@ use Log;
use App\Jobs\Library\JobHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Lookups\LookupHelper;
//App Models
use App\Models\Jobs\JobStatus;
@@ -73,29 +73,24 @@ class StructureHelper {
}
}
public function GetStructureName($structureId) {
try {
$info = $this->esi->invoke('get', '/universe/structures/{structure_id}/', [
'structure_id' => $structureId,
]);
} catch(RequestFailedException $e) {
Log::warning("Failed to get structure information for structure with id " . $structureId);
Log::warning($e->getCode());
Log::warning($e->getMessage());
Log::warning($e->getEsiResponse());
$info = null;
}
private function GetSolarSystemName($systemId) {
//Declare some variables
$esiHelper = new Esi;
$lookup = new LookupHelper;
$structure = json_decode($info->raw, true);
$solar = $lookup->SystemIdToName($systemId);
if(!isset($structure['name'])) {
return null;
if($solar != null) {
return $solar;
} else {
return (string)$structure['name'];
return null;
}
}
public function GetStructureInfo($structureId) {
//Declare some variables
$esiHelper = new Esi;
try {
$info = $this->esi->invoke('get', '/universe/structures/{structure_id}/', [
'structure_id' => $structureId,
@@ -112,8 +107,6 @@ class StructureHelper {
}
private function UpdateExistingStructure($structure, $info) {
$esi = new Esi;
//Update the structure id and name
Structure::where(['structure_id' => $structure->structure_id])->update([
'structure_id' => $structure->structure_id,
@@ -147,21 +140,21 @@ class StructureHelper {
//Update the state timer start
if(isset($structure->state_timer_start)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'state_timer_start' => $esi->DecodeDate($structure->state_timer_start),
'state_timer_start' => $this->DecodeDate($structure->state_timer_start),
]);
}
//Update the state timer end
if(isset($structure->state_timer_end)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'state_timer_end' => $esi->DecodeDate($structure->state_timer_end),
'state_timer_end' => $this->DecodeDate($structure->state_timer_end),
]);
}
//Update the fuel expires
if(isset($structure->fuel_expires)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'fuel_expires' => $esi->DecodeDate($structure->fuel_expires),
'fuel_expires' => $this->DecodeDate($structure->fuel_expires),
]);
}
@@ -176,7 +169,7 @@ class StructureHelper {
//Update the next reinforce apply
if(isset($structure->next_reinforce_apply)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'next_reinforce_apply' => $esi->DecodeDate($structure->next_reinforce_apply),
'next_reinforce_apply' => $this->DecodeDate($structure->next_reinforce_apply),
]);
}
@@ -211,7 +204,7 @@ class StructureHelper {
//Update the unanchors at field
if(isset($structure->unanchors_at)) {
//Decode the date / time
$daTi = $esi->DecodeDate($structure->unanchors_at);
$daTi = $this->DecodeDate($structure->unanchors_at);
Structure::where(['structure_id' => $structure->structure_id])->update([
'unanchors_at' => $daTi,
@@ -237,14 +230,12 @@ class StructureHelper {
}
private function SaveNewStructure($structure, $info) {
//Declare helper variable needed
$lookup = new LookupHelper;
$esi = new Esi;
if(isset($info->solar_system_id)) {
$solarName = $lookup->SolarSystemIdToName($info->solar_system_id);
$solarName = $this->GetSolarSystemName($info->solar_system_id);
} else {
Log::critical("Couldn't get solar system name for structure " . $structure->structure_id . " in SaveNewStructure in StructureHelper.php");
Log::critical("Couldn't get solar system name for structure " . $structure->structure_id);
Log::critical("Check access lists.");
$solarName = null;
}
@@ -269,20 +260,20 @@ class StructureHelper {
$st->state = 'None';
}
if(isset($structure->state_timer_start)) {
$st->state_timer_start = $esi->DecodeDate($structure->state_timer_start);
$st->state_timer_start = $this->DecodeDate($structure->state_timer_start);
}
if(isset($structure->state_timer_end)) {
$st->state_timer_end = $esi->DecodeDate($structure->state_timer_end);
$st->state_timer_end = $this->DecodeDate($structure->state_timer_end);
}
if(isset($structure->fuel_expires)) {
$st->fuel_expires = $esi->DecodeDate($structure->fuel_expires);
$st->fuel_expires = $this->DecodeDate($structure->fuel_expires);
}
$st->profile_id = $structure->profile_id;
$st->position_x = $info->position->x;
$st->position_y = $info->position->y;
$st->position_z = $info->position->z;
if(isset($structure->next_reinforce_apply)) {
$st->next_reinforce_apply = $esi->DecodeDate($structure->next_reinforce_apply);
$st->next_reinforce_apply = $this->DecodeDate($structure->next_reinforce_apply);
}
if(isset($structure->next_reinforce_hour)) {
$st->next_reinforce_hour = $structure->next_reinforce_hour;
@@ -295,7 +286,7 @@ class StructureHelper {
$st->reinforce_weekday = $structure->reinforce_weekday;
}
if(isset($structure->unanchors_at)) {
$daTi = $esi->DecodeDate($structure->unanchors_at);
$daTi = $this->DecodeDate($structure->unanchors_at);
$st->unanchors_at = $daTi;
}
@@ -313,10 +304,7 @@ class StructureHelper {
}
public function GetStructuresByType($type) {
//Declare variable
$lookup = new LookupHelper;
$sType = $lookup->StructureNameToTypeId($type);
$sType = $this->StructureTypeToId($type);
$structures = Structure::where([
'type_id' => $sType,
@@ -324,6 +312,32 @@ class StructureHelper {
return $structures;
}
private function StructureTypeToId($name) {
$structureTypes = [
'Ansiblex Jump Gate' => 35841,
'Pharolux Cyno Beacon' => 35840,
'Tenebrex Cyno Jammer' => 37534,
'Keepstar' => 35834,
'Fortizar' => 35833,
'Astrahus' => 35832,
'Tatara' => 35836,
'Athanor' => 35835,
'Sotiyo' => 35827,
'Azbel' => 35826,
'Raitaru' => 35825,
];
return $structureTypes[$name];
}
private function DecodeDate($date) {
$esiHelper = new Esi;
$dateTime = $esiHelper->DecodeDate($date);
return $dateTime;
}
}
?>

View File

@@ -9,8 +9,15 @@ use Carbon\Carbon;
use App\Models\User\User;
use App\Models\User\UserRole;
use App\Models\User\UserPermission;
use App\Models\Finances\AllianceWalletJournal;
use App\Models\MiningTax\Invoice;
use App\Models\Finances\ReprocessingTaxJournal;
use App\Models\Finances\StructureIndustryTaxJournal;
use App\Models\Finances\PlanetProductionTaxJournal;
use App\Models\Finances\OfficeFeesJournal;
use App\Models\Finances\JumpBridgeJournal;
use App\Models\Finances\PISaleJournal;
use App\Models\Finances\AllianceMarketJournal;
use App\Models\SRP\SRPShip;
class TaxesHelper {
@@ -26,31 +33,11 @@ class TaxesHelper {
$this->end = $en;
}
public function GetMoonMiningTaxesGross($start, $end) {
$revenue = 0.00;
$revenue = Invoice::where([
'status' => 'Paid',
])->whereBetween('date_issued', [$start, $end])
->sum('invoice_amount');
return $revenue;
}
public function GetMoonMiningTaxesLateGross($start, $end) {
$revenue = 0.00;
$revenue = Invoice::where([
'status' => 'Paid Late',
])->whereBetween('date_issued', [$start, $end])->sum('invoice_amount');
return $revenue;
}
public function GetAllianceMarketGross($start, $end) {
$revenue = 0.00;
$revenue = AllianceWalletJournal::where([
$revenue = AllianceMarketJournal::where([
'second_party_id' => '98287666',
'ref_type' => 'brokers_fee',
])->whereBetween('date', [$start, $end])
->sum('amount');
@@ -61,8 +48,9 @@ class TaxesHelper {
public function GetJumpGateGross($start, $end) {
$revenue = 0.00;
$revenue = AllianceWalletJournal::where([
$revenue = JumpBridgeJournal::where([
'ref_type' => 'structure_gate_jump',
'second_party_id' => '98287666',
])->whereBetween('date', [$start, $end])
->sum('amount');
@@ -72,8 +60,9 @@ class TaxesHelper {
public function GetIndustryGross($start, $end) {
$revenue = 0.00;
$revenue = AllianceWalletJournal::where([
$revenue = StructureIndustryTaxJournal::where([
'ref_type' => 'industry_job_tax',
'second_party_id' => '98287666',
])->whereBetween('date', [$start, $end])
->sum('amount');
@@ -83,8 +72,9 @@ class TaxesHelper {
public function GetReprocessingGross($start, $end) {
$revenue = 0.00;
$revenue = AllianceWalletJournal::where([
'ref_type' => 'reprocessing_tax',
$revenue = ReprocessingTaxJournal::where([
'ref_type' => 'reprocessing_tax',
'second_party_id' => '98287666',
])->whereBetween('date', [$start, $end])
->sum('amount');
@@ -96,14 +86,16 @@ class TaxesHelper {
$revenueExport = 0.00;
//Get the import revenue from the database
$revenueImport = AllianceWalletJournal::where([
'ref_type' => 'planetary_import_tax',
$revenueImport = PlanetProductionTaxJournal::where([
'ref_type' => 'planetary_import_tax',
'second_party_id' => '98287666',
])->whereBetween('date', [$start, $end])
->sum('amount');
//Get the export revenue from the database
$revenueExport = AllianceWalletJournal::where([
'ref_type' => 'planetary_export_tax',
$revenueExport = PlanetProductionTaxJournal::where([
'ref_type' => 'planetary_export_tax',
'second_party_id' => '98287666',
])->whereBetween('date', [$start, $end])
->sum('amount');
@@ -117,14 +109,27 @@ class TaxesHelper {
public function GetOfficeGross($start, $end) {
$revenue = 0.00;
$revenue = AllianceWalletJournal::where([
$revenue = OfficeFeesJournal::where([
'ref_type' => 'office_rental_fee',
'second_party_id' => '98287666',
])->whereBetween('date', [$start, $end])
->sum('amount');
return $revenue;
}
public function GetPiSalesGross($start, $end) {
$revenue = 0.00;
$grosses = PISaleJournal::whereBetween('date', [$start, $end])->get()->toArray();
foreach($grosses as $gross) {
$revenue += ($gross['quantity'] * $gross['unit_price']);
}
return $revenue;
}
/**
* Returns a set of dates from now until the amount of months has passed
*

View File

@@ -9,9 +9,6 @@ class AllowedLogin extends Model
//Table Name
public $table = 'allowed_logins';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;

View File

@@ -1,41 +0,0 @@
<?php
namespace App\Models\AfterActionReports;
use Illuminate\Database\Eloquent\Model;
class AfterActionReport extends Model
{
//Table Name
public $table = 'fc_after_action_reports';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'fc_id',
'fc_name',
'formup_time',
'formup_location',
'comms',
'doctrine',
'objective',
'objective_result',
'summary',
'improvements',
'worked_well',
'additional_comments',
];
public function comments() {
return $this->hasMany(App\Models\AfterActionReports\AfterActionReportComment::class, 'report_id', 'id');
}
}

View File

@@ -1,33 +0,0 @@
<?php
namespace App\Models\AfterActionReports;
use Illuminate\Database\Eloquent\Model;
class AfterActionReportComment extends Model
{
//Table Name
public $table = 'fc_aar_comments';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'report_id',
'character_id',
'character_name',
'comments',
];
public function report() {
$this->belongsTo(App\Models\AfterActionReports\AfterActionReport::class, 'id', 'report_id');
}
}

View File

@@ -9,9 +9,6 @@ class BlacklistEntity extends Model
//Table Name
public $table = 'alliance_blacklist';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;

View File

@@ -9,9 +9,6 @@ class SupplyChainBid extends Model
//Table Name
public $table = 'supply_chain_bids';
//Primary Key
public $primaryKey = 'id';
// Timestamps
public $timestamps = true;
@@ -32,11 +29,11 @@ class SupplyChainBid extends Model
//Relationships
public function ContractId() {
return $this->belongsTo(App\Models\Contracts\SupplyChainContract::class, 'contract_id', 'contract_id');
return $this->hasOne('App\Models\Contracts\SupplyChainContract', 'contract_id', 'contract_id');
}
public function Contract() {
return $this->belongsTo(App\Models\Contracts\SupplyChainContract::class);
return $this->belongsTo(SupplyChainContract::class);
}
//Model functions

View File

@@ -9,9 +9,6 @@ class SupplyChainContract extends Model
//Table Name
public $table = 'supply_chain_contracts';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;

View File

@@ -9,9 +9,6 @@ class EsiScope extends Model
// Table Name
protected $table = 'EsiScopes';
//Primary Key
public $primaryKey = 'id';
// Timestamps
public $timestamps = true;
@@ -26,6 +23,6 @@ class EsiScope extends Model
];
public function user() {
return $this->belongsTo(App\Models\User\User::class, 'character_id', 'character_id');
return $this->belongsTo('App\Models\User\User', 'character_id', 'character_id');
}
}

View File

@@ -28,11 +28,7 @@ class EsiToken extends Model
'expires_in',
];
public function user() {
return $this->belongsTo(App\Models\User\User::class, 'character_id', 'character_id');
}
public function esiscopes() {
return $this->hasMany(App\Models\EsiScope::class, 'character_id', 'character_id');
return $this->hasMany('App\Models\EsiScope', 'character_id', 'character_id');
}
}

View File

@@ -11,9 +11,6 @@ class AllianceWalletJournal extends Model
*/
protected $table = 'alliance_wallet_journal';
//Primary Key
public $primaryKey = 'id';
/**
* Timestamps
*/

View File

@@ -9,9 +9,6 @@ class JobStatus extends Model
//Table Name
public $table = 'job_statuses';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestaps = true;

View File

@@ -9,9 +9,6 @@ class AllianceLookup extends Model
//Table Name
public $table = 'alliance_lookup';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = false;

View File

@@ -9,9 +9,6 @@ class CharacterLookup extends Model
//Table Name
public $table = 'character_lookup';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = false;

View File

@@ -9,9 +9,6 @@ class CorporationLookup extends Model
//Table Name
public $table = 'corporation_lookup';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = false;

View File

@@ -11,9 +11,6 @@ class ItemLookup extends Model
*/
public $table = 'item_lookup';
//Primary Key
public $primaryKey = 'id';
/**
* Timestamps
*/

View File

@@ -1,37 +0,0 @@
<?php
namespace App\Models\Lookups;
use Illuminate\Database\Eloquent\Model;
class MoonLookup extends Model
{
/**
* Table Name
*/
public $table = 'moon_lookup';
/**
* Primary Key
*/
public $primaryKey = 'id';
/**
* Timestamps
*/
public $timestamps = false;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'moon_id',
'name',
'position_x',
'position_y',
'position_z',
'system_id',
];
}

View File

@@ -9,9 +9,6 @@ class SolarSystem extends Model
//Table Name
public $table = 'solar_systems';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = false;

View File

@@ -9,9 +9,6 @@ class SentMail extends Model
//Table Name
protected $table = 'sent_mails';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = false;

View File

@@ -9,9 +9,6 @@ class Invoice extends Model
//Table Name
protected $table = 'alliance_mining_tax_invoices';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
@@ -28,11 +25,10 @@ class Invoice extends Model
'date_issued',
'date_due',
'status',
'mail_body',
];
public function getPayment() {
return $this->hasOne(App\Models\MiningTax\Payment::class, 'invoice_id', 'invoice_id');
return $this->hasMany('App\Models\MiningTax\Payment', 'invoice_id', 'invoice_id');
}
public function getCharacterId() {
@@ -48,7 +44,7 @@ class Invoice extends Model
}
public function getLedgers() {
return $this->hasMany(App\Models\MiningTax\Ledger::class, 'invoice_id', 'invoice_id');
return $this->hasMany('App\Models\MiningTax\Ledger', 'invoice_id', 'invoice_id');
}
public function getInvoiceAmount() {

View File

@@ -9,9 +9,6 @@ class Ledger extends Model
//Table Name
protected $table = 'alliance_mining_tax_ledgers';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = false;
@@ -34,7 +31,7 @@ class Ledger extends Model
];
public function getInvoice() {
return $this->belongsTo(App\Models\MiningTax\Invoice::class, 'invoice_id', 'invoice_id');
return $this->belongsTo('App\Models\MiningTax\Invoice', 'invoice_id', 'invoice_id');
}

View File

@@ -9,9 +9,6 @@ class Observer extends Model
//Table Name
protected $table = 'alliance_mining_tax_observers';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
@@ -24,8 +21,11 @@ class Observer extends Model
'last_updated',
'observer_id',
'observer_type',
'observer_name',
'solar_system_name',
'solar_system_id',
];
];
public function getLedgers() {
return $this->hasMany('App\Models\MiningTax\Ledger', 'observer_id', 'observer_id');
}
}

View File

@@ -9,9 +9,6 @@ class Payment extends Model
//Table Name
protected $table = 'alliance_mining_tax_payments';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
@@ -31,6 +28,6 @@ class Payment extends Model
];
public function getInvoice() {
return $this->belongsTo(App\Models\MiningTax\Invoice::class, 'invoice_id', 'invoice_id');
return $this->belongsTo('App\Models\MiningTax\Invoice', 'invoice_id', 'invoice_id');
}
}

View File

@@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class RentalInvoice extends Model
{
//
}

View File

@@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class RentalLedger extends Model
{
//
}

View File

@@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class RentalPayment extends Model
{
//
}

View File

@@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class RentalStructure extends Model
{
//
}

View File

@@ -9,9 +9,6 @@ class Config extends Model
// Table Name
protected $table = 'Config';
//Primary Key
public $primaryKey = 'id';
// Timestamps
public $timestamps = false;

View File

@@ -9,9 +9,6 @@ class ItemComposition extends Model
// Table Name
protected $table = 'ItemComposition';
//Primary Key
public $primaryKey = 'id';
// Timestamps
public $timestamps = false;
}

View File

@@ -1,38 +0,0 @@
<?php
namespace App\Models\MoonRental;
use Illuminate\Database\Eloquent\Model;
class AllianceMoon extends Model
{
/**
* Table Name
*/
public $table = 'alliance_moons';
/**
* Primary Key
*/
public $primaryKey = 'id';
/**
* Timestamps
*/
public $timestamps = true;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'moon_id',
'name',
'system_id'
'system_name',
'worth_amount',
'rented',
'rental_amount',
];
}

View File

@@ -1,35 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class AllianceMoonOre extends Model
{
/**
* Table Name
*/
public $table = 'alliance_moon_ores';
/**
* Primary Key
*/
public $primaryKey = 'id';
/**
* Timestamps
*/
public $timestamps = false;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'moon_id',
'name',
'ore_type_id',
'ore_name',
];
}

View File

@@ -1,40 +0,0 @@
<?php
namespace App\Models\MoonRental;
use Illuminate\Database\Eloquent\Model;
class AllianceMoonRental extends Model
{
/**
* Table Name
*/
public $table = 'alliance_moon_rentals';
/**
* Primary Key
*/
public $primaryKey = 'id';
/**
* Timestamps
*/
public $timestamps = true;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'moon_id',
'moon_name',
'rental_amount',
'rental_start',
'rental_end',
'next_billing_date',
'entity_id',
'entity_name',
'entity_type',
];
}

View File

@@ -14,14 +14,4 @@ class SrpFleetType extends Model
//Timestamps
public $timestamps = false;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'code',
'description',
];
}

View File

@@ -22,6 +22,6 @@ class SrpPayout extends Model
];
public function shipType() {
return $this->belongsTo(SrpShipType::class, 'code', 'code');
return $this->belongsTo(SrpShipType::class);
}
}

View File

@@ -22,10 +22,6 @@ class SrpShipType extends Model
];
public function costCode() {
return $this->hasOne(App\Models\SRP\SrpPayout::class, 'code', 'code');
}
public function fleetType() {
return $this->belongsTo(App\Models\SRP\SrpFleetType::class, 'code', 'code');
return $this->hasOne('App\Models\SRP\SrpPayout', 'code', 'code');
}
}

View File

@@ -6,13 +6,10 @@ use Illuminate\Database\Eloquent\Model;
class ScheduleJob extends Model
{
//Table Name
protected $table = 'schedule_jobs';
//Timestamps
public $timestamps = true;
//Primary Key
public $primaryKey = 'id';
protected $fillable = [

View File

@@ -34,11 +34,6 @@ class Asset extends Model
'location_type',
'quantity',
'type_id',
'created_at',
'updated_at',
];
public function structure() {
return $this->belongsTo(App\Models\Structure\Structure::class, 'structure_id', 'location_id');
}
}

View File

@@ -10,7 +10,7 @@ class Service extends Model
public $table = 'alliance_services';
//Timestamps
public $timestamps = true;
public $timestamps = false;
//Primary Key
public $primaryKey = 'id';
@@ -24,11 +24,9 @@ class Service extends Model
'structure_id',
'name',
'state',
'created_at',
'updated_at',
];
public function structure() {
return $this->belongsTo(App\Models\Structure\Structure::class, 'structure_id', 'structure_id');
return $this->hasOne('App\Models\Structure\Structure', 'structure_id', 'structure_id');
}
}

Some files were not shown because too many files have changed in this diff Show More