diff --git a/models/calendar.py b/models/calendar.py index 7eee2bb42aacb086c5b12ed84fd9c10a32c76872..9022995d4a88b05c708a94b62f830f730f1dc1d7 100644 --- a/models/calendar.py +++ b/models/calendar.py @@ -5,7 +5,7 @@ import pytz from datetime import timedelta from odoo import models, fields, api -from odoo.exceptions import UserError +from odoo.exceptions import UserError, ValidationError class CGScopCalendar(models.Model): @@ -107,6 +107,31 @@ class CGScopCalendar(models.Model): fields.Datetime.now() > self.coop_id.ur_regional_convention_date: self.ur_regional_convention_id = self.coop_id.ur_regional_convention_id + # ------------------------------------------------------ + # Contrains + # ------------------------------------------------------ + @api.constrains('project_id', 'start', 'stop') + def _check_activity_code(self): + for event in self: + if event.project_id: + # Récupère les entrées en intersection + # avec la plage horaire + entries = self.search([ + '|', + '&', + ('start', '>', event.start), + ('start', '<', event.stop), + '&', + ('stop', '>', event.start), + ('stop', '<', event.stop), + ('user_id', '=', self.env.uid), + ('project_id', '=', event.project_id.id), + ('id', '!=', event.id)]) + if entries: + raise ValidationError( + "Vous ne pourvez programmer 2 évènements avec le " + "même code activité sur la même plage horaire") + # ------------------------------------------------------ # Fonction boutons # ------------------------------------------------------