Reworked the old Finances Library and renamed it FinanceHelper Library

This commit is contained in:
2018-12-03 20:29:02 -06:00
parent 28b98d2ef6
commit 3f6afa4daf
8 changed files with 288 additions and 163 deletions

View File

@@ -79,7 +79,6 @@ class CorpJournal extends Command
} }
//If we didn't find the corporation was already done, then complete it. //If we didn't find the corporation was already done, then complete it.
if($corpCompleted === false) { if($corpCompleted === false) {
//$this->line('Getting corp journal');
$this->GetJournal($structure->character_id); $this->GetJournal($structure->character_id);
$finishedCorps[sizeof($finishedCorps)] = $structure->corporation_id; $finishedCorps[sizeof($finishedCorps)] = $structure->corporation_id;
//After the corporation has been done set the variable back to false //After the corporation has been done set the variable back to false

View File

@@ -14,7 +14,7 @@ use App\Models\User\UserRole;
use App\Models\User\UserPermission; use App\Models\User\UserPermission;
use App\Models\Corporation\CorpJournal; use App\Models\Corporation\CorpJournal;
use App\Library\Finances; use App\Library\FinanceHelper;
use App\Library\Esi; use App\Library\Esi;
use App\Library\SeatHelper; use App\Library\SeatHelper;
@@ -31,7 +31,7 @@ class FinancesController extends Controller
} }
public function displayWallet() { public function displayWallet() {
$helper = new Finances(); $helper = new FinanceHelper();
$helper->GetWalletJournal(1, 92626011); $helper->GetWalletJournal(1, 92626011);
dd($helper); dd($helper);
@@ -41,7 +41,7 @@ class FinancesController extends Controller
//Make the helper esi class //Make the helper esi class
$helper = new Esi(); $helper = new Esi();
//Make the helper class for finances //Make the helper class for finances
$hFinances = new Finances(); $hFinances = new FinanceHelper();
//Set the carbon date for the first day of this month, last day of this month, and the previous month's first and last days. //Set the carbon date for the first day of this month, last day of this month, and the previous month's first and last days.
$start = Carbon::now()->startOfMonth(); $start = Carbon::now()->startOfMonth();
$end = Carbon::now()->endOfMonth(); $end = Carbon::now()->endOfMonth();

View File

@@ -0,0 +1,220 @@
<?php
/**
* W4RP Services
* GNU Public License
*/
namespace App\Library;
use DB;
use Carbon\Carbon;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\Corporation\CorpJournal;
use App\Models\User\UserToCorporation;
use App\Library\Esi;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
use Seat\Eseye\Containers\EsiAuthentication;
use Seat\Eseye\Eseye;
class FinanceHelper {
private $ref_types = [
'brokers_fee',
'reprocessing_tax',
];
public function CalculateFuelBlockCost($type) {
//Calculate how many fuel blocks are used in a month by a structure type
if($type === 'market') {
$fuelBlocks = 30*32*24;
} else if ($type === 'reprocessing') {
$fuelBlocks = 8*30*24;
} else {
$fuelBlocks = 0;
}
//Multiply the amount of fuel blocks used by the structure by 20,000.
$cost = $fuelBlocks * 20000;
//Return to the calling function
return $cost;
}
public function CalculateTax($taxAmount, $overallTax, $type) {
//The alliance will get a ratio of the tax.
//We need to calculate the correct ratio based on structure tax,
//Then figure out what is owed to the alliance
if($type === 'market') {
$ratioType = 2.5;
} else if ($type === 'refinery') {
$ratioType = 1.0;
} else {
$ratioType = 1.5;
}
//Calculate the ratio since we have the base percentage the alliance takes
$taxRatio = $overallTax / $ratioType;
//Calculate the tax owed to the alliance by taking the tax amount collected
//and divide by the tax ratio.
$amount = $taxAmount / $taxRatio;
//Return what is owed to the alliance
return $amount;
}
public function GetWalletJournal($division, $charId) {
//Get hte ESI token for the corporation to add new wallet journals into the database
$token = DB::table('EsiTokens')->where('character_id', $charId)->get();
//Reference to see if the character is in our look up table for corporations and characters
$corpId = $this->GetCharCorp($charId);
//Disable all caching by setting the NullCache as the preferred cache handler.
$configuraiton = Configuration::getInstance();
$configuration->cache = NullCache::class;
//Create an ESI authentication container
$config = config('esi');
$authentication = new EsiAuthentication([
'client_id' => $config['client_id'],
'secret' => $config['secret'],
'refresh_token' => $token[0]->refresh_token,
]);
//Create the esi class varialble
$esi = new Eseye($authentication);
//Set our current page to 1 which is the one we are starting on.
$currentPage = 1;
//Set our default total pages to 1 in case our try section fails out.
$totalPages = 1;
//If more than one page is found, decode the first set of wallet entries, then call for the next pages
do {
//Call the first page of the wallet journal, as we are always going to get at least one page.
//If we have more pages, then we will continue through the while loop.
try {
$journals = $esi->page($currentPage)
->invoke('get', '/corporations/{corporation_id}/wallets/{division}/journal/', [
'corporation_id' => $character->corporation_id,
'division' => $division,
]);
} catch(\Seat\Eseye\Exceptions\RequestFailedException $e) {
return $e->getEsiResponse();
}
//Set the total pages we need to cycle through.
$totalPages = $journals->pages;
//Decode the wallet from json into an array
$wallet = json_decode($journals->raw, true);
//For each journal entry, attempt to store it in the database.
//The PutWalletJournal function checks to see if it's already in the database.
foreach($wallet as $entry) {
if($entry['ref_type'] == 'brokers_fee' || $entry['ref_type'] == 'reprocessing_tax') {
$this->PutWalletJournal($entry, $corpId, $division);
}
}
//Increment the current page we are on.
$currentPage++;
//Continue looping through the do while loop until the current page is greater than or equal to the total pages.
} while ($currentPage < $totalPages);
}
/**
* Returns the corporation a character is in if found in the lookup table, otherwise,
* adds the character to the lookup table, and returns the corporation id
*
* @param charId
* @return corpId
*/
private function GetCharCorp($charId) {
//Check for the character the user_to_corporation table
$found = DB::table('user_to_corporation')->where('character_id', $charId)->get();
//If we don't find the character in the table, then let's retrieve the information from ESI
if($found == null) {
//Get the configuration for ESI from the environmental variables
$config = config('esi');
//Setup a new ESI container
$esi = new Eseye();
//Try to get the character information, then the corporation information
try {
$character = $esi->invoke('get', '/characters/{character_id}/', [
'character_id' => $charId,
]);
$corporation = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $character->corporation_id,
]);
} catch(\Seat\Eseye\Exceptions\RequestFailedException $e){
return $e->getEsiResponse();
}
//Save all of the data to the database
$character = new UserToCorporation;
$character->character_id = $character->character_id;
$character->character_name = $character->name;
$character->corporation_id = $character->corporation_id;
$character->corporation_name = $corporation->name;
$character->save();
//Return the corporation_id which is what the calling function is looking for
return $character->corporation_id;
} else {
//Return the corporation_id if it was found in the database as it is what the calling function is looking for
return $found->corporation_id;
}
}
private function PutWalletJournal($journal, $corpId, $division) {
//Create ESI Helper class
$esiHelper = new Esi;
$date = $esiHelper->DecodeDate($journal['date']);
$check = DB::table('CorpJournals')->where('id', $journal['id'])->get();
//if we don't find the journal entry, add the journal entry to the database
if($check->count() === 0) {
$entry = new CorpJournal;
$entry->id = $journal['id'];
$entry->corporation_id = $corpId;
$entry->division = $division;
if(isset($journal['amount'])) {
$entry->amount = $journal['amount'];
}
if(isset($journal['balance'])) {
$entry->balance = $journal['balance'];
}
if(isset($journal['context_id'])) {
$entry->context_id = $journal['context_id'];
}
if(isset($journal['context_id_type'])) {
$entry->context_id_type = $journal['context_id_type'];
}
$entry->date = $date;
$entry->description = $journal['description'];
if(isset($journal['first_party_id'])) {
$entry->first_party_id = $journal['first_party_id'];
}
if(isset($journal['reason'])) {
$entry->reason = $journal['reason'];
}
$entry->ref_type = $journal['ref_type'];
if(isset($journal['second_party_id'])) {
$entry->second_party_id = $journal['second_party_id'];
}
if(isset($journal['tax'])) {
$entry->tax = $journal['tax'];
}
if(isset($journal['tax_receiver_id'])) {
$entry->tax_receiver_id = $journal['tax_receiver_id'];
}
$entry->save();
}
}
}
?>

