Obieg Dokumentu Wychodzącego
1. Wyszczególnienie Aktorów
W procesie obiegu pisma wychodzącego biorą udział następujące osoby:
- Pracownik (Inicjator dokumentu): Osoba, która rozpoczyna proces wysyłki pisma wychodzącego. Może przesłać pismo do akceptacji przez Kierownika.
- Kierownik: Odpowiedzialny za akceptację pisma wychodzącego. Jeśli jest dostępny, akceptuje pismo. Jeśli jest na urlopie, akceptację przejmuje jego zastępca.
- Dyrektor: Odpowiedzialny za zatwierdzenie pisma wychodzącego. Jeśli jest dostępny, zatwierdza pismo. Jeśli jest na urlopie, zatwierdzenie przejmuje jego zastępca.
- Zastępca Kierownika: Osoba pełniąca rolę Kierownika, gdy ten jest na urlopie.
- Zastępca Dyrektora: Osoba pełniąca rolę Dyrektora, gdy ten jest na urlopie.
2. Zamodelowanie Obiegu Dokumentu
Obieg dokumentu można przedstawić w następujący sposób:
- Pismo wychodzące generowane przez pracownika.
- Pismo wysyłane do Akceptacji Kierownika.
- Kierownik akceptuje pismo, jeśli jest dostępny; w przeciwnym razie Zastępca Kierownika je akceptuje.
- Po akceptacji przez Kierownika, pismo trafia do Zatwierdzenia przez Dyrektora.
- Dyrektor zatwierdza pismo, jeśli jest dostępny; w przeciwnym razie Zastępca Dyrektora je zatwierdza.
- Pismo zostało wysłane.
3. Struktura Bazy Danych
Users
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL,
is_on_vacation BOOLEAN DEFAULT FALSE
);
Documents
CREATE TABLE documents (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
status VARCHAR(50) NOT NULL,
created_by INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES users(id)
);
Approvals
CREATE TABLE approvals (
id INT PRIMARY KEY AUTO_INCREMENT,
document_id INT,
user_id INT,
action VARCHAR(50), -- 'approved' or 'rejected'
approval_type VARCHAR(50), -- 'manager' or 'director'
approved_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_substitute BOOLEAN DEFAULT FALSE, -- Jeżeli akceptacja została dokonana przez zastępcę
FOREIGN KEY (document_id) REFERENCES documents(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
Substitutes
CREATE TABLE substitutes (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT, -- Kierownik lub Dyrektor
substitute_id INT, -- Zastępca
start_date DATE,
end_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (substitute_id) REFERENCES users(id)
);
4. Przykład Kodu PHP (Procesowanie Pisma Wychodzącego)
Poniżej znajduje się przykład kodu PHP, który pokazuje procesowanie pisma wychodzącego:
<?php
class DocumentFlow {
protected $document;
protected $employee;
protected $manager;
protected $director;
protected $substituteManager;
protected $substituteDirector;
public function __construct($document, $employee, $manager, $director, $substituteManager, $substituteDirector) {
$this->document = $document;
$this->employee = $employee;
$this->manager = $manager;
$this->director = $director;
$this->substituteManager = $substituteManager;
$this->substituteDirector = $substituteDirector;
}
public function startProcess() {
$this->sendToManager();
}
public function sendToManager() {
if ($this->manager->isAvailable()) {
$this->manager->approveDocument($this->document);
$this->sendToDirector();
} else {
$this->substituteManager->approveDocument($this->document);
$this->sendToDirector();
}
}
public function sendToDirector() {
if ($this->director->isAvailable()) {
$this->director->approveDocument($this->document);
$this->sendToFinalStep();
} else {
$this->substituteDirector->approveDocument($this->document);
$this->sendToFinalStep();
}
}
public function sendToFinalStep() {
echo "Pismo zostało wysłane.";
}
}
?>