From ffd7e7bdc623b62304eb114b4dcafd74529272b8 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 26 Dec 2016 20:09:49 +0200 Subject: [PATCH] Add labels for tasks and expenses --- app/Models/Expense.php | 47 ++++++++++++++++++ app/Models/Task.php | 58 ++++++++++++++++++++++- app/Ninja/Datatables/ExpenseDatatable.php | 19 ++------ app/Ninja/Datatables/TaskDatatable.php | 17 +------ app/Ninja/Presenters/ExpensePresenter.php | 15 ++++++ app/Ninja/Presenters/TaskPresenter.php | 24 ++++------ 6 files changed, 134 insertions(+), 46 deletions(-) diff --git a/app/Models/Expense.php b/app/Models/Expense.php index 1829fed8d186..3a747c0d5c29 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -221,6 +221,53 @@ class Expense extends EntityModel return $statuses; } + + public static function calcStatusLabel($shouldBeInvoiced, $invoiceId, $balance) + { + if ($invoiceId) { + if (floatval($balance) > 0) { + $label = 'invoiced'; + } else { + $label = 'paid'; + } + } elseif ($shouldBeInvoiced) { + $label = 'pending'; + } else { + $label = 'logged'; + } + + return trans("texts.{$label}"); + } + + public static function calcStatusClass($shouldBeInvoiced, $invoiceId, $balance) + { + if ($invoiceId) { + if (floatval($balance) > 0) { + return 'default'; + } else { + return 'success'; + } + } elseif ($shouldBeInvoiced) { + return 'warning'; + } else { + return 'primary'; + } + } + + public function statusClass() + { + $balance = $this->invoice ? $this->invoice->balance : 0; + + return static::calcStatusClass($this->should_be_invoiced, $this->invoice_id, $balance); + } + + public function statusLabel() + { + $balance = $this->invoice ? $this->invoice->balance : 0; + + return static::calcStatusLabel($this->should_be_invoiced, $this->invoice_id, $balance); + } + } Expense::creating(function ($expense) { diff --git a/app/Models/Task.php b/app/Models/Task.php index 5a114a245ad0..73f0af286f5c 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -215,8 +215,64 @@ class Task extends EntityModel return $statuses; } -} + public static function calcStatusLabel($isRunning, $balance, $invoiceNumber) + { + if ($invoiceNumber) { + if (floatval($balance) > 0) { + $label = 'invoiced'; + } else { + $label = 'paid'; + } + } elseif ($isRunning) { + $label = 'running'; + } else { + $label = 'logged'; + } + return trans("texts.{$label}"); + } + + public static function calcStatusClass($isRunning, $balance, $invoiceNumber) + { + if ($invoiceNumber) { + if (floatval($balance)) { + return 'default'; + } else { + return 'success'; + } + } elseif ($isRunning) { + return 'primary'; + } else { + return 'warning'; + } + } + + public function statusClass() + { + if ($this->invoice) { + $balance = $this->invoice->balance; + $invoiceNumber = $this->invoice->invoice_number; + } else { + $balance = 0; + $invoiceNumber = false; + } + + return static::calcStatusClass($this->is_running, $balance, $invoiceNumber); + } + + public function statusLabel() + { + if ($this->invoice) { + $balance = $this->invoice->balance; + $invoiceNumber = $this->invoice->invoice_number; + } else { + $balance = 0; + $invoiceNumber = false; + } + + return static::calcStatusLabel($this->is_running, $balance, $invoiceNumber); + } +} Task::created(function ($task) { diff --git a/app/Ninja/Datatables/ExpenseDatatable.php b/app/Ninja/Datatables/ExpenseDatatable.php index 6bf432e6d02b..a818eb0b79d8 100644 --- a/app/Ninja/Datatables/ExpenseDatatable.php +++ b/app/Ninja/Datatables/ExpenseDatatable.php @@ -3,6 +3,7 @@ use Utils; use URL; use Auth; +use App\Models\Expense; class ExpenseDatatable extends EntityDatatable { @@ -123,24 +124,10 @@ class ExpenseDatatable extends EntityDatatable ]; } - private function getStatusLabel($invoiceId, $shouldBeInvoiced, $balance) { - if ($invoiceId) { - if (floatval($balance)) { - $label = trans('texts.invoiced'); - $class = 'default'; - } else { - $label = trans('texts.paid'); - $class = 'success'; - } - } elseif ($shouldBeInvoiced) { - $label = trans('texts.pending'); - $class = 'warning'; - } else { - $label = trans('texts.logged'); - $class = 'primary'; - } + $label = Expense::calcStatusLabel($shouldBeInvoiced, $invoiceId, $balance); + $class = Expense::calcStatusClass($shouldBeInvoiced, $invoiceId, $balance); return "

$label

"; } diff --git a/app/Ninja/Datatables/TaskDatatable.php b/app/Ninja/Datatables/TaskDatatable.php index 4d3956f2601e..bae69b85524a 100644 --- a/app/Ninja/Datatables/TaskDatatable.php +++ b/app/Ninja/Datatables/TaskDatatable.php @@ -108,21 +108,8 @@ class TaskDatatable extends EntityDatatable private function getStatusLabel($model) { - if ($model->invoice_number) { - if (floatval($model->balance)) { - $label = trans('texts.invoiced'); - $class = 'default'; - } else { - $class = 'success'; - $label = trans('texts.paid'); - } - } elseif ($model->is_running) { - $class = 'primary'; - $label = trans('texts.running'); - } else { - $class = 'warning'; - $label = trans('texts.logged'); - } + $label = Task::calcStatusLabel($model->is_running, $model->balance, $model->invoice_number); + $class = Task::calcStatusClass($model->is_running, $model->balance, $model->invoice_number); return "

$label

"; } diff --git a/app/Ninja/Presenters/ExpensePresenter.php b/app/Ninja/Presenters/ExpensePresenter.php index 018ca273e76e..6951c4fbbfa3 100644 --- a/app/Ninja/Presenters/ExpensePresenter.php +++ b/app/Ninja/Presenters/ExpensePresenter.php @@ -34,4 +34,19 @@ class ExpensePresenter extends EntityPresenter return $this->entity->expense_category ? $this->entity->expense_category->name : ''; } + /** + * @return string + */ + public function statusLabel() + { + if ($label = parent::statusLabel()) { + return $label; + } + + $class = $this->entity->statusClass(); + $label = $this->entity->statusLabel(); + + return "{$label}"; + } + } diff --git a/app/Ninja/Presenters/TaskPresenter.php b/app/Ninja/Presenters/TaskPresenter.php index 7989aa4ff3e3..abcdccc500ad 100644 --- a/app/Ninja/Presenters/TaskPresenter.php +++ b/app/Ninja/Presenters/TaskPresenter.php @@ -57,24 +57,20 @@ class TaskPresenter extends EntityPresenter return implode("\n", $times); } + /** * @return string - */ - public function status() + */ + public function statusLabel() { - $class = $text = ''; - - if ($this->entity->is_deleted) { - $class = 'danger'; - $text = trans('texts.deleted'); - } elseif ($this->entity->trashed()) { - $class = 'warning'; - $text = trans('texts.archived'); - } else { - $class = 'success'; - $text = trans('texts.active'); + if ($label = parent::statusLabel()) { + return $label; } - return "{$text}"; + $class = $this->entity->statusClass(); + $label = $this->entity->statusLabel(); + + return "{$label}"; } + }