diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 08f0e43f76..787d624cac 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -2,8 +2,11 @@ namespace App\Models; +use App\Models\Currency; use App\Models\Filterable; +use App\Utils\Traits\MakesDates; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\NumberFormatter; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; @@ -12,6 +15,8 @@ class Invoice extends BaseModel use MakesHash; use SoftDeletes; use Filterable; + use NumberFormatter; + use MakesDates; protected $guarded = [ 'id', @@ -22,18 +27,19 @@ class Invoice extends BaseModel ]; protected $with = [ - 'company' + 'company', + 'client', ]; const STATUS_DRAFT = 1; const STATUS_SENT = 2; - const STATUS_PARTIAL = 5; - const STATUS_PAID = 6; - const STATUS_CANCELLED = 8; + const STATUS_PARTIAL = 3; + const STATUS_PAID = 4; + const STATUS_CANCELLED = 5; const STATUS_OVERDUE = -1; const STATUS_UNPAID = -2; - const STATUS_REVERSED = -7; //new for V2 + const STATUS_REVERSED = -3; public function company() { @@ -59,4 +65,50 @@ class Invoice extends BaseModel { return $this->morphMany(Document::class, 'documentable'); } + + /* ---------------- */ + /* Settings getters */ + /* ---------------- */ + + /** + * If True, prevents an invoice from being + * modified once it has been marked as sent + * + * @return boolean isLocked + */ + public function isLocked() : bool + { + return $this->client->getMergedSettings()->lock_sent_invoices; + } + + /** + * Gets the currency from the settings object. + * + * @return Eloquent Model The currency. + */ + public function getCurrency() + { + return Currency::find($this->settings->currency_id); + } + + + /** + * Determines if invoice overdue. + * + * @param float $balance The balance + * @param date. $due_date The due date + * + * @return boolean True if overdue, False otherwise. + */ + public static function isOverdue($balance, $due_date) + { + if (! $this->formatValue($balance,2) > 0 || ! $due_date) { + return false; + } + + // it isn't considered overdue until the end of the day + return strtotime($this->createClientDate(date(), $this->client->timezone()->name)) > (strtotime($due_date) + (60 * 60 * 24)); + } + + } diff --git a/app/Utils/Traits/GeneratesNumberCounter.php b/app/Utils/Traits/GeneratesNumberCounter.php index 8aabe104f3..8284d5db6e 100644 --- a/app/Utils/Traits/GeneratesNumberCounter.php +++ b/app/Utils/Traits/GeneratesNumberCounter.php @@ -200,7 +200,7 @@ trait GeneratesNumberCounter $format = $matches[1]; $search[] = $matches[0]; - /* The following adjusts for the company timezone */ + /* The following adjusts for the company timezone - may bork tests depending on the time of day the tests are run!!!!!!*/ $date = Carbon::now($this->company->timezone()->name)->format($format); $replace[] = str_replace($format, $date, $matches[1]); }