diff --git a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php b/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php index 9c252edff..61b926765 100644 --- a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php +++ b/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php @@ -1,6 +1,6 @@ connection = 'redis'; + // } /** @@ -61,35 +48,49 @@ class SendMiningTaxesInvoices implements ShouldQueue //Declare variables $lookup = new LookupHelper; $config = config('esi'); + $mainAlts = array(); $mailDelay = 15; + $mainIds = new Collection; - //Get the characters for each non-invoiced ledger entry + //Get all of the users in the database + $charIds = 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($charIds as $charId) { + //Gather up all of the ledgers from the character and its alts. + $ledgers = $this->LedgersWithAlts($charId); + + if(sizeof($ledgers) > 0) { + //Create an invoice from the ledger rows + $this->CreateInvoice($charId, $ledgers, $mailDelay); + } + } + + //Get the ledgers characters which haven't had an invoice created yet. $charIds = Ledger::where([ 'invoiced' => 'No', - ])->distinct('character_id') - ->pluck('character_id'); + ])->distinct('character_id') + ->pluck('character_id'); if($charIds == null) { - //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. + $this->CreateOtherInvoices($charIds, $mailDelay); + + return 0; + } + + private function CreateOtherInvoices($charIds, $mailDelay) { foreach($charIds as $charId) { - //Declare some variables we need for each iteration of the loop $invoice = array(); $ores = array(); $totalPrice = 0.00; $body = null; + $lookup = new LookupHelper; + $config = config('esi'); - //Get the row count to reduce overhead processing if we can. - $rowCount = Ledger::where([ - 'character_id' => $charId, - 'invoiced' => 'No', - ])->count(); - //Get the actual rows $rows = Ledger::where([ 'character_id' => $charId, @@ -97,7 +98,7 @@ class SendMiningTaxesInvoices implements ShouldQueue ])->get()->toArray(); //Taly up the item composition from each row and multiply by the quantity - if($rowCount > 0) { + if(sizeof($rows) > 0) { foreach($rows as $row) { if(!isset($ores[$row['type_id']])) { $ores[$row['type_id']] = 0; @@ -162,7 +163,7 @@ class SendMiningTaxesInvoices implements ShouldQueue $subject = 'Warped Intentions Mining Taxes'; $sender = $config['primary']; $recipientType = 'character'; - $recipient = $charId; + $recipient = $config['primary']; //Send the Eve Mail Job to the queue to be dispatched SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->onQueue('mail')->delay(Carbon::now()->addSeconds($mailDelay)); @@ -184,7 +185,7 @@ class SendMiningTaxesInvoices implements ShouldQueue 'character_id' => $charId, 'invoiced' => 'No', ])->update([ - 'invoiced' => 'Yes', + 'invoiced' => 'No', 'invoice_id' => $invoiceId, ]); @@ -192,5 +193,163 @@ class SendMiningTaxesInvoices implements ShouldQueue $mailDelay = $mailDelay + 20; } } + + return 0; + } + + private function CreateInvoice($charId, $ledgers, &$mailDelay) { + $invoice = array(); + $ores = array(); + $totalPrice = 0.00; + $body = null; + $lookup = new LookupHelper; + + if(sizeof($ledgers) > 0) { + foreach($ledgers as $ledger) { + if(!isset($ores[$row['type_id']])) { + $ores[$row['type_id']] = 0; + } + $ores[$row['type_id']] = $ores[$row['type_id']] + $row['quantity']; + $totalPrice = $totalPrice + $row['amount']; + } + + $invoiceAmount = round(($totalPrice * $config['mining_tax']), 2); + + $charName = $lookup->CharacterIdToName($charId); + + $invoiceId = uniqid(); + $datedue = Carbon::now()->addDays(7); + $invoiceDate = Carbon::now(); + + $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(strlen($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 + SendEveMail::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(); + + foreach($ledgers as $ledger) { + Ledger::where([ + 'character_id' => $ledger['character_id'], + 'invoiced' => 'No', + ])->update([ + 'invoiced' => 'Yes', + 'invoice_id' => $invoiceId, + ]); + + $mailDelay += 20; + } + } else { + return null; + } + + return 0; + } + + private function LedgersWithAlts($charId) { + $ledgers = array(); + + $alts = UserAlt::where([ + 'main_id' => $charId, + ])->get(); + + $rows = Ledger::where([ + 'character_id' => $charId, + 'invoiced' => 'No', + ])->get(); + + if($rows->count() > 0) { + foreach($rows as $row) { + array_push($ledgers, [ + 'character_id' => $row->character_id, + 'character_name' => $row->character_name, + 'observer_id' => $row->observer_id, + 'last_updated' => $row->last_updated, + 'type_id' => $row->type_id, + 'ore_name' => $row->ore_name, + 'quantity' => $row->quantity, + 'amount' => $row->amount, + 'invoiced' => $row->invoiced, + 'invoice_id' => $row->invoice_id, + ]); + } + } + + if($alts->count() > 0) { + foreach($alts as $alt) { + $rows = Ledger::where([ + 'character_id' => $alt->character_id, + 'invoiced' => 'No', + ])->get(); + + foreach($rows as $row) { + array_push($ledgers, [ + 'character_id' => $row->character_id, + 'character_name' => $row->character_name, + 'observer_id' => $row->observer_id, + 'last_updated' => $row->last_updated, + 'type_id' => $row->type_id, + 'ore_name' => $row->ore_name, + 'quantity' => $row->quantity, + 'amount' => $row->amount, + 'invoiced' => $row->invoiced, + 'invoice_id' => $row->invoice_id, + ]); + } + } + } + + //Return the ledgers + return $ledgers; } } diff --git a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesNew.php b/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesNew.php deleted file mode 100644 index 562a0defe..000000000 --- a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesNew.php +++ /dev/null @@ -1,355 +0,0 @@ -LedgersWithAlts($charId); - - if(sizeof($ledgers) > 0) { - //Create an invoice from the ledger rows - $this->CreateInvoice($charId, $ledgers, $mailDelay); - } - } - - //Get the ledgers characters which haven't had an invoice created yet. - $charIds = Ledger::where([ - 'invoiced' => 'No', - ])->distinct('character_id') - ->pluck('character_id'); - - if($charIds == null) { - return 0; - } - - $this->CreateOtherInvoices($charIds, $mailDelay); - - return 0; - } - - private function CreateOtherInvoices($charIds, $mailDelay) { - foreach($charIds as $charId) { - $invoice = array(); - $ores = array(); - $totalPrice = 0.00; - $body = null; - $lookup = new LookupHelper; - $config = config('esi'); - - //Get the actual rows - $rows = Ledger::where([ - 'character_id' => $charId, - 'invoiced' => 'No', - ])->get()->toArray(); - - //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(strlen($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 = $config['primary']; - - //Send the Eve Mail Job to the queue to be dispatched - SendEveMail::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' => 'No', - 'invoice_id' => $invoiceId, - ]); - - //update the delay - $mailDelay = $mailDelay + 20; - } - } - - return 0; - } - - private function CreateInvoice($charId, $ledgers, &$mailDelay) { - $invoice = array(); - $ores = array(); - $totalPrice = 0.00; - $body = null; - $lookup = new LookupHelper; - - if(sizeof($ledgers) > 0) { - foreach($ledgers as $ledger) { - if(!isset($ores[$row['type_id']])) { - $ores[$row['type_id']] = 0; - } - $ores[$row['type_id']] = $ores[$row['type_id']] + $row['quantity']; - $totalPrice = $totalPrice + $row['amount']; - } - - $invoiceAmount = round(($totalPrice * $config['mining_tax']), 2); - - $charName = $lookup->CharacterIdToName($charId); - - $invoiceId = uniqid(); - $datedue = Carbon::now()->addDays(7); - $invoiceDate = Carbon::now(); - - $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(strlen($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 - SendEveMail::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(); - - foreach($ledgers as $ledger) { - Ledger::where([ - 'character_id' => $ledger['character_id'], - 'invoiced' => 'No', - ])->update([ - 'invoiced' => 'Yes', - 'invoice_id' => $invoiceId, - ]); - - $mailDelay += 20; - } - } else { - return null; - } - - return 0; - } - - private function LedgersWithAlts($charId) { - $ledgers = array(); - - $alts = UserAlt::where([ - 'main_id' => $charId, - ])->get(); - - $rows = Ledger::where([ - 'character_id' => $charId, - 'invoiced' => 'No', - ])->get(); - - if($rows->count() > 0) { - foreach($rows as $row) { - array_push($ledgers, [ - 'character_id' => $row->character_id, - 'character_name' => $row->character_name, - 'observer_id' => $row->observer_id, - 'last_updated' => $row->last_updated, - 'type_id' => $row->type_id, - 'ore_name' => $row->ore_name, - 'quantity' => $row->quantity, - 'amount' => $row->amount, - 'invoiced' => $row->invoiced, - 'invoice_id' => $row->invoice_id, - ]); - } - } - - if($alts->count() > 0) { - foreach($alts as $alt) { - $rows = Ledger::where([ - 'character_id' => $alt->character_id, - 'invoiced' => 'No', - ])->get(); - - foreach($rows as $row) { - array_push($ledgers, [ - 'character_id' => $row->character_id, - 'character_name' => $row->character_name, - 'observer_id' => $row->observer_id, - 'last_updated' => $row->last_updated, - 'type_id' => $row->type_id, - 'ore_name' => $row->ore_name, - 'quantity' => $row->quantity, - 'amount' => $row->amount, - 'invoiced' => $row->invoiced, - 'invoice_id' => $row->invoice_id, - ]); - } - } - } - - //Return the ledgers - return $ledgers; - } -} diff --git a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesOld.php b/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesOld.php new file mode 100644 index 000000000..7a631ee35 --- /dev/null +++ b/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesOld.php @@ -0,0 +1,196 @@ +connection = 'redis'; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + //Declare variables + $lookup = new LookupHelper; + $config = config('esi'); + $mailDelay = 15; + + //Get the characters for each non-invoiced ledger entry + $charIds = Ledger::where([ + 'invoiced' => 'No', + ])->distinct('character_id') + ->pluck('character_id'); + + if($charIds == null) { + //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. + 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 row count to reduce overhead processing if we can. + $rowCount = Ledger::where([ + 'character_id' => $charId, + 'invoiced' => 'No', + ])->count(); + + //Get the actual rows + $rows = Ledger::where([ + 'character_id' => $charId, + 'invoiced' => 'No', + ])->get()->toArray(); + + //Taly up the item composition from each row and multiply by the quantity + if($rowCount > 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(strlen($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 + SendEveMail::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; + } + } + } +}