2026-09-28 11:03:02 +05:30

52 lines
1.7 KiB
Python

from odoo import api, fields, models
class HrEmployee(models.Model):
_inherit = "hr.employee"
session_count = fields.Integer(
"Sessions Taught",
compute="_compute_teaching_stats",
store=True,
)
session_hours = fields.Float(
"Hours Taught",
compute="_compute_teaching_stats",
store=True,
digits=(10, 2),
)
@api.depends()
def _compute_teaching_stats(self):
# Grouped query — avoids N+1 for large employee lists
result = self.env["dance.session"].read_group(
domain=[("instructor_id", "in", self.ids), ("status", "=", "completed")],
fields=["instructor_id", "start_time:sum", "end_time:sum"],
groupby=["instructor_id"],
)
# Build lookup: emp_id → (count, hours)
stats = {}
for row in result:
emp_id = row["instructor_id"][0]
sessions = self.env["dance.session"].search([
("instructor_id", "=", emp_id),
("status", "=", "completed"),
])
hours = sum(max(0.0, s.end_time - s.start_time) for s in sessions)
stats[emp_id] = (row["instructor_id_count"], hours)
for emp in self:
count, hours = stats.get(emp.id, (0, 0.0))
emp.session_count = count
emp.session_hours = hours
def action_view_teaching_sessions(self):
return {
"type": "ir.actions.act_window",
"name": "Teaching Sessions",
"res_model": "dance.session",
"domain": [("instructor_id", "=", self.id)],
"view_mode": "tree,form,calendar",
"context": {"search_default_completed_sessions": 1},
}