!!! 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


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)

