diff --git a/app/Http/Requests/Expense/StoreExpenseRequest.php b/app/Http/Requests/Expense/StoreExpenseRequest.php index 35ff9d450306..398fdf582fb1 100644 --- a/app/Http/Requests/Expense/StoreExpenseRequest.php +++ b/app/Http/Requests/Expense/StoreExpenseRequest.php @@ -39,9 +39,9 @@ class StoreExpenseRequest extends Request { $rules = []; - $rules['id_number'] = 'unique:expenses,id_number,'.$this->id.',id,company_id,'.$this->company_id; + $rules['number'] = 'unique:expenses,number,'.$this->id.',id,company_id,'.auth()->user()->company()->id; $rules['contacts.*.email'] = 'nullable|distinct'; - $rules['number'] = new UniqueExpenseNumberRule($this->all()); + //$rules['number'] = new UniqueExpenseNumberRule($this->all()); $rules['client_id'] = 'bail|sometimes|exists:clients,id,company_id,'.auth()->user()->company()->id; diff --git a/app/Repositories/ExpenseRepository.php b/app/Repositories/ExpenseRepository.php index 53eb5b8923cd..8eeb8e8409cc 100644 --- a/app/Repositories/ExpenseRepository.php +++ b/app/Repositories/ExpenseRepository.php @@ -49,6 +49,7 @@ class ExpenseRepository extends BaseRepository public function save(array $data, Expense $expense) : ?Expense { $expense->fill($data); + $expense->number = empty($expense->number) ? $this->getNextExpenseNumber($expense) : $expense->number; $expense->save(); diff --git a/app/Repositories/TaskRepository.php b/app/Repositories/TaskRepository.php index 6e9ac946071a..3479e67380bc 100644 --- a/app/Repositories/TaskRepository.php +++ b/app/Repositories/TaskRepository.php @@ -51,7 +51,6 @@ class TaskRepository extends BaseRepository $task->fill($data); $task->save(); - $task->start_time = $task->start_time ?: $task->calcStartTime(); $task->number = empty($task->number) ? $this->getNextTaskNumber($task) : $task->number; if (isset($data['description'])) { @@ -90,6 +89,7 @@ class TaskRepository extends BaseRepository } $task->time_log = json_encode($time_log); + $task->start_time = $task->start_time ?: $task->calcStartTime(); $task->duration = $task->calcDuration(); $task->save(); diff --git a/resources/views/portal/ninja2020/components/livewire/credits-table.blade.php b/resources/views/portal/ninja2020/components/livewire/credits-table.blade.php index aa4d99a6de83..02a19c140864 100644 --- a/resources/views/portal/ninja2020/components/livewire/credits-table.blade.php +++ b/resources/views/portal/ninja2020/components/livewire/credits-table.blade.php @@ -54,7 +54,7 @@ {{ empty($credit->public_notes) ? '/' : $credit->public_notes }} - + @lang('texts.view') diff --git a/routes/client.php b/routes/client.php index 9cf7fa3a5015..083befda64c3 100644 --- a/routes/client.php +++ b/routes/client.php @@ -58,7 +58,9 @@ Route::group(['middleware' => ['auth:contact', 'locale'], 'prefix' => 'client', Route::get('quotes/{quote_invitation}', 'ClientPortal\QuoteController@show')->name('quote.show_invitation'); Route::get('credits', 'ClientPortal\CreditController@index')->name('credits.index'); - Route::get('credits/{credit}', 'ClientPortal\CreditController@show')->name('credits.show'); + Route::get('credits/{credit}', 'ClientPortal\CreditController@show')->name('credit.show'); + + Route::get('credits/{credit_invitation}', 'ClientPortal\CreditController@show')->name('credits.show_invitation'); Route::get('client/switch_company/{contact}', 'ClientPortal\SwitchCompanyController')->name('switch_company'); diff --git a/tests/Feature/ExpenseApiTest.php b/tests/Feature/ExpenseApiTest.php index f31b7eb5007f..9b9f9829377d 100644 --- a/tests/Feature/ExpenseApiTest.php +++ b/tests/Feature/ExpenseApiTest.php @@ -62,7 +62,10 @@ class ExpenseApiTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/expenses', $data); + $arr = $response->json(); $response->assertStatus(200); + + $this->assertNotEmpty($arr['data']['number']); } public function testExpensePut() diff --git a/tests/Feature/TaskApiTest.php b/tests/Feature/TaskApiTest.php index 885007a6e3b2..937846ec2a04 100644 --- a/tests/Feature/TaskApiTest.php +++ b/tests/Feature/TaskApiTest.php @@ -62,7 +62,29 @@ class TaskApiTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/tasks', $data); + $arr = $response->json(); $response->assertStatus(200); + + $this->assertNotEmpty($arr['data']['number']); + } + + public function testTaskPostWithActionStart() + { + $data = [ + 'description' => $this->faker->firstName, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/tasks?action=start', $data); + + $arr = $response->json(); + $response->assertStatus(200); + + $this->assertGreaterThan(0, $arr['data']['start_time']); + + } public function testTaskPut()