diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..bfd7ac5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# Configuration for known file extensions +[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{json,yml,yaml,rst,md}] +indent_size = 2 + +# Do not configure editor for libs and autogenerated content +[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}] +charset = unset +end_of_line = unset +indent_size = unset +indent_style = unset +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..7c51a01 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,190 @@ +env: + browser: true, + node: true, + es2022: true + +# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 +parserOptions: + ecmaVersion: 2022 + +overrides: + - files: + - "**/*.js" + parserOptions: + sourceType: module + allowImportExportEverywhere: true + +# Globals available in Odoo that shouldn't produce errorings +globals: + _: readonly + $: readonly + fuzzy: readonly + jQuery: readonly + moment: readonly + odoo: readonly + openerp: readonly + owl: readonly + luxon: readonly + +# Styling is handled by Prettier, so we only need to enable AST rules; +# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890 +rules: + accessor-pairs: warn + array-callback-return: warn + callback-return: warn + capitalized-comments: + - warn + - always + - ignoreConsecutiveComments: true + ignoreInlineComments: true + complexity: + - warn + - 15 + constructor-super: warn + dot-notation: warn + eqeqeq: warn + global-require: warn + handle-callback-err: warn + id-blacklist: warn + id-match: warn + init-declarations: error + max-depth: warn + max-nested-callbacks: warn + max-statements-per-line: warn + no-alert: warn + no-array-constructor: warn + no-caller: warn + no-case-declarations: warn + no-class-assign: warn + no-cond-assign: error + no-const-assign: error + no-constant-condition: warn + no-control-regex: warn + no-debugger: error + no-delete-var: warn + no-div-regex: warn + no-dupe-args: error + no-dupe-class-members: error + no-dupe-keys: error + no-duplicate-case: error + no-duplicate-imports: error + no-else-return: warn + no-empty-character-class: warn + no-empty-function: error + no-empty-pattern: error + no-empty: warn + no-eq-null: error + no-eval: error + no-ex-assign: error + no-extend-native: warn + no-extra-bind: warn + no-extra-boolean-cast: warn + no-extra-label: warn + no-fallthrough: warn + no-func-assign: error + no-global-assign: error + no-implicit-coercion: + - warn + - allow: ["~"] + no-implicit-globals: warn + no-implied-eval: warn + no-inline-comments: warn + no-inner-declarations: warn + no-invalid-regexp: warn + no-irregular-whitespace: warn + no-iterator: warn + no-label-var: warn + no-labels: warn + no-lone-blocks: warn + no-lonely-if: error + no-mixed-requires: error + no-multi-str: warn + no-native-reassign: error + no-negated-condition: warn + no-negated-in-lhs: error + no-new-func: warn + no-new-object: warn + no-new-require: warn + no-new-symbol: warn + no-new-wrappers: warn + no-new: warn + no-obj-calls: warn + no-octal-escape: warn + no-octal: warn + no-param-reassign: warn + no-path-concat: warn + no-process-env: warn + no-process-exit: warn + no-proto: warn + no-prototype-builtins: warn + no-redeclare: warn + no-regex-spaces: warn + no-restricted-globals: warn + no-restricted-imports: warn + no-restricted-modules: warn + no-restricted-syntax: warn + no-return-assign: error + no-script-url: warn + no-self-assign: warn + no-self-compare: warn + no-sequences: warn + no-shadow-restricted-names: warn + no-shadow: warn + no-sparse-arrays: warn + no-sync: warn + no-this-before-super: warn + no-throw-literal: warn + no-undef-init: warn + no-undef: error + no-unmodified-loop-condition: warn + no-unneeded-ternary: error + no-unreachable: error + no-unsafe-finally: error + no-unused-expressions: error + no-unused-labels: error + no-unused-vars: error + no-use-before-define: error + no-useless-call: warn + no-useless-computed-key: warn + no-useless-concat: warn + no-useless-constructor: warn + no-useless-escape: warn + no-useless-rename: warn + no-void: warn + no-with: warn + operator-assignment: [error, always] + prefer-const: warn + radix: warn + require-yield: warn + sort-imports: warn + spaced-comment: [error, always] + strict: [error, function] + use-isnan: error + valid-jsdoc: + - warn + - prefer: + arg: param + argument: param + augments: extends + constructor: class + exception: throws + func: function + method: function + prop: property + return: returns + virtual: abstract + yield: yields + preferType: + array: Array + bool: Boolean + boolean: Boolean + number: Number + object: Object + str: String + string: String + requireParamDescription: false + requireReturn: false + requireReturnDescription: false + requireReturnType: false + valid-typeof: warn + yoda: warn diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..fa0eef4 --- /dev/null +++ b/.flake8 @@ -0,0 +1,4 @@ +[flake8] +max-line-length = 150 +per-file-ignores= + __init__.py:F401 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..489bdd0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,161 @@ +# ---> Python +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..b083fe2 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,130 @@ +exclude: | + (?x) + # NOT INSTALLABLE ADDONS + # END NOT INSTALLABLE ADDONS + # Files and folders generated by bots, to avoid loops + ^setup/|/static/description/index\.html$| + # We don't want to mess with tool-generated files + .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/| + # Maybe reactivate this when all README files include prettier ignore tags? + ^README\.md$| + # Library files can have extraneous formatting (even minimized) + /static/(src/)?lib/| + # Repos using Sphinx to generate docs don't need prettying + ^docs/_templates/.*\.html$| + # Don't bother non-technical authors with formatting issues in docs + readme/.*\.(rst|md)$| + # Ignore build and dist directories in addons + /build/|/dist/| + # Ignore test files in addons + /tests/samples/.*| + # You don't usually want a bot to modify your legal texts + (LICENSE.*|COPYING.*)| + # Игнорировать библиотеку comm_service + /static/(src/)?lib/| + /lib| + # Ignore devops + .gitlab-ci.yml +default_language_version: + python: python3 + node: "16.17.0" +repos: + - repo: local + hooks: + # These files are most likely copier diff rejection junks; if found, + # review them manually, fix the problem (if needed) and remove them + - id: forbidden-files + name: forbidden files + entry: found forbidden files; remove them + language: fail + files: "\\.rej$" + - id: en-po-files + name: en.po files cannot exist + entry: found a en.po file + language: fail + files: '[a-zA-Z0-9_]*/i18n/en\.po$' + - repo: https://github.com/sbidoul/whool + rev: v0.5 + hooks: + - id: whool-init + - repo: https://github.com/oca/maintainer-tools + rev: 9a170331575a265c092ee6b24b845ec508e8ef75 + hooks: + # update the NOT INSTALLABLE ADDONS section above + - id: oca-update-pre-commit-excluded-addons + - id: oca-fix-manifest-website + args: ["https://inf-centre.ru/"] + - id: oca-gen-addon-readme + args: + - --addons-dir=. + - --branch=17.0 + - --org-name=OCA + - --repo-name=queue + - --if-source-changed + - --keep-source-digest + - --convert-fragments-to-markdown + # - id: oca-gen-external-dependencies + - repo: https://github.com/OCA/odoo-pre-commit-hooks + rev: v0.0.25 + hooks: + - id: oca-checks-odoo-module + - id: oca-checks-po + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v2.7.1 + hooks: + - id: prettier + name: prettier (with plugin-xml) + additional_dependencies: + - "prettier@2.7.1" + - "@prettier/plugin-xml@2.2.0" + args: + - --plugin=@prettier/plugin-xml + files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$ + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v8.24.0 + hooks: + - id: eslint + verbose: true + args: + - --color + - --fix + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + # exclude autogenerated files + exclude: /README\.rst$|\.pot?$ + - id: end-of-file-fixer + # exclude autogenerated files + exclude: /README\.rst$|\.pot?$ + - id: debug-statements + - id: fix-encoding-pragma + args: ["--remove"] + - id: check-case-conflict + - id: check-docstring-first + # - id: check-executables-have-shebangs + - id: check-merge-conflict + # exclude files where underlines are not distinguishable from merge conflicts + exclude: /README\.rst$|^docs/.*\.rst$ + - id: check-symlinks + - id: check-xml + - id: mixed-line-ending + args: ["--fix=lf"] + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.1.3 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + - id: ruff-format + - repo: https://github.com/OCA/pylint-odoo + rev: v9.0.4 + hooks: + - id: pylint_odoo + name: pylint with optional checks + args: + - --rcfile=.pylintrc + - --exit-zero + verbose: true + - id: pylint_odoo + args: + - --rcfile=.pylintrc-mandatory diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000..7645dd5 --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,8 @@ +# Defaults for all prettier-supported languages. +# Prettier will complete this with settings from .editorconfig file. +bracketSpacing: false +printWidth: 150 +proseWrap: always +semi: true +trailingComma: "es5" +xmlWhitespaceSensitivity: "strict" diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..eb13462 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,123 @@ + + +[MASTER] +load-plugins=pylint_odoo +score=n + +[ODOOLINT] +readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" +manifest-required-authors=RuDoo +manifest-required-keys=license +manifest-deprecated-keys=active +license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 +valid-odoo-versions=17.0 + +[MESSAGES CONTROL] +disable=all + +# This .pylintrc contains optional AND mandatory checks and is meant to be +# loaded in an IDE to have it check everything, in the hope this will make +# optional checks more visible to contributors who otherwise never look at a +# green travis to see optional checks that failed. +# .pylintrc-mandatory containing only mandatory checks is used the pre-commit +# config as a blocking check. + +enable=anomalous-backslash-in-string, + api-one-deprecated, + api-one-multi-together, + assignment-from-none, + attribute-deprecated, + class-camelcase, + dangerous-default-value, + dangerous-view-replace-wo-priority, + development-status-allowed, + duplicate-id-csv, + duplicate-key, + duplicate-xml-fields, + duplicate-xml-record-id, + eval-referenced, + eval-used, + # incoherent-interpreter-exec-perm, + license-allowed, + manifest-author-string, + manifest-deprecated-key, + manifest-required-author, + manifest-required-key, + manifest-version-format, + method-compute, + method-inverse, + method-required-super, + method-search, + openerp-exception-warning, + pointless-statement, + pointless-string-statement, + print-used, + redundant-keyword-arg, + redundant-modulename-xml, + reimported, + relative-import, + return-in-init, + rst-syntax-error, + sql-injection, + too-few-format-args, + translation-field, + # translation-required, + unreachable, + use-vim-comment, + wrong-tabs-instead-of-spaces, + xml-syntax-error, + # attribute-string-redundant, + character-not-valid-in-resource-link, + consider-merging-classes-inherited, + context-overridden, + create-user-wo-reset-password, + dangerous-filter-wo-user, + dangerous-qweb-replace-wo-priority, + deprecated-data-xml-node, + deprecated-openerp-xml-node, + duplicate-po-message-definition, + except-pass, + file-not-used, + invalid-commit, + manifest-maintainers-list, + missing-newline-extrafiles, + # missing-readme, + missing-return, + odoo-addons-relative-import, + old-api7-method-defined, + po-msgstr-variables, + po-syntax-error, + renamed-field-parameter, + resource-not-exist, + str-format-used, + test-folder-imported, + translation-contains-variable, + translation-positional-used, + unnecessary-utf8-coding-comment, + website-manifest-key-not-valid-uri, + xml-attribute-translatable, + xml-deprecated-qweb-directive, + xml-deprecated-tree-attribute, + external-request-timeout, + # messages that do not cause the lint step to fail + consider-merging-classes-inherited, + create-user-wo-reset-password, + dangerous-filter-wo-user, + deprecated-module, + file-not-used, + invalid-commit, + missing-manifest-dependency, + missing-newline-extrafiles, + # missing-readme, + no-utf8-coding-comment, + odoo-addons-relative-import, + old-api7-method-defined, + redefined-builtin, + too-complex, + unnecessary-utf8-coding-comment + + +[REPORTS] +msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg} +output-format=colorized +reports=no diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory new file mode 100644 index 0000000..adbd909 --- /dev/null +++ b/.pylintrc-mandatory @@ -0,0 +1,98 @@ + +[MASTER] +load-plugins=pylint_odoo +score=n + +[ODOOLINT] +readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" +manifest-required-authors=RuDoo +manifest-required-keys=license +manifest-deprecated-keys=active +license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 +valid-odoo-versions=17.0 + +[MESSAGES CONTROL] +disable=all + +enable=anomalous-backslash-in-string, + api-one-deprecated, + api-one-multi-together, + assignment-from-none, + attribute-deprecated, + class-camelcase, + dangerous-default-value, + dangerous-view-replace-wo-priority, + development-status-allowed, + duplicate-id-csv, + duplicate-key, + duplicate-xml-fields, + duplicate-xml-record-id, + eval-referenced, + eval-used, + /* incoherent-interpreter-exec-perm, */ + license-allowed, + manifest-author-string, + manifest-deprecated-key, + manifest-required-author, + manifest-required-key, + manifest-version-format, + method-compute, + method-inverse, + method-required-super, + method-search, + openerp-exception-warning, + pointless-statement, + pointless-string-statement, + print-used, + redundant-keyword-arg, + redundant-modulename-xml, + reimported, + relative-import, + return-in-init, + rst-syntax-error, + sql-injection, + too-few-format-args, + translation-field, + # translation-required, + unreachable, + use-vim-comment, + wrong-tabs-instead-of-spaces, + xml-syntax-error, + /* attribute-string-redundant, */ + character-not-valid-in-resource-link, + consider-merging-classes-inherited, + context-overridden, + create-user-wo-reset-password, + dangerous-filter-wo-user, + dangerous-qweb-replace-wo-priority, + deprecated-data-xml-node, + deprecated-openerp-xml-node, + duplicate-po-message-definition, + except-pass, + file-not-used, + invalid-commit, + manifest-maintainers-list, + missing-newline-extrafiles, + # missing-readme, + missing-return, + odoo-addons-relative-import, + old-api7-method-defined, + po-msgstr-variables, + po-syntax-error, + renamed-field-parameter, + resource-not-exist, + str-format-used, + test-folder-imported, + translation-contains-variable, + translation-positional-used, + unnecessary-utf8-coding-comment, + website-manifest-key-not-valid-uri, + xml-attribute-translatable, + xml-deprecated-qweb-directive, + xml-deprecated-tree-attribute, + external-request-timeout + +[REPORTS] +msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg} +output-format=colorized +reports=no diff --git a/.ruff.toml b/.ruff.toml new file mode 100644 index 0000000..634db8e --- /dev/null +++ b/.ruff.toml @@ -0,0 +1,29 @@ + +target-version = "py310" +fix = true + +[lint] +extend-select = [ + "B", + "C90", + "I", # isort + "UP", # pyupgrade +] +exclude = ["setup/*"] + +[format] +exclude = ["setup/*"] + +[per-file-ignores] +"__init__.py" = ["F401", "I001"] # ignore unused and unsorted imports in __init__.py +"__manifest__.py" = ["B018"] # useless expression + +[isort] +section-order = ["future", "standard-library", "third-party", "odoo", "odoo-addons", "first-party", "local-folder"] + +[isort.sections] +"odoo" = ["odoo"] +"odoo-addons" = ["odoo.addons"] + +[mccabe] +max-complexity = 16 diff --git a/l10n_ru_base/README.md b/l10n_ru_base/README.md index d8b931c..6ad4ea2 100644 --- a/l10n_ru_base/README.md +++ b/l10n_ru_base/README.md @@ -1,16 +1,24 @@ # Российская локализация - Базовый -name: l10n_ru_base + +**Наименование модуля:** `l10n_ru_base` ## Описание -Российская локализация: основные отчеты и печатные формы. Это базовый модуль для работы с модулями локализации. -###Для включения модулей: -1. Меню Настройки - в боковом меню "Российская локализация"; -2. Выбирается нужный блок для подключения дополнительных возможностей по локализации. +Российская локализация: основные отчеты и печатные формы. -###Перечень модулей локализации: -1. Российская локализация - Акт сверки (l10n_ru_act_rev) -2. Российская локализация - Доверенность (l10n_ru_attorney) -3. Российская локализация - Договоры (l10n_ru_contract) -4. Российская локализация - Документы (l10n_ru_doc) -5. Российская локализация - УПД в xml-формате (l10n_ru_upd_xml) +Это базовый модуль, который позволяет включать/выключать модули поставки "Российская локализация". + +## Как включить модули локализации? + +1. Перейдите в меню **Настройки**. +2. В боковом меню выберите **Основные настройки**. +3. Найдите блок "Настройте модули Российской локализации". +4. Включите необходимые модули. + +## Доступные модули локализации + +- **Акт сверки** (`l10n_ru_act_rev`) – создание актов сверки. +- **Доверенность** (`l10n_ru_attorney`) – оформление доверенностей. +- **Договоры** (`l10n_ru_contract`) – управление договорами. +- **Документы** (`l10n_ru_doc`) – формирование документов. +- **УПД в XML-формате** (`l10n_ru_upd_xml`) – экспорт УПД в формате XML. diff --git a/l10n_ru_base/__init__.py b/l10n_ru_base/__init__.py index 899bcc9..0650744 100644 --- a/l10n_ru_base/__init__.py +++ b/l10n_ru_base/__init__.py @@ -1,2 +1 @@ from . import models - diff --git a/l10n_ru_base/__manifest__.py b/l10n_ru_base/__manifest__.py index 45f2703..3ce1f7d 100644 --- a/l10n_ru_base/__manifest__.py +++ b/l10n_ru_base/__manifest__.py @@ -1,28 +1,29 @@ -# -*- coding: utf-8 -*- +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + { - 'name': "Российская локализация - Базовый>", - 'summary': """ - Российская локализация: основные отчеты и печатные формы. + "name": "Российская локализация - Базовый", + "author": "MK.Lab,RuDoo", + "website": "https://inf-centre.ru/", + "icon": "/account/static/description/l10n.png", + "countries": ["ru"], + "version": "17.0.2.0.0", + "description": """ +Российская локализация +======================== +Российская локализация предоставляет основные отчеты и печатные формы. + +Данный модуль позволяет включать/выключать модули поставки "Российская локализация". + +Для активации модулей: + - Перейдите в меню 'Настройки'. + - В боковом меню выберите 'Основные настройки'. + - Найдите блок "Настройте модули Российской локализации". + - Включите необходимые модули. """, - - 'description': """ - Российская локализация: основные отчеты и печатные формы. - - Для включения модулей: - 1. Меню Настройки - в боковом меню "Российская локализация" - 2. Выбирается нужный блок. - """, - - 'author': "MK.Lab", - 'website': "https://www.inf-centre.ru/", - - 'version': '17.0.1.0.0', - 'license': 'LGPL-3', - 'category': 'Uncategorized', - - 'depends': [], - - 'data': [ - 'views/res_config_settings_views.xml', + "category": "Accounting/Localizations", + "depends": ["base_setup"], + "data": [ + "views/res_config_settings_views.xml", ], + "license": "LGPL-3", } 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..a0b64ae 100644 --- a/l10n_ru_base/models/res_config_settings.py +++ b/l10n_ru_base/models/res_config_settings.py @@ -1,41 +1,53 @@ -# -*- 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) diff --git a/l10n_ru_base/static/description/icon.png b/l10n_ru_base/static/description/icon.png deleted file mode 100644 index 5ea24f8..0000000 Binary files a/l10n_ru_base/static/description/icon.png and /dev/null differ diff --git a/l10n_ru_base/views/res_config_settings_views.xml b/l10n_ru_base/views/res_config_settings_views.xml index c60513a..b99d59f 100644 --- a/l10n_ru_base/views/res_config_settings_views.xml +++ b/l10n_ru_base/views/res_config_settings_views.xml @@ -1,42 +1,30 @@ - + - - res.config.settings.view.form.inherit.russian.localization + res.config.settings.view.form res.config.settings - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + -