diff --git a/app/Models/Department.php b/app/Models/Department.php index 76efe4a..0dc2ca2 100644 --- a/app/Models/Department.php +++ b/app/Models/Department.php @@ -16,6 +16,7 @@ class Department extends Model 'name_short', 'rf_mis_department_id', 'rf_department_type', + 'order', ]; public function metrikaDefault() diff --git a/app/Services/StatisticsService.php b/app/Services/StatisticsService.php index 2a5fdba..3d9ba8c 100644 --- a/app/Services/StatisticsService.php +++ b/app/Services/StatisticsService.php @@ -38,12 +38,18 @@ class StatisticsService */ private function resolveUserDepartments(User $user) { - return Department::select('department_id', 'name_short', 'rf_department_type', 'user_name', 'order') + $departmentsTable = (new Department)->getTable(); + $userDepartmentsTable = (new UserDepartment)->getTable(); + + return Department::select('department_id', 'name_short', 'rf_department_type', 'user_name') ->with('departmentType') - ->join((new UserDepartment)->getTable(), (new Department)->getTable().'.department_id', (new UserDepartment)->getTable().'.rf_department_id') - ->where((new UserDepartment)->getTable().'.rf_user_id', $user->id) + ->join($userDepartmentsTable, "{$departmentsTable}.department_id", "{$userDepartmentsTable}.rf_department_id") + ->where("{$userDepartmentsTable}.rf_user_id", $user->id) ->orderBy('rf_department_type') - ->orderBy((new UserDepartment)->getTable().'.order', 'asc') + // Персональный порядок пользователя приоритетнее общего порядка отделений; + // общий порядок — как запасной вариант (тай-брейк), если у пользователя порядок не задан. + ->orderBy("{$userDepartmentsTable}.order", 'asc') + ->orderBy("{$departmentsTable}.order", 'asc') ->get() ->groupBy('departmentType.name_full'); } diff --git a/database/migrations/2026_07_07_013842_add_order_column_in_departments_table.php b/database/migrations/2026_07_07_013842_add_order_column_in_departments_table.php new file mode 100644 index 0000000..694690d --- /dev/null +++ b/database/migrations/2026_07_07_013842_add_order_column_in_departments_table.php @@ -0,0 +1,28 @@ +integer('order')->default(0); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('departments', function (Blueprint $table) { + $table->dropColumn('order'); + }); + } +};