recurring_invoice = $recurring_invoice; $this->db = $db; } /** * Execute the job. * * @return void */ public function handle() : void { // Generate Standard Invoice $invoice = RecurringInvoiceToInvoiceFactory::create($this->recurring_invoice, $this->recurring_invoice->client); $invoice = $invoice->service() ->markSent() ->applyRecurringNumber() ->createInvitations() ->save(); $invoice->invitations->each(function ($invitation) use ($invoice) { $email_builder = (new InvoiceEmail())->build($invitation); EmailInvoice::dispatch($email_builder, $invitation, $invoice->company); info("Firing email for invoice {$invoice->number}"); }); /* Set next date here to prevent a recurring loop forming */ $this->recurring_invoice->next_send_date = $this->recurring_invoice->nextSendDate()->format('Y-m-d'); $this->recurring_invoice->remaining_cycles = $this->recurring_invoice->remainingCycles(); $this->recurring_invoice->last_sent_date = date('Y-m-d'); /* Set completed if we don't have any more cycles remaining*/ if ($this->recurring_invoice->remaining_cycles == 0) $this->recurring_invoice->setCompleted(); $this->recurring_invoice->save(); if ($invoice->invitations->count() > 0) event(new InvoiceWasEmailed($invoice->invitations->first(), $invoice->company, Ninja::eventVars())); // Fire Payment if auto-bill is enabled if ($this->recurring_invoice->auto_bill) $invoice->service()->autoBill()->save(); } }