summaryrefslogtreecommitdiff
path: root/addons/base_setup/models
diff options
context:
space:
mode:
Diffstat (limited to 'addons/base_setup/models')
-rw-r--r--addons/base_setup/models/__init__.py6
-rw-r--r--addons/base_setup/models/ir_http.py14
-rw-r--r--addons/base_setup/models/res_config_settings.py121
-rw-r--r--addons/base_setup/models/res_users.py25
4 files changed, 166 insertions, 0 deletions
diff --git a/addons/base_setup/models/__init__.py b/addons/base_setup/models/__init__.py
new file mode 100644
index 00000000..ce534721
--- /dev/null
+++ b/addons/base_setup/models/__init__.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import ir_http
+from . import res_config_settings
+from . import res_users
diff --git a/addons/base_setup/models/ir_http.py b/addons/base_setup/models/ir_http.py
new file mode 100644
index 00000000..92639e3c
--- /dev/null
+++ b/addons/base_setup/models/ir_http.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo import models
+from odoo.http import request
+
+
+class IrHttp(models.AbstractModel):
+ _inherit = 'ir.http'
+
+ def session_info(self):
+ result = super(IrHttp, self).session_info()
+ if request.env.user.has_group('base.group_user'):
+ result['show_effect'] = request.env['ir.config_parameter'].sudo().get_param('base_setup.show_effect')
+ return result
diff --git a/addons/base_setup/models/res_config_settings.py b/addons/base_setup/models/res_config_settings.py
new file mode 100644
index 00000000..9ea1339f
--- /dev/null
+++ b/addons/base_setup/models/res_config_settings.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+
+
+class ResConfigSettings(models.TransientModel):
+
+ _inherit = 'res.config.settings'
+
+ company_id = fields.Many2one('res.company', string='Company', required=True,
+ default=lambda self: self.env.company)
+ user_default_rights = fields.Boolean(
+ "Default Access Rights",
+ config_parameter='base_setup.default_user_rights')
+ external_email_server_default = fields.Boolean(
+ "External Email Servers",
+ config_parameter='base_setup.default_external_email_server')
+ module_base_import = fields.Boolean("Allow users to import data from CSV/XLS/XLSX/ODS files")
+ module_google_calendar = fields.Boolean(
+ string='Allow the users to synchronize their calendar with Google Calendar')
+ module_microsoft_calendar = fields.Boolean(
+ string='Allow the users to synchronize their calendar with Outlook Calendar')
+ module_google_drive = fields.Boolean("Attach Google documents to any record")
+ module_google_spreadsheet = fields.Boolean("Google Spreadsheet")
+ module_auth_oauth = fields.Boolean("Use external authentication providers (OAuth)")
+ module_auth_ldap = fields.Boolean("LDAP Authentication")
+ # TODO: remove in master
+ module_base_gengo = fields.Boolean("Translate Your Website with Gengo")
+ module_account_inter_company_rules = fields.Boolean("Manage Inter Company")
+ module_pad = fields.Boolean("Collaborative Pads")
+ module_voip = fields.Boolean("Asterisk (VoIP)")
+ module_web_unsplash = fields.Boolean("Unsplash Image Library")
+ module_partner_autocomplete = fields.Boolean("Partner Autocomplete")
+ module_base_geolocalize = fields.Boolean("GeoLocalize")
+ module_google_recaptcha = fields.Boolean("reCAPTCHA: Easy on Humans, Hard on Bots")
+ report_footer = fields.Text(related="company_id.report_footer", string='Custom Report Footer', help="Footer text displayed at the bottom of all reports.", readonly=False)
+ group_multi_currency = fields.Boolean(string='Multi-Currencies',
+ implied_group='base.group_multi_currency',
+ help="Allows to work in a multi currency environment")
+ paperformat_id = fields.Many2one(related="company_id.paperformat_id", string='Paper format', readonly=False)
+ external_report_layout_id = fields.Many2one(related="company_id.external_report_layout_id", readonly=False)
+ show_effect = fields.Boolean(string="Show Effect", config_parameter='base_setup.show_effect')
+ company_count = fields.Integer('Number of Companies', compute="_compute_company_count")
+ active_user_count = fields.Integer('Number of Active Users', compute="_compute_active_user_count")
+ language_count = fields.Integer('Number of Languages', compute="_compute_language_count")
+ company_name = fields.Char(related="company_id.display_name", string="Company Name")
+ company_informations = fields.Text(compute="_compute_company_informations")
+
+ def open_company(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'My Company',
+ 'view_mode': 'form',
+ 'res_model': 'res.company',
+ 'res_id': self.env.company.id,
+ 'target': 'current',
+ 'context': {
+ 'form_view_initial_mode': 'edit',
+ },
+ }
+
+ def open_default_user(self):
+ action = self.env["ir.actions.actions"]._for_xml_id("base.action_res_users")
+ if self.env.ref('base.default_user', raise_if_not_found=False):
+ action['res_id'] = self.env.ref('base.default_user').id
+ else:
+ raise UserError(_("Default User Template not found."))
+ action['views'] = [[self.env.ref('base.view_users_form').id, 'form']]
+ return action
+
+ @api.model
+ def _prepare_report_view_action(self, template):
+ template_id = self.env.ref(template)
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'ir.ui.view',
+ 'view_mode': 'form',
+ 'res_id': template_id.id,
+ }
+
+ def edit_external_header(self):
+ if not self.external_report_layout_id:
+ return False
+ return self._prepare_report_view_action(self.external_report_layout_id.key)
+
+ # NOTE: These fields depend on the context, if we want them to be computed
+ # we have to make them depend on a field. This is because we are on a TransientModel.
+ @api.depends('company_id')
+ def _compute_company_count(self):
+ company_count = self.env['res.company'].sudo().search_count([])
+ for record in self:
+ record.company_count = company_count
+
+ @api.depends('company_id')
+ def _compute_active_user_count(self):
+ active_user_count = self.env['res.users'].sudo().search_count([('share', '=', False)])
+ for record in self:
+ record.active_user_count = active_user_count
+
+ @api.depends('company_id')
+ def _compute_language_count(self):
+ language_count = len(self.env['res.lang'].get_installed())
+ for record in self:
+ record.language_count = language_count
+
+ @api.depends('company_id')
+ def _compute_company_informations(self):
+ informations = '%s\n' % self.company_id.street if self.company_id.street else ''
+ informations += '%s\n' % self.company_id.street2 if self.company_id.street2 else ''
+ informations += '%s' % self.company_id.zip if self.company_id.zip else ''
+ informations += '\n' if self.company_id.zip and not self.company_id.city else ''
+ informations += ' - ' if self.company_id.zip and self.company_id.city else ''
+ informations += '%s\n' % self.company_id.city if self.company_id.city else ''
+ informations += '%s\n' % self.company_id.state_id.display_name if self.company_id.state_id else ''
+ informations += '%s' % self.company_id.country_id.display_name if self.company_id.country_id else ''
+ informations += '\nVAT: %s' % self.company_id.vat if self.company_id.vat else ''
+
+ for record in self:
+ record.company_informations = informations
diff --git a/addons/base_setup/models/res_users.py b/addons/base_setup/models/res_users.py
new file mode 100644
index 00000000..112c55c1
--- /dev/null
+++ b/addons/base_setup/models/res_users.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, api
+
+
+class ResUsers(models.Model):
+ _inherit = 'res.users'
+
+ @api.model
+ def web_create_users(self, emails):
+
+ # Reactivate already existing users if needed
+ deactivated_users = self.with_context(active_test=False).search([('active', '=', False), '|', ('login', 'in', emails), ('email', 'in', emails)])
+ for user in deactivated_users:
+ user.active = True
+
+ new_emails = set(emails) - set(deactivated_users.mapped('email'))
+
+ # Process new email addresses : create new users
+ for email in new_emails:
+ default_values = {'login': email, 'name': email.split('@')[0], 'email': email, 'active': True}
+ user = self.with_context(signup_valid=True).create(default_values)
+
+ return True