amount; $invoice->fill($data); $invoice->save(); $invoice_calc = new InvoiceCalc($invoice, $invoice->settings); $invoice = $invoice_calc->build()->getInvoice(); $invoice->save(); $finished_amount = $invoice->amount; if($finished_amount != $starting_amount) UpdateCompanyLedgerWithInvoice::dispatchNow($invoice, ($finished_amount - $starting_amount)); return $invoice; } /** * Mark the invoice as sent. * * @param \App\Models\Invoice $invoice The invoice * * @return Invoice|\App\Models\Invoice|null Return the invoice object */ public function markSent(Invoice $invoice) : ?Invoice { /* Return immediately if status is not draft*/ if($invoice->status_id != Invoice::STATUS_DRAFT) return $invoice; $invoice->status_id = Invoice::STATUS_SENT; $this->markInvitationsSent(); $invoice->save(); return $invoice; } private function markInvitationsSent(Invoice $invoice) :Invoice { $invoice->invitations->each(function($invitation, $key) { $invitation->sent_date = Carbon::now()->format('Y-m-d H:i'); $invitation->save(); }); } private function saveInvitations(Invoice $invoice) :Invoice { $contact_list = (array)$invoice->settings->invoice_email_list; $contacts = ClientContact::findMany($contacts); if (! $contacts->count()) { return $invoice; } $contacts->each(function($contact, $key) use ($invoice){ $invitation = InvoiceInvitation::whereClientContactId($contact->id)->whereInvoiceId($invoice->id)->first(); if($!invitation){ $invitation = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id); $invitation->client_contact_id = $contact->id; $invitation->invoice_id = $invoice->id; $invitation->save(); } }); return $invoice; } }