!!! UPDATED PLAN (2026-01-27) !!! DOLIBARR – PLANNING MODULE MASTER PLAN / ROADMAP STATUS OGÓLNY - Projekt prowadzony etapowo - Każdy etap ma jasny zakres - Brak cofania się do etapów zamkniętych - ETAP 2.4 jest CLOSED & FROZEN - TG2.1 (Auto date_end: qty/rate + buffer; no manual end/estimated) jest CLOSED - ETAP 2.2 (Today anchor + Past left; correct time mapping) jest CLOSED ETAPY ZAMKNIĘTE ETAP 2.4 — Timeline layout & scroll STATUS: CLOSED & FROZEN Zakres: - Timeline w jednym kontenerze - Dokładnie jeden horizontal scrollbar - Obsługa Days: 7 / 14 / 21 / 30 - Brak layout jumping - Działa na dużych i małych ekranach - CSS w pełni scoped (nie wpływa na Dolibarr) - Timeline nie nachodzi na top menu Zasada: - Jakiekolwiek zmiany layoutu / scrolla są ZABRONIONE ETAP 3.0 — Add Job via Timeline STATUS: CLOSED Zakres: - Add Job uruchamiany wyłącznie z kliknięcia pustej kratki Timeline (context-only) - Przycisk "+ Add Job" w headerze Timeline: REMOVED - Add Job usunięty z lewego menu - Permission: planning->addjob - Modal Add Job - Kontekst: Workstation jest read-only (np. "Workstation: Forming FM7") - Group/Workstation nie są wybierane ręcznie (wynikają z kontekstu) - Product (FG) wybór przez AJAX autocomplete (bez preload) - Zapis przez AJAX - Auto-refresh Timeline po zapisie - Brak wpływu na ETAP 2.4 ETAP 3.1 — Add Job stabilization STATUS: CLOSED Zakres: - Walidacje backend - Default values - Modal zostaje otwarty przy błędzie - Obsługa non-JSON response ETAP 3.2a — Add Job z kliknięcia kratki STATUS: CLOSED Zakres: - Klik w pustą kratkę Timeline - Start = 06:30 - date_start / date_end (date_end auto: qty/rate + buffer) - Poprawne pozycjonowanie joba - Klik w job pokazuje kartę po lewej ETAPY OTWARTE / PLANOWANE ETAP 2.2 — Timeline oś czasu: Today anchor + Past na lewo (fix day mapping) STATUS: CLOSED Cel: - Oś czasu startuje od aktualnego dnia (Today jako pierwsza kolumna) - Joby z datą wcześniejszą niż Today mają być renderowane na lewo (Past), a nie clamped do Today Zakres: - Poprawne mapowanie czasu joba -> kolumna dnia dla dat < Today (ujemne indeksy / D-1, D-2...) - Gdy Past jest OFF: joby sprzed Today są ukryte (ale nie przesuwane na Today) - Gdy Past jest ON: dni wstecz są widoczne po lewej i joby trafiają w prawidłowe kolumny - Bez zmian layout/CSS (ETAP 2.4 FROZEN) - Bez zmian backend (render/pozycjonowanie w JS) Implementation notes: - Oś czasu kotwiczona do Today; Past rozszerza zakres w lewo o Days - Brak clampa indeksów < 0 (joby sprzed Today nie są przesuwane do Today) - Clip do osi (visStart/visEnd) zamiast przesuwania joba - Fix: nie dodawać +1 day do job.date_end podczas renderu (usunąć +MS_DAY) ETAP 2.5.1 — Timeline UX: Show Past / Today toggle STATUS: CLOSED Cel: - Poprawa czytelności osi czasu bez naruszania ETAP 2.4 Zakres: - Mały toggle przy Days - Widok startowy: Today jako pierwsza kolumna - Klik toggle: - pokazuje dni wstecz (D-1 … D-n, gdzie n = Days) - przesuwa siatkę dni w prawo - Kolejny klik: - wraca do widoku Today-first - ETAP 2.4 pozostaje FROZEN ETAP 3.2 — Edit Job (left panel) STATUS: CLOSED Cel: - Edycja joba (modal z przycisku Edit) Zakres: - Permission: planning->editjob - Pola edytowalne: - date_start - status - notes - qty - product (FG) przez AJAX autocomplete (prefill po ID) - Workstation read-only (np. "Workstation: Forming FM7") - Brak ręcznych pól estimated_hours / date_end - Po zapisie: reload danych Timeline NOTE (JS Date handling): - W UI do obliczeń ESTIMATED / REMAINING używany jest Date.parse() na stringach datetime z Dolibarr (YYYY-MM-DD HH:MM:SS). - Działa poprawnie w aktualnych przeglądarkach, ale może być niejednoznaczne (UTC vs local) w zależności od środowiska. - Jeśli w przyszłości pojawią się przesunięcia godzin, rozważyć własny parser lub jawne traktowanie dat jako local time. Ograniczenia: - Brak drag & drop - Brak zmian layoutu Timeline - Brak logiki MO ETAP 3.2d — Delete Job (left panel) STATUS: CLOSED Cel: - Możliwość usuwania jobów (czyszczenie danych testowych / korekty) Zakres: - Przycisk Delete w lewym panelu (tylko dla uprawnionych) - Confirm dialog (jawne potwierdzenie) - Nowy endpoint AJAX: ajax/delete_job.php - Permission: planning->deletejob - Po sukcesie: - odznaczyć job (wrócić do "Select a job...") - odświeżyć Timeline - Bez soft-delete na start (hard delete) ETAP 3.2b — MO check (READ-ONLY) STATUS: PLANNED Zakres: - Sprawdzenie konfliktów MO - Tylko informacja ETAP 3.2c — MO update (CONFIRMED) STATUS: PLANNED Zakres: - Jawny Update MO - Permission: planning->updatemo - Confirm dialog ETAP 3.3 — Daily Planning STATUS: PLANNED Zakres: - Widok dzienny 06:30 → 06:30 - Kolejność jobów - Operacyjne statusy TRUE GANTT / AUTO-HARMONOGRAM ETAP TG1 — True Gantt render - Render wg date_start → date_end ETAP TG2 — Auto schedule from anchor - Anchor job - Forward scheduling - Buffer: - Forming: 60 min - Trimming Laser: 15 min - Trimming CNC: 30 min - Jobs mogą przechodzić przez dni ETAP TG3 — Duration z QTY/hour STATUS: CLOSED (zrobione w TG2.1) Zakres: - Duration = qty / rate (rate z llx_product_extrafields): - qty_per_hour_form dla Forming - qty_per_hour_trim dla Trimming - date_end wyliczane automatycznie: start + duration + buffer - Buffer: - Forming: 60 min - Trimming: 30 min - Brak ręcznego End oraz brak estimated_hours (nie używać jako fallback) - Działa dla Add Job i Edit Job (po edycji reload Timeline)