From ade3cfe5a94398e5bee4796a521cc048d7e626fb Mon Sep 17 00:00:00 2001 From: Iskander Date: Tue, 25 Mar 2025 21:37:20 +0600 Subject: [PATCH] =?UTF-8?q?[REF]=20l10n=5Fru=5Fbase:=20=D0=BE=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D1=83=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB?= =?UTF-8?q?=D1=8F,=20=D0=BA=D0=BE=D0=B4=20=D1=81=D1=82=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- l10n_ru_base/models/__init__.py | 3 - l10n_ru_base/models/res_config_settings.py | 75 +++++++++++++--------- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/l10n_ru_base/models/__init__.py b/l10n_ru_base/models/__init__.py index 4a30401..0deb68c 100644 --- a/l10n_ru_base/models/__init__.py +++ b/l10n_ru_base/models/__init__.py @@ -1,4 +1 @@ from . import res_config_settings - - - diff --git a/l10n_ru_base/models/res_config_settings.py b/l10n_ru_base/models/res_config_settings.py index 60e3061..382f3c0 100644 --- a/l10n_ru_base/models/res_config_settings.py +++ b/l10n_ru_base/models/res_config_settings.py @@ -1,41 +1,54 @@ # -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). -from odoo import _, api, fields, models +from odoo import fields, models, modules from odoo.exceptions import UserError -_FIELDS_MODUL = [ - 'module_l10n_ru_act_rev', - 'module_l10n_ru_contract', - 'module_l10n_ru_upd_xml', - 'module_l10n_ru_doc', - 'module_l10n_ru_attorney' +MODULE_FIELDS = [ + "module_l10n_ru_act_rev", + "module_l10n_ru_contract", + "module_l10n_ru_upd_xml", + "module_l10n_ru_doc", + "module_l10n_ru_attorney", ] + class ResConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' + _inherit = "res.config.settings" - module_l10n_ru_act_rev = fields.Boolean(_("Act revise")) - module_l10n_ru_contract = fields.Boolean(_("Contract")) - module_l10n_ru_upd_xml = fields.Boolean(_("Report_xml")) - module_l10n_ru_doc = fields.Boolean(_("Print forms")) - module_l10n_ru_attorney = fields.Boolean(_("Consent")) + module_l10n_ru_act_rev = fields.Boolean( + string="Акты сверки", help="Создание актов сверки" + ) + module_l10n_ru_contract = fields.Boolean( + string="Договоры", help="Управление договорами" + ) + module_l10n_ru_upd_xml = fields.Boolean( + string="Экспорт УПД", help="Экспорт УПД в формате XML" + ) + module_l10n_ru_doc = fields.Boolean( + string="Печатные формы", help="Формирование документов" + ) + module_l10n_ru_attorney = fields.Boolean( + string="Доверенности", help="Оформление доверенностей" + ) - @api.model def write(self, values): - company = self.env.company - if company.country_id.code != 'RU': - raise UserError("Признак Российской компании не обнаружен!") - if _FIELDS_MODUL: - missing_modules = set() - for field in _FIELDS_MODUL: - if self.mapped(field)[0]: - module_name = field[7:] - module_installed = self.env['ir.module.module'].search([('name', '=', module_name)], limit=1) - if not module_installed: - missing_modules.add(module_name) - if missing_modules: - message = "Обратитесь в тех.поддержку для получения лицензии для следующих модулей:\n" + \ - "\n".join(missing_modules) - raise UserError(message) - return super(ResConfigSettings, self).write(values) + if self.env.company.country_id.code != "RU": + raise UserError("Признак Российской компании не обнаружен.") + + # Проверяем наличие модуля в addons path, + # чтобы избежать ситуации, когда модуль присутствует в базе, но фактически удалён + missing_modules = { + field[7:] + for field in MODULE_FIELDS + if self.mapped(field)[0] and not modules.get_module_path(field[7:]) + } + + if missing_modules: + raise UserError( + "Обратитесь в тех.поддержку для получения лицензии для следующих модулей:\n{}".format( + "\n".join(missing_modules) + ) + ) + + return super().write(values)