golem/golem_activity_registration.../models/golem_activity_registration...

64 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
""" GOLEM Activity Registration Slot """
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class GolemActivityRegistrationSlot(models.Model):
""" GOLEM Activity Registration Slot """
_name = 'golem.activity.registration.slot'
_order = 'sequence'
_description = 'GOLEM Activity Registration Slot'
activity_id = fields.Many2one('golem.activity', required=True,
string='Activity', ondelete='cascade',
index=True)
member_id = fields.Many2one('golem.member', string='Member',
ondelete='cascade', index=True)
hour_start = fields.Float('Start time')
hour_stop = fields.Float('Stop time')
sequence = fields.Integer('Sequence')
@api.constrains('hour_start', 'hour_stop')
def check_slot_hours(self):
""" Check slot hours consistency """
for slot in self:
if slot.hour_start >= slot.hour_stop:
verr = _(u'Slot start must be before slot stop')
raise ValidationError(verr)
if slot.hour_start < slot.activity_id.hour_start or \
slot.hour_stop > slot.activity_id.hour_stop:
verr = _(u'Slot start and stop must be between activity start and'
' activity stop.')
raise ValidationError(verr)
@api.constrains('sequence')
def calculate_slot_hours(self):
""" Calcualte slot hours """
slots = self.env['golem.activity.registration.slot'].search(
[('activity_id', '=', self[0].activity_id.id)], order='sequence')
for id_slot, slot in enumerate(slots):
hour_start = slot.activity_id.hour_start + (slot.activity_id.slots_duration * id_slot)
hour_stop = hour_start + slot.activity_id.slots_duration
slot.write({
'hour_start': hour_start,
'hour_stop': hour_stop
})