diff --git a/app/Console/Commands/corpJournal.php b/app/Console/Commands/corpJournal.php index 7073e9674..624e2d855 100644 --- a/app/Console/Commands/corpJournal.php +++ b/app/Console/Commands/corpJournal.php @@ -84,15 +84,6 @@ class CorpJournalCommand extends Command } } - /* - foreach($corps as $corp) { - if($corp->corporation_id != 98287666) { - $charId = CorpStructure::where(['corporation_id' => $corp->corporation_id])->first(); - $finance->GetWalletJournal(1, $charId->character_id); - } - } - */ - //Mark the job as finished $task->SetStopStatus(); } diff --git a/app/Console/Commands/moonmailer.php b/app/Console/Commands/moonmailer.php index 911b8f911..aa0442c9d 100644 --- a/app/Console/Commands/moonmailer.php +++ b/app/Console/Commands/moonmailer.php @@ -59,20 +59,85 @@ class MoonMailerCommand extends Command $task->SetStartStatus(); //Declare the moon calc class variable to utilize the library to update the price - $moonCalc = new MoonCalc(); + $moonCalc = new MoonCalc; + $mailer = new MoonMailer; + //Create other variables $price = null; $body = null; - //Get all of the moons from the rental list - $rentals = MoonRent::all(); - //Get today's date. $today = Carbon::now(); $today->second = 1; $today->minute = 0; $today->hour = 0; + //Get all contacts from the rentals group + $contacts = MoonRent::select('Contact')->groupBy('Contact')->get(); + + //For each of the contacts totalize the moon rental, and create the mail to send to them, + //then update parameters of the moon + foreach($contacts as $contact) { + //Get the moons the renter is renting + $rentals = $moonMailer->GetRentalMoons($contact); + + //Totalize the cost of the moons + $cost = $moonMailer->TotalizeMoonCost($rentals); + + //Get the list of moons in a list format + $listItems = $moonMailer->GetMoonList($rentals); + + //Build the mail body + $body = "Moon Rent is due for the following moons:
"; + foreach($listItems as $item) { + $body .= $item . "
"; + } + $body .= "The price for the next month's rent is " . $cost . "
"; + $body .= "Please remit payment to Spatial Forces on the 1st should you continue to wish to rent the moon.
"; + $body .= "Sincerely,
"; + $body .= "Warped Intentions Leadership
"; + + //Dispatch the mail job + $mail = new JobSendEveMail; + $mail->sender = 93738489; + $mail->subject = "Warped Intentions Moon Rental Payment Due"; + $mail->body = $body; + $mail->recipient = (int)$contact; + $mail->recipient_type = 'character'; + + //Dispatch the job and cycle to the next moon rental + SendEveMailJob::dispatch($mail); + + //After the mail is dispatched, saved the sent mail record, + $sentmail = new SentMail; + $sentmail->sender = $mail->sender; + $sentmail->subject = $mail->subject; + $sentmail->body = $mail->body; + $sentmail->recipient = $mail->recipient; + $sentmail->recipient_type = $mail->recipient_type; + $sentmail->save(); + + //Delete the record from the database + foreach($rentals as $rental) { + if($today->greaterThanOrEqualTo($rental->RentalEnd)) { + MoonRent::where(['id' => $rental->id])->delete(); + } + + //Mark the moon as not paid for the next month + Moon::where([ + 'System' => $rental->System, + 'Planet' => $rental->Planet, + 'Moon' => $rental->Moon, + ])->update([ + 'Paid' => 'No', + ]); + } + } + + /* + //Get all of the moons from the rental list + $rentals = MoonRent::all(); + //Update the price for all moon rentals before sending out the mail foreach($rentals as $rental) { //Get the contents of the moon to re-price it out @@ -136,6 +201,7 @@ class MoonMailerCommand extends Command ]); } + */ //Mark the job as finished $task->SetStopStatus(); diff --git a/app/Library/Moons/MoonMailer.php b/app/Library/Moons/MoonMailer.php index 3ee6f90f5..0b56fbba7 100644 --- a/app/Library/Moons/MoonMailer.php +++ b/app/Library/Moons/MoonMailer.php @@ -5,33 +5,88 @@ namespace App\Library\Moons; //Jobs use App\Jobs\SendEveMailJob; +//Library +use App\Library\Moons\MoonCalc; + //Models use App\Models\Jobs\JobSendEveMail; +use App\Models\Mail\SentMail; +use App\Models\Moon\Moon; +use App\Models\Moon\MoonRent; class MoonMailer { - public function GetRentalMoons() { - + public function GetMoonList(MoonRent $moons) { + //Declare the variable to be used as a global part of the function + $list = array(); + + //For each of the moons, build the System Planet and Moon. + foreach($moons as $moon) { + $temp = 'System: ' . $moon->System; + $temp .= 'Planet: ' . $moon->Planet; + $temp .= 'Moon: ' . $moon->Moon; + //Push the new string onto the array list + array_push($list, $temp); + } + + //Return the list + return $list; } - public function TotalizeMoonCost($moons) { + public function GetRentalMoons($contact) { + $rentals = MoonRent::where([ + 'Contact' => $contact, + ])->get(); + return $rentals; } - - public function SendMail($recipient, $moons, $dueDate) { - - $body = ''; - - $mail = new EveMail; - $mail->sender = 93738489; - $mail->subject = 'Moon Rental'; - $mail->body = $body; - $mail->recipient = (int)$recipient; - $mail->recipient_type = 'character'; - $mail->save(); - SendEveMailJob::dispatch($mail); + public function TotalizeMoonCost($rentals) { + //Delcare variables and classes + $moonCalc = new MoonCalc; + $totalCost = 0.00; + + foreach($rentals as $rental) { + $moon = Moon::where([ + 'System' => $rental->System, + 'Planet' => $rental->Planet, + 'Moon' => $rental->Moon, + ])->first(); + + //Get the updated price for the moon + $price = $moonCalc->SpatialMoonsOnlyGoo($moon->FirstOre, $moon->FirstQuantity, $moon->SecondOre, $moon->SecondQuantity, + $moon->ThirdOre, $moon->ThirdQuantity, $moon->FourthOre, $moon->FourthQuantity); + + if($rental->Type == 'alliance') { + $totalCost += $price['alliance']; + } else{ + $totalCost += $price['outofalliance']; + } + } + + //Return the total cost back to the calling function + return $totalCost; + } + + public function GetRentalType($rentals) { + $alliance = 0; + $outofalliance = 0; + + //Go through the data and log whether the renter is in the alliance, + //or the renter is out of the alliance + foreach($rentals as $rental) { + if($rental->Type == 'alliance') { + $alliance++; + } else { + $outofalliance++; + } + } + + //Return the rental type + if($alliance > $outofalliance) { + return 'alliance'; + } else { + return 'outofalliance'; + } } } - -?> \ No newline at end of file