client = $client; } public function updateBalance(float $amount) { $this->client->balance += $amount; return $this; } public function updatePaidToDate(float $amount) { $this->client->paid_to_date += $amount; return $this; } public function adjustCreditBalance(float $amount) { $this->client->credit_balance += $amount; return $this; } public function getCreditBalance() :float { $credits = $this->client->credits() ->where('is_deleted', false) ->where('balance', '>', 0) ->whereDate('due_date', '<=', now()->format('Y-m-d')) ->orWhere('due_date', NULL) ->orderBy('created_at','ASC'); return Number::roundValue($credits->sum('balance'), $this->client->currency()->precision); } public function getCredits() :Collection { return $this->client->credits() ->where('is_deleted', false) ->where('balance', '>', 0) ->whereDate('due_date', '<=', now()->format('Y-m-d')) ->orWhere('due_date', NULL) ->orderBy('created_at','ASC'); } public function getPaymentMethods(float $amount) { return (new PaymentMethod($this->client, $amount))->run(); } public function save() :Client { $this->client->save(); return $this->client; } }