Skip to content

28. System zleceń wewnętrznych

This content is not available in your language yet.

System zleceń wewnętrznych

Aplikacja do obsługi zleceń wewnętrznych: tworzenie zadań przez zgłaszającego, przydzielanie do wykonawcy, śledzenie statusu (nowe → w realizacji → wykonane) i historia zmian.

  • Projektowania wielostanowego przepływu (status workflow)
  • Filtrowania po statusie i przydzielonym wykonawcy
  • Obsługi ról użytkowników przez sesje (zgłaszający vs wykonawca)
  • Sortowania po priorytecie i dacie
  • Logowania historii zmian statusu
  1. Tworzenie zlecenia — tytuł, opis, kategoria, priorytet (niski/średni/wysoki), wykonawca
  2. Lista zleceń — filtrowanie po statusie, kategorii, wykonawcy
  3. Zmiana statusu — z komentarzem przez wykonawcę
  4. Historia zmian — log statusów z timestampem
  5. Podsumowanie — liczba zleceń wg statusu (dashboard)
{
"orders": [
{
"id": 1,
"title": "Naprawa projektora w sali B14",
"description": "Projektor nie uruchamia się od poniedziałku",
"category": "IT",
"priority": "high",
"assignee": "mgr Kowalski",
"status": "in_progress",
"created_by": "mgr Nowak",
"created_at": "2026-02-10 09:00:00",
"history": [
{"status": "new", "note": "", "changed_at": "2026-02-10 09:00:00"},
{"status": "in_progress", "note": "Sprawdzam lamp", "changed_at": "2026-02-11 10:30:00"}
]
}
]
}

Wymagane funkcje:

  • Formularz tworzenia zlecenia
  • Lista zleceń z aktualnym statusem
  • Zmiana statusu (dropdown)
  • Walidacja pól wymaganych, zapis do JSON
Ocena: 3.0
  • Directoryzlecenia/
    • index.php
    • nowe.php
    • lista.php
    • zmien-status.php
    • dashboard.php
    • Directoryincludes/
      • functions.php
      • auth.php
    • Directorydata/
      • orders.json
    • Directorycss/
      • style.css

Zmiana statusu z logowaniem historii:

$allowedTransitions = [
'new' => ['in_progress', 'cancelled'],
'in_progress' => ['done', 'cancelled'],
'done' => [],
'cancelled' => [],
];
function changeStatus(array &$orders, int $id, string $newStatus, string $note): bool {
global $allowedTransitions;
foreach ($orders as &$order) {
if ($order['id'] !== $id) continue;
if (!in_array($newStatus, $allowedTransitions[$order['status']] ?? [])) return false;
$order['status'] = $newStatus;
$order['history'][] = [
'status' => $newStatus,
'note' => htmlspecialchars($note),
'changed_at' => date('Y-m-d H:i:s'),
];
return true;
}
return false;
}

Kolor priorytetu:

function getPriorityClass(string $priority): string {
return match($priority) {
'high' => 'priority-high',
'medium' => 'priority-medium',
'low' => 'priority-low',
default => ''
};
}