'object', 'updated_at' => 'timestamp', 'created_at' => 'timestamp', 'deleted_at' => 'timestamp', ]; const STATUS_DRAFT = 1; const STATUS_SENT = 2; const STATUS_PARTIAL = 3; const STATUS_APPLIED = 4; public function getDateAttribute($value) { if (!empty($value)) { //$value format 'Y:m:d H:i:s' to 'Y-m-d H:i' return (new Carbon($value))->format('Y-m-d'); } return $value; } public function getDueDateAttribute($value) { if (!empty($value)) { //$value format 'Y:m:d H:i:s' to 'Y-m-d H:i' return (new Carbon($value))->format('Y-m-d'); } return $value; } public function getPartialDueDateAttribute($value) { if (!empty($value)) { //$value format 'Y:m:d H:i:s' to 'Y-m-d H:i' return (new Carbon($value))->format('Y-m-d'); } return $value; } public function assigned_user() { return $this->belongsTo(User::class, 'assigned_user_id', 'id'); } public function company() { return $this->belongsTo(Company::class); } public function user() { return $this->belongsTo(User::class)->withTrashed(); } public function client() { return $this->belongsTo(Client::class)->withTrashed(); } public function invitations() { return $this->hasMany(CreditInvitation::class); } /** * The invoice which the credit has been created from */ public function invoice() { return $this->belongsTo(Invoice::class); } public function company_ledger() { return $this->morphMany(CompanyLedger::class, 'company_ledgerable'); } public function ledger() { return new LedgerService($this); } /** * The invoice/s which the credit has * been applied to. */ public function invoices() { return $this->belongsToMany(Invoice::class)->using(Paymentable::class); } public function payments() { return $this->morphToMany(Payment::class, 'paymentable'); } /** * Access the invoice calculator object * * @return object The invoice calculator object getters */ public function calc() { $credit_calc = null; if ($this->uses_inclusive_taxes) { $credit_calc = new InvoiceSumInclusive($this); } else { $credit_calc = new InvoiceSum($this); } return $credit_calc->build(); } public function service() { return new CreditService($this); } /** * @param float $balance_adjustment */ public function updateBalance($balance_adjustment) { if ($this->is_deleted) { return; } $balance_adjustment = floatval($balance_adjustment); $this->balance = $this->balance + $balance_adjustment; if ($this->balance == 0) { $this->status_id = self::STATUS_APPLIED; $this->save(); //event(new InvoiceWasPaid($this, $this->company));//todo return; } $this->save(); } public function setStatus($status) { $this->status_id = $status; $this->save(); } public function pdf_file_path($invitation = null) { $storage_path = 'storage/' . $this->client->credit_filepath() . $this->number . '.pdf'; if (Storage::exists($storage_path)) { return $storage_path; } if (!$invitation) { CreateCreditPdf::dispatchNow($this, $this->company, $this->client->primary_contact()->first()); } else { CreateCreditPdf::dispatchNow($invitation->credit, $invitation->company, $invitation->contact); } return $storage_path; } public function markInvitationsSent() { $this->invitations->each(function ($invitation) { if (!isset($invitation->sent_date)) { $invitation->sent_date = Carbon::now(); $invitation->save(); } }); } }