|
|
""" Determine available, reserved, used and taken seats. """
for event in self:
event.seats_reserved = event.seats_used = event.seats_available = 0
state_field = {
'open': 'seats_reserved',
'done': 'seats_used',
}
base_vals = dict((fname, 0) for fname in state_field.values())
results = dict((event_id, dict(base_vals)) for event_id in self.ids)
if self.ids:
query = """ SELECT event_id, state, count(event_id)
FROM event_registration
WHERE event_id IN %s AND state IN ('open', 'done') AND active = true
GROUP BY event_id, state
"""
self.env['event.registration'].flush_model(['event_id', 'state', 'active'])
self.env.cr.execute(query, (tuple(self.ids),))
res = self.env.cr.fetchall()
for event_id, state, num in res:
results[event_id][state_field[state]] = num
for event in self:
event.update(results.get(event._origin.id or event.id, base_vals))
seats_max = event.seats_max * event.event_slot_count if event.is_multi_slots else event.seats_max
if seats_max > 0:
event.seats_available = seats_max - (event.seats_reserved + event.seats_used)
event.seats_taken = event.seats_reserved + event.seats_used
|
|