|
|
"""Similar to core's :meth:`event_event._compute_seats`"""
for event in self:
event.seats_reserved = event.seats_used = event.seats_available = 0
state_field = self._map_registration_state_to_seats_fields()
base_vals = dict((fname, 0) for fname in state_field.values())
results = defaultdict(lambda: defaultdict(lambda: 0))
if self.ids:
query = """
SELECT session_id, state, count(session_id)
FROM event_registration
WHERE session_id IN %s
AND state IN %s AND active = true
GROUP BY session_id, state
"""
self.env["event.registration"].flush_model(
["session_id", "state", "active"]
)
self.env.cr.execute(query, (tuple(self.ids), tuple(state_field.keys())))
for session_id, state, num in self.env.cr.fetchall():
results[session_id][state_field[state]] = num
for session in self:
session.update(results.get(session._origin.id or session.id, base_vals))
if session.seats_max > 0:
session.seats_available = session.seats_max - (
session.seats_reserved + session.seats_used
)
session.seats_taken = session.seats_reserved + session.seats_used
|
|