You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

150 lines
5.8 KiB

# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from datetime import timedelta
from odoo import models, fields, api
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
class MailActivity(models.Model):
_name = 'mail.activity'
_inherit = ['mail.activity', 'mail.thread']
_rec_name = 'summary'
date_deadline = fields.Date('Due Date', index=True, required=True,
default=fields.Date.context_today, store=True)
user_id = fields.Many2one('res.users', string='user', index=True,
tracking=True, default=lambda self: self.env.user)
res_model_id = fields.Many2one(
'ir.model', 'Document Model',
index=True, ondelete='cascade', required=True,
default=lambda self: self.env.ref('todo_list.model_activity_general'))
res_id = fields.Many2oneReference(string='Related Document ID', index=True,
required=True, model_field='res_model',
default=lambda self: self.env.ref(
'todo_list.general_activities',False))
priority = fields.Selection([
('0', 'Normal'),
('1', 'Important'),
('2', 'Very Important'),
('3', 'Urgent'),
], default='0', index=True, store=True)
recurring = fields.Boolean(string="Recurring", store=True)
state = fields.Selection([
('today', 'Today'),
('planned', 'Planned'),
('done', 'Done'),
('overdue', 'Expired'),
('cancel', 'Cancelled'), ], 'State',
compute='_compute_state', store=True)
interval = fields.Selection(
[('Daily', 'Daily'),
('Weekly', 'Weekly'),
('Monthly', 'Monthly'),
('Quarterly', 'Quarterly'),
('Yearly', 'Yearly')],
string='Recurring Interval', )
new_date = fields.Date(string="Next Due Date", store=True)
def action_done(self):
"""Function done button"""
self.write({'state': 'done'})
if self.recurring:
self.env['mail.activity'].create({
'res_id': self.res_id,
'res_model_id': self.res_model_id.id,
'summary': self.summary,
'priority': self.priority,
'date_deadline': self.new_date,
'recurring': self.recurring,
'interval': self.interval,
'activity_type_id': self.activity_type_id.id,
'new_date': self.get_date(),
'user_id': self.user_id.id
})
def get_date(self):
""" function for get new due date on new record"""
date_deadline = self.new_date if self.new_date else self.date_deadline
new_date = False
if self.interval == 'Daily':
new_date = (
date_deadline + timedelta(days=1)).strftime(
DEFAULT_SERVER_DATE_FORMAT)
elif self.interval == 'Weekly':
new_date = (
date_deadline + timedelta(days=7)).strftime(
DEFAULT_SERVER_DATE_FORMAT)
elif self.interval == 'Monthly':
new_date = (
date_deadline + timedelta(days=30)).strftime(
DEFAULT_SERVER_DATE_FORMAT)
elif self.interval == 'Quarterly':
new_date = (
date_deadline + timedelta(days=90)).strftime(
DEFAULT_SERVER_DATE_FORMAT)
elif self.interval == 'Yearly':
new_date = (
date_deadline + timedelta(days=365)).strftime(
DEFAULT_SERVER_DATE_FORMAT)
return new_date
@api.onchange('interval', 'date_deadline')
def onchange_recurring(self):
""" function for show new due date"""
self.new_date = False
if self.recurring:
self.new_date = self.get_date()
def action_date(self):
""" Function for automated actions for deadline"""
today = fields.date.today()
dates = self.env['mail.activity'].search(
[('state', 'in', ['today', 'planned']),
('date_deadline', '=', today),
('recurring', '=', True)])
for rec in dates:
self.env['mail.activity'].create(
{'res_id': rec.res_id,
'res_model_id': rec.res_model_id.id,
'summary': rec.summary,
'priority': rec.priority,
'interval': rec.interval,
'recurring': rec.recurring,
'date_deadline': rec.new_date,
'new_date': rec.get_date(),
'activity_type_id': rec.activity_type_id.id,
'user_id': rec.user_id.id
})
rec.state = 'done'
def action_cancel(self):
""" function for cancel button"""
return self.write({'state': 'cancel'})
class ActivityGeneral(models.Model):
_name = 'activity.general'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char('Name')