Workflow: Resource Planning — Planificare Resurse
Module implicate: Resource Workload · Tasks · Projects · Timesheets (task timers — NU modulul HR Timesheets)
Cine îl folosește: Project Manager · Team Lead · Management
Durata tipică: Planificare săptămânală/lunară continuă
Overview
Modulul Resource Workload oferă o vedere consolidată a capacității și încărcării echipei pe baza task-urilor asignate. Planificarea se face prin asignarea de task-uri cu startdate, duedate și Estimate hour (câmp custom injectat automat pe task-uri).
Distincție critică: Modulul Resource Workload citește exclusiv orele loggate via timere de task (core CRM
tbltaskstimers). Nu citește din modulul HR Timesheets (tbltimesheets_timesheet,tblcheck_in_outetc.) — acel modul este pentru pontaj HR (prezență, concedii), nu pentru ore de proiect.
Numai staff — nu echipamente. Nu există conceptul de resurse non-umane (sali, utilaje, vehicule).
Supraîncărcarea este vizuală, nu blocantă. Sistemul marchează celulele roșii când sunt depășite orele de capacitate, dar nu blochează asignarea.
Diagrama fluxului
[SETUP — admin, o singură dată]
│
├── Standard workload global: 8h/zi (implicit), zile lucrătoare (L–V implicit)
├── Per staff (opțional): capacitate individuală per zi a săptămânii
│ (ex: part-timer: L=4h, M=4h, Mi=0h, J=4h, V=4h)
└── Day-offs: date blocate company-wide (diferit de concediile HR!)
│
↓
[PLANIFICARE TASK-URI]
│
├── Task creat/editat cu:
│ ├── startdate (data de start)
│ ├── duedate (deadline — obligatoriu pentru spread corect)
│ ├── Assigned staff (tbltask_assigned)
│ └── Estimate hour (câmp custom tasks_estimate_hour) ← setat manual de PM
│
├── Sistemul distribuie orele estimate zi cu zi:
│ spread = estimate_hour / zile_lucrătoare(start → due)
│ cap = capacitate_zilnică_staff → surplus → ziua următoare
└── Dacă duedate lipsă: sistemul folosește datefinished sau azi
│
↓
[VIZUALIZARE WORKLOAD]
│
├── Reports → Resource Workload
│
├── Tab Workload (grid spreadsheet):
│ ├── Coloane: Staff | Departament | Rol | [Dată E/S per zi în range]
│ ├── E = ore estimate (din Estimate hour + spread)
│ ├── S = ore efectiv loggate (din task timers)
│ ├── Celule ROȘII = depășire capacitate zilnică
│ └── Hover pe celulă = lista task-urilor care contribuie la acea zi
│
├── Tab Timeline (Gantt Frappe):
│ ├── Staff ca rânduri, task-uri ca bare colorate per tip relație
│ ├── Drag bar = schimbă startdate/duedate pe task + recalculează Estimate hour
│ └── Click bar = deschide modalul standard de task
│
├── Tab Chart (Highcharts):
│ ├── Pie: Estimate ore — Normal vs Overload
│ ├── Pie: Spent ore — Normal vs Overload
│ └── Stacked column: ore pe departamente
│
└── Tab Kanban:
├── O coloană per staff cu task-urile sale
├── 10 task-uri per pagină, paginare disponibilă
└── Task-uri restante marcate ca overdue
│
↓
[LOGARE ORE EFECTIVE]
│
├── Staff folosește timer pe task (butonul Start Timer din task)
│ → insert în tbltaskstimers: staff_id, task_id, start_time, end_time
└── Orele loggate apar în coloana S (Spent) din grila Workload
│
↓
[REBALANSARE (dacă supraîncărcare detectată)]
│
├── PM vede celule roșii → identifică task-urile supraîncărcate (hover)
├── Ajustare duedate: drag pe Gantt SAU editare manuală duedate pe task
└── Redistribuire task: schimbare assigned staff pe task
[ECHIPĂ PLANIFICATĂ ✓ · ORE MONITORIZATE ✓]
Pas cu pas
1. Configurare capacitate (admin)
Unde: /admin/settings → Staff → Workload
1a. Setări globale
| Opțiune | Implicit | Descriere |
|---|---|---|
standard_workload |
8 |
Ore de lucru per zi (fallback dacă staff nu are setare individuală) |
staff_workload_monday … sunday |
1 pentru L–V, 0 Sâ–Du |
Zilele lucrătoare globale |
1b. Capacitate individuală per staff (opțional)
Unde: Settings → Workload → Customize Standard Workload
Grid Handsontable: fiecare rând = un staff, fiecare coloană = o zi a săptămânii. Introduceți ore per căsuță (ex: 4 pentru part-timer).
Dacă nu există înregistrare în tblstandard_workload pentru un staff, se folosește valoarea globală standard_workload.
1c. Day-offs (zile libere companie)
Unde: Settings → Workload → Manage Day-off → Add Day-off
| Câmp | Descriere |
|---|---|
reason |
Motivul (ex: „Crăciun", „Team building") |
date |
Data blocată |
Atenție: Day-off-urile din Resource Workload sunt separate de concediile din modulul HR Timesheets (
tblday_off). Modulul HR Timesheets nu afectează grila Resource Workload.
2. Creare task-uri cu date pentru planificare
Unde: orice modul care suportă task-uri (Projects, Clients, Leads, Tickets etc.)
Câmpuri esențiale pentru Resource Workload:
| Câmp | Obligatoriu | Notă |
|---|---|---|
startdate |
Da | Data de start a task-ului |
duedate |
Recomandat | Fără deadline, sistemul folosește azi sau datefinished |
Estimate hour |
Da | Câmpul custom injectat de modul — introdus manual de PM |
assigned (tbltask_assigned) |
Da | Staff asignat (poate fi multiplu) |
Câmpul Estimate hour: este un câmp custom de tip number cu slug tasks_estimate_hour, injectat automat pe toate task-urile la instalarea modulului. Apare în formularul de task sub numele „Estimate hour".
3. Vizualizare încărcare
Unde: /admin/reports/resource_workload (necesită permisiunea pw_rp_resource_workload → view)
3a. Tab Workload
Filtre disponibile:
- Interval de date (implicit: ultimele 7 zile → azi)
- Filtrare per staff individual, departament, rol sau proiect
Citire grid:
- E (Estimate) = ore distribute din
Estimate hourper zi - S (Spent) = ore loggate efectiv via task timer per zi
- Roșu = E sau S depășesc capacitatea zilnică a staff-ului respectiv
- Tooltip la hover = lista task-urilor care contribuie la celula respectivă
3b. Tab Timeline (Gantt)
Bare colorate per tip de relație al task-ului:
- Albastru = task de proiect (
rel_type = 'project') - Verde = task de client (
rel_type = 'customer') - Portocaliu = task de tichet (
rel_type = 'ticket') - etc.
Drag & drop pe bare: modifică startdate și duedate direct pe task → Estimate hour se recalculează automat bazat pe zile lucrătoare × capacitate zilnică.
4. Logare ore efective
Orele efective (coloana S) provin din timerele de task, nu din modulul HR Timesheets:
Unde: orice task → butonul Start Timer (sau Log Time manual)
| Acțiune | Tabel alimentat |
|---|---|
| Start/Stop timer pe task | tbltaskstimers — start_time, end_time, staff_id, task_id |
| Log manual timp pe task | tbltaskstimers — câmpuri identice |
Ore din HR Timesheets (check-in/check-out, foi de prezență) NU apar în Resource Workload.
5. Identificarea supraîncărcărilor și rebalansare
- Detectare: celule roșii în grila Workload sau slices „Overload" în Chart tab
- Identificare task vinovate: hover pe celula roșie → tooltip listează task-urile
- Acțiuni de rebalansare:
- Extindere deadline: drag pe Gantt sau editare
duedatepe task - Redistribuire: schimbare staff asignat pe task
- Reducere estimat: editare câmp
Estimate hourpe task
- Extindere deadline: drag pe Gantt sau editare
- Verificare: reîncărcați grila pentru a confirma că celulele sunt verzi
Permisiuni necesare
| Permisiune | Acces |
|---|---|
pw_rp_resource_workload → view |
Acces la pagina Resource Workload (toate cele 4 tab-uri) + modificare setări workload + drag pe Gantt |
Notă: Nu există permisiuni granulare view/edit/delete separate pentru Resource Workload. Un singur flag
viewcontrolează tot — inclusiv capacitatea de a modifica capacitățile per staff și de a reprograma task-uri via Gantt.
Gotchas
| Problemă | Cauză | Soluție |
|---|---|---|
| Staff-ul nu apare în grid | Nu este activ sau nu are task-uri în intervalul selectat | Verificați active=1 pe staff + extindeti intervalul de date |
| Coloana S = 0 deși ore au fost loggate | Orele sunt în HR Timesheets, nu în task timers | Logați orele via timer pe task (nu via HR check-in) |
| Estimate hour lipsă din task | Câmpul custom nu a fost completat | Completați câmpul Estimate hour pe fiecare task |
| Task fără deadline nu apare corect în grid | duedate lipsă → sistemul folosește azi |
Setați întotdeauna duedate pe task-urile planificate |
| Drag pe Gantt nu salvează | Permisiune lipsă | Verificați că staff-ul are pw_rp_resource_workload → view |
| Concediile HR nu blochează zile în Workload | Modulele sunt complet separate | Adăugați zilele libere manual în Workload → Day-offs |
Referințe module
- Tasks — task-uri cu Estimate hour și timere
- Projects — proiecte și task-uri de proiect
- Timesheets — pontaj HR (separat de Resource Workload)
- Reports — alte rapoarte de performanță
Înregistrați concediul și sărbătorile legale în Gestionare Zile Libere înainte de planificarea de sprint sau asignarea proiectelor — calculele de capacitate folosesc zile lucrătoare efective, deci avertismentele de supraalocare sunt corecte numai când zilele nelucrate sunt capturate în sistem.
Vizualizarea Kanban din Resurse și Încărcare permite managerilor să reasigneze sarcini între angajați trăgând carduri — modificările făcute aici actualizează asignările de sarcini de bază în timp real fără a deschide fiecare înregistrare de sarcini individual.