diff --git a/app/Models/ExpenseCategory.php b/app/Models/ExpenseCategory.php index 8ad06ff89547..95463ee58fe2 100644 --- a/app/Models/ExpenseCategory.php +++ b/app/Models/ExpenseCategory.php @@ -20,6 +20,7 @@ class ExpenseCategory extends BaseModel protected $fillable = [ 'name', + 'color', ]; public function getEntityType() diff --git a/app/Models/Project.php b/app/Models/Project.php index c295d666fe79..7d19ca7f90e3 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -36,6 +36,7 @@ class Project extends BaseModel 'custom_value3', 'custom_value4', 'assigned_user_id', + 'color', ]; public function getEntityType() diff --git a/app/Models/TaskStatus.php b/app/Models/TaskStatus.php index 557eb6164baf..0a4993f2dd27 100644 --- a/app/Models/TaskStatus.php +++ b/app/Models/TaskStatus.php @@ -29,5 +29,5 @@ class TaskStatus extends BaseModel */ protected $dates = ['deleted_at']; - protected $fillable = ['name']; + protected $fillable = ['name','color']; } diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php index f95205099327..10fd3a54df18 100644 --- a/app/Transformers/AccountTransformer.php +++ b/app/Transformers/AccountTransformer.php @@ -74,6 +74,7 @@ class AccountTransformer extends EntityTransformer 'updated_at' => (int) $account->updated_at, 'archived_at' => (int) $account->deleted_at, 'report_errors' => (bool) $account->report_errors, + 'debug_enabled' => (bool) config('ninja.debug_enabled'), ]; } diff --git a/app/Transformers/ExpenseCategoryTransformer.php b/app/Transformers/ExpenseCategoryTransformer.php index 7257102bfa66..befc3028e7b7 100644 --- a/app/Transformers/ExpenseCategoryTransformer.php +++ b/app/Transformers/ExpenseCategoryTransformer.php @@ -44,6 +44,7 @@ class ExpenseCategoryTransformer extends EntityTransformer 'id' => $this->encodePrimaryKey($expense_category->id), 'user_id' => $this->encodePrimaryKey($expense_category->user_id), 'name' => (string) $expense_category->name ?: '', + 'color' => (string) $expense_category->color, 'is_deleted' => (bool) $expense_category->is_deleted, 'updated_at' => (int) $expense_category->updated_at, 'archived_at' => (int) $expense_category->deleted_at, diff --git a/app/Transformers/ProjectTransformer.php b/app/Transformers/ProjectTransformer.php index 0c21a9b4c688..736ffb02ae7e 100644 --- a/app/Transformers/ProjectTransformer.php +++ b/app/Transformers/ProjectTransformer.php @@ -62,6 +62,7 @@ class ProjectTransformer extends EntityTransformer 'custom_value2' => (string) $project->custom_value2 ?: '', 'custom_value3' => (string) $project->custom_value3 ?: '', 'custom_value4' => (string) $project->custom_value4 ?: '', + 'color' => (string) $project->color ?: '', ]; } } diff --git a/app/Transformers/TaskStatusTransformer.php b/app/Transformers/TaskStatusTransformer.php index 8ece09175945..c1435f6b82ab 100644 --- a/app/Transformers/TaskStatusTransformer.php +++ b/app/Transformers/TaskStatusTransformer.php @@ -23,6 +23,7 @@ class TaskStatusTransformer extends EntityTransformer return [ 'id' => (string) $this->encodePrimaryKey($task_status->id), 'name' => (string) $task_status->name, + 'color' => (string) $task_status->color, 'sort_order' => (int) $task_status->sort_order, 'is_deleted' => (bool) $task_status->is_deleted, 'created_at' => (int) $task_status->created_at, diff --git a/config/ninja.php b/config/ninja.php index 22c4e172d22d..a062f95a174c 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -9,6 +9,7 @@ return [ 'version_url' => 'https://raw.githubusercontent.com/invoiceninja/invoiceninja/v5-stable/VERSION.txt', 'app_name' => env('APP_NAME', 'Invoice Ninja'), 'app_env' => env('APP_ENV', 'selfhosted'), + 'debug_enabled' => env('APP_DEBUG', false), 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', ''), diff --git a/database/migrations/2021_01_05_013203_improve_decimal_resolution.php b/database/migrations/2021_01_05_013203_improve_decimal_resolution.php index 5165091e075b..ca2903ef8e9c 100644 --- a/database/migrations/2021_01_05_013203_improve_decimal_resolution.php +++ b/database/migrations/2021_01_05_013203_improve_decimal_resolution.php @@ -1,5 +1,6 @@ boolean('calculate_expense_tax_by_amount')->false(); $table->boolean('hide_empty_columns_on_pdf')->false(); }); + + Schema::table('task_statuses', function (Blueprint $table){ + $table->string('color')->default('#fff'); + $table->integer('status_sort_order')->nullable()->default(null)->change(); + }); + + Schema::table('expense_categories', function (Blueprint $table){ + $table->string('color')->default('#fff'); + }); + + Schema::table('projects', function (Blueprint $table){ + $table->string('color')->default('#fff'); + }); + + + TaskStatus::query()->update(['status_sort_order' => NULL]); + + } /** diff --git a/tests/Unit/TaskSortingTest.php b/tests/Unit/TaskSortingTest.php new file mode 100644 index 000000000000..65d2b5245285 --- /dev/null +++ b/tests/Unit/TaskSortingTest.php @@ -0,0 +1,64 @@ +collection = collect([ + ['id' => 1, 'name' =>'pizza', 'order' => 9999], + ['id' => 2, 'name' =>'pineapple', 'order' => 9999], + ['id' => 3, 'name' =>'ethereum', 'order' => 9999], + ['id' => 4, 'name' =>'bitcoin', 'order' => 9999], + ['id' => 5, 'name' =>'zulu', 'order' => 9999], + ['id' => 6, 'name' =>'alpha', 'order' => 9999], + ['id' => 7, 'name' =>'ninja', 'order' => 9999], + ]); + + } + + public function testSorting() + { + + $index = 3; + $item = $this->collection->where('id', 7)->first(); + + $new_collection = $this->collection->reject(function ($task)use($item){ + return $item['id'] == $task['id']; + }); + + $sorted_tasks = $new_collection->filter(function($task, $key)use($index){ + return $key < $index; + })->push($item)->merge($new_collection->filter(function($task, $key)use($index){ + return $key >= $index; + }))->map(function ($item,$key){ + $item['order'] = $key; + return $item; + }); + + $index_item = $sorted_tasks->splice($index, 1)->all(); + + $this->assertEquals($sorted_tasks->first()['name'], 'pizza'); + $this->assertEquals($sorted_tasks->last()['name'], 'alpha'); + $this->assertEquals($index_item[0]['name'],'ninja'); + + } +}