diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 3c97dc373fde..e6f9ce229bf4 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -250,7 +250,20 @@ class AccountController extends BaseController $filter = ''; } - Session::put("entity_filter:{$entityType}", $filter); + // separate state and status filters + $filters = explode(',', $filter); + $stateFilter = []; + $statusFilter = []; + foreach ($filters as $filter) { + if (in_array($filter, \App\Models\EntityModel::$statuses)) { + $stateFilter[] = $filter; + } else { + $statusFilter[] = $filter; + } + } + + Session::put("entity_state_filter:{$entityType}", join(',', $stateFilter)); + Session::put("entity_status_filter:{$entityType}", join(',', $statusFilter)); return RESULT_SUCCESS; } diff --git a/app/Models/EntityModel.php b/app/Models/EntityModel.php index 0a39b4fec531..d792351fbd49 100644 --- a/app/Models/EntityModel.php +++ b/app/Models/EntityModel.php @@ -295,7 +295,7 @@ class EntityModel extends Eloquent return false; } - public static function getStatuses($entityType = false) + public static function getStates($entityType = false) { $data = []; @@ -305,4 +305,24 @@ class EntityModel extends Eloquent return $data; } + + public static function getStatuses($entityType = false) + { + return []; + } + + public static function getStatesFor($entityType = false) + { + $class = static::getClassName($entityType); + + return $class::getStates($entityType); + } + + public static function getStatusesFor($entityType = false) + { + $class = static::getClassName($entityType); + + return $class::getStatuses($entityType); + } + } diff --git a/app/Models/Expense.php b/app/Models/Expense.php index 217dbb50db65..1829fed8d186 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -214,8 +214,7 @@ class Expense extends EntityModel public static function getStatuses($entityType = false) { - $statuses = parent::getStatuses($entityType); - + $statuses = []; $statuses[EXPENSE_STATUS_LOGGED] = trans('texts.logged'); $statuses[EXPENSE_STATUS_INVOICED] = trans('texts.invoiced'); $statuses[EXPENSE_STATUS_PAID] = trans('texts.paid'); diff --git a/app/Models/ExpenseCategory.php b/app/Models/ExpenseCategory.php index a885d95ad549..d6c0bdf357a4 100644 --- a/app/Models/ExpenseCategory.php +++ b/app/Models/ExpenseCategory.php @@ -48,9 +48,9 @@ class ExpenseCategory extends EntityModel return "/expense_categories/{$this->public_id}/edit"; } - public static function getStatuses($entityType = false) + public static function getStates($entityType = false) { - $statuses = parent::getStatuses($entityType); + $statuses = parent::getStates($entityType); unset($statuses[STATUS_DELETED]); diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 59f35c28feb9..c11cf86eb50a 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -1252,7 +1252,7 @@ class Invoice extends EntityModel implements BalanceAffecting public static function getStatuses($entityType = false) { - $statuses = parent::getStatuses($entityType); + $statuses = []; if ($entityType == ENTITY_RECURRING_INVOICE) { return $statuses; @@ -1263,6 +1263,10 @@ class Invoice extends EntityModel implements BalanceAffecting if (in_array($status->id, [INVOICE_STATUS_PAID, INVOICE_STATUS_PARTIAL])) { continue; } + } elseif ($entityType == ENTITY_INVOICE) { + if (in_array($status->id, [INVOICE_STATUS_APPROVED])) { + continue; + } } $statuses[$status->id] = trans('texts.status_' . strtolower($status->name)); diff --git a/app/Models/Product.php b/app/Models/Product.php index e61e1106e731..13062923f854 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -88,9 +88,9 @@ class Product extends EntityModel return $this->belongsTo('App\Models\TaxRate'); } - public static function getStatuses($entityType = false) + public static function getStates($entityType = false) { - $statuses = parent::getStatuses($entityType); + $statuses = parent::getStates($entityType); unset($statuses[STATUS_DELETED]); diff --git a/app/Models/Task.php b/app/Models/Task.php index b6c2b2ca42a2..8576b14a8337 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -198,8 +198,7 @@ class Task extends EntityModel public static function getStatuses($entityType = false) { - $statuses = parent::getStatuses($entityType); - + $statuses = []; $statuses[TASK_STATUS_LOGGED] = trans('texts.logged'); $statuses[TASK_STATUS_RUNNING] = trans('texts.running'); $statuses[TASK_STATUS_INVOICED] = trans('texts.invoiced'); diff --git a/app/Ninja/Repositories/BaseRepository.php b/app/Ninja/Repositories/BaseRepository.php index 369f33040291..15acdf8c1678 100644 --- a/app/Ninja/Repositories/BaseRepository.php +++ b/app/Ninja/Repositories/BaseRepository.php @@ -119,8 +119,9 @@ class BaseRepository protected function applyFilters($query, $entityType, $table = false) { $table = Utils::pluralizeEntityType($table ?: $entityType); - - if ($filters = explode(',', session('entity_filter:' . $entityType, STATUS_ACTIVE))) { + + if ($filter = session('entity_state_filter:' . $entityType, STATUS_ACTIVE)) { + $filters = explode(',', $filter); $query->where(function ($query) use ($filters, $table) { $query->whereNull($table . '.id'); @@ -128,13 +129,16 @@ class BaseRepository $query->orWhereNull($table . '.deleted_at'); } if (in_array(STATUS_ARCHIVED, $filters)) { - $query->orWhereNotNull($table . '.deleted_at'); - if ( ! in_array(STATUS_DELETED, $filters) && ! in_array($table, ['products', 'expense_categories', 'users'])) { - $query->where($table . '.is_deleted', '=', 0); - } + $query->orWhere(function ($query) use ($table) { + $query->whereNotNull($table . '.deleted_at') + ->where($table . '.is_deleted', '=', 0); + }); } if (in_array(STATUS_DELETED, $filters)) { - $query->orWhere($table . '.is_deleted', '=', 1); + $query->orWhere(function ($query) use ($table) { + $query->whereNotNull($table . '.deleted_at') + ->where($table . '.is_deleted', '=', 1); + }); } }); } diff --git a/app/Ninja/Repositories/ExpenseRepository.php b/app/Ninja/Repositories/ExpenseRepository.php index c92169bae7e3..ce5168cea955 100644 --- a/app/Ninja/Repositories/ExpenseRepository.php +++ b/app/Ninja/Repositories/ExpenseRepository.php @@ -96,8 +96,11 @@ class ExpenseRepository extends BaseRepository $this->applyFilters($query, ENTITY_EXPENSE); - if ($statuses = explode(',', session('entity_filter:' . ENTITY_EXPENSE))) { + if ($statuses = session('entity_status_filter:' . ENTITY_EXPENSE)) { + $statuses = explode(',', $statuses); $query->where(function ($query) use ($statuses) { + $query->whereNull('expenses.id'); + if (in_array(EXPENSE_STATUS_LOGGED, $statuses)) { $query->orWhere('expenses.invoice_id', '=', 0) ->orWhereNull('expenses.invoice_id'); diff --git a/app/Ninja/Repositories/InvoiceRepository.php b/app/Ninja/Repositories/InvoiceRepository.php index 6de6a6cb655d..9a5c1a85003a 100644 --- a/app/Ninja/Repositories/InvoiceRepository.php +++ b/app/Ninja/Repositories/InvoiceRepository.php @@ -78,7 +78,8 @@ class InvoiceRepository extends BaseRepository $this->applyFilters($query, $entityType, ENTITY_INVOICE); - if ($statuses = explode(',', session('entity_filter:' . $entityType))) { + if ($statuses = session('entity_status_filter:' . $entityType)) { + $statuses = explode(',', $statuses); $query->where(function ($query) use ($statuses) { foreach ($statuses as $status) { if (in_array($status, \App\Models\EntityModel::$statuses)) { diff --git a/app/Ninja/Repositories/TaskRepository.php b/app/Ninja/Repositories/TaskRepository.php index 553f1b42f5ca..0df8e34e9bfb 100644 --- a/app/Ninja/Repositories/TaskRepository.php +++ b/app/Ninja/Repositories/TaskRepository.php @@ -53,7 +53,8 @@ class TaskRepository extends BaseRepository $this->applyFilters($query, ENTITY_TASK); - if ($statuses = explode(',', session('entity_filter:' . ENTITY_TASK))) { + if ($statuses = session('entity_status_filter:' . ENTITY_TASK)) { + $statuses = explode(',', $statuses); $query->where(function ($query) use ($statuses) { if (in_array(TASK_STATUS_LOGGED, $statuses)) { $query->orWhere('tasks.invoice_id', '=', 0) diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index cfa1ec7ef434..f21e58ec6aed 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -2222,6 +2222,9 @@ $LANG = array( 'bluevine_weekly_draw_rate' => 'Weekly Draw Rate', 'bluevine_continue' => 'Continue to BlueVine', 'bluevine_completed' => 'BlueVine signup completed', + + 'entity_state' => 'State', + ); return $LANG; diff --git a/resources/views/accounts/user_management.blade.php b/resources/views/accounts/user_management.blade.php index c9d8430c0482..1d26abd23800 100644 --- a/resources/views/accounts/user_management.blade.php +++ b/resources/views/accounts/user_management.blade.php @@ -16,7 +16,7 @@ @include('partials.bulk_form', ['entityType' => ENTITY_USER]) diff --git a/resources/views/list.blade.php b/resources/views/list.blade.php index 2b1d8d5ad543..651ee07230b5 100644 --- a/resources/views/list.blade.php +++ b/resources/views/list.blade.php @@ -46,10 +46,24 @@