diff --git a/golem_activity/models/golem_activity.py b/golem_activity/models/golem_activity.py index f398fa6..069d68d 100644 --- a/golem_activity/models/golem_activity.py +++ b/golem_activity/models/golem_activity.py @@ -36,30 +36,6 @@ class GolemActivity(models.Model): required=True) animator_id = fields.Many2one('res.partner', string="Animator", domain=[('is_company', '=', False)]) - places = fields.Integer('Places', default=0) - is_overbooked = fields.Boolean('Allow overbook?', default=False) - places_overbooked = fields.Integer('Places with overbook', default=0) - - @api.onchange('is_overbooked', 'places') - def onchange_is_overbooked(self): - for a in self: - if a.places and a.is_overbooked: - if not a.places_overbooked or (a.places_overbooked < a.places): - a.places_overbooked = a.places + 1 - - @api.constrains('places', 'places_overbooked') - def _check_places(self): - """ Check integers are signed and overbooked to be superior than - normal places """ - for v in self: - for f in ['places', 'places_overbooked']: - if v[f] < 0: - emsg = _('Number of places cannot be negative.') - raise models.ValidationError(emsg) - if v.is_overbooked and (v.places_overbooked <= v.places): - emsg = _('Overbooked places cannot be inferior than places') - raise models.ValidationError(emsg) - date_start = fields.Date('Start date') date_end = fields.Date('End date') diff --git a/golem_activity/views/golem_activity_view.xml b/golem_activity/views/golem_activity_view.xml index 07d9cd8..1d24974 100644 --- a/golem_activity/views/golem_activity_view.xml +++ b/golem_activity/views/golem_activity_view.xml @@ -42,14 +42,10 @@ along with this program. If not, see . - - - - + diff --git a/golem_activity_session/__openerp__.py b/golem_activity_session/__openerp__.py index cf04583..9b01689 100644 --- a/golem_activity_session/__openerp__.py +++ b/golem_activity_session/__openerp__.py @@ -26,5 +26,5 @@ 'application': False, 'installable': True, 'depends': ['golem_activity'], - 'data': ['views/golem_activity_view.xml'] + 'data': ['views/golem_activity_view.xml', 'views/golem_member_view.xml'] } diff --git a/golem_activity_session/models/golem_activity_session.py b/golem_activity_session/models/golem_activity_session.py index 46c71fa..011fbbb 100644 --- a/golem_activity_session/models/golem_activity_session.py +++ b/golem_activity_session/models/golem_activity_session.py @@ -18,6 +18,13 @@ from openerp import models, fields, api, _ +class GolemMember(models.Model): + _inherit = 'golem.member' + + activity_session_ids = fields.Many2many('golem.activity.session', + string='Activities') + + class GolemActivity(models.Model): _inherit = 'golem.activity' @@ -53,12 +60,12 @@ class GolemActivitySession(models.Model): for s in self: s.name = s.activity_id.activity_name - # TODO: reucrrence etc... to link with calendar.event + member_ids = fields.Many2many('golem.member', string='Members') + # TODO: recurrence etc... to link with calendar.event activity_id = fields.Many2one('golem.activity', string='Activité', required=True) - animator_id = fields.Many2one('res.partner', string='Animator', - required=True) - is_recurrent = fields.Boolean('Is recurrent ?', default=False, + animator_id = fields.Many2one('res.partner', string='Animator') + is_recurrent = fields.Boolean('Is recurrent ?', default=True, help="Work in progress") weekday = fields.Selection([('mon', _('Monday')), ('tue', _('Tuesday')), @@ -69,7 +76,6 @@ class GolemActivitySession(models.Model): ('sun', _('Sunday'))]) hour_start = fields.Float('Start time') hour_end = fields.Float('End time') - note = fields.Text('Note') @api.constrains('hour_start', 'hour_end') def _check_period(self): @@ -78,3 +84,48 @@ class GolemActivitySession(models.Model): if s.hour_start > s.hour_end: raise models.ValidationError(_('Start of the period cannot be ' 'after end of the period.')) + + places = fields.Integer('Places', default=0) + is_overbooked = fields.Boolean('Allow overbook?', default=False) + places_overbooked = fields.Integer('Places with overbook', default=0) + places_remain = fields.Integer('Remaining places', store=True, + compute='_compute_places_remain') + + @api.depends('places', 'is_overbooked', 'places_overbooked', 'member_ids') + def _compute_places_remain(self): + for s in self: + used = len(s.member_ids) + if not s.is_overbooked: + s.places_remain = s.places - used + else: + s.places_remain = s.places_overbooked - used + + @api.constrains('places_remain') + def _check_remaining_places(self): + """ Forbid inscription when there is no more place """ + for s in self: + if s.places_remain < 0: + emsg = _('Sorry, there is no more place !') + raise models.ValidationError(emsg) + + @api.onchange('is_overbooked', 'places') + def onchange_is_overbooked(self): + for s in self: + if s.places and s.is_overbooked: + if not s.places_overbooked or (s.places_overbooked < s.places): + s.places_overbooked = s.places + 1 + + @api.constrains('places', 'places_overbooked') + def _check_places(self): + """ Check integers are signed and overbooked to be superior than + normal places """ + for v in self: + for f in ['places', 'places_overbooked']: + if v[f] < 0: + emsg = _('Number of places cannot be negative.') + raise models.ValidationError(emsg) + if v.is_overbooked and (v.places_overbooked <= v.places): + emsg = _('Overbooked places cannot be inferior than places') + raise models.ValidationError(emsg) + + note = fields.Text('Note') diff --git a/golem_activity_session/views/golem_activity_view.xml b/golem_activity_session/views/golem_activity_view.xml index fa35a06..0b28634 100644 --- a/golem_activity_session/views/golem_activity_view.xml +++ b/golem_activity_session/views/golem_activity_view.xml @@ -43,6 +43,10 @@ along with this program. If not, see . + + + @@ -51,16 +55,24 @@ along with this program. If not, see . - - - + + + + + + + + + + + - + Session list golem.activity.session diff --git a/golem_activity_session/views/golem_member_view.xml b/golem_activity_session/views/golem_member_view.xml new file mode 100644 index 0000000..3d882fc --- /dev/null +++ b/golem_activity_session/views/golem_member_view.xml @@ -0,0 +1,36 @@ + + + + + + + + Add sessions inscriptions to member form + golem.member + + + + + + + + + + + +