Tartalomra ugrás

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:

  1. Csak azon a rekordon látod az időzítőt, amelyiken éppen állsz.

  2. 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?

KomponensLeírás
timer.timer bővítményBus értesítési bekötések létehozáskor, módosításkor és törléskor
timer.mixin bővítményMegszakítás helyett szüneteltetést biztosít
res.users bővítményget_running_timers_summary() API metódus
Bus csatornaodootech_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ülModullal
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égitAz új időzítő szünetelteti a régit
Elveszett kiszámlázható órákPontos, párhuzamos időkövetés
Nincs API az összesítő widgethezLetisztult 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

  1. Töltse le és helyezze el a modult az Odoo addons útvonalán.

  2. 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).

  3. Frissítse az Alkalmazások (Apps) listáját.

  4. Keressen rá a „Timer: Timer Summary Widget” kifejezésre.

  5. Kattintson a Telepítés gombra.

  6. (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.