# -*- coding: utf-8 -*- # Author: Fabien Bourgeois. Copyright Yaltik # Copyright (C) # # 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 . from datetime import timedelta, datetime from openerp import fields, models, api, _ class Note(models.Model): _inherit = 'note.note' is_daily = fields.Boolean('Daily', default=False) moment = fields.Selection([('now', _('Now')), ('morning', _('Morning')), ('afternoon', _('Afternoon')), ('night', _('Night'))], string='Moment') date_start = fields.Datetime('Start') date_stop = fields.Datetime('End') tag_names = fields.Char('Tag Names', compute='_compute_tag_names') @api.one @api.depends('tag_ids') def _compute_tag_names(self): self.tag_names = u']['.join([t.name for t in self.tag_ids]) @api.onchange('is_daily') def onchange_isdaily(self): """ If event is daily, sets infinity """ for n in self: if n.is_daily: today = datetime.now().replace(hour=0, minute=0, second=0) n.date_start = fields.Datetime.to_string(today) n.date_stop = fields.Datetime.to_string(datetime( day=1, month=1, year=2099)) @api.onchange('moment') def onchange_moment(self): """ According to moment, give good old defaults (warn: UTC) """ for n in self: if n.moment: nowstr = fields.Datetime.now() now = fields.Datetime.from_string(nowstr) if n.moment == 'now': n.date_start = nowstr n.date_stop = fields.Datetime.to_string(now + timedelta(hours=1)) elif n.moment == 'morning': db = now.replace(hour=6, minute=0, second=0) n.date_start = fields.Datetime.to_string(db) n.date_stop = fields.Datetime.to_string(db + timedelta(hours=4)) elif n.moment == 'afternoon': db = now.replace(hour=12, minute=30, second=0) n.date_start = fields.Datetime.to_string(db) n.date_stop = fields.Datetime.to_string(db + timedelta(hours=4)) else: delta = timedelta(days=1) db = now + delta db = db.replace(hour=3, minute=0, second=0) n.date_start = fields.Datetime.to_string(db) n.date_stop = fields.Datetime.to_string(db + timedelta(hours=3)) @api.onchange('date_start') def onchange_datestart(self): for n in self: if n.date_start and not n.date_stop: dt = fields.Datetime.from_string(n.date_start) dur = timedelta(hours=1) n.date_stop = fields.Datetime.to_string(dt + dur)