🧵 Terzi Atölyesi İş Planlama

Sistem Hakkında

Sunucu Tarafı

Dil PHP 7.2+
Framework Yok — saf PHP
Veritabanı erişimi PDO
Hazırlıklı sorgular Evet (SQL injection koruması)
Session / Auth Yok
Hosting uyumu Shared hosting

Veritabanı

Sistem MySQL / MariaDB
Karakter seti utf8mb4
Collation utf8mb4_turkish_ci
Bağlantı Singleton PDO
Tablo sayısı 3

İstemci Tarafı

HTML HTML5
CSS CSS3 — tek dosya
JavaScript Vanilla JS
JS Framework Yok
Dış kütüphane Yok
Gantt grafiği Özel DOM render

API Katmanı

Endpoint api.php
Format JSON
İstekler GET + POST
add_job İş ekle + çizelgele
update_status Durum güncelle
gantt_data Haftalık Gantt verisi
reschedule Tüm çizelgeyi yenile
stats Anlık istatistikler
Dosya Yapısı
config.php Veritabanı bağlantısı, çalışma saatleri, terzi sayısı, yardımcı fonksiyonlar (formatDuration, priorityLabel, statusLabel, isWorkDay, nextWorkDay)
api.php JSON API endpoint ve çizelgeleme motoru. rescheduleAll() ve getNextSlot() fonksiyonlarını barındırır. Hem include olarak hem doğrudan çalışır.
index.php İş Planı ana sayfası. Günlük istatistikler, haftalık kapasite grafiği, Gantt şeması, yaklaşan işler ve hızlı iş ekleme formu.
jobs.php İş yönetimi sayfası. İş ekleme formu, filtreli iş tablosu, durum güncelleme, silme.
customers.php Müşteri yönetimi. Müşteri ekleme, daimi/standart toggle, iş istatistikleri.
install.php Veritabanı kurulum scripti. Tabloları ve örnek iş tiplerini oluşturur.
assets/style.css Tüm arayüz stilleri. CSS custom property (değişken) tabanlı tema, responsive grid, bileşen stilleri.
assets/app.js Frontend JS. Gantt render motoru, AJAX iş ekleme, durum güncellemeleri, anlık istatistik yenileme.
Veritabanı Şeması

jobs

idINT AUTO_INCREMENT PK
customer_idINT FK → customers
job_type_idINT FK → job_types
custom_job_nameVARCHAR(255) NULL
priorityENUM(daimi, urgent, normal)
durationINT (dakika)
statusENUM(pending, in_progress, completed, delayed)
deadlineDATE NULL
scheduled_startDATETIME NULL
scheduled_endDATETIME NULL
completed_atDATETIME NULL
notesTEXT NULL
created_atTIMESTAMP DEFAULT NOW

customers

idINT AUTO_INCREMENT PK
nameVARCHAR(255) NOT NULL
phoneVARCHAR(20) NULL
is_daimiTINYINT(1) DEFAULT 0
notesTEXT NULL
created_atTIMESTAMP DEFAULT NOW

job_types

idINT AUTO_INCREMENT PK
nameVARCHAR(255) NOT NULL
avg_durationINT (dakika)
min_durationINT (dakika)
max_durationINT (dakika)
Çizelgeleme Algoritması — rescheduleAll()
1
Sıralama Tamamlanmamış tüm işler öncelik sırasına göre çekilir: daimi → acil → normal. Aynı öncelikte olanlar created_at (FIFO) ile sıralanır.
2
Başlangıç noktası (cursor) Şu an iş günü içindeyse cursor = şimdiki zaman. İş günü başlamadıysa cursor = bugünün 09:00'ı. İş günü bittiyse cursor = yarının 09:00'ı. Devam eden iş varsa cursor o işin bitiş saatine çekilir.
3
Slot bulma — getNextSlot() Her iş için cursor'dan itibaren yeterli boşluk aranır. Gün içinde kalan süre işin süresini karşılamıyorsa iş bir sonraki çalışma gününün başına taşınır.
4
Gecikme tespiti Hesaplanan scheduled_end, işin deadline tarihini geçiyorsa durum otomatik olarak delayed yapılır.
5
Tetikleme Algoritma her iş eklemesinde, durum değişikliğinde ve silmede otomatik çalışır. Manuel olarak "Çizelgeyi Yenile" ile de tetiklenebilir.
Yapılandırma Parametreleri — config.php
WORK_START 09:00
WORK_END 18:00
WORK_DAYS 1,2,3,4,5,6 (Pzt–Cmt)
TAILOR_COUNT 1

Tüm çizelgeleme hesaplamaları bu parametrelere göre yapılır. Terzi sayısı artırılırsa günlük kapasite saat aralığı × terzi sayısı olarak hesaplanır.