feat: zodpovedna osoba za projekt - novy sloupec + editace
Pridano pole responsible_user_id do tabulky projects s FK na users. Select zodpovedne osoby v ProjectDetail, ProjectCreate a sloupec v seznamu projektu. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,16 @@ function generateProjectNumber(PDO $pdo): string
|
||||
return generateSharedNumber($pdo);
|
||||
}
|
||||
|
||||
function handleGetUsers(PDO $pdo): void
|
||||
{
|
||||
$stmt = $pdo->query(
|
||||
"SELECT id, CONCAT(first_name, ' ', last_name) as name
|
||||
FROM users WHERE is_active = 1 ORDER BY first_name, last_name"
|
||||
);
|
||||
$users = $stmt->fetchAll();
|
||||
successResponse(['users' => $users]);
|
||||
}
|
||||
|
||||
function handleGetNextNumber(PDO $pdo): void
|
||||
{
|
||||
$number = generateProjectNumber($pdo);
|
||||
@@ -37,6 +47,15 @@ function handleCreateProject(PDO $pdo): void
|
||||
errorResponse('Zákazník nebyl nalezen', 404);
|
||||
}
|
||||
|
||||
$responsibleUserId = isset($input['responsible_user_id']) ? (int)$input['responsible_user_id'] : null;
|
||||
if ($responsibleUserId) {
|
||||
$stmt = $pdo->prepare('SELECT id FROM users WHERE id = ?');
|
||||
$stmt->execute([$responsibleUserId]);
|
||||
if (!$stmt->fetch()) {
|
||||
errorResponse('Zodpovědná osoba nebyla nalezena', 404);
|
||||
}
|
||||
}
|
||||
|
||||
$startDate = $input['start_date'] ?? date('Y-m-d');
|
||||
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $startDate)) {
|
||||
errorResponse('Neplatný formát data zahájení');
|
||||
@@ -79,14 +98,15 @@ function handleCreateProject(PDO $pdo): void
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
INSERT INTO projects (
|
||||
project_number, name, customer_id,
|
||||
project_number, name, customer_id, responsible_user_id,
|
||||
status, start_date, created_at, modified_at
|
||||
) VALUES (?, ?, ?, 'aktivni', ?, NOW(), NOW())
|
||||
) VALUES (?, ?, ?, ?, 'aktivni', ?, NOW(), NOW())
|
||||
");
|
||||
$stmt->execute([
|
||||
$projectNumber,
|
||||
$name,
|
||||
$customerId,
|
||||
$responsibleUserId,
|
||||
$startDate,
|
||||
]);
|
||||
$projectId = (int)$pdo->lastInsertId();
|
||||
@@ -185,15 +205,17 @@ function handleGetList(PDO $pdo): void
|
||||
|
||||
$from = "FROM projects p
|
||||
LEFT JOIN customers c ON p.customer_id = c.id
|
||||
LEFT JOIN orders o ON p.order_id = o.id";
|
||||
LEFT JOIN orders o ON p.order_id = o.id
|
||||
LEFT JOIN users u ON p.responsible_user_id = u.id";
|
||||
|
||||
$result = PaginationHelper::paginate(
|
||||
$pdo,
|
||||
"SELECT COUNT(*) {$from} {$where}",
|
||||
"SELECT p.id, p.project_number, p.name, p.status, p.start_date, p.end_date,
|
||||
p.order_id, p.quotation_id, p.created_at,
|
||||
p.order_id, p.quotation_id, p.created_at, p.responsible_user_id,
|
||||
c.name as customer_name,
|
||||
o.order_number
|
||||
o.order_number,
|
||||
CONCAT(u.first_name, ' ', u.last_name) as responsible_user_name
|
||||
{$from} {$where}
|
||||
ORDER BY {$p['sort']} {$p['order']}",
|
||||
$params,
|
||||
@@ -212,14 +234,17 @@ function handleGetDetail(PDO $pdo, int $id): void
|
||||
SELECT p.id, p.project_number, p.name, p.customer_id,
|
||||
p.quotation_id, p.order_id, p.status,
|
||||
p.start_date, p.end_date, p.notes,
|
||||
p.responsible_user_id,
|
||||
p.created_at, p.modified_at,
|
||||
c.name as customer_name,
|
||||
o.order_number, o.status as order_status,
|
||||
q.quotation_number
|
||||
q.quotation_number,
|
||||
CONCAT(u.first_name, \' \', u.last_name) as responsible_user_name
|
||||
FROM projects p
|
||||
LEFT JOIN customers c ON p.customer_id = c.id
|
||||
LEFT JOIN orders o ON p.order_id = o.id
|
||||
LEFT JOIN quotations q ON p.quotation_id = q.id
|
||||
LEFT JOIN users u ON p.responsible_user_id = u.id
|
||||
WHERE p.id = ?
|
||||
');
|
||||
$stmt->execute([$id]);
|
||||
@@ -235,7 +260,7 @@ function handleGetDetail(PDO $pdo, int $id): void
|
||||
function handleUpdateProject(PDO $pdo, int $id): void
|
||||
{
|
||||
$stmt = $pdo->prepare(
|
||||
'SELECT id, project_number, name, status, start_date, end_date, notes
|
||||
'SELECT id, project_number, name, status, start_date, end_date, notes, responsible_user_id
|
||||
FROM projects WHERE id = ?'
|
||||
);
|
||||
$stmt->execute([$id]);
|
||||
@@ -282,6 +307,18 @@ function handleUpdateProject(PDO $pdo, int $id): void
|
||||
errorResponse('Poznámky jsou příliš dlouhé (max 5000 znaků)');
|
||||
}
|
||||
|
||||
// Zodpovedna osoba
|
||||
$responsibleUserId = array_key_exists('responsible_user_id', $input)
|
||||
? ($input['responsible_user_id'] ? (int)$input['responsible_user_id'] : null)
|
||||
: $project['responsible_user_id'];
|
||||
if ($responsibleUserId) {
|
||||
$stmt = $pdo->prepare('SELECT id FROM users WHERE id = ?');
|
||||
$stmt->execute([$responsibleUserId]);
|
||||
if (!$stmt->fetch()) {
|
||||
errorResponse('Zodpovědná osoba nebyla nalezena', 404);
|
||||
}
|
||||
}
|
||||
|
||||
$pdo->beginTransaction();
|
||||
try {
|
||||
$stmt = $pdo->prepare('
|
||||
@@ -291,6 +328,7 @@ function handleUpdateProject(PDO $pdo, int $id): void
|
||||
start_date = ?,
|
||||
end_date = ?,
|
||||
notes = ?,
|
||||
responsible_user_id = ?,
|
||||
modified_at = NOW()
|
||||
WHERE id = ?
|
||||
');
|
||||
@@ -300,6 +338,7 @@ function handleUpdateProject(PDO $pdo, int $id): void
|
||||
$input['start_date'] ?? $project['start_date'],
|
||||
$input['end_date'] ?? $project['end_date'],
|
||||
$notes,
|
||||
$responsibleUserId,
|
||||
$id,
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user