forked from Yaltik/golem
[FIX]GOLEM Session Activity Registration : correct handling of places used and remaining according to registration state
This commit is contained in:
parent
fea7494efc
commit
ba7aa76952
@ -27,14 +27,12 @@ class GolemActivitySession(models.Model):
|
|||||||
places_overbooked = fields.Integer('Places with overbook', default=0)
|
places_overbooked = fields.Integer('Places with overbook', default=0)
|
||||||
|
|
||||||
@api.one
|
@api.one
|
||||||
@api.depends('places', 'is_overbooked', 'places_overbooked',
|
@api.depends('places', 'is_overbooked', 'places_overbooked', 'places_used')
|
||||||
'activity_session_registration_ids')
|
|
||||||
def _compute_places_remain(self):
|
def _compute_places_remain(self):
|
||||||
used = len(self.activity_session_registration_ids)
|
|
||||||
if not self.is_overbooked:
|
if not self.is_overbooked:
|
||||||
self.places_remain = self.places - used
|
self.places_remain = self.places - self.places_used
|
||||||
else:
|
else:
|
||||||
self.places_remain = self.places_overbooked - used
|
self.places_remain = self.places_overbooked - self.places_used
|
||||||
|
|
||||||
@api.onchange('is_overbooked', 'places')
|
@api.onchange('is_overbooked', 'places')
|
||||||
def onchange_is_overbooked(self):
|
def onchange_is_overbooked(self):
|
||||||
|
@ -46,7 +46,7 @@ class GolemMember(models.Model):
|
|||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def write(self, values):
|
def write(self, values):
|
||||||
# Handle removed activities to be canceled
|
""" Handle removed activities to be canceled """
|
||||||
if 'activity_session_registration_ids' in values:
|
if 'activity_session_registration_ids' in values:
|
||||||
rids = values['activity_session_registration_ids']
|
rids = values['activity_session_registration_ids']
|
||||||
r_keep, r_removed = [], []
|
r_keep, r_removed = [], []
|
||||||
@ -55,7 +55,11 @@ class GolemMember(models.Model):
|
|||||||
rObj = self.env['golem.activity.session.registration']
|
rObj = self.env['golem.activity.session.registration']
|
||||||
for r in r_removed:
|
for r in r_removed:
|
||||||
r = rObj.browse([r[1]])
|
r = rObj.browse([r[1]])
|
||||||
r.state = 'canceled'
|
# if already canceled, let it be removed, else cancel it
|
||||||
|
if r.state != 'canceled':
|
||||||
|
r.state = 'canceled'
|
||||||
|
else:
|
||||||
|
r_keep.append(r)
|
||||||
values['activity_session_registration_ids'] = r_keep
|
values['activity_session_registration_ids'] = r_keep
|
||||||
return super(GolemMember, self).write(values)
|
return super(GolemMember, self).write(values)
|
||||||
|
|
||||||
@ -68,22 +72,23 @@ class GolemActivitySession(models.Model):
|
|||||||
|
|
||||||
activity_session_registration_ids = fields.One2many(
|
activity_session_registration_ids = fields.One2many(
|
||||||
'golem.activity.session.registration', 'session_id', 'Members')
|
'golem.activity.session.registration', 'session_id', 'Members')
|
||||||
places_used = fields.Integer('Places used', compute='_compute_places_used')
|
places_used = fields.Integer('Places used', compute='_compute_places_used',
|
||||||
|
store=True)
|
||||||
|
|
||||||
@api.one
|
@api.one
|
||||||
@api.depends('activity_session_registration_ids')
|
@api.depends('activity_session_registration_ids')
|
||||||
def _compute_places_used(self):
|
def _compute_places_used(self):
|
||||||
self.places_used = len(self.activity_session_registration_ids)
|
rids = self.activity_session_registration_ids
|
||||||
|
self.places_used = len(rids.filtered(lambda r: r.state == 'confirmed'))
|
||||||
|
|
||||||
places = fields.Integer('Places', default=20)
|
places = fields.Integer('Places', default=20)
|
||||||
places_remain = fields.Integer('Remaining places', store=True,
|
places_remain = fields.Integer('Remaining places', store=True,
|
||||||
compute='_compute_places_remain')
|
compute='_compute_places_remain')
|
||||||
|
|
||||||
@api.one
|
@api.one
|
||||||
@api.depends('places', 'activity_session_registration_ids')
|
@api.depends('places', 'places_used')
|
||||||
def _compute_places_remain(self):
|
def _compute_places_remain(self):
|
||||||
used = len(self.activity_session_registration_ids)
|
self.places_remain = self.places - self.places_used
|
||||||
self.places_remain = self.places - used
|
|
||||||
|
|
||||||
@api.constrains('places_remain')
|
@api.constrains('places_remain')
|
||||||
def _check_remaining_places(self):
|
def _check_remaining_places(self):
|
||||||
@ -128,3 +133,12 @@ class GolemActivitySessionRegistration(models.Model):
|
|||||||
emsg = _('Subscription can not be executed : the targeted '
|
emsg = _('Subscription can not be executed : the targeted '
|
||||||
'member is not on the same season as the session.')
|
'member is not on the same season as the session.')
|
||||||
raise models.ValidationError(emsg)
|
raise models.ValidationError(emsg)
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def write(self, values):
|
||||||
|
""" Recomputes values linked to registrations when state change """
|
||||||
|
res = super(GolemActivitySessionRegistration, self).write(values)
|
||||||
|
if values['state']:
|
||||||
|
for r in self:
|
||||||
|
r.session_id._compute_places_used()
|
||||||
|
return res
|
||||||
|
Loading…
Reference in New Issue
Block a user