Időzítő: Összesítő Widget (Timer: Timer Summary Widget)
Kategória: DO Tech / Timer
Technikai név: odootech_timer_summary_widget
Licenc: LGPL-3
Odoo verziók: 16.0, 17.0, 18.0, 19.0
Ár: Ingyenes / Közösségi (Community)
Függőségek: mail, timer
🎯 A Probléma
A gyári Odoo Timer (időzítő/stopper) funkciója (amelyet a Munkaidő-nyilvántartásban [Timesheets], a Területi szolgáltatásokban [Field Service], a Ügyfélszolgálatban [Helpdesk] és a Projektmodulban használunk) rendkívül hasznos – viszont két bosszantó korlátja van:
Csak azon a rekordon látod az időzítőt, amelyiken éppen állsz.
Megszakítja a futó időzítőket: Ha elindítasz egy stopperórát egy feladaton, majd átmész egy másik feladatra és ott is elindítasz egyet, az első az Odoo alapértelmezett timer.mixin működése miatt automatikusan leáll.
Ez az Odoo szándékos felépítése, de sok felhasználónak frusztráló: párhuzamosan szeretnének több időzítőt futtatni (pl. egyet egy megbeszélésre, egyet egy támogatási jegyre), és azokat egyénileg szüneteltetni vagy folytatni.
A végeredmény? Elveszett kiszámlázható idő, pontatlan munkaidő-nyilvántartás és elégedetlen felhasználók.
✨ A Megoldás
A Timer: Timer Summary Widget egy könnyűsúlyú, céltudatos modul, amely:
Összesíti az összes futó időzítőt az aktuális felhasználó számára – modultól és rekordtól függetlenül.
Visszaállítja a szüneteltetés (Pause) funkciót, így a felhasználók megszakítás nélkül futtathatnak több stopperórát párhuzamosan.
Bekötődik az Odoo Bus rendszerébe (egy lefoglalt értesítési csatornán keresztül), így a widget felkészített a valós idejű frissítésekre.
Tiszteletben tartja a hozzáférési jogosultságokat – a felhasználó által nem olvasható rekordok időzítői figyelmeztetés nélkül kimaradnak a listából.
A telepítés után a felhasználók egyetlen pillantással láthatják: „Jelenleg 3 időzítőm fut – a #42-es Feladaton, a #108-as Hibajegyen és a 'Weboldal újratervezés' Projekten.”
🚀 Főbb jellemzők
⏱️ Futó Időzítők Összesítő API
A res.users.get_running_timers_summary() metódus egy letisztult listát ad vissza az aktuális felhasználó összes aktív időzítőjéről, az alábbi adatokkal:
parent_res_model – a technikai modellneve
parent_res_id – a rekord azonosítója (ID)
record_display_name – a rekord olvasható neve
record_model_name – a modell megnevezése (pl. "Feladat", "Ügyfélszolgálati jegy")
res_model / res_id – aliasok a könnyű frontend-felhasználáshoz
timer_start – az időzítő indításának időpontja
timer_pause – az időzítő jelenleg szünetel-e
🔔 Bus értesítési bekötések (Hooks)
A timer.timer modell bővítésre került create, write és unlink felülírásokkal, amelyek az Odoo Bus-on keresztül értesítik az érintett felhasználó partnereit. (Az értesítési sor jelenleg ki van kommentezve, és azonnal aktiválható, amint a frontend widget bevetésre kerül – lásd a _odootech_notify_timer_changed metódust).
⏸️ Visszaállított párhuzamos időzítők
A timer.mixin felülbírálásra került, így a _action_interrupt_user_timers() a leállítás helyett az action_timer_pause() metódust hívja meg.
Ez azt jelenti: új időzítő indítása nem állítja le a korábbit – csupán szünetelteti. A felhasználók párhuzamosan dolgozhatnak több feladaton, és visszatéréskor folytathatják az egyes időzítőket.
🛡️ Jogosultságfüggő működés
Az összesítő metódus meghívja a check_access_rule("read") ellenőrzést minden hivatkozott rekordra.
Ha a rekord már nem létezik → átugorja.
Ha a felhasználónak nincs olvasási joga → átugorja.
Csak azok az időzítők kerülnek visszaadásra, amelyeket a felhasználó valóban láthat.
🧩 Nulla UI-zsúfoltság
A modul nem ad hozzá új menüket, új nézeteket vagy új mezőket.
Kizárólag a meglévő meglévő modelleket bővíti – így észrevétlenül integrálódik bármely Odoo környezetbe anélkül, hogy megzavarná a felhasználói felületet.
📦 Mit tartalmaz a modul?
| Komponens | Leírás |
| timer.timer bővítmény | Bus értesítési bekötések létehozáskor, módosításkor és törléskor |
| timer.mixin bővítmény | Megszakítás helyett szüneteltetést biztosít |
| res.users bővítmény | get_running_timers_summary() API metódus |
| Bus csatorna | odootech_timer_summary_widget.timer_changed (lefoglalt) |
🧪 Hogyan működik? – Lépésről lépésre
1. A felhasználó elindít egy időzítőt az 'A' Feladaton
A stopper létrejön a timer.timer modellben, és lefut a Bus értesítési logika (amint engedélyezve van).
2. A felhasználó átmegy a 'B' Hibajegyre, és elindít egy második időzítőt
A timer.mixin felülírásnak köszönhetően az 'A' Feladat időzítője szünetel, nem áll le teljesen.
3. A felhasználó megnyitja a Timer Summary Widgetet (frontend)
A widget meghívja az alábbi kódot:
JavaScript
orm.call("res.users", "get_running_timers_summary", [])
és megkapja a strukturált választ:
JSON
[
{
"parent_res_model": "project.task",
"parent_res_id": 42,
"record_display_name": "Bejelentkezési hiba javítása",
"record_model_name": "Feladat",
"res_model": "project.task",
"res_id": 42,
"timer_start": "2024-06-01 09:15:00",
"timer_pause": "2024-06-01 09:45:00"
},
{
"parent_res_model": "helpdesk.ticket",
"parent_res_id": 108,
"record_display_name": "Az ügyfél nem tud belépni",
"record_model_name": "Ügyfélszolgálati jegy",
"res_model": "helpdesk.ticket",
"res_id": 108,
"timer_start": "2024-06-01 10:00:00",
"timer_pause": false
}
]
4. A felhasználó rákattint egy időzítőre a widgetben
A widget a res_model és res_id segítségével közvetlenül a kívánt rekordhoz navigál.
5. A felhasználó folytatja a szüneteltetett időzítőt
A stopper pontosan onnan folytatódik, ahol abbahagyta – nincs elvesztegetett idő.
🏆 Miért válassza ezt a modult?
| Modul nélkül | Modullal |
| Egyszerre csak egy időzítő látható | Minden futó időzítő egy helyen |
| Az új időzítő leállítja a régit | Az új időzítő szünetelteti a régit |
| Elveszett kiszámlázható órák | Pontos, párhuzamos időkövetés |
| Nincs API az összesítő widgethez | Letisztult get_running_timers_summary() API |
| Nincs Bus integráció | Engedélyezésre kész értesítési hook-ok |
🔧 Technikai részletek
Függőségek: mail, timer
Kiterjesztett modellek: timer.timer, timer.mixin, res.users
Új modellek: Nincsenek
Új nézetek: Nincsenek
Új menük: Nincsenek
Adatbázis-séma módosítás: Nincs
Bus csatorna: odootech_timer_summary_widget.timer_changed
Hozzáférés-kezelés: Rekordonkénti check_access_rule("read") ellenőrzést használ
📥 Telepítés
Töltse le és helyezze el a modult az Odoo addons útvonalán.
Győződjön meg róla, hogy a mail és timer modulok telepítve vannak (a legtöbb Odoo kiadásban alapértelmezetten jelen vannak).
Frissítse az Alkalmazások (Apps) listáját.
Keressen rá a „Timer: Timer Summary Widget” kifejezésre.
Kattintson a Telepítés gombra.
(Opcionális) Engedélyezze a Bus értesítési sort a _odootech_notify_timer_changed metódusban, ha a frontend widgetje készen áll.
💬 Támogatás
Fejlesztette és karbantartja a DO Tech.
Hibabejelentéssel, funkciókérésekkel vagy az egyedi frontend widget integrációjával kapcsolatos segítségért lépjen velünk kapcsolatba az Odoo Apps Store-on keresztül.