From 6fa753a149f3a084e59d34d4bbf66ad186b07cab Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 7 Aug 2024 08:09:18 +1000 Subject: [PATCH] Expense category filters --- app/Filters/ExpenseFilters.php | 12 ++++++++++ app/Filters/TaskFilters.php | 4 ++++ app/Repositories/TaskRepository.php | 9 ++++++-- lang/en/texts.php | 1 + tests/Feature/ExpenseApiTest.php | 35 ++++++++++++++++++++++++----- 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/app/Filters/ExpenseFilters.php b/app/Filters/ExpenseFilters.php index ca2b1b09bdde..2fa80a1eb799 100644 --- a/app/Filters/ExpenseFilters.php +++ b/app/Filters/ExpenseFilters.php @@ -158,6 +158,18 @@ class ExpenseFilters extends QueryFilters return $this->builder; } + public function categories(string $categories = ''): Builder + { + $categories_exploded = explode(",", $categories); + + if(empty($categories) || count(array_filter($categories_exploded)) == 0) + return $this->builder; + + $categories_keys = $this->transformKeys($categories_exploded); + + return $this->builder->whereIn('category_id', $categories_keys); + } + public function number(string $number = ''): Builder { if (strlen($number) == 0) { diff --git a/app/Filters/TaskFilters.php b/app/Filters/TaskFilters.php index 3b26e004742b..c179bb44ab77 100644 --- a/app/Filters/TaskFilters.php +++ b/app/Filters/TaskFilters.php @@ -85,6 +85,10 @@ class TaskFilters extends QueryFilters $this->builder->whereNull('invoice_id'); } + if (in_array('is_running', $status_parameters)) { + $this->builder->where('is_running', true); + } + return $this->builder; } diff --git a/app/Repositories/TaskRepository.php b/app/Repositories/TaskRepository.php index ec96ed0670b0..96ee297427e9 100644 --- a/app/Repositories/TaskRepository.php +++ b/app/Repositories/TaskRepository.php @@ -147,6 +147,10 @@ class TaskRepository extends BaseRepository $task->calculated_start_date = $this->harvestStartDate($time_log, $task); + if(isset(end($time_log)[1])){ + $task->is_running = end($time_log)[1] == 0; + } + $task->time_log = json_encode($time_log); $task->saveQuietly(); @@ -259,7 +263,7 @@ class TaskRepository extends BaseRepository $log = array_merge($log, [$new]); $task->time_log = json_encode($log); - + $task->is_running = true; $task->saveQuietly(); } @@ -303,6 +307,7 @@ class TaskRepository extends BaseRepository $log = array_merge($log, [$last]);//check at this point, it may be prepending here. $task->time_log = json_encode($log); + $task->is_running = false; $task->saveQuietly(); } @@ -418,4 +423,4 @@ class TaskRepository extends BaseRepository } -} +} \ No newline at end of file diff --git a/lang/en/texts.php b/lang/en/texts.php index 8a0abf6d6bd4..9df051a9cd38 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -5311,6 +5311,7 @@ $lang = array( 'customer_type' => 'Customer Type', 'process_date' => 'Process Date', 'forever_free' => 'Forever Free', + 'comments_only' => 'Comments Only', ); return $lang; diff --git a/tests/Feature/ExpenseApiTest.php b/tests/Feature/ExpenseApiTest.php index 81d7dafbf2ab..e6319f092847 100644 --- a/tests/Feature/ExpenseApiTest.php +++ b/tests/Feature/ExpenseApiTest.php @@ -314,21 +314,23 @@ class ExpenseApiTest extends TestCase public function testExpenseBulkCategorize() { + $eXX = Expense::factory()->create([ + 'company_id' => $this->company->id, + 'user_id' => $this->user->id, + ]); + $e = Expense::factory()->create([ 'company_id' => $this->company->id, 'user_id' => $this->user->id, ]); - $ec = ExpenseCategory::factory()->create([ 'company_id' => $this->company->id, 'user_id' => $this->user->id, 'name' => 'Test Category', ]); - nlog("expense category id = {$ec->hashed_id}"); - $data = [ 'category_id' => $ec->hashed_id, 'action' => 'bulk_categorize', @@ -341,11 +343,32 @@ class ExpenseApiTest extends TestCase ])->post('/api/v1/expenses/bulk', $data); $arr = $response->json(); - nlog($arr); - + $this->assertEquals($ec->hashed_id, $arr['data'][0]['category_id']); - } + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->get("/api/v1/expenses"); + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertGreaterThan(1, count($arr['data'])); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->get("/api/v1/expenses?categories={$ec->hashed_id}"); + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertCount(1, $arr['data']); + + } public function testAddingExpense() {