# Plan pracy / Gantt

> Planuj swoją pracę w wielu projektach na jednym wykresie Gantta

Osobisty harmonogram per-użytkownik, niezależny od przypisania do sprintu. Planuj tickety z dowolnych projektów, do których należysz, na konkretne dni. Przeglądaj plan jako wykres Gantta lub kalendarz miesięczny, przesuwaj zadania metodą drag and drop.

## Funkcje

- **Planowanie cross-project**: Jeden harmonogram obejmuje tickety ze wszystkich projektów, do których masz dostęp. Widzisz wyłącznie własne wpisy, bez wycieku danych między projektami.
- **Junction model (User x Ticket x Date)**: Wpis łączy użytkownika, ticket i datę. Unikalny constraint pilnuje, by ten sam ticket nie był zaplanowany dwa razy na ten sam dzień.
- **Widok Gantt**: Oś czasu oparta o frappe-gantt. Zadania jako poziome paski, przesuwanie zmienia datę wpisu w czasie rzeczywistym.
- **Widok kalendarza**: Miesięczna siatka z zadaniami w komórkach dni. Szybki przegląd obciążenia w skali miesiąca.
- **Integracja z ticketami**: Sekcja planu w szczegółach ticketu plus badge w kartach na backlogu i tablicy Kanban. Planowanie bez opuszczania widoku ticketu.
- **Autoryzacja per-użytkownik**: Edytować i usuwać wpis może tylko jego właściciel. Planowanie wymaga członkostwa w projekcie ticketu.

## Jak to działa

1. **Otwórz Plan pracy**: Widok jest globalny, dostępny z głównej nawigacji. Domyślnie pokazuje bieżący miesiąc.
2. **Zaplanuj ticket**: Wyszukaj ticket przez autocomplete i przypisz mu datę. Wpis pojawia się na Gantcie i w kalendarzu.
3. **Przesuwaj zadania**: Drag and drop na wykresie Gantta zmienia datę wpisu. Filtruj widok po projektach.
4. **Zarządzaj planem**: Edytuj notatki, przesuń na inny dzień lub usuń wpis. Zmiany dotyczą tylko Twojego harmonogramu.

## AI i MCP

Agent AI może planować Twoją pracę przez MCP: dodawać tickety do harmonogramu, przesuwać je między dniami, sprawdzać zadania na dziś i odczytywać harmonogram konkretnego ticketu, 6 narzędzi MCP.

- `schedule_ticket`: Zaplanuj ticket na dany dzień
- `update_work_plan_entry`: Przesuń lub edytuj wpis planu (data, pozycja, notatki)
- `delete_work_plan_entry`: Usuń wpis z planu (tylko właściciel)
- `list_work_plan`: Wpisy w zakresie dat, cross-project, max 90 dni
- `get_today_tasks`: Zadania zaplanowane na dziś
- `get_ticket_schedule`: Harmonogram konkretnego ticketu

## Szczegóły techniczne

- **Model danych**: WorkPlanEntry (user_id, ticket_id, scheduled_date, position, notes). UniqueConstraint(user_id, ticket_id, scheduled_date), indeks (user_id, scheduled_date).
- **Routing**: Prefix /dashboard/plan. REST: POST/PATCH/DELETE /entries, GET /api/data, GET /api/tickets/search.
- **Izolacja danych**: Lista cross-project zwraca tylko wpisy bieżącego użytkownika z projektów, do których ma członkostwo.
- **Frontend**: frappe-gantt dla osi czasu, własna miesięczna siatka dla widoku kalendarza.