View File

@@ -1,157 +0,0 @@
<?php
/**
* W4RP Services
* GNU Public License
*/
namespace App\Library;
use DB;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\Corporation\CorpJournal;
use App\Library\Esi;
use Carbon\Carbon;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
use Seat\Eseye\Containers\EsiAuthentication;
use Seat\Eseye\Eseye;
class Finances {
public function CalculateFuelBlockCost($type) {
//Calculate how many fuel blocks are used in a month by a structure type
if($type === 'market') {
$fuelBlocks = 30*32*24;
} else if ($type === 'reprocessing') {
$fuelBlocks = 8*30*24;
} else {
$fuelBlocks = 0;
}
//Multiply the amount of fuel blocks used by the structure by 20,000.
$cost = $fuelBlocks * 20000;
//Return to the calling function
return $cost;
}
public function CalculateTax($taxAmount, $overallTax, $type) {
//The alliance will get a ratio of the tax.
//We need to calculate the correct ratio based on structure tax,
//Then figure out what is owed to the alliance
if($type === 'market') {
$ratioType = 2.5;
} else if ($type === 'refinery') {
$ratioType = 1.0;
} else {
$ratioType = 1.5;
}
//Calculate the ratio since we have the base percentage the alliance takes
$taxRatio = $overallTax / $ratioType;
//Calculate the tax owed to the alliance by taking the tax amount collected
//and divide by the tax ratio.
$amount = $taxAmount / $taxRatio;
//Return what is owed to the alliance
return $amount;
}
public function GetWalletJournal($division, $charId) {
//Get the ESI token for the corporation to add new wallet journals into the database
$token = DB::table('EsiTokens')->where('character_id', $charId)->get();
//Disable all caching by setting the NullCache as the preferred cache handler.
$configuration = Configuration::getInstance();
$configuration->cache = NullCache::class;
$configuration->logfile_location = '/var/www/w4rpservices/storage/logs/eseye';
//Create the ESI authentication container
$config = config('esi');
$authentication = new EsiAuthentication([
'client_id' => $config['client_id'],
'secret' => $config['secret'],
'refresh_token' => $token[0]->refresh_token,
]);
//Create the esi class variable
$esi = new Eseye($authentication);
//Try an esi call to get public data to get the character information for corp id.
try {
$character = $esi->invoke('get', '/characters/{character_id}/', [
'character_id' => $charId,
]);
} catch(\Seat\Eseye\Exceptions\RequestFailedException $e){
return $e->getEsiResponse();
}
//Try the ESI call to get the wallet journal
try {
$journals = $esi->invoke('get', '/corporations/{corporation_id}/wallets/{division}/journal/', [
'corporation_id' => $character->corporation_id,
'division' => $division,
]);
} catch(\Seat\Eseye\Exceptions\RequestFailedException $e) {
return $e->getEsiResponse();
}
//Decode the journal from json into an array for future processing
$journals = json_decode($journals->raw, true);
//For each journal array, attempt to store in the database
foreach($journals as $entry) {
if($entry['ref_type'] == 'brokers_fee' || $entry['ref_type'] == 'reprocessing_tax') {
$this->PutWalletJournal($entry, $character->corporation_id, $division);
}
}
}
private function PutWalletJournal($journal, $corpId, $division) {
//Create ESI Helper class
$esiHelper = new Esi;
$date = $esiHelper->DecodeDate($journal['date']);
$check = DB::table('CorpJournals')->where('id', $journal['id'])->get();
//if we don't find the journal entry, add the journal entry to the database
if($check->count() === 0) {
$entry = new CorpJournal;
$entry->id = $journal['id'];
$entry->corporation_id = $corpId;
$entry->division = $division;
if(isset($journal['amount'])) {
$entry->amount = $journal['amount'];
}
if(isset($journal['balance'])) {
$entry->balance = $journal['balance'];
}
if(isset($journal['context_id'])) {
$entry->context_id = $journal['context_id'];
}
if(isset($journal['context_id_type'])) {
$entry->context_id_type = $journal['context_id_type'];
}
$entry->date = $date;
$entry->description = $journal['description'];
if(isset($journal['first_party_id'])) {
$entry->first_party_id = $journal['first_party_id'];
}
if(isset($journal['reason'])) {
$entry->reason = $journal['reason'];
}
$entry->ref_type = $journal['ref_type'];
if(isset($journal['second_party_id'])) {
$entry->second_party_id = $journal['second_party_id'];
}
if(isset($journal['tax'])) {
$entry->tax = $journal['tax'];
}
if(isset($journal['tax_receiver_id'])) {
$entry->tax_receiver_id = $journal['tax_receiver_id'];
}
$entry->save();
}
}
}
?>

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Models\User;
use Illuminate\Database\Eloquent\Model;
class UserToCorporation extends Model
{
// Table Name
public $table = 'user_to_corporation';
// Timestamps
public $timestamps = false;
/**
* The attributes that are mass assignable
*
* @var array
*/
protected $fillable = [
'character_id',
'character_name',
'corporation_id',
'corporation_name',
];
}

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUserToCorporationTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if(!Schema::hasTable('user_to_corporation')) {
Schema::create('user_to_corporation', function (Blueprint $table) {
$table->increments('id');
$table->string('character_id');
$table->string('character_name');
$table->string('corporation_id');
$table->string('corporation_name');
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('user_to_corporation');
}
}

View File

@@ -14,7 +14,6 @@ return array(
'App\\Console\\Commands\\sendMail' => $baseDir . '/app/Console/Commands/sendmail.php', 'App\\Console\\Commands\\sendMail' => $baseDir . '/app/Console/Commands/sendmail.php',
'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php', 'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php',
'App\\Exceptions\\Handler' => $baseDir . '/app/Exceptions/Handler.php', 'App\\Exceptions\\Handler' => $baseDir . '/app/Exceptions/Handler.php',
'App\\FleetActivity' => $baseDir . '/app/Models/Fleet/FleetActivity.php',
'App\\Http\\Controllers\\AdminController' => $baseDir . '/app/Http/Controllers/AdminController.php', 'App\\Http\\Controllers\\AdminController' => $baseDir . '/app/Http/Controllers/AdminController.php',
'App\\Http\\Controllers\\AjaxController' => $baseDir . '/app/Http/Controllers/AjaxController.php', 'App\\Http\\Controllers\\AjaxController' => $baseDir . '/app/Http/Controllers/AjaxController.php',
'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ForgotPasswordController.php', 'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ForgotPasswordController.php',
@@ -60,6 +59,7 @@ return array(
'App\\Models\\Esi\\EsiScope' => $baseDir . '/app/Models/Esi/EsiScope.php', 'App\\Models\\Esi\\EsiScope' => $baseDir . '/app/Models/Esi/EsiScope.php',
'App\\Models\\Esi\\EsiToken' => $baseDir . '/app/Models/Esi/EsiToken.php', 'App\\Models\\Esi\\EsiToken' => $baseDir . '/app/Models/Esi/EsiToken.php',
'App\\Models\\Fleet\\Fleet' => $baseDir . '/app/Models/Fleet/Fleet.php', 'App\\Models\\Fleet\\Fleet' => $baseDir . '/app/Models/Fleet/Fleet.php',
'App\\Models\\Fleet\\FleetActivity' => $baseDir . '/app/Models/Fleet/FleetActivity.php',
'App\\Models\\Logistics\\Contract' => $baseDir . '/app/Models/Logistics/Contract.php', 'App\\Models\\Logistics\\Contract' => $baseDir . '/app/Models/Logistics/Contract.php',
'App\\Models\\Market\\MarketOrder' => $baseDir . '/app/Models/Market/MarketOrder.php', 'App\\Models\\Market\\MarketOrder' => $baseDir . '/app/Models/Market/MarketOrder.php',
'App\\Models\\Moon\\ItemComposition' => $baseDir . '/app/Models/Moon/ItemComposition.php', 'App\\Models\\Moon\\ItemComposition' => $baseDir . '/app/Models/Moon/ItemComposition.php',

View File

@@ -409,7 +409,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
'App\\Console\\Commands\\sendMail' => __DIR__ . '/../..' . '/app/Console/Commands/sendmail.php', 'App\\Console\\Commands\\sendMail' => __DIR__ . '/../..' . '/app/Console/Commands/sendmail.php',
'App\\Console\\Kernel' => __DIR__ . '/../..' . '/app/Console/Kernel.php', 'App\\Console\\Kernel' => __DIR__ . '/../..' . '/app/Console/Kernel.php',
'App\\Exceptions\\Handler' => __DIR__ . '/../..' . '/app/Exceptions/Handler.php', 'App\\Exceptions\\Handler' => __DIR__ . '/../..' . '/app/Exceptions/Handler.php',
'App\\FleetActivity' => __DIR__ . '/../..' . '/app/Models/Fleet/FleetActivity.php',
'App\\Http\\Controllers\\AdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/AdminController.php', 'App\\Http\\Controllers\\AdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/AdminController.php',
'App\\Http\\Controllers\\AjaxController' => __DIR__ . '/../..' . '/app/Http/Controllers/AjaxController.php', 'App\\Http\\Controllers\\AjaxController' => __DIR__ . '/../..' . '/app/Http/Controllers/AjaxController.php',
'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ForgotPasswordController.php', 'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ForgotPasswordController.php',
@@ -455,6 +454,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
'App\\Models\\Esi\\EsiScope' => __DIR__ . '/../..' . '/app/Models/Esi/EsiScope.php', 'App\\Models\\Esi\\EsiScope' => __DIR__ . '/../..' . '/app/Models/Esi/EsiScope.php',
'App\\Models\\Esi\\EsiToken' => __DIR__ . '/../..' . '/app/Models/Esi/EsiToken.php', 'App\\Models\\Esi\\EsiToken' => __DIR__ . '/../..' . '/app/Models/Esi/EsiToken.php',
'App\\Models\\Fleet\\Fleet' => __DIR__ . '/../..' . '/app/Models/Fleet/Fleet.php', 'App\\Models\\Fleet\\Fleet' => __DIR__ . '/../..' . '/app/Models/Fleet/Fleet.php',
'App\\Models\\Fleet\\FleetActivity' => __DIR__ . '/../..' . '/app/Models/Fleet/FleetActivity.php',
'App\\Models\\Logistics\\Contract' => __DIR__ . '/../..' . '/app/Models/Logistics/Contract.php', 'App\\Models\\Logistics\\Contract' => __DIR__ . '/../..' . '/app/Models/Logistics/Contract.php',
'App\\Models\\Market\\MarketOrder' => __DIR__ . '/../..' . '/app/Models/Market/MarketOrder.php', 'App\\Models\\Market\\MarketOrder' => __DIR__ . '/../..' . '/app/Models/Market/MarketOrder.php',
'App\\Models\\Moon\\ItemComposition' => __DIR__ . '/../..' . '/app/Models/Moon/ItemComposition.php', 'App\\Models\\Moon\\ItemComposition' => __DIR__ . '/../..' . '/app/Models/Moon/ItemComposition.php',