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; $body = null; //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(); //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(); //Set the due date of the invoice $dateDue = Carbon::now()->addDays(7); $invoiceDate = Carbon::now(); //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(round($quantity * $config['mining_tax']), 0, ".", ",") . "
"; } $body .= "Please remit " . number_format($totalPrice, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "
"; $body .= "Set the reason for transfer as MMT: " . $invoiceId . "
"; $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
"; //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 $task->SetStopStatus(); return 0; } }