1
0

Добавление проектов

Добавили возможность создавания разных проектов.
This commit is contained in:
2026-01-14 10:46:38 +07:00
parent 04e88cb7fa
commit 719aecd09e
22 changed files with 996 additions and 233 deletions

View File

@@ -6,6 +6,7 @@ class Task extends BaseEntity {
// Свойства задачи
public $id;
public $id_project;
public $id_department;
public $id_label;
public $order;
@@ -45,6 +46,9 @@ class Task extends BaseEntity {
if (!$this->id_department) {
$this->addError('id_department', 'Департамент не указан');
}
if (!$this->id_project) {
$this->addError('id_project', 'Проект не указан');
}
return $this->getErrors();
}
@@ -58,6 +62,7 @@ class Task extends BaseEntity {
// Вставляем в базу
Database::insert($this->db_name, [
'id_project' => $this->id_project,
'id_department' => $this->id_department,
'id_label' => $this->id_label,
'order' => $this->order ?? 0,
@@ -101,7 +106,7 @@ class Task extends BaseEntity {
}
// Проверка что задача существует и получаем текущие данные
$task = Database::get($this->db_name, ['id', 'column_id', 'order'], ['id' => $this->id]);
$task = Database::get($this->db_name, ['id', 'column_id', 'order', 'id_project'], ['id' => $this->id]);
if (!$task) {
$this->addError('task', 'Задача не найдена');
return $this->getErrors();
@@ -113,6 +118,9 @@ class Task extends BaseEntity {
// Если column_id не передан — оставляем текущий
$new_column_id = $this->column_id !== null ? (int)$this->column_id : $old_column_id;
// Получаем id_ready (колонка "Готово") из проекта
$done_column_id = Project::getReadyColumnId($task['id_project']);
// Формируем данные для обновления
$update_data = [
'id_department' => $this->id_department,
@@ -127,9 +135,9 @@ class Task extends BaseEntity {
];
// Обновляем date_closed при смене колонки
if ($new_column_id === COLUMN_DONE_ID && $old_column_id !== COLUMN_DONE_ID) {
if ($done_column_id && $new_column_id === $done_column_id && $old_column_id !== $done_column_id) {
$update_data['date_closed'] = date('Y-m-d H:i:s');
} elseif ($old_column_id === COLUMN_DONE_ID && $new_column_id !== COLUMN_DONE_ID) {
} elseif ($done_column_id && $old_column_id === $done_column_id && $new_column_id !== $done_column_id) {
$update_data['date_closed'] = null;
}
@@ -173,6 +181,9 @@ class Task extends BaseEntity {
$new_column_id = (int)$column_id;
$archive = (int)$task['archive'];
// Получаем id_ready (колонка "Готово") из проекта
$done_column_id = Project::getReadyColumnId($task['id_project']);
// Получаем все карточки целевой колонки с тем же статусом архивации (кроме перемещаемой)
$cards = Database::select('cards_task', ['id', 'order'], [
'column_id' => $column_id,
@@ -192,13 +203,13 @@ class Task extends BaseEntity {
];
// Только для перемещаемой карточки обновляем date_closed
if ($card['id'] == $id) {
if ($card['id'] == $id && $done_column_id) {
// Перемещаем В колонку "Готово" — устанавливаем дату закрытия
if ($new_column_id === COLUMN_DONE_ID && $old_column_id !== COLUMN_DONE_ID) {
if ($new_column_id === $done_column_id && $old_column_id !== $done_column_id) {
$update_data['date_closed'] = date('Y-m-d H:i:s');
}
// Перемещаем ИЗ колонки "Готово" — обнуляем дату
elseif ($old_column_id === COLUMN_DONE_ID && $new_column_id !== COLUMN_DONE_ID) {
elseif ($old_column_id === $done_column_id && $new_column_id !== $done_column_id) {
$update_data['date_closed'] = null;
}
}
@@ -211,16 +222,20 @@ class Task extends BaseEntity {
return ['success' => true];
}
// Получение всех задач
// Получение всех задач проекта
// $id_project: ID проекта (обязательный)
// $archive: 0 = неархивные, 1 = архивные, null = все
public function getAll($archive = 0) {
$where = [];
public function getAll($id_project, $archive = 0) {
$where = [
'id_project' => $id_project
];
if ($archive !== null) {
$where['archive'] = $archive ? 1 : 0;
}
$tasks = Database::select($this->db_name, [
'id',
'id_project',
'id_department',
'id_label',
'id_account',
@@ -238,7 +253,7 @@ class Task extends BaseEntity {
// Декодируем JSON и получаем avatar_url из accounts
return array_map(function($task) {
$task['file_img'] = json_decode($task['file_img'], true) ?? [];
$task['file_img'] = $task['file_img'] ? json_decode($task['file_img'], true) : [];
// Получаем avatar_url из accounts по id_account
if ($task['id_account']) {
@@ -252,21 +267,27 @@ class Task extends BaseEntity {
}, $tasks);
}
// Получение всех колонок
public function getColumns() {
// Получение колонок проекта
public function getColumns($id_project) {
return Database::select('columns', [
'id',
'name_columns',
'color'
'color',
'id_order'
], [
'id_project' => $id_project,
'ORDER' => ['id_order' => 'ASC']
]);
}
// Получение всех департаментов
public function getDepartments() {
// Получение отделов проекта
public function getDepartments($id_project) {
return Database::select('departments', [
'id',
'name_departments',
'color'
], [
'id_project' => $id_project
]);
}
@@ -294,8 +315,11 @@ class Task extends BaseEntity {
// Проверка что задача существует
$task = self::check_task($id);
// Получаем id_ready (колонка "Готово") из проекта
$done_column_id = Project::getReadyColumnId($task['id_project']);
// Архивировать можно только задачи в колонке "Готово"
if ($archive && (int)$task['column_id'] !== COLUMN_DONE_ID) {
if ($archive && $done_column_id && (int)$task['column_id'] !== $done_column_id) {
RestApi::response([
'success' => false,
'errors' => ['column' => 'Архивировать можно только задачи из колонки "Готово"']
@@ -308,8 +332,8 @@ class Task extends BaseEntity {
];
// При разархивировании — возвращаем в колонку "Готово"
if (!$archive) {
$update_data['column_id'] = COLUMN_DONE_ID;
if (!$archive && $done_column_id) {
$update_data['column_id'] = $done_column_id;
}
// Обновляем в БД