amount; $invoice->fill($data); $invoice->save(); if(array_key_exists('invitations', $data)) $this->saveInvitations($data['invitations'], $invoice); $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; } /** * Updates Invites to SENT * * @param \App\Models\Invoice $invoice The invoice */ private function markInvitationsSent(Invoice $invoice) :void { $invoice->invitations->each(function($invitation, $key) { if(!isset($invitation->sent_date)) { $invitation->sent_date = Carbon::now()->format(config('ninja.date_time_format')); $invitation->save(); } }); } /** * Saves invitations. * * @param array $invitations The invitations * @param \App\Models\Invoice $invoice The invoice * * @return Invoice|\App\Models\Invoice Return the invoice object */ private function saveInvitations(array $invitations, Invoice $invoice) :Invoice { foreach($invitations as $invitation) { //only insert new invitations if(! array_key_exists('id', $invitation) || strlen($invitation['id']) == 0) { $invitation = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id); $invitation->client_contact_id = $invitation['client_contact_id']; $invitation->invoice_id = $invoice->id; $invitation->save(); } } return $invoice; } }