diff --git a/app/Console/Commands/MiningTaxes/MiningTaxesInvoicesNew.php b/app/Console/Commands/MiningTaxes/MiningTaxesInvoicesNew.php index 5cfabb68b..0e4ab0f97 100644 --- a/app/Console/Commands/MiningTaxes/MiningTaxesInvoicesNew.php +++ b/app/Console/Commands/MiningTaxes/MiningTaxesInvoicesNew.php @@ -57,6 +57,7 @@ class MiningTaxesInvoicesNew extends Command $lookup = new LookupHelper; $config = config('esi'); $task = new CommandHelper('MiningTaxesInvoices'); + $mainsAlts = array(); $mailDelay = 15; //Set the task as started $task->SetStartStatus(); @@ -66,141 +67,20 @@ class MiningTaxesInvoicesNew extends Command 'invoiced' => 'No', ])->distinct('character_id') ->pluck('character_id'); - - if($charIds == null) { + + //If character ids are null, then there are no ledgers to process. + if($charIds->count() == 0) { //Set the task status as done and Log the issue $task->SetStopStatus(); Log::warning("No characters found to send invoices to in MiningTaxesInvoices Command."); return 0; } - //Foreach character tally up the mining ledger. + /** + * From the list of character ids, create an array of mains and alts to group together. + */ foreach($charIds as $charId) { - //Declare some variables we need for each iteration of the loop - $invoice = array(); - $ores = array(); - $totalPrice = 0.00; - $body = null; - - $alts = UserAlts::where([ - 'main_id' => $charId, - ])->get(); - //Get the actual rows - $rows = Ledger::where([ - 'character_id' => $charId, - 'invoiced' => 'No', - ])->get()->toArray(); - - if($alts->count() > 0) { - foreach($alts as $alt) { - $altRows = Ledger::where([ - 'character_id' => $alt->character_id, - 'invoiced' => 'No', - ])->get()->toArray(); - - foreach($altRows as $altRow) { - array_push($rows, $altRow); - } - } - } - - //Taly up the item composition from each row and multiply by the quantity - if(sizeof($rows) > 0) { - 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 * $config['mining_tax']; - $invoiceAmount = round($invoiceAmount, 2); - - //Get the character name from the character id - $charName = $lookup->CharacterIdToName($charId); - - //Generate a unique invoice id - $invoiceId = uniqid(); - //Set the due date of the invoice - $dateDue = Carbon::now()->addDays(7); - $invoiceDate = Carbon::now(); - - //Format the mining tax into a human readable number - $numberMiningTax = number_format(($config['mining_tax'] * 100.00), 2, ".", ","); - - //Create the mail body - $body .= "Dear Miner,

"; - $body .= "Mining Taxes are due for the following ores mined from alliance moons:
"; - foreach($ores as $ore => $quantity) { - $oreName = $lookup->ItemIdToName($ore); - $body .= $oreName . ": " . number_format($quantity, 0, ".", ",") . "
"; - } - $body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK."; - $body .= "

"; - $body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "
"; - $body .= "Set the reason for transfer as MMT: " . $invoiceId . "
"; - $body .= "The mining taxes are currently set to " . $numberMiningTax . "%.
"; - $body .= "

"; - $body .= "You can also send a contract with the following ores in the contract with the reason set as MMT: " . $invoiceId . "
"; - foreach($ores as $ore => $quantity) { - $oreName = $lookup->ItemIdToName($ore); - $body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "
"; - } - $body .= "
"; - $body .= "
Sincerely,
Warped Intentions Leadership
"; - - //Check if the mail body is greater than 2000 characters. If greater than 2,000 characters, then - if(sizeof($body) > 2000) { - $body = "Dear Miner,

"; - $body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK."; - $body .= "

"; - $body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "
"; - $body .= "Set the reason for transfer as MMT: " . $invoiceId . "
"; - $body .= "The mining taxes are currently set to " . $numberMiningTax . "%.
"; - $body .= "
"; - $body .= "
Sincerely,
Warped Intentions Leadership
"; - } - - //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')->delay(Carbon::now()->addSeconds($mailDelay)); - - //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 = $invoiceDate; - $invoice->date_due = $dateDue; - $invoice->status = 'Pending'; - $invoice->mail_body = $body; - $invoice->save(); - - //Update the ledger entries - Ledger::where([ - 'character_id' => $charId, - 'invoiced' => 'No', - ])->update([ - 'invoiced' => 'Yes', - 'invoice_id' => $invoiceId, - ]); - - //update the delay - $mailDelay = $mailDelay + 20; - } - } //Set the task as stopped diff --git a/app/Http/Controllers/MiningTaxes/MiningTaxesController.php b/app/Http/Controllers/MiningTaxes/MiningTaxesController.php index fbc7d2948..aeeb26455 100644 --- a/app/Http/Controllers/MiningTaxes/MiningTaxesController.php +++ b/app/Http/Controllers/MiningTaxes/MiningTaxesController.php @@ -251,10 +251,10 @@ class MiningTaxesController extends Controller if($ledgers != null) { foreach($ledgers as $ledger) { //Get the structure name from the database - $structure = $sHelper->GetStructureInfo($obs->observer_id); + $structureInfo = $sHelper->GetStructureInfo($obs->observer_id); array_push($miningLedgers, [ - 'structure' => $structure->name, + 'structure' => $structureInfo->name, 'character' => auth()->user()->getName(), 'corpTicker' => $corpInfo->ticker, 'ore' => $ore, @@ -263,7 +263,7 @@ class MiningTaxesController extends Controller ]); array_push($structures, [ - 'name' => $structure->name, + 'name' => $structureInfo->name, ]); } } else {