diff --git a/.copier-answers.yml b/.copier-answers.yml index ebf0e21a99f..5eb0ee1873d 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,16 +1,29 @@ # Do NOT update manually; changes here will be overwritten by Copier -_commit: v1.3.6 +_commit: v1.29 _src_path: gh:oca/oca-addons-repo-template -ci: Travis -dependency_installation_mode: PIP +ci: GitHub +convert_readme_fragments_to_markdown: false +enable_checklog_odoo: false generate_requirements_txt: true +github_check_license: true +github_ci_extra_env: {} +github_enable_codecov: true +github_enable_makepot: true +github_enable_stale_action: true +github_enforce_dev_status_compatibility: true include_wkhtmltopdf: false +odoo_test_flavor: Both odoo_version: 14.0 -rebel_module_groups: [] +org_name: Odoo Community Association (OCA) +org_slug: OCA +rebel_module_groups: +- web_widget_model_viewer repo_description: "This project aims to deal with modules related to the webclient\ - \ of Odoo. You'll find modules that:\n\n - Add facilities to the UI\n - Add widgets\n\ - \ - Ease the import/export features\n - Generally add clientside functionality" + \ of Odoo. You'll find modules that:\n\n - Add facilities to the UI\n - Add widgets\n\ + \ - Ease the import/export features\n - Generally add clientside functionality" repo_name: Web addons for Odoo repo_slug: web -travis_apt_packages: [] -travis_apt_sources: [] +repo_website: https://github.com/OCA/web +use_pyproject_toml: false +use_ruff: false + diff --git a/.eslintrc.yml b/.eslintrc.yml index d4cc423ccda..fed88d70d23 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -4,7 +4,7 @@ env: # See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 parserOptions: - ecmaVersion: 2017 + ecmaVersion: 2019 overrides: - files: @@ -22,6 +22,7 @@ globals: 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 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 80ab1a21178..10b8acad596 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -2,19 +2,45 @@ name: pre-commit on: pull_request: + branches: + - "14.0*" push: + branches: + - "14.0" + - "14.0-ocabot-*" jobs: pre-commit: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: - # The pylint-odoo version we use here does not support python 3.10 - # https://github.com/OCA/oca-addons-repo-template/issues/80 - # We also need to pin to an older version of python for older odoo versions - # where we are not using black > 21. Older black versions won't work with - # Python 3.9.8+, and we can't bump black without reformatting. - python-version: "3.9.7" - - uses: pre-commit/action@v2.0.0 + python-version: "3.11" + - name: Get python version + run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + path: ~/.cache/pre-commit + key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }} + - name: Install pre-commit + run: pip install pre-commit + - name: Run pre-commit + run: pre-commit run --all-files --show-diff-on-failure --color=always + env: + # Consider valid a PR that changes README fragments but doesn't + # change the README.rst file itself. It's not really a problem + # because the bot will update it anyway after merge. This way, we + # lower the barrier for functional contributors that want to fix the + # readme fragments, while still letting developers get README + # auto-generated (which also helps functionals when using runboat). + # DOCS https://pre-commit.com/#temporarily-disabling-hooks + SKIP: oca-gen-addon-readme + - name: Check that all files generated by pre-commit are in git + run: | + newfiles="$(git ls-files --others --exclude-from=.gitignore)" + if [ "$newfiles" != "" ] ; then + echo "Please check-in the following files:" + echo "$newfiles" + exit 1 + fi diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 1693a1253bd..fa17fcd4e85 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Stale PRs and issues policy - uses: actions/stale@v4 + uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} # General settings. @@ -48,7 +48,7 @@ jobs: # * Issues that are pending more information # * Except Issues marked as "no stale" - name: Needs more information stale issues policy - uses: actions/stale@v4 + uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} ascending: true diff --git a/.github/workflows/stale.yml.rej b/.github/workflows/stale.yml.rej deleted file mode 100644 index f41569091f8..00000000000 --- a/.github/workflows/stale.yml.rej +++ /dev/null @@ -1,9 +0,0 @@ -diff a/.github/workflows/stale.yml b/.github/workflows/stale.yml (rejected hunks) -@@ -15,2 +15,3 @@ jobs: - # General settings. -+ ascending: true - remove-stale-when-updated: true -@@ -52,2 +53,3 @@ jobs: - repo-token: ${{ secrets.GITHUB_TOKEN }} -+ ascending: true - only-labels: "needs more information" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000000..92e9e2e905a --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,83 @@ +name: tests + +on: + pull_request: + branches: + - "14.0*" + push: + branches: + - "14.0" + - "14.0-ocabot-*" + +jobs: + unreleased-deps: + runs-on: ubuntu-latest + name: Detect unreleased dependencies + steps: + - uses: actions/checkout@v4 + - run: | + for reqfile in requirements.txt test-requirements.txt ; do + if [ -f ${reqfile} ] ; then + result=0 + # reject non-comment lines that contain a / (i.e. URLs, relative paths) + grep "^[^#].*/" ${reqfile} || result=$? + if [ $result -eq 0 ] ; then + echo "Unreleased dependencies found in ${reqfile}." + exit 1 + fi + fi + done + test: + runs-on: ubuntu-22.04 + container: ${{ matrix.container }} + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - container: ghcr.io/oca/oca-ci/py3.6-odoo14.0:latest + include: "web_widget_model_viewer" + name: test with Odoo + - container: ghcr.io/oca/oca-ci/py3.6-ocb14.0:latest + include: "web_widget_model_viewer" + name: test with OCB + makepot: "true" + - container: ghcr.io/oca/oca-ci/py3.6-odoo14.0:latest + exclude: "web_widget_model_viewer" + name: test with Odoo + - container: ghcr.io/oca/oca-ci/py3.6-ocb14.0:latest + exclude: "web_widget_model_viewer" + name: test with OCB + makepot: "true" + services: + postgres: + image: postgres:9.6 + env: + POSTGRES_USER: odoo + POSTGRES_PASSWORD: odoo + POSTGRES_DB: odoo + ports: + - 5432:5432 + env: + INCLUDE: "${{ matrix.include }}" + EXCLUDE: "${{ matrix.exclude }}" + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Install addons and dependencies + run: oca_install_addons + - name: Check licenses + run: manifestoo -d . check-licenses + - name: Check development status + run: manifestoo -d . check-dev-status --default-dev-status=Beta + - name: Initialize test db + run: oca_init_test_database + - name: Run tests + run: oca_run_tests + - uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + - name: Update .pot files + run: oca_export_and_push_pot https://x-access-token:${{ secrets.GIT_PUSH_TOKEN }}@github.com/${{ github.repository }} + if: ${{ matrix.makepot == 'true' && github.event_name == 'push' && github.repository_owner == 'OCA' }} diff --git a/.gitignore b/.gitignore index 818770fb1bd..6ec07a054bd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__/ *.py[cod] /.venv /.pytest_cache +/.ruff_cache # C extensions *.so @@ -15,7 +16,6 @@ build/ develop-eggs/ dist/ eggs/ -lib/ lib64/ parts/ sdist/ @@ -25,6 +25,19 @@ var/ *.egg *.eggs +# Windows installers +*.msi + +# Debian packages +*.deb + +# Redhat packages +*.rpm + +# MacOS packages +*.dmg +*.pkg + # Installer logs pip-log.txt pip-delete-this-directory.txt diff --git a/.oca_hooks.cfg b/.oca_hooks.cfg new file mode 100644 index 00000000000..1f3e3e42674 --- /dev/null +++ b/.oca_hooks.cfg @@ -0,0 +1,2 @@ +[MESSAGES_CONTROL] +disable=xml-deprecated-data-node,xml-deprecated-tree-attribute diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 91be4d15d3a..c31e7a9dc99 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,13 +5,19 @@ exclude: | # 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/| + .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|^eslint.config.cjs|^prettier.config.cjs| # 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.*) default_language_version: @@ -27,15 +33,35 @@ repos: 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/oca/maintainer-tools - rev: ab1d7f6 + rev: d5fab7ee87fceee858a3d01048c78a548974d935 hooks: # update the NOT INSTALLABLE ADDONS section above - id: oca-update-pre-commit-excluded-addons - id: oca-fix-manifest-website args: ["https://github.com/OCA/web"] + - id: oca-gen-addon-readme + args: + - --addons-dir=. + - --branch=14.0 + - --org-name=OCA + - --repo-name=web + - --if-source-changed + - --keep-source-digest + - repo: https://github.com/OCA/odoo-pre-commit-hooks + rev: v0.0.25 + hooks: + - id: oca-checks-odoo-module + - id: oca-checks-po + args: + - --disable=po-pretty-format - repo: https://github.com/myint/autoflake - rev: v1.4 + rev: v1.5.3 hooks: - id: autoflake args: @@ -46,28 +72,38 @@ repos: - --remove-duplicate-keys - --remove-unused-variables - repo: https://github.com/psf/black - rev: 20.8b1 + rev: 22.3.0 hooks: - id: black - - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.1.2 + - repo: local hooks: - id: prettier name: prettier (with plugin-xml) + entry: prettier + args: + - --write + - --list-different + - --ignore-unknown + types: [text] + files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$ + language: node additional_dependencies: - "prettier@2.1.2" - "@prettier/plugin-xml@0.12.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: v7.8.1 + - repo: local hooks: - id: eslint - verbose: true + name: eslint + entry: eslint args: - --color - --fix + verbose: true + types: [javascript] + language: node + additional_dependencies: + - "eslint@7.8.1" + - "eslint-plugin-jsdoc@" - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.2.0 hooks: @@ -96,7 +132,7 @@ repos: - id: pyupgrade args: ["--keep-percent-format"] - repo: https://github.com/PyCQA/isort - rev: 5.5.1 + rev: 5.12.0 hooks: - id: isort name: isort except __init__.py @@ -104,7 +140,7 @@ repos: - --settings=. exclude: /__init__\.py$ - repo: https://github.com/acsone/setuptools-odoo - rev: 2.6.0 + rev: 3.1.8 hooks: - id: setuptools-odoo-make-default - id: setuptools-odoo-get-requirements @@ -113,25 +149,21 @@ repos: - requirements.txt - --header - "# generated from manifests external_dependencies" - - repo: https://gitlab.com/PyCQA/flake8 - rev: 3.8.3 + - repo: https://github.com/PyCQA/flake8 + rev: 5.0.0 hooks: - id: flake8 name: flake8 additional_dependencies: ["flake8-bugbear==20.1.4"] - - repo: https://github.com/PyCQA/pylint - rev: pylint-2.5.3 + - repo: https://github.com/OCA/pylint-odoo + rev: 7.0.2 hooks: - - id: pylint + - id: pylint_odoo name: pylint with optional checks args: - --rcfile=.pylintrc - --exit-zero verbose: true - additional_dependencies: &pylint_deps - - pylint-odoo==3.5.0 - - id: pylint - name: pylint with mandatory checks + - id: pylint_odoo args: - --rcfile=.pylintrc-mandatory - additional_dependencies: *pylint_deps diff --git a/.pylintrc b/.pylintrc index e33958833ed..d1f72970bc3 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,3 +1,5 @@ + + [MASTER] load-plugins=pylint_odoo score=n diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory index 08bca3cefef..3bf8ceefbc6 100644 --- a/.pylintrc-mandatory +++ b/.pylintrc-mandatory @@ -1,3 +1,4 @@ + [MASTER] load-plugins=pylint_odoo score=n diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5e8e3a666b3..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -language: python -cache: - directories: - - $HOME/.cache/pip - - $HOME/.cache/pre-commit - -python: - - "3.6" - -addons: - postgresql: "9.6" - apt: - packages: - - expect-dev # provides unbuffer utility - -stages: - - test - -jobs: - include: - - stage: test - env: - - TESTS=1 ODOO_REPO="odoo/odoo" MAKEPOT="1" - - stage: test - env: - - TESTS=1 ODOO_REPO="OCA/OCB" -env: - global: - - VERSION="14.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0" - - MQT_DEP=PIP - -install: - - git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git - ${HOME}/maintainer-quality-tools - - export PATH=${HOME}/maintainer-quality-tools/travis:${PATH} - - travis_install_nightly - -script: - - travis_run_tests - -after_success: - - travis_after_tests_success diff --git a/README.md b/README.md index 9e4498ae8af..b40d5755bc2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ -[![Runbot Status](https://runbot.odoo-community.org/runbot/badge/flat/162/14.0.svg)](https://runbot.odoo-community.org/runbot/repo/github-com-oca-web-162) -[![Build Status](https://travis-ci.com/OCA/web.svg?branch=14.0)](https://travis-ci.com/OCA/web) + +[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=14.0) +[![Pre-commit Status](https://github.com/OCA/web/actions/workflows/pre-commit.yml/badge.svg?branch=14.0)](https://github.com/OCA/web/actions/workflows/pre-commit.yml?query=branch%3A14.0) +[![Build Status](https://github.com/OCA/web/actions/workflows/test.yml/badge.svg?branch=14.0)](https://github.com/OCA/web/actions/workflows/test.yml?query=branch%3A14.0) [![codecov](https://codecov.io/gh/OCA/web/branch/14.0/graph/badge.svg)](https://codecov.io/gh/OCA/web) [![Translation Status](https://translation.odoo-community.org/widgets/web-14-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/web-14-0/?utm_source=widget) @@ -24,45 +26,75 @@ Available addons ---------------- addon | version | maintainers | summary --- | --- | --- | --- -[web_access_rule_buttons](web_access_rule_buttons/) | 14.0.1.0.0 | | Disable Edit button if access rules prevent this action +[support_branding](support_branding/) | 14.0.1.2.0 | | Adds your branding to an Odoo instance +[web_access_rule_buttons](web_access_rule_buttons/) | 14.0.1.0.1 | | Disable Edit button if access rules prevent this action [web_action_conditionable](web_action_conditionable/) | 14.0.1.0.1 | | web_action_conditionable [web_advanced_search](web_advanced_search/) | 14.0.1.0.1 | | Easier and more powerful searching tools -[web_company_color](web_company_color/) | 14.0.1.0.0 | | Web Company Color +[web_assets_warmup](web_assets_warmup/) | 14.0.1.0.0 | | Ensure that assets are generated when Odoo starts. +[web_button_visibility](web_button_visibility/) | 14.0.1.0.0 | ilyasProgrammer | Web Button Visibility +[web_calendar_color_field](web_calendar_color_field/) | 14.0.1.0.0 | | Calendar Color Field +[web_calendar_slot_duration](web_calendar_slot_duration/) | 14.0.1.0.0 | Yajo | Customizable calendar slot durations +[web_company_color](web_company_color/) | 14.0.2.0.0 | | Web Company Color [web_copy_confirm](web_copy_confirm/) | 14.0.1.0.0 | | Show confirmation dialogue before copying records +[web_create_write_confirm](web_create_write_confirm/) | 14.0.1.2.0 | ilyasProgrammer | Confirm/Alert pop-up before saving +[web_custom_modifier](web_custom_modifier/) | 14.0.2.0.1 | | Enable easily customizing view modifiers. [web_decimal_numpad_dot](web_decimal_numpad_dot/) | 14.0.1.0.0 | | Allows using numpad dot to enter period decimal separator [web_dialog_size](web_dialog_size/) | 14.0.1.0.0 | | A module that lets the user expand a dialog box to the full screen width. -[web_disable_export_group](web_disable_export_group/) | 14.0.1.0.0 | | Web Disable Export Group -[web_domain_field](web_domain_field/) | 14.0.1.0.0 | | Use computed field as domain -[web_drop_target](web_drop_target/) | 14.0.1.0.0 | | Allows to drag files into Odoo +[web_disable_export_group](web_disable_export_group/) | 14.0.2.0.0 | | Web Disable Export Group +[web_domain_field](web_domain_field/) | 14.0.1.0.2 | | Use computed field as domain +[web_drop_target](web_drop_target/) | 14.0.1.1.2 | | Allows to drag files into Odoo +[web_edit_user_filter](web_edit_user_filter/) | 14.0.1.0.2 | | Edit User Filters [web_environment_ribbon](web_environment_ribbon/) | 14.0.1.0.0 | | Web Environment Ribbon +[web_field_required_invisible_manager](web_field_required_invisible_manager/) | 14.0.2.3.3 | ilyasProgrammer | Web Field Required Invisible Readonly Managerr +[web_fix_modules_load](web_fix_modules_load/) | 14.0.1.0.0 | simahawk | Fix translations loading from frontend with many modules [web_group_expand](web_group_expand/) | 14.0.1.0.0 | | Group Expand Buttons -[web_ir_actions_act_multi](web_ir_actions_act_multi/) | 14.0.1.0.0 | | Enables triggering of more than one action on ActionManager -[web_ir_actions_act_view_reload](web_ir_actions_act_view_reload/) | 14.0.1.0.0 | | Enables reload of the current view via ActionManager +[web_ir_actions_act_multi](web_ir_actions_act_multi/) | 14.0.1.0.2 | | Enables triggering of more than one action on ActionManager +[web_ir_actions_act_view_reload](web_ir_actions_act_view_reload/) | 14.0.1.0.2 | | Enables reload of the current view via ActionManager +[web_ir_actions_act_window_message](web_ir_actions_act_window_message/) | 14.0.1.0.1 | | Show a message box to users [web_listview_range_select](web_listview_range_select/) | 14.0.1.0.0 | | Enables selecting a range of records using the shift key -[web_m2x_options](web_m2x_options/) | 14.0.1.0.0 | | web_m2x_options -[web_m2x_options_manager](web_m2x_options_manager/) | 14.0.1.1.0 | | Adds an interface to manage the "Create" and "Create and Edit" options for specific models and fields. -[web_no_bubble](web_no_bubble/) | 14.0.1.0.0 | | Remove the bubbles from the web interface -[web_notify](web_notify/) | 14.0.1.0.0 | | Send notification messages to user -[web_refresher](web_refresher/) | 14.0.1.0.0 | | Web Refresher -[web_responsive](web_responsive/) | 14.0.1.0.3 | [![Yajo](https://github.com/Yajo.png?size=30px)](https://github.com/Yajo) [![Tardo](https://github.com/Tardo.png?size=30px)](https://github.com/Tardo) | Responsive web client, community-supported +[web_m2x_options](web_m2x_options/) | 14.0.1.2.0 | | web_m2x_options +[web_m2x_options_manager](web_m2x_options_manager/) | 14.0.1.3.0 | | Adds an interface to manage the "Create" and "Create and Edit" options for specific models and fields. +[web_no_bubble](web_no_bubble/) | 14.0.1.1.0 | | Remove the bubbles from the web interface +[web_notify](web_notify/) | 14.0.1.1.0 | | Send notification messages to user +[web_notify_channel_message](web_notify_channel_message/) | 14.0.1.0.0 | | Send an instant notification to channel users when a new message is posted +[web_notify_upgrade](web_notify_upgrade/) | 14.0.1.0.1 | | Notify active users when a module is installed or updated +[web_pivot_hide_total](web_pivot_hide_total/) | 14.0.1.0.1 | | This addon adds a new inherited version of pivot view. It intends to hide the last total column when required. +[web_pwa_oca](web_pwa_oca/) | 14.0.1.1.0 | eLBati | Make Odoo a PWA +[web_refresher](web_refresher/) | 14.0.2.0.0 | | Web Refresher +[web_remember_tree_column_width](web_remember_tree_column_width/) | 14.0.1.0.0 | frahikLV luisg123v | Remember the tree columns' widths across sessions. +[web_responsive](web_responsive/) | 14.0.1.2.2 | Yajo Tardo | Responsive web client, community-supported +[web_search_with_and](web_search_with_and/) | 14.0.1.0.1 | | Use AND conditions on omnibar search +[web_select_all_companies](web_select_all_companies/) | 14.0.1.0.0 | | Allows you to select all companies in one click. [web_send_message_popup](web_send_message_popup/) | 14.0.1.0.0 | | Web Send Message as Popup [web_sheet_full_width](web_sheet_full_width/) | 14.0.1.0.1 | | Use the whole available screen width when displaying sheets -[web_switch_context_warning](web_switch_context_warning/) | 14.0.1.0.0 | | Show a warning if current user, company or database have been switched in another tab or window. -[web_timeline](web_timeline/) | 14.0.1.0.0 | [![tarteo](https://github.com/tarteo.png?size=30px)](https://github.com/tarteo) | Interactive visualization chart to show events in time +[web_switch_context_warning](web_switch_context_warning/) | 14.0.1.1.0 | | Show a warning if current user, company or database have been switched in another tab or window. +[web_timeline](web_timeline/) | 14.0.2.0.3 | tarteo | Interactive visualization chart to show events in time +[web_tooltip_field](web_tooltip_field/) | 14.0.1.0.0 | cuongnmtm | Showing a Field ToolTip in Odoo [web_tree_dynamic_colored_field](web_tree_dynamic_colored_field/) | 14.0.1.0.0 | | Allows you to dynamically color fields on tree views [web_tree_image_tooltip](web_tree_image_tooltip/) | 14.0.1.0.0 | | Show images in tree views via tooltip -[web_tree_many2one_clickable](web_tree_many2one_clickable/) | 14.0.1.0.1 | | Open the linked resource when clicking on their name -[web_widget_bokeh_chart](web_widget_bokeh_chart/) | 14.0.2.3.1 | [![LoisRForgeFlow](https://github.com/LoisRForgeFlow.png?size=30px)](https://github.com/LoisRForgeFlow) | This widget allows to display charts using Bokeh library. +[web_tree_many2one_clickable](web_tree_many2one_clickable/) | 14.0.1.0.3 | | Open the linked resource when clicking on their name +[web_view_calendar_list](web_view_calendar_list/) | 14.0.1.0.0 | | Show calendars as a List +[web_widget_bokeh_chart](web_widget_bokeh_chart/) | 14.0.2.3.1 | LoisRForgeFlow | This widget allows to display charts using Bokeh library. [web_widget_char_size](web_widget_char_size/) | 14.0.1.0.1 | | Add size option to Char widget -[web_widget_domain_editor_dialog](web_widget_domain_editor_dialog/) | 14.0.1.0.0 | | Recovers the Domain Editor Dialog functionality +[web_widget_child_selector](web_widget_child_selector/) | 14.0.1.0.1 | | Widget used for navigation on hierarchy fields +[web_widget_ckeditor](web_widget_ckeditor/) | 14.0.1.0.2 | ivantodorovich | Provides a widget for editing HTML fields using CKEditor +[web_widget_datepicker_fulloptions](web_widget_datepicker_fulloptions/) | 14.0.1.0.0 | | Web Widget DatePicker Full Options +[web_widget_domain_editor_dialog](web_widget_domain_editor_dialog/) | 14.0.1.0.2 | | Recovers the Domain Editor Dialog functionality [web_widget_dropdown_dynamic](web_widget_dropdown_dynamic/) | 14.0.1.0.0 | | This module adds support for dynamic dropdown widget -[web_widget_many2one_simple](web_widget_many2one_simple/) | 14.0.1.0.0 | [![Tardo](https://github.com/Tardo.png?size=30px)](https://github.com/Tardo) | Simple many2one widget -[web_widget_model_viewer](web_widget_model_viewer/) | 14.0.1.0.0 | [![eLBati](https://github.com/eLBati.png?size=30px)](https://github.com/eLBati) | Easily display interactive 3D models on the web & in AR +[web_widget_image_download](web_widget_image_download/) | 14.0.1.0.0 | | Allows to download any image from its widget +[web_widget_image_webcam](web_widget_image_webcam/) | 14.0.1.0.1 | | Allows to take image with WebCam +[web_widget_many2one_simple](web_widget_many2one_simple/) | 14.0.1.0.0 | Tardo | Simple many2one widget +[web_widget_mermaid](web_widget_mermaid/) | 14.0.1.0.0 | | Render mermaid markdown flowcharts +[web_widget_model_viewer](web_widget_model_viewer/) | 14.0.1.0.0 | eLBati | Easily display interactive 3D models on the web & in AR [web_widget_mpld3_chart](web_widget_mpld3_chart/) | 14.0.1.0.0 | | This widget allows to display charts using MPLD3 library. [web_widget_numeric_step](web_widget_numeric_step/) | 14.0.1.0.0 | | Web Widget Numeric Step +[web_widget_one2many_tree_line_duplicate](web_widget_one2many_tree_line_duplicate/) | 14.0.1.0.0 | | Web Widget One2many Tree Line Duplicate [web_widget_open_tab](web_widget_open_tab/) | 14.0.1.0.0 | | Allow to open record from trees on new tab from tree views +[web_widget_plotly_chart](web_widget_plotly_chart/) | 14.0.1.0.0 | robyf70 | Allow to draw plotly charts. +[web_widget_text_markdown](web_widget_text_markdown/) | 14.0.1.0.0 | | Widget to text fields that adds markdown support +[web_widget_uom](web_widget_uom/) | 14.0.1.0.0 | | Allow user to to decide how many decimal places should be displayed for UoM. [web_widget_url_advanced](web_widget_url_advanced/) | 14.0.1.0.1 | | This module extends URL widget for displaying anchors with custom labels. -[web_widget_x2many_2d_matrix](web_widget_x2many_2d_matrix/) | 14.0.1.0.1 | | Show list fields as a matrix +[web_widget_x2many_2d_matrix](web_widget_x2many_2d_matrix/) | 14.0.1.1.1 | | Show list fields as a matrix [//]: # (end addons) @@ -74,7 +106,7 @@ addon | version | maintainers | summary ## Licenses This repository is licensed under [AGPL-3.0](LICENSE). -However, each module can have a totally different license, as long as they adhere to OCA +However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) policy. Consult each module's `__manifest__.py` file, which contains a `license` key that explains its license. diff --git a/requirements.txt b/requirements.txt index 0162c284599..14c501fa344 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ # generated from manifests external_dependencies bokeh==2.3.1 mpld3 +plotly==5.4.0 diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 83249f30fa1..9e6e90c404b 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -14.0.20211028.0 \ No newline at end of file +14.0.20250302.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index 55111293954..9355af6983e 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -8,43 +8,73 @@ description="Meta package for oca-web Odoo addons", version=version, install_requires=[ + 'odoo14-addon-support_branding', 'odoo14-addon-web_access_rule_buttons', 'odoo14-addon-web_action_conditionable', 'odoo14-addon-web_advanced_search', + 'odoo14-addon-web_assets_warmup', + 'odoo14-addon-web_button_visibility', + 'odoo14-addon-web_calendar_color_field', + 'odoo14-addon-web_calendar_slot_duration', 'odoo14-addon-web_company_color', 'odoo14-addon-web_copy_confirm', + 'odoo14-addon-web_create_write_confirm', + 'odoo14-addon-web_custom_modifier', 'odoo14-addon-web_decimal_numpad_dot', 'odoo14-addon-web_dialog_size', 'odoo14-addon-web_disable_export_group', 'odoo14-addon-web_domain_field', 'odoo14-addon-web_drop_target', + 'odoo14-addon-web_edit_user_filter', 'odoo14-addon-web_environment_ribbon', + 'odoo14-addon-web_field_required_invisible_manager', + 'odoo14-addon-web_fix_modules_load', 'odoo14-addon-web_group_expand', 'odoo14-addon-web_ir_actions_act_multi', 'odoo14-addon-web_ir_actions_act_view_reload', + 'odoo14-addon-web_ir_actions_act_window_message', 'odoo14-addon-web_listview_range_select', 'odoo14-addon-web_m2x_options', 'odoo14-addon-web_m2x_options_manager', 'odoo14-addon-web_no_bubble', 'odoo14-addon-web_notify', + 'odoo14-addon-web_notify_channel_message', + 'odoo14-addon-web_notify_upgrade', + 'odoo14-addon-web_pivot_hide_total', + 'odoo14-addon-web_pwa_oca', 'odoo14-addon-web_refresher', + 'odoo14-addon-web_remember_tree_column_width', 'odoo14-addon-web_responsive', + 'odoo14-addon-web_search_with_and', + 'odoo14-addon-web_select_all_companies', 'odoo14-addon-web_send_message_popup', 'odoo14-addon-web_sheet_full_width', 'odoo14-addon-web_switch_context_warning', 'odoo14-addon-web_timeline', + 'odoo14-addon-web_tooltip_field', 'odoo14-addon-web_tree_dynamic_colored_field', 'odoo14-addon-web_tree_image_tooltip', 'odoo14-addon-web_tree_many2one_clickable', + 'odoo14-addon-web_view_calendar_list', 'odoo14-addon-web_widget_bokeh_chart', 'odoo14-addon-web_widget_char_size', + 'odoo14-addon-web_widget_child_selector', + 'odoo14-addon-web_widget_ckeditor', + 'odoo14-addon-web_widget_datepicker_fulloptions', 'odoo14-addon-web_widget_domain_editor_dialog', 'odoo14-addon-web_widget_dropdown_dynamic', + 'odoo14-addon-web_widget_image_download', + 'odoo14-addon-web_widget_image_webcam', 'odoo14-addon-web_widget_many2one_simple', + 'odoo14-addon-web_widget_mermaid', 'odoo14-addon-web_widget_model_viewer', 'odoo14-addon-web_widget_mpld3_chart', 'odoo14-addon-web_widget_numeric_step', + 'odoo14-addon-web_widget_one2many_tree_line_duplicate', 'odoo14-addon-web_widget_open_tab', + 'odoo14-addon-web_widget_plotly_chart', + 'odoo14-addon-web_widget_text_markdown', + 'odoo14-addon-web_widget_uom', 'odoo14-addon-web_widget_url_advanced', 'odoo14-addon-web_widget_x2many_2d_matrix', ], diff --git a/setup/support_branding/odoo/addons/support_branding b/setup/support_branding/odoo/addons/support_branding new file mode 120000 index 00000000000..3eb64a52d04 --- /dev/null +++ b/setup/support_branding/odoo/addons/support_branding @@ -0,0 +1 @@ +../../../../support_branding \ No newline at end of file diff --git a/setup/support_branding/setup.py b/setup/support_branding/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/support_branding/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_assets_warmup/odoo/addons/web_assets_warmup b/setup/web_assets_warmup/odoo/addons/web_assets_warmup new file mode 120000 index 00000000000..a261cf76c7b --- /dev/null +++ b/setup/web_assets_warmup/odoo/addons/web_assets_warmup @@ -0,0 +1 @@ +../../../../web_assets_warmup \ No newline at end of file diff --git a/setup/web_assets_warmup/setup.py b/setup/web_assets_warmup/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_assets_warmup/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_button_visibility/odoo/addons/web_button_visibility b/setup/web_button_visibility/odoo/addons/web_button_visibility new file mode 120000 index 00000000000..c39564488de --- /dev/null +++ b/setup/web_button_visibility/odoo/addons/web_button_visibility @@ -0,0 +1 @@ +../../../../web_button_visibility \ No newline at end of file diff --git a/setup/web_button_visibility/setup.py b/setup/web_button_visibility/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_button_visibility/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_calendar_color_field/odoo/addons/web_calendar_color_field b/setup/web_calendar_color_field/odoo/addons/web_calendar_color_field new file mode 120000 index 00000000000..bd453a8a061 --- /dev/null +++ b/setup/web_calendar_color_field/odoo/addons/web_calendar_color_field @@ -0,0 +1 @@ +../../../../web_calendar_color_field \ No newline at end of file diff --git a/setup/web_calendar_color_field/setup.py b/setup/web_calendar_color_field/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_calendar_color_field/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_calendar_slot_duration/odoo/addons/web_calendar_slot_duration b/setup/web_calendar_slot_duration/odoo/addons/web_calendar_slot_duration new file mode 120000 index 00000000000..d091ca2816d --- /dev/null +++ b/setup/web_calendar_slot_duration/odoo/addons/web_calendar_slot_duration @@ -0,0 +1 @@ +../../../../web_calendar_slot_duration \ No newline at end of file diff --git a/setup/web_calendar_slot_duration/setup.py b/setup/web_calendar_slot_duration/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_calendar_slot_duration/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_create_write_confirm/odoo/addons/web_create_write_confirm b/setup/web_create_write_confirm/odoo/addons/web_create_write_confirm new file mode 120000 index 00000000000..46be3cc1723 --- /dev/null +++ b/setup/web_create_write_confirm/odoo/addons/web_create_write_confirm @@ -0,0 +1 @@ +../../../../web_create_write_confirm \ No newline at end of file diff --git a/setup/web_create_write_confirm/setup.py b/setup/web_create_write_confirm/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_create_write_confirm/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_custom_modifier/odoo/addons/web_custom_modifier b/setup/web_custom_modifier/odoo/addons/web_custom_modifier new file mode 120000 index 00000000000..a8a681d3e20 --- /dev/null +++ b/setup/web_custom_modifier/odoo/addons/web_custom_modifier @@ -0,0 +1 @@ +../../../../web_custom_modifier \ No newline at end of file diff --git a/setup/web_custom_modifier/setup.py b/setup/web_custom_modifier/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_custom_modifier/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_edit_user_filter/odoo/addons/web_edit_user_filter b/setup/web_edit_user_filter/odoo/addons/web_edit_user_filter new file mode 120000 index 00000000000..9fe44e09f50 --- /dev/null +++ b/setup/web_edit_user_filter/odoo/addons/web_edit_user_filter @@ -0,0 +1 @@ +../../../../web_edit_user_filter \ No newline at end of file diff --git a/setup/web_edit_user_filter/setup.py b/setup/web_edit_user_filter/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_edit_user_filter/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_field_required_invisible_manager/odoo/addons/web_field_required_invisible_manager b/setup/web_field_required_invisible_manager/odoo/addons/web_field_required_invisible_manager new file mode 120000 index 00000000000..f9629c884f4 --- /dev/null +++ b/setup/web_field_required_invisible_manager/odoo/addons/web_field_required_invisible_manager @@ -0,0 +1 @@ +../../../../web_field_required_invisible_manager \ No newline at end of file diff --git a/setup/web_field_required_invisible_manager/setup.py b/setup/web_field_required_invisible_manager/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_field_required_invisible_manager/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_fix_modules_load/odoo/addons/web_fix_modules_load b/setup/web_fix_modules_load/odoo/addons/web_fix_modules_load new file mode 120000 index 00000000000..07934893cf1 --- /dev/null +++ b/setup/web_fix_modules_load/odoo/addons/web_fix_modules_load @@ -0,0 +1 @@ +../../../../web_fix_modules_load \ No newline at end of file diff --git a/setup/web_fix_modules_load/setup.py b/setup/web_fix_modules_load/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_fix_modules_load/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_ir_actions_act_window_message/odoo/addons/web_ir_actions_act_window_message b/setup/web_ir_actions_act_window_message/odoo/addons/web_ir_actions_act_window_message new file mode 120000 index 00000000000..9ba0c510a7a --- /dev/null +++ b/setup/web_ir_actions_act_window_message/odoo/addons/web_ir_actions_act_window_message @@ -0,0 +1 @@ +../../../../web_ir_actions_act_window_message \ No newline at end of file diff --git a/setup/web_ir_actions_act_window_message/setup.py b/setup/web_ir_actions_act_window_message/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_ir_actions_act_window_message/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_notify_channel_message/odoo/addons/web_notify_channel_message b/setup/web_notify_channel_message/odoo/addons/web_notify_channel_message new file mode 120000 index 00000000000..2f4f9a844f9 --- /dev/null +++ b/setup/web_notify_channel_message/odoo/addons/web_notify_channel_message @@ -0,0 +1 @@ +../../../../web_notify_channel_message \ No newline at end of file diff --git a/setup/web_notify_channel_message/setup.py b/setup/web_notify_channel_message/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_notify_channel_message/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_notify_upgrade/odoo/addons/web_notify_upgrade b/setup/web_notify_upgrade/odoo/addons/web_notify_upgrade new file mode 120000 index 00000000000..276bb5108f2 --- /dev/null +++ b/setup/web_notify_upgrade/odoo/addons/web_notify_upgrade @@ -0,0 +1 @@ +../../../../web_notify_upgrade \ No newline at end of file diff --git a/setup/web_notify_upgrade/setup.py b/setup/web_notify_upgrade/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_notify_upgrade/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_pivot_hide_total/odoo/addons/web_pivot_hide_total b/setup/web_pivot_hide_total/odoo/addons/web_pivot_hide_total new file mode 120000 index 00000000000..f7517efcf20 --- /dev/null +++ b/setup/web_pivot_hide_total/odoo/addons/web_pivot_hide_total @@ -0,0 +1 @@ +../../../../web_pivot_hide_total \ No newline at end of file diff --git a/setup/web_pivot_hide_total/setup.py b/setup/web_pivot_hide_total/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_pivot_hide_total/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_pwa_oca/odoo/addons/web_pwa_oca b/setup/web_pwa_oca/odoo/addons/web_pwa_oca new file mode 120000 index 00000000000..1b7095260fe --- /dev/null +++ b/setup/web_pwa_oca/odoo/addons/web_pwa_oca @@ -0,0 +1 @@ +../../../../web_pwa_oca \ No newline at end of file diff --git a/setup/web_pwa_oca/setup.py b/setup/web_pwa_oca/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_pwa_oca/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_remember_tree_column_width/odoo/addons/web_remember_tree_column_width b/setup/web_remember_tree_column_width/odoo/addons/web_remember_tree_column_width new file mode 120000 index 00000000000..b0895ab1987 --- /dev/null +++ b/setup/web_remember_tree_column_width/odoo/addons/web_remember_tree_column_width @@ -0,0 +1 @@ +../../../../web_remember_tree_column_width \ No newline at end of file diff --git a/setup/web_remember_tree_column_width/setup.py b/setup/web_remember_tree_column_width/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_remember_tree_column_width/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_search_with_and/odoo/addons/web_search_with_and b/setup/web_search_with_and/odoo/addons/web_search_with_and new file mode 120000 index 00000000000..d32981712da --- /dev/null +++ b/setup/web_search_with_and/odoo/addons/web_search_with_and @@ -0,0 +1 @@ +../../../../web_search_with_and \ No newline at end of file diff --git a/setup/web_search_with_and/setup.py b/setup/web_search_with_and/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_search_with_and/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_select_all_companies/odoo/addons/web_select_all_companies b/setup/web_select_all_companies/odoo/addons/web_select_all_companies new file mode 120000 index 00000000000..012ec121cc9 --- /dev/null +++ b/setup/web_select_all_companies/odoo/addons/web_select_all_companies @@ -0,0 +1 @@ +../../../../web_select_all_companies \ No newline at end of file diff --git a/setup/web_select_all_companies/setup.py b/setup/web_select_all_companies/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_select_all_companies/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_tooltip_field/odoo/addons/web_tooltip_field b/setup/web_tooltip_field/odoo/addons/web_tooltip_field new file mode 120000 index 00000000000..db513405742 --- /dev/null +++ b/setup/web_tooltip_field/odoo/addons/web_tooltip_field @@ -0,0 +1 @@ +../../../../web_tooltip_field \ No newline at end of file diff --git a/setup/web_tooltip_field/setup.py b/setup/web_tooltip_field/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_tooltip_field/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_view_calendar_list/odoo/addons/web_view_calendar_list b/setup/web_view_calendar_list/odoo/addons/web_view_calendar_list new file mode 120000 index 00000000000..2557cb64f53 --- /dev/null +++ b/setup/web_view_calendar_list/odoo/addons/web_view_calendar_list @@ -0,0 +1 @@ +../../../../web_view_calendar_list \ No newline at end of file diff --git a/setup/web_view_calendar_list/setup.py b/setup/web_view_calendar_list/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_view_calendar_list/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_child_selector/odoo/addons/web_widget_child_selector b/setup/web_widget_child_selector/odoo/addons/web_widget_child_selector new file mode 120000 index 00000000000..e35e692af2d --- /dev/null +++ b/setup/web_widget_child_selector/odoo/addons/web_widget_child_selector @@ -0,0 +1 @@ +../../../../web_widget_child_selector \ No newline at end of file diff --git a/setup/web_widget_child_selector/setup.py b/setup/web_widget_child_selector/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_child_selector/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_ckeditor/odoo/addons/web_widget_ckeditor b/setup/web_widget_ckeditor/odoo/addons/web_widget_ckeditor new file mode 120000 index 00000000000..79281285ae5 --- /dev/null +++ b/setup/web_widget_ckeditor/odoo/addons/web_widget_ckeditor @@ -0,0 +1 @@ +../../../../web_widget_ckeditor \ No newline at end of file diff --git a/setup/web_widget_ckeditor/setup.py b/setup/web_widget_ckeditor/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_ckeditor/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_datepicker_fulloptions/odoo/addons/web_widget_datepicker_fulloptions b/setup/web_widget_datepicker_fulloptions/odoo/addons/web_widget_datepicker_fulloptions new file mode 120000 index 00000000000..83d8cdadd5d --- /dev/null +++ b/setup/web_widget_datepicker_fulloptions/odoo/addons/web_widget_datepicker_fulloptions @@ -0,0 +1 @@ +../../../../web_widget_datepicker_fulloptions \ No newline at end of file diff --git a/setup/web_widget_datepicker_fulloptions/setup.py b/setup/web_widget_datepicker_fulloptions/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_datepicker_fulloptions/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_image_download/odoo/addons/web_widget_image_download b/setup/web_widget_image_download/odoo/addons/web_widget_image_download new file mode 120000 index 00000000000..ab050eae885 --- /dev/null +++ b/setup/web_widget_image_download/odoo/addons/web_widget_image_download @@ -0,0 +1 @@ +../../../../web_widget_image_download \ No newline at end of file diff --git a/setup/web_widget_image_download/setup.py b/setup/web_widget_image_download/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_image_download/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_image_webcam/odoo/addons/web_widget_image_webcam b/setup/web_widget_image_webcam/odoo/addons/web_widget_image_webcam new file mode 120000 index 00000000000..21d7b390bf4 --- /dev/null +++ b/setup/web_widget_image_webcam/odoo/addons/web_widget_image_webcam @@ -0,0 +1 @@ +../../../../web_widget_image_webcam \ No newline at end of file diff --git a/setup/web_widget_image_webcam/setup.py b/setup/web_widget_image_webcam/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_image_webcam/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_mermaid/odoo/addons/web_widget_mermaid b/setup/web_widget_mermaid/odoo/addons/web_widget_mermaid new file mode 120000 index 00000000000..b8e019e4d73 --- /dev/null +++ b/setup/web_widget_mermaid/odoo/addons/web_widget_mermaid @@ -0,0 +1 @@ +../../../../web_widget_mermaid \ No newline at end of file diff --git a/setup/web_widget_mermaid/setup.py b/setup/web_widget_mermaid/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_mermaid/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_one2many_tree_line_duplicate/odoo/addons/web_widget_one2many_tree_line_duplicate b/setup/web_widget_one2many_tree_line_duplicate/odoo/addons/web_widget_one2many_tree_line_duplicate new file mode 120000 index 00000000000..8ba1faf8da0 --- /dev/null +++ b/setup/web_widget_one2many_tree_line_duplicate/odoo/addons/web_widget_one2many_tree_line_duplicate @@ -0,0 +1 @@ +../../../../web_widget_one2many_tree_line_duplicate \ No newline at end of file diff --git a/setup/web_widget_one2many_tree_line_duplicate/setup.py b/setup/web_widget_one2many_tree_line_duplicate/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_one2many_tree_line_duplicate/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_plotly_chart/odoo/addons/web_widget_plotly_chart b/setup/web_widget_plotly_chart/odoo/addons/web_widget_plotly_chart new file mode 120000 index 00000000000..37aa8c38823 --- /dev/null +++ b/setup/web_widget_plotly_chart/odoo/addons/web_widget_plotly_chart @@ -0,0 +1 @@ +../../../../web_widget_plotly_chart \ No newline at end of file diff --git a/setup/web_widget_plotly_chart/setup.py b/setup/web_widget_plotly_chart/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_plotly_chart/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_text_markdown/odoo/addons/web_widget_text_markdown b/setup/web_widget_text_markdown/odoo/addons/web_widget_text_markdown new file mode 120000 index 00000000000..872e5f4adeb --- /dev/null +++ b/setup/web_widget_text_markdown/odoo/addons/web_widget_text_markdown @@ -0,0 +1 @@ +../../../../web_widget_text_markdown \ No newline at end of file diff --git a/setup/web_widget_text_markdown/setup.py b/setup/web_widget_text_markdown/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_text_markdown/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/setup/web_widget_uom/odoo/addons/web_widget_uom b/setup/web_widget_uom/odoo/addons/web_widget_uom new file mode 120000 index 00000000000..12072904423 --- /dev/null +++ b/setup/web_widget_uom/odoo/addons/web_widget_uom @@ -0,0 +1 @@ +../../../../web_widget_uom \ No newline at end of file diff --git a/setup/web_widget_uom/setup.py b/setup/web_widget_uom/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/web_widget_uom/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/support_branding/README.rst b/support_branding/README.rst new file mode 100644 index 00000000000..0352c47dabe --- /dev/null +++ b/support_branding/README.rst @@ -0,0 +1,83 @@ +================ +Support Branding +================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:55fd74f9abbf33121ca4f17ff8189b3db068d5a864ae3165741db2b26f1e2f4e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/14.0/support_branding + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-support_branding + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +If you run an Odoo support company and you support customers without an OPW, +you can brand the Odoo instance accordingly using this module. This module will +add a support company url to profile menu under, `Support`. Moreover, +it will add a button to mail exception messages to your support email address. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Therp BV +* Sunflower IT + +Contributors +~~~~~~~~~~~~ + +* Holger Brunn +* Stefan Rijnhart +* Robert Rottermann +* Kevin Kamau + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/support_branding/__init__.py b/support_branding/__init__.py new file mode 100644 index 00000000000..9416c2a040c --- /dev/null +++ b/support_branding/__init__.py @@ -0,0 +1,7 @@ +# Copyright 2012-2015 Therp BV () +# Copyright 2016 - Tecnativa - Angel Moya +# Copyright 2017 - redO2oo - Robert Rottermann +# Copyright 2021 Sunflower IT +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/support_branding/__manifest__.py b/support_branding/__manifest__.py new file mode 100644 index 00000000000..f84a261e93f --- /dev/null +++ b/support_branding/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2012-2015 Therp BV () +# Copyright 2016 - Tecnativa - Angel Moya +# Copyright 2017 - redO2oo - Robert Rottermann +# Copyright 2021 Sunflower IT () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Support Branding", + "summary": "Adds your branding to an Odoo instance", + "category": "Hidden/Tools", + "version": "14.0.1.2.0", + "license": "AGPL-3", + "author": "Therp BV,Sunflower IT,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "depends": ["web", "base_setup"], + "qweb": [ + "static/src/xml/base.xml", + ], + "data": ["views/asset.xml", "views/res_config_settings.xml"], + "demo": [ + "demo/ir_config_parameter_data.xml", + ], + "installable": True, +} diff --git a/support_branding/demo/ir_config_parameter_data.xml b/support_branding/demo/ir_config_parameter_data.xml new file mode 100644 index 00000000000..4ec7d4b06de --- /dev/null +++ b/support_branding/demo/ir_config_parameter_data.xml @@ -0,0 +1,23 @@ + + + + support_company + Odoo Community Association + + + support_company_url + https://odoo-community.org + + + support_branding_color + #fff + + + support_email + oca@example.com + + + support_release + 14.0 + + diff --git a/support_branding/i18n/it.po b/support_branding/i18n/it.po new file mode 100644 index 00000000000..102a181e8b5 --- /dev/null +++ b/support_branding/i18n/it.po @@ -0,0 +1,201 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * support_branding +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-05-29 16:26+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add a branding color\n" +" e.g #b163a3" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company URL\n" +" e.g https://odoo-community.org" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company name\n" +" e.g Odoo Community Association " +"(OCA)" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support email to send issues\n" +" e.g info@helpdesksupport.com" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Add the support release" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_branding_color +msgid "Branding color" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_company +msgid "Companies" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company_url +msgid "Company URL" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Creates an error (i.e ZeroDivisionError) to test support branding" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__display_name +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/js/support_branding.js:0 +#, python-format +msgid "Email to %s" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "" +"Email to support\n" +" company" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "For Support visit our" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__id +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company____last_update +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Please fill in how you produced this error..." +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company +msgid "Support Company Name" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Company Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Settings" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_email +msgid "Support email" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_release +msgid "Support release" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Technical Support By" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Test Support Branding" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"The below button generates a\n" +" division by zero python error " +"which\n" +" allows a user to test the " +"modules\n" +" functionality." +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Use HTML Editor" +msgstr "" + +#. module: support_branding +#: code:addons/support_branding/models/res_company.py:0 +#, python-format +msgid "" +"You are not allowed to access this functionality, please contact Admin for " +"more support" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "or mail us at" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "website" +msgstr "" diff --git a/support_branding/i18n/nl.po b/support_branding/i18n/nl.po new file mode 100644 index 00000000000..24ad337c2ba --- /dev/null +++ b/support_branding/i18n/nl.po @@ -0,0 +1,212 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * support_branding +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-30 10:05+0000\n" +"PO-Revision-Date: 2015-01-30 10:05+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add a branding color\n" +" e.g #b163a3" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company URL\n" +" e.g https://odoo-community.org" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company name\n" +" e.g Odoo Community Association " +"(OCA)" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support email to send issues\n" +" e.g info@helpdesksupport.com" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Add the support release" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_branding_color +msgid "Branding color" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_company +msgid "Companies" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company_url +msgid "Company URL" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Creates an error (i.e ZeroDivisionError) to test support branding" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__display_name +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/js/support_branding.js:0 +#, python-format +msgid "Email to %s" +msgstr "E-mail naar %s" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "" +"Email to support\n" +" company" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "For Support visit our" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__id +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company____last_update +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Please fill in how you produced this error..." +msgstr "Beschrijft u alstublieft de stappen om deze fout te reproduceren..." + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company +msgid "Support Company Name" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Company Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Settings" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_email +msgid "Support email" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_release +msgid "Support release" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Technical Support By" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Test Support Branding" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"The below button generates a\n" +" division by zero python error " +"which\n" +" allows a user to test the " +"modules\n" +" functionality." +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Use HTML Editor" +msgstr "" + +#. module: support_branding +#: code:addons/support_branding/models/res_company.py:0 +#, python-format +msgid "" +"You are not allowed to access this functionality, please contact Admin for " +"more support" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "or mail us at" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "website" +msgstr "" + +#~ msgid ", supported by" +#~ msgstr ", ondersteund door" + +#, python-format +#~ msgid "Email to support company" +#~ msgstr "E-mail naar ondersteunend bedrijf" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Versie " diff --git a/support_branding/i18n/sl.po b/support_branding/i18n/sl.po new file mode 100644 index 00000000000..3ee6f531c05 --- /dev/null +++ b/support_branding/i18n/sl.po @@ -0,0 +1,214 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * support_branding +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-08-02 10:23+0200\n" +"PO-Revision-Date: 2015-08-02 10:24+0200\n" +"Last-Translator: Matjaz Mozetic \n" +"Language-Team: \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" +"X-Generator: Poedit 1.8.2\n" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add a branding color\n" +" e.g #b163a3" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company URL\n" +" e.g https://odoo-community.org" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company name\n" +" e.g Odoo Community Association " +"(OCA)" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support email to send issues\n" +" e.g info@helpdesksupport.com" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Add the support release" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_branding_color +msgid "Branding color" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_company +msgid "Companies" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company_url +msgid "Company URL" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Creates an error (i.e ZeroDivisionError) to test support branding" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__display_name +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/js/support_branding.js:0 +#, python-format +msgid "Email to %s" +msgstr "E-pošta za %s" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "" +"Email to support\n" +" company" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "For Support visit our" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__id +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company____last_update +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Please fill in how you produced this error..." +msgstr "Opišite, kako ste prišli do te napake..." + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company +msgid "Support Company Name" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Company Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Settings" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_email +msgid "Support email" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_release +msgid "Support release" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Technical Support By" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Test Support Branding" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"The below button generates a\n" +" division by zero python error " +"which\n" +" allows a user to test the " +"modules\n" +" functionality." +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Use HTML Editor" +msgstr "" + +#. module: support_branding +#: code:addons/support_branding/models/res_company.py:0 +#, python-format +msgid "" +"You are not allowed to access this functionality, please contact Admin for " +"more support" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "or mail us at" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "website" +msgstr "" + +#~ msgid ", supported by" +#~ msgstr ", podpora" + +#, fuzzy, python-format +#~ msgid "Email to support company" +#~ msgstr "E-pošta za družbo" + +#, fuzzy +#~ msgid "Version" +#~ msgstr "Verzija" diff --git a/support_branding/i18n/support_branding.pot b/support_branding/i18n/support_branding.pot new file mode 100644 index 00000000000..eb01b6e7dd0 --- /dev/null +++ b/support_branding/i18n/support_branding.pot @@ -0,0 +1,195 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * support_branding +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add a branding color\n" +" e.g #b163a3" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company URL\n" +" e.g https://odoo-community.org" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support company name\n" +" e.g Odoo Community Association (OCA)" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"Add the support email to send issues\n" +" e.g info@helpdesksupport.com" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Add the support release" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_branding_color +msgid "Branding color" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_company +msgid "Companies" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company_url +msgid "Company URL" +msgstr "" + +#. module: support_branding +#: model:ir.model,name:support_branding.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Creates an error (i.e ZeroDivisionError) to test support branding" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__display_name +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/js/support_branding.js:0 +#, python-format +msgid "Email to %s" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "" +"Email to support\n" +" company" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "For Support visit our" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company__id +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_company____last_update +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Please fill in how you produced this error..." +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_company +msgid "Support Company Name" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Company Settings" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Support Settings" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_email +msgid "Support email" +msgstr "" + +#. module: support_branding +#: model:ir.model.fields,field_description:support_branding.field_res_config_settings__support_release +msgid "Support release" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Technical Support By" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "Test Support Branding" +msgstr "" + +#. module: support_branding +#: model_terms:ir.ui.view,arch_db:support_branding.support_res_config_settings_view_form +msgid "" +"The below button generates a\n" +" division by zero python error which\n" +" allows a user to test the modules\n" +" functionality." +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "Use HTML Editor" +msgstr "" + +#. module: support_branding +#: code:addons/support_branding/models/res_company.py:0 +#, python-format +msgid "" +"You are not allowed to access this functionality, please contact Admin for " +"more support" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "or mail us at" +msgstr "" + +#. module: support_branding +#. openerp-web +#: code:addons/support_branding/static/src/xml/base.xml:0 +#, python-format +msgid "website" +msgstr "" diff --git a/support_branding/models/__init__.py b/support_branding/models/__init__.py new file mode 100644 index 00000000000..c873322e070 --- /dev/null +++ b/support_branding/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2021 Sunflower IT +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import res_config_settings +from . import res_company diff --git a/support_branding/models/res_company.py b/support_branding/models/res_company.py new file mode 100644 index 00000000000..875fc5b1e88 --- /dev/null +++ b/support_branding/models/res_company.py @@ -0,0 +1,27 @@ +# Copyright 2023 Sunflower IT +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, models +from odoo.exceptions import AccessError + + +class ResCompany(models.Model): + _inherit = "res.company" + + @api.model + def get_support_branding_config_param_data(self): + if not self.env.user.has_group("base.group_user"): + raise AccessError( + _( + "You are not allowed to access this " + "functionality, please contact Admin for " + "more support" + ) + ) + self.env.cr.execute( + "select key, value from ir_config_parameter where key ilike " "'support_%';" + ) + res = self.env.cr.dictfetchall() + if any(res): + support_vals = {x["key"]: x["value"] for x in res} + return support_vals diff --git a/support_branding/models/res_config_settings.py b/support_branding/models/res_config_settings.py new file mode 100644 index 00000000000..a792a64eb04 --- /dev/null +++ b/support_branding/models/res_config_settings.py @@ -0,0 +1,39 @@ +# Copyright 2021 Sunflower IT +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + def get_values(self): + res = super(ResConfigSettings, self).get_values() + param_obj = self.env["ir.config_parameter"].sudo() + res.update( + support_company=param_obj.get_param("support_company"), + support_company_url=param_obj.get_param("support_company_url"), + support_email=param_obj.get_param("support_email"), + support_release=param_obj.get_param("support_release"), + support_branding_color=param_obj.get_param("support_branding_color"), + ) + return res + + def set_values(self): + res = super(ResConfigSettings, self).set_values() + param_obj = self.env["ir.config_parameter"].sudo() + param_obj.set_param("support_company", self.support_company) + param_obj.set_param("support_company_url", self.support_company_url) + param_obj.set_param("support_email", self.support_email) + param_obj.set_param("support_release", self.support_release) + param_obj.set_param("support_branding_color", self.support_branding_color) + return res + + support_company = fields.Char(string="Support Company Name") + support_company_url = fields.Char(string="Company URL") + support_branding_color = fields.Char(string="Branding color") + support_email = fields.Char(string="Support email") + support_release = fields.Char(string="Support release") + + def test_support_branding_error(self): + return 9 / 0 diff --git a/support_branding/readme/CONTRIBUTORS.rst b/support_branding/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..697abcab5e5 --- /dev/null +++ b/support_branding/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Holger Brunn +* Stefan Rijnhart +* Robert Rottermann +* Kevin Kamau diff --git a/support_branding/readme/DESCRIPTION.rst b/support_branding/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..1191583f611 --- /dev/null +++ b/support_branding/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +If you run an Odoo support company and you support customers without an OPW, +you can brand the Odoo instance accordingly using this module. This module will +add a support company url to profile menu under, `Support`. Moreover, +it will add a button to mail exception messages to your support email address. diff --git a/support_branding/static/description/icon.png b/support_branding/static/description/icon.png new file mode 100644 index 00000000000..3a0328b516c Binary files /dev/null and b/support_branding/static/description/icon.png differ diff --git a/support_branding/static/description/index.html b/support_branding/static/description/index.html new file mode 100644 index 00000000000..30aec8183c9 --- /dev/null +++ b/support_branding/static/description/index.html @@ -0,0 +1,427 @@ + + + + + +Support Branding + + + +
+

