Coworking/coworking_event/wizard/coworking_event_weekly.py

66 lines
2.6 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
""" Weekly massive event creation module """
2017-11-21 16:40:06 +01:00
import logging
from datetime import timedelta
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
_LOGGER = logging.getLogger(__name__)
class CoworkingEventWeekly(models.TransientModel):
""" Weekly massive event creation """
_name = 'coworking.event.weekly'
_description = 'Weekly massive event creation'
2017-11-21 16:40:06 +01:00
title = fields.Char(required=True)
2017-11-28 17:15:18 +01:00
manager_id = fields.Many2one('res.partner', string='Manager',
2017-11-21 16:40:06 +01:00
required=True)
date_start_recurence = fields.Datetime('Date start', required=True)
date_stop_recurence = fields.Datetime('Date stop', required=True)
duration = fields.Float(required=True)
@api.constrains('date_start_recurence', 'date_stop_recurence')
def _check_dates(self):
""" Check date coherence """
for weekly in self:
if weekly.date_start_recurence > weekly.date_stop_recurence:
raise ValidationError(_('Please check you dates.'))
@api.multi
def weekly_create(self):
""" Create multiple events repeated weekly, according to dates """
self.ensure_one()
# 5 - Rediriger vers la liste des événements (en automatique)
# _LOGGER.warning()
date_start_py = fields.Datetime.from_string(self.date_start_recurence)
2017-11-21 17:02:04 +01:00
duration_delta = timedelta(hours=self.duration)
2017-11-21 16:40:06 +01:00
date_stop_py = fields.Datetime.from_string(self.date_stop_recurence)
2017-11-21 17:02:04 +01:00
delta = date_stop_py - date_start_py
2017-11-21 16:40:06 +01:00
wdelta = timedelta(days=7)
2017-11-21 17:02:04 +01:00
for week_number in xrange(delta.days / 7 + 1):
2017-11-21 16:40:06 +01:00
if week_number == 0:
date_start = self.date_start_recurence
2017-11-21 17:02:04 +01:00
date_stop = fields.Datetime.to_string(date_start_py + duration_delta)
2017-11-21 16:40:06 +01:00
else:
date_start = fields.Datetime.from_string(self.date_start_recurence) +\
wdelta * week_number
2017-11-21 17:02:04 +01:00
date_stop = fields.Datetime.to_string(date_start + duration_delta)
2017-11-21 16:40:06 +01:00
date_start = fields.Datetime.to_string(date_start)
self.env['coworking.event'].create({
'title': self.title,
'date_start': date_start,
'date_end': date_stop,
'manager_id': self.manager_id.id
})
2017-11-21 17:02:04 +01:00
event_action = self.env.ref('coworking_event.event_action')
2017-11-21 16:40:06 +01:00
return {
2017-11-21 17:02:04 +01:00
'type': event_action.type,
'name': event_action.name,
'res_model': event_action.res_model,
'target': 'main',
'view_mode': event_action.view_mode
}