[IMP] *: replace default_get overrides by default attribute on fields.

Leave the generic management of fields default to the orm as much as
possible.

* Default method is not called unless necessary.
* Default values are correctly post-processed by the orm when necessary.
This commit is contained in:
Victor Feyens
2020-07-23 16:38:17 +00:00
parent 71ab12840b
commit 5dc8b7bdd8
9 changed files with 36 additions and 87 deletions
@@ -28,23 +28,17 @@ class BaseGengoTranslations(models.TransientModel):
_name = 'base.gengo.translations'
_description = 'Base Gengo Translations'
@api.model
def default_get(self, fields):
res = super(BaseGengoTranslations, self).default_get(fields)
if 'authorize_credentials' in fields:
res['authorized_credentials'], gengo = self.gengo_authentication()
if 'lang_id' in fields:
res['lang_id'] = get_lang(self.env).id
return res
sync_type = fields.Selection([
('send', 'Send New Terms'),
('receive', 'Receive Translation'),
('both', 'Both')
], "Sync Type", default='both', required=True)
lang_id = fields.Many2one('res.lang', 'Language', required=True)
lang_id = fields.Many2one(
'res.lang', 'Language', required=True,
default=lambda s: get_lang(s.env).id)
sync_limit = fields.Integer("No. of terms to sync", default=20)
authorized_credentials = fields.Boolean('The private and public keys are valid')
authorized_credentials = fields.Boolean(
'The private and public keys are valid', default=lambda s: s.gengo_authentication()[0])
def init(self):
icp = self.env['ir.config_parameter'].sudo()
@@ -9,17 +9,12 @@ class Lead2OpportunityMassConvert(models.TransientModel):
_description = 'Convert Lead to Opportunity (in mass)'
_inherit = 'crm.lead2opportunity.partner'
@api.model
def default_get(self, fields):
res = super(Lead2OpportunityMassConvert, self).default_get(fields)
if 'lead_tomerge_ids' in fields and not res.get('lead_tomerge_ids'):
res['lead_tomerge_ids'] = self.env.context.get('active_ids', [])
return res
lead_id = fields.Many2one(required=False)
lead_tomerge_ids = fields.Many2many(
'crm.lead', 'crm_convert_lead_mass_lead_rel',
string='Active Leads', context={'active_test': False})
string='Active Leads', context={'active_test': False},
default=lambda self: self.env.context.get('active_ids', []),
)
user_ids = fields.Many2many('res.users', string='Salespersons')
deduplicate = fields.Boolean('Apply deduplication', default=True, help='Merge with existing leads/opportunities of each partner')
action = fields.Selection(selection_add=[
+5 -12
View File
@@ -130,16 +130,6 @@ class FleetVehicleLogServices(models.Model):
_rec_name = 'service_type_id'
_description = 'Services for vehicles'
@api.model
def default_get(self, default_fields):
res = super(FleetVehicleLogServices, self).default_get(default_fields)
service = self.env.ref('fleet.type_service_service_8', raise_if_not_found=False)
res.update({
'date': fields.Date.context_today(self),
'service_type_id': service.id if service else None,
})
return res
active = fields.Boolean(default=True)
vehicle_id = fields.Many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this log')
amount = fields.Monetary('Cost')
@@ -148,14 +138,17 @@ class FleetVehicleLogServices(models.Model):
odometer = fields.Float(compute="_get_odometer", inverse='_set_odometer', string='Odometer Value',
help='Odometer measure of the vehicle at the moment of this log')
odometer_unit = fields.Selection(related='vehicle_id.odometer_unit', string="Unit", readonly=True)
date = fields.Date(help='Date when the cost has been executed')
date = fields.Date(help='Date when the cost has been executed', default=fields.Date.context_today)
company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.company)
currency_id = fields.Many2one('res.currency', related='company_id.currency_id')
purchaser_id = fields.Many2one('res.partner', string="Driver", compute='_compute_purchaser_id', readonly=False, store=True)
inv_ref = fields.Char('Vendor Reference')
vendor_id = fields.Many2one('res.partner', 'Vendor')
notes = fields.Text()
service_type_id = fields.Many2one('fleet.service.type', 'Service Type', required=True)
service_type_id = fields.Many2one(
'fleet.service.type', 'Service Type', required=True,
default=lambda self: self.env.ref('fleet.type_service_service_8', raise_if_not_found=False),
)
state = fields.Selection([
('todo', 'To Do'),
('running', 'Running'),
+4 -9
View File
@@ -8,14 +8,6 @@ class HrDepartureWizard(models.TransientModel):
_name = 'hr.departure.wizard'
_description = 'Departure Wizard'
@api.model
def default_get(self, fields):
res = super(HrDepartureWizard, self).default_get(fields)
if (not fields or 'employee_id' in fields) and 'employee_id' not in res:
if self.env.context.get('active_id'):
res['employee_id'] = self.env.context['active_id']
return res
departure_reason = fields.Selection([
('fired', 'Fired'),
('resigned', 'Resigned'),
@@ -23,7 +15,10 @@ class HrDepartureWizard(models.TransientModel):
], string="Departure Reason", default="fired")
departure_description = fields.Text(string="Additional Information")
departure_date = fields.Date(string="Departure Date", required=True, default=fields.Date.today)
employee_id = fields.Many2one('hr.employee', string='Employee', required=True)
employee_id = fields.Many2one(
'hr.employee', string='Employee', required=True,
default=lambda self: self.env.context.get('active_id', None),
)
archive_private_address = fields.Boolean('Archive Private Address', default=True)
def action_register_departure(self):
+4 -9
View File
@@ -8,16 +8,11 @@ class HrPlanWizard(models.TransientModel):
_name = 'hr.plan.wizard'
_description = 'Plan Wizard'
@api.model
def default_get(self, fields_list):
res = super(HrPlanWizard, self).default_get(fields_list)
if (not fields_list or 'employee_id' in fields_list) and 'employee_id' not in res:
if self.env.context.get('active_id'):
res['employee_id'] = self.env.context['active_id']
return res
plan_id = fields.Many2one('hr.plan', default=lambda self: self.env['hr.plan'].search([], limit=1))
employee_id = fields.Many2one('hr.employee', string='Employee', required=True)
employee_id = fields.Many2one(
'hr.employee', string='Employee', required=True,
default=lambda self: self.env.context.get('active_id', None),
)
def action_launch(self):
for activity_type in self.plan_id.plan_activity_type_ids:
@@ -11,18 +11,13 @@ class ProjectTaskCreateTimesheet(models.TransientModel):
_sql_constraints = [('time_positive', 'CHECK(time_spent > 0)', 'The timesheet\'s time must be positive' )]
@api.model
def default_get(self, fields):
result = super(ProjectTaskCreateTimesheet, self).default_get(fields)
active_id = self._context.get('active_id')
if 'task_id' in fields and active_id:
result['task_id'] = active_id
return result
time_spent = fields.Float('Time', digits=(16, 2))
description = fields.Char('Description')
task_id = fields.Many2one('project.task', "Task", help="Task for which we are creating a sales order", required=True)
task_id = fields.Many2one(
'project.task', "Task", required=True,
default=lambda self: self.env.context.get('active_id', None),
help="Task for which we are creating a sales order",
)
def save_timesheet(self):
values = {
+1 -8
View File
@@ -209,7 +209,7 @@ class Project(models.Model):
date = fields.Date(string='Expiration Date', index=True, tracking=True)
subtask_project_id = fields.Many2one('project.project', string='Sub-task Project', ondelete="restrict",
help="Project in which sub-tasks of the current project will be created. It can be the current project itself.")
allow_subtasks = fields.Boolean('Sub-tasks')
allow_subtasks = fields.Boolean('Sub-tasks', default=lambda self: self.env.user.has_group('project.group_subtask_project'))
# rating fields
rating_request_deadline = fields.Datetime(compute='_compute_rating_request_deadline', store=True)
@@ -234,13 +234,6 @@ class Project(models.Model):
('project_date_greater', 'check(date >= date_start)', 'Error! project start-date must be lower than project end-date.')
]
@api.model
def default_get(self, *args, **kwargs):
defaults = super().default_get(*args, **kwargs)
if 'allow_subtasks' not in defaults:
defaults['allow_subtasks'] = self.env.user.has_group('project.group_subtask_project')
return defaults
def _compute_alias_enabled(self):
for project in self:
project.alias_enabled = project.alias_domain and project.alias_id.alias_name
@@ -5,18 +5,14 @@ class SnailmailLetterFormatError(models.TransientModel):
_name = 'snailmail.letter.format.error'
_description = 'Format Error Sending a Snailmail Letter'
message_id = fields.Many2one('mail.message')
snailmail_cover = fields.Boolean(string='Add a Cover Page')
@api.model
def default_get(self, fields):
res = super(SnailmailLetterFormatError, self).default_get(fields)
snailmail_cover = self.env.company.snailmail_cover
res.update({
'message_id': self.env.context.get('message_id'),
'snailmail_cover': snailmail_cover,
})
return res
message_id = fields.Many2one(
'mail.message',
default=lambda self: self.env.context.get('message_id', None),
)
snailmail_cover = fields.Boolean(
string='Add a Cover Page',
default=lambda self: self.env.company.snailmail_cover,
)
def update_resend_action(self):
self.env.company.write({'snailmail_cover': self.snailmail_cover})
+1 -8
View File
@@ -7,14 +7,7 @@ class WebsiteRobots(models.TransientModel):
_name = "website.robots"
_description = "Robots.txt Editor"
content = fields.Text()
@api.model
def default_get(self, fields):
defaults = super(WebsiteRobots, self).default_get(fields)
if 'content' in fields:
defaults['content'] = self.env['website'].get_current_website().robots_txt
return defaults
content = fields.Text(default=lambda s: s.env['website'].get_current_website().robots_txt)
def action_save(self):
self.env['website'].get_current_website().robots_txt = self.content