Support Branding

+ + +

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runboat

+

If you run an Odoo support company and you support customers without an OPW, +you can brand the Odoo instance accordingly using this module. This module will +add a support company url to profile menu under, Support. Moreover, +it will add a button to mail exception messages to your support email address.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Therp BV
  • +
  • Sunflower IT
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/web project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/support_branding/static/src/css/support_branding.css b/support_branding/static/src/css/support_branding.css new file mode 100644 index 00000000000..c682172863d --- /dev/null +++ b/support_branding/static/src/css/support_branding.css @@ -0,0 +1,20 @@ +.support-branding-submit-form { + display: inline; + margin: 0; + width: 100%; +} + +.support-statement { + margin: 10px 0 10px 0; +} + +.support-statement .note-editor { + height: 230px; + overflow: scroll; +} + +.support-desc { + resize: block; + max-height: 139px; + box-sizing: border-box; +} diff --git a/support_branding/static/src/js/res_config_edition.js b/support_branding/static/src/js/res_config_edition.js new file mode 100644 index 00000000000..3bf72448d38 --- /dev/null +++ b/support_branding/static/src/js/res_config_edition.js @@ -0,0 +1,29 @@ +odoo.define("support_branding.ResConfigEdition", function (require) { + "use strict"; + + var ResConfigEdition = require("base_setup.ResConfigEdition"); + + ResConfigEdition.include({ + willStart: function () { + var self = this; + var def_1 = this._rpc({ + model: "res.company", + method: "get_support_branding_config_param_data", + args: [], + }).then(function (result) { + if (result && "support_company" in result) + self.support_cp_name = result.support_company; + if (result && "support_company_url" in result) + self.support_cp_url = result.support_company_url; + if (result && "support_email" in result) + self.support_cp_email = result.support_email; + if (result && "support_release" in result) + self.support_cp_release = result.support_release; + if (result && "support_branding_color" in result) + self.support_cp_color = result.support_branding_color; + }); + + return $.when(this._super.apply(this, arguments), def_1); + }, + }); +}); diff --git a/support_branding/static/src/js/support_branding.js b/support_branding/static/src/js/support_branding.js new file mode 100644 index 00000000000..7f8ea9a807d --- /dev/null +++ b/support_branding/static/src/js/support_branding.js @@ -0,0 +1,172 @@ +/* Copyright 2012-2015 Therp + * Copyright 2016 - Tecnativa - Angel Moya + * Copyright 2017 - redO2oo - Robert Rottermann + * Copyright 2018 - Therp BV + * Copyright 2021 - Sunflower IT + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +odoo.define("support_branding.CrashManager", function (require) { + "use strict"; + var CrashManager = require("web.CrashManager").CrashManager; + var session = require("web.session"); + var core = require("web.core"); + var Wysiwyg = require("web_editor.wysiwyg.root"); + + var _t = core._t; + + CrashManager.include({ + init: function () { + var self = this; + $.when(this._super.apply(this, arguments)).then(function () { + self._rpc({ + model: "res.company", + method: "get_support_branding_config_param_data", + args: [], + }).then(function (result) { + if (result && "support_company" in result) + self.support_cp_name = result.support_company; + if (result && "support_company_url" in result) + self.support_cp_url = result.support_company_url; + if (result && "support_email" in result) + self.support_cp_email = result.support_email; + if (result && "support_release" in result) + self.support_cp_release = result.support_release; + if (result && "support_branding_color" in result) + self.support_cp_color = result.support_branding_color; + }); + }); + }, + show_error: function (error) { + var self = this; + this.wysiwyg = new Wysiwyg(self, {}); + var subject = + session.username + + "@" + + session.db + + "[" + + session.server + + "]:" + + error.message; + var body = error.data.debug; + var inputs = + "" + + '\n" + + '"; + return this._super.apply(this, arguments).opened(function () { + var $form = $(".support-branding-submit-form"); + var $statement = $(".support-statement"); + var $description = $(".support-desc"); + var $button = $(".support-btn"); + var $use_html_ck = $("#use_html_checker"); + var $close_btn = $(".close"); + var $body = $(".sp-body"); + var $header = $form.parents(".modal-dialog").find(".modal-header"); + var $footer = $form.parents(".modal-dialog").find(".modal-footer"); + // Self.wysiwyg.attachTo($description); + + $statement.prepend(inputs); + if (self.support_cp_email) { + if (self.support_cp_name) { + var title = "Support by " + self.support_cp_name; + $('

' + title + "

").insertBefore( + ".support-branding-submit-form" + ); + $button.text( + _.str.sprintf(_t("Email to %s"), self.support_cp_name) + ); + } + $form + .parents(".modal") + .find(".modal-body") + .css("max-height", "70vh"); + $use_html_ck.on("change", function () { + if (this.checked) { + if (self.wysiwyg.isDestroyed()) { + self.wysiwyg = new Wysiwyg(self, {}); + self.wysiwyg.attachTo($description); + } else self.wysiwyg.attachTo($description); + } else { + self.wysiwyg.destroy(); + $(".support-statement").append($description); + if ($description.is(":hidden")) + $description.css({display: "block"}); + } + }); + + $button.on("click", function (ev) { + var $btn = $(this); + if (!$description.val()) { + $description.parent().addClass("oe_form_invalid"); + ev.preventDefault(); + return; + } + ev.preventDefault(); + var error_code = ""; + var body_html = ""; + var desc = + self.wysiwyg.$editor && self.wysiwyg.$editor.length + ? self.wysiwyg.getValue() + : $description.val(); + desc = `
${desc}
`; + error_code = `
${body}
`; + body_html = `
${desc}
${error_code}
`; + var params = { + state: "outgoing", + auto_delete: true, + email_to: self.support_cp_email, + subject: subject, + body_html: body_html, + }; + self._rpc({ + model: "mail.mail", + method: "create", + args: [params], + }).then( + function (mail_id) { + if (mail_id) { + self._rpc({ + model: "mail.mail", + method: "send", + args: [mail_id], + }).then(function () { + self.do_notify( + "Success", + "Support mail created!" + ); + $close_btn.click(); + }); + } + }, + function () { + $body.val(desc + "\n\n" + $body.val()); + $btn.unbind("click"); + $btn.click(); + } + ); + }); + } else { + $description.css({display: "none"}); + $button.css({display: "none"}); + } + $form.prependTo($footer); + // Hide "Ok" button since we have close on the dialog top + // Allow send email btn to close once done. + $footer.find("button:eq(1)").css({display: "none"}); + + if (self.support_cp_color) { + $header.css({background: self.support_cp_color}); + $footer.css({background: self.support_cp_color}); + } else { + $header.css({background: ""}); + $footer.css({background: ""}); + } + }); + }, + }); +}); diff --git a/support_branding/static/src/js/user_menu.js b/support_branding/static/src/js/user_menu.js new file mode 100644 index 00000000000..2ee54a4f83f --- /dev/null +++ b/support_branding/static/src/js/user_menu.js @@ -0,0 +1,31 @@ +odoo.define("support_branding.UserMenu", function (require) { + "use strict"; + + var user_menu = require("web.UserMenu"); + + user_menu.include({ + _onMenuSupport: function () { + var url = this.support_url || "https://www.odoo.com/buy"; + window.open(url, "_blank"); + }, + willStart: function () { + var self = this; + var def = self + ._rpc({ + model: "res.company", + method: "get_support_branding_config_param_data", + args: [], + }) + .then(function (result) { + if ( + result && + "support_company_url" in result && + result.support_company_url !== "" + ) { + self.support_url = result.support_company_url; + } + }); + return $.when(this._super.apply(this, arguments), def); + }, + }); +}); diff --git a/support_branding/static/src/tests/support_branding_tests.js b/support_branding/static/src/tests/support_branding_tests.js new file mode 100644 index 00000000000..bc97daf2657 --- /dev/null +++ b/support_branding/static/src/tests/support_branding_tests.js @@ -0,0 +1,80 @@ +odoo.define("support_branding.crash_manager_tests", function (require) { + "use strict"; + + /* global QUnit*/ + + const CrashManager = require("web.CrashManager").CrashManager; + const testUtils = require("web.test_utils"); + const createActionManager = testUtils.createActionManager; + + QUnit.module("support_branding", {}, function () { + QUnit.test("Error Dialog is created", async function (assert) { + // No of assertion expected. + assert.expect(5); + + // Create action manager to trigger error dialog + var actionManager = await createActionManager({ + services: { + crash_manager: CrashManager, + }, + }); + + // Check if action with crash manager service was created. + assert.notOk( + _.isEmpty(actionManager), + "Action manager with " + + "crash manager service should be created and not empty" + ); + + // Test custom error + const error = { + type: "Support Branding Odoo Client Error", + message: "Message", + data: { + debug: "Traceback", + }, + }; + // NB: This will use the saved res.config settings of support + // branding containing the support mail. It is fetched in crash + // manager init function as saved in res.config settings. + // attached is a default data xml with sample data. + actionManager.call("crash_manager", "show_error", error); + await testUtils.nextTick(); + var $mail_dialog = "form.support-branding-submit-form"; + + // Confirm if we have a form and its required elements. + assert.containsOnce( + $, + $mail_dialog, + "Error dialog should be opened and showing mail section on footer" + ); + assert.containsOnce( + $, + ".support-desc", + "We should have a textarea to add our issues" + ); + assert.containsOnce( + $, + "button.support-btn", + "We should have a send mail button to send support mail" + ); + + // Add a test text mail. + $(".support-desc").val( + "Send this as a test mail to configured support mail" + ); + + // Try to send mail, by default a popup will be triggered + // defaulting to form call of 'mailto'. + await testUtils.dom.click($("button.support-btn"), {allowInvisible: true}); + + // Close error dialog + await testUtils.dom.click($("button.close"), {allowInvisible: true}); + + // Confirm dialog was closed + assert.containsNone($, $mail_dialog, "Error Dialog should be closed"); + + actionManager.destroy(); + }); + }); +}); diff --git a/support_branding/static/src/xml/base.xml b/support_branding/static/src/xml/base.xml new file mode 100644 index 00000000000..cf88e7e6899 --- /dev/null +++ b/support_branding/static/src/xml/base.xml @@ -0,0 +1,80 @@ + + + + +
+
+
+ + +
+
+