1
0

Важный фикс

Забыл добавить управление отделами :)
This commit is contained in:
2026-01-18 20:45:17 +07:00
parent 190b4d0a5e
commit e8a4480747
7 changed files with 773 additions and 9 deletions

View File

@@ -133,6 +133,63 @@ if ($method === 'POST') {
RestApi::response($result, $result['success'] ? 200 : 403);
}
// ==================== CRUD ОТДЕЛОВ ====================
// Добавление отдела
if ($action === 'add_department') {
$project_id = $data['project_id'] ?? null;
$name = trim($data['name'] ?? '');
$color = $data['color'] ?? '#6366f1';
if (!$project_id || !$name) {
RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и name']], 400);
}
$result = Project::addDepartment($project_id, $name, $color, $user_id);
RestApi::response($result, $result['success'] ? 200 : 403);
}
// Обновление отдела
if ($action === 'update_department') {
$id = $data['id'] ?? null;
$name = isset($data['name']) ? trim($data['name']) : null;
$color = $data['color'] ?? null;
if (!$id) {
RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID отдела']], 400);
}
$result = Project::updateDepartment($id, $name, $color, $user_id);
RestApi::response($result, $result['success'] ? 200 : 403);
}
// Получение количества задач в отделе (для подтверждения удаления)
if ($action === 'get_department_tasks_count') {
$id = $data['id'] ?? null;
if (!$id) {
RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID отдела']], 400);
}
$count = Project::getDepartmentTasksCount($id);
RestApi::response(['success' => true, 'count' => $count]);
}
// Удаление отдела
if ($action === 'delete_department') {
$id = $data['id'] ?? null;
if (!$id) {
RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID отдела']], 400);
}
$result = Project::deleteDepartment($id, $user_id);
RestApi::response($result, $result['success'] ? 200 : 403);
}
// Обновление порядка отделов
if ($action === 'update_departments_order') {
$project_id = $data['project_id'] ?? null;
$ids = $data['ids'] ?? [];
if (!$project_id || empty($ids)) {
RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и ids']], 400);
}
$result = Project::updateDepartmentsOrder($project_id, $ids, $user_id);
RestApi::response($result, $result['success'] ? 200 : 403);
}
// Метод не указан
if (!$action) {
RestApi::response(['success' => false, 'error' => 'Укажите метод'], 400);

View File

@@ -76,9 +76,11 @@ class Project extends BaseEntity {
return Database::select('departments', [
'id',
'name_departments',
'color'
'color',
'order_id'
], [
'id_project' => $project_id
'id_project' => $project_id,
'ORDER' => ['order_id' => 'ASC']
]);
}
@@ -366,6 +368,100 @@ class Project extends BaseEntity {
public static function setReadyColumn($project_id, $column_id, $user_id) {
return ['success' => false, 'errors' => ['column' => 'Изменение финальной колонки запрещено. Финальная колонка всегда последняя.']];
}
// ==================== CRUD ОТДЕЛОВ ====================
// Добавление отдела
public static function addDepartment($project_id, $name, $color, $user_id) {
if (!ProjectAccess::can($project_id, $user_id, 'manage_departments')) {
return ['success' => false, 'errors' => ['access' => 'Нет прав на управление отделами']];
}
// Получаем максимальный order_id для проекта
$maxOrder = (int)(Database::max('departments', 'order_id', ['id_project' => $project_id]) ?? 0);
$newOrderId = $maxOrder + 1;
Database::insert('departments', [
'name_departments' => $name,
'color' => $color ?: '#6366f1',
'id_project' => $project_id,
'order_id' => $newOrderId
]);
$departmentId = Database::id();
return [
'success' => true,
'id' => $departmentId,
'department' => [
'id' => $departmentId,
'name_departments' => $name,
'color' => $color ?: '#6366f1',
'order_id' => $newOrderId
]
];
}
// Обновление отдела
public static function updateDepartment($id, $name, $color, $user_id) {
// Получаем отдел для проверки проекта
$department = Database::get('departments', ['id_project'], ['id' => $id]);
if (!$department) {
return ['success' => false, 'errors' => ['department' => 'Отдел не найден']];
}
if (!ProjectAccess::can($department['id_project'], $user_id, 'manage_departments')) {
return ['success' => false, 'errors' => ['access' => 'Нет прав на управление отделами']];
}
$updateData = [];
if ($name !== null) $updateData['name_departments'] = $name;
if ($color !== null) $updateData['color'] = $color;
if (!empty($updateData)) {
Database::update('departments', $updateData, ['id' => $id]);
}
return ['success' => true];
}
// Получение количества задач в отделе
public static function getDepartmentTasksCount($department_id) {
return Database::count('cards_task', ['id_department' => $department_id]);
}
// Удаление отдела (обнуляет id_department у задач)
public static function deleteDepartment($id, $user_id) {
// Получаем отдел для проверки проекта
$department = Database::get('departments', ['id_project'], ['id' => $id]);
if (!$department) {
return ['success' => false, 'errors' => ['department' => 'Отдел не найден']];
}
if (!ProjectAccess::can($department['id_project'], $user_id, 'manage_departments')) {
return ['success' => false, 'errors' => ['access' => 'Нет прав на управление отделами']];
}
// Обнуляем id_department у задач (не удаляем сами задачи)
Database::update('cards_task', ['id_department' => null], ['id_department' => $id]);
// Удаляем отдел
Database::delete('departments', ['id' => $id]);
return ['success' => true];
}
// Обновление порядка отделов
public static function updateDepartmentsOrder($project_id, $ids, $user_id) {
if (!ProjectAccess::can($project_id, $user_id, 'manage_departments')) {
return ['success' => false, 'errors' => ['access' => 'Нет прав на управление отделами']];
}
foreach ($ids as $order => $id) {
Database::update('departments', ['order_id' => $order + 1], ['id' => $id, 'id_project' => $project_id]);
}
return ['success' => true];
}
}
?>