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.
86 lines
3.2 KiB
86 lines
3.2 KiB
# Copyright (C) 2018 Akretion
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
|
|
|
from odoo import _, api, exceptions, fields, models
|
|
|
|
|
|
class VacuumRule(models.Model):
|
|
_name = "vacuum.rule"
|
|
_description = "Rules Used to delete message historic"
|
|
|
|
@api.depends('model_ids')
|
|
@api.multi
|
|
def _get_model_id(self):
|
|
for rule in self:
|
|
if rule.model_ids and len(rule.model_ids) == 1:
|
|
rule.model_id = rule.model_ids.id
|
|
rule.model = rule.model_id.model
|
|
else:
|
|
rule.model_id = False
|
|
rule.model = False
|
|
|
|
name = fields.Char(required=True)
|
|
ttype = fields.Selection(
|
|
selection=[('attachment', 'Attachment'),
|
|
('message', 'Message')],
|
|
string="Type",
|
|
required=True)
|
|
filename_pattern = fields.Char(
|
|
help=("If set, only attachments containing this pattern will be"
|
|
" deleted."))
|
|
company_id = fields.Many2one(
|
|
'res.company', string="Company",
|
|
default=lambda self: self.env['res.company']._company_default_get(
|
|
'vacuum.rule'))
|
|
message_subtype_ids = fields.Many2many(
|
|
'mail.message.subtype', string="Subtypes",
|
|
help="Message subtypes concerned by the rule. If left empty, the "
|
|
"system won't take the subtype into account to find the "
|
|
"messages to delete")
|
|
empty_subtype = fields.Boolean(
|
|
help="Take also into account messages with no subtypes")
|
|
model_ids = fields.Many2many(
|
|
'ir.model', string="Models",
|
|
help="Models concerned by the rule. If left empty, it will take all "
|
|
"models into account")
|
|
model_id = fields.Many2one(
|
|
'ir.model', readonly=True,
|
|
compute='_get_model_id',
|
|
help="Technical field used to set attributes (invisible/required, "
|
|
"domain, etc...for other fields, like the domain filter")
|
|
model_filter_domain = fields.Text(
|
|
string='Model Filter Domain')
|
|
model = fields.Char(
|
|
readonly=True,
|
|
compute='_get_model_id',
|
|
string='Model code'
|
|
)
|
|
message_type = fields.Selection([
|
|
('email', 'Email'),
|
|
('comment', 'Comment'),
|
|
('notification', 'System notification'),
|
|
('all', 'All')])
|
|
retention_time = fields.Integer(
|
|
required=True, default=365,
|
|
help="Number of days the messages concerned by this rule will be "
|
|
"keeped in the database after creation. Once the delay is "
|
|
"passed, they will be automatically deleted.")
|
|
active = fields.Boolean(default=True)
|
|
description = fields.Text()
|
|
|
|
@api.multi
|
|
@api.constrains('retention_time')
|
|
def retention_time_not_null(self):
|
|
for rule in self:
|
|
if not rule.retention_time:
|
|
raise exceptions.ValidationError(
|
|
_("The Retention Time can't be 0 days"))
|
|
|
|
def _search_autovacuum_records(self):
|
|
self.ensure_one()
|
|
model = self.ttype
|
|
if model == 'message':
|
|
model = 'mail.message'
|
|
elif model == 'attachment':
|
|
model = 'ir.attachment'
|
|
return self.env[model]._get_autovacuum_records(self)
|