From f3782cfa2b2f1894e6827c92772b15575a295cda Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 1 Dec 2020 23:38:42 +0100 Subject: [PATCH] [MIG] base_usability to v14 --- base_usability/__manifest__.py | 17 ++-- ...ase-multi-company-partners-not-shared.diff | 14 ++-- base_usability/models/__init__.py | 11 +-- .../models/{mail.py => ir_mail_server.py} | 7 +- base_usability/models/misc.py | 19 ----- .../models/{company.py => res_company.py} | 7 +- .../models/{partner.py => res_partner.py} | 77 +++++++++---------- base_usability/models/res_partner_bank.py | 14 ++++ base_usability/models/res_partner_category.py | 11 +++ base_usability/models/res_users.py | 27 +++++++ base_usability/models/users.py | 40 ---------- base_usability/security/group.xml | 3 +- .../views/{module_view.xml => ir_module.xml} | 15 +--- .../views/{base_view.xml => ir_sequence.xml} | 10 --- .../{country_view.xml => res_country.xml} | 17 ++-- .../{partner_view.xml => res_partner.xml} | 13 +--- ...ner_bank_view.xml => res_partner_bank.xml} | 13 ++-- base_usability/views/users_view.xml | 21 ----- 18 files changed, 135 insertions(+), 201 deletions(-) rename base_usability/models/{mail.py => ir_mail_server.py} (87%) delete mode 100644 base_usability/models/misc.py rename base_usability/models/{company.py => res_company.py} (94%) rename base_usability/models/{partner.py => res_partner.py} (68%) create mode 100644 base_usability/models/res_partner_bank.py create mode 100644 base_usability/models/res_partner_category.py create mode 100644 base_usability/models/res_users.py delete mode 100644 base_usability/models/users.py rename base_usability/views/{module_view.xml => ir_module.xml} (53%) rename base_usability/views/{base_view.xml => ir_sequence.xml} (54%) rename base_usability/views/{country_view.xml => res_country.xml} (74%) rename base_usability/views/{partner_view.xml => res_partner.xml} (81%) rename base_usability/views/{partner_bank_view.xml => res_partner_bank.xml} (64%) delete mode 100644 base_usability/views/users_view.xml diff --git a/base_usability/__manifest__.py b/base_usability/__manifest__.py index 0fcad77..665f713 100644 --- a/base_usability/__manifest__.py +++ b/base_usability/__manifest__.py @@ -1,10 +1,10 @@ -# © 2014-2016 Akretion (http://www.akretion.com) +# Copyright 2014-2020 Akretion France (http://www.akretion.com) # @author Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Base Usability', - 'version': '12.0.0.1.0', + 'version': '14.0.1.0.0', 'category': 'Partner', 'license': 'AGPL-3', 'summary': 'Better usability in base module', @@ -13,12 +13,11 @@ 'depends': ['base'], 'data': [ 'security/group.xml', - 'views/partner_view.xml', - 'views/partner_bank_view.xml', - 'views/users_view.xml', - 'views/country_view.xml', - 'views/module_view.xml', - 'views/base_view.xml', + 'views/res_partner.xml', + 'views/res_partner_bank.xml', + 'views/res_country.xml', + 'views/ir_module.xml', + 'views/ir_sequence.xml', ], - 'installable': False, + 'installable': True, } diff --git a/base_usability/fix-odoo-base-multi-company-partners-not-shared.diff b/base_usability/fix-odoo-base-multi-company-partners-not-shared.diff index f19a3f8..2d94e26 100644 --- a/base_usability/fix-odoo-base-multi-company-partners-not-shared.diff +++ b/base_usability/fix-odoo-base-multi-company-partners-not-shared.diff @@ -1,19 +1,19 @@ diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py -index 083607f9..99ae8857 100644 +index a3baf47c615..e546d450107 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py -@@ -426,7 +426,13 @@ class Users(models.Model): +@@ -544,7 +544,13 @@ class Users(models.Model): for user in users: - user.partner_id.active = user.active + # if partner is global we keep it that way if user.partner_id.company_id: -- user.partner_id.write({'company_id': user.company_id.id}) +- user.partner_id.company_id = user.company_id + # AKRETION HACK: if you have a multi-company setup where + # partners are NOT shared between companies, having + # company_id=False on partners related to users + # avoids a lot of trouble (you should also disable 'read' + # on the ir.rule 'user rule' (XMLID base.res_users_rule) -+ # user.partner_id.write({'company_id': user.company_id.id}) ++ # user.partner_id.company_id = user.company_id + user.partner_id.write({'company_id': False}) + user.partner_id.active = user.active return users - - @api.multi + diff --git a/base_usability/models/__init__.py b/base_usability/models/__init__.py index 9dca015..19eca50 100644 --- a/base_usability/models/__init__.py +++ b/base_usability/models/__init__.py @@ -1,6 +1,7 @@ -from . import users -from . import partner -from . import company -from . import mail -from . import misc +from . import res_users +from . import res_partner +from . import res_partner_bank +from . import res_partner_category +from . import res_company +from . import ir_mail_server from . import ir_model diff --git a/base_usability/models/mail.py b/base_usability/models/ir_mail_server.py similarity index 87% rename from base_usability/models/mail.py rename to base_usability/models/ir_mail_server.py index 35c7093..a6cba6d 100644 --- a/base_usability/models/mail.py +++ b/base_usability/models/ir_mail_server.py @@ -1,7 +1,8 @@ -# © 2015-2016 Akretion (Alexis de Lattre ) +# Copyright 2015-2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, api +from odoo import api, models from odoo.addons.base.models.ir_mail_server import extract_rfc2822_addresses import logging @@ -27,7 +28,7 @@ class IrMailServer(models.Model): "with subject '%s'", smtp_from, message.get('To'), message.get('Cc'), message.get('Bcc'), message.get('Subject')) - return super(IrMailServer, self).send_email( + return super().send_email( message, mail_server_id=mail_server_id, smtp_server=smtp_server, smtp_port=smtp_port, smtp_user=smtp_user, smtp_password=smtp_password, diff --git a/base_usability/models/misc.py b/base_usability/models/misc.py deleted file mode 100644 index 894daee..0000000 --- a/base_usability/models/misc.py +++ /dev/null @@ -1,19 +0,0 @@ -# © 2015-2016 Akretion (Alexis de Lattre ) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import models, fields, api -from odoo.tools import misc -from odoo.tools import float_compare - - -class BaseLanguageExport(models.TransientModel): - _inherit = 'base.language.export' - - # Default format for language files = format used by OpenERP modules - format = fields.Selection(default='po') - - -class BaseLanguageInstall(models.TransientModel): - _inherit = 'base.language.install' - - overwrite = fields.Boolean(default=True) diff --git a/base_usability/models/company.py b/base_usability/models/res_company.py similarity index 94% rename from base_usability/models/company.py rename to base_usability/models/res_company.py index 650520d..b4fd708 100644 --- a/base_usability/models/company.py +++ b/base_usability/models/res_company.py @@ -1,7 +1,8 @@ -# © 2015-2016 Akretion (Alexis de Lattre ) +# Copyright 2015-2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, api, _ +from odoo import api, models, _ class ResCompany(models.Model): @@ -31,7 +32,6 @@ class ResCompany(models.Model): line = separator.join(content) return line - @api.multi def _prepare_header_options(self): self.ensure_one() options = { @@ -61,7 +61,6 @@ class ResCompany(models.Model): return self.name # for reports - @api.multi def _display_report_header( self, line_details=[['phone', 'website'], ['vat']], icon=True, line_separator=' - '): diff --git a/base_usability/models/partner.py b/base_usability/models/res_partner.py similarity index 68% rename from base_usability/models/partner.py rename to base_usability/models/res_partner.py index b4349bb..f2b5c52 100644 --- a/base_usability/models/partner.py +++ b/base_usability/models/res_partner.py @@ -1,4 +1,5 @@ -# © 2015-2016 Akretion (Alexis de Lattre ) +# Copyright 2015-2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import models, fields, api, _ @@ -10,30 +11,27 @@ class ResPartner(models.Model): # track_visibility is handled in the 'mail' module, and base_usability # doesn't depend on 'mail', but that doesn't hurt, it will just be # ignored if mail is not installed - name = fields.Char(track_visibility='onchange') - parent_id = fields.Many2one(track_visibility='onchange') - ref = fields.Char(track_visibility='onchange', copy=False) - lang = fields.Selection(track_visibility='onchange') - user_id = fields.Many2one(track_visibility='onchange') - vat = fields.Char(track_visibility='onchange') - customer = fields.Boolean(track_visibility='onchange') - supplier = fields.Boolean(track_visibility='onchange') - type = fields.Selection(track_visibility='onchange') - street = fields.Char(track_visibility='onchange') - street2 = fields.Char(track_visibility='onchange') - zip = fields.Char(track_visibility='onchange') - city = fields.Char(track_visibility='onchange') - state_id = fields.Many2one(track_visibility='onchange') - country_id = fields.Many2one(track_visibility='onchange') - email = fields.Char(track_visibility='onchange') - is_company = fields.Boolean(track_visibility='onchange') - active = fields.Boolean(track_visibility='onchange') - company_id = fields.Many2one(track_visibility='onchange') +# TODO move to mail module +# name = fields.Char(tracking=True) +# parent_id = fields.Many2one(tracking=True) +# ref = fields.Char(tracking=True) +# lang = fields.Selection(tracking=True) +# user_id = fields.Many2one(tracking=True) +# vat = fields.Char(tracking=True) +# street = fields.Char(tracking=True) +# street2 = fields.Char(tracking=True) +# zip = fields.Char(tracking=True) +# city = fields.Char(tracking=True) +# state_id = fields.Many2one(tracking=True) +# country_id = fields.Many2one(tracking=True) +# is_company = fields.Boolean(tracking=True) +# active = fields.Boolean(tracking=True) +# company_id = fields.Many2one(tracking=True) + ref = fields.Char(copy=False) # For reports name_title = fields.Char( compute='_compute_name_title', string='Name with Title') - @api.multi @api.depends('name', 'title') def _compute_name_title(self): for partner in self: @@ -49,17 +47,14 @@ class ResPartner(models.Model): name_title = ' '.join([title, name_title]) partner.name_title = name_title - @api.multi def _display_address(self, without_company=False): '''Remove empty lines''' - res = super(ResPartner, self)._display_address( - without_company=without_company) + res = super()._display_address(without_company=without_company) while "\n\n" in res: res = res.replace('\n\n', '\n') return res # for reports - @api.multi def _display_full_address( self, details=[ 'company', 'name', 'address', 'phone', @@ -72,10 +67,16 @@ class ResPartner(models.Model): if self.is_company: company = self.name name = False + name_no_title = False + title = False + title_short = False else: - name = self.name_title company = self.parent_id and self.parent_id.is_company and\ self.parent_id.name or False + name = self.name_title + name_no_title = self.name + title = self.title.name + title_short = self.title.shortcut options = { 'name': { 'value': name, @@ -83,6 +84,15 @@ class ResPartner(models.Model): 'company': { 'value': company, }, + 'title': { + 'value': title, + }, + 'title_short': { + 'value': title_short, + }, + 'name_no_title': { + 'value': name_no_title, + }, 'phone': { 'value': self.phone, # http://www.fileformat.info/info/unicode/char/1f4de/index.htm @@ -122,18 +132,3 @@ class ResPartner(models.Model): res.append('%s' % entry['value']) res = '\n'.join(res) return res - - -class ResPartnerCategory(models.Model): - _inherit = 'res.partner.category' - - name = fields.Char(translate=False) - - -class ResPartnerBank(models.Model): - _inherit = 'res.partner.bank' - - # In the 'base' module, they didn't put any string, so the bank name is - # displayed as 'Name', which the string of the related field it - # points to - bank_name = fields.Char(string='Bank Name') diff --git a/base_usability/models/res_partner_bank.py b/base_usability/models/res_partner_bank.py new file mode 100644 index 0000000..c668585 --- /dev/null +++ b/base_usability/models/res_partner_bank.py @@ -0,0 +1,14 @@ +# Copyright 2015-2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResPartnerBank(models.Model): + _inherit = 'res.partner.bank' + + # In the 'base' module, they didn't put any string, so the bank name is + # displayed as 'Name', which the string of the related field it + # points to + bank_name = fields.Char(string='Bank Name') diff --git a/base_usability/models/res_partner_category.py b/base_usability/models/res_partner_category.py new file mode 100644 index 0000000..b6fcf4c --- /dev/null +++ b/base_usability/models/res_partner_category.py @@ -0,0 +1,11 @@ +# Copyright 2015-2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResPartnerCategory(models.Model): + _inherit = 'res.partner.category' + + name = fields.Char(translate=False) diff --git a/base_usability/models/res_users.py b/base_usability/models/res_users.py new file mode 100644 index 0000000..644d7b8 --- /dev/null +++ b/base_usability/models/res_users.py @@ -0,0 +1,27 @@ +# Copyright 2018-2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models, SUPERUSER_ID +import logging +logger = logging.getLogger(__name__) + + +class ResUsers(models.Model): + _inherit = 'res.users' + + @api.model + def _script_partners_linked_to_users_no_company(self): + if self.env.user.id != SUPERUSER_ID: + self = self.sudo() + logger.info( + 'START to set company_id=False on partners related to users') + users = self.with_context(active_test=False).search([]) + for user in users: + if user.partner_id.company_id: + user.partner_id.write({'company_id': False}) + logger.info( + 'Wrote company_id=False on user %s ID %d', + user.login, user.id) + logger.info( + 'END setting company_id=False on partners related to users') diff --git a/base_usability/models/users.py b/base_usability/models/users.py deleted file mode 100644 index ffebe32..0000000 --- a/base_usability/models/users.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2018 Akretion (Alexis de Lattre ) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import models, api, SUPERUSER_ID, _ -from odoo.exceptions import UserError -import logging -logger = logging.getLogger(__name__) - - -class ResUsers(models.Model): - _inherit = 'res.users' - - @api.model - def default_get(self, fields_list): - res = super(ResUsers, self).default_get(fields_list) - # For a new partner auto-created when you create a new user, we prefer - # customer=False and supplier=True by default - res.update({ - 'customer': False, - 'supplier': True, - }) - return res - - @api.model - def _script_partners_linked_to_users_no_company(self): - if self.env.user.id != SUPERUSER_ID: - raise UserError(_('You must run this script as admin user')) - logger.info( - 'START to set company_id=False on partners related to users') - users = self.search( - ['|', ('active', '=', True), ('active', '=', False)]) - for user in users: - if user.partner_id.company_id: - user.partner_id.company_id = False - logger.info( - 'Wrote company_id=False on user %s ID %d', - user.login, user.id) - logger.info( - 'END setting company_id=False on partners related to users') - return True diff --git a/base_usability/security/group.xml b/base_usability/security/group.xml index bb84ffa..6d41c6b 100644 --- a/base_usability/security/group.xml +++ b/base_usability/security/group.xml @@ -1,6 +1,7 @@ diff --git a/base_usability/views/module_view.xml b/base_usability/views/ir_module.xml similarity index 53% rename from base_usability/views/module_view.xml rename to base_usability/views/ir_module.xml index e1b5cf7..869fca2 100644 --- a/base_usability/views/module_view.xml +++ b/base_usability/views/ir_module.xml @@ -1,22 +1,12 @@ - - Better display of module technical name - ir.module.module - - - -
-
-
-
ir.module.module @@ -25,9 +15,6 @@ - - - diff --git a/base_usability/views/base_view.xml b/base_usability/views/ir_sequence.xml similarity index 54% rename from base_usability/views/base_view.xml rename to base_usability/views/ir_sequence.xml index b2bd49f..c880b9c 100644 --- a/base_usability/views/base_view.xml +++ b/base_usability/views/ir_sequence.xml @@ -2,16 +2,6 @@ - - ir.cron - - - - - - - - ir.sequence diff --git a/base_usability/views/country_view.xml b/base_usability/views/res_country.xml similarity index 74% rename from base_usability/views/country_view.xml rename to base_usability/views/res_country.xml index 9a5e486..1b1ae64 100644 --- a/base_usability/views/country_view.xml +++ b/base_usability/views/res_country.xml @@ -1,24 +1,23 @@ - + base_usability.res.country.state.search res.country.state + - - + + ['|', ('name', 'ilike', self), ('code', '=', self)] + + - - - - - + diff --git a/base_usability/views/partner_view.xml b/base_usability/views/res_partner.xml similarity index 81% rename from base_usability/views/partner_view.xml rename to base_usability/views/res_partner.xml index 1f80b0b..a2bd52a 100644 --- a/base_usability/views/partner_view.xml +++ b/base_usability/views/res_partner.xml @@ -12,9 +12,6 @@ res.partner - - email - @@ -38,11 +35,8 @@ res.partner - - 0 - - - + + @@ -57,9 +51,6 @@ ['|','|',('display_name','ilike',self),('ref','=ilike',self + '%'),('email','ilike',self)] - - - diff --git a/base_usability/views/partner_bank_view.xml b/base_usability/views/res_partner_bank.xml similarity index 64% rename from base_usability/views/partner_bank_view.xml rename to base_usability/views/res_partner_bank.xml index 93e7366..fcbd9b2 100644 --- a/base_usability/views/partner_bank_view.xml +++ b/base_usability/views/res_partner_bank.xml @@ -1,22 +1,21 @@ - - base_usability.res.partner.bank.tree res.partner.bank - - 0 - handle + + 1 + + + - diff --git a/base_usability/views/users_view.xml b/base_usability/views/users_view.xml deleted file mode 100644 index e692049..0000000 --- a/base_usability/views/users_view.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - base_usability.res.users.tree - res.users - - - - - - - - -