Files
w4rpservices/app/Library/Finances/JumpBridgeTax.php
2018-12-26 22:46:45 -06:00

155 lines
5.4 KiB
PHP

<?php
/** W4RP Services
* GNU Public License
*/
namespace App\Library\Finances;
use DB;
use Carbon\Carbon;
use App\Library\Esi\Esi;
use App\Models\Finances\JumpBridgeJournal;
use App\Models\User\UserToCorporation;
class JumpBridgeTax {
private $date;
private $days;
public function __construct($days = null) {
if($days === null) {
$this->date = Carbon::now();
$this->days = 0;
} else {
$this->date = Carbon::now()->subDays($days);
$this->days = $days;
}
}
/**
* Function to insert journal entries into the database
*/
public function InsertJumpBridgeTax($journal, $corpId, $division) {
//Create the ESI Helper class
$esiHelper = new Esi;
//Check to see if we can find the entry in the database already.
//If we don't then add it to the database
if(!JumpBridgeJournal::where(['id' => $journal['id']])->exists()) {
$entry = new JumpBridgeJournal;
$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 = $esiHelper->DecodeDate($journal['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();
}
}
/**
* Function to get the corporations using the jump bridge over a given time period
*/
public function CorporationUsage() {
//Make an array for corporations, and amounts
$amounts = array();
$characters = array();
$data = array();
$esi = new Esi();
//Get all of the parties which have utilized the jump bridge
$parties = DB::table('jump_bridge_journal')
->select('first_party_id')
->groupBy('first_party_id')
->whereTime('date', '>', $this->date)
->get();
//Run through each party and assign them into a corporation, then add the corporation to the corporation array if they don't
//exist in the array.
foreach($parties as $party) {
//If the entry in the database lookup table isn't found, add it.
if(!CharacterToCorporation::where(['character_id' => $party->first_party_id])->exists()) {
$character = $esi->GetCharacterData($party->first_party_id);
$corporation = $esi->GetCorporationData($character->corporation_id);
$char = new CharacterToCorporation;
$char->character_id = $party->first_party_id;
$char->character_name = $character->name;
$char->corporation_id = $character->corporation_id;
$char->corporation_name = $corporation->name;
$char->save();
}
//Perform the lookup and add the user into the corps array, and the ammount to the amount array
$char = CharacterToCorporation::where(['character_id' => $party->first_party_id])->get();
//Find the amount utilized from the jump bridge by the character
$isk = JumpBridgeJournal::where(['first_party_id' => $char->character_id])
->whereBetween('date', [$this->date, $this->date->addDays(30)])
->sum('amount');
//We have the character and isk amount, so we need to build an array with these two values as key value pairs.
$data[$char->corporation_name] = $data[$char->corporation_name] + $isk;
}
//Return the data
return $data;
}
/**
* Returns the overall usage for statistics
*/
public function OverallTax() {
//Get the total usage
$usage = JumpBridgeJournal::select('amount')
->whereTime('date', '>', $this->date)
->sum('amount');
//Return the usage
return $usage;
}
/**
* Returns a specific briddge usage statistics for overall usage
*/
public function JBOverallUsage($structure) {
$usage = DB::table('jump_bridge_journal')
->select('amount')
->where('context_id', $structure)
->sum('amount');
return $usage;
}
}