diff --git a/.copier-answers.yml b/.copier-answers.yml index 82c932acd617..c9d466707047 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,13 +1,44 @@ # Do NOT update manually; changes here will be overwritten by Copier -_commit: v1.1.1 -_src_path: https://github.com/OCA/oca-addons-repo-template.git -dependency_installation_mode: OCA -generate_requirements_txt: false +_commit: v1.40 +_src_path: gh:oca/oca-addons-repo-template +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: false +github_enable_stale_action: false +github_enforce_dev_status_compatibility: true include_wkhtmltopdf: false +odoo_test_flavor: Odoo odoo_version: 14.0 +org_name: Odoo Community Association (OCA) +org_slug: OCA rebel_module_groups: [] -repo_description: null +repo_description: 'This OCA project aims + to provide an Open Source upgrade path for Odoo + from one major Odoo version to the next one. + + + It is hosted at GitHub. + + + For documentation, see here including: + + + - [introduction](https://oca.github.io/OpenUpgrade/intro.html) + + - [migration process](https://oca.github.io/OpenUpgrade/migration_details.html) + + - [module coverage](https://oca.github.io/OpenUpgrade/status.html) + + - [development](https://oca.github.io/OpenUpgrade/development.html) + + - and much more ...' repo_name: Tools to upgrade Odoo instances from a major version to another -repo_slug: openupgrade -travis_apt_packages: [] -travis_apt_sources: [] +repo_slug: OpenUpgrade +repo_website: https://github.com/OCA/OpenUpgrade +use_pyproject_toml: false +use_ruff: false + diff --git a/.eslintrc.yml b/.eslintrc.yml index 88f2881b4c12..fed88d70d23e 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,9 +1,16 @@ env: browser: true + es6: true # See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 parserOptions: - ecmaVersion: 2017 + ecmaVersion: 2019 + +overrides: + - files: + - "**/*.esm.js" + parserOptions: + sourceType: module # Globals available in Odoo that shouldn't produce errorings globals: @@ -14,7 +21,8 @@ globals: moment: readonly odoo: readonly openerp: readonly - Promise: 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/.flake8 b/.flake8 index 44ed868f7ff2..e397e8ed4e3e 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] -max-line-length = 80 +max-line-length = 88 max-complexity = 16 # B = bugbear # B9 = bugbear opinionated (incl line length) @@ -8,3 +8,5 @@ select = C,E,F,W,B,B9 # E501: flake8 line length (covered by bugbear B950) # W503: line break before binary operator (black behaviour) ignore = E203,E501,W503 +per-file-ignores= + __init__.py:F401 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..e0d56685a954 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +test-requirements.txt merge=union diff --git a/.github/workflows/documentation-commit.yml b/.github/workflows/documentation-commit.yml deleted file mode 100644 index e4e7f2348de7..000000000000 --- a/.github/workflows/documentation-commit.yml +++ /dev/null @@ -1,78 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a -# single version of Python. For more information see: -# https://help.github.com/actions/language-and-framework-guides\ -# /using-python-with-github-actions - -name: Build and commit documentation - -on: - push: - branches: ["14.0"] - -jobs: - documentation: - runs-on: ubuntu-latest - env: - DB: "openupgrade" - DB_HOST: "localhost" - DB_PASSWORD: "odoo" - DB_PORT: 5432 - DB_USERNAME: "odoo" - DOWNLOADS: https://github.com/OCA/OpenUpgrade/releases/download/databases - ODOO: "./odoo/odoo-bin" - PGHOST: "localhost" - PGPASSWORD: "odoo" - PGUSER: "odoo" - steps: - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - name: Check out Odoo - uses: actions/checkout@v2 - with: - repository: odoo/odoo - ref: "14.0" - fetch-depth: 1 - path: odoo - - name: Check out OpenUpgrade - uses: actions/checkout@v2 - with: - path: openupgrade - - name: Configuration - run: | - sudo apt update - sudo apt install \ - expect \ - expect-dev \ - libevent-dev \ - libldap2-dev \ - libsasl2-dev \ - libxml2-dev \ - libxslt1-dev \ - nodejs \ - python3-lxml \ - python3-passlib \ - python3-psycopg2 \ - python3-serial \ - python3-simplejson \ - python3-werkzeug \ - python3-yaml \ - unixodbc-dev - - name: Requirements Installation - run: | - pip install -q -r odoo/requirements.txt - pip install --ignore-installed \ - git+https://github.com/OCA/openupgradelib.git@master - pip install sphinx - - name: OpenUpgrade Docs - run: | - # try to build the documentation - sh openupgrade/build_openupgrade_docs - - name: Commit changes - uses: EndBug/add-and-commit@v7 - with: - add: "docs" - cwd: "openupgrade" - default_author: github_actions - message: "[UPD] HTML documentation" diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml deleted file mode 100644 index 3439c1c4f0fc..000000000000 --- a/.github/workflows/documentation.yml +++ /dev/null @@ -1,70 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a -# single version of Python. For more information see: -# https://help.github.com/actions/language-and-framework-guides\ -# /using-python-with-github-actions - -name: OpenUpgrade documentation - -on: - pull_request: - -jobs: - documentation: - runs-on: ubuntu-latest - env: - DB: "openupgrade" - DB_HOST: "localhost" - DB_PASSWORD: "odoo" - DB_PORT: 5432 - DB_USERNAME: "odoo" - DOWNLOADS: https://github.com/OCA/OpenUpgrade/releases/download/databases - ODOO: "./odoo/odoo-bin" - PGHOST: "localhost" - PGPASSWORD: "odoo" - PGUSER: "odoo" - steps: - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - name: Check out Odoo - uses: actions/checkout@v2 - with: - repository: odoo/odoo - ref: "14.0" - fetch-depth: 1 - path: odoo - - name: Check out OpenUpgrade - uses: actions/checkout@v2 - with: - path: openupgrade - - name: Configuration - run: | - sudo apt update - sudo apt install \ - expect \ - expect-dev \ - libevent-dev \ - libldap2-dev \ - libsasl2-dev \ - libxml2-dev \ - libxslt1-dev \ - nodejs \ - python3-lxml \ - python3-passlib \ - python3-psycopg2 \ - python3-serial \ - python3-simplejson \ - python3-werkzeug \ - python3-yaml \ - unixodbc-dev - - name: Requirements Installation - run: | - pip install -q -r odoo/requirements.txt - pip install --ignore-installed \ - git+https://github.com/OCA/openupgradelib.git@master - pip install sphinx - - name: OpenUpgrade Docs - run: | - # try to build the documentation - sh openupgrade/build_openupgrade_docs diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index ca204e713ecd..0188a4ca2885 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -2,16 +2,47 @@ 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 - python-version: "3.9.7" - - uses: pre-commit/action@v2.0.0 + python-version: "3.11" + cache: 'pip' + cache-dependency-path: '.pre-commit-config.yaml' + - 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/test.yml b/.github/workflows/test.yml index 00b4afe24901..9687848b3af2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,12 +7,16 @@ name: Test OpenUpgrade migration on: push: - branches: ["14.0*"] + branches: + - "14.0" + - "14.0-ocabot-*" pull_request: + branches: + - "14.0*" jobs: test: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 env: DB: "openupgrade" DB_HOST: "localhost" @@ -24,9 +28,10 @@ jobs: PGHOST: "localhost" PGPASSWORD: "odoo" PGUSER: "odoo" + OPENUPGRADE_USE_DEMO: "yes" steps: - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: 3.7 - name: Configure Postgres @@ -58,14 +63,14 @@ jobs: # - git reset -q --hard $TRAVIS_COMMIT # Install Python requirements of target release - name: Check out Odoo - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: repository: odoo/odoo ref: "14.0" fetch-depth: 1 path: odoo - name: Check out OpenUpgrade - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: path: openupgrade - name: Configuration @@ -86,8 +91,7 @@ jobs: python3-serial \ python3-simplejson \ python3-werkzeug \ - python3-yaml \ - unixodbc-dev + python3-yaml - name: Requirements Installation run: | sudo npm install -g less less-plugin-clean-css diff --git a/.gitignore b/.gitignore index 1fce9cfb355d..13f5f019d19f 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/.isort.cfg b/.isort.cfg index 7683badfa449..0ec187efd1bf 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -10,3 +10,4 @@ known_odoo=odoo known_odoo_addons=odoo.addons sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER default_section=THIRDPARTY +ensure_newline_before_comments = True diff --git a/.oca_hooks.cfg b/.oca_hooks.cfg new file mode 100644 index 000000000000..1f3e3e426742 --- /dev/null +++ b/.oca_hooks.cfg @@ -0,0 +1,2 @@ +[MESSAGES_CONTROL] +disable=xml-deprecated-data-node,xml-deprecated-tree-attribute diff --git a/.old-travis.yml b/.old-travis.yml deleted file mode 100644 index 74c807ba38b8..000000000000 --- a/.old-travis.yml +++ /dev/null @@ -1,77 +0,0 @@ -language: python -sudo: false - -python: - - "3.7" - -addons: - apt: - packages: - - expect-dev # provides unbuffer utility - - python3-lxml # because pip installation is slow - - python3-simplejson - - python3-serial - - python3-yaml - - python3-passlib - - python3-psycopg2 - - python3-werkzeug - - realpath - postgresql: "10" - -env: - - DB=openupgrade ODOO=./odoo-bin - -# Need flake8 for pep8 testing -install: - - pip install flake8==3.4.1 coveralls - -# Test with flake for: -# * migration scripts -# * scripts/ directory -# * odoo/addons/openupgrade* directories -# * odoo/openupgrade/ directory -# use a max length of 120 -script: - - flake8 odoo/openupgrade --max-line-length=120 - - flake8 odoo/addons/openupgrade* --max-line-length=120 --filename=__init__.py - --ignore=F401 - - flake8 odoo/addons/openupgrade* --max-line-length=120 --exclude=__init__.py - # only flake8 migration scripts from the openupgrade project, presumably - # identifiable by using the openupgrade helpers - - flake8 --max-line-length=120 scripts $(find . \( -name 'pre-*.py' -or -name - 'post-*.py' \) -exec grep -q openupgrade {} \; -print) - - flake8 odoo/addons/*/migrations/*/tests/ --max-line-length=120 - - flake8 addons/*/migrations/*/tests/ --max-line-length=120 - - npm install -g less less-plugin-clean-css - - createdb $DB - - wget -q -O- https://github.com/OCA/OpenUpgrade/releases/download/databases/13.0.psql - | pg_restore -d $DB --no-owner - # TODO: create test data in Odoo 12.0 which does not support yml anymore - # Roundtrip to previous release to update the test database with additional test data - # - git fetch --depth 2 origin 12.0 - # - git reset --hard `git ls-remote |grep refs/heads/12.0 |awk '{print $1}'` - # - pip install -q -r requirements.txt - # Line below may fail quite often due to Travis bug: - # - git reset -q --hard $TRAVIS_COMMIT - # Install Python requirements of target release - - pip install -q -r requirements.txt - # don't use pypi's openupgradelib, but the one from source to avoid choking - # on unreleased features in openupgradelib - - pip install --ignore-installed git+https://github.com/OCA/openupgradelib.git@master - # select modules and perform the upgrade - - MODULES_OLD=base,$(sed -n '/^+========/,$p' doc/source/modules130-140.rst | grep - "Done\|Partial\|Nothing" | grep -v "theme_" | sed -r -n 's/((^\| *\|del\| - *)|^\|)([0-9a-z_]*) *\|.*$/\3/g p' | sed '/^\s*$/d' | paste -d, -s) - - MODULES_NEW=base,$(sed -n '/^+========/,$p' doc/source/modules130-140.rst | grep - "Done\|Partial\|Nothing" | grep -v "theme_" | sed -r -n 's/((^\| *\|new\| - *)|^\|)([0-9a-z_]*) *\|.*$/\3/g p' | sed '/^\s*$/d' | paste -d, -s) - - psql $DB -c "update ir_module_module set state='uninstalled' where name not in - ('$(echo $MODULES_OLD | sed -e "s/,/','/g")')" - - echo Testing modules $MODULES_NEW - - OPENUPGRADE_TESTS=1 coverage run $ODOO --database=$DB --update=$MODULES_NEW - --stop-after-init - # try to build the documentation - - pip install sphinx - - sh scripts/build_openupgrade_docs - -after_success: coveralls diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f51566b3aa2d..644ab561e6fb 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$| + .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,49 +33,92 @@ 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$' + - id: obsolete dotfiles + name: obsolete dotfiles + entry: found obsolete files; remove them + files: '^(\.travis\.yml|\.t2d\.yml|CONTRIBUTING\.md)$' + language: fail - repo: https://github.com/oca/maintainer-tools - rev: ab1d7f6 + rev: f9b919b9868143135a9c9cb03021089cabba8223 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/openupgrade"] + args: ["https://github.com/OCA/OpenUpgrade"] + - id: oca-gen-addon-readme + args: + - --addons-dir=. + - --branch=14.0 + - --org-name=OCA + - --repo-name=OpenUpgrade + - --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: ["-i", "--ignore-init-module-imports"] + args: + - --expand-star-imports + - --ignore-init-module-imports + - --in-place + - --remove-all-unused-imports + - --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 + plugin-xml + 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 - - 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@" + - "globals@" - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.2.0 hooks: - id: trailing-whitespace # exclude autogenerated files - exclude: /README\.rst$|\.pot?$|docs + exclude: /README\.rst$|\.pot?$ - id: end-of-file-fixer # exclude autogenerated files - exclude: /README\.rst$|\.pot?$|^openupgrade_scripts/script.*.txt|docs + exclude: /README\.rst$|\.pot?$ - id: debug-statements - id: fix-encoding-pragma args: ["--remove"] @@ -78,7 +127,7 @@ repos: - id: check-executables-have-shebangs - id: check-merge-conflict # exclude files where underlines are not distinguishable from merge conflicts - exclude: /README\.rst$|^docsource/.*\.rst$|docs + exclude: /README\.rst$|^docs/.*\.rst$ - id: check-symlinks - id: check-xml - id: mixed-line-ending @@ -87,8 +136,9 @@ repos: rev: v2.7.2 hooks: - 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 @@ -96,34 +146,30 @@ repos: - --settings=. exclude: /__init__\.py$ - repo: https://github.com/acsone/setuptools-odoo - rev: 2.6.0 + rev: 3.3.2 hooks: - id: setuptools-odoo-make-default - - repo: https://gitlab.com/PyCQA/flake8 - rev: 3.8.3 + - id: setuptools-odoo-get-requirements + args: + - --output + - requirements.txt + - --header + - "# generated from manifests external_dependencies" + - repo: https://github.com/PyCQA/flake8 + rev: 5.0.0 hooks: - id: flake8 - name: flake8 except __init__.py - exclude: /__init__\.py$ - additional_dependencies: ["flake8-bugbear==20.1.4"] - - id: flake8 - name: flake8 only __init__.py - args: ["--extend-ignore=F401"] # ignore unused imports in __init__.py - files: /__init__\.py$ + 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 e33958833edc..6c0a78291f7e 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,3 +1,5 @@ + + [MASTER] load-plugins=pylint_odoo score=n @@ -23,19 +25,25 @@ disable=all enable=anomalous-backslash-in-string, api-one-deprecated, api-one-multi-together, - assignment-from-none, - attribute-deprecated, class-camelcase, - dangerous-default-value, dangerous-view-replace-wo-priority, - development-status-allowed, duplicate-id-csv, - duplicate-key, duplicate-xml-fields, duplicate-xml-record-id, eval-referenced, - eval-used, incoherent-interpreter-exec-perm, + openerp-exception-warning, + redundant-modulename-xml, + relative-import, + rst-syntax-error, + wrong-tabs-instead-of-spaces, + xml-syntax-error, + assignment-from-none, + attribute-deprecated, + dangerous-default-value, + development-status-allowed, + duplicate-key, + eval-used, license-allowed, manifest-author-string, manifest-deprecated-key, @@ -46,40 +54,28 @@ enable=anomalous-backslash-in-string, method-inverse, method-required-super, method-search, - openerp-exception-warning, pointless-statement, pointless-string-statement, print-used, redundant-keyword-arg, - redundant-modulename-xml, reimported, - relative-import, return-in-init, - rst-syntax-error, sql-injection, too-few-format-args, translation-field, translation-required, unreachable, use-vim-comment, - wrong-tabs-instead-of-spaces, - xml-syntax-error, + missing-manifest-dependency, + too-complex, # messages that do not cause the lint step to fail consider-merging-classes-inherited, - create-user-wo-reset-password, - dangerous-filter-wo-user, deprecated-module, - file-not-used, invalid-commit, - missing-manifest-dependency, - missing-newline-extrafiles, missing-readme, - no-utf8-coding-comment, odoo-addons-relative-import, - old-api7-method-defined, redefined-builtin, - too-complex, - unnecessary-utf8-coding-comment + manifest-external-assets [REPORTS] diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory index 08bca3cefef2..e444cb7e21e9 100644 --- a/.pylintrc-mandatory +++ b/.pylintrc-mandatory @@ -1,3 +1,4 @@ + [MASTER] load-plugins=pylint_odoo score=n @@ -16,19 +17,25 @@ disable=all enable=anomalous-backslash-in-string, api-one-deprecated, api-one-multi-together, - assignment-from-none, - attribute-deprecated, class-camelcase, - dangerous-default-value, dangerous-view-replace-wo-priority, - development-status-allowed, duplicate-id-csv, - duplicate-key, duplicate-xml-fields, duplicate-xml-record-id, eval-referenced, - eval-used, incoherent-interpreter-exec-perm, + openerp-exception-warning, + redundant-modulename-xml, + relative-import, + rst-syntax-error, + wrong-tabs-instead-of-spaces, + xml-syntax-error, + assignment-from-none, + attribute-deprecated, + dangerous-default-value, + development-status-allowed, + duplicate-key, + eval-used, license-allowed, manifest-author-string, manifest-deprecated-key, @@ -39,24 +46,18 @@ enable=anomalous-backslash-in-string, method-inverse, method-required-super, method-search, - openerp-exception-warning, pointless-statement, pointless-string-statement, print-used, redundant-keyword-arg, - redundant-modulename-xml, reimported, - relative-import, return-in-init, - rst-syntax-error, sql-injection, too-few-format-args, translation-field, translation-required, unreachable, - use-vim-comment, - wrong-tabs-instead-of-spaces, - xml-syntax-error + use-vim-comment [REPORTS] msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 9ac71fee42a5..000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,10 +0,0 @@ -# OCA Guidelines - -Please follow the official guide from the -[OCA Guidelines page](https://odoo-community.org/page/contributing). - -## Project Specific Guidelines - - - -This project does not have specific coding guidelines. diff --git a/README.md b/README.md index fdb89086af0e..0c5afb6a83e0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ ![Test OpenUpgrade Migration](https://github.com/OCA/OpenUpgrade/actions/workflows/test.yml/badge.svg?branch=14.0) -![OpenUpgrade documentation](https://github.com/OCA/OpenUpgrade/actions/workflows/documentation.yml/badge.svg?branch=14.0) ![pre-commit](https://github.com/OCA/OpenUpgrade/actions/workflows/pre-commit.yml/badge.svg?branch=14.0) -![OpenUpgrade logo](/docsource/images/OpenUpgrade.svg?raw=true) +![OpenUpgrade logo](https://oca.github.io/OpenUpgrade/_images/OpenUpgrade.png) # Tools to upgrade Odoo instances from a major version to another This OCA project aims to provide an diff --git a/docs/.buildinfo b/docs/.buildinfo deleted file mode 100644 index acedee56d4a9..000000000000 --- a/docs/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: a8112f43cfcc43fbce6eb873ea87ab34 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/docs/API.html b/docs/API.html deleted file mode 100644 index 66d3aead39cf..000000000000 --- a/docs/API.html +++ /dev/null @@ -1,1240 +0,0 @@ - - - - - - - - OpenUpgrade API — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

OpenUpgrade API

-

The OpenUpgrade library contains all kinds of helper functions for your pre and -post scripts, in OpenUpgrade itself or in the migration scripts of your own -module (in either major or minor version upgrades). It can be installed with

-
pip install openupgradelib
-
-
-

and then used in your scripts as

-
from openupgradelib import openupgrade
-
-
-
-

General methods

-
-
-openupgradelib.openupgrade.add_fields(env, field_spec)
-

This method adds all the needed stuff for having a new field populated -in the DB (SQL column, ir.model.fields entry, ir.model.data entry…).

-

It’s intended for being run in pre-migration scripts for pre-populating -fields that are going to be declared later in the module.

-

NOTE: This is not needed in >=v12, as now Odoo -always add the XML-ID entry: -https://github.com/odoo/odoo/blob/9201f92a4f29a53a014b462469f27b32dca8fc5a/ -odoo/addons/base/models/ir_model.py#L794-L802, but you can still call -this method for consistency and for avoiding to know the internal PG -column type.

-
-
Param
-

field_spec: List of tuples with the following expected elements -for each tuple:

-
    -
  • field name

  • -
  • model name

  • -
  • SQL table name: Put False if the model is already loaded in the -registry and thus the SQL table name can be obtained that way.

  • -
  • field type: binary, boolean, char, date, datetime, float, html, -integer, many2many, many2one, many2one_reference, monetary, one2many, -reference, selection, text, serialized. The list can vary depending on -Odoo version or custom added field types.

  • -
  • SQL field type: If the field type is custom or it’s one of the special -cases (see below), you need to indicate here the SQL type to use -(from the valid PostgreSQL types): -https://www.postgresql.org/docs/9.6/static/datatype.html

  • -
  • module name: for adding the XML-ID entry.

  • -
  • (optional) initialization value: if included in the tuple, it is set -in the column for existing records.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.add_ir_model_fields(cr, columnspec)
-

Typically, new columns on ir_model_fields need to be added in a very -early stage in the upgrade process of the base module, in raw sql -as they need to be in place before any model gets initialized. -Do not use for fields with additional SQL constraints, such as a -reference to another table or the cascade constraint, but craft your -own statement taking them into account.

-
-
Parameters
-

columnspec – tuple of (column name, column type)

-
-
-
- -
-
-openupgradelib.openupgrade.add_xmlid(cr, module, xmlid, model, res_id, noupdate=False)
-

Adds an entry in ir_model_data. Typically called in the pre script. -One usage example is when an entry has been add in the XML and there is -a high probability that the user has already created the entry manually. -For example, a currency was added in the XML data of the base module -in OpenERP 6 but the user had already created this missing currency -by hand in it’s 5.0 database. In order to avoid having 2 identical -currencies (which is in fact blocked by a sql_constraint), you have to -add the entry in ir_model_data before the upgrade.

-
- -
-
-openupgradelib.openupgrade.check_values_selection_field(cr, table_name, field_name, allowed_values)
-
-

check if the field selection ‘field_name’ of the table ‘table_name’ -has only the values ‘allowed_values’. -If not return False and log an error. -If yes, return True.

-
-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.chunked(records, single=True)
-

Memory and performance friendly method to iterate over a potentially -large number of records. Yields either a whole chunk or a single record -at the time. Don’t nest calls to this method.

-
- -
-
-openupgradelib.openupgrade.column_exists(cr, table, column)
-

Check whether a certain column exists

-
- -
-
-openupgradelib.openupgrade.convert_field_to_html(cr, table, field_name, html_field_name, verbose=True)
-

Convert field value to HTML value.

-
-

New in version 7.0.

-
-
- -
-
-openupgradelib.openupgrade.convert_to_company_dependent(env, model_name, origin_field_name, destination_field_name, model_table_name=None)
-

For each row in a given table, the value of a given field is -set in another ‘company dependant’ field of the same table. -Useful in cases when from one version to another one, some field in a -model becomes a ‘company dependent’ field.

-

This method must be executed in post-migration scripts after -the field is created, or in pre-migration if you have previously -executed add_fields openupgradelib method.

-
-
Parameters
-
    -
  • model_name – Name of the model.

  • -
  • origin_field_name – Name of the field from which the values -will be obtained.

  • -
  • destination_field_name – Name of the ‘company dependent’ -field where the values obtained from origin_field_name will be set.

  • -
  • model_table_name – Name of the table. Optional. If not provided -the table name is taken from the model (so the model must be -registered previously).

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.copy_columns(cr, column_spec)
-

Copy table columns. Typically called in the pre script.

-
-
Parameters
-

column_spec – a hash with table keys, with lists of tuples as -values. Tuples consist of (old_name, new_name, type). Use None for -new_name to trigger a conversion of old_name using get_legacy_name() -Use None for type to use type of old field. -Make sure to quote properly, if your column name coincides with a -SQL directive. eg. ‘“column”’

-
-
-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.copy_fields_multilang(cr, destination_model, destination_table, destination_columns, relation_column, source_model=None, source_table=None, source_columns=None, translations_only=False)
-

Copy field contents including translations.

-
-
Parameters
-
    -
  • destination_model (str) – Name of the destination model where the data will be copied to.

  • -
  • destination_table (str) – Name of the destination table where the data will be copied to. -It must be env[destination_model]._table.

  • -
  • destination_columns (list) – List of column names in the destination_table that will -receive the copied data.

  • -
  • relation_column (str) – Name of a column in destination_table which points to IDs in -source_table. An INNER JOIN will be done to update the -destination records with their corresponding source records only. -Records where this column NULL will be skipped.

  • -
  • source_model (str) – Name of the source model where the data will be copied from. -If empty, it will default to destination_table.

  • -
  • source_table (str) – Name of the source table where the data will be copied from. -If empty, it will default to destination_table. -It must be env[source_model]._table.

  • -
  • source_columns (list) – List of column names in the source_table that will -provide the copied data. -If empty, it will default to destination_columns.

  • -
  • translations_only (bool) – If True, it will only handle transferring translations. Won’t -copy the raw field from source_table.

  • -
-
-
-
-

New in version 12.0.

-
-
- -
-
-openupgradelib.openupgrade.cow_templates_mark_if_equal_to_upstream(cr, mark_colname=None)
-

Record which COW’d templates are equal to their upstream equivalents.

-

This is meant to be executed in a pre-migration script.

-

This only makes sense if:

-
    -
  1. Origin is >= v12.

  2. -
  3. Website was installed. Hint: run this in website’s pre-migration.

  4. -
  5. You are going to run cow_templates_replicate_upstream() in the -end-migration.

  6. -
-
- -
-
-openupgradelib.openupgrade.cow_templates_replicate_upstream(cr, mark_colname=None)
-

Reset COW’d templates to their upstream equivalents.

-

This is meant to be executed in an end-migration script.

-

This only makes sense if:

-
    -
  1. Origin is >= v12.

  2. -
  3. Website was installed. Hint: run this in website’s end-migration.

  4. -
  5. You ran cow_templates_mark_if_equal_to_upstream() in the -pre-migration.

  6. -
-
- -
-
-openupgradelib.openupgrade.date_to_datetime_tz(cr, table_name, user_field_name, date_field_name, datetime_field_name)
-

Take the related user’s timezone into account when converting -date field to datetime in a given table. -This function must be call in post migration script.

-

:param table_name : Name of the table where the field is; -:param user_field_name : The name of the user field (res.users); -:param date_field_name : The name of the old date field; (Typically a legacy name, set in pre-migration script) -:param datetime_field_name : The name of the new date field;

-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.deactivate_workflow_transitions(cr, model, transitions=None)
-

Disable workflow transitions for workflows on a given model. -This can be necessary for automatic workflow transitions when writing -to an object via the ORM in the post migration step. -Returns a dictionary to be used on reactivate_workflow_transitions

-
-
Parameters
-
    -
  • model – the model for which workflow transitions should be deactivated

  • -
  • transitions – a list of (‘module’, ‘name’) xmlid tuples of transitions to be deactivated. Don’t pass this if there’s no specific reason to do so, the default is to deactivate all transitions

  • -
-
-
-
-

New in version 7.0.

-
-
- -
-
-openupgradelib.openupgrade.delete_model_workflow(cr, model, drop_indexes=False)
-

Forcefully remove active workflows for obsolete models, -to prevent foreign key issues when the orm deletes the model.

-
-
Parameters
-
    -
  • cr – DB cursor.

  • -
  • model (str) – Model name.

  • -
  • drop_indexes (bool) – Do I drop indexes after finishing? If False, those will be dropped -by a subsequent update of the workflow module in normal Odoo -probably.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.delete_record_translations(cr, module, xml_ids, field_list=None)
-

Cleanup translations of specific records in a module.

-
-
Parameters
-
    -
  • module – module name

  • -
  • xml_ids – a tuple or list of xml record IDs

  • -
  • field_list – optional list of field names whose translations will be deleted

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.delete_records_safely_by_xml_id(env, xml_ids, delete_childs=False)
-

This removes in the safest possible way the records whose XML-IDs are -passed as argument.

-

If not possible to be removed, and the record is an updatable one -(noupdate=0), it’s switched to noupdate=1, for avoiding a later error when -Odoo performs the regular update cleanup and trying to remove it as well.

-
-
Parameters
-
    -
  • xml_ids – List of XML-ID string identifiers of the records to remove.

  • -
  • delete_childs – If true, also child ids of the given xml_ids will -be deleted.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.delete_sql_constraint_safely(env, module, table, name)
-

In case of obsolete constraints, run this in pre-migration script. -Useful from v14 onwards. -:param module: Module where the sql constraint was declared -:param table: Table where the sql constraint belongs -:param name: Name of the sql constraint as it was declared

-
- -
-
-openupgradelib.openupgrade.disable_invalid_filters(env)
-

It analyzes all the existing active filters to check if they are still -correct. If not, they are disabled for avoiding errors when clicking on -them, or worse, if they are default filters when opening the model/action.

-

To be run at the base end-migration script for having a general scope. Only -assured to work on > v8.

-
-
Parameters
-

env – Environment parameter.

-
-
-
- -
-
-openupgradelib.openupgrade.drop_columns(cr, column_spec)
-

Drop columns but perform an additional check if a column exists. -This covers the case of function fields that may or may not be stored. -Consider that this may not be obvious: an additional module can govern -a function fields’ store properties.

-
-
Parameters
-

column_spec – a list of (table, column) tuples

-
-
-
- -
-
-openupgradelib.openupgrade.float_to_integer(cr, table, field)
-

Change column type from float to integer. It will just -truncate the float value (It won’t round it)

-
-
Parameters
-
    -
  • table – The table

  • -
  • field – The field name for which we want to change the type

  • -
-
-
-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.get_legacy_name(original_name)
-

Returns a versioned name for legacy tables/columns/etc -Use this function instead of some custom name to avoid -collisions with future or past legacy tables/columns/etc

-
-
Parameters
-
    -
  • original_name – the original name of the column

  • -
  • version – current version as passed to migrate()

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.lift_constraints(cr, table, column)
-

Lift all constraints on column in table. -Typically, you use this in a pre-migrate script where you adapt references -for many2one fields with changed target objects. -If everything went right, the constraints will be recreated

-
- -
-
-openupgradelib.openupgrade.load_data(cr, module_name, filename, idref=None, mode='init')
-

Load an xml, csv or yml data file from your post script. The usual case for -this is the -occurrence of newly added essential or useful data in the module that is -marked with “noupdate=‘1’” and without “forcecreate=‘1’” so that it will -not be loaded by the usual upgrade mechanism. Leaving the ‘mode’ argument -to its default ‘init’ will load the data from your migration script.

-

Theoretically, you could simply load a stock file from the module, but be -careful not to reinitialize any data that could have been customized. -Preferably, select only the newly added items. Copy these to a file -in your migrations directory and load that file. -Leave it to the user to actually delete existing resources that are -marked with ‘noupdate’ (other named items will be deleted -automatically).

-
-
Parameters
-
    -
  • module_name – the name of the module

  • -
  • filename – the path to the filename, relative to the module directory. This may also be the module directory relative to –upgrade-path

  • -
  • idref – optional hash with ?id mapping cache?

  • -
  • mode –

    one of ‘init’, ‘update’, ‘demo’, ‘init_no_create’. -Always use ‘init’ for adding new items from files that are marked with -‘noupdate’. Defaults to ‘init’.

    -

    ’init_no_create’ is a hack to load data for records which have -forcecreate=False set. As those records won’t be recreated during the -update, standard Odoo would recreate the record if it was deleted, -but this will fail in cases where there are required fields to be -filled which are not contained in the data file.

    -

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.logged_query(cr, query, args=None, skip_no_result=False)
-

Logs query and affected rows at level DEBUG.

-
-
Parameters
-
    -
  • query – a query string suitable to pass to cursor.execute()

  • -
  • args – a list, tuple or dictionary passed as substitution values -to cursor.execute().

  • -
  • skip_no_result – If True, then logging details are only shown -if there are affected records.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.logging(args_details=False, step=False)
-

This is a decorator for any sub functions called in an OpenUpgrade script. -(pre or post migration script)

-

Decorate functions that can take time, or for debug / development purpose.

-

if a function is decorated, a log will be written each time the function -is called.

-
-
Parameters
-
    -
  • args_details – if True, arguments details are given in the log

  • -
  • step – The log will be done only every step times.

  • -
-
-
-

Typical use:

-
@openupgrade.logging()
-def migrate_stock_warehouses(cr)
-    # some custom code
-
-@openupgrade.logging(step=1000)
-def migrate_partner(cr, partner):
-    # some custom code
-
-@openupgrade.migrate()
-def migrate(cr, version):
-    # some custom code
-    migrate_stock_warehouses(cr)
-
-    for partner in partners:
-        migrate_partner(cr, partner)
-
-
-
- -
-
-openupgradelib.openupgrade.m2o_to_x2m(cr, model, table, field, source_field)
-

Transform many2one relations into one2many or many2many. -Use rename_columns in your pre-migrate script to retain the column’s old -value, then call m2o_to_x2m in your post-migrate script.

-

WARNING: If converting to one2many, there can be data loss, because only -one inverse record can be mapped in a one2many, but you can have multiple -many2one pointing to the same target. Use it when the use case allows this -conversion.

-
-
Parameters
-
    -
  • model – The target model registry object

  • -
  • table – The source table

  • -
  • field – The new field name on the target model

  • -
  • source_field – the (renamed) many2one column on the source table.

  • -
-
-
-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.map_values(cr, source_column, target_column, mapping, model=None, table=None, write='sql')
-

Map old values to new values within the same model or table. Old values -presumably come from a legacy column. -You will typically want to use it in post-migration scripts.

-
-
Parameters
-
    -
  • cr – The database cursor

  • -
  • source_column – the database column that contains old values to be mapped

  • -
  • target_column – the database column, or model field (if ‘write’ is ‘orm’) that the new values are written to

  • -
  • mapping – list of tuples [(old value, new value)] -Old value True represents “is set”, False “is not set”.

  • -
  • model – used for writing if ‘write’ is ‘orm’, or to retrieve the table if ‘table’ is not given.

  • -
  • table – the database table used to query the old values, and write the new values (if ‘write’ is ‘sql’)

  • -
  • write – Either ‘orm’ or ‘sql’. Note that old ids are always identified by an sql read.

  • -
-
-
-

This method does not support mapping m2m, o2m or property fields. For o2m you can migrate the inverse field’s column instead.

-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.merge_models(cr, old_model, new_model, ref_field)
-

Update model references for models that have merged to an existing model. -:param old_model: old model -:param new_model: destination model -:param ref_field: name of the field in new model that references -the id of the old model. Usually created before calling this method.

-

WARNING: This method doesn’t move the records from old_model to new_model -tables. You should have to do that previously in the migration scripts.

-
- -
-
-openupgradelib.openupgrade.message(cr, module, table, column, message, *args, **kwargs)
-

Log handler for non-critical notifications about the upgrade. -To be extended with logging to a table for reporting purposes.

-
-
Parameters
-
    -
  • module – the module name that the message concerns

  • -
  • table – the model that this message concerns (may be False, but preferably not if ‘column’ is defined)

  • -
  • column – the column that this message concerns (may be False)

  • -
-
-
-
-

New in version 7.0.

-
-
- -
-
-openupgradelib.openupgrade.migrate(no_version=False, use_env=None, uid=None, context=None)
-

This is the decorator for the migrate() function -in migration scripts.

-

Set argument no_version to True if the method has to be taken into -account if the module is installed during a migration.

-

Set argument use_env if you want an v8+ environment instead of a plain -cursor. Starting from version 10, this is the default

-

The arguments uid and context can be set when an evironment is -requested. In the cursor case, they’re ignored.

-

The migration function’s signature must be func(cr, version) if -use_env is False or not set and the version is below 10, or -func(env, version) if use_env is True or not set and the version is -10 or higher.

-

Return when the version argument is not defined and no_version is -False and log execeptions.

-

Retrieve debug context data from the frame above for -logging purposes.

-
- -
-
-openupgradelib.openupgrade.move_field_m2o(cr, pool, registry_old_model, field_old_model, m2o_field_old_model, registry_new_model, field_new_model, quick_request=True, compute_func=None, binary_field=False)
-

Use that function in the following case: -A field moves from a model A to the model B with : A -> m2o -> B. -(For exemple product_product -> product_template) -This function manage the migration of this field. -available on post script migration. -:param registry_old_model: registry of the model A; -:param field_old_model: name of the field to move in model A; -:param m2o_field_old_model: name of the field of the table of the model A that link model A to model B; -:param registry_new_model: registry of the model B; -:param field_new_model: name of the field to move in model B; -:param quick_request: Set to False, if you want to use write function to update value; Otherwise, the function will use UPDATE SQL request; -:param compute_func: This a function that receives 4 parameters: cr, pool: common args; id: id of the instance of Model B vals: list of different values. This function must return a unique value that will be set to the instance of Model B which id is ‘id’ param; If compute_func is not set, the algorithm will take the value that is the most present in vals. :binary_field: Set to True if the migrated field is a binary field

-
-

New in version 8.0.

-
-
- -
-
-openupgradelib.openupgrade.reactivate_workflow_transitions(cr, transition_conditions)
-

Reactivate workflow transition previously deactivated by -deactivate_workflow_transitions.

-
-
Parameters
-

transition_conditions – a dictionary returned by deactivate_workflow_transitions

-
-
-
-

New in version 7.0.

-
-
-

Deprecated since version 11.0: Workflows were removed from Odoo as of version 11.0

-
-
- -
-
-openupgradelib.openupgrade.remove_tables_fks(cr, tables)
-

Remove foreign keys declared in tables.

-

This is useful when a table is not going to be used anymore, but you still -don’t want to delete it.

-

If you keep FKs in that table, it will still get modifications when other -tables are modified too; but if you’re keeping that table as a log, that -is a problem. Also, if some of the FK has no index, it could slow down -deletion in other tables, even when this one has no more use.

-
-

Hint

-

This method removes FKs that are declared in tables, -not FKs that point to those tables.

-
-
-
Parameters
-

tables ([str, ...]) – List of tables where the FKs were declared, and where they will be -removed too. If a table doesn’t exist, it is skipped.

-
-
-
- -
-
-openupgradelib.openupgrade.rename_columns(cr, column_spec)
-

Rename table columns. Typically called in the pre script.

-
-
Parameters
-

column_spec – a hash with table keys, with lists of tuples as values. Tuples consist of (old_name, new_name). Use None for new_name to trigger a conversion of old_name using get_legacy_name()

-
-
-
- -
-
-openupgradelib.openupgrade.rename_fields(env, field_spec, no_deep=False)
-

Rename fields. Typically called in the pre script. WARNING: If using -this on base module, pass the argument no_deep with True value for -avoiding the using of the environment (which is not yet loaded).

-

This, in contrast of rename_columns, performs all the steps for -completely rename a field from one name to another. This is needed for -making a complete renaming of a field with all their side features: -translations, filters, exports…

-

Call this method whenever you are not performing a pure SQL column renaming -for other purposes (preserve a value for example).

-

This method performs also the SQL column renaming, so only one call is -needed.

-
-
Parameters
-
    -
  • env – Environment/pool variable. The database cursor is the only -thing needed, but added in prevision of TODO tasks for not breaking -API later.

  • -
  • field_spec – a list of tuples with the following elements: -* Model name. The name of the Odoo model -* Table name. The name of the SQL table for the model. -* Old field name. The name of the old field. -* New field name. The name of the new field.

  • -
  • no_deep – If True, avoids to perform any operation that involves -the environment. Not used for now.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.rename_models(cr, model_spec)
-

Rename models. Typically called in the pre script. -:param model_spec: a list of tuples (old model name, new model name).

-

Use case: if a model changes name, but still implements equivalent -functionality you will want to update references in for instance -relation fields.

-

WARNING: This method doesn’t rename the associated tables. For that, -you need to call rename_tables method.

-
- -
-
-openupgradelib.openupgrade.rename_property(cr, model, old_name, new_name)
-

Rename property old_name owned by model to new_name. This should happen -in a pre-migration script.

-
- -
-
-openupgradelib.openupgrade.rename_tables(cr, table_spec)
-

Rename tables. Typically called in the pre script. -This function also renames the id sequence if it exists and if it is -not modified in the same run.

-
-
Parameters
-

table_spec – a list of tuples (old table name, new table name). Use None for new_name to trigger a conversion of old_name to the result of get_legacy_name()

-
-
-
- -
-
-openupgradelib.openupgrade.rename_xmlids(cr, xmlids_spec, allow_merge=False)
-

Rename XML IDs. Typically called in the pre script. -One usage example is when an ID changes module. In OpenERP 6 for example, -a number of res_groups IDs moved to module base from other modules ( -although they were still being defined in their respective module).

-
-
Parameters
-
    -
  • xmlids_spec – a list of tuples (old module.xmlid, new module.xmlid).

  • -
  • allow_merge – if the new ID already exists, try to merge the records. -This is recommended when renaming module categories, which are -generated on the fly by the Odoo database initialization routine and -may resurface over a longer period of time. In general though, this -option should be avoided. Renaming to existing IDs is usually an -error, and because this method is usually called in the pre-stage, -the applied merge method is by SQL which is incomplete and can lead -to inconsistencies in the database.

  • -
-
-
-
- -
- -

Allow for errors to occur during unlinking of records.

-

Prevent broken database transactions, and by default, catch exceptions.

-
-
Parameters
-
    -
  • records – an iterable (not necessarily recordset) of records to -unlink.

  • -
  • do_raise – when set to True, don’t catch exceptions but let them -be raised.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.set_defaults(cr, pool, default_spec, force=False, use_orm=False)
-

Set default value. Useful for fields that are newly required. Uses orm, so -call from the post script.

-
-
Parameters
-
    -
  • pool – you can pass ‘env’ as well.

  • -
  • default_spec – a hash with model names as keys. Values are lists of tuples (field, value). None as a value has a special meaning: it assigns the default value. If this value is provided by a function, the function is called as the user that created the resource.

  • -
  • force – overwrite existing values. To be used for assigning a non- default value (presumably in the case of a new column). The ORM assigns the default value as declared in the model in an earlier stage of the process. Beware of issues with resources loaded from new data that actually do require the model’s default, in combination with the post script possible being run multiple times.

  • -
  • use_orm – If set to True, the write operation of the default value will be triggered using ORM instead on an SQL clause (default).

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.set_xml_ids_noupdate_value(env, module, xml_ids, value)
-

Set the xml_ids noupdate values in a module.

-
-
Parameters
-
    -
  • module – module name

  • -
  • xml_ids – a tuple or list of xml record IDs

  • -
  • value (bool) – True or False.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.table_exists(cr, table)
-

Check whether a certain table or view exists

-
- -
-
-openupgradelib.openupgrade.update_field_multilang(records, field, method)
-

Update a field in all available languages in the database.

-
-
Parameters
-
    -
  • records – Recordset to be updated.

  • -
  • field (str) – Field to be updated.

  • -
  • method (callable) –

    Method to execute to update the field.

    -

    It will be called with: (old_value, lang_code, record)

    -

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.update_module_moved_fields(cr, model, moved_fields, old_module, new_module)
-

Update module for field definition in general tables that have been -moved from one module to another.

-

No need to use this method: moving the XMLID is covered in -Odoo and OpenUpgrade natively.

-
-
Parameters
-
    -
  • cr – Database cursor

  • -
  • model – model name

  • -
  • moved_fields – list of moved fields

  • -
  • old_module – previous module of the fields

  • -
  • new_module – new module of the fields

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.update_module_moved_models(cr, model, old_module, new_module)
-

Update module for model definition in general tables that have been -moved from one module to another. -:param cr: Database cursor -:param model: Model name -:param old_module: Previous module of the models -:param new_module: New module of the models

-
- -
-
-openupgradelib.openupgrade.update_module_names(cr, namespec, merge_modules=False)
-

Deal with changed module names, making all the needed changes on the -related tables, like XML-IDs, translations, and so on.

-
-
Parameters
-
    -
  • namespec – list of tuples of (old name, new name)

  • -
  • merge_modules – Specify if the operation should be a merge instead -of just a renaming.

  • -
-
-
-
- -
-
-openupgradelib.openupgrade.update_workflow_workitems(cr, pool, ref_spec_actions)
-

Find all the workflow items from the target state to set them to -the wanted state.

-

When a workflow action is removed, from model, the objects whose states -are in these actions need to be set to another to be able to continue the -workflow properly.

-

Run in pre-migration

-
-
Parameters
-

ref_spec_actions – list of tuples with couple of workflow.action’s -external ids. The first id is replaced with the second.

-
-
Returns
-

None

-
-
-
-

New in version 7.0.

-
-
- -
-
-openupgradelib.openupgrade.warn_possible_dataloss(cr, pool, old_module, fields)
-

Use that function in the following case: -if a field of a model was moved from a ‘A’ module to a ‘B’ module. -(‘B’ depend on ‘A’), -This function will test if ‘B’ is installed. -If not, count the number of different value and possibly warn the user. -Use orm, so call from the post script.

-
-
Parameters
-
    -
  • old_module – name of the old module

  • -
  • fields – list of dictionary with the following keys: -‘table’ : name of the table where the field is. -‘field’ : name of the field that are moving. -‘new_module’ : name of the new module

  • -
-
-
-
-

New in version 7.0.

-
-
- -
-
-

Methods for OpenUpgrade 7.0

-

The following specific methods for 7.0 are available. These have been -developed to cover specific needs as per data model changes in that -release.

-
-
-openupgradelib.openupgrade_70.get_partner_id_from_user_id(cr, user_id)
-

Get the new partner_id from user_id. -:param user_id : user previously used.

-
- -
-
-openupgradelib.openupgrade_70.set_partner_id_from_partner_address_id(cr, pool, model_name, partner_field, address_field, table=None)
-

Set the new partner_id on any table with migrated contact ids

-
-
Parameters
-
    -
  • model_name – the model name of the target table

  • -
  • partner_field – the column in the target model’s table that will store the new partner when found

  • -
  • address_field – the legacy field in the model’s table that contains the old address in the model’s table

  • -
  • table – override the target model’s table name in case it was renamed

  • -
-
-
Returns
-

nothing

-
-
-
- -
-
-

Methods for OpenUpgrade 8.0

-

The following specific methods for 8.0 are available. These have been -developed to cover specific needs as per data model changes in that -release.

-
-
-openupgradelib.openupgrade_80.get_last_post_for_model(cr, uid, ids, model_pool)
-

Given a set of ids and a model pool, return a dict of each object ids with -their latest message date as a value. -To be called in post-migration scripts

-
-
Parameters
-
    -
  • cr – database cursor

  • -
  • uid – user id, assumed to be openerp.SUPERUSER_ID

  • -
  • ids – ids of the model in question to retrieve ids

  • -
  • model_pool – orm model pool, assumed to be from pool.get()

  • -
-
-
Returns
-

a dict with ids as keys and with dates as values

-
-
-
- -
-
-openupgradelib.openupgrade_80.set_message_last_post(cr, uid, pool, models)
-

Given a list of models, set their ‘message_last_post’ fields to an -estimated last post datetime. -To be called in post-migration scripts

-
-
Parameters
-
    -
  • cr – database cursor

  • -
  • uid – user id, assumed to be openerp.SUPERUSER_ID

  • -
  • pool – orm pool, assumed to be openerp.pooler.get_pool(cr.dbname)

  • -
  • models – a list of model names for which ‘message_last_post’ needs to be filled

  • -
-
-
Returns
-

-
-
-
- -
-
-openupgradelib.openupgrade_80.update_aliases(cr, registry, model_name, set_parent_thread_id, alias_defaults=None, defaults_id_key=False)
-

Update a model’s aliases according to how they are configured -in the model’s create() method.

-
-
Parameters
-
    -
  • model_name – The name of the model whose aliases are to be updated. The model_id is also set as the aliases’ alias_parent_model_id.

  • -
  • set_parent_thread_id' – When set, set the ids of the resources as their alias’ alias_parent_thread_id

  • -
  • alias_defaults – Static dictionary, recorded as a string on each alias

  • -
  • defaults_id_key – When defined, add this key to each alias’ defaults dictionary with the resource id as its value.

  • -
-
-
-
- -
-
-

Methods for OpenUpgrade 9.0

-

The following specific methods for 9.0 are available. These have been -developed to cover specific needs as per data model changes in that -release.

-

This module provides simple tools for OpenUpgrade migration, specific for -the 8.0 -> 9.0 migration.

-
-
-openupgradelib.openupgrade_90.convert_binary_field_to_attachment(env, field_spec)
-

This method converts the 8.0 binary fields to attachments like Odoo 9.0 -makes with the new attachment=True attribute. It has to be called on -post-migration script, as there’s a call to get the res_name of the -target model, which is not yet loaded on pre-migration.

-

You need to rename the involved column in pre-migration script if you -don’t want to lose your data in the process.

-

This method also removes after the conversion the source column for -avoiding data duplication.

-

This is done through Odoo ORM, because there’s a lot of logic associated -with guessing MIME type, format and length, file saving in store… -that is doesn’t worth to recreate it via SQL as there’s not too much -performance problem.

-
-
Parameters
-
    -
  • env – Odoo environment

  • -
  • field_spec –

    A dictionary with the ORM model name as key, and as -dictionary values a tuple with:

    -
      -
    • field name to be converted as attachment as first element.

    • -
    • SQL column name that contains actual data as second element. If -the second element is None, then the column name is taken -calling get_legacy_name method, which is the typical technique.

    • -
    -

  • -
-
-
-
- -
-
-openupgradelib.openupgrade_90.replace_account_types(env, type_spec, unlink=True)
-

Replace old account types with their replacements. The old account -type is allowed not to exist anymore, except when running unit tests. -:param type_spec: list of tuples (xmlid of old account.account.type, xmlid of new account.account.type) -:param unlink: attempt to unlink the old account type

-
- -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/_images/OpenUpgrade.png b/docs/_images/OpenUpgrade.png deleted file mode 100644 index c688ba747c0d..000000000000 Binary files a/docs/_images/OpenUpgrade.png and /dev/null differ diff --git a/docs/_images/deleted.png b/docs/_images/deleted.png deleted file mode 100644 index 8cf6273281bd..000000000000 Binary files a/docs/_images/deleted.png and /dev/null differ diff --git a/docs/_images/new.png b/docs/_images/new.png deleted file mode 100644 index 00a001da01d0..000000000000 Binary files a/docs/_images/new.png and /dev/null differ diff --git a/docs/_static/alabaster.css b/docs/_static/alabaster.css deleted file mode 100644 index 517d0b29cb11..000000000000 --- a/docs/_static/alabaster.css +++ /dev/null @@ -1,703 +0,0 @@ -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: Georgia, serif; - font-size: 17px; - background-color: #fff; - color: #000; - margin: 0; - padding: 0; -} - - -div.document { - width: 940px; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 220px; -} - -div.sphinxsidebar { - width: 220px; - font-size: 14px; - line-height: 1.5; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #fff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -div.body > .section { - text-align: left; -} - -div.footer { - width: 940px; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -p.caption { - font-family: inherit; - font-size: inherit; -} - - -div.relations { - display: none; -} - - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 0px; - text-align: center; -} - -div.sphinxsidebarwrapper h1.logo { - margin-top: -10px; - text-align: center; - margin-bottom: 5px; - text-align: left; -} - -div.sphinxsidebarwrapper h1.logo-name { - margin-top: 0px; -} - -div.sphinxsidebarwrapper p.blurb { - margin-top: 0; - font-style: normal; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: Georgia, serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar ul li.toctree-l1 > a { - font-size: 120%; -} - -div.sphinxsidebar ul li.toctree-l2 > a { - font-size: 110%; -} - -div.sphinxsidebar input { - border: 1px solid #CCC; - font-family: Georgia, serif; - font-size: 1em; -} - -div.sphinxsidebar hr { - border: none; - height: 1px; - color: #AAA; - background: #AAA; - - text-align: left; - margin-left: 0; - width: 50%; -} - -div.sphinxsidebar .badge { - border-bottom: none; -} - -div.sphinxsidebar .badge:hover { - border-bottom: none; -} - -/* To address an issue with donation coming after search */ -div.sphinxsidebar h3.donation { - margin-top: 10px; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: Georgia, serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #DDD; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #EAEAEA; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - margin: 20px 0px; - padding: 10px 30px; - background-color: #EEE; - border: 1px solid #CCC; -} - -div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fafafa; -} - -div.admonition p.admonition-title { - font-family: Georgia, serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: #fff; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.warning { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.danger { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.error { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.caution { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.attention { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.important { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.note { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.tip { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.hint { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.seealso { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.topic { - background-color: #EEE; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt, code { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -.hll { - background-color: #FFC; - margin: 0 -12px; - padding: 0 12px; - display: block; -} - -img.screenshot { -} - -tt.descname, tt.descclassname, code.descname, code.descclassname { - font-size: 0.95em; -} - -tt.descname, code.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #EEE; - background: #FDFDFD; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.field-list p { - margin-bottom: 0.8em; -} - -/* Cloned from - * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 - */ -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -table.footnote td.label { - width: .1px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin-left: 0; - margin-right: 0; - margin-top: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - /* Matches the 30px from the narrow-screen "li > ul" selector below */ - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #EEE; - padding: 7px 30px; - margin: 15px 0px; - line-height: 1.3em; -} - -div.viewcode-block:target { - background: #ffd; -} - -dl pre, blockquote pre, li pre { - margin-left: 0; - padding-left: 30px; -} - -tt, code { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, code.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fff; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -/* Don't put an underline on images */ -a.image-reference, a.image-reference:hover { - border-bottom: none; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt, a:hover code { - background: #EEE; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: #fff; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: #FFF; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: #fff; - } - - div.sphinxsidebar a { - color: #AAA; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -/* Make nested-list/multi-paragraph items look better in Releases changelog - * pages. Without this, docutils' magical list fuckery causes inconsistent - * formatting between different release sub-lists. - */ -div#changelog > div.section > ul > li > p:only-child { - margin-bottom: 0; -} - -/* Hide fugly table cell borders in ..bibliography:: directive output */ -table.docutils.citation, table.docutils.citation td, table.docutils.citation th { - border: none; - /* Below needed in some edge cases; if not applied, bottom shadows appear */ - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - - -/* relbar */ - -.related { - line-height: 30px; - width: 100%; - font-size: 0.9rem; -} - -.related.top { - border-bottom: 1px solid #EEE; - margin-bottom: 20px; -} - -.related.bottom { - border-top: 1px solid #EEE; -} - -.related ul { - padding: 0; - margin: 0; - list-style: none; -} - -.related li { - display: inline; -} - -nav#rellinks { - float: right; -} - -nav#rellinks li+li:before { - content: "|"; -} - -nav#breadcrumbs li+li:before { - content: "\00BB"; -} - -/* Hide certain items when printing */ -@media print { - div.related { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/basic.css b/docs/_static/basic.css deleted file mode 100644 index eeb0519a69ba..000000000000 --- a/docs/_static/basic.css +++ /dev/null @@ -1,899 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} -dl.field-list > dt:after { - content: ":"; -} - - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/custom.css b/docs/_static/custom.css deleted file mode 100644 index 2a924f1d6a8b..000000000000 --- a/docs/_static/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* This file intentionally left blank. */ diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js deleted file mode 100644 index 527b876ca636..000000000000 --- a/docs/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js deleted file mode 100644 index 4f05322ef6cf..000000000000 --- a/docs/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '14.0', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: false, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/docs/_static/file.png b/docs/_static/file.png deleted file mode 100644 index a858a410e4fa..000000000000 Binary files a/docs/_static/file.png and /dev/null differ diff --git a/docs/_static/jquery-3.5.1.js b/docs/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333b99a..000000000000 --- a/docs/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

After migration

-

OpenUpgrade keeps old model tables and old columns (prefixed with -openupgrade_legacy_ word) in PostgreSQL as a conservative strategy because -they can be used in a later migration script (or to fix an incorrect migration) -or only for reference.

-

After the upgraded database has been running stable for a while, you can -consider removing the obsolete tables and columns to keep your database clean -and tidy (i.e. to restore the consistency between the ORM and the database -layout). The data is orphaned, which means there is no protection from the ORM -when another module or a future version of Odoo reintroduces any table or -column (for a new purpose) that happens to still exist in your database.

-

There’s a module called _database_cleanup_, hosted on OCA server-tools project -(https://github.com/OCA/server-tools), that allows to purge this old data in -an intuitive way.

-

You are also encouraged to have Postgresql run a full vacuum to free up disk -space (see the documentation of your version of Postgresql).

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/analyse.html b/docs/analyse.html deleted file mode 100644 index f3281e9472c8..000000000000 --- a/docs/analyse.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - How to run your own analysis — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

How to run your own analysis

-

If you do need to run your own analysis, you need to perform the following -steps.

-
    -
  • Set up two servers of subsequent Odoo releases. Make the following modules -available: upgrade_analysis and openupgrade_scripts.

    -

    In the case of a release before 14.0, you need to run the fork from the -corresponding branch in https://github.com/oca/openupgrade. That fork also -contains openupgrade_records.

    -
  • -
  • On both instances, install a database without demo data and -install the upgrade_analysis module, which is included in the -OpenUpgrade server distribution. This will add a menu -Upgrade Analysis to the Settings menu.

  • -
  • On both instances, install the modules that you need to write migration -scripts for, or use the Install Modules from the Upgrade Analysis menu.

  • -
  • On both instances: from the analysis menu, start the Generate Records -Wizard.

  • -
  • On the target instance (this is the more recent version): from the -analysis menu, select the Comparison Configuration option and -create a new config to connect to the other instance. In the form view of -this configuration record , start a New Analysis.

  • -
-

The analysis files for each of the modules will be placed in the following -location:

-
    -
  • In the case of Odoo modules: in the path that is indicated by the -–upgrade-path parameter of the Odoo server, or in the scripts -folder of the openupgrade_scripts module directory if it is available in -your addons path

  • -
  • In the case of OCA or custom modules: in the migrations/<version> -directory in the module directory itself.

  • -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/analysis.html b/docs/analysis.html deleted file mode 100644 index 8ef6eb798e0c..000000000000 --- a/docs/analysis.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - Database analysis — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Database analysis

-

Database analysis files are hosted in scripts subdirectory of the -openupgrade_scripts module directory in the https://github.com/oca/openupgrade -repository.

-

You can create a custom set of analysis files on any set of modules between -any two versions of Odoo using the upgrade_analysis module that is hosted -in https://github.com/oca/server-tools.

-
-

Earlier versions

-

In editions earlier than 14.0, the analysis files were hosted in the forks of -Odoo at https://github.com/oca/openupgrade. The module to create the analysis -was placed in each branch of the openupgrade repository under -odoo/addons/openupgrade_records.

-
-
-

Contents

-

The contents of the migration directory per module are:

-
    -
  • A file openupgrade_analysis.txt that contains data model changes and -changes in the set of XML records

  • -
  • A file openupgrade_analysis_work.txt which is a copy of the previous file, -annotated by the developers of the migration scripts

  • -
  • A file noupdate_changes.xml containing changes that may need to be loaded -during module migration (after reviewing the contents of this automatically -generated file).

  • -
  • A file pre-migration.py (or any Python file(s) starting with pre-) that -is executed by the Odoo migration manager just before the module is loaded.

  • -
  • A file post-migration.py (or any Python file(s) starting with post-) that -is executed by the Odoo migration manager right after the module was loaded.

  • -
  • A file end-migration.py (or any Python file(s) starting with end-) that -is executed by the Odoo migration manager when all modules have been -processed.

  • -
-

The migration directory of the base module contains an additional file -openupgrade_general_log.txt. This file contains some statistics as well -as the analysis records of modules that could not be found in the target -release of Odoo anymore.

- -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/community.html b/docs/community.html deleted file mode 100644 index b92ab453891d..000000000000 --- a/docs/community.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - Community involvement — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Community involvement

-

Writing migration scripts for Odoo is a lot of work, that can not be -accomplished by a single party. We need your help.

-

If you are at all interested in discussing stategic, functional or -technical issues, please post an issue on the Github project: -https://github.com/OCA/OpenUpgrade.

-

If you are a developer, give the OpenUpgrade software a go and give us -feedback. If you use the software, provide the project with your issue -reports and any migration scripts that you develop. Help to improve the -developer tools and any existing or newly proposed migration script -contributed by others.

-

If you are an Odoo consulting company, use the tools to help your -customers migrate to a newer major release of Odoo and contribute -the scripts that you developed in the process.

-

If you are are using Odoo professionally within your organisation, -consider hiring a Odoo consulting company to migrate your configuration -using the technology provided by this project, and insist that the -resulting migration scripts be contributed back.

-

If you are an independent, knowledgable user of Odoo and the OpenUpgrade -project covers the modules that you have in use, try and use the software -to upgrade a copy of your database and give us feedback.

-

Thank you!

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/coverage_legend.html b/docs/coverage_legend.html deleted file mode 100644 index 87c8aaf829dd..000000000000 --- a/docs/coverage_legend.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - <no title> — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -

A module can have one of the following statuses:

-
    -
  • Nothing to do: Analyse has been done, and there is nothing to do or -there’s no change between the old edition and the new one;

  • -
  • Done: Scripts are ready to run and can be found in this distribution;

  • -
  • <Empty>: Not covered yet. Please see the ‘openupgrade_analysis.txt’ file -of the module and start hacking the migration scripts!

  • -
-

You will always find migration scripts that are ready for review or -work-in-progress at https://github.com/OCA/OpenUpgrade/pulls. Please have a -look to see if you can help out.

-

In the table below, modules that are new in this release are marked with -new. Modules that are missing in the new release are marked with del.

- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/development.html b/docs/development.html deleted file mode 100644 index 9b493e8feb7e..000000000000 --- a/docs/development.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - Migration script development — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Migration script development

-
-

Overview

-

The execution of the migration scripts is triggered by the “Migration Manager”: -The Odoo Migration Manager.

-

As explained with more detail in the page The Odoo Migration Manager, the migration scripts -of a module are usually the combination of 3 python files (might be less if some -steps are not necessary):

-
    -
  • pre-migration.py

  • -
  • post-migration.py

  • -
  • end-migration.py

  • -
-

Since version 14, these files can be found here:

-

openupgrade_scripts/scripts/<module-name>

-

Each of those files will contain a function migrate which is called by the -Migration Manager.

-

Then, the function migrate will call other functions. Each of these functions -will execute a task of the migration, these functions are the one which -needs most of the work from developers. These functions are usually declared in the -same file.

-

Luckily, many pre-existing functions already exist within openupgradelib reducing -significantly the work of development. -See OpenUpgrade API

-

For many modules, a developer will not even need to write any function, but will -“simply” need to call pre-existing functions from openupgradelib with the appropriate -arguments. The main complexities becomes to learn what are the functions available in -openupgradelib and then to select appropriatly the arguments (usually according to -the openupgrade_analysis.txt, see below).

-

For instance, the migration to version 13 of mass_mailing did not require any custom -function: https://github.com/OCA/OpenUpgrade/pull/2273/files

-

After this introduction, which highlight how simple the migration scripts can be, -do not underestimate the power of OpenUpgrade. -The migration of the account module to version 13 is the kind of situation where -the full power of OpenUpgrade was unleashed to successfully overcome the -“acc-pocalypse”: -https://github.com/OCA/OpenUpgrade/pull/2275/files.

-
-
-

Learn from existing migration scrips

-

Since version 14, the migration scripts are located in:

-

openupgrade_scripts/scripts/<module-name>

-

During the review for a given module, you can follow this process:

-
    -
  • Review the analysis (read more in Database analysis). First the file -openupgrade_analysis.txt showing some differences between the 2 versions of -the module. Then, openupgrade_analysis_work.txt to see what the developer -planned to do.

  • -
  • Then you can check the other files to see how the plan was achieved.

  • -
-

You should pick modules with which you are familiar with in both version and for which -you are aware of the changes.

-
-
-

Learn from code review of open PRs

-

https://github.com/OCA/OpenUpgrade/pulls

-

This will engage you in a discussion with other contributors and help you understand -how developers selected one way or another to implement the migration scripts.

-
-
-

The Trial and error process for the development of your scripts

-

Basically, this is the happening during the step when you try to run the upgrade -described in Running the migration:

-
    -
  • [A] get the copy of your database in old version as db-upgrade, it is -easy to do through the database manager of your old odoo -http://localhost:8069/web/database/manager

  • -
  • [B] run odoo -d db-upgrade -u all --stop-after-init

  • -
  • [C] In case of error, fix the error adding or editing migration -scripts within the module to fix, then rerun with -u <fixed_module> -instead of -u all. -This way of running is only done for testing purposes and will help you -save a lot of time in the development process. -Whenever facing unexpected errors, you might want to restart from [A] as -this step will leave your database in an inconsistent state.

  • -
  • [D] After all issues are fixed go back to --update all to ensure that all -dependent modules have been upgraded.

  • -
-
-

Restart the upgrade of the failed module instead of upgrading all systematically

-

As an alternative to the step [C] mentioned above…

-

In case of error, fix the error (adding or editing migration -scripts), then rerun without the --update all: -odoo -d db-upgrade --stop-after-init. This will continue the upgrade -process from where it left off, starting with the module that caused the -error. That way, the migration will not run the end-migration scripts of -the modules that were already upgraded before the error. But in case of a -live migration you always need to restore the database.

-

Note that for the time being, this is not available in all versions -(see explanations here: https://github.com/OCA/OpenUpgrade/pull/2499). -It is available only for 12 and 13: -https://github.com/OCA/OpenUpgrade/pulls?q=is%3Apr+%5BFIX%5D+reset+exception

-
-
-
-

Learning resources

- -

You can also refer to the following:

- -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/devfaq.html b/docs/devfaq.html deleted file mode 100644 index 10830c55da79..000000000000 --- a/docs/devfaq.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - Development FAQ — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Development FAQ

-
-
How are new dependencies treated by the Odoo migration manager?

New dependencies (like the edi module is a new dependency of the -account module) will be detected by the upgrade process. The -Odoo server code is slightly modified to loop over this part -of the process to install new dependencies and then return to -upgrading the modules that depend on them, until no more modules -are processed.

-
-
Are migration scripts fired when installing new modules?

Yes. That includes any new dependencies that the new version of any -module might declare. You might want to check for a non true value -of the version argument, or (better) make your script robust to -running against a database that it does not apply to, in anticipation -of any unknown unknowns. Also another argument for not running the -OpenUpgrade server in production, even though we both know that you -would never ever do so anyway. Developers are free to corrupt the regular -workings of Odoo if it helps the migration. For instance, from Openupgrade -9.0 on, the workflow engine is disabled during field recomputation.

-
-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/format.html b/docs/format.html deleted file mode 100644 index 056c2ae0b747..000000000000 --- a/docs/format.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - Fields analysis format — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Fields analysis format

-

The first section displays models which are removed from the database. -The second section displays models which are added to the database.

-

TODO: display which models moved to another module, instead of in the field -analysis? It should also be clear how to install such modules from the upgrade

-

The second section lists the model fields which have been signalled by the -analysis script. Every line lists the following columns:

-

module / model / field (field type) : description of the change

-

Multiple changes per field are listed on separate lines. -If possible, the old situation is added to the change description (in between -parentheses).

-

The change description flags the following types of change:

-
-
    -
  • The field is now required. The upgrade script might apply the default for -this field, if it is encoded in the model, or any value that you might see -fit (see the openupgrade library -function set_defaults()). If any empty values remain, -these can be reported by the openupgrade report module (TODO). -If the field is a function field after the upgrade, this changes the cause -for action. See below.

  • -
  • A field is now a function or a related field. This might or might not call -for any action of your upgrade script, as the value is now automatically -determined. At the same time, this might cause data loss. An example is -the field employee’s manager (hr module), which in Odoo 6 is derived -from the employee’s department.

    -

    Without any action in the upgrade script, you will lose the manually -encoded employee hierarchy.

    -
  • -
  • A selection field’s hardcoded selection changes. You need to audit the -function for any change in possible values and may need to map any -differences you encounter.

  • -
  • A selection field’s selection is now being filled by a function or has -stopped doing so. You need to audit the function for any change in -possible values and may need to map any differences you encounter.

    -

    (Of course, a selection function could change the set of posible values -in between functions.)

    -
  • -
  • The field changes type. This always calls for action in your upgrade -script. Rename the database column to a temporary name in the pre script, -then migrate the values in the post script. A typical instance of this -change is when the field becomes a many2one lookup table, or the other way -around. An example of these are the partner’s function which became a char -field in Odoo 6, and the partner’s title which as a selection (thus -char type database column) and had to be migrated to a many2one on -res.partner.title.

  • -
  • A relation field’s relation changes. You need to migrate the one target -model to the other, and update the references to them

  • -
  • A field is deleted from the model (marked by ‘DEL’). Also fields from -deleted models are marked in this way. TODO: mark fields from deleted -models in a distinct manner. Any distinct features of the field are -displayed, for easier manual matching. -You need to audit any new fields -(see below) to see if they correspond to the deleted field and implement -this change in your upgrade script. It might also be the case that a -deleted field is now delegated to a new or existing _inherits table (see below).

  • -
  • A field is introduced in the model (marked by ‘NEW’). Also fields from -introduced models are marked in this way. TODO: mark fields from introduced -models in a distinct manner? Any distinct features of the field are -displayed, for easier manual matching. You need to audit any deleted -fields (see below) to see if they correspond to the new field and -implement this change in your upgrade script.

  • -
  • The _inherits property of a model has changed. It might be the case that -fields which are removed are actually delegated to this newly -inherited table.

  • -
  • A new model is introduced. Copy all access data from the access csv and -security rules xml files and load them in your script. Also copy any -other data that may be introduced in this release of Odoo. This may -have consequences for other modules’ migration scripts. TODO: create an -overview of new or renamed modules.

  • -
-
-

The final section of the database layout analysis contains a simple report on -the changes that were detected.

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/genindex.html b/docs/genindex.html deleted file mode 100644 index 80b765b1e7c2..000000000000 --- a/docs/genindex.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - - Index — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- - -

Index

- -
- A - | C - | D - | F - | G - | L - | M - | O - | R - | S - | T - | U - | W - -
-

A

- - - -
- -

C

- - - -
- -

D

- - - -
- -

F

- - -
- -

G

- - - -
- -

L

- - - -
- -

M

- - - -
- -

O

- - - -
    -
  • - openupgradelib.openupgrade - -
  • -
  • - openupgradelib.openupgrade_70 - -
  • -
    -
  • - openupgradelib.openupgrade_80 - -
  • -
  • - openupgradelib.openupgrade_90 - -
  • -
- -

R

- - - -
- -

S

- - - -
- -

T

- - -
- -

U

- - - -
- -

W

- - -
- - - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 64d7b95f1c59..000000000000 --- a/docs/index.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - Welcome to OpenUpgrade’s documentation! — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- - _images/OpenUpgrade.png -
-

Welcome to OpenUpgrade’s documentation!

-

If you just want to migrate your database and don’t care about the technical details, refer to Running the migration

-

Contents:

-
- -
-

You should find the latest version of this documentation here: https://oca.github.io/OpenUpgrade

-
-

Indices and tables

- -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/intro.html b/docs/intro.html deleted file mode 100644 index 201b154615d3..000000000000 --- a/docs/intro.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - Introduction — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Introduction

-

Odoo is an open source business application suite and development platform. -This project, OpenUpgrade, aims to provide an Open Source upgrade path for -Odoo. This is a community initiative, as the open source version of Odoo -does not support migrations from one major release to another. Instead, -migrations are part of a support package sold by Odoo SA. Note that the name -of the project refers to the old name of Odoo, OpenERP.

-

The project is hosted as two separate GitHub projects:

- -

The branches in the first project contain the framework, as well as the -database analysis and the migration scripts.

-

The second project contains a library with helper functions. It -can be used in the migration of any Odoo module.

-
-

Older versions

-

Before Odoo 14.0, the branches in https://github.com/OCA/openupgrade -contain copies (or forks in Git terminology) of the Odoo main project, but -with extra commits that include the framework, and the analysis and the -migration scripts for each module.

-
-
-

Contribute

-

In order to contribute to the OpenUpgrade project, please

- -
-
- - - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/migration_details.html b/docs/migration_details.html deleted file mode 100644 index 70854aed01a4..000000000000 --- a/docs/migration_details.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - Running the migration — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Running the migration

-

Check out the code manually and upgrade your database by calling odoo-bin, -(or openerp-server) directly. You will want to do this when you are working on -developing migration scripts for uncovered modules.

-
-

1. Get the code from OpenUpgrade and dependencies

-
-

OpenUpgrade

-

Make the openupgrade_framework and the openupgrade_scripts modules -available in the addons path in the Odoo instance of the new version.

-

Or, for older versions: check out the OpenUpgrade source code from Github -for the branches you need. Each branch migrates to its version from the -previous version, so branch 13.0 migrates from 12.0 to 13.0. If you are -migrating across multiple versions, you need to run each version of -OpenUpgrade in order. Skipping versions is not supported.

-

The OpenUpgrade repository includes both openupgrade_framework and -openupgrade_scripts:

-

https://github.com/OCA/openupgrade

-
-
-

openupgradelib

-
    -
  • When installing the openupgradelib make sure you check out the latest version -from github to get the latest updates and fixes:

    -
    pip install git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib
    -
    -
    -
  • -
-
-
-
-

2. Check coverage of the migration scripts for your installed modules

-

Check if there are migration scripts provided for the set of modules that -are installed in your Odoo database. If there are modules for which no -migration scripts have been developed yet, your migration may fail or the -integrity of your database may be lacking. Check the module coverage in -this documentation under Module coverage and refer to the Migration script development -documentation to add the missing migration scripts.

-
-
-

3. Make a copy of the database to migrate

-

Decide which database you are going to upgrade. You absolutely must make a -backup of your live database before you start this process!

-
-
-

4. Adjust the configuration for Odoo and OpenUpgrade

-

Edit the configuration files and command line parameters to point to the -database you are going to upgrade. The recommended command line parameters are the ---update all --stop-after-init --load=base,web,openupgrade_framework flags.

-

For versions earlier than 14.0 that are running the OpenUpgrade fork rather -than Odoo itself, you do not pass the load parameter.

-
-

Configuration options

-
    -
  • When migrating across several versions of Odoo, setting the target version -as an environment variable allows OpenUpgrade to skip methods that are called -in every version but really only need to run in the target version. Make the -target version available to OpenUpgrade with:

    -
    export OPENUPGRADE_TARGET_VERSION=13.0
    -
    -
    -

    (when migrating up to 13.0)

    -
  • -
-
-
-

Obsolete options in the Odoo configuration file

-

Versions of OpenUpgrade earlier than 14.0 allow for the following configuration -options. Add these options to a separate stanza in the server configuration -file under a header [openupgrade]

-
    -
  • autoinstall - A dictionary with module name keys and lists of module names -as values. If a key module is installed on your database, the modules from -the value (and their dependencies) are selected for installation as well.

  • -
  • force_deps - A dictionary with module name keys and lists of module names -as values. If a key module is installed on your database, the modules from -the value will be treated as a module dependency. With this directive, you -can manipulate the order in which the modules are migrated. If the modules -from the value are not already installed on your database, they will be -selected for installation (as will their dependencies). Be careful not to -introduce a circular dependency using this directive.

  • -
-
-
-
-

5. Run the upgrade, fix data and repeat…

-

Run the upgrade and check for errors. You will probably learn a lot about -your data and have to do some manual clean up before and after the upgrade. -Expect to repeat the process several times as you encounter errors, clean up -your data, and try again. If necessary, ask for help or report bugs on -Github.

-
-

Write the missing migration scripts

-

At this stage, if some of your modules don’t have yet migration scripts, -you might need to add them yourself. -Read more about the development of migrations scripts in Migration script development

-
-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/migrationmanager.html b/docs/migrationmanager.html deleted file mode 100644 index 3c6d812072de..000000000000 --- a/docs/migrationmanager.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - The Odoo Migration Manager — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

The Odoo Migration Manager

-

The core mechanism that OpenUpgrade relies on is the migration manager that is -already built into Odoo itself. It is this mechanism that was used by Odoo to -run migrations back in the days before TinyERP 4.2 when migration scripts where -still included in the code. The same mechanism is probably still used by Odoo -internally to run the proprietary migration, and occassionally it is used in -the code to fix glitches during the Odoo release lifecycle. For an example, -see https://github.com/odoo/odoo/commit/8b02879ff5.

-

Please have a look at the docstring of the Odoo migration manager: -https://github.com/odoo/odoo/blob/7c95c14c06d77e5ebbd7aafd9c0c345b47d27d30/odoo/modules/migration.py#L23. You will see that migration scripts are organized in the migrations -subdirectory in the module itself, in subdirectories per module version. The -scripts will be executed when the module is upgraded, if the installed version -of the module is lower than the name of the versioned directories.

-

There are three migration stages at which you can have migration scripts -executed: before the module is loaded (pre stage), after the module is -loaded into the database (post stage) and when all the modules are loaded -(end stage). The end stage was introduced into Odoo 9.0. In earlier versions -of OpenUpgrade, a file odoo/openupgrade/deferred_<VERSION>.py was -maintained to collect migration steps to be run after a full upgrade.

-

Note that you can use this mechanism for your own custom -module’s lifecycle outside of the OpenUpgrade context. For that reason, the -OpenUpgrade helper methods were collected into the python Openupgradelib that -you can make available in any Odoo instance using the pip tool.

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules100-110.html b/docs/modules100-110.html deleted file mode 100644 index dd11b56afd98..000000000000 --- a/docs/modules100-110.html +++ /dev/null @@ -1,1072 +0,0 @@ - - - - - - - - Module coverage 10.0 -> 11.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 10.0 -> 11.0

-

Status :

-
    -
  • Empty : No information available : Please see the -‘openupgrade_analysis.txt’ file of the module and share your analyse;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do or -there’s no change between 10.0 and 11.0;

  • -
  • ‘Work in progress’ : Analyse / Work in progress. Please review the -merge proposals at https://github.com/OCA/OpenUpgrade/pulls

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
-

Modules that are new in this release are marked with new. Modules that are -missing in the new release are marked with del.

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

del account_accountant

account_analytic_default

Nothing to do

account_asset

Nothing to do

account_bank_statement_import

Nothing to do

account_budget

account_cancel

Nothing to do

account_cash_basis_base_account

account_check_printing

Done

new account_invoicing

Done (installed when account is installed)

account_lock

new account_payment

del account_tax_cash_basis

Done (merged in account)

account_tax_python

Done

account_test

Nothing to do

account_voucher

Nothing to do

analytic

Nothing to do

anonymization

association

Nothing to do

auth_crypt

Nothing to do

auth_ldap

Nothing to do

auth_oauth

Nothing to do

auth_signup

Done

barcodes

Nothing to do

base

Done

del base_action_rule

Done - Renamed to base_automation

new base_address_city

Nothing to do

new base_address_extended

new base_automation

Done - Renamed from base_action_rule

base_gengo

base_geolocalize

Nothing to do

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

base_setup

Nothing to do

new base_sparse_field

base_vat

Nothing to do

new base_vat_autocomplete

board

Nothing to do

bus

Nothing to do

calendar

Done

new calendar_sms

contacts

Nothing to do

crm

Done

new crm_livechat

new crm_phone_validation

new crm_project

Done - Renamed from crm_project_issue

del crm_project_issue

Done - Renamed to crm_project

decimal_precision

Nothing to do

delivery

Done

document

Nothing to do

event

Done

event_sale

Done

fetchmail

Done

fleet

Done

gamification

gamification_sale_crm

google_account

Nothing to do

google_calendar

Done

google_drive

Done

google_spreadsheet

Nothing to do

hr

Nothing to do

hr_attendance

Done

hr_contract

Done

hr_expense

Done

hr_expense_check

hr_gamification

hr_holidays

Done

hr_maintenance

Nothing to do

new hr_org_chart

hr_payroll

hr_payroll_account

hr_recruitment

Done

hr_recruitment_survey

hr_timesheet

Done

hr_timesheet_attendance

Nothing to do

del hr_timesheet_sheet

Moved to OCA 1

new http_routing

Nothing to do

hw_blackbox_be

hw_escpos

hw_posbox_homepage

hw_posbox_upgrade

hw_proxy

hw_scale

hw_scanner

hw_screen

new iap

im_livechat

l10n_ae

l10n_ar

l10n_at

l10n_au

l10n_be

l10n_be_hr_payroll

l10n_be_hr_payroll_account

new l10n_be_hr_payroll_fleet

l10n_be_intrastat

l10n_be_intrastat_2019

l10n_be_invoice_bba

l10n_bo

l10n_br

l10n_ca

l10n_ch

Done

l10n_cl

l10n_cn

l10n_cn_small_business

l10n_cn_standard

l10n_co

l10n_cr

l10n_de

Nothing to do

l10n_de_skr03

Done

l10n_de_skr04

Done

l10n_do

Done

l10n_ec

l10n_es

Done

l10n_et

l10n_eu_service

l10n_fr

Done

l10n_fr_certification

l10n_fr_fec

l10n_fr_hr_payroll

l10n_fr_pos_cert

l10n_fr_sale_closing

l10n_generic_coa

l10n_gr

l10n_gt

l10n_hn

l10n_hr

l10n_hu

l10n_in

l10n_in_hr_payroll

new l10n_in_purchase

new l10n_in_sale

l10n_in_schedule6

new l10n_in_stock

l10n_it

l10n_jp

l10n_lu

l10n_ma

l10n_multilang

Nothing to do

l10n_mx

l10n_nl

l10n_no

l10n_nz

l10n_pa

l10n_pe

l10n_pl

l10n_pt

Done

l10n_ro

l10n_sa

l10n_sg

l10n_si

l10n_syscohada

l10n_th

l10n_tr

l10n_uk

l10n_us

l10n_uy

l10n_ve

l10n_vn

link_tracker

Nothing to do

lunch

mail

Done

maintenance

Nothing to do

del marketing_campaign

del marketing_campaign_crm_demo

mass_mailing

Done

new mass_mailing_event

Nothing to do

new mass_mailing_event_track

membership

Done

mrp

Done

mrp_byproduct

Nothing to do

mrp_repair

Done

note

Nothing to do

note_pad

pad

Nothing to do

pad_project

Done

payment

Done

payment_adyen

payment_authorize

payment_buckaroo

payment_ogone

payment_paypal

Done

payment_payumoney

payment_sips

payment_stripe

payment_stripe_sca

payment_transfer

Done

new phone_validation

point_of_sale

Done

portal

Nothing to do

del portal_gamification

Done (merged in gamification)

del portal_sale

Done (merged in sale)

del portal_stock

Done (merged in portal)

pos_cache

pos_data_drinks

pos_discount

pos_mercury

pos_reprint

pos_restaurant

new pos_sale

del procurement

Done (merged in stock)

procurement_jit

Nothing to do

product

Done

product_email_template

product_expiry

Nothing to do

product_extended

Nothing to do

product_margin

Nothing to do

project

Done

del project_issue

Done (merged in project as project_task)

del project_issue_sheet

Done (merged in hr_timesheet)

new project_timesheet_holidays

purchase

Done

purchase_mrp

Nothing to do

purchase_requisition

Done

rating

Done

rating_project

del rating_project_issue

del report

Done (merged in base)

report_intrastat

Nothing to do

resource

Done

sale

Done

sale_crm

Nothing to do

sale_expense

Nothing to do

new sale_management

sale_margin

Nothing to do

sale_mrp

Nothing to do

sale_order_dates

Nothing to do

new sale_payment

sale_service_rating

sale_stock

Done

sale_timesheet

Done

sales_team

Done

stock

Done

stock_account

Done (real product valuation not yet covered’)

del stock_calendar

stock_dropshipping

Done

stock_landed_costs

Done

new stock_picking_batch

Done - Renamed from stock_picking_wave

del stock_picking_wave

Done - Renamed to stock_picking_batch

del subscription

survey

Done

survey_crm

Nothing to do

theme_bootswatch

Nothing to do

theme_default

Nothing to do

new transifex

utm

Nothing to do

web

Done

del web_calendar

Done (merged in web)

web_diagram

Nothing to do

web_editor

Nothing to do

del web_kanban

Done (merged in web)

web_kanban_gauge

Nothing to do

web_planner

Nothing to do

web_settings_dashboard

Nothing to do

web_tour

Nothing to do

website

Done

website_blog

Nothing to do

website_crm

Done

website_crm_partner_assign

Nothing to do

new website_crm_phone_validation

website_customer

Nothing to do

website_event

Done

website_event_questions

Nothing to do

website_event_sale

Done

website_event_track

Done

website_form

Nothing to do

new website_form_project

Done - Renamed from website_issue

website_forum

website_forum_doc

website_gengo

website_google_map

Nothing to do

website_hr

Done

website_hr_recruitment

Nothing to do

del website_issue

Done - Renamed to website_form_project

website_links

Nothing to do

website_livechat

website_mail

Nothing to do

website_mail_channel

Nothing to do

website_mass_mailing

Nothing to do

website_membership

Nothing to do

website_partner

Nothing to do

website_payment

Nothing to do

del website_portal

Done (merged in website)

del website_portal_sale

del website_project

Done (merged in project)

del website_project_issue

Done (merged in project)

del website_project_issue_sheet

del website_project_timesheet

Done (merged in hr_timesheet)

website_quote

new website_rating

new website_rating_project

Done - Renamed from website_rating_project_issue

del website_rating_project_issue

Done - Renamed to website_rating_project

website_sale

Done

new website_sale_comparison

website_sale_delivery

Done

website_sale_digital

new website_sale_management

website_sale_options

Nothing to do

website_sale_stock

Nothing to do

new website_sale_stock_options

new website_sale_wishlist

website_slides

Nothing to do

website_theme_install

website_twitter

-
-
1
-

‘HR Timesheet Sheet’ Module is now under Community Association Umbrella: -See : https://github.com/OCA/hr-timesheet/tree/11.0/hr_timesheet_sheet

-
-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules110-120.html b/docs/modules110-120.html deleted file mode 100644 index 2d6b8116b37c..000000000000 --- a/docs/modules110-120.html +++ /dev/null @@ -1,1136 +0,0 @@ - - - - - - - - Module coverage 11.0 -> 12.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 11.0 -> 12.0

-

Status :

-
    -
  • Empty : No information available : Please see the -‘openupgrade_analysis.txt’ file of the module and share your analyse;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do or -there’s no change between 11.0 and 12.0;

  • -
  • ‘Work in progress’ : Analyse / Work in progress. Please review the -merge proposals at https://github.com/OCA/OpenUpgrade/pulls

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
-

Modules that are new in this release are marked with new. Modules that are -missing in the new release are marked with del.

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

account_analytic_default

Nothing to do

del account_asset

Replaced by OCA module 1

account_bank_statement_import

Nothing to do

del account_budget

Replaced by OCA module 2

account_cancel

Nothing to do

del account_cash_basis_base_account

Nothing to do. Merged into account

account_check_printing

Nothing to do

new account_facturx

del account_invoicing

Nothing to do. Merged into account

account_lock

account_payment

Nothing to do

account_tax_python

Nothing to do

account_test

Nothing to do

account_voucher

Done

analytic

Done

del anonymization

association

Nothing to do

del auth_crypt

Done. Merged into base

auth_ldap

Nothing to do

auth_oauth

Done

auth_signup

Done

barcodes

Done

base

Done

base_address_city

Nothing to do

base_address_extended

Done

base_automation

Nothing to do

base_gengo

Nothing to do

base_geolocalize

Nothing to do

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

Nothing to do

base_setup

Nothing to do

base_sparse_field

Nothing to do

base_vat

Nothing to do

del base_vat_autocomplete

Done. Renamed to partner_autocomplete

board

Done

bus

Nothing to do

calendar

Done

calendar_sms

Nothing to do

contacts

Nothing to do

crm

Done

crm_livechat

Nothing to do

crm_phone_validation

Nothing to do

crm_project

Nothing to do

new crm_reveal

decimal_precision

Nothing to do

delivery

Done

new digest

Nothing to do

document

Nothing to do

event

Done

event_sale

Done

fetchmail

Nothing to do

new fetchmail_gmail

new fetchmail_outlook

fleet

Done

gamification

Done

gamification_sale_crm

google_account

Nothing to do

google_calendar

Nothing to do

google_drive

Nothing to do

new google_gmail

google_spreadsheet

Nothing to do

hr

Done

hr_attendance

Nothing to do

hr_contract

Done

hr_expense

Done

hr_expense_check

Nothing to do

hr_gamification

hr_holidays

Done

hr_maintenance

Nothing to do

hr_org_chart

Nothing to do

hr_payroll

Done

hr_payroll_account

Nothing to do

hr_recruitment

Done

hr_recruitment_survey

Nothing to do

hr_timesheet

Done

hr_timesheet_attendance

Nothing to do

http_routing

Nothing to do

hw_blackbox_be

new hw_drivers

hw_escpos

hw_posbox_homepage

hw_posbox_upgrade

hw_proxy

hw_scale

hw_scanner

hw_screen

iap

Nothing to do

im_livechat

Nothing to do

new im_livechat_mail_bot

Nothing to do

new im_support

l10n_ae

l10n_ar

l10n_at

l10n_au

l10n_be

Nothing to do

l10n_be_hr_payroll

l10n_be_hr_payroll_account

l10n_be_hr_payroll_fleet

del l10n_be_intrastat

del l10n_be_intrastat_2019

l10n_be_invoice_bba

Done

l10n_bo

l10n_br

l10n_ca

l10n_ch

Done

l10n_cl

l10n_cn

new l10n_cn_city

l10n_cn_small_business

l10n_cn_standard

l10n_co

l10n_cr

l10n_de

l10n_de_skr03

l10n_de_skr04

new l10n_dk

l10n_do

l10n_ec

l10n_es

Nothing to do

l10n_et

l10n_eu_service

l10n_fr

Nothing to do

l10n_fr_certification

l10n_fr_fec

l10n_fr_hr_payroll

l10n_fr_pos_cert

l10n_fr_sale_closing

l10n_generic_coa

Done

l10n_gr

l10n_gt

new l10n_hk

l10n_hn

l10n_hr

l10n_hu

new l10n_id

l10n_in

l10n_in_hr_payroll

l10n_in_purchase

l10n_in_sale

l10n_in_schedule6

l10n_in_stock

l10n_it

new l10n_it_edi

l10n_jp

new l10n_lt

l10n_lu

l10n_ma

Nothing to do

new l10n_mn

l10n_multilang

Nothing to do

l10n_mx

l10n_nl

Done

l10n_no

l10n_nz

l10n_pa

l10n_pe

l10n_pl

l10n_pt

Done

l10n_ro

l10n_sa

l10n_sg

l10n_si

l10n_syscohada

l10n_th

l10n_tr

l10n_uk

l10n_us

Done

l10n_uy

l10n_ve

l10n_vn

new l10n_za

link_tracker

Nothing to do

lunch

Nothing to do

mail

Done

new mail_bot

Nothing to do

maintenance

Done

mass_mailing

Done

new mass_mailing_crm

Nothing to do

mass_mailing_event

Nothing to do

mass_mailing_event_track

new mass_mailing_sale

membership

Nothing to do

new microsoft_outlook

mrp

Done

new mrp_bom_cost

mrp_byproduct

Nothing to do

del mrp_repair

Done. Renamed to repair

note

Nothing to do

note_pad

Nothing to do

pad

Nothing to do

pad_project

Nothing to do

new partner_autocomplete

Done. Renamed from base_vat_autocomplete

new partner_autocomplete_address_extended

payment

Done

payment_adyen

Nothing to do

payment_authorize

Nothing to do

payment_buckaroo

Nothing to do

payment_ogone

Nothing to do

payment_paypal

Nothing to do

payment_payumoney

Nothing to do

payment_sips

Nothing to do

payment_stripe

Done

payment_stripe_sca

Nothing to do

payment_transfer

Nothing to do

phone_validation

Nothing to do

point_of_sale

Done

portal

Done

pos_cache

new pos_cash_ronding

del pos_data_drinks

pos_discount

Nothing to do

pos_mercury

pos_reprint

Nothing to do

pos_restaurant

Nothing to do

pos_sale

Nothing to do

procurement_jit

Nothing to do

product

Done

product_email_template

product_expiry

Nothing to do

del product_extended

product_margin

Nothing to do

project

Done

project_timesheet_holidays

Nothing to do

purchase

Done

purchase_mrp

Nothing to do

purchase_requisition

Done

new purchase_stock

Nothing to do

rating

Nothing to do

del rating_project

Done. Merged in project

new repair

Done. Renamed from mrp_repair

del report_intrastat

resource

Done

sale

Done

sale_crm

Nothing to do

sale_expense

Done

sale_management

Done

sale_margin

Nothing to do

sale_mrp

Nothing to do

del sale_order_dates

Done. Merged into sale

del sale_payment

Done. Merged into sale

new sale_purchase

Nothing to do

new sale_quotation_builder

Done. Merged from website_quote

del sale_service_rating

Done. Merged into sale_timesheet

sale_stock

Done

sale_timesheet

Nothing to do

sales_team

Done

sms

Nothing to do

new snailmail

Nothing to do

new snailmail_account

new social_media

Nothing to do

stock

Done

stock_account

Done

stock_dropshipping

Done

stock_landed_costs

Nothing to do

stock_picking_batch

Nothing to do

new stock_zebra

survey

Done

survey_crm

Nothing to do

new test_mail

new test_mass_mailing

new test_website

theme_bootswatch

Nothing to do

theme_default

Nothing to do

transifex

Nothing to do

new uom

Done

utm

Nothing to do

web

Done

web_diagram

Nothing to do

web_editor

Nothing to do

web_kanban_gauge

Nothing to do

del web_planner

Done. Merged in web

web_settings_dashboard

Nothing to do

web_tour

Nothing to do

new web_unsplash

Nothing to do

website

Done

website_blog

Done

website_crm

Nothing to do

website_crm_partner_assign

Done

website_crm_phone_validation

Nothing to do

website_customer

Done

website_event

Done

website_event_questions

Nothing to do

website_event_sale

Nothing to do

website_event_track

Done

website_form

Nothing to do

website_form_project

Nothing to do

website_forum

del website_forum_doc

website_gengo

Nothing to do

website_google_map

Nothing to do

website_hr

Done

website_hr_recruitment

Done

website_links

Nothing to do

website_livechat

Done

website_mail

Done

website_mail_channel

Nothing to do

website_mass_mailing

Nothing to do

website_membership

Nothing to do

website_partner

Done

website_payment

Nothing to do

del website_quote

Done. Merged into sale_quotation_builder

website_rating

Nothing to do

del website_rating_project

website_sale

Done

website_sale_comparison

Nothing to do

website_sale_delivery

Done

website_sale_digital

Nothing to do

new website_sale_link_tracker

website_sale_management

Nothing to do

del website_sale_options

website_sale_stock

Nothing to do

del website_sale_stock_options

website_sale_wishlist

Done

website_slides

Done

new website_survey

website_theme_install

Nothing to do

website_twitter

Nothing to do

-
-
1
-

‘Account Asset’ module is replaced by the Odoo Community Association module -‘Account Asset Management’ (not exactly the same but does the same): -See : https://github.com/OCA/account-financial-tools/tree/12.0/account_asset_management

-
-
2
-

‘Account Budget’ module moved into Enterprise Edition and is replaced -by the Odoo Community Association module ‘Account Budget OCA’: -See : https://github.com/OCA/account-budgeting/tree/12.0/account_budget_oca

-
-
-

OCA modules

-

Here you will find the coverage of OpenUpgrade for other OCA modules that has -suffered any kind of transformation and it has been taken into account here:

-
    -
  • OCA/account-financial-tools

    -
    -
      -
    • del account_reversal: Feature is now included in core account module.

    • -
    -
    -
  • -
  • OCA/stock-logistics-warehouse

    -
    -
      -
    • del stock_putaway_product: Feature is now included in core stock module.

    • -
    -
    -
  • -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules120-130.html b/docs/modules120-130.html deleted file mode 100644 index 1d0786524779..000000000000 --- a/docs/modules120-130.html +++ /dev/null @@ -1,1249 +0,0 @@ - - - - - - - - Module coverage 12.0 -> 13.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 12.0 -> 13.0

-

Status :

-
    -
  • Empty : No information available : Please see the -‘openupgrade_analysis.txt’ file of the module and share your analyse;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do or -there’s no change between 12.0 and 13.0;

  • -
  • ‘Work in progress’ : Analyse / Work in progress. Please review the -merge proposals at https://github.com/OCA/OpenUpgrade/pulls

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
-

Modules that are new in this release are marked with new. Modules that are -missing in the new release are marked with del.

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

account_analytic_default

Done

new account_analytic_default_hr_expense

new account_analytic_default_purchase

account_bank_statement_import

Nothing to do

del account_cancel

account_check_printing

Done

new account_debit_note

account_facturx

Nothing to do

account_lock

account_payment

Nothing to do

account_tax_python

account_test

del account_voucher

analytic

Done

association

new attachment_indexation

Done. Renamed from document

auth_ldap

Nothing to do

auth_oauth

Done

auth_password_policy

Nothing to do

auth_password_policy_signup

Nothing to do

auth_signup

Done

barcodes

Nothing to do

base

Done

base_address_city

Nothing to do

base_address_extended

Done

base_automation

Nothing to do

base_gengo

Nothing to do

base_geolocalize

Nothing to do

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

Nothing to do

base_setup

Done

base_sparse_field

Nothing to do

base_vat

Nothing to do

board

Nothing to do

bus

Nothing to do

calendar

Done

calendar_sms

Nothing to do

contacts

Nothing to do

crm

Done

new crm_iap_lead

Done. Renamed from crm_reveal

new crm_iap_lead_enrich

new crm_iap_lead_website

Done (in crm_iap_lead)

crm_livechat

Nothing to do

del crm_phone_validation

Done - Merged in crm

del crm_project

Recovered the module in OCA/crm

del crm_reveal

Done. Renamed to crm_iap_lead

new crm_sms

Nothing to do

del decimal_precision

delivery

Done

del delivery_hs_code

Done. Merged into delivery

digest

Done

del document

Done. Renamed to attachment_indexation

event

Done

event_sale

Done

new event_sms

Nothing to do

fetchmail

Done

fetchmail_gmail

fetchmail_outlook

fleet

Done

gamification

Done

gamification_sale_crm

Done

google_account

Nothing to do

google_calendar

Nothing to do

google_drive

Nothing to do

google_gmail

google_spreadsheet

Nothing to do

hr

Done

hr_attendance

Done

hr_contract

Done

hr_expense

Done

hr_expense_check

new hr_fleet

hr_gamification

Nothing to do

hr_holidays

Done

new hr_holidays_attendance

hr_maintenance

Nothing to do

hr_org_chart

Nothing to do

del hr_payroll

Replaced by OCA module payroll

del hr_payroll_account

Replaced by OCA module payroll_account

new hr_presence

hr_recruitment

Done

hr_recruitment_survey

new hr_skills

new hr_skills_slides

new hr_skills_survey

hr_timesheet

Done

hr_timesheet_attendance

Nothing to do

new hr_work_entry

http_routing

Nothing to do

hw_blackbox_be

Nothing to do

hw_drivers

Nothing to do

hw_escpos

Nothing to do

hw_posbox_homepage

Nothing to do

del hw_posbox_upgrade

hw_proxy

Nothing to do

del hw_scale

Done. Merged into hw_drivers

del hw_scanner

Done. Merged into hw_drivers

del hw_screen

Done. Merged into hw_drivers

iap

Done

im_livechat

Done

im_livechat_mail_bot

im_support

l10n_ae

l10n_ar

l10n_at

l10n_au

l10n_be

new l10n_be_edi

del l10n_be_hr_payroll

del l10n_be_hr_payroll_account

del l10n_be_hr_payroll_fleet

l10n_be_invoice_bba

l10n_bo

l10n_br

l10n_ca

l10n_ch

Done

l10n_cl

l10n_cn

l10n_cn_city

l10n_cn_small_business

l10n_cn_standard

l10n_co

new l10n_co_pos

l10n_cr

l10n_de

Nothing to do

l10n_de_skr03

Done

l10n_de_skr04

Done

l10n_dk

l10n_do

l10n_ec

l10n_es

Done

l10n_et

l10n_eu_service

Nothing to do

l10n_fr

Done

del l10n_fr_certification

l10n_fr_fec

Nothing to do

del l10n_fr_hr_payroll

l10n_fr_pos_cert

del l10n_fr_sale_closing

l10n_generic_coa

Done

l10n_gr

l10n_gt

l10n_hk

l10n_hn

l10n_hr

l10n_hu

l10n_id

new l10n_ie

new l10n_il

l10n_in

del l10n_in_hr_payroll

new l10n_in_pos

l10n_in_purchase

new l10n_in_purchase_stock

l10n_in_sale

new l10n_in_sale_stock

del l10n_in_schedule6

l10n_in_stock

l10n_it

l10n_it_edi

l10n_jp

new l10n_latam_base

new l10n_latam_invoice_document

l10n_lt

l10n_lu

l10n_ma

Done

l10n_mn

l10n_multilang

Nothing to do

l10n_mx

l10n_nl

l10n_no

l10n_nz

l10n_pa

l10n_pe

l10n_pl

l10n_pt

l10n_ro

l10n_sa

new l10n_se

l10n_sg

l10n_si

l10n_syscohada

l10n_th

l10n_tr

l10n_ua

l10n_uk

l10n_us

Nothing to do

l10n_uy

l10n_ve

l10n_vn

l10n_za

link_tracker

Done

lunch

Done

mail

Done

mail_bot

Nothing to do

maintenance

Done

mass_mailing

Done

mass_mailing_crm

Done

mass_mailing_event

Nothing to do

new mass_mailing_event_sms

mass_mailing_event_track

Nothing to do

new mass_mailing_event_track_sms

mass_mailing_sale

Nothing to do

new mass_mailing_slides

new mass_mailing_sms

membership

Done

microsoft_outlook

mrp

Done

new mrp_account

Nothing to do

del mrp_bom_cost

Done. Merged into mrp_account

del mrp_byproduct

Done. Merged into mrp

new mrp_subcontracting

new mrp_subcontracting_account

new mrp_subcontracting_dropshipping

note

Nothing to do

note_pad

Nothing to do

pad

Nothing to do

pad_project

Nothing to do

partner_autocomplete

Nothing to do

partner_autocomplete_address_extended

Nothing to do

payment

Done

payment_adyen

Done

new payment_alipay

payment_authorize

payment_buckaroo

new payment_ingenico

del payment_ogone

payment_paypal

Done

new payment_payulatam

payment_payumoney

payment_sips

payment_stripe

Done

del payment_stripe_sca

new payment_test

payment_transfer

Done

phone_validation

Nothing to do

point_of_sale

Done

portal

Nothing to do

new pos_adyen

pos_cache

pos_cash_rounding

Nothing to do

pos_discount

Nothing to do

new pos_epson_printer

new pos_epson_printer_restaurant

new pos_hr

new pos_kitchen_printer

pos_mercury

pos_reprint

Nothing to do

pos_restaurant

Nothing to do

pos_sale

Done

new pos_six

procurement_jit

Nothing to do

product

Done

product_email_template

product_expiry

Nothing to do

product_margin

Nothing to do

new product_matrix

project

Done

project_timesheet_holidays

Nothing to do

purchase

Done

purchase_mrp

Done

new purchase_product_matrix

purchase_requisition

Done

new purchase_requisition_stock

Nothing to do

purchase_stock

Done

rating

Nothing to do

repair

Done

resource

Done

sale

Done

new sale_coupon

new sale_coupon_delivery

sale_crm

Nothing to do

sale_expense

Done

sale_management

Nothing to do

sale_margin

Nothing to do

sale_mrp

Done

new sale_product_configurator

new sale_product_matrix

sale_purchase

Nothing to do

sale_quotation_builder

Nothing to do

sale_stock

Nothing to do

sale_timesheet

Done

new sale_timesheet_purchase

sales_team

Done

sms

Done

snailmail

Done

snailmail_account

Nothing to do

social_media

Nothing to do

stock

Done

stock_account

Done

stock_dropshipping

Done

stock_landed_costs

Done

stock_picking_batch

Done

new stock_sms

del stock_zebra

Nothing to do. Merged into stock

survey

Done

del survey_crm

Nothing to do. Merged into survey

test_mail

new test_mail_full

test_mass_mailing

test_website

new test_website_slides_full

new test_xlsx_export

theme_bootswatch

Nothing to do

theme_default

Nothing to do

transifex

Nothing to do

uom

Done

utm

Done

web

Done

web_diagram

Nothing to do

web_editor

Done

web_kanban_gauge

Nothing to do

del web_settings_dashboard

Done. Merged into base_setup

web_tour

Nothing to do

web_unsplash

Done

website

Done

website_blog

Done

website_crm

Nothing to do

new website_crm_livechat

website_crm_partner_assign

del website_crm_phone_validation

new website_crm_sms

website_customer

website_event

Nothing to do

website_event_questions

Nothing to do

website_event_sale

Nothing to do

website_event_track

Done

website_form

Done

website_form_project

Nothing to do

website_forum

website_gengo

website_google_map

Nothing to do

del website_hr

website_hr_recruitment

Nothing to do

website_links

Nothing to do

website_livechat

Done

website_mail

Done

website_mail_channel

website_mass_mailing

Done

website_membership

website_partner

Nothing to do

website_payment

Done

new website_profile

website_rating

Nothing to do

website_sale

Done

website_sale_comparison

Nothing to do

new website_sale_coupon

new website_sale_coupon_delivery

website_sale_delivery

Nothing to do

website_sale_digital

del website_sale_link_tracker

website_sale_management

Nothing to do

new website_sale_product_configurator

new website_sale_slides

website_sale_stock

Nothing to do

new website_sale_stock_product_configurator

website_sale_wishlist

Nothing to do

website_slides

Done

new website_slides_forum

new website_slides_survey

new website_sms

del website_survey

website_theme_install

Nothing to do

website_twitter

Nothing to do

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules130-140.html b/docs/modules130-140.html deleted file mode 100644 index 86bbc261a13e..000000000000 --- a/docs/modules130-140.html +++ /dev/null @@ -1,1345 +0,0 @@ - - - - - - - - Module coverage 13.0 -> 14.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 13.0 -> 14.0

-

A module can have one of the following statuses:

-
    -
  • Nothing to do: Analyse has been done, and there is nothing to do or -there’s no change between the old edition and the new one;

  • -
  • Done: Scripts are ready to run and can be found in this distribution;

  • -
  • <Empty>: Not covered yet. Please see the ‘openupgrade_analysis.txt’ file -of the module and start hacking the migration scripts!

  • -
-

You will always find migration scripts that are ready for review or -work-in-progress at https://github.com/OCA/OpenUpgrade/pulls. Please have a -look to see if you can help out.

-

In the table below, modules that are new in this release are marked with -new. Modules that are missing in the new release are marked with del.

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

del account_analytic_default

Merged into account

del account_analytic_default_hr_expense

Merged into hr_expense

del account_analytic_default_purchase

Merged into purchase

del account_bank_statement_import

Adopted in OCA as account_statement_import

account_check_printing

Done

account_debit_note

Nothing to do

new account_edi

Nothing to do

new account_edi_extended

Nothing to do

new account_edi_facturx

Done. Renamed from account_facturx

new account_edi_proxy_client

Nothing to do

new account_edi_ubl

Nothing to do

del account_facturx

Renamed to account_edi_facturx

new account_fleet

account_lock

Nothing to do

account_payment

Nothing to do

new account_qr_code_sepa

Nothing to do

account_tax_python

account_test

new adyen_platforms

Nothing to do

analytic

Nothing to do

association

Nothing to do

attachment_indexation

Nothing to do

auth_ldap

auth_oauth

Done

auth_password_policy

Nothing to do

new auth_password_policy_portal

Nothing to do

auth_password_policy_signup

Nothing to do

auth_signup

Done

new auth_totp

Nothing to do

new auth_totp_portal

Nothing to do

barcodes

Nothing to do

base

Done

base_address_city

Nothing to do

base_address_extended

Nothing to do

base_automation

Done

del base_gengo

base_geolocalize

Nothing to do

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

Nothing to do

base_setup

Nothing to do

base_sparse_field

Nothing to do

base_vat

Nothing to do

board

Done

bus

Nothing to do

calendar

Done

calendar_sms

contacts

Nothing to do

new coupon

Done (split from sale_coupon)

crm

Done

crm_iap_lead

Done

crm_iap_lead_enrich

Done

crm_iap_lead_website

Done

crm_livechat

Nothing to do

crm_sms

Done

delivery

Done

digest

Done

event

Done

new event_crm

Nothing to do

new event_crm_sale

Nothing to do

event_sale

Done

event_sms

Done

fetchmail

Nothing to do

fetchmail_gmail

Nothing to do

fleet

gamification

Done

gamification_sale_crm

Done

google_account

Nothing to do

google_calendar

Done

google_drive

Nothing to do

google_gmail

Nothing to do

new google_recaptcha

google_spreadsheet

Nothing to do

hr

Done

hr_attendance

Done

hr_contract

Done

hr_expense

Nothing to do

del hr_expense_check

Merged into hr_expense

hr_fleet

Nothing to do

hr_gamification

hr_holidays

Done

hr_holidays_attendance

Nothing to do

del hr_holidays_calendar

Merged into hr_holidays

hr_maintenance

Nothing to do

hr_org_chart

Nothing to do

hr_presence

Done

hr_recruitment

Done

hr_recruitment_survey

Nothing to do

hr_skills

Done

hr_skills_slides

hr_skills_survey

hr_timesheet

Done

hr_timesheet_attendance

hr_work_entry

Nothing to do

http_routing

Nothing to do

hw_drivers

hw_escpos

hw_posbox_homepage

del hw_proxy

Merged into hw_drivers

iap

Done

new iap_crm

Nothing to do

new iap_mail

Nothing to do

im_livechat

Done

im_livechat_mail_bot

del im_support

l10n_ae

l10n_ar

new l10n_ar_website_sale

l10n_at

l10n_au

l10n_be

l10n_be_edi

l10n_be_invoice_bba

l10n_bo

l10n_br

l10n_ca

l10n_ch

l10n_ch_qriban

l10n_cl

l10n_cn

l10n_cn_city

del l10n_cn_small_business

Merged into l10n_cn

del l10n_cn_standard

l10n_co

l10n_co_pos

l10n_cr

new l10n_cz

l10n_de

new l10n_de_purchase

new l10n_de_repair

new l10n_de_sale

l10n_de_skr03

l10n_de_skr04

new l10n_de_stock

l10n_dk

l10n_do

l10n_dz

l10n_ec

l10n_es

Nothing to do

new l10n_es_edi_sii

l10n_et

l10n_eu_service

l10n_fi

l10n_fr

l10n_fr_fec

l10n_fr_pos_cert

new l10n_gcc_invoice

new l10n_gcc_pos

l10n_generic_coa

l10n_gr

l10n_gt

l10n_hk

l10n_hn

l10n_hr

l10n_hu

l10n_id

l10n_id_efaktur

l10n_ie

l10n_il

l10n_in

l10n_in_pos

l10n_in_purchase

l10n_in_purchase_stock

l10n_in_sale

l10n_in_sale_stock

l10n_in_stock

l10n_it

l10n_it_edi

new l10n_it_edi_sdicoop

l10n_it_stock_ddt

l10n_jp

l10n_latam_base

l10n_latam_invoice_document

l10n_lt

l10n_lu

l10n_ma

l10n_mn

l10n_multilang

l10n_mx

l10n_nl

l10n_no

l10n_nz

l10n_pa

l10n_pe

l10n_pl

l10n_pt

l10n_ro

l10n_sa

new l10n_sa_invoice

new l10n_sa_pos

l10n_se

l10n_se_ocr

l10n_sg

l10n_si

new l10n_sk

l10n_syscohada

l10n_th

l10n_tr

l10n_ua

l10n_uk

l10n_us

l10n_uy

l10n_ve

l10n_vn

Done

l10n_za

link_tracker

Nothing to do

lunch

Done

mail

Done

mail_bot

Nothing to do

new mail_bot_hr

Nothing to do

new mail_client_extension

Nothing to do

maintenance

Done

mass_mailing

Done

mass_mailing_crm

mass_mailing_event

Nothing to do

mass_mailing_event_sms

Nothing to do

mass_mailing_event_track

Nothing to do

mass_mailing_event_track_sms

Nothing to do

mass_mailing_sale

mass_mailing_slides

Nothing to do

mass_mailing_sms

Nothing to do

membership

Nothing to do

new microsoft_account

Nothing to do

new microsoft_calendar

Nothing to do

mrp

Done (tentatively)

mrp_account

Nothing to do

new mrp_landed_costs

Nothing to do

new mrp_product_expiry

Nothing to do

mrp_subcontracting

Nothing to do

mrp_subcontracting_account

Nothing to do

mrp_subcontracting_dropshipping

Nothing to do

note

Done

note_pad

Nothing to do

odoo_referral

Nothing to do

odoo_referral_portal

pad

Nothing to do

pad_project

Nothing to do

partner_autocomplete

Nothing to do

del partner_autocomplete_address_extended

Merged into base_address_extended

payment

Done

payment_adyen

payment_alipay

payment_authorize

payment_buckaroo

new payment_fix_register_token

Nothing to do

payment_ingenico

new payment_odoo_by_adyen

Nothing to do

payment_paypal

Nothing to do

payment_payulatam

payment_payumoney

Nothing to do

payment_sips

Nothing to do

payment_stripe

Nothing to do

del payment_stripe_checkout_webhook

Merged into payment_stripe

payment_test

Nothing to do

payment_transfer

Nothing to do

phone_validation

Nothing to do

point_of_sale

Done

portal

Nothing to do

new portal_rating

Nothing to do. Renamed from website_rating

pos_adyen

Nothing to do

pos_cache

del pos_cash_rounding

Merged into point_of_sale

pos_discount

pos_epson_printer

pos_epson_printer_restaurant

pos_hr

Nothing to do

del pos_kitchen_printer

Merged into pos_restaurant

pos_mercury

Nothing to do

del pos_reprint

Merged into point_of_sale

pos_restaurant

Nothing to do

new pos_restaurant_adyen

Nothing to do

pos_sale

Done

pos_six

procurement_jit

product

Done

product_email_template

product_expiry

Done

product_margin

Nothing to do

product_matrix

Nothing to do

project

Done

project_timesheet_holidays

Nothing to do

purchase

Done

purchase_mrp

Nothing to do

purchase_product_matrix

purchase_requisition

Nothing to do

purchase_requisition_stock

purchase_stock

Nothing to do

rating

Done

repair

Done

resource

Nothing to do

sale

Done

sale_coupon

Done (split in coupon)

sale_coupon_delivery

sale_crm

Nothing to do

sale_expense

Nothing to do

sale_management

Done

sale_margin

Done

sale_mrp

Nothing to do

sale_product_configurator

Nothing to do

sale_product_matrix

new sale_project

Done

sale_purchase

Nothing to do

new sale_purchase_stock

Nothing to do

sale_quotation_builder

sale_stock

Done

new sale_stock_margin

Nothing to do

sale_timesheet

Done

new sale_timesheet_edit

Nothing to do

sale_timesheet_purchase

Nothing to do

sales_team

Done

sms

Nothing to do

snailmail

Nothing to do

snailmail_account

Nothing to do

social_media

Nothing to do

stock

Done

stock_account

Done

stock_dropshipping

Nothing to do

stock_landed_costs

stock_picking_batch

Nothing to do

stock_sms

Done

survey

Done

new test_base_automation

new test_event_full

test_mail

test_mail_full

test_mass_mailing

test_website

test_website_slides_full

test_xlsx_export

del theme_bootswatch

theme_default

Nothing to do

transifex

uom

Done

utm

Done

web

Nothing to do

del web_diagram

web_editor

Nothing to do

web_kanban_gauge

Nothing to do

web_tour

Nothing to do

web_unsplash

Nothing to do

website

Done

website_blog

Done

website_crm

website_crm_livechat

website_crm_partner_assign

Done

website_crm_sms

Nothing to do

website_customer

Done

website_event

Done

new website_event_crm

Nothing to do

new website_event_crm_questions

Nothing to do

new website_event_meet

Nothing to do

new website_event_meet_quiz

Nothing to do

website_event_questions

Done

website_event_sale

Done

website_event_track

Done

new website_event_track_exhibitor

Nothing to do

new website_event_track_live

Nothing to do

new website_event_track_live_quiz

Nothing to do

new website_event_track_quiz

Nothing to do

website_form

Nothing to do

website_form_project

Nothing to do

website_forum

Nothing to do

del website_gengo

website_google_map

Nothing to do

website_hr_recruitment

Done

new website_jitsi

Nothing to do

website_links

Nothing to do

website_livechat

Done

website_mail

Done

website_mail_channel

Done

website_mass_mailing

Nothing to do

website_membership

Done

website_partner

Nothing to do

website_payment

website_profile

Nothing to do

del website_rating

Renamed to portal_rating

website_sale

Done

website_sale_comparison

website_sale_coupon

website_sale_coupon_delivery

website_sale_delivery

website_sale_digital

website_sale_management

Nothing to do

website_sale_product_configurator

Nothing to do

website_sale_slides

Nothing to do

website_sale_stock

website_sale_stock_product_configurator

Nothing to do

website_sale_wishlist

Nothing to do

website_slides

Done

website_slides_forum

Nothing to do

website_slides_survey

Nothing to do

website_sms

Nothing to do

del website_theme_install

Done. Merged into website

website_twitter

-
-

OCA modules

-

Here you will find the coverage of OpenUpgrade for other OCA modules that has -suffered any kind of transformation and it has been taken into account here:

-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules50-60.html b/docs/modules50-60.html deleted file mode 100644 index 2531a907cee4..000000000000 --- a/docs/modules50-60.html +++ /dev/null @@ -1,640 +0,0 @@ - - - - - - - - Module coverage 5.0 -> 6.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 5.0 -> 6.0

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

base

Done

account

account_accountant

account_analytic_analysis

Nothing to do

account_analytic_default

Nothing to do

account_analytic_plans

Nothing to do

account_anglo_saxon

account_budget

Done

account_cancel

account_chart

account_coda

account_followup

account_invoice_layout

account_payment

Done

account_sequence

account_voucher

analytic

analytic_journal_billing_rate

analytic_user_function

Nothing to do

anonymization

association

auction

audittrail

Nothing to do

base_action_rule

base_calendar

base_contact

base_crypt

base_iban

Nothing to do

base_module_doc_rst

base_module_quality

base_module_record

base_report_creator

Done

base_report_designer

Nothing to do

base_setup

base_synchro

base_tools

base_vat

board

Nothing to do

caldav

claim_from_delivery

crm

crm_caldav

crm_claim

crm_fundraising

crm_helpdesk

crm_partner_assign

crm_profiling

decimal_precision

delivery

document

document_ftp

document_ics

document_webdav

email_template

event

event_project

fetchmail

google_map

hr

Done

hr_attendance

Nothing to do

hr_contract

Done

hr_evaluation

hr_expense

Done

hr_holidays

hr_payroll

hr_payroll_account

hr_recruitment

hr_timesheet

Done

hr_timesheet_invoice

Done

hr_timesheet_sheet

Done

html_view

idea

knowledge

l10n_at

l10n_be

l10n_br

l10n_ca

l10n_ch

l10n_cn

l10n_cr

l10n_de

l10n_ec

l10n_es

l10n_fr

l10n_gr

l10n_gt

l10n_in

l10n_it

l10n_lu

l10n_ma

l10n_mx

l10n_nl

l10n_pl

l10n_ro

l10n_th

l10n_uk

l10n_ve

lunch

mail_gateway

marketing

marketing_campaign

marketing_campaign_crm_demo

membership

mrp

Done

mrp_jit

mrp_operations

mrp_repair

mrp_subproduct

multi_company

outlook

pad

point_of_sale

process

Nothing to do

procurement

Done

product

Done

product_expiry

product_manufacturer

product_margin

product_visible_discount

profile_tools

project

Done

project_caldav

project_gtd

project_issue

project_issue_sheet

project_long_term

project_mailgate

project_messages

project_mrp

project_planning

project_retro_planning

project_scrum

project_timesheet

Done

purchase

Done

purchase_analytic_plans

Nothing to do

purchase_double_validation

purchase_requisition

report_designer

report_intrastat

report_webkit

report_webkit_sample

resource

sale

Done

sale_analytic_plans

Nothing to do

sale_crm

sale_journal

Done

sale_layout

sale_margin

sale_mrp

sale_order_dates

share

stock

Done

stock_invoice_directly

stock_location

stock_no_autopicking

stock_planning

subscription

survey

thunderbird

users_ldap

Nothing to do

warning

web_livechat

web_uservoice

wiki

wiki_faq

wiki_quality_manual

wiki_sale_faq

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules60-61.html b/docs/modules60-61.html deleted file mode 100644 index 4c520ba99144..000000000000 --- a/docs/modules60-61.html +++ /dev/null @@ -1,648 +0,0 @@ - - - - - - - - Module coverage 6.0 -> 6.1 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 6.0 -> 6.1

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

account_accountant

Nothing to do

account_analytic_analysis

Nothing to do

account_analytic_default

Nothing to do

account_analytic_plans

Nothing to do

account_anglo_saxon

account_budget

Nothing to do

account_cancel

Nothing to do

account_chart

Nothing to do

account_coda

account_followup

Done

account_invoice_layout

account_payment

Done

account_sequence

account_voucher

Done

analytic

Done

analytic_journal_billing_rate

analytic_user_function

Nothing to do

anonymization

association

auction

audittrail

Nothing to do

base

Done 1

base_action_rule

Nothing to do

base_calendar

Done

base_contact

Done

base_crypt

Nothing to do

base_iban

Done

base_module_doc_rst

base_module_quality

base_module_record

base_report_creator

base_report_designer

Nothing to do

base_setup

Nothing to do

base_synchro

base_tools

Nothing to do

base_vat

Nothing to do

board

Nothing to do

caldav

claim_from_delivery

crm

Done

crm_caldav

crm_claim

crm_fundraising

crm_helpdesk

crm_partner_assign

crm_profiling

decimal_precision

Nothing to do

delivery

document

document_ftp

document_ics

document_webdav

email_template

Partial 2

event

event_project

fetchmail

google_map

hr

Done

hr_attendance

Nothing to do

hr_contract

Done

hr_evaluation

hr_expense

Nothing to do

hr_holidays

hr_payroll

hr_payroll_account

hr_recruitment

hr_timesheet

Nothing to do

hr_timesheet_invoice

Nothing to do

hr_timesheet_sheet

Done

html_view

idea

knowledge

Nothing to do

l10n_at

l10n_be

l10n_br

l10n_ca

l10n_ch

l10n_cn

l10n_cr

l10n_de

l10n_ec

l10n_es

l10n_fr

l10n_gr

l10n_gt

l10n_in

l10n_it

l10n_lu

l10n_ma

l10n_mx

l10n_nl

Nothing to do

l10n_pl

l10n_ro

l10n_th

l10n_uk

l10n_ve

lunch

mail_gateway

Done

marketing

marketing_campaign

marketing_campaign_crm_demo

membership

mrp

Nothing to do

mrp_jit

mrp_operations

mrp_repair

mrp_subproduct

multi_company

outlook

pad

point_of_sale

process

Nothing to do

procurement

Nothing to do

product

Done

product_expiry

product_manufacturer

product_margin

product_visible_discount

profile_tools

project

Done

project_caldav

project_gtd

project_issue

project_issue_sheet

project_long_term

project_mailgate

project_messages

project_mrp

project_planning

project_retro_planning

project_scrum

project_timesheet

Nothing to do

purchase

Nothing to do

purchase_analytic_plans

purchase_double_validation

purchase_requisition

report_designer

report_intrastat

report_webkit

report_webkit_sample

resource

Nothing to do

sale

Nothing to do

sale_analytic_plans

sale_crm

sale_journal

sale_layout

sale_margin

sale_mrp

sale_order_dates

share

stock

Done

stock_invoice_directly

stock_location

stock_no_autopicking

stock_planning

subscription

survey

thunderbird

users_ldap

Nothing to do

warning

web_livechat

web_uservoice

wiki

Nothing to do

wiki_faq

wiki_quality_manual

wiki_sale_faq

-
-
1
-

Dashboards need to be reviewed

-
-
2
-

Templates are preserved, but sent messages are not.

-
-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules61-70.html b/docs/modules61-70.html deleted file mode 100644 index f4ff7c5ddad8..000000000000 --- a/docs/modules61-70.html +++ /dev/null @@ -1,734 +0,0 @@ - - - - - - - - Module coverage 6.1 -> 7.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 6.1 -> 7.0

-

Status :

-
-
    -
  • Empty : No information available : Please see the ‘openupgrade_analysis.txt’ file of the module and share your analyse ;

  • -
  • ‘No change’ : No change between 6.1 and 7.0 ;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do.

  • -
  • ‘work in progress’ : Analyse / work in progress. Please review the merge proposals at https://code.launchpad.net/openupgrade-addons/+activereviews ;

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

base

Done

account

Done

account_accountant

Nothing to do

account_analytic_analysis

Nothing to do

account_analytic_default

No change

account_analytic_plans

account_anglo_saxon

No change

account_asset

account_bank_statement_extensions

Nothing to do

account_budget

account_cancel

No change

account_chart

No change

account_check_writing

account_followup

account_payment

Nothing to do

account_sequence

account_test

Nothing to do

account_voucher

Nothing to do

analytic

Done

analytic_contract_hr_expense

analytic_user_function

anonymization

association

No change

audittrail

auth_crypt

auth_ldap

Nothing to do

auth_oauth

auth_oauth_signup

No change

auth_openid

No change

auth_signup

base_action_rule

base_calendar

base_gengo

base_iban

No change

base_import

base_report_designer

No change

base_setup

Nothing to do

base_status

No change

base_vat

No change

board

Nothing to do

claim_from_delivery

Nothing to do

contacts

Nothing to do

crm

work in progress

crm_claim

work in progress

crm_helpdesk

crm_partner_assign

crm_profiling

crm_todo

decimal_precision

No change

delivery

Nothing to do

document

document_ftp

document_page

Done

document_webdav

No change

edi

Nothing to do

email_template

Done

event

event_moodle

event_sale

fetchmail

Done

fleet

google_base_account

No change

google_docs

hr

Done

hr_attendance

Nothing to do

hr_contract

No change

hr_evaluation

hr_expense

work in progress

hr_holidays

Done

hr_payroll

hr_payroll_account

No change

hr_recruitment

hr_timesheet

Nothing to do

hr_timesheet_invoice

hr_timesheet_sheet

Nothing to do

idea

knowledge

l10n_ar

l10n_at

l10n_be

l10n_be_coda

l10n_be_hr_payroll

l10n_be_hr_payroll_account

l10n_be_invoice_bba

l10n_bo

l10n_br

l10n_ca

l10n_ch

l10n_cl

l10n_cn

l10n_co

l10n_cr

l10n_de

l10n_ec

l10n_es

l10n_et

l10n_fr

Done

l10n_fr_hr_payroll

l10n_fr_rib

No change

l10n_gr

l10n_gt

l10n_hn

l10n_hr

l10n_in

l10n_in_hr_payroll

l10n_it

l10n_lu

l10n_ma

l10n_multilang

l10n_mx

l10n_nl

Nothing to do

l10n_pa

l10n_pe

l10n_pl

l10n_pt

l10n_ro

l10n_si

l10n_syscohada

l10n_th

l10n_tr

l10n_uk

l10n_us

l10n_uy

l10n_ve

lunch

mail

Done

marketing

Nothing to do

marketing_campaign

marketing_campaign_crm_demo

membership

mrp

Done

mrp_byproduct

mrp_jit

mrp_operations

mrp_repair

multi_company

note

note_pad

pad

pad_project

plugin

No change

plugin_outlook

plugin_thunderbird

point_of_sale

work in progress

portal

portal_anonymous

portal_claim

portal_crm

portal_event

portal_hr_employees

portal_project

portal_project_issue

portal_sale

portal_stock

process

No change

procurement

work in progress

product

Done

product_expiry

No change

product_manufacturer

No change

product_margin

product_visible_discount

No change

project

Done

project_gtd

project_issue

project_issue_sheet

No change

project_long_term

project_mrp

project_timesheet

purchase

Done

purchase_analytic_plans

purchase_double_validation

purchase_requisition

report_intrastat

No change

report_webkit

resource

No change

sale

Done

sale_analytic_plans

sale_crm

sale_journal

Nothing to do

sale_margin

sale_mrp

No change

sale_order_dates

No change

sale_stock

Done

share

stock

Done

stock_invoice_directly

No change

stock_location

Done

stock_no_autopicking

No change

subscription

survey

tab

warning

No change

web_analytics

No change

web_linkedin

Nothing to do (new in 7.0)

web_shortcuts

No change

-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules70-80.html b/docs/modules70-80.html deleted file mode 100644 index b6b7eee835a2..000000000000 --- a/docs/modules70-80.html +++ /dev/null @@ -1,922 +0,0 @@ - - - - - - - - Module coverage 7.0 -> 8.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 7.0 -> 8.0

-

Status :

-
    -
  • Empty : No information available : Please see the -‘openupgrade_analysis.txt’ file of the module and share your analyse;

  • -
  • ‘No change’ : No change between 7.0 and 8.0;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do;

  • -
  • ‘Work in progress’ : Analyse / Work in progress. Please review the -merge proposals at https://github.com/OCA/OpenUpgrade/pulls

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

account_accountant

Nothing to do

account_analytic_analysis

Nothing to do

account_analytic_default

Nothing to do

account_analytic_plans

Nothing to do

account_anglo_saxon

Nothing to do

account_asset

Nothing to do

account_bank_statement_extensions

Nothing to do

account_budget

Nothing to do

account_cancel

Nothing to do

account_chart

Nothing to do

account_check_writing

Nothing to do

account_followup

Nothing to do

account_payment

Nothing to do

account_sequence

Nothing to do

account_test

Nothing to do

account_voucher

Done

analytic

Done

analytic_contract_hr_expense

Nothing to do

analytic_user_function

Nothing to do

anglo_saxon_dropshipping

anonymization

Nothing to do

association

Nothing to do

auth_crypt

Nothing to do

auth_ldap

Nothing to do

auth_oauth

Nothing to do

auth_openid

Nothing to do

auth_signup

Nothing to do

base

Done

base_action_rule

Done

base_gengo

base_geolocalize

Nothing to do

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

Nothing to do

base_report_designer

Nothing to do

base_setup

Nothing to do

base_vat

Nothing to do

board

Nothing to do

calendar

Done

claim_from_delivery

Nothing to do

contacts

Nothing to do

crm

Done

crm_claim

Done

crm_helpdesk

Done

crm_partner_assign

crm_profiling

Nothing to do

crm_project_issue

Nothing to do

decimal_precision

Nothing to do

delivery

Nothing to do

document

Nothing to do

document_page

Moved to OCA 2

edi

Nothing to do

email_template

Done

event

Done

event_sale

fetchmail

Nothing to do

fleet

gamification

Nothing to do

gamification_sale_crm

Nothing to do

google_account

Nothing to do

google_calendar

Nothing to do

google_drive

Nothing to do

google_spreadsheet

Nothing to do

hr

Done

hr_applicant_document

Nothing to do

hr_attendance

Nothing to do

hr_contract

Nothing to do

hr_evaluation

hr_expense

Done

hr_gamification

Nothing to do

hr_holidays

Done

hr_payroll

Nothing to do

hr_payroll_account

Nothing to do

hr_recruitment

Done

hr_timesheet

Nothing to do

hr_timesheet_invoice

Nothing to do

hr_timesheet_sheet

Done

hw_escpos

Nothing to do

hw_posbox_homepage

Nothing to do

hw_posbox_upgrade

Nothing to do

hw_proxy

Nothing to do

hw_scale

Nothing to do

hw_scanner

Nothing to do

im

Nothing to do

im_livechat

Nothing to do

knowledge

Nothing to do

l10n_ar

Nothing to do

l10n_at

Nothing to do

l10n_be

Nothing to do

l10n_be_coda

Nothing to do

l10n_be_hr_payroll

Nothing to do

l10n_be_hr_payroll_account

Nothing to do

l10n_be_invoice_bba

Nothing to do

l10n_bo

Nothing to do

l10n_br

Nothing to do

l10n_ca

Nothing to do

l10n_ch

Nothing to do

l10n_cl

Nothing to do

l10n_cn

Nothing to do

l10n_co

Nothing to do

l10n_cr

Nothing to do

l10n_de

Nothing to do

l10n_ec

Nothing to do

l10n_es

Done

l10n_et

Nothing to do

l10n_fr

Nothing to do

l10n_fr_hr_payroll

Nothing to do

l10n_fr_rib

Nothing to do

l10n_gr

Nothing to do

l10n_gt

Done

l10n_hn

Nothing to do

l10n_hr

Nothing to do

l10n_in

Nothing to do

l10n_in_hr_payroll

Nothing to do

l10n_it

Nothing to do

l10n_lu

Nothing to do

l10n_ma

Nothing to do

l10n_multilang

Nothing to do

l10n_mx

Nothing to do

l10n_nl

Done

l10n_pa

Nothing to do

l10n_pe

Nothing to do

l10n_pl

Nothing to do

l10n_pt

Nothing to do

l10n_ro

Nothing to do

l10n_si

Nothing to do

l10n_syscohada

Nothing to do

l10n_th

Nothing to do

l10n_tr

Nothing to do

l10n_uk

Nothing to do

l10n_us

Nothing to do

l10n_uy

Nothing to do

l10n_ve

Nothing to do

l10n_vn

Nothing to do

lunch

Nothing to do

mail

Done

marketing

Nothing to do

marketing_campaign

marketing_campaign_crm_demo

Nothing to do

marketing_crm

Nothing to do

mass_mailing

Nothing to do

membership

Done

mrp

Done

mrp_byproduct

Nothing to do

mrp_operations

Nothing to do

mrp_repair

multi_company

Nothing to do

note

Nothing to do

note_pad

Nothing to do

pad

Nothing to do

pad_project

Nothing to do

payment

Nothing to do

payment_adyen

Nothing to do

payment_buckaroo

Nothing to do

payment_ogone

Nothing to do

payment_paypal

Nothing to do

payment_transfer

Nothing to do

plugin

Nothing to do

plugin_outlook

Nothing to do

plugin_thunderbird

Nothing to do

point_of_sale

Done

portal

Done

portal_claim

Nothing to do

portal_gamification

Nothing to do

portal_project

Nothing to do

portal_project_issue

Nothing to do

portal_sale

Done

portal_stock

Nothing to do

procurement

Done

procurement_jit

Done

product

Done

product_email_template

product_expiry

Done

product_extended

product_margin

Nothing to do

product_visible_discount

Nothing to do

project

Done

project_issue

Done

project_issue_sheet

Nothing to do

project_timesheet

Nothing to do

purchase

Done

purchase_analytic_plans

Nothing to do

purchase_double_validation

Nothing to do

purchase_requisition

Done

report

Nothing to do

report_intrastat

report_webkit

Nothing to do

resource

Nothing to do

sale

Done

sale_analytic_plans

Nothing to do

sale_crm

Done

sale_journal

Nothing to do

sale_layout

Done 1

sale_margin

Nothing to do

sale_mrp

Nothing to do

sale_order_dates

Done

sale_service

Done (renamed from project_mrp)

sales_team

Done

sale_stock

Done

share

Nothing to do

stock

Done

stock_account

Done

stock_dropshipping

Nothing to do

stock_invoice_directly

Nothing to do

stock_landed_costs

Nothing to do

stock_picking_wave

Nothing to do

subscription

Nothing to do

survey

survey_crm

Nothing to do

warning

Done

web

Nothing to do

web_analytics

Nothing to do

web_api

Nothing to do

web_calendar

Nothing to do

web_diagram

Nothing to do

web_gantt

Nothing to do

web_graph

Nothing to do

web_kanban

Nothing to do

web_kanban_gauge

Nothing to do

web_kanban_sparkline

Nothing to do

web_linkedin

website

Nothing to do

website_blog

Nothing to do

website_certification

Nothing to do

website_crm

Nothing to do

website_crm_partner_assign

Nothing to do

website_customer

Nothing to do

website_event

Nothing to do

website_event_sale

Nothing to do

website_event_track

Nothing to do

website_forum

Nothing to do

website_forum_doc

Nothing to do

website_gengo

Nothing to do

website_google_map

Nothing to do

website_hr

Nothing to do

website_hr_recruitment

Nothing to do

website_livechat

Nothing to do

website_mail

Nothing to do

website_mail_group

Nothing to do

website_membership

Nothing to do

website_partner

Nothing to do

website_payment

Nothing to do

website_project

Nothing to do

website_quote

Nothing to do

website_report

Nothing to do

website_sale

Nothing to do

website_sale_delivery

Nothing to do

web_shortcuts

Moved to OCA 3

website_twitter

Nothing to do

web_tests

Nothing to do

web_tests_demo

Nothing to do

web_view_editor

Nothing to do

-
-
1
-

Note that this module was removed in 7.0 and readded in 8.0. -The migration covered is between 6.1 and 8.0.

-
-
2
-

‘Document Page’ Module is now under Odoo Community Association Umbrella: -See : https://github.com/OCA/knowledge/tree/8.0/document_page

-
-
3
-

‘Web Shortcuts’ Module is now under Odoo Community Association Umbrella: -See : https://github.com/OCA/web/tree/8.0/web_shortcuts

-
-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules80-90.html b/docs/modules80-90.html deleted file mode 100644 index 4f3da1a17b6c..000000000000 --- a/docs/modules80-90.html +++ /dev/null @@ -1,1161 +0,0 @@ - - - - - - - - Module coverage 8.0 -> 9.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 8.0 -> 9.0

-

Status :

-
    -
  • Empty : No information available : Please see the -‘openupgrade_analysis.txt’ file of the module and share your analyse;

  • -
  • ‘No change’ : No change between 8.0 and 9.0;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do;

  • -
  • ‘Work in progress’ : Analyse / Work in progress. Please review the -merge proposals at https://github.com/OCA/OpenUpgrade/pulls

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
-

Modules that are new in this release are marked with new. Modules that are -missing in the new release are marked with del.

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done (tentative)

account_accountant

Nothing to do

del account_analytic_analysis

Moved to OCA 1

account_analytic_default

Nothing to do

del account_analytic_plans

Moved to OCA 2

del account_anglo_saxon

account_asset

Done

del account_bank_statement_extensions

new account_bank_statement_import

account_budget

Nothing to do

account_cancel

Nothing to do

new account_cash_basis_base_account

del account_chart

Done (merged in account)

new account_check_printing

Done

del account_check_writing

Renamed 3

new account_extra_reports

del account_followup

new account_full_reconcile

new account_lock

del account_payment

Moved to OCA 4

del account_sequence

new account_tax_adjustments

new account_tax_cash_basis

new account_tax_exigible

new account_tax_python

account_test

account_voucher

Done

analytic

Done (tentative)

del analytic_contract_hr_expense

del analytic_user_function

del anglo_saxon_dropshipping

anonymization

association

Nothing to do

auth_crypt

Nothing to do

auth_ldap

Nothing to do

auth_oauth

Done

del auth_openid

auth_signup

Done

new barcodes

Nothing to do

base

Done

base_action_rule

Nothing to do

base_gengo

base_geolocalize

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

Nothing to do

del base_report_designer

Moved to odoo/odoo-extra

base_setup

Nothing to do

base_vat

Nothing to do

board

Nothing to do

bus

Done

calendar

Done

claim_from_delivery

Nothing to do

del contacts

Done (merged in mail)

crm

Done

crm_claim

Done

del crm_helpdesk

del crm_mass_mailing

crm_partner_assign

del crm_profiling

Moved to odoo/odoo-extra

crm_project_issue

decimal_precision

Nothing to do

delivery

Done

document

Nothing to do

del edi

del email_template

Done (merged in mail as mail_template)

event

Done

event_sale

Done

fetchmail

Nothing to do

fleet

Done

gamification

Done

gamification_sale_crm

Done

google_account

Nothing to do

google_calendar

Nothing to do

google_drive

Nothing to do

google_spreadsheet

Nothing to do

hr

Done

del hr_applicant_document

hr_attendance

Nothing to do

hr_contract

Done

hr_equipment

hr_expense

Done

hr_gamification

Nothing to do

hr_holidays

Done

hr_payroll

Nothing to do

hr_payroll_account

Done

hr_recruitment

Done

hr_timesheet

Done

del hr_timesheet_invoice

hr_timesheet_sheet

Done

hw_escpos

hw_posbox_homepage

hw_posbox_upgrade

hw_proxy

hw_scale

hw_scanner

del im_chat

Done (merged in mail)

im_livechat

Done

im_odoo_support

del knowledge

Moved to OCA 5

l10n_ae

l10n_ar

l10n_at

new l10n_au

l10n_be

del l10n_be_coda

l10n_be_hr_payroll

l10n_be_hr_payroll_account

l10n_be_intrastat

l10n_be_invoice_bba

l10n_bo

l10n_br

l10n_ca

l10n_ch

l10n_cl

l10n_cn

new l10n_cn_small_business

new l10n_cn_standard

l10n_co

l10n_cr

l10n_de

new l10n_de_skr03

new l10n_de_skr04

l10n_do

l10n_ec

l10n_es

l10n_et

l10n_eu_service

l10n_fr

Nothing to do

new l10n_fr_certification

new l10n_fr_fec

l10n_fr_hr_payroll

new l10n_fr_pos_cert

del l10n_fr_rib

new l10n_fr_sale_closing

new l10n_generic_coa

l10n_gr

l10n_gt

l10n_hn

l10n_hr

l10n_hu

l10n_in

l10n_in_hr_payroll

new l10n_in_schedule6

l10n_it

l10n_jp

l10n_lu

l10n_ma

l10n_multilang

l10n_mx

l10n_nl

l10n_no

new l10n_nz

l10n_pa

l10n_pe

l10n_pl

l10n_pt

l10n_ro

l10n_sa

l10n_sg

l10n_si

l10n_syscohada

l10n_th

l10n_tr

l10n_uk

l10n_us

l10n_uy

l10n_ve

l10n_vn

new link_tracker

lunch

mail

Done

new mail_tip

marketing

Done

del marketing_crm

Done (merged in crm)

marketing_campaign

Done

marketing_campaign_crm_demo

mass_mailing

Done

membership

Nothing to do

mrp

Nothing to do

mrp_byproduct

Nothing to do

mrp_operations

Nothing to do

mrp_repair

Nothing to do

del multi_company

note

Nothing to do

note_pad

pad

pad_project

payment

Done

payment_adyen

payment_authorize

payment_buckaroo

payment_ogone

payment_paypal

Done

payment_sips

payment_transfer

Done

point_of_sale

portal

Nothing to do

del portal_claim

Done - Renamed to website_crm_claim

portal_gamification

del portal_project

Done. Merged in project

del portal_project_issue

Done. Merged in project_issue

portal_sale

Done

portal_stock

Done

new pos_cache

pos_discount

new pos_mercury

new pos_reprint

pos_restaurant

Nothing to do

procurement

Nothing to do

procurement_jit

Nothing to do

del procurement_jit_stock

Done - Merged on procurement_jit

product

Done

product_email_template

product_expiry

product_extended

product_margin

Nothing to do

new product_uos

product_visible_discount

Done

project

Done

project_issue

Done

project_issue_sheet

Done

project_timesheet

Done

purchase

Done

del purchase_analytic_plans

Moved to OCA 6

del purchase_double_validation

Done (merged in purchase)

purchase_requisition

Done

new rating

Nothing to do

new rating_project

Nothing to do

new rating_project_issue

Nothing to do

report

Nothing to do

report_intrastat

report_webkit

Nothing to do

resource

Nothing to do

sale

Done

del sale_analytic_plans

Moved to OCA 7

sale_crm

Done

new sale_expense

del sale_journal

sale_layout

sale_margin

Nothing to do

sale_mrp

Nothing to do

sale_order_dates

Nothing to do

sale_service

Done

sale_stock

Done

new sale_timesheet

sales_team

Done

del share

Done

stock

Done

stock_account

Done

new stock_calendar

stock_dropshipping

Done

del stock_invoice_directly

stock_landed_costs

Done

stock_picking_wave

Nothing to do

subscription

Nothing to do

survey

Done

survey_crm

Nothing to do

new theme_bootswatch

new theme_default

new utm

Nothing to do

warning

Nothing to do

web

Nothing to do

web_analytics

del web_api

web_calendar

Nothing to do

web_diagram

Nothing to do

new web_editor

del web_gantt

Done (merged in web)

del web_graph

Done (merged in web)

web_kanban

Nothing to do

web_kanban_gauge

Nothing to do

del web_kanban_sparkline

Done (merged in web)

del web_linkedin

new web_planner

Nothing to do

new web_settings_dashboard

del web_tests

Done (merged in web)

del web_tests_demo

new web_tip

Nothing to do

web_view_editor

Nothing to do

website

Done

website_blog

Done

del website_certification

website_crm

Nothing to do

new website_crm_claim

Done - Renamed from portal_claim

website_crm_partner_assign

website_customer

website_event

Nothing to do

new website_event_questions

website_event_sale

Nothing to do

website_event_track

Done

new website_form

website_forum

website_forum_doc

website_gengo

website_google_map

website_hr

website_hr_recruitment

del website_instantclick

new website_issue

new website_links

website_livechat

website_mail

Nothing to do

new website_mail_channel

Done - Renamed from website_mail_group

del website_mail_group

Done - Renamed to website_mail_channel

new website_mass_mailing

website_membership

website_partner

Nothing to do

website_payment

Nothing to do

new website_portal

new website_portal_sale

del website_project

new website_project_issue

new website_project_issue_sheet

website_quote

new website_rating_project_issue

del website_report

Done (merged in report)

website_sale

Done

website_sale_delivery

new website_sale_digital

website_sale_options

new website_sale_stock

new website_slides

new website_theme_install

website_twitter

-
-
1
-

‘Account Analytic Analysis’ Module is now under Odoo Community Association Umbrella -as ‘Contract’ (not exactly the same but does the same): -See : https://github.com/OCA/contract/tree/9.0/contract

-
-
2
-

‘Account Analytic Plans’ Module is now under Odoo Community Association Umbrella -as ‘Account Analytic Distribution’ (not exactly the same but does the same): -See : https://github.com/OCA/account-analytic/tree/9.0/account_analytic_distribution

-
-
3
-

‘Account Check Writing’ Module is renamed as ‘Account Check Printing’ -(not exactly a rename but they do the same)

-
-
4
-

‘Account Payment’ Module is now under Odoo Community Association Umbrella -as ‘Account Payment Order’ (not exactly the same but does the same and needs bank-payment): -See : https://github.com/OCA/bank-payment/tree/9.0/account_payment_order

-
-
5
-

‘Knowledge’ Module is now under Community Association Umbrella: -See : https://github.com/OCA/knowledge/tree/9.0/knowledge

-
-
6
-

‘Purchase Analytic Plans’ Module is now under Odoo Community Association Umbrella -as ‘Purchase Analytic Distribution’ (not exactly the same but does the same): -See : https://github.com/OCA/account-analytic/tree/9.0/purchase_analytic_distribution

-
-
7
-

‘Sale Analytic Plans’ Module is now under Odoo Community Association Umbrella -as ‘Sale Analytic Distribution’ (not exactly the same but does the same): -See : https://github.com/OCA/account-analytic/tree/9.0/sale_analytic_distribution

-
-
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/modules90-100.html b/docs/modules90-100.html deleted file mode 100644 index 9da4ad7fee71..000000000000 --- a/docs/modules90-100.html +++ /dev/null @@ -1,1056 +0,0 @@ - - - - - - - - Module coverage 9.0 -> 10.0 — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage 9.0 -> 10.0

-

Status :

-
    -
  • Empty : No information available : Please see the -‘openupgrade_analysis.txt’ file of the module and share your analyse;

  • -
  • ‘Nothing to do’ : Analyse has been done, and there is nothing to do or -there’s no change between 9.0 and 10.0;

  • -
  • ‘Work in progress’ : Analyse / Work in progress. Please review the -merge proposals at https://github.com/OCA/OpenUpgrade/pulls

  • -
  • ‘Done’ : Analyse has been done & work has been merged into trunk project ;

  • -
-

Modules that are new in this release are marked with new. Modules that are -missing in the new release are marked with del.

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Module

Status

account

Done

account_accountant

Nothing to do

account_analytic_default

Nothing to do

account_asset

Done

account_bank_statement_import

Nothing to do

account_budget

Nothing to do

account_cancel

Nothing to do

account_cash_basis_base_account

account_check_printing

Done

del account_extra_reports

del account_full_reconcile

account_lock

del account_tax_adjustments

account_tax_cash_basis

Nothing to do

del account_tax_exigible

account_tax_python

Nothing to do

account_test

Nothing to do

account_voucher

Done

analytic

Done

anonymization

Nothing to do

association

Nothing to do

auth_crypt

Nothing to do

auth_ldap

Nothing to do

auth_oauth

Nothing to do

auth_signup

Done

barcodes

Nothing to do

base

Done

base_action_rule

Done

base_gengo

Nothing to do

base_geolocalize

Nothing to do

base_iban

Nothing to do

base_import

Nothing to do

base_import_module

base_setup

Done

base_vat

Nothing to do

board

Done

bus

Nothing to do

calendar

Done

del claim_from_delivery

new contacts

Nothing to do

crm

Done

del crm_claim

del crm_partner_assign

crm_project_issue

Nothing to do

decimal_precision

Nothing to do

delivery

Done

document

Nothing to do

event

Done

event_sale

Done

fetchmail

Nothing to do

fleet

Done

gamification

gamification_sale_crm

google_account

Nothing to do

google_calendar

Nothing to do

google_drive

Nothing to do

google_spreadsheet

Nothing to do

hr

Done

hr_attendance

Done

hr_contract

Done

del hr_equipment

hr_expense

Done

new hr_expense_check

hr_gamification

Done

hr_holidays

Nothing to do

new hr_maintenance

hr_payroll

hr_payroll_account

hr_recruitment

Done

new hr_recruitment_survey

Done

hr_timesheet

Done

new hr_timesheet_attendance

hr_timesheet_sheet

Done

hw_blackbox_be

hw_escpos

hw_posbox_homepage

hw_posbox_upgrade

hw_proxy

hw_scale

hw_scanner

im_livechat

Done

del im_odoo_support

Done - Merged on im_livechat

l10n_ae

l10n_ar

l10n_at

l10n_au

l10n_be

l10n_be_hr_payroll

l10n_be_hr_payroll_account

l10n_be_intrastat

Nothing to do

new l10n_be_intrastat_2019

l10n_be_invoice_bba

Nothing to do

l10n_bo

l10n_br

l10n_ca

l10n_ch

Done

l10n_cl

l10n_cn

l10n_cn_small_business

l10n_cn_standard

l10n_co

l10n_cr

l10n_de

Nothing to do

l10n_de_skr03

Nothing to do

l10n_de_skr04

Nothing to do

l10n_do

l10n_ec

l10n_es

l10n_et

l10n_eu_service

Nothing to do

l10n_fr

Nothing to do

l10n_fr_certification

l10n_fr_fec

l10n_fr_hr_payroll

l10n_fr_pos_cert

l10n_fr_sale_closing

l10n_generic_coa

l10n_gr

l10n_gt

l10n_hn

l10n_hr

l10n_hu

l10n_in

l10n_in_hr_payroll

Nothing to do

l10n_in_schedule6

l10n_it

Nothing to do

l10n_jp

l10n_lu

l10n_ma

l10n_multilang

Nothing to do

l10n_mx

l10n_nl

Done

l10n_no

l10n_nz

l10n_pa

l10n_pe

l10n_pl

l10n_pt

l10n_ro

l10n_sa

l10n_sg

l10n_si

l10n_syscohada

l10n_th

l10n_tr

l10n_uk

l10n_us

l10n_uy

l10n_ve

l10n_vn

link_tracker

Nothing to do

lunch

mail

Done

del mail_tip

Done. Merged in mail

new maintenance

del marketing

Done -Merged in marketing_campaign

marketing_campaign

Done

marketing_campaign_crm_demo

Nothing to do

mass_mailing

Done

membership

Nothing to do

mrp

Done

mrp_byproduct

Done

del mrp_operations

Done. Merged in mrp

mrp_repair

note

Nothing to do

note_pad

pad

Nothing to do

pad_project

Nothing to do

payment

Done

payment_adyen

Nothing to do

payment_authorize

Nothing to do

payment_buckaroo

Nothing to do

payment_ogone

Nothing to do

payment_paypal

Nothing to do

new payment_payumoney

Nothing to do

payment_sips

Nothing to do

new payment_stripe

Nothing to do

new payment_stripe_sca

payment_transfer

Nothing to do

point_of_sale

Done

portal

Done

portal_gamification

portal_sale

Done

portal_stock

Nothing to do

pos_cache

Nothing to do

new pos_data_drinks

pos_discount

pos_mercury

pos_reprint

pos_restaurant

procurement

Nothing to do

procurement_jit

Nothing to do

product

Done

product_email_template

Nothing to do

product_expiry

product_extended

product_margin

Nothing to do

del product_uos

del product_visible_discount

project

Done

project_issue

Done

project_issue_sheet

Done

del project_timesheet

Done - Merged in hr_timesheet

purchase

Done

new purchase_mrp

purchase_requisition

Done

rating

Done

rating_project

rating_project_issue

report

Nothing to do

report_intrastat

Nothing to do

del report_webkit

resource

Done

sale

Done

sale_crm

Done

sale_expense

del sale_layout

Done - Included in sale

sale_margin

Nothing to do

sale_mrp

Nothing to do

sale_order_dates

Nothing to do

del sale_service

Done. Merged in sale_timesheet

new sale_service_rating

sale_stock

Done

sale_timesheet

Done

sales_team

Done

stock

Done

stock_account

Nothing to do

stock_calendar

Nothing to do

stock_dropshipping

Done

stock_landed_costs

Nothing to do

stock_picking_wave

Nothing to do

subscription

Nothing to do

survey

Done

survey_crm

Nothing to do

theme_bootswatch

theme_default

Nothing to do

utm

Nothing to do

del warning

web

Nothing to do

del web_analytics

web_calendar

Nothing to do

web_diagram

Nothing to do

web_editor

Nothing to do

web_kanban

Nothing to do

web_kanban_gauge

Nothing to do

web_planner

Nothing to do

web_settings_dashboard

Nothing to do

del web_tip

Done

new web_tour

Nothing to do

del web_view_editor

Done

website

Done

website_blog

Done

website_crm

Done

del website_crm_claim

website_crm_partner_assign

Nothing to do

website_customer

Nothing to do

website_event

Nothing to do

website_event_questions

website_event_sale

Nothing to do

website_event_track

Nothing to do

website_form

Nothing to do

website_forum

website_forum_doc

Nothing to do

website_gengo

website_google_map

Nothing to do

website_hr

Nothing to do

website_hr_recruitment

website_issue

Nothing to do

website_links

Nothing to do

website_livechat

website_mail

Nothing to do

website_mail_channel

Nothing to do

website_mass_mailing

Nothing to do

website_membership

Nothing to do

website_partner

Nothing to do

website_payment

Nothing to do

website_portal

Nothing to do

website_portal_sale

Done

new website_project

Nothing to do

website_project_issue

Done

website_project_issue_sheet

new website_project_timesheet

website_quote

website_rating_project_issue

website_sale

Done

website_sale_delivery

Nothing to do

website_sale_digital

Nothing to do

website_sale_options

Nothing to do

website_sale_stock

Nothing to do

website_slides

Done

website_theme_install

Nothing to do

website_twitter

Nothing to do

-

OCA modules

-

Here you will find the coverage of OpenUpgrade for other OCA modules that has -suffered any kind of transformation and it has been taken into account here:

-
    -
  • OCA/account-invoicing

    -
    -
      -
    • del account_invoice_shipping address: Feature is now included in core sale -module.

    • -
    -
    -
  • -
  • OCA/sale-workflow

    -
    -
      -
    • del sale_order_back2draft: Feature is now included in core sale module.

    • -
    -
    -
  • -
  • OCA/social

    -
    -
      -
    • del mass_mailing_security_group: These extra permissions are not needed -anymore. Anyway, you will need to manually assign the “Mass mailing user” -permission for granting access to required users.

    • -
    -
    -
  • -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv deleted file mode 100644 index 45218c884a60..000000000000 Binary files a/docs/objects.inv and /dev/null differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html deleted file mode 100644 index f0a68ef545aa..000000000000 --- a/docs/py-modindex.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - Python Module Index — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- - -

Python Module Index

- -
- o -
- - - - - - - - - - - - - - - - - - - -
 
- o
- openupgradelib -
    - openupgradelib.openupgrade -
    - openupgradelib.openupgrade_70 -
    - openupgradelib.openupgrade_80 -
    - openupgradelib.openupgrade_90 -
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/search.html b/docs/search.html deleted file mode 100644 index ef65e1ff3f75..000000000000 --- a/docs/search.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - Search — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -

Search

- - - - -

- Searching for multiple words only shows matches that contain - all words. -

- - -
- - - -
- - - -
- -
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js deleted file mode 100644 index 65f8c2e5614e..000000000000 --- a/docs/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["API", "after_migration", "analyse", "analysis", "community", "coverage_legend", "development", "devfaq", "format", "index", "intro", "migration_details", "migrationmanager", "modules100-110", "modules110-120", "modules120-130", "modules130-140", "modules50-60", "modules60-61", "modules61-70", "modules70-80", "modules80-90", "modules90-100", "status", "xmlids"], "filenames": ["API.rst", "after_migration.rst", "analyse.rst", "analysis.rst", "community.rst", "coverage_legend.rst", "development.rst", "devfaq.rst", "format.rst", "index.rst", "intro.rst", "migration_details.rst", "migrationmanager.rst", "modules100-110.rst", "modules110-120.rst", "modules120-130.rst", "modules130-140.rst", "modules50-60.rst", "modules60-61.rst", "modules61-70.rst", "modules70-80.rst", "modules80-90.rst", "modules90-100.rst", "status.rst", "xmlids.rst"], "titles": ["OpenUpgrade API", "After migration", "How to run your own analysis", "Database analysis", "Community involvement", "<no title>", "Migration script development", "Development FAQ", "Fields analysis format", "Welcome to OpenUpgrade\u2019s documentation!", "Introduction", "Running the migration", "The Odoo Migration Manager", "Module coverage 10.0 -> 11.0", "Module coverage 11.0 -> 12.0", "Module coverage 12.0 -> 13.0", "Module coverage 13.0 -> 14.0", "Module coverage 5.0 -> 6.0", "Module coverage 6.0 -> 6.1", "Module coverage 6.1 -> 7.0", "Module coverage 7.0 -> 8.0", "Module coverage 8.0 -> 9.0", "Module coverage 9.0 -> 10.0", "Module coverage", "XML IDs"], "terms": {"The": [0, 1, 2, 3, 7, 8, 9, 10, 11, 20, 23, 24], "librari": [0, 8, 10], "contain": [0, 2, 3, 6, 8, 10], "all": [0, 3, 4, 8, 9, 11, 12, 23, 24], "kind": [0, 6, 14, 16, 22], "helper": [0, 10, 12], "function": [0, 4, 6, 8, 10], "your": [0, 1, 3, 4, 7, 8, 9, 12, 13, 14, 15, 19, 20, 21, 22, 24], "pre": [0, 3, 6, 8, 12], "post": [0, 3, 4, 6, 8, 10, 12, 24], "script": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 16, 23, 24], "itself": [0, 2, 11, 12], "migrat": [0, 2, 3, 4, 5, 7, 8, 9, 16, 20, 23, 24], "own": [0, 3, 9, 12], "modul": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 24], "either": 0, "major": [0, 4, 10, 23], "minor": 0, "version": [0, 1, 2, 6, 7, 9, 11, 12, 23, 24], "upgrad": [0, 1, 2, 4, 7, 8, 9, 10, 12], "It": [0, 6, 8, 10, 12], "can": [0, 1, 3, 4, 5, 6, 8, 10, 11, 12, 16, 23, 24], "instal": [0, 2, 7, 8, 9, 10, 12, 13, 24], "pip": [0, 11, 12], "openupgradelib": [0, 6, 10, 12], "us": [0, 1, 2, 3, 4, 10, 11, 12, 24], "from": [0, 1, 2, 7, 8, 9, 10, 13, 14, 15, 16, 20, 21, 24], "import": 0, "add_field": [0, 9], "env": 0, "field_spec": 0, "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 21, 22, 23, 24], "add": [0, 2, 11], "need": [0, 2, 3, 4, 6, 8, 11, 18, 21, 22, 24], "stuff": 0, "have": [0, 1, 3, 4, 5, 6, 8, 11, 12, 16, 24], "new": [0, 1, 2, 5, 7, 8, 11, 13, 14, 15, 16, 19, 21, 22, 24], "field": [0, 3, 7, 9, 24], "popul": 0, "db": [0, 6], "sql": 0, "column": [0, 1, 8], "ir": [0, 24], "model": [0, 1, 3, 8, 24], "entri": [0, 24], "data": [0, 1, 2, 3, 8, 9, 10, 24], "": [0, 1, 3, 5, 8, 12, 13, 14, 15, 16, 22], "intend": 0, "being": [0, 6, 8], "run": [0, 1, 3, 5, 6, 7, 9, 10, 12, 16], "ar": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 21, 22, 24], "go": [0, 4, 6, 11], "declar": [0, 6, 7], "later": [0, 1], "note": [0, 6, 10, 12, 13, 14, 15, 16, 19, 20, 21, 22], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24], "v12": 0, "now": [0, 8, 13, 14, 20, 21, 22], "odoo": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 14, 20, 21, 23, 24], "alwai": [0, 5, 6, 8, 16], "xml": [0, 3, 8, 9], "id": [0, 3, 9], "http": [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22], "github": [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 20, 21, 22], "com": [0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 20, 21, 22], "blob": [0, 12], "9201f92a4f29a53a014b462469f27b32dca8fc5a": 0, "addon": [0, 2, 3, 11, 19, 23], "base": [0, 3, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "ir_model": 0, "py": [0, 3, 6, 12], "l794": 0, "l802": 0, "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 22, 24], "still": [0, 1, 12], "call": [0, 1, 6, 8, 11], "consist": [0, 1], "avoid": 0, "know": [0, 7], "intern": [0, 12], "pg": 0, "type": [0, 8, 24], "param": 0, "list": [0, 8, 11], "tupl": 0, "follow": [0, 2, 5, 6, 8, 11, 16], "expect": [0, 11], "element": 0, "each": [0, 2, 3, 6, 10, 11], "name": [0, 6, 8, 10, 11, 12], "tabl": [0, 1, 5, 8, 16], "put": 0, "fals": 0, "alreadi": [0, 6, 11, 12], "load": [0, 3, 8, 11, 12, 24], "registri": 0, "thu": [0, 8], "obtain": 0, "wai": [0, 1, 6, 8, 24], "binari": 0, "boolean": 0, "char": [0, 8], "date": 0, "datetim": 0, "float": 0, "html": 0, "integ": 0, "many2mani": 0, "many2on": [0, 8], "many2one_refer": 0, "monetari": 0, "one2mani": 0, "refer": [0, 1, 6, 8, 9, 10, 11], "select": [0, 2, 6, 8, 11], "text": 0, "serial": 0, "vari": 0, "depend": [0, 6, 7, 9, 10], "custom": [0, 2, 3, 4, 6, 12], "ad": [0, 6, 8], "If": [0, 2, 4, 8, 9, 11, 24], "one": [0, 5, 6, 8, 10, 16, 24], "special": 0, "case": [0, 2, 6, 8, 24], "see": [0, 1, 5, 6, 8, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23], "below": [0, 5, 6, 8, 16, 23], "indic": [0, 2], "here": [0, 6, 9, 14, 16, 22, 24], "valid": 0, "postgresql": [0, 1], "www": 0, "org": 0, "doc": 0, "6": [0, 8, 9, 20, 21, 23], "static": 0, "datatyp": 0, "option": [0, 2], "initi": [0, 10], "valu": [0, 7, 8, 11], "includ": [0, 2, 7, 10, 11, 12, 14, 22], "set": [0, 2, 3, 8, 11], "exist": [0, 1, 4, 8, 9, 24], "record": [0, 2, 3, 24], "add_ir_model_field": [0, 9], "cr": 0, "columnspec": 0, "typic": [0, 8], "ir_model_field": 0, "veri": 0, "earli": 0, "stage": [0, 11, 12], "process": [0, 3, 4, 7, 9, 11, 17, 18, 19], "raw": 0, "thei": [0, 1, 8, 11, 21, 24], "place": [0, 2, 3], "befor": [0, 2, 3, 6, 10, 11, 12], "ani": [0, 1, 3, 4, 6, 7, 8, 10, 12, 14, 16, 22, 24], "get": [0, 6, 9, 10], "do": [0, 2, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24], "addit": [0, 3, 24], "constraint": 0, "anoth": [0, 1, 6, 7, 8, 10], "cascad": 0, "craft": 0, "statement": 0, "take": [0, 24], "them": [0, 7, 8, 11, 24], "account": [0, 6, 7, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "paramet": [0, 2, 11], "add_xmlid": [0, 9], "xmlid": 0, "res_id": 0, "noupdat": [0, 24], "an": [0, 1, 3, 4, 6, 8, 10, 11, 12, 23], "ir_model_data": 0, "One": 0, "usag": 0, "exampl": [0, 8, 12], "when": [0, 1, 3, 6, 7, 8, 11, 12, 13, 24], "ha": [0, 1, 5, 8, 13, 14, 15, 16, 19, 20, 21, 22, 24], "been": [0, 1, 3, 5, 6, 8, 11, 13, 14, 15, 16, 19, 20, 21, 22, 24], "high": 0, "probabl": [0, 11, 12], "user": [0, 4, 22], "creat": [0, 2, 3, 8, 24], "manual": [0, 8, 11, 22], "For": [0, 6, 7, 11, 12, 23], "currenc": [0, 24], "wa": [0, 3, 6, 12, 20], "openerp": [0, 10, 11], "had": [0, 8], "miss": [0, 5, 13, 14, 15, 16, 21, 22], "hand": 0, "5": [0, 9, 10, 21, 23], "databas": [0, 1, 2, 4, 6, 7, 8, 9, 12, 24], "In": [0, 2, 3, 5, 6, 10, 12, 16, 24], "order": [0, 10, 11, 21], "2": [0, 6, 9, 10, 12, 14, 18, 20, 21], "ident": 0, "which": [0, 1, 2, 3, 6, 8, 11, 12, 24], "fact": 0, "block": 0, "sql_constraint": 0, "check_values_selection_field": [0, 9], "table_nam": 0, "field_nam": 0, "allowed_valu": 0, "check": [0, 6, 7, 9, 10, 21], "onli": [0, 1, 6, 11], "return": [0, 7], "log": [0, 9], "error": [0, 9, 11], "ye": [0, 7], "true": [0, 7], "chunk": [0, 9], "singl": [0, 4], "memori": 0, "perform": [0, 2], "friendli": 0, "iter": 0, "over": [0, 7], "potenti": 0, "larg": 0, "number": 0, "yield": 0, "whole": 0, "time": [0, 6, 8, 11], "don": [0, 9, 11], "t": [0, 9, 11], "nest": 0, "column_exist": [0, 9], "whether": 0, "certain": 0, "convert_field_to_html": [0, 9], "html_field_nam": 0, "verbos": 0, "convert": 0, "convert_to_company_depend": [0, 9], "model_nam": 0, "origin_field_nam": 0, "destination_field_nam": 0, "model_table_nam": 0, "none": 0, "row": 0, "given": [0, 6], "compani": [0, 4], "same": [0, 6, 8, 12, 14, 21], "some": [0, 3, 6, 11], "becom": [0, 6, 8], "must": [0, 11, 24], "execut": [0, 3, 6, 12], "after": [0, 3, 6, 8, 9, 10, 11, 12], "previous": 0, "where": [0, 6, 12], "provid": [0, 4, 10, 11, 23], "taken": [0, 14, 16, 22], "so": [0, 7, 8, 11, 24], "regist": 0, "copy_column": [0, 9], "column_spec": 0, "copi": [0, 3, 4, 6, 8, 9, 10], "hash": 0, "kei": [0, 11], "old_nam": 0, "new_nam": 0, "trigger": [0, 6], "convers": 0, "get_legacy_nam": [0, 9], "old": [0, 1, 5, 6, 8, 10, 16, 24], "make": [0, 2, 7, 9, 10, 12], "sure": [0, 11], "quot": 0, "properli": 0, "coincid": 0, "direct": [0, 11], "eg": 0, "copy_fields_multilang": [0, 9], "destination_model": 0, "destination_t": 0, "destination_column": 0, "relation_column": 0, "source_model": 0, "source_t": 0, "source_column": 0, "translations_onli": 0, "content": [0, 9], "translat": 0, "str": 0, "destin": 0, "_tabl": 0, "receiv": 0, "point": [0, 11], "inner": 0, "join": 0, "done": [0, 5, 6, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "updat": [0, 6, 8, 11, 24], "correspond": [0, 2, 8], "sourc": [0, 10, 11], "null": 0, "skip": [0, 11], "empti": [0, 5, 8, 13, 14, 15, 16, 19, 20, 21, 22], "default": [0, 8], "bool": 0, "handl": 0, "transfer": 0, "won": 0, "12": [0, 6, 9, 11, 23], "cow_templates_mark_if_equal_to_upstream": [0, 9], "mark_colnam": 0, "cow": 0, "d": [0, 6], "templat": [0, 18], "equal": 0, "upstream": 0, "equival": 0, "meant": 0, "sens": 0, "origin": [0, 24], "websit": [0, 13, 14, 15, 16, 20, 21, 22], "hint": 0, "cow_templates_replicate_upstream": [0, 9], "end": [0, 3, 6, 12], "reset": [0, 6], "ran": 0, "date_to_datetime_tz": [0, 9], "user_field_nam": 0, "date_field_nam": 0, "datetime_field_nam": 0, "relat": [0, 8], "timezon": 0, "re": [0, 8, 24], "legaci": 0, "deactivate_workflow_transit": [0, 9], "transit": 0, "disabl": [0, 7], "workflow": [0, 7, 22], "necessari": [0, 6, 11], "automat": [0, 3, 8, 24], "write": [0, 2, 4, 6, 21], "object": 0, "via": 0, "orm": [0, 1], "step": [0, 2, 6, 12], "dictionari": [0, 11], "reactivate_workflow_transit": [0, 9], "should": [0, 6, 8, 9, 23, 24], "deactiv": 0, "pass": [0, 11, 24], "specif": 0, "reason": [0, 12], "delete_model_workflow": [0, 9], "drop_index": 0, "forcefulli": 0, "remov": [0, 1, 8, 20, 24], "activ": [0, 10], "obsolet": [0, 1], "prevent": 0, "foreign": 0, "issu": [0, 4, 6], "delet": [0, 8], "cursor": 0, "drop": 0, "index": [0, 9], "finish": 0, "those": [0, 6], "subsequ": [0, 2, 23], "normal": 0, "delete_record_transl": [0, 9], "xml_id": 0, "cleanup": 0, "delete_records_safely_by_xml_id": [0, 9], "delete_child": 0, "safest": 0, "possibl": [0, 8], "whose": 0, "argument": [0, 6, 7], "switch": 0, "1": [0, 9, 10, 13, 14, 20, 21, 23], "regular": [0, 7], "try": [0, 4, 6, 11], "well": [0, 3, 10, 11], "string": 0, "identifi": 0, "also": [0, 1, 2, 6, 7, 8], "child": 0, "delete_sql_constraint_saf": [0, 9], "v14": 0, "onward": 0, "belong": 0, "disable_invalid_filt": [0, 9], "analyz": 0, "filter": 0, "correct": 0, "click": 0, "wors": 0, "open": [0, 9, 10], "action": [0, 8, 24], "To": 0, "scope": 0, "assur": 0, "work": [0, 4, 5, 6, 7, 11, 13, 14, 15, 16, 19, 20, 21, 22], "v8": 0, "environ": [0, 11], "drop_column": [0, 9], "cover": [0, 4, 5, 13, 16, 20, 24], "mai": [0, 3, 8, 11], "store": 0, "consid": [0, 1, 4], "obviou": 0, "govern": 0, "properti": [0, 8], "float_to_integ": [0, 9], "chang": [0, 3, 5, 6, 8, 13, 14, 15, 16, 19, 20, 21, 22, 24], "just": [0, 3, 9], "truncat": 0, "round": 0, "we": [0, 4, 7], "want": [0, 6, 7, 9, 11, 24], "original_nam": 0, "etc": 0, "instead": [0, 8, 9, 10], "collis": 0, "futur": [0, 1], "past": 0, "current": [0, 24], "lift_constraint": [0, 9], "lift": 0, "adapt": 0, "target": [0, 2, 3, 8, 11], "everyth": 0, "went": 0, "right": [0, 3], "recreat": [0, 24], "load_data": [0, 9, 24], "module_nam": 0, "filenam": 0, "idref": 0, "mode": 0, "init": [0, 6, 11], "csv": [0, 8], "yml": 0, "file": [0, 2, 3, 5, 6, 8, 12, 13, 14, 15, 16, 19, 20, 21, 22, 24], "usual": [0, 6], "occurr": 0, "newli": [0, 4, 8], "essenti": 0, "mark": [0, 5, 8, 13, 14, 15, 16, 21, 22], "without": [0, 2, 6, 8], "forcecr": 0, "mechan": [0, 12], "leav": [0, 6], "its": [0, 11, 24], "theoret": 0, "could": [0, 3, 8], "simpli": [0, 6], "stock": [0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "care": [0, 9, 11], "reiniti": 0, "prefer": 0, "item": [0, 24], "directori": [0, 2, 3, 12, 24], "actual": [0, 8], "resourc": [0, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "other": [0, 2, 4, 6, 8, 14, 16, 22], "path": [0, 2, 10, 11], "rel": 0, "map": [0, 8], "cach": 0, "demo": [0, 2], "init_no_cr": 0, "hack": [0, 5, 16], "As": [0, 6], "dure": [0, 3, 6, 7, 10, 12], "standard": 0, "would": [0, 7], "fail": [0, 9, 11], "requir": [0, 6, 8, 22], "fill": [0, 8], "logged_queri": [0, 9], "queri": 0, "arg": 0, "skip_no_result": 0, "affect": 0, "level": 0, "debug": 0, "suitabl": 0, "substitut": 0, "detail": [0, 6, 9], "shown": 0, "args_detail": 0, "decor": 0, "sub": 0, "develop": [0, 3, 4, 9, 10, 11, 23, 24], "purpos": [0, 1, 6], "written": 0, "everi": [0, 8, 11], "def": 0, "migrate_stock_warehous": 0, "code": [0, 7, 9, 10, 12, 19], "1000": 0, "migrate_partn": 0, "partner": [0, 8], "m2o_to_x2m": [0, 9], "source_field": 0, "transform": [0, 14, 16, 22], "rename_column": [0, 9], "retain": 0, "warn": [0, 17, 18, 19, 20, 21, 22], "loss": [0, 8], "becaus": [0, 1], "invers": 0, "multipl": [0, 8, 11], "allow": [0, 1, 11], "renam": [0, 8, 13, 14, 15, 16, 20, 21, 24], "map_valu": [0, 9], "target_column": 0, "within": [0, 4, 6], "presum": 0, "come": 0, "repres": 0, "retriev": 0, "read": [0, 6, 11, 20], "doe": [0, 7, 10, 14, 21], "support": [0, 10, 11], "m2m": 0, "o2m": 0, "merge_model": [0, 9], "old_model": 0, "new_model": 0, "ref_field": 0, "merg": [0, 13, 14, 15, 16, 19, 20, 21, 22], "doesn": 0, "move": [0, 8, 13, 14, 20, 21], "messag": [0, 9, 18], "kwarg": 0, "handler": 0, "non": [0, 7], "critic": 0, "notif": 0, "about": [0, 9, 11], "extend": 0, "report": [0, 4, 8, 11, 13, 20, 21, 22], "concern": 0, "defin": [0, 24], "no_vers": 0, "use_env": 0, "uid": 0, "context": [0, 12], "plain": 0, "start": [0, 2, 3, 5, 6, 11, 16], "10": [0, 9, 23], "eviron": 0, "request": [0, 10], "ignor": [0, 24], "signatur": 0, "func": 0, "higher": 0, "execept": 0, "frame": 0, "abov": [0, 6], "move_field_m2o": [0, 9], "pool": 0, "registry_old_model": 0, "field_old_model": 0, "m2o_field_old_model": 0, "registry_new_model": 0, "field_new_model": 0, "quick_request": 0, "compute_func": 0, "binary_field": 0, "A": [0, 3, 5, 6, 8, 11, 16], "b": [0, 6], "m2o": 0, "exempl": 0, "product_product": 0, "product_templ": 0, "manag": [0, 3, 6, 7, 8, 9, 14], "avail": [0, 2, 6, 11, 12, 13, 14, 15, 19, 20, 21, 22], "link": 0, "otherwis": 0, "4": [0, 9, 10, 12, 21], "common": 0, "instanc": [0, 2, 6, 7, 8, 11, 12], "val": 0, "differ": [0, 6, 8, 23], "uniqu": 0, "algorithm": 0, "most": [0, 6, 24], "present": 0, "transition_condit": 0, "reactiv": 0, "deprec": 0, "sinc": [0, 6], "11": [0, 9, 23], "were": [0, 3, 6, 8, 12], "remove_tables_fk": [0, 9], "anymor": [0, 3, 22], "keep": [0, 1], "fk": 0, "modif": 0, "modifi": [0, 7, 24], "too": 0, "problem": 0, "slow": 0, "down": 0, "even": [0, 6, 7], "more": [0, 2, 6, 7, 11, 24], "rename_field": [0, 9], "no_deep": 0, "yet": [0, 5, 11, 13, 16], "contrast": 0, "complet": 0, "side": 0, "featur": [0, 8, 14, 22], "export": [0, 11], "whenev": [0, 6], "pure": 0, "preserv": [0, 18], "variabl": [0, 11], "thing": 0, "previs": 0, "todo": [0, 8], "task": [0, 6], "break": 0, "oper": 0, "involv": [0, 9], "Not": [0, 5, 16], "rename_model": [0, 9], "model_spec": 0, "implement": [0, 6, 8], "associ": [0, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "rename_t": [0, 9], "rename_properti": [0, 9], "happen": [0, 1, 6], "table_spec": 0, "sequenc": 0, "result": [0, 4], "rename_xmlid": [0, 9, 24], "xmlids_spec": 0, "allow_merg": 0, "res_group": 0, "although": 0, "respect": 0, "recommend": [0, 11], "categori": [0, 24], "fly": 0, "routin": 0, "resurfac": 0, "longer": 0, "period": 0, "though": [0, 7], "appli": [0, 7, 8], "incomplet": 0, "lead": 0, "inconsist": [0, 6], "safe_unlink": [0, 9], "do_rais": 0, "occur": [0, 24], "unlink": [0, 24], "broken": 0, "transact": 0, "catch": 0, "except": [0, 6], "necessarili": 0, "recordset": 0, "let": 0, "rais": 0, "set_default": [0, 8, 9], "default_spec": 0, "forc": 0, "use_orm": 0, "mean": [0, 1], "assign": [0, 22], "overwrit": 0, "earlier": [0, 9, 11, 12], "bewar": 0, "combin": [0, 6], "claus": 0, "set_xml_ids_noupdate_valu": [0, 9], "table_exist": [0, 9], "view": [0, 2], "update_field_multilang": [0, 9], "languag": 0, "callabl": 0, "old_valu": 0, "lang_cod": 0, "update_module_moved_field": [0, 9], "moved_field": 0, "old_modul": 0, "new_modul": 0, "definit": 0, "No": [0, 13, 14, 15, 19, 20, 21, 22], "nativ": 0, "previou": [0, 3, 11, 24], "update_module_moved_model": [0, 9], "update_module_nam": [0, 9], "namespec": 0, "merge_modul": 0, "deal": 0, "like": [0, 7], "specifi": 0, "update_workflow_workitem": [0, 9], "ref_spec_act": 0, "find": [0, 5, 9, 14, 16, 22], "state": [0, 6], "abl": 0, "continu": [0, 6], "coupl": 0, "extern": 0, "first": [0, 6, 8, 10], "replac": [0, 14, 15], "second": [0, 8, 10], "warn_possible_dataloss": [0, 9], "test": [0, 6], "count": 0, "possibli": 0, "These": [0, 6, 22], "per": [0, 3, 8, 12, 23], "releas": [0, 2, 3, 4, 5, 8, 10, 12, 13, 14, 15, 16, 21, 22, 23, 24], "openupgrade_70": 0, "get_partner_id_from_user_id": [0, 9], "user_id": 0, "partner_id": 0, "set_partner_id_from_partner_address_id": [0, 9], "partner_field": 0, "address_field": 0, "contact": [0, 13, 14, 15, 16, 19, 20, 21, 22], "found": [0, 3, 5, 6, 16], "address": [0, 22], "overrid": 0, "noth": [0, 5, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "openupgrade_80": 0, "get_last_post_for_model": [0, 9], "model_pool": 0, "dict": 0, "latest": [0, 9, 11], "assum": 0, "superuser_id": 0, "question": 0, "set_message_last_post": [0, 9], "message_last_post": 0, "estim": 0, "last": 0, "pooler": 0, "get_pool": 0, "dbname": 0, "update_alias": [0, 9], "set_parent_thread_id": 0, "alias_default": 0, "defaults_id_kei": 0, "alias": 0, "accord": [0, 6], "how": [0, 3, 6, 7, 8, 9], "configur": [0, 2, 4, 9, 10], "model_id": 0, "alias_parent_model_id": 0, "alia": 0, "alias_parent_thread_id": 0, "simpl": [0, 6, 8], "tool": [0, 1, 3, 4, 12, 14], "openupgrade_90": 0, "convert_binary_field_to_attach": [0, 9], "attach": 0, "attribut": [0, 24], "res_nam": 0, "lose": [0, 8, 24], "duplic": 0, "through": [0, 6], "lot": [0, 4, 6, 11], "logic": 0, "guess": 0, "mime": 0, "format": [0, 3, 9], "length": 0, "save": [0, 6], "worth": 0, "much": 0, "techniqu": 0, "replace_account_typ": [0, 9], "type_spec": 0, "unit": 0, "attempt": 0, "openupgrad": [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 19, 20, 21, 22, 24], "prefix": 1, "openupgrade_legacy_": 1, "word": 1, "conserv": 1, "strategi": 1, "fix": [1, 6, 9, 10, 12], "incorrect": 1, "stabl": 1, "while": 1, "clean": [1, 11], "tidi": 1, "e": 1, "restor": [1, 6], "between": [1, 3, 5, 6, 8, 13, 14, 15, 16, 19, 20, 21, 22, 23], "layout": [1, 8], "orphan": 1, "protect": 1, "reintroduc": 1, "There": [1, 12], "_database_cleanup_": 1, "host": [1, 3, 10], "oca": [1, 2, 3, 4, 5, 6, 9, 10, 11, 13, 14, 15, 20, 21, 22], "server": [1, 2, 3, 7, 11, 24], "project": [1, 4, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "purg": 1, "intuit": 1, "encourag": 1, "full": [1, 6, 12], "vacuum": 1, "free": [1, 7], "up": [1, 2, 11], "disk": 1, "space": 1, "document": [1, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22], "two": [2, 3, 10, 24], "upgrade_analysi": [2, 3], "openupgrade_script": [2, 3, 6, 11], "14": [2, 3, 6, 9, 10, 11, 23], "0": [2, 3, 7, 9, 10, 11, 12, 23], "fork": [2, 3, 10, 11], "branch": [2, 3, 10, 11], "That": [2, 6, 7], "openupgrade_record": [2, 3], "On": 2, "both": [2, 6, 7, 11], "distribut": [2, 5, 16, 21, 23], "menu": 2, "gener": [2, 3, 9, 24], "wizard": 2, "recent": 2, "comparison": [2, 24], "config": 2, "connect": 2, "form": [2, 24], "locat": [2, 6], "folder": 2, "subdirectori": [3, 12], "repositori": [3, 11], "edit": [3, 5, 6, 11, 14, 16], "than": [3, 11, 12], "under": [3, 11, 13, 20, 21, 24], "openupgrade_analysi": [3, 5, 6, 13, 14, 15, 16, 19, 20, 21, 22], "txt": [3, 5, 6, 13, 14, 15, 16, 19, 20, 21, 22], "openupgrade_analysis_work": [3, 6], "annot": 3, "noupdate_chang": [3, 24], "review": [3, 5, 9, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24], "python": [3, 6, 12], "openupgrade_general_log": 3, "statist": 3, "accomplish": 4, "parti": [4, 23], "help": [4, 5, 6, 7, 10, 11, 16], "interest": [4, 24], "discuss": [4, 6], "stateg": 4, "technic": [4, 9], "pleas": [4, 5, 10, 12, 13, 14, 15, 16, 19, 20, 21, 22], "give": [4, 10, 24], "softwar": 4, "u": [4, 6], "feedback": 4, "improv": [4, 10], "propos": [4, 13, 14, 15, 19, 20, 21, 22], "contribut": [4, 9], "consult": 4, "newer": 4, "profession": 4, "organis": 4, "hire": [4, 10], "technologi": 4, "insist": 4, "back": [4, 6, 10, 12], "independ": 4, "knowledg": [4, 17, 18, 19, 20, 21], "thank": 4, "status": [5, 16], "analys": [5, 13, 14, 15, 16, 19, 20, 21, 22], "readi": [5, 16], "progress": [5, 13, 14, 15, 16, 19, 20, 21, 22], "pull": [5, 6, 10, 13, 14, 15, 16, 20, 21, 22], "look": [5, 12, 16], "out": [5, 11, 16, 24], "explain": 6, "page": [6, 9, 20], "3": [6, 9, 10, 20, 21], "might": [6, 7, 8, 11], "less": 6, "Then": 6, "luckili": 6, "mani": 6, "reduc": 6, "significantli": 6, "api": [6, 9], "appropri": 6, "main": [6, 10], "complex": 6, "what": 6, "appropriatli": 6, "13": [6, 9, 11, 23], "mass_mail": [6, 13, 14, 15, 16, 20, 21, 22], "did": 6, "2273": 6, "introduct": [6, 9], "highlight": 6, "underestim": 6, "power": 6, "situat": [6, 8], "unleash": 6, "successfulli": 6, "overcom": 6, "acc": 6, "pocalyps": 6, "2275": 6, "analysi": [6, 9, 10, 21, 24], "show": 6, "plan": [6, 21], "achiev": 6, "pick": 6, "familiar": 6, "awar": 6, "engag": 6, "contributor": [6, 10], "understand": 6, "basic": 6, "describ": 6, "easi": 6, "localhost": 6, "8069": 6, "web": [6, 11, 13, 14, 15, 16, 20, 21, 22], "stop": [6, 8, 11], "c": 6, "rerun": 6, "fixed_modul": 6, "face": 6, "unexpect": 6, "ensur": 6, "altern": 6, "mention": 6, "left": [6, 24], "off": 6, "caus": [6, 8], "But": 6, "live": [6, 11], "explan": 6, "2499": 6, "q": 6, "3apr": 6, "5bfix": 6, "5d": 6, "faq": [6, 9], "treat": [7, 11], "edi": [7, 19, 20, 21], "detect": [7, 8], "slightli": 7, "loop": 7, "part": [7, 10], "until": 7, "fire": 7, "better": 7, "robust": 7, "against": 7, "anticip": 7, "unknown": 7, "product": [7, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24], "never": 7, "ever": 7, "anywai": [7, 22], "corrupt": 7, "9": [7, 9, 12, 23], "engin": 7, "recomput": 7, "section": 8, "displai": 8, "clear": 8, "signal": 8, "line": [8, 11], "descript": 8, "separ": [8, 10, 11], "parenthes": 8, "flag": [8, 11, 24], "encod": 8, "fit": 8, "remain": 8, "determin": 8, "At": [8, 11], "employe": 8, "hr": [8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "deriv": 8, "depart": 8, "hierarchi": 8, "hardcod": 8, "audit": 8, "encount": [8, 11], "Of": 8, "cours": 8, "posibl": 8, "temporari": 8, "lookup": 8, "around": 8, "becam": 8, "titl": 8, "del": 8, "distinct": 8, "manner": 8, "easier": 8, "match": 8, "deleg": 8, "_inherit": 8, "introduc": [8, 11, 12], "inherit": 8, "access": [8, 22, 24], "secur": 8, "rule": 8, "consequ": 8, "overview": [8, 9, 23], "final": 8, "older": [9, 11], "coverag": [9, 10], "adjust": [9, 10], "repeat": [9, 10], "commun": [9, 10, 13, 14, 20, 21], "financi": 14, "logist": 14, "warehous": 14, "invoic": 22, "sale": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "social": 22, "8": [9, 23], "7": [9, 21, 23], "learn": [9, 11], "scrip": 9, "pr": 9, "trial": 9, "restart": 9, "systemat": 9, "method": [9, 11, 12], "io": 9, "search": 9, "busi": 10, "applic": 10, "suit": 10, "platform": 10, "aim": 10, "packag": 10, "sold": 10, "sa": 10, "framework": 10, "git": [10, 11], "terminologi": 10, "extra": [10, 21, 22], "commit": [10, 12], "donat": 10, "sponsor": 10, "bin": 11, "directli": 11, "uncov": 11, "openupgrade_framework": 11, "Or": 11, "across": 11, "master": 11, "egg": 11, "integr": 11, "lack": 11, "decid": 11, "absolut": 11, "backup": 11, "command": 11, "rather": 11, "sever": 11, "realli": 11, "openupgrade_target_vers": 11, "stanza": 11, "header": 11, "autoinstal": 11, "force_dep": 11, "With": 11, "manipul": 11, "Be": 11, "circular": 11, "again": 11, "ask": 11, "bug": 11, "yourself": 11, "core": [12, 14, 22], "reli": 12, "built": 12, "dai": 12, "tinyerp": 12, "proprietari": 12, "occassion": 12, "glitch": 12, "lifecycl": 12, "8b02879ff5": 12, "docstr": 12, "7c95c14c06d77e5ebbd7aafd9c0c345b47d27d30": 12, "l23": 12, "organ": 12, "lower": 12, "three": 12, "deferred_": 12, "maintain": 12, "collect": [12, 24], "outsid": 12, "statu": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "inform": [13, 14, 15, 19, 20, 21, 22], "share": [13, 14, 15, 17, 18, 19, 20, 21, 22], "trunk": [13, 14, 15, 19, 20, 21, 22], "account_account": [13, 17, 18, 19, 20, 21, 22], "account_analytic_default": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "account_asset": [13, 14, 19, 20, 21, 22], "account_bank_statement_import": [13, 14, 15, 16, 21, 22], "account_budget": [13, 14, 17, 18, 19, 20, 21, 22], "account_cancel": [13, 14, 15, 17, 18, 19, 20, 21, 22], "account_cash_basis_base_account": [13, 14, 21, 22], "account_check_print": [13, 14, 15, 16, 21, 22], "account_invo": [13, 14], "account_lock": [13, 14, 15, 16, 21, 22], "account_pay": [13, 14, 15, 16, 17, 18, 19, 20, 21], "account_tax_cash_basi": [13, 21, 22], "account_tax_python": [13, 14, 15, 16, 21, 22], "account_test": [13, 14, 15, 16, 19, 20, 21, 22], "account_vouch": [13, 14, 15, 17, 18, 19, 20, 21, 22], "analyt": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "anonym": [13, 14, 17, 18, 19, 20, 21, 22], "auth_crypt": [13, 14, 19, 20, 21, 22], "auth_ldap": [13, 14, 15, 16, 19, 20, 21, 22], "auth_oauth": [13, 14, 15, 16, 19, 20, 21, 22], "auth_signup": [13, 14, 15, 16, 19, 20, 21, 22], "barcod": [13, 14, 15, 16, 21, 22], "base_action_rul": [13, 17, 18, 19, 20, 21, 22], "base_autom": [13, 14, 15, 16], "base_address_c": [13, 14, 15, 16], "base_address_extend": [13, 14, 15, 16], "base_gengo": [13, 14, 15, 16, 19, 20, 21, 22], "base_geoloc": [13, 14, 15, 16, 20, 21, 22], "base_iban": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "base_import": [13, 14, 15, 16, 19, 20, 21, 22], "base_import_modul": [13, 14, 15, 16, 20, 21, 22], "base_setup": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "base_sparse_field": [13, 14, 15, 16], "base_vat": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "base_vat_autocomplet": [13, 14], "board": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "bu": [13, 14, 15, 16, 21, 22], "calendar": [13, 14, 15, 16, 20, 21, 22], "calendar_sm": [13, 14, 15, 16], "crm": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "crm_livechat": [13, 14, 15, 16], "crm_phone_valid": [13, 14, 15], "crm_project": [13, 14, 15], "crm_project_issu": [13, 20, 21, 22], "decimal_precis": [13, 14, 15, 17, 18, 19, 20, 21, 22], "deliveri": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "event": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "event_sal": [13, 14, 15, 16, 19, 20, 21, 22], "fetchmail": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "fleet": [13, 14, 15, 16, 19, 20, 21, 22], "gamif": [13, 14, 15, 16, 20, 21, 22], "gamification_sale_crm": [13, 14, 15, 16, 20, 21, 22], "google_account": [13, 14, 15, 16, 20, 21, 22], "google_calendar": [13, 14, 15, 16, 20, 21, 22], "google_dr": [13, 14, 15, 16, 20, 21, 22], "google_spreadsheet": [13, 14, 15, 16, 20, 21, 22], "hr_attend": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "hr_contract": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "hr_expens": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "hr_expense_check": [13, 14, 15, 16, 22], "hr_gamif": [13, 14, 15, 16, 20, 21, 22], "hr_holidai": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "hr_mainten": [13, 14, 15, 16, 22], "hr_org_chart": [13, 14, 15, 16], "hr_payrol": [13, 14, 15, 17, 18, 19, 20, 21, 22], "hr_payroll_account": [13, 14, 15, 17, 18, 19, 20, 21, 22], "hr_recruit": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "hr_recruitment_survei": [13, 14, 15, 16, 22], "hr_timesheet": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "hr_timesheet_attend": [13, 14, 15, 16, 22], "hr_timesheet_sheet": [13, 17, 18, 19, 20, 21, 22], "http_rout": [13, 14, 15, 16], "hw_blackbox_b": [13, 14, 15, 22], "hw_escpo": [13, 14, 15, 16, 20, 21, 22], "hw_posbox_homepag": [13, 14, 15, 16, 20, 21, 22], "hw_posbox_upgrad": [13, 14, 15, 20, 21, 22], "hw_proxi": [13, 14, 15, 16, 20, 21, 22], "hw_scale": [13, 14, 15, 20, 21, 22], "hw_scanner": [13, 14, 15, 20, 21, 22], "hw_screen": [13, 14, 15], "iap": [13, 14, 15, 16], "im_livechat": [13, 14, 15, 16, 20, 21, 22], "l10n_ae": [13, 14, 15, 16, 21, 22], "l10n_ar": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_at": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_au": [13, 14, 15, 16, 21, 22], "l10n_be": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_be_hr_payrol": [13, 14, 15, 19, 20, 21, 22], "l10n_be_hr_payroll_account": [13, 14, 15, 19, 20, 21, 22], "l10n_be_hr_payroll_fleet": [13, 14, 15], "l10n_be_intrastat": [13, 14, 21, 22], "l10n_be_intrastat_2019": [13, 14, 22], "l10n_be_invoice_bba": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_bo": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_br": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_ca": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_ch": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_cl": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_cn": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_cn_small_busi": [13, 14, 15, 16, 21, 22], "l10n_cn_standard": [13, 14, 15, 16, 21, 22], "l10n_co": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_cr": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_de": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_de_skr03": [13, 14, 15, 16, 21, 22], "l10n_de_skr04": [13, 14, 15, 16, 21, 22], "l10n_do": [13, 14, 15, 16, 21, 22], "l10n_ec": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_e": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_et": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_eu_servic": [13, 14, 15, 16, 21, 22], "l10n_fr": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_fr_certif": [13, 14, 15, 21, 22], "l10n_fr_fec": [13, 14, 15, 16, 21, 22], "l10n_fr_hr_payrol": [13, 14, 15, 19, 20, 21, 22], "l10n_fr_pos_cert": [13, 14, 15, 16, 21, 22], "l10n_fr_sale_clos": [13, 14, 15, 21, 22], "l10n_generic_coa": [13, 14, 15, 16, 21, 22], "l10n_gr": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_gt": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_hn": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_hr": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_hu": [13, 14, 15, 16, 21, 22], "l10n_in": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_in_hr_payrol": [13, 14, 15, 19, 20, 21, 22], "l10n_in_purchas": [13, 14, 15, 16], "l10n_in_sal": [13, 14, 15, 16], "l10n_in_schedule6": [13, 14, 15, 21, 22], "l10n_in_stock": [13, 14, 15, 16], "l10n_it": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_jp": [13, 14, 15, 16, 21, 22], "l10n_lu": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_ma": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_multilang": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_mx": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_nl": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_no": [13, 14, 15, 16, 21, 22], "l10n_nz": [13, 14, 15, 16, 21, 22], "l10n_pa": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_pe": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_pl": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_pt": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_ro": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_sa": [13, 14, 15, 16, 21, 22], "l10n_sg": [13, 14, 15, 16, 21, 22], "l10n_si": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_syscohada": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_th": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_tr": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_uk": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_u": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_ui": [13, 14, 15, 16, 19, 20, 21, 22], "l10n_ve": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "l10n_vn": [13, 14, 15, 16, 20, 21, 22], "link_track": [13, 14, 15, 16, 21, 22], "lunch": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "mail": [13, 14, 15, 16, 19, 20, 21, 22], "mainten": [13, 14, 15, 16, 22], "marketing_campaign": [13, 17, 18, 19, 20, 21, 22], "marketing_campaign_crm_demo": [13, 17, 18, 19, 20, 21, 22], "mass_mailing_ev": [13, 14, 15, 16], "mass_mailing_event_track": [13, 14, 15, 16], "membership": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "mrp": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "mrp_byproduct": [13, 14, 15, 19, 20, 21, 22], "mrp_repair": [13, 14, 17, 18, 19, 20, 21, 22], "note_pad": [13, 14, 15, 16, 19, 20, 21, 22], "pad": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "pad_project": [13, 14, 15, 16, 19, 20, 21, 22], "payment": [13, 14, 15, 16, 20, 21, 22], "payment_adyen": [13, 14, 15, 16, 20, 21, 22], "payment_author": [13, 14, 15, 16, 21, 22], "payment_buckaroo": [13, 14, 15, 16, 20, 21, 22], "payment_ogon": [13, 14, 15, 20, 21, 22], "payment_payp": [13, 14, 15, 16, 20, 21, 22], "payment_payumonei": [13, 14, 15, 16, 22], "payment_sip": [13, 14, 15, 16, 21, 22], "payment_strip": [13, 14, 15, 16, 22], "payment_stripe_sca": [13, 14, 15, 22], "payment_transf": [13, 14, 15, 16, 20, 21, 22], "phone_valid": [13, 14, 15, 16], "point_of_sal": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "portal": [13, 14, 15, 16, 19, 20, 21, 22], "portal_gamif": [13, 20, 21, 22], "portal_sal": [13, 19, 20, 21, 22], "portal_stock": [13, 19, 20, 21, 22], "pos_cach": [13, 14, 15, 16, 21, 22], "pos_data_drink": [13, 14, 22], "pos_discount": [13, 14, 15, 16, 21, 22], "pos_mercuri": [13, 14, 15, 16, 21, 22], "pos_reprint": [13, 14, 15, 16, 21, 22], "pos_restaur": [13, 14, 15, 16, 21, 22], "pos_sal": [13, 14, 15, 16], "procur": [13, 17, 18, 19, 20, 21, 22], "procurement_jit": [13, 14, 15, 16, 20, 21, 22], "product_email_templ": [13, 14, 15, 16, 20, 21, 22], "product_expiri": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "product_extend": [13, 14, 20, 21, 22], "product_margin": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "project_issu": [13, 17, 18, 19, 20, 21, 22], "project_task": 13, "project_issue_sheet": [13, 17, 18, 19, 20, 21, 22], "project_timesheet_holidai": [13, 14, 15, 16], "purchas": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "purchase_mrp": [13, 14, 15, 16, 22], "purchase_requisit": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "rate": [13, 14, 15, 16, 21, 22], "rating_project": [13, 14, 21, 22], "rating_project_issu": [13, 21, 22], "report_intrastat": [13, 14, 17, 18, 19, 20, 21, 22], "sale_crm": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "sale_expens": [13, 14, 15, 16, 21, 22], "sale_manag": [13, 14, 15, 16], "sale_margin": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "sale_mrp": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "sale_order_d": [13, 14, 17, 18, 19, 20, 21, 22], "sale_pay": [13, 14], "sale_service_r": [13, 14, 22], "sale_stock": [13, 14, 15, 16, 19, 20, 21, 22], "sale_timesheet": [13, 14, 15, 16, 21, 22], "sales_team": [13, 14, 15, 16, 20, 21, 22], "stock_account": [13, 14, 15, 16, 20, 21, 22], "real": 13, "valuat": 13, "stock_calendar": [13, 21, 22], "stock_dropship": [13, 14, 15, 16, 20, 21, 22], "stock_landed_cost": [13, 14, 15, 16, 20, 21, 22], "stock_picking_batch": [13, 14, 15, 16], "stock_picking_wav": [13, 20, 21, 22], "subscript": [13, 17, 18, 19, 20, 21, 22], "survei": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "survey_crm": [13, 14, 15, 20, 21, 22], "theme_bootswatch": [13, 14, 15, 16, 21, 22], "theme_default": [13, 14, 15, 16, 21, 22], "transifex": [13, 14, 15, 16], "utm": [13, 14, 15, 16, 21, 22], "web_calendar": [13, 20, 21, 22], "web_diagram": [13, 14, 15, 16, 20, 21, 22], "web_editor": [13, 14, 15, 16, 21, 22], "web_kanban": [13, 20, 21, 22], "web_kanban_gaug": [13, 14, 15, 16, 20, 21, 22], "web_plann": [13, 14, 21, 22], "web_settings_dashboard": [13, 14, 15, 21, 22], "web_tour": [13, 14, 15, 16, 22], "website_blog": [13, 14, 15, 16, 20, 21, 22], "website_crm": [13, 14, 15, 16, 20, 21, 22], "website_crm_partner_assign": [13, 14, 15, 16, 20, 21, 22], "website_crm_phone_valid": [13, 14, 15], "website_custom": [13, 14, 15, 16, 20, 21, 22], "website_ev": [13, 14, 15, 16, 20, 21, 22], "website_event_quest": [13, 14, 15, 16, 21, 22], "website_event_sal": [13, 14, 15, 16, 20, 21, 22], "website_event_track": [13, 14, 15, 16, 20, 21, 22], "website_form": [13, 14, 15, 16, 21, 22], "website_form_project": [13, 14, 15, 16], "website_issu": [13, 21, 22], "website_forum": [13, 14, 15, 16, 20, 21, 22], "website_forum_doc": [13, 14, 20, 21, 22], "website_gengo": [13, 14, 15, 16, 20, 21, 22], "website_google_map": [13, 14, 15, 16, 20, 21, 22], "website_hr": [13, 14, 15, 20, 21, 22], "website_hr_recruit": [13, 14, 15, 16, 20, 21, 22], "website_link": [13, 14, 15, 16, 21, 22], "website_livechat": [13, 14, 15, 16, 20, 21, 22], "website_mail": [13, 14, 15, 16, 20, 21, 22], "website_mail_channel": [13, 14, 15, 16, 21, 22], "website_mass_mail": [13, 14, 15, 16, 21, 22], "website_membership": [13, 14, 15, 16, 20, 21, 22], "website_partn": [13, 14, 15, 16, 20, 21, 22], "website_pay": [13, 14, 15, 16, 20, 21, 22], "website_port": [13, 21, 22], "website_portal_sal": [13, 21, 22], "website_project": [13, 20, 21, 22], "website_project_issu": [13, 21, 22], "website_project_issue_sheet": [13, 21, 22], "website_project_timesheet": [13, 22], "website_quot": [13, 14, 20, 21, 22], "website_r": [13, 14, 15, 16], "website_rating_project": [13, 14], "website_rating_project_issu": [13, 21, 22], "website_sal": [13, 14, 15, 16, 20, 21, 22], "website_sale_comparison": [13, 14, 15, 16], "website_sale_deliveri": [13, 14, 15, 16, 20, 21, 22], "website_sale_digit": [13, 14, 15, 16, 21, 22], "website_sale_manag": [13, 14, 15, 16], "website_sale_opt": [13, 14, 21, 22], "website_sale_stock": [13, 14, 15, 16, 21, 22], "website_sale_stock_opt": [13, 14], "website_sale_wishlist": [13, 14, 15, 16], "website_slid": [13, 14, 15, 16, 21, 22], "website_theme_instal": [13, 14, 15, 16, 21, 22], "website_twitt": [13, 14, 15, 16, 20, 21, 22], "timesheet": 13, "sheet": 13, "umbrella": [13, 20, 21], "tree": [13, 14, 20, 21], "account_facturx": [14, 15, 16], "partner_autocomplet": [14, 15, 16], "crm_reveal": [14, 15], "digest": [14, 15, 16], "fetchmail_gmail": [14, 15, 16], "fetchmail_outlook": [14, 15], "google_gmail": [14, 15, 16], "hw_driver": [14, 15, 16], "im_livechat_mail_bot": [14, 15, 16], "im_support": [14, 15, 16], "l10n_cn_citi": [14, 15, 16], "l10n_dk": [14, 15, 16], "l10n_hk": [14, 15, 16], "l10n_id": [14, 15, 16], "l10n_it_edi": [14, 15, 16], "l10n_lt": [14, 15, 16], "l10n_mn": [14, 15, 16], "l10n_za": [14, 15, 16], "mail_bot": [14, 15, 16], "mass_mailing_crm": [14, 15, 16], "mass_mailing_sal": [14, 15, 16], "microsoft_outlook": [14, 15], "mrp_bom_cost": [14, 15], "repair": [14, 15, 16], "partner_autocomplete_address_extend": [14, 15, 16], "pos_cash_rond": 14, "purchase_stock": [14, 15, 16], "sale_purchas": [14, 15, 16], "sale_quotation_build": [14, 15, 16], "sm": [14, 15, 16], "snailmail": [14, 15, 16], "snailmail_account": [14, 15, 16], "social_media": [14, 15, 16], "stock_zebra": [14, 15], "test_mail": [14, 15, 16], "test_mass_mail": [14, 15, 16], "test_websit": [14, 15, 16], "uom": [14, 15, 16], "web_unsplash": [14, 15, 16], "website_sale_link_track": [14, 15], "website_survei": [14, 15], "asset": 14, "exactli": [14, 21], "account_asset_manag": 14, "budget": 14, "enterpris": 14, "account_budget_oca": 14, "suffer": [14, 16, 22], "account_revers": 14, "stock_putaway_product": 14, "account_analytic_default_hr_expens": [15, 16], "account_analytic_default_purchas": [15, 16], "account_debit_not": [15, 16], "attachment_index": [15, 16], "auth_password_polici": [15, 16], "auth_password_policy_signup": [15, 16], "crm_iap_lead": [15, 16], "crm_iap_lead_enrich": [15, 16], "crm_iap_lead_websit": [15, 16], "recov": 15, "crm_sm": [15, 16], "delivery_hs_cod": 15, "event_sm": [15, 16], "hr_fleet": [15, 16], "hr_holidays_attend": [15, 16], "payrol": 15, "payroll_account": 15, "hr_presenc": [15, 16], "hr_skill": [15, 16], "hr_skills_slid": [15, 16], "hr_skills_survei": [15, 16], "hr_work_entri": [15, 16], "l10n_be_edi": [15, 16], "l10n_co_po": [15, 16], "l10n_ie": [15, 16], "l10n_il": [15, 16], "l10n_in_po": [15, 16], "l10n_in_purchase_stock": [15, 16], "l10n_in_sale_stock": [15, 16], "l10n_latam_bas": [15, 16], "l10n_latam_invoice_docu": [15, 16], "l10n_se": [15, 16], "l10n_ua": [15, 16], "mass_mailing_event_sm": [15, 16], "mass_mailing_event_track_sm": [15, 16], "mass_mailing_slid": [15, 16], "mass_mailing_sm": [15, 16], "mrp_account": [15, 16], "mrp_subcontract": [15, 16], "mrp_subcontracting_account": [15, 16], "mrp_subcontracting_dropship": [15, 16], "payment_alipai": [15, 16], "payment_ingenico": [15, 16], "payment_payulatam": [15, 16], "payment_test": [15, 16], "pos_adyen": [15, 16], "pos_cash_round": [15, 16], "pos_epson_print": [15, 16], "pos_epson_printer_restaur": [15, 16], "pos_hr": [15, 16], "pos_kitchen_print": [15, 16], "pos_six": [15, 16], "product_matrix": [15, 16], "purchase_product_matrix": [15, 16], "purchase_requisition_stock": [15, 16], "sale_coupon": [15, 16], "sale_coupon_deliveri": [15, 16], "sale_product_configur": [15, 16], "sale_product_matrix": [15, 16], "sale_timesheet_purchas": [15, 16], "stock_sm": [15, 16], "test_mail_ful": [15, 16], "test_website_slides_ful": [15, 16], "test_xlsx_export": [15, 16], "website_crm_livechat": [15, 16], "website_crm_sm": [15, 16], "website_profil": [15, 16], "website_sale_coupon": [15, 16], "website_sale_coupon_deliveri": [15, 16], "website_sale_product_configur": [15, 16], "website_sale_slid": [15, 16], "website_sale_stock_product_configur": [15, 16], "website_slides_forum": [15, 16], "website_slides_survei": [15, 16], "website_sm": [15, 16], "adopt": 16, "account_statement_import": 16, "account_edi": 16, "account_edi_extend": 16, "account_edi_facturx": 16, "account_edi_proxy_cli": 16, "account_edi_ubl": 16, "account_fleet": 16, "account_qr_code_sepa": 16, "adyen_platform": 16, "auth_password_policy_port": 16, "auth_totp": 16, "auth_totp_port": 16, "coupon": 16, "split": 16, "event_crm": 16, "event_crm_sal": 16, "google_recaptcha": 16, "hr_holidays_calendar": 16, "iap_crm": 16, "iap_mail": 16, "l10n_ar_website_sal": 16, "l10n_ch_qriban": 16, "l10n_cz": 16, "l10n_de_purchas": 16, "l10n_de_repair": 16, "l10n_de_sal": 16, "l10n_de_stock": 16, "l10n_dz": 16, "l10n_es_edi_sii": 16, "l10n_fi": 16, "l10n_gcc_invoic": 16, "l10n_gcc_po": 16, "l10n_id_efaktur": 16, "l10n_it_edi_sdicoop": 16, "l10n_it_stock_ddt": 16, "l10n_sa_invoic": 16, "l10n_sa_po": 16, "l10n_se_ocr": 16, "l10n_sk": 16, "mail_bot_hr": 16, "mail_client_extens": 16, "microsoft_account": 16, "microsoft_calendar": 16, "tent": [16, 21], "mrp_landed_cost": 16, "mrp_product_expiri": 16, "odoo_referr": 16, "odoo_referral_port": 16, "payment_fix_register_token": 16, "payment_odoo_by_adyen": 16, "payment_stripe_checkout_webhook": 16, "portal_r": 16, "pos_restaurant_adyen": 16, "sale_project": 16, "sale_purchase_stock": 16, "sale_stock_margin": 16, "sale_timesheet_edit": 16, "test_base_autom": 16, "test_event_ful": 16, "website_event_crm": 16, "website_event_crm_quest": 16, "website_event_meet": 16, "website_event_meet_quiz": 16, "website_event_track_exhibitor": 16, "website_event_track_l": 16, "website_event_track_live_quiz": 16, "website_event_track_quiz": 16, "website_jitsi": 16, "account_analytic_analysi": [17, 18, 19, 20, 21], "account_analytic_plan": [17, 18, 19, 20, 21], "account_anglo_saxon": [17, 18, 19, 20, 21], "account_chart": [17, 18, 19, 20, 21], "account_coda": [17, 18], "account_followup": [17, 18, 19, 20, 21], "account_invoice_layout": [17, 18], "account_sequ": [17, 18, 19, 20, 21], "analytic_journal_billing_r": [17, 18], "analytic_user_funct": [17, 18, 19, 20, 21], "auction": [17, 18], "audittrail": [17, 18, 19], "base_calendar": [17, 18, 19], "base_contact": [17, 18], "base_crypt": [17, 18], "base_module_doc_rst": [17, 18], "base_module_qu": [17, 18], "base_module_record": [17, 18], "base_report_cr": [17, 18], "base_report_design": [17, 18, 19, 20, 21], "base_synchro": [17, 18], "base_tool": [17, 18], "caldav": [17, 18], "claim_from_deliveri": [17, 18, 19, 20, 21, 22], "crm_caldav": [17, 18], "crm_claim": [17, 18, 19, 20, 21, 22], "crm_fundrais": [17, 18], "crm_helpdesk": [17, 18, 19, 20, 21], "crm_partner_assign": [17, 18, 19, 20, 21, 22], "crm_profil": [17, 18, 19, 20, 21], "document_ftp": [17, 18, 19], "document_": [17, 18], "document_webdav": [17, 18, 19], "email_templ": [17, 18, 19, 20, 21], "event_project": [17, 18], "google_map": [17, 18], "hr_evalu": [17, 18, 19, 20], "hr_timesheet_invoic": [17, 18, 19, 20, 21], "html_view": [17, 18], "idea": [17, 18, 19], "mail_gatewai": [17, 18], "market": [17, 18, 19, 20, 21, 22], "mrp_jit": [17, 18, 19], "mrp_oper": [17, 18, 19, 20, 21, 22], "mrp_subproduct": [17, 18], "multi_compani": [17, 18, 19, 20, 21], "outlook": [17, 18], "product_manufactur": [17, 18, 19], "product_visible_discount": [17, 18, 19, 20, 21, 22], "profile_tool": [17, 18], "project_caldav": [17, 18], "project_gtd": [17, 18, 19], "project_long_term": [17, 18, 19], "project_mailg": [17, 18], "project_messag": [17, 18], "project_mrp": [17, 18, 19, 20], "project_plan": [17, 18], "project_retro_plan": [17, 18], "project_scrum": [17, 18], "project_timesheet": [17, 18, 19, 20, 21, 22], "purchase_analytic_plan": [17, 18, 19, 20, 21], "purchase_double_valid": [17, 18, 19, 20, 21], "report_design": [17, 18], "report_webkit": [17, 18, 19, 20, 21, 22], "report_webkit_sampl": [17, 18], "sale_analytic_plan": [17, 18, 19, 20, 21], "sale_journ": [17, 18, 19, 20, 21], "sale_layout": [17, 18, 20, 21, 22], "stock_invoice_directli": [17, 18, 19, 20, 21], "stock_loc": [17, 18, 19], "stock_no_autopick": [17, 18, 19], "stock_plan": [17, 18], "thunderbird": [17, 18], "users_ldap": [17, 18], "web_livechat": [17, 18], "web_uservoic": [17, 18], "wiki": [17, 18], "wiki_faq": [17, 18], "wiki_quality_manu": [17, 18], "wiki_sale_faq": [17, 18], "partial": 18, "dashboard": 18, "sent": 18, "launchpad": 19, "net": 19, "activereview": 19, "account_bank_statement_extens": [19, 20, 21], "account_check_writ": [19, 20, 21], "analytic_contract_hr_expens": [19, 20, 21], "auth_oauth_signup": 19, "auth_openid": [19, 20, 21], "base_statu": 19, "crm_todo": 19, "document_pag": [19, 20], "event_moodl": 19, "google_base_account": 19, "google_doc": 19, "l10n_be_coda": [19, 20, 21], "l10n_fr_rib": [19, 20, 21], "plugin": [19, 20], "plugin_outlook": [19, 20], "plugin_thunderbird": [19, 20], "portal_anonym": 19, "portal_claim": [19, 20, 21], "portal_crm": 19, "portal_ev": 19, "portal_hr_employe": 19, "portal_project": [19, 20, 21], "portal_project_issu": [19, 20, 21], "tab": 19, "web_analyt": [19, 20, 21, 22], "web_linkedin": [19, 20, 21], "web_shortcut": [19, 20], "anglo_saxon_dropship": [20, 21], "hr_applicant_docu": [20, 21], "im": 20, "marketing_crm": [20, 21], "sale_servic": [20, 21, 22], "web_api": [20, 21], "web_gantt": [20, 21], "web_graph": [20, 21], "web_kanban_sparklin": [20, 21], "website_certif": [20, 21], "website_mail_group": [20, 21], "website_report": [20, 21], "web_test": [20, 21], "web_tests_demo": [20, 21], "web_view_editor": [20, 21, 22], "shortcut": 20, "account_extra_report": [21, 22], "account_full_reconcil": [21, 22], "account_tax_adjust": [21, 22], "account_tax_exig": [21, 22], "crm_mass_mail": 21, "mail_templ": 21, "hr_equip": [21, 22], "im_chat": 21, "im_odoo_support": [21, 22], "mail_tip": [21, 22], "website_crm_claim": [21, 22], "procurement_jit_stock": 21, "product_uo": [21, 22], "web_tip": [21, 22], "website_instantclick": 21, "contract": 21, "account_analytic_distribut": 21, "print": 21, "bank": 21, "account_payment_ord": 21, "purchase_analytic_distribut": 21, "sale_analytic_distribut": 21, "account_invoice_ship": 22, "sale_order_back2draft": 22, "mass_mailing_security_group": 22, "permiss": 22, "mass": 22, "grant": 22, "offici": 23, "goal": 23, "design": 23, "effort": 23, "represent": 24, "therefor": 24, "ui": 24, "countri": 24, "group": 24, "surviv": 24, "particular": 24, "comment": 24, "overwritten": 24, "field_list": 0}, "objects": {"openupgradelib": [[0, 0, 0, "-", "openupgrade"], [0, 0, 0, "-", "openupgrade_70"], [0, 0, 0, "-", "openupgrade_80"], [0, 0, 0, "-", "openupgrade_90"]], "openupgradelib.openupgrade": [[0, 1, 1, "", "add_fields"], [0, 1, 1, "", "add_ir_model_fields"], [0, 1, 1, "", "add_xmlid"], [0, 1, 1, "", "check_values_selection_field"], [0, 1, 1, "", "chunked"], [0, 1, 1, "", "column_exists"], [0, 1, 1, "", "convert_field_to_html"], [0, 1, 1, "", "convert_to_company_dependent"], [0, 1, 1, "", "copy_columns"], [0, 1, 1, "", "copy_fields_multilang"], [0, 1, 1, "", "cow_templates_mark_if_equal_to_upstream"], [0, 1, 1, "", "cow_templates_replicate_upstream"], [0, 1, 1, "", "date_to_datetime_tz"], [0, 1, 1, "", "deactivate_workflow_transitions"], [0, 1, 1, "", "delete_model_workflow"], [0, 1, 1, "", "delete_record_translations"], [0, 1, 1, "", "delete_records_safely_by_xml_id"], [0, 1, 1, "", "delete_sql_constraint_safely"], [0, 1, 1, "", "disable_invalid_filters"], [0, 1, 1, "", "drop_columns"], [0, 1, 1, "", "float_to_integer"], [0, 1, 1, "", "get_legacy_name"], [0, 1, 1, "", "lift_constraints"], [0, 1, 1, "", "load_data"], [0, 1, 1, "", "logged_query"], [0, 1, 1, "", "logging"], [0, 1, 1, "", "m2o_to_x2m"], [0, 1, 1, "", "map_values"], [0, 1, 1, "", "merge_models"], [0, 1, 1, "", "message"], [0, 1, 1, "", "migrate"], [0, 1, 1, "", "move_field_m2o"], [0, 1, 1, "", "reactivate_workflow_transitions"], [0, 1, 1, "", "remove_tables_fks"], [0, 1, 1, "", "rename_columns"], [0, 1, 1, "", "rename_fields"], [0, 1, 1, "", "rename_models"], [0, 1, 1, "", "rename_property"], [0, 1, 1, "", "rename_tables"], [0, 1, 1, "", "rename_xmlids"], [0, 1, 1, "", "safe_unlink"], [0, 1, 1, "", "set_defaults"], [0, 1, 1, "", "set_xml_ids_noupdate_value"], [0, 1, 1, "", "table_exists"], [0, 1, 1, "", "update_field_multilang"], [0, 1, 1, "", "update_module_moved_fields"], [0, 1, 1, "", "update_module_moved_models"], [0, 1, 1, "", "update_module_names"], [0, 1, 1, "", "update_workflow_workitems"], [0, 1, 1, "", "warn_possible_dataloss"]], "openupgradelib.openupgrade_70": [[0, 1, 1, "", "get_partner_id_from_user_id"], [0, 1, 1, "", "set_partner_id_from_partner_address_id"]], "openupgradelib.openupgrade_80": [[0, 1, 1, "", "get_last_post_for_model"], [0, 1, 1, "", "set_message_last_post"], [0, 1, 1, "", "update_aliases"]], "openupgradelib.openupgrade_90": [[0, 1, 1, "", "convert_binary_field_to_attachment"], [0, 1, 1, "", "replace_account_types"]]}, "objtypes": {"0": "py:module", "1": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"]}, "titleterms": {"openupgrad": [0, 9, 11], "api": 0, "gener": 0, "method": 0, "7": [0, 19, 20], "0": [0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "8": [0, 20, 21], "9": [0, 21, 22], "after": 1, "migrat": [1, 6, 10, 11, 12], "how": 2, "run": [2, 11], "your": [2, 6, 10, 11], "own": 2, "analysi": [2, 3, 8], "databas": [3, 10, 11], "earlier": 3, "version": [3, 10], "content": 3, "commun": 4, "involv": 4, "script": [6, 11], "develop": [6, 7], "overview": 6, "learn": 6, "from": [6, 11], "exist": 6, "scrip": 6, "code": [6, 11], "review": 6, "open": 6, "pr": 6, "The": [6, 12], "trial": 6, "error": 6, "process": 6, "restart": 6, "upgrad": [6, 11], "fail": 6, "modul": [6, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "instead": 6, "all": 6, "systemat": 6, "resourc": 6, "faq": 7, "field": 8, "format": 8, "welcom": 9, "": 9, "document": 9, "indic": 9, "tabl": 9, "introduct": 10, "older": 10, "contribut": 10, "1": [11, 18, 19], "get": 11, "depend": 11, "openupgradelib": 11, "2": 11, "check": 11, "coverag": [11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "instal": 11, "3": 11, "make": 11, "copi": 11, "4": 11, "adjust": 11, "configur": 11, "odoo": [11, 12], "option": 11, "obsolet": 11, "file": 11, "5": [11, 17], "fix": 11, "data": 11, "repeat": 11, "write": 11, "miss": 11, "manag": 12, "10": [13, 22], "11": [13, 14], "12": [14, 15], "oca": 16, "account": [], "financi": [], "tool": [], "stock": [], "logist": [], "warehous": [], "13": [15, 16], "14": 16, "6": [17, 18, 19], "invoic": [], "sale": [], "workflow": [], "social": [], "xml": 24, "id": 24}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"OpenUpgrade API": [[0, "openupgrade-api"]], "General methods": [[0, "module-openupgradelib.openupgrade"]], "Methods for OpenUpgrade 7.0": [[0, "methods-for-openupgrade-7-0"]], "Methods for OpenUpgrade 8.0": [[0, "methods-for-openupgrade-8-0"]], "Methods for OpenUpgrade 9.0": [[0, "methods-for-openupgrade-9-0"]], "After migration": [[1, "after-migration"]], "How to run your own analysis": [[2, "how-to-run-your-own-analysis"]], "Database analysis": [[3, "database-analysis"]], "Earlier versions": [[3, "earlier-versions"]], "Contents": [[3, "contents"]], "Community involvement": [[4, "community-involvement"]], "Migration script development": [[6, "migration-script-development"]], "Overview": [[6, "overview"]], "Learn from existing migration scrips": [[6, "learn-from-existing-migration-scrips"]], "Learn from code review of open PRs": [[6, "learn-from-code-review-of-open-prs"]], "The Trial and error process for the development of your scripts": [[6, "the-trial-and-error-process-for-the-development-of-your-scripts"]], "Restart the upgrade of the failed module instead of upgrading all systematically": [[6, "restart-the-upgrade-of-the-failed-module-instead-of-upgrading-all-systematically"]], "Learning resources": [[6, "learning-resources"]], "Development FAQ": [[7, "development-faq"]], "Fields analysis format": [[8, "fields-analysis-format"]], "Welcome to OpenUpgrade\u2019s documentation!": [[9, "welcome-to-openupgrade-s-documentation"]], "Indices and tables": [[9, "indices-and-tables"]], "Introduction": [[10, "introduction"]], "Older versions": [[10, "older-versions"]], "Contribute": [[10, "contribute"]], "Migrating your database": [[10, "migrating-your-database"]], "Running the migration": [[11, "running-the-migration"]], "1. Get the code from OpenUpgrade and dependencies": [[11, "get-the-code-from-openupgrade-and-dependencies"]], "OpenUpgrade": [[11, "openupgrade"]], "openupgradelib": [[11, "openupgradelib"]], "2. Check coverage of the migration scripts for your installed modules": [[11, "check-coverage-of-the-migration-scripts-for-your-installed-modules"]], "3. Make a copy of the database to migrate": [[11, "make-a-copy-of-the-database-to-migrate"]], "4. Adjust the configuration for Odoo and OpenUpgrade": [[11, "adjust-the-configuration-for-odoo-and-openupgrade"]], "Configuration options": [[11, "configuration-options"]], "Obsolete options in the Odoo configuration file": [[11, "obsolete-options-in-the-odoo-configuration-file"]], "5. Run the upgrade, fix data and repeat\u2026": [[11, "run-the-upgrade-fix-data-and-repeat"]], "Write the missing migration scripts": [[11, "write-the-missing-migration-scripts"]], "The Odoo Migration Manager": [[12, "the-odoo-migration-manager"]], "Module coverage 10.0 -> 11.0": [[13, "module-coverage-10-0-11-0"]], "Module coverage 11.0 -> 12.0": [[14, "module-coverage-11-0-12-0"]], "Module coverage 12.0 -> 13.0": [[15, "module-coverage-12-0-13-0"]], "Module coverage 13.0 -> 14.0": [[16, "module-coverage-13-0-14-0"]], "OCA modules": [[16, "oca-modules"]], "Module coverage 5.0 -> 6.0": [[17, "module-coverage-5-0-6-0"]], "Module coverage 6.0 -> 6.1": [[18, "module-coverage-6-0-6-1"]], "Module coverage 6.1 -> 7.0": [[19, "module-coverage-6-1-7-0"]], "Module coverage 7.0 -> 8.0": [[20, "module-coverage-7-0-8-0"]], "Module coverage 8.0 -> 9.0": [[21, "module-coverage-8-0-9-0"]], "Module coverage 9.0 -> 10.0": [[22, "module-coverage-9-0-10-0"]], "Module coverage": [[23, "module-coverage"]], "XML IDs": [[24, "xml-ids"]]}, "indexentries": {"add_fields() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.add_fields"]], "add_ir_model_fields() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.add_ir_model_fields"]], "add_xmlid() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.add_xmlid"]], "check_values_selection_field() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.check_values_selection_field"]], "chunked() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.chunked"]], "column_exists() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.column_exists"]], "convert_binary_field_to_attachment() (in module openupgradelib.openupgrade_90)": [[0, "openupgradelib.openupgrade_90.convert_binary_field_to_attachment"]], "convert_field_to_html() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.convert_field_to_html"]], "convert_to_company_dependent() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.convert_to_company_dependent"]], "copy_columns() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.copy_columns"]], "copy_fields_multilang() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.copy_fields_multilang"]], "cow_templates_mark_if_equal_to_upstream() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.cow_templates_mark_if_equal_to_upstream"]], "cow_templates_replicate_upstream() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.cow_templates_replicate_upstream"]], "date_to_datetime_tz() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.date_to_datetime_tz"]], "deactivate_workflow_transitions() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.deactivate_workflow_transitions"]], "delete_model_workflow() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.delete_model_workflow"]], "delete_record_translations() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.delete_record_translations"]], "delete_records_safely_by_xml_id() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.delete_records_safely_by_xml_id"]], "delete_sql_constraint_safely() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.delete_sql_constraint_safely"]], "disable_invalid_filters() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.disable_invalid_filters"]], "drop_columns() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.drop_columns"]], "float_to_integer() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.float_to_integer"]], "get_last_post_for_model() (in module openupgradelib.openupgrade_80)": [[0, "openupgradelib.openupgrade_80.get_last_post_for_model"]], "get_legacy_name() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.get_legacy_name"]], "get_partner_id_from_user_id() (in module openupgradelib.openupgrade_70)": [[0, "openupgradelib.openupgrade_70.get_partner_id_from_user_id"]], "lift_constraints() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.lift_constraints"]], "load_data() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.load_data"]], "logged_query() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.logged_query"]], "logging() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.logging"]], "m2o_to_x2m() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.m2o_to_x2m"]], "map_values() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.map_values"]], "merge_models() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.merge_models"]], "message() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.message"]], "migrate() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.migrate"]], "module": [[0, "module-openupgradelib.openupgrade"], [0, "module-openupgradelib.openupgrade_70"], [0, "module-openupgradelib.openupgrade_80"], [0, "module-openupgradelib.openupgrade_90"]], "move_field_m2o() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.move_field_m2o"]], "openupgradelib.openupgrade": [[0, "module-openupgradelib.openupgrade"]], "openupgradelib.openupgrade_70": [[0, "module-openupgradelib.openupgrade_70"]], "openupgradelib.openupgrade_80": [[0, "module-openupgradelib.openupgrade_80"]], "openupgradelib.openupgrade_90": [[0, "module-openupgradelib.openupgrade_90"]], "reactivate_workflow_transitions() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.reactivate_workflow_transitions"]], "remove_tables_fks() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.remove_tables_fks"]], "rename_columns() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.rename_columns"]], "rename_fields() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.rename_fields"]], "rename_models() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.rename_models"]], "rename_property() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.rename_property"]], "rename_tables() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.rename_tables"]], "rename_xmlids() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.rename_xmlids"]], "replace_account_types() (in module openupgradelib.openupgrade_90)": [[0, "openupgradelib.openupgrade_90.replace_account_types"]], "safe_unlink() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.safe_unlink"]], "set_defaults() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.set_defaults"]], "set_message_last_post() (in module openupgradelib.openupgrade_80)": [[0, "openupgradelib.openupgrade_80.set_message_last_post"]], "set_partner_id_from_partner_address_id() (in module openupgradelib.openupgrade_70)": [[0, "openupgradelib.openupgrade_70.set_partner_id_from_partner_address_id"]], "set_xml_ids_noupdate_value() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.set_xml_ids_noupdate_value"]], "table_exists() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.table_exists"]], "update_aliases() (in module openupgradelib.openupgrade_80)": [[0, "openupgradelib.openupgrade_80.update_aliases"]], "update_field_multilang() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.update_field_multilang"]], "update_module_moved_fields() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.update_module_moved_fields"]], "update_module_moved_models() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.update_module_moved_models"]], "update_module_names() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.update_module_names"]], "update_workflow_workitems() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.update_workflow_workitems"]], "warn_possible_dataloss() (in module openupgradelib.openupgrade)": [[0, "openupgradelib.openupgrade.warn_possible_dataloss"]]}}) \ No newline at end of file diff --git a/docs/status.html b/docs/status.html deleted file mode 100644 index e0d2431462d4..000000000000 --- a/docs/status.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - Module coverage — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Module coverage

-

For all official addons, migration scripts should be provided for migrating -between subsequent major releases of Odoo. This is the goal of the project. -The design is such that the effort can be distributed between different -developing parties. See below for an overview of module coverage per version.

- -
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/xmlids.html b/docs/xmlids.html deleted file mode 100644 index f1e3e51b1065..000000000000 --- a/docs/xmlids.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - XML IDs — OpenUpgrade 14.0 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

XML IDs

-

The OpenUpgrade analysis files give a representation of the XML IDs that a -module defines, in comparison with the previous release of the module.

-

XML IDs which do not occur in the updated version of all installed modules -will be removed automatically by the Odoo server, if they do not have -the noupdate attribute. Therefore, you can ignore most entries here, such as

-
-
    -
  • ir.actions.*

  • -
  • ir.model.fields

  • -
  • ir.model.access

  • -
  • ir.model

  • -
  • ir.ui.*

  • -
  • res.country*

  • -
  • res.currency*

  • -
-
-

When XML ids of such record types change, the record will be recreated under -the new id, and the old record will be unlinked.

-

More interesting are data that are defined with the noupdate flag. In general, -you need to cover two cases in your scripts.

-
    -
  • Renamed XML ids of noupdate records. If a product category, or a res.groups -entry has been renamed, you should pass them to -rename_xmlids() -so that the item in your current database survives the migration in its -original form. If the XML id of a renamed noupdate record is not renamed -this way, the new record will be created in addition to the existing one, -and the existing record will lose its xml id.

  • -
  • Modified fields of noupdate records, as collected in the -noupdate_changes.xml in the migration analysis directory. When developing -the migration scripts for a particular module, review this file and comment -out any fields that must not be overwritten. If there is any data left that -you want to take, load it from your post migration script using -load_data().

  • -
-
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docsource/API.rst b/docsource/API.rst deleted file mode 100644 index fd9decbb4b9c..000000000000 --- a/docsource/API.rst +++ /dev/null @@ -1,52 +0,0 @@ -OpenUpgrade API -+++++++++++++++ - -The OpenUpgrade library contains all kinds of helper functions for your pre and -post scripts, in OpenUpgrade itself or in the migration scripts of your own -module (in either major or minor version upgrades). It can be installed with - -.. code-block:: bash - - pip install openupgradelib - -and then used in your scripts as - -.. code-block:: python - - from openupgradelib import openupgrade - -General methods ---------------- - -.. automodule:: openupgradelib.openupgrade - :members: - -Methods for OpenUpgrade 7.0 ---------------------------- - -The following specific methods for 7.0 are available. These have been -developed to cover specific needs as per data model changes in that -release. - -.. automodule:: openupgradelib.openupgrade_70 - :members: - -Methods for OpenUpgrade 8.0 ---------------------------- - -The following specific methods for 8.0 are available. These have been -developed to cover specific needs as per data model changes in that -release. - -.. automodule:: openupgradelib.openupgrade_80 - :members: - -Methods for OpenUpgrade 9.0 ---------------------------- - -The following specific methods for 9.0 are available. These have been -developed to cover specific needs as per data model changes in that -release. - -.. automodule:: openupgradelib.openupgrade_90 - :members: diff --git a/docsource/Makefile b/docsource/Makefile deleted file mode 100644 index 53839ec8f605..000000000000 --- a/docsource/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html web pickle htmlhelp latex changes linkcheck - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " pickle to make pickle files (usable by e.g. sphinx-web)" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - -clean: - -rm -rf build/* - -html: - mkdir -p build/html build/doctrees - $(SPHINXBUILD) $(ALLSPHINXOPTS) build/html - @echo - @echo "Build finished. The HTML pages are in build/html." - -pickle: - mkdir -p build/pickle build/doctrees - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle - @echo - @echo "Build finished; now you can process the pickle files or run" - @echo " sphinx-web build/pickle" - @echo "to start the sphinx-web server." - -web: pickle - -htmlhelp: - mkdir -p build/htmlhelp build/doctrees - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in build/htmlhelp." - -latex: - mkdir -p build/latex build/doctrees - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex - @echo - @echo "Build finished; the LaTeX files are in build/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -changes: - mkdir -p build/changes build/doctrees - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes - @echo - @echo "The overview file is in build/changes." - -linkcheck: - mkdir -p build/linkcheck build/doctrees - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in build/linkcheck/output.txt." diff --git a/docsource/after_migration.rst b/docsource/after_migration.rst deleted file mode 100644 index a0cb9223a646..000000000000 --- a/docsource/after_migration.rst +++ /dev/null @@ -1,21 +0,0 @@ -After migration -=============== - -OpenUpgrade keeps old model tables and old columns (prefixed with -`openupgrade_legacy_` word) in PostgreSQL as a conservative strategy because -they can be used in a later migration script (or to fix an incorrect migration) -or only for reference. - -After the upgraded database has been running stable for a while, you can -consider removing the obsolete tables and columns to keep your database clean -and tidy (i.e. to restore the consistency between the ORM and the database -layout). The data is orphaned, which means there is no protection from the ORM -when another module or a future version of Odoo reintroduces any table or -column (for a new purpose) that happens to still exist in your database. - -There's a module called _database_cleanup_, hosted on OCA server-tools project -(https://github.com/OCA/server-tools), that allows to purge this old data in -an intuitive way. - -You are also encouraged to have Postgresql run a full vacuum to free up disk -space (see the documentation of your version of Postgresql). diff --git a/docsource/analyse.rst b/docsource/analyse.rst deleted file mode 100644 index 44c28079447d..000000000000 --- a/docsource/analyse.rst +++ /dev/null @@ -1,38 +0,0 @@ -How to run your own analysis -============================ -If you do need to run your own analysis, you need to perform the following -steps. - -* Set up two servers of subsequent Odoo releases. Make the following modules - available: `upgrade_analysis` and `openupgrade_scripts`. - - In the case of a release before 14.0, you need to run the fork from the - corresponding branch in https://github.com/oca/openupgrade. That fork also - contains `openupgrade_records`. - -* On both instances, install a database without demo data and - install the *upgrade_analysis* module, which is included in the - OpenUpgrade server distribution. This will add a menu - *Upgrade Analysis* to the Settings menu. - -* On both instances, install the modules that you need to write migration - scripts for, or use the *Install Modules* from the *Upgrade Analysis* menu. - -* On both instances: from the analysis menu, start the *Generate Records - Wizard*. - -* On the target instance (this is the more recent version): from the - analysis menu, select the *Comparison Configuration* option and - create a new config to connect to the other instance. In the form view of - this configuration record , start a *New Analysis*. - -The analysis files for each of the modules will be placed in the following -location: - -* In the case of Odoo modules: in the path that is indicated by the - `--upgrade-path` parameter of the Odoo server, or in the `scripts` - folder of the `openupgrade_scripts` module directory if it is available in - your addons path - -* In the case of OCA or custom modules: in the `migrations/` - directory in the module directory itself. diff --git a/docsource/analysis.rst b/docsource/analysis.rst deleted file mode 100644 index a4830d5f7563..000000000000 --- a/docsource/analysis.rst +++ /dev/null @@ -1,50 +0,0 @@ -Database analysis -+++++++++++++++++ - -Database analysis files are hosted in `scripts` subdirectory of the -openupgrade_scripts module directory in the https://github.com/oca/openupgrade -repository. - -You can create a custom set of analysis files on any set of modules between -any two versions of Odoo using the `upgrade_analysis` module that is hosted -in https://github.com/oca/server-tools. - -Earlier versions ----------------- - -In editions earlier than 14.0, the analysis files were hosted in the forks of -Odoo at https://github.com/oca/openupgrade. The module to create the analysis -was placed in each branch of the openupgrade repository under -odoo/addons/openupgrade_records. - -Contents --------- - -The contents of the migration directory per module are: - -* A file `openupgrade_analysis.txt` that contains data model changes and - changes in the set of XML records -* A file `openupgrade_analysis_work.txt` which is a copy of the previous file, - annotated by the developers of the migration scripts -* A file `noupdate_changes.xml` containing changes that may need to be loaded - during module migration (after reviewing the contents of this automatically - generated file). -* A file `pre-migration.py` (or any Python file(s) starting with `pre-`) that - is executed by the Odoo migration manager just before the module is loaded. -* A file `post-migration.py` (or any Python file(s) starting with `post-`) that - is executed by the Odoo migration manager right after the module was loaded. -* A file `end-migration.py` (or any Python file(s) starting with `end-`) that - is executed by the Odoo migration manager when all modules have been - processed. - -The migration directory of the base module contains an additional file -`openupgrade_general_log.txt`. This file contains some statistics as well -as the analysis records of modules that could not be found in the target -release of Odoo anymore. - -.. toctree:: - :maxdepth: 2 - - analyse - xmlids - format diff --git a/docsource/community.rst b/docsource/community.rst deleted file mode 100644 index 51852745309e..000000000000 --- a/docsource/community.rst +++ /dev/null @@ -1,30 +0,0 @@ -Community involvement -===================== - -Writing migration scripts for Odoo is a lot of work, that can not be -accomplished by a single party. We need your help. - -If you are at all interested in discussing stategic, functional or -technical issues, please post an issue on the Github project: -``_. - -If you are a developer, give the OpenUpgrade software a go and give us -feedback. If you use the software, provide the project with your issue -reports and any migration scripts that you develop. Help to improve the -developer tools and any existing or newly proposed migration script -contributed by others. - -If you are an Odoo consulting company, use the tools to help your -customers migrate to a newer major release of Odoo and contribute -the scripts that you developed in the process. - -If you are are using Odoo professionally within your organisation, -consider hiring a Odoo consulting company to migrate your configuration -using the technology provided by this project, and insist that the -resulting migration scripts be contributed back. - -If you are an independent, knowledgable user of Odoo and the OpenUpgrade -project covers the modules that you have in use, try and use the software -to upgrade a copy of your database and give us feedback. - -Thank you! diff --git a/docsource/conf.py b/docsource/conf.py deleted file mode 100644 index dfbe0a3395b5..000000000000 --- a/docsource/conf.py +++ /dev/null @@ -1,194 +0,0 @@ -# -# OpenUpgrade documentation build configuration file, created by -# sphinx-quickstart on Wed Nov 30 10:38:00 2011. -# -# This file is execfile()d with the current directory set to its containing -# dir. -# -# The contents of this file are pickled, so don't put values in the namespace -# that aren't pickleable (module imports are okay, they're removed -# automatically). -# -# All configuration values have a default value; values that are commented out -# serve to show the default value. - - -# If your extensions are in another directory, add it here. If the directory -# is relative to the documentation root, use os.path.abspath to make it -# absolute, like shown here. - -# General configuration -# --------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ["sphinx.ext.autodoc"] - -# Add any paths that contain templates here, relative to this directory. -templates_path = [".templates"] - -# The suffix of source filenames. -source_suffix = ".rst" - -# The master toctree document. -master_doc = "index" - -# General substitutions. -project = "OpenUpgrade" - -# Rename to project_copyright after the release of Sphinx 3.5 -# pylint: disable=redefined-builtin -copyright = "2012-2021, Odoo Community Association (OCA) / The OpenUpgrade developers" - -# The default replacements for |version| and |release|, also used in various -# other places throughout the built documents. -# -# The short X.Y version. -version = "14.0" -# The full version, including alpha/beta/rc tags. -release = "14.0" - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -today_fmt = "%B %d, %Y" - -# List of documents that shouldn't be included in the build. -# unused_docs = [] - -# List of directories, relative to source directories, that shouldn't be -# searched for source files. -# exclude_dirs = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - - -# Options for HTML output -# ----------------------- - -# The style sheet to use for HTML and HTML Help pages. A file of that name -# must exist either in Sphinx' static/ path, or in one of the custom paths -# given in html_static_path. -# html_style = 'classic.css' - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (within the static path) to place at the top of -# the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = [".static"] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = "%b %d, %Y" - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_use_modindex = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, the reST sources are included in the HTML build as _sources/. -html_copy_source = False - -# Hide the Page source link in each documentation page's footer. -html_show_sourcelink = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = "OpenUpgradedoc" - - -# Options for LaTeX output -# ------------------------ - -latex_elements = {"papersize": "a4paper"} - -# The paper size ('letter' or 'a4'). -# latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -# latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, document class -# [howto/manual]). -latex_documents = [ - ( - "index", - "OpenUpgrade.tex", - "OpenUpgrade Documentation", - "The OpenUpgrade team", - "manual", - ), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -# latex_preamble = '' - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_use_modindex = True diff --git a/docsource/coverage_legend.rst b/docsource/coverage_legend.rst deleted file mode 100644 index b491e0dea80f..000000000000 --- a/docsource/coverage_legend.rst +++ /dev/null @@ -1,20 +0,0 @@ - -A module can have one of the following statuses: - -* **Nothing to do**: Analyse has been done, and there is nothing to do or - there's no change between the old edition and the new one; - -* **Done**: Scripts are ready to run and can be found in this distribution; - -* : Not covered yet. Please see the 'openupgrade_analysis.txt' file - of the module and start hacking the migration scripts! - -You will always find migration scripts that are ready for review or -work-in-progress at https://github.com/OCA/OpenUpgrade/pulls. Please have a -look to see if you can help out. - -In the table below, modules that are new in this release are marked with -|new|. Modules that are missing in the new release are marked with |del|. - -.. |new| image:: images/new.png -.. |del| image:: images/deleted.png diff --git a/docsource/development.rst b/docsource/development.rst deleted file mode 100644 index 52ba5dd1128e..000000000000 --- a/docsource/development.rst +++ /dev/null @@ -1,130 +0,0 @@ -Migration script development -++++++++++++++++++++++++++++ - -Overview --------- - -The execution of the migration scripts is triggered by the "Migration Manager": -:doc:`migrationmanager`. - -As explained with more detail in the page :doc:`migrationmanager`, the migration scripts -of a module are usually the combination of 3 python files (might be less if some -steps are not necessary): - -- pre-migration.py -- post-migration.py -- end-migration.py - -Since version 14, these files can be found here: - -``openupgrade_scripts/scripts/`` - -Each of those files will contain a function `migrate` which is called by the -Migration Manager. - -Then, the function migrate will call other functions. Each of these functions -will execute a task of the migration, these functions are the one which -needs most of the work from developers. These functions are usually declared in the -same file. - -Luckily, many pre-existing functions already exist within `openupgradelib` reducing -significantly the work of development. -See `OpenUpgrade API `_ - -For many modules, a developer will not even need to write any function, but will -"simply" need to call pre-existing functions from `openupgradelib` with the appropriate -arguments. The main complexities becomes to learn what are the functions available in -`openupgradelib` and then to select appropriatly the arguments (usually according to -the `openupgrade_analysis.txt`, see below). - -For instance, the migration to version 13 of mass_mailing did not require any custom -function: https://github.com/OCA/OpenUpgrade/pull/2273/files - -After this introduction, which highlight how simple the migration scripts can be, -do not underestimate the power of OpenUpgrade. -The migration of the account module to version 13 is the kind of situation where -the full power of OpenUpgrade was unleashed to successfully overcome the -"acc-pocalypse": -https://github.com/OCA/OpenUpgrade/pull/2275/files. - - -Learn from existing migration scrips ------------------------------------- - - -Since version 14, the migration scripts are located in: - -``openupgrade_scripts/scripts/`` - -During the review for a given module, you can follow this process: - -- Review the analysis (read more in :doc:`analysis`). First the file - `openupgrade_analysis.txt` showing some differences between the 2 versions of - the module. Then, `openupgrade_analysis_work.txt` to see what the developer - planned to do. -- Then you can check the other files to see how the plan was achieved. - -You should pick modules with which you are familiar with in both version and for which -you are aware of the changes. - -Learn from code review of open PRs ----------------------------------- - -https://github.com/OCA/OpenUpgrade/pulls - -This will engage you in a discussion with other contributors and help you understand -how developers selected one way or another to implement the migration scripts. - -The Trial and error process for the development of your scripts ---------------------------------------------------------------- - -Basically, this is the happening during the step when you try to run the upgrade -described in :doc:`migration_details`: - -- [A] get the copy of your database in old version as `db-upgrade`, it is - easy to do through the database manager of your old odoo - `http://localhost:8069/web/database/manager` -- [B] run ``odoo -d db-upgrade -u all --stop-after-init`` -- [C] In case of error, fix the error adding or editing migration - scripts within the module to fix, then rerun with ``-u `` - instead of ``-u all``. - This way of running is only done for testing purposes and will help you - save a lot of time in the development process. - Whenever facing unexpected errors, you might want to restart from [A] as - this step will leave your database in an inconsistent state. -- [D] After all issues are fixed go back to ``--update all`` to ensure that all - dependent modules have been upgraded. - -Restart the upgrade of the failed module instead of upgrading all systematically -................................................................................ - -**As an alternative to the step [C] mentioned above...** - -In case of error, fix the error (adding or editing migration -scripts), then rerun **without** the ``--update all``: -``odoo -d db-upgrade --stop-after-init``. This will continue the upgrade -process from where it left off, starting with the module that caused the -error. That way, the migration will not run the end-migration scripts of -the modules that were already upgraded before the error. But in case of a -live migration you always need to restore the database. - -Note that for the time being, this is not available in all versions -(see explanations here: https://github.com/OCA/OpenUpgrade/pull/2499). -It is available only for 12 and 13: -https://github.com/OCA/OpenUpgrade/pulls?q=is%3Apr+%5BFIX%5D+reset+exception - - -Learning resources ------------------- - -.. toctree:: - :maxdepth: 2 - - migrationmanager - devfaq - -You can also refer to the following: - -- `OpenUpgrade API `_ -- the code of OpenUpgrade API - `openupgrade.py `_ diff --git a/docsource/devfaq.rst b/docsource/devfaq.rst deleted file mode 100644 index e530ab4cca78..000000000000 --- a/docsource/devfaq.rst +++ /dev/null @@ -1,21 +0,0 @@ -Development FAQ -+++++++++++++++ - -How are new dependencies treated by the Odoo migration manager? - New dependencies (like the *edi* module is a new dependency of the - *account* module) will be detected by the upgrade process. The - Odoo server code is slightly modified to loop over this part - of the process to install new dependencies and then return to - upgrading the modules that depend on them, until no more modules - are processed. - -Are migration scripts fired when installing new modules? - Yes. That includes any new dependencies that the new version of any - module might declare. You might want to check for a non true value - of the *version* argument, or (better) make your script robust to - running against a database that it does not apply to, in anticipation - of any unknown unknowns. Also another argument for not running the - OpenUpgrade server in production, even though we both know that you - would never ever do so anyway. Developers are free to corrupt the regular - workings of Odoo if it helps the migration. For instance, from Openupgrade - 9.0 on, the workflow engine is disabled during field recomputation. diff --git a/docsource/format.rst b/docsource/format.rst deleted file mode 100644 index 105baf1a3f7f..000000000000 --- a/docsource/format.rst +++ /dev/null @@ -1,88 +0,0 @@ -Fields analysis format -====================== - -The first section displays models which are removed from the database. -The second section displays models which are added to the database. - -TODO: display which models moved to another module, instead of in the field -analysis? It should also be clear how to install such modules from the upgrade - -The second section lists the model fields which have been signalled by the -analysis script. Every line lists the following columns: - -module / model / field (field type) : description of the change - -Multiple changes per field are listed on separate lines. -If possible, the old situation is added to the change description (in between -parentheses). - -The change description flags the following types of change: - - * The field is now required. The upgrade script might apply the default for - this field, if it is encoded in the model, or any value that you might see - fit (see the openupgrade library - function :meth:`~openupgrade.set_defaults`). If any empty values remain, - these can be reported by the openupgrade report module (TODO). - If the field is a function field after the upgrade, this changes the cause - for action. See below. - - * A field is now a function or a related field. This might or might not call - for any action of your upgrade script, as the value is now automatically - determined. At the same time, this might cause data loss. An example is - the field employee's manager (hr module), which in Odoo 6 is derived - from the employee's department. - - Without any action in the upgrade script, you will lose the manually - encoded employee hierarchy. - - * A selection field's hardcoded selection changes. You need to audit the - function for any change in possible values and may need to map any - differences you encounter. - - * A selection field's selection is now being filled by a function or has - stopped doing so. You need to audit the function for any change in - possible values and may need to map any differences you encounter. - - (Of course, a selection function could change the set of posible values - in between functions.) - - * The field changes type. This always calls for action in your upgrade - script. Rename the database column to a temporary name in the pre script, - then migrate the values in the post script. A typical instance of this - change is when the field becomes a many2one lookup table, or the other way - around. An example of these are the partner's function which became a char - field in Odoo 6, and the partner's title which as a selection (thus - char type database column) and had to be migrated to a many2one on - res.partner.title. - - * A relation field's relation changes. You need to migrate the one target - model to the other, and update the references to them - - * A field is deleted from the model (marked by 'DEL'). Also fields from - deleted models are marked in this way. TODO: mark fields from deleted - models in a distinct manner. Any distinct features of the field are - displayed, for easier manual matching. - You need to audit any new fields - (see below) to see if they correspond to the deleted field and implement - this change in your upgrade script. It might also be the case that a - deleted field is now delegated to a new or existing _inherits table (see below). - - * A field is introduced in the model (marked by 'NEW'). Also fields from - introduced models are marked in this way. TODO: mark fields from introduced - models in a distinct manner? Any distinct features of the field are - displayed, for easier manual matching. You need to audit any deleted - fields (see below) to see if they correspond to the new field and - implement this change in your upgrade script. - - * The _inherits property of a model has changed. It might be the case that - fields which are removed are actually delegated to this newly - inherited table. - - * A new model is introduced. Copy all access data from the access csv and - security rules xml files and load them in your script. Also copy any - other data that may be introduced in this release of Odoo. This may - have consequences for other modules' migration scripts. TODO: create an - overview of new or renamed modules. - -The final section of the database layout analysis contains a simple report on -the changes that were detected. diff --git a/docsource/images/OpenUpgrade.png b/docsource/images/OpenUpgrade.png deleted file mode 100755 index c688ba747c0d..000000000000 Binary files a/docsource/images/OpenUpgrade.png and /dev/null differ diff --git a/docsource/images/OpenUpgrade.svg b/docsource/images/OpenUpgrade.svg deleted file mode 100644 index f698c894b2bf..000000000000 --- a/docsource/images/OpenUpgrade.svg +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docsource/images/OpenUpgrade_black.png b/docsource/images/OpenUpgrade_black.png deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/docsource/images/OpenUpgrade_black.svg b/docsource/images/OpenUpgrade_black.svg deleted file mode 100644 index 46666149ba61..000000000000 --- a/docsource/images/OpenUpgrade_black.svg +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docsource/images/deleted.png b/docsource/images/deleted.png deleted file mode 100644 index 8cf6273281bd..000000000000 Binary files a/docsource/images/deleted.png and /dev/null differ diff --git a/docsource/images/new.png b/docsource/images/new.png deleted file mode 100644 index 00a001da01d0..000000000000 Binary files a/docsource/images/new.png and /dev/null differ diff --git a/docsource/images/openupgrade-square.png b/docsource/images/openupgrade-square.png deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/docsource/index.rst b/docsource/index.rst deleted file mode 100644 index ec4a2bcb81d5..000000000000 --- a/docsource/index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. OpenUpgrade documentation master file, created by sphinx-quickstart on Wed Nov 30 10:38:00 2011. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -.. image:: images/OpenUpgrade.png - - -Welcome to OpenUpgrade's documentation! -+++++++++++++++++++++++++++++++++++++++ - - -**If you just want to migrate your database and don't care about the technical details, refer to** :doc:`migration_details` - -Contents: - -.. toctree:: - :maxdepth: 3 - - intro.rst - community.rst - status.rst - analysis.rst - development.rst - API.rst - -You should find the latest version of this documentation here: ``_ - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docsource/intro.rst b/docsource/intro.rst deleted file mode 100644 index 34e142c365dc..000000000000 --- a/docsource/intro.rst +++ /dev/null @@ -1,47 +0,0 @@ -Introduction -============ - -Odoo is an open source business application suite and development platform. -This project, *OpenUpgrade*, aims to provide an Open Source upgrade path for -Odoo. This is a community initiative, as the open source version of Odoo -does not support migrations from one major release to another. Instead, -migrations are part of a support package sold by Odoo SA. Note that the name -of the project refers to the old name of Odoo, *OpenERP*. - -The project is hosted as two separate GitHub projects: - -* https://github.com/OCA/openupgrade -* https://github.com/OCA/openupgradelib - - -The branches in the first project contain the framework, as well as the -database analysis and the migration scripts. - -The second project contains a library with helper functions. It -can be used in the migration of any Odoo module. - -Older versions --------------- -Before Odoo 14.0, the branches in https://github.com/OCA/openupgrade -contain copies (or forks in Git terminology) of the Odoo main project, but -with extra commits that include the framework, and the analysis and the -migration scripts for each module. - -Contribute ----------- -In order to contribute to the OpenUpgrade project, please - -* Post your code contributions as pull requests on - https://github.com/oca/openupgrade -* Donate to the Odoo Community Association (https://github.com/sponsors/OCA) -* Hire any active contributor to this project to help you migrate your - database, and give back any code improvements developed during the project. - -Migrating your database -======================= - -.. toctree:: - :maxdepth: 2 - - migration_details - after_migration diff --git a/docsource/migration_details.rst b/docsource/migration_details.rst deleted file mode 100644 index daec0e65d8a5..000000000000 --- a/docsource/migration_details.rst +++ /dev/null @@ -1,107 +0,0 @@ -Running the migration -===================== - -Check out the code manually and upgrade your database by calling odoo-bin, -(or openerp-server) directly. You will want to do this when you are working on -developing migration scripts for uncovered modules. - -1. Get the code from OpenUpgrade and dependencies -************************************************* - -OpenUpgrade -........... - -Make the `openupgrade_framework` and the `openupgrade_scripts` modules -available in the addons path in the Odoo instance of the new version. - -Or, for older versions: check out the OpenUpgrade source code from Github -for the branches you need. Each branch migrates to its version from the -previous version, so branch 13.0 migrates from 12.0 to 13.0. If you are -migrating across multiple versions, you need to run each version of -OpenUpgrade in order. Skipping versions is not supported. - -The OpenUpgrade repository includes both `openupgrade_framework` and -`openupgrade_scripts`: - -https://github.com/OCA/openupgrade - -openupgradelib -.............. - -* When installing the openupgradelib make sure you check out the latest version - from github to get the latest updates and fixes:: - - pip install git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib - -2. Check coverage of the migration scripts for your installed modules -********************************************************************* - -Check if there are migration scripts provided for the set of modules that -are installed in your Odoo database. If there are modules for which no -migration scripts have been developed yet, your migration may fail or the -integrity of your database may be lacking. Check the module coverage in -this documentation under :doc:`status` and refer to the :doc:`development` -documentation to add the missing migration scripts. - -3. Make a copy of the database to migrate -***************************************** - -Decide which database you are going to upgrade. You absolutely *must* make a -backup of your live database before you start this process! - -4. Adjust the configuration for Odoo and OpenUpgrade -**************************************************** - -Edit the configuration files and command line parameters to point to the -database you are going to upgrade. The recommended command line parameters are the -``--update all --stop-after-init --load=base,web,openupgrade_framework`` flags. - -For versions earlier than 14.0 that are running the OpenUpgrade fork rather -than Odoo itself, you do not pass the `load` parameter. - -Configuration options -..................... - -* When migrating across several versions of Odoo, setting the target version - as an environment variable allows OpenUpgrade to skip methods that are called - in every version but really only need to run in the target version. Make the - target version available to OpenUpgrade with:: - - export OPENUPGRADE_TARGET_VERSION=13.0 - - (when migrating up to 13.0) - -Obsolete options in the Odoo configuration file -............................................... - -Versions of OpenUpgrade earlier than 14.0 allow for the following configuration -options. Add these options to a separate stanza in the server configuration -file under a header *[openupgrade]* - -* *autoinstall* - A dictionary with module name keys and lists of module names - as values. If a key module is installed on your database, the modules from - the value (and their dependencies) are selected for installation as well. - -* *force_deps* - A dictionary with module name keys and lists of module names - as values. If a key module is installed on your database, the modules from - the value will be treated as a module dependency. With this directive, you - can manipulate the order in which the modules are migrated. If the modules - from the value are not already installed on your database, they will be - selected for installation (as will their dependencies). Be careful not to - introduce a circular dependency using this directive. - -5. Run the upgrade, fix data and repeat... -****************************************** - -Run the upgrade and check for errors. You will probably learn a lot about -your data and have to do some manual clean up before and after the upgrade. -Expect to repeat the process several times as you encounter errors, clean up -your data, and try again. If necessary, ask for help or report bugs on -Github. - -Write the missing migration scripts -................................... - -At this stage, if some of your modules don't have yet migration scripts, -you might need to add them yourself. -Read more about the development of migrations scripts in :doc:`development` diff --git a/docsource/migrationmanager.rst b/docsource/migrationmanager.rst deleted file mode 100644 index 5c910bd51e67..000000000000 --- a/docsource/migrationmanager.rst +++ /dev/null @@ -1,28 +0,0 @@ -The Odoo Migration Manager -++++++++++++++++++++++++++ - -The core mechanism that OpenUpgrade relies on is the migration manager that is -already built into Odoo itself. It is this mechanism that was used by Odoo to -run migrations back in the days before TinyERP 4.2 when migration scripts where -still included in the code. The same mechanism is probably still used by Odoo -internally to run the proprietary migration, and occassionally it is used in -the code to fix glitches during the Odoo release lifecycle. For an example, -see ``_. - -Please have a look at the docstring of the Odoo migration manager: -``_. You will see that migration scripts are organized in the *migrations* -subdirectory in the module itself, in subdirectories per module version. The -scripts will be executed when the module is upgraded, if the installed version -of the module is lower than the name of the versioned directories. - -There are three migration stages at which you can have migration scripts -executed: *before* the module is loaded (pre stage), *after* the module is -loaded into the database (post stage) and when *all* the modules are loaded -(end stage). The end stage was introduced into Odoo 9.0. In earlier versions -of OpenUpgrade, a file *odoo/openupgrade/deferred_.py* was -maintained to collect migration steps to be run after a full upgrade. - -Note that you can use this mechanism for your own custom -module's lifecycle outside of the OpenUpgrade context. For that reason, the -OpenUpgrade helper methods were collected into the python Openupgradelib that -you can make available in any Odoo instance using the *pip* tool. diff --git a/docsource/modules130-140.rst b/docsource/modules130-140.rst index a1e6811ad43b..e4d0e361548e 100644 --- a/docsource/modules130-140.rst +++ b/docsource/modules130-140.rst @@ -3,802 +3,802 @@ Module coverage 13.0 -> 14.0 .. include:: coverage_legend.rst -+---------------------------------------------+--------------------------------------------+ -| Module | Status | -+=============================================+============================================+ -| account | Done | -+---------------------------------------------+--------------------------------------------+ -| |del| account_analytic_default | Merged into account | -+---------------------------------------------+--------------------------------------------+ -| |del| account_analytic_default_hr_expense | Merged into hr_expense | -+---------------------------------------------+--------------------------------------------+ -| |del| account_analytic_default_purchase | Merged into purchase | -+---------------------------------------------+--------------------------------------------+ -| |del| account_bank_statement_import | Adopted in OCA as account_statement_import | -+---------------------------------------------+--------------------------------------------+ -| account_check_printing | Done | -+---------------------------------------------+--------------------------------------------+ -| account_debit_note | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| account_edi | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| account_edi_extended | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| account_edi_facturx | Done. Renamed from account_facturx | -+---------------------------------------------+--------------------------------------------+ -| |new| account_edi_proxy_client | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| account_edi_ubl | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| account_facturx | Renamed to account_edi_facturx | -+---------------------------------------------+--------------------------------------------+ -| |new| account_fleet | | -+---------------------------------------------+--------------------------------------------+ -| account_lock | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| account_payment | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| account_qr_code_sepa | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| account_tax_python | | -+---------------------------------------------+--------------------------------------------+ -| account_test | | -+---------------------------------------------+--------------------------------------------+ -| |new| adyen_platforms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| analytic | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| association | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| attachment_indexation | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| auth_ldap | | -+---------------------------------------------+--------------------------------------------+ -| auth_oauth | Done | -+---------------------------------------------+--------------------------------------------+ -| auth_password_policy | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| auth_password_policy_portal | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| auth_password_policy_signup | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| auth_signup | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| auth_totp | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| auth_totp_portal | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| barcodes | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base | Done | -+---------------------------------------------+--------------------------------------------+ -| base_address_city | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_address_extended | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_automation | Done | -+---------------------------------------------+--------------------------------------------+ -| |del| base_gengo | | -+---------------------------------------------+--------------------------------------------+ -| base_geolocalize | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_iban | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_import | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_import_module | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_setup | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_sparse_field | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| base_vat | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| board | Done | -+---------------------------------------------+--------------------------------------------+ -| bus | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| calendar | Done | -+---------------------------------------------+--------------------------------------------+ -| calendar_sms | | -+---------------------------------------------+--------------------------------------------+ -| contacts | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| coupon | Done (split from sale_coupon) | -+---------------------------------------------+--------------------------------------------+ -| crm | Done | -+---------------------------------------------+--------------------------------------------+ -| crm_iap_lead | Done | -+---------------------------------------------+--------------------------------------------+ -| crm_iap_lead_enrich | Done | -+---------------------------------------------+--------------------------------------------+ -| crm_iap_lead_website | Done | -+---------------------------------------------+--------------------------------------------+ -| crm_livechat | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| crm_sms | Done | -+---------------------------------------------+--------------------------------------------+ -| delivery | Done | -+---------------------------------------------+--------------------------------------------+ -| digest | Done | -+---------------------------------------------+--------------------------------------------+ -| event | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| event_crm | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| event_crm_sale | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| event_sale | Done | -+---------------------------------------------+--------------------------------------------+ -| event_sms | Done | -+---------------------------------------------+--------------------------------------------+ -| fetchmail | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| fetchmail_gmail | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| fleet | | -+---------------------------------------------+--------------------------------------------+ -| gamification | Done | -+---------------------------------------------+--------------------------------------------+ -| gamification_sale_crm | Done | -+---------------------------------------------+--------------------------------------------+ -| google_account | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| google_calendar | Done | -+---------------------------------------------+--------------------------------------------+ -| google_drive | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| google_gmail | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| google_recaptcha | | -+---------------------------------------------+--------------------------------------------+ -| google_spreadsheet | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| hr | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_attendance | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_contract | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_expense | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| hr_expense_check | Merged into hr_expense | -+---------------------------------------------+--------------------------------------------+ -| hr_fleet | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| hr_gamification | | -+---------------------------------------------+--------------------------------------------+ -| hr_holidays | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_holidays_attendance | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| hr_holidays_calendar | Merged into hr_holidays | -+---------------------------------------------+--------------------------------------------+ -| hr_maintenance | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| hr_org_chart | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| hr_presence | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_recruitment | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_recruitment_survey | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| hr_skills | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_skills_slides | | -+---------------------------------------------+--------------------------------------------+ -| hr_skills_survey | | -+---------------------------------------------+--------------------------------------------+ -| hr_timesheet | Done | -+---------------------------------------------+--------------------------------------------+ -| hr_timesheet_attendance | | -+---------------------------------------------+--------------------------------------------+ -| hr_work_entry | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| http_routing | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| hw_drivers | | -+---------------------------------------------+--------------------------------------------+ -| hw_escpos | | -+---------------------------------------------+--------------------------------------------+ -| hw_posbox_homepage | | -+---------------------------------------------+--------------------------------------------+ -| |del| hw_proxy | Merged into hw_drivers | -+---------------------------------------------+--------------------------------------------+ -| iap | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| iap_crm | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| iap_mail | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| im_livechat | Done | -+---------------------------------------------+--------------------------------------------+ -| im_livechat_mail_bot | | -+---------------------------------------------+--------------------------------------------+ -| |del| im_support | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ae | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ar | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_ar_website_sale | | -+---------------------------------------------+--------------------------------------------+ -| l10n_at | | -+---------------------------------------------+--------------------------------------------+ -| l10n_au | | -+---------------------------------------------+--------------------------------------------+ -| l10n_be | | -+---------------------------------------------+--------------------------------------------+ -| l10n_be_edi | | -+---------------------------------------------+--------------------------------------------+ -| l10n_be_invoice_bba | | -+---------------------------------------------+--------------------------------------------+ -| l10n_bo | | -+---------------------------------------------+--------------------------------------------+ -| l10n_br | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ca | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ch | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ch_qriban | | -+---------------------------------------------+--------------------------------------------+ -| l10n_cl | | -+---------------------------------------------+--------------------------------------------+ -| l10n_cn | | -+---------------------------------------------+--------------------------------------------+ -| l10n_cn_city | | -+---------------------------------------------+--------------------------------------------+ -| |del| l10n_cn_small_business | Merged into l10n_cn | -+---------------------------------------------+--------------------------------------------+ -| |del| l10n_cn_standard | | -+---------------------------------------------+--------------------------------------------+ -| l10n_co | | -+---------------------------------------------+--------------------------------------------+ -| l10n_co_pos | | -+---------------------------------------------+--------------------------------------------+ -| l10n_cr | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_cz | | -+---------------------------------------------+--------------------------------------------+ -| l10n_de | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_de_purchase | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_de_repair | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_de_sale | | -+---------------------------------------------+--------------------------------------------+ -| l10n_de_skr03 | | -+---------------------------------------------+--------------------------------------------+ -| l10n_de_skr04 | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_de_stock | | -+---------------------------------------------+--------------------------------------------+ -| l10n_dk | | -+---------------------------------------------+--------------------------------------------+ -| l10n_do | | -+---------------------------------------------+--------------------------------------------+ -| l10n_dz | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ec | | -+---------------------------------------------+--------------------------------------------+ -| l10n_es | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_es_edi_sii | | -+---------------------------------------------+--------------------------------------------+ -| l10n_et | | -+---------------------------------------------+--------------------------------------------+ -| l10n_eu_service | | -+---------------------------------------------+--------------------------------------------+ -| l10n_fi | | -+---------------------------------------------+--------------------------------------------+ -| l10n_fr | | -+---------------------------------------------+--------------------------------------------+ -| l10n_fr_fec | | -+---------------------------------------------+--------------------------------------------+ -| l10n_fr_pos_cert | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_gcc_invoice | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_gcc_pos | | -+---------------------------------------------+--------------------------------------------+ -| l10n_generic_coa | | -+---------------------------------------------+--------------------------------------------+ -| l10n_gr | | -+---------------------------------------------+--------------------------------------------+ -| l10n_gt | | -+---------------------------------------------+--------------------------------------------+ -| l10n_hk | | -+---------------------------------------------+--------------------------------------------+ -| l10n_hn | | -+---------------------------------------------+--------------------------------------------+ -| l10n_hr | | -+---------------------------------------------+--------------------------------------------+ -| l10n_hu | | -+---------------------------------------------+--------------------------------------------+ -| l10n_id | | -+---------------------------------------------+--------------------------------------------+ -| l10n_id_efaktur | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ie | | -+---------------------------------------------+--------------------------------------------+ -| l10n_il | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in_pos | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in_purchase | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in_purchase_stock | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in_sale | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in_sale_stock | | -+---------------------------------------------+--------------------------------------------+ -| l10n_in_stock | | -+---------------------------------------------+--------------------------------------------+ -| l10n_it | | -+---------------------------------------------+--------------------------------------------+ -| l10n_it_edi | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_it_edi_sdicoop | | -+---------------------------------------------+--------------------------------------------+ -| l10n_it_stock_ddt | | -+---------------------------------------------+--------------------------------------------+ -| l10n_jp | | -+---------------------------------------------+--------------------------------------------+ -| l10n_latam_base | | -+---------------------------------------------+--------------------------------------------+ -| l10n_latam_invoice_document | | -+---------------------------------------------+--------------------------------------------+ -| l10n_lt | | -+---------------------------------------------+--------------------------------------------+ -| l10n_lu | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ma | | -+---------------------------------------------+--------------------------------------------+ -| l10n_mn | | -+---------------------------------------------+--------------------------------------------+ -| l10n_multilang | | -+---------------------------------------------+--------------------------------------------+ -| l10n_mx | | -+---------------------------------------------+--------------------------------------------+ -| l10n_nl | | -+---------------------------------------------+--------------------------------------------+ -| l10n_no | | -+---------------------------------------------+--------------------------------------------+ -| l10n_nz | | -+---------------------------------------------+--------------------------------------------+ -| l10n_pa | | -+---------------------------------------------+--------------------------------------------+ -| l10n_pe | | -+---------------------------------------------+--------------------------------------------+ -| l10n_pl | | -+---------------------------------------------+--------------------------------------------+ -| l10n_pt | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ro | | -+---------------------------------------------+--------------------------------------------+ -| l10n_sa | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_sa_invoice | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_sa_pos | | -+---------------------------------------------+--------------------------------------------+ -| l10n_se | | -+---------------------------------------------+--------------------------------------------+ -| l10n_se_ocr | | -+---------------------------------------------+--------------------------------------------+ -| l10n_sg | | -+---------------------------------------------+--------------------------------------------+ -| l10n_si | | -+---------------------------------------------+--------------------------------------------+ -| |new| l10n_sk | | -+---------------------------------------------+--------------------------------------------+ -| l10n_syscohada | | -+---------------------------------------------+--------------------------------------------+ -| l10n_th | | -+---------------------------------------------+--------------------------------------------+ -| l10n_tr | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ua | | -+---------------------------------------------+--------------------------------------------+ -| l10n_uk | | -+---------------------------------------------+--------------------------------------------+ -| l10n_us | | -+---------------------------------------------+--------------------------------------------+ -| l10n_uy | | -+---------------------------------------------+--------------------------------------------+ -| l10n_ve | | -+---------------------------------------------+--------------------------------------------+ -| l10n_vn | Done | -+---------------------------------------------+--------------------------------------------+ -| l10n_za | | -+---------------------------------------------+--------------------------------------------+ -| link_tracker | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| lunch | Done | -+---------------------------------------------+--------------------------------------------+ -| mail | Done | -+---------------------------------------------+--------------------------------------------+ -| mail_bot | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| mail_bot_hr | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| mail_client_extension | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| maintenance | Done | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing | Done | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_crm | | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_event | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_event_sms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_event_track | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_event_track_sms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_sale | | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_slides | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mass_mailing_sms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| membership | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| microsoft_account | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| microsoft_calendar | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mrp | Done (tentatively) | -+---------------------------------------------+--------------------------------------------+ -| mrp_account | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| mrp_landed_costs | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| mrp_product_expiry | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mrp_subcontracting | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mrp_subcontracting_account | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| mrp_subcontracting_dropshipping | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| note | Done | -+---------------------------------------------+--------------------------------------------+ -| note_pad | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| odoo_referral | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| odoo_referral_portal | | -+---------------------------------------------+--------------------------------------------+ -| pad | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| pad_project | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| partner_autocomplete | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| partner_autocomplete_address_extended | Merged into base_address_extended | -+---------------------------------------------+--------------------------------------------+ -| payment | Done | -+---------------------------------------------+--------------------------------------------+ -| payment_adyen | | -+---------------------------------------------+--------------------------------------------+ -| payment_alipay | | -+---------------------------------------------+--------------------------------------------+ -| payment_authorize | | -+---------------------------------------------+--------------------------------------------+ -| payment_buckaroo | | -+---------------------------------------------+--------------------------------------------+ -| |new| payment_fix_register_token | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| payment_ingenico | | -+---------------------------------------------+--------------------------------------------+ -| |new| payment_odoo_by_adyen | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| payment_paypal | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| payment_payulatam | | -+---------------------------------------------+--------------------------------------------+ -| payment_payumoney | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| payment_sips | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| payment_stripe | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| payment_stripe_checkout_webhook | Merged into payment_stripe | -+---------------------------------------------+--------------------------------------------+ -| payment_test | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| payment_transfer | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| phone_validation | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| point_of_sale | Done | -+---------------------------------------------+--------------------------------------------+ -| portal | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| portal_rating | Nothing to do. Renamed from website_rating | -+---------------------------------------------+--------------------------------------------+ -| pos_adyen | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| pos_cache | | -+---------------------------------------------+--------------------------------------------+ -| |del| pos_cash_rounding | Merged into point_of_sale | -+---------------------------------------------+--------------------------------------------+ -| pos_discount | | -+---------------------------------------------+--------------------------------------------+ -| pos_epson_printer | | -+---------------------------------------------+--------------------------------------------+ -| pos_epson_printer_restaurant | | -+---------------------------------------------+--------------------------------------------+ -| pos_hr | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| pos_kitchen_printer | Merged into pos_restaurant | -+---------------------------------------------+--------------------------------------------+ -| pos_mercury | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| pos_reprint | Merged into point_of_sale | -+---------------------------------------------+--------------------------------------------+ -| pos_restaurant | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| pos_restaurant_adyen | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| pos_sale | Done | -+---------------------------------------------+--------------------------------------------+ -| pos_six | | -+---------------------------------------------+--------------------------------------------+ -| procurement_jit | | -+---------------------------------------------+--------------------------------------------+ -| product | Done | -+---------------------------------------------+--------------------------------------------+ -| product_email_template | | -+---------------------------------------------+--------------------------------------------+ -| product_expiry | Done | -+---------------------------------------------+--------------------------------------------+ -| product_margin | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| product_matrix | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| project | Done | -+---------------------------------------------+--------------------------------------------+ -| project_timesheet_holidays | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| purchase | Done | -+---------------------------------------------+--------------------------------------------+ -| purchase_mrp | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| purchase_product_matrix | | -+---------------------------------------------+--------------------------------------------+ -| purchase_requisition | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| purchase_requisition_stock | | -+---------------------------------------------+--------------------------------------------+ -| purchase_stock | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| rating | Done | -+---------------------------------------------+--------------------------------------------+ -| repair | Done | -+---------------------------------------------+--------------------------------------------+ -| resource | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale | Done | -+---------------------------------------------+--------------------------------------------+ -| sale_coupon | Done (split in coupon) | -+---------------------------------------------+--------------------------------------------+ -| sale_coupon_delivery | | -+---------------------------------------------+--------------------------------------------+ -| sale_crm | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_expense | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_management | Done | -+---------------------------------------------+--------------------------------------------+ -| sale_margin | Done | -+---------------------------------------------+--------------------------------------------+ -| sale_mrp | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_product_configurator | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_product_matrix | | -+---------------------------------------------+--------------------------------------------+ -| |new| sale_project | Done | -+---------------------------------------------+--------------------------------------------+ -| sale_purchase | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| sale_purchase_stock | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_quotation_builder | | -+---------------------------------------------+--------------------------------------------+ -| sale_stock | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| sale_stock_margin | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_timesheet | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| sale_timesheet_edit | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sale_timesheet_purchase | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| sales_team | Done | -+---------------------------------------------+--------------------------------------------+ -| sms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| snailmail | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| snailmail_account | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| social_media | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| stock | Done | -+---------------------------------------------+--------------------------------------------+ -| stock_account | Done | -+---------------------------------------------+--------------------------------------------+ -| stock_dropshipping | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| stock_landed_costs | | -+---------------------------------------------+--------------------------------------------+ -| stock_picking_batch | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| stock_sms | Done | -+---------------------------------------------+--------------------------------------------+ -| survey | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| test_base_automation | | -+---------------------------------------------+--------------------------------------------+ -| |new| test_event_full | | -+---------------------------------------------+--------------------------------------------+ -| test_mail | | -+---------------------------------------------+--------------------------------------------+ -| test_mail_full | | -+---------------------------------------------+--------------------------------------------+ -| test_mass_mailing | | -+---------------------------------------------+--------------------------------------------+ -| test_website | | -+---------------------------------------------+--------------------------------------------+ -| test_website_slides_full | | -+---------------------------------------------+--------------------------------------------+ -| test_xlsx_export | | -+---------------------------------------------+--------------------------------------------+ -| |del| theme_bootswatch | | -+---------------------------------------------+--------------------------------------------+ -| theme_default | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| transifex | | -+---------------------------------------------+--------------------------------------------+ -| uom | Done | -+---------------------------------------------+--------------------------------------------+ -| utm | Done | -+---------------------------------------------+--------------------------------------------+ -| web | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| web_diagram | | -+---------------------------------------------+--------------------------------------------+ -| web_editor | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| web_kanban_gauge | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| web_tour | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| web_unsplash | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website | Done | -+---------------------------------------------+--------------------------------------------+ -| website_blog | Done | -+---------------------------------------------+--------------------------------------------+ -| website_crm | | -+---------------------------------------------+--------------------------------------------+ -| website_crm_livechat | | -+---------------------------------------------+--------------------------------------------+ -| website_crm_partner_assign | Done | -+---------------------------------------------+--------------------------------------------+ -| website_crm_sms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_customer | Done | -+---------------------------------------------+--------------------------------------------+ -| website_event | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_crm | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_crm_questions | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_meet | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_meet_quiz | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_event_questions | Done | -+---------------------------------------------+--------------------------------------------+ -| website_event_sale | Done | -+---------------------------------------------+--------------------------------------------+ -| website_event_track | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_track_exhibitor | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_track_live | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_track_live_quiz | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |new| website_event_track_quiz | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_form | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_form_project | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_forum | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| website_gengo | | -+---------------------------------------------+--------------------------------------------+ -| website_google_map | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_hr_recruitment | Done | -+---------------------------------------------+--------------------------------------------+ -| |new| website_jitsi | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_links | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_livechat | Done | -+---------------------------------------------+--------------------------------------------+ -| website_mail | Done | -+---------------------------------------------+--------------------------------------------+ -| website_mail_channel | Done | -+---------------------------------------------+--------------------------------------------+ -| website_mass_mailing | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_membership | Done | -+---------------------------------------------+--------------------------------------------+ -| website_partner | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_payment | | -+---------------------------------------------+--------------------------------------------+ -| website_profile | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| website_rating | Renamed to portal_rating | -+---------------------------------------------+--------------------------------------------+ -| website_sale | Done | -+---------------------------------------------+--------------------------------------------+ -| website_sale_comparison | | -+---------------------------------------------+--------------------------------------------+ -| website_sale_coupon | | -+---------------------------------------------+--------------------------------------------+ -| website_sale_coupon_delivery | | -+---------------------------------------------+--------------------------------------------+ -| website_sale_delivery | | -+---------------------------------------------+--------------------------------------------+ -| website_sale_digital | | -+---------------------------------------------+--------------------------------------------+ -| website_sale_management | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_sale_product_configurator | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_sale_slides | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_sale_stock | | -+---------------------------------------------+--------------------------------------------+ -| website_sale_stock_product_configurator | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_sale_wishlist | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_slides | Done | -+---------------------------------------------+--------------------------------------------+ -| website_slides_forum | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_slides_survey | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| website_sms | Nothing to do | -+---------------------------------------------+--------------------------------------------+ -| |del| website_theme_install | Done. Merged into website | -+---------------------------------------------+--------------------------------------------+ -| website_twitter | | -+---------------------------------------------+--------------------------------------------+ - -OCA modules -+++++++++++ - -Here you will find the coverage of OpenUpgrade for other OCA modules that has -suffered any kind of transformation and it has been taken into account here: ++--------------------------------------------+-------------------------------------------------+ +|Module |Status | ++============================================+=================================================+ +|account | Done | ++--------------------------------------------+-------------------------------------------------+ +| |del| account_analytic_default | Done. Merged into account | ++--------------------------------------------+-------------------------------------------------+ +| |del| account_analytic_default_hr_expense | Done. Merged into hr_expense | ++--------------------------------------------+-------------------------------------------------+ +| |del| account_analytic_default_purchase | Done. Merged into purchase | ++--------------------------------------------+-------------------------------------------------+ +| |del| account_bank_statement_import | Adopted in OCA as account_statement_import | ++--------------------------------------------+-------------------------------------------------+ +|account_check_printing | Done | ++--------------------------------------------+-------------------------------------------------+ +|account_debit_note | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_edi | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_edi_extended | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_edi_facturx | Done. Renamed from account_facturx | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_edi_proxy_client | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_edi_ubl | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_edi_ubl_cii | | ++--------------------------------------------+-------------------------------------------------+ +| |del| account_facturx | Done. Renamed to account_edi_facturx | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_fleet | | ++--------------------------------------------+-------------------------------------------------+ +|account_lock | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|account_payment | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| account_qr_code_sepa | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|account_tax_python | | ++--------------------------------------------+-------------------------------------------------+ +|account_test | | ++--------------------------------------------+-------------------------------------------------+ +| |new| adyen_platforms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|analytic | Done | ++--------------------------------------------+-------------------------------------------------+ +|association | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|attachment_indexation | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|auth_ldap | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|auth_oauth | Done | ++--------------------------------------------+-------------------------------------------------+ +|auth_password_policy | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| auth_password_policy_portal | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|auth_password_policy_signup | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|auth_signup | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| auth_totp | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| auth_totp_portal | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|barcodes | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base | Done | ++--------------------------------------------+-------------------------------------------------+ +|base_address_city | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_address_extended | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_automation | Done | ++--------------------------------------------+-------------------------------------------------+ +| |del| base_gengo | | ++--------------------------------------------+-------------------------------------------------+ +|base_geolocalize | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_iban | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_import | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_import_module | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_setup | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_sparse_field | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|base_vat | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|board | Done | ++--------------------------------------------+-------------------------------------------------+ +|bus | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|calendar | Done | ++--------------------------------------------+-------------------------------------------------+ +|calendar_sms | Done | ++--------------------------------------------+-------------------------------------------------+ +|contacts | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| coupon | Done (split from sale_coupon) | ++--------------------------------------------+-------------------------------------------------+ +|crm | Done | ++--------------------------------------------+-------------------------------------------------+ +|crm_iap_lead | Done | ++--------------------------------------------+-------------------------------------------------+ +|crm_iap_lead_enrich | Done | ++--------------------------------------------+-------------------------------------------------+ +|crm_iap_lead_website | Done | ++--------------------------------------------+-------------------------------------------------+ +|crm_livechat | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|crm_sms | Done | ++--------------------------------------------+-------------------------------------------------+ +|delivery | Done | ++--------------------------------------------+-------------------------------------------------+ +|digest | Done | ++--------------------------------------------+-------------------------------------------------+ +|event | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| event_crm | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| event_crm_sale | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|event_sale | Done | ++--------------------------------------------+-------------------------------------------------+ +|event_sms | Done | ++--------------------------------------------+-------------------------------------------------+ +|fetchmail | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|fetchmail_gmail | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|fetchmail_outlook | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|fleet | Done | ++--------------------------------------------+-------------------------------------------------+ +|gamification | Done | ++--------------------------------------------+-------------------------------------------------+ +|gamification_sale_crm | Done | ++--------------------------------------------+-------------------------------------------------+ +|google_account | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|google_calendar | Done | ++--------------------------------------------+-------------------------------------------------+ +|google_drive | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|google_gmail | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| google_recaptcha | | ++--------------------------------------------+-------------------------------------------------+ +|google_spreadsheet | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_attendance | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_contract | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_expense | Done | ++--------------------------------------------+-------------------------------------------------+ +| |del| hr_expense_check | Done. Merged into hr_expense | ++--------------------------------------------+-------------------------------------------------+ +|hr_fleet | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr_gamification | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr_holidays | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_holidays_attendance | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| hr_holidays_calendar | Done. Merged into hr_holidays | ++--------------------------------------------+-------------------------------------------------+ +|hr_maintenance | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr_org_chart | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr_presence | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_recruitment | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_recruitment_survey | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr_skills | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_skills_slides | | ++--------------------------------------------+-------------------------------------------------+ +|hr_skills_survey | | ++--------------------------------------------+-------------------------------------------------+ +|hr_timesheet | Done | ++--------------------------------------------+-------------------------------------------------+ +|hr_timesheet_attendance | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hr_work_entry | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|http_routing | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|hw_drivers | | ++--------------------------------------------+-------------------------------------------------+ +|hw_escpos | | ++--------------------------------------------+-------------------------------------------------+ +|hw_posbox_homepage | | ++--------------------------------------------+-------------------------------------------------+ +| |del| hw_proxy | Done. Merged into hw_drivers | ++--------------------------------------------+-------------------------------------------------+ +|iap | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| iap_crm | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| iap_mail | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|im_livechat | Done | ++--------------------------------------------+-------------------------------------------------+ +|im_livechat_mail_bot | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| im_support | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ae | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ar | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_ar_website_sale | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_at | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_au | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_be | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_be_edi | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_be_invoice_bba | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_bo | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_br | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ca | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ch | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ch_qriban | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_cl | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_cn | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_cn_city | | ++--------------------------------------------+-------------------------------------------------+ +| |del| l10n_cn_small_business | Done. Merged into l10n_cn | ++--------------------------------------------+-------------------------------------------------+ +| |del| l10n_cn_standard | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_co | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_co_pos | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_cr | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_cz | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_de | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_de_purchase | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_de_repair | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_de_sale | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_de_skr03 | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_de_skr04 | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_de_stock | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_dk | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_do | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_dz | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ec | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_es | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_es_edi_sii | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_et | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_eu_service | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_fi | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_fr | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_fr_fec | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_fr_pos_cert | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_gcc_invoice | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_gcc_pos | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_generic_coa | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_gr | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_gt | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_hk | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_hn | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_hr | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_hu | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_id | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_id_efaktur | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ie | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_il | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in_pos | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in_purchase | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in_purchase_stock | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in_sale | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in_sale_stock | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_in_stock | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_it | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_it_edi | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_it_edi_sdicoop | | ++--------------------------------------------+-------------------------------------------------+ +| l10n_it_stock_ddt | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_jp | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_latam_base | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_latam_invoice_document | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_lt | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_lu | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ma | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_mn | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_multilang | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_mx | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_nl | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_no | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_nz | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_pa | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_pe | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_ph | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_pl | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_pt | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ro | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_sa | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_sa_invoice | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_sa_pos | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_se | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_se_ocr | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_sg | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_si | | ++--------------------------------------------+-------------------------------------------------+ +| |new| l10n_sk | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_syscohada | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_th | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_tr | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ua | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_uk | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_us | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_uy | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_ve | | ++--------------------------------------------+-------------------------------------------------+ +|l10n_vn | Done | ++--------------------------------------------+-------------------------------------------------+ +|l10n_za | | ++--------------------------------------------+-------------------------------------------------+ +|link_tracker | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|lunch | Done | ++--------------------------------------------+-------------------------------------------------+ +|mail | Done | ++--------------------------------------------+-------------------------------------------------+ +|mail_bot | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| mail_bot_hr | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| mail_client_extension | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|maintenance | Done | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing | Done | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_crm | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_event | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_event_sms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_event_track | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_event_track_sms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_sale | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_slides | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mass_mailing_sms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|membership | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| microsoft_account | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| microsoft_calendar | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mrp | Done | ++--------------------------------------------+-------------------------------------------------+ +|mrp_account | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| mrp_landed_costs | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| mrp_product_expiry | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mrp_subcontracting | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mrp_subcontracting_account | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|mrp_subcontracting_dropshipping | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|note | Done | ++--------------------------------------------+-------------------------------------------------+ +|note_pad | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|odoo_referral | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|odoo_referral_portal | | ++--------------------------------------------+-------------------------------------------------+ +|pad | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|pad_project | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|partner_autocomplete | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| partner_autocomplete_address_extended| Done. Merged into base_address_extended | ++--------------------------------------------+-------------------------------------------------+ +|payment | Done | ++--------------------------------------------+-------------------------------------------------+ +|payment_adyen | | ++--------------------------------------------+-------------------------------------------------+ +|payment_alipay | | ++--------------------------------------------+-------------------------------------------------+ +|payment_authorize | | ++--------------------------------------------+-------------------------------------------------+ +|payment_buckaroo | | ++--------------------------------------------+-------------------------------------------------+ +| |new| payment_fix_register_token | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|payment_ingenico | | ++--------------------------------------------+-------------------------------------------------+ +| |new| payment_odoo_by_adyen | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|payment_paypal | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|payment_payulatam | | ++--------------------------------------------+-------------------------------------------------+ +|payment_payumoney | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|payment_sips | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|payment_stripe | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| payment_stripe_checkout_webhook | Done. Merged into payment_stripe | ++--------------------------------------------+-------------------------------------------------+ +|payment_test | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|payment_transfer | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|phone_validation | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|point_of_sale | Done | ++--------------------------------------------+-------------------------------------------------+ +|portal | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| portal_rating | Done. Renamed from website_rating | ++--------------------------------------------+-------------------------------------------------+ +|pos_adyen | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|pos_cache | | ++--------------------------------------------+-------------------------------------------------+ +| |del| pos_cash_rounding | Done. Merged into point_of_sale | ++--------------------------------------------+-------------------------------------------------+ +|pos_discount | | ++--------------------------------------------+-------------------------------------------------+ +|pos_epson_printer | | ++--------------------------------------------+-------------------------------------------------+ +|pos_epson_printer_restaurant | | ++--------------------------------------------+-------------------------------------------------+ +|pos_hr | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| pos_kitchen_printer | Done. Merged into pos_restaurant | ++--------------------------------------------+-------------------------------------------------+ +|pos_mercury | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| pos_reprint | Done. Merged into point_of_sale | ++--------------------------------------------+-------------------------------------------------+ +|pos_restaurant | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| pos_restaurant_adyen | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|pos_sale | Done | ++--------------------------------------------+-------------------------------------------------+ +|pos_six | | ++--------------------------------------------+-------------------------------------------------+ +|procurement_jit | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|product | Done | ++--------------------------------------------+-------------------------------------------------+ +|product_email_template | | ++--------------------------------------------+-------------------------------------------------+ +|product_expiry | Done | ++--------------------------------------------+-------------------------------------------------+ +|product_margin | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|product_matrix | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|project | Done | ++--------------------------------------------+-------------------------------------------------+ +|project_timesheet_holidays | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|purchase | Done | ++--------------------------------------------+-------------------------------------------------+ +|purchase_mrp | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|purchase_product_matrix | | ++--------------------------------------------+-------------------------------------------------+ +|purchase_requisition | Done | ++--------------------------------------------+-------------------------------------------------+ +|purchase_requisition_stock | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|purchase_stock | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|rating | Done | ++--------------------------------------------+-------------------------------------------------+ +|repair | Done | ++--------------------------------------------+-------------------------------------------------+ +|resource | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale | Done | ++--------------------------------------------+-------------------------------------------------+ +|sale_coupon | Done (split in coupon) | ++--------------------------------------------+-------------------------------------------------+ +|sale_coupon_delivery | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_crm | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_expense | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_management | Done | ++--------------------------------------------+-------------------------------------------------+ +|sale_margin | Done | ++--------------------------------------------+-------------------------------------------------+ +|sale_mrp | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_product_configurator | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_product_matrix | | ++--------------------------------------------+-------------------------------------------------+ +| |new| sale_project | Done | ++--------------------------------------------+-------------------------------------------------+ +|sale_purchase | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| sale_purchase_stock | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_quotation_builder | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_stock | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| sale_stock_margin | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_timesheet | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| sale_timesheet_edit | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sale_timesheet_purchase | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|sales_team | Done | ++--------------------------------------------+-------------------------------------------------+ +|sms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|snailmail | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|snailmail_account | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|social_media | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|stock | Done | ++--------------------------------------------+-------------------------------------------------+ +|stock_account | Done | ++--------------------------------------------+-------------------------------------------------+ +|stock_dropshipping | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|stock_landed_costs | Done | ++--------------------------------------------+-------------------------------------------------+ +|stock_picking_batch | Done | ++--------------------------------------------+-------------------------------------------------+ +|stock_sms | Done | ++--------------------------------------------+-------------------------------------------------+ +|survey | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| test_base_automation | | ++--------------------------------------------+-------------------------------------------------+ +| |new| test_event_full | | ++--------------------------------------------+-------------------------------------------------+ +|test_mail | | ++--------------------------------------------+-------------------------------------------------+ +|test_mail_full | | ++--------------------------------------------+-------------------------------------------------+ +|test_mass_mailing | | ++--------------------------------------------+-------------------------------------------------+ +|test_website | | ++--------------------------------------------+-------------------------------------------------+ +|test_website_slides_full | | ++--------------------------------------------+-------------------------------------------------+ +|test_xlsx_export | | ++--------------------------------------------+-------------------------------------------------+ +| |del| theme_bootswatch | | ++--------------------------------------------+-------------------------------------------------+ +|theme_default | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|transifex | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|uom | Done | ++--------------------------------------------+-------------------------------------------------+ +|utm | Done | ++--------------------------------------------+-------------------------------------------------+ +|web | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| web_diagram | | ++--------------------------------------------+-------------------------------------------------+ +|web_editor | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|web_kanban_gauge | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|web_tour | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|web_unsplash | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_blog | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_crm | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_crm_livechat | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_crm_partner_assign | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_crm_sms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_customer | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_event | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_crm | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_crm_questions | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_meet | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_meet_quiz | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_event_questions | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_event_sale | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_event_track | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_track_exhibitor | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_track_live | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_track_live_quiz | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_event_track_quiz | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_form | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_form_project | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_forum | Done | ++--------------------------------------------+-------------------------------------------------+ +| |del| website_gengo | | ++--------------------------------------------+-------------------------------------------------+ +|website_google_map | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_hr_recruitment | Done | ++--------------------------------------------+-------------------------------------------------+ +| |new| website_jitsi | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_links | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_livechat | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_mail | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_mail_channel | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_mass_mailing | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_membership | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_partner | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_payment | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_profile | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| website_rating | Done. Renamed to portal_rating | ++--------------------------------------------+-------------------------------------------------+ +|website_sale | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_comparison | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_coupon | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_coupon_delivery | | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_delivery | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_digital | | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_management | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_product_configurator | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_slides | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_stock | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_stock_product_configurator | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_sale_wishlist | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_slides | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_slides_forum | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +|website_slides_survey | Done | ++--------------------------------------------+-------------------------------------------------+ +|website_sms | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ +| |del| website_theme_install | Done. Merged into website | ++--------------------------------------------+-------------------------------------------------+ +|website_twitter | Nothing to do | ++--------------------------------------------+-------------------------------------------------+ diff --git a/docsource/status.rst b/docsource/status.rst deleted file mode 100644 index df38bbde2a1b..000000000000 --- a/docsource/status.rst +++ /dev/null @@ -1,21 +0,0 @@ -Module coverage -=============== - -For all official addons, migration scripts should be provided for migrating -between subsequent major releases of Odoo. This is the goal of the project. -The design is such that the effort can be distributed between different -developing parties. See below for an overview of module coverage per version. - -.. toctree:: - :maxdepth: 1 - - modules130-140 - modules120-130 - modules110-120 - modules100-110 - modules90-100 - modules80-90 - modules70-80 - modules61-70 - modules60-61 - modules50-60 diff --git a/docsource/xmlids.rst b/docsource/xmlids.rst deleted file mode 100644 index f552d1b580e1..000000000000 --- a/docsource/xmlids.rst +++ /dev/null @@ -1,37 +0,0 @@ -XML IDs -======== -The OpenUpgrade analysis files give a representation of the XML IDs that a -module defines, in comparison with the previous release of the module. - -XML IDs which do not occur in the updated version of all installed modules -will be removed automatically by the Odoo server, if they do not have -the noupdate attribute. Therefore, you can ignore most entries here, such as - - * ir.actions.* - * ir.model.fields - * ir.model.access - * ir.model - * ir.ui.* - * res.country* - * res.currency* - -When XML ids of such record types change, the record will be recreated under -the new id, and the old record will be unlinked. - -More interesting are data that are defined with the noupdate flag. In general, -you need to cover two cases in your scripts. - -* Renamed XML ids of noupdate records. If a product category, or a res.groups - entry has been renamed, you should pass them to - :meth:`~openupgrade.rename_xmlids` - so that the item in your current database survives the migration in its - original form. If the XML id of a renamed noupdate record is not renamed - this way, the new record will be created in addition to the existing one, - and the existing record will lose its xml id. - -* Modified fields of noupdate records, as collected in the - `noupdate_changes.xml` in the migration analysis directory. When developing - the migration scripts for a particular module, review this file and comment - out any fields that must not be overwritten. If there is any data left that - you want to take, load it from your post migration script using - :meth:`~openupgrade.load_data`. diff --git a/openupgrade_framework/README.rst b/openupgrade_framework/README.rst index c9c8523d1a46..e2608cc5d51e 100644 --- a/openupgrade_framework/README.rst +++ b/openupgrade_framework/README.rst @@ -1,16 +1,23 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ===================== Openupgrade Framework ===================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:e39be1926e5ed6a7a92b5e5986fe5db4a0c76ef3cc6364c46bb4800c9ba9e0cb + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |badge2| image:: https://img.shields.io/badge/license-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%2FOpenUpgrade-lightgray.png?logo=github @@ -19,8 +26,11 @@ Openupgrade Framework .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/OpenUpgrade-14-0/OpenUpgrade-14-0-openupgrade_framework :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/OpenUpgrade&target_branch=14.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| +|badge1| |badge2| |badge3| |badge4| |badge5| This module is a technical module that contains a number of monkeypatches to improve the behaviour of Odoo when migrating your database using the @@ -41,6 +51,9 @@ OpenUpgrade migration scripts: * Run migration scripts for modules that are installed as new dependencies of upgraded modules (when there are such scripts for those particular modules) +* Production databases generated with demo data, will be transformed to + non-demo ones. If you want to avoid that, you have to pass through the + environment variable OPENUPGRADE_USE_DEMO, the value "yes". For detailed documentation see: @@ -138,7 +151,7 @@ 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 smashing it by providing a detailed and welcomed +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. diff --git a/openupgrade_framework/__manifest__.py b/openupgrade_framework/__manifest__.py index 0d94cc5b73ed..9528fe7e97ba 100644 --- a/openupgrade_framework/__manifest__.py +++ b/openupgrade_framework/__manifest__.py @@ -6,11 +6,14 @@ option to make upgrades between two major revisions.""", "author": "Odoo Community Association (OCA)," " Therp BV, Opener B.V., GRAP", "maintainers": ["legalsylvain", "StefanRijnhart"], - "website": "https://github.com/OCA/openupgrade", + "website": "https://github.com/OCA/OpenUpgrade", "category": "Migration", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "license": "AGPL-3", "depends": ["base"], + "external_dependencies": { + "python": ["openupgradelib"], + }, "images": ["static/description/banner.jpg"], "installable": True, } diff --git a/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_model.py b/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_model.py index 281dc076e32c..cdd8d85e0a99 100644 --- a/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_model.py +++ b/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_model.py @@ -15,7 +15,7 @@ def _drop_table(self): - """ Never drop tables """ + """Never drop tables""" for model in self: if self.env.get(model.model) is not None: openupgrade.message( @@ -32,7 +32,7 @@ def _drop_table(self): def _drop_column(self): - """ Never drop columns """ + """Never drop columns""" for field in self: if field.name in models.MAGIC_COLUMNS: continue diff --git a/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_ui_view.py b/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_ui_view.py index 0be9b125c301..39c1645d27cf 100644 --- a/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_ui_view.py +++ b/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_ui_view.py @@ -12,7 +12,7 @@ @api.constrains("arch_db") def _check_xml(self): - """ Mute warnings about views which are common during migration """ + """Mute warnings about views which are common during migration""" with mute_logger("odoo.addons.base.models.ir_ui_view"): return View._check_xml._original_method(self) @@ -48,7 +48,7 @@ def handle_view_error( def _postprocess_view(self, node, model, validate=True, editable=True): - """ Don't validate views, handle_view_error is mutted""" + """Don't validate views, handle_view_error is mutted""" return View._postprocess_view._original_method( self, node, model, validate=False, editable=editable ) @@ -60,3 +60,26 @@ def _postprocess_view(self, node, model, validate=True, editable=True): View.handle_view_error = handle_view_error _postprocess_view._original_method = View._postprocess_view View._postprocess_view = _postprocess_view + + +def unlink(self): + """Remove the archived children of a view deleted with its module too. + + The cascade of the core (under the module uninstall flag, which the end of + an update sets) goes through inherit_children_ids, which leaves out the + archived views (e.g. an option of the website editor turned off): their + foreign key then keeps the parent from being deleted, and the log shows + 'violates foreign key constraint ir_ui_view_inherit_id_fkey'. + """ + if self.env.context.get("_force_unlink"): + archived = ( + self.with_context(active_test=False).inherit_children_ids + - self.inherit_children_ids + ) + if archived: + archived.unlink() + return unlink._original_method(self) + + +unlink._original_method = View.unlink +View.unlink = unlink diff --git a/openupgrade_framework/odoo_patch/odoo/api.py b/openupgrade_framework/odoo_patch/odoo/api.py index 34a8d78de328..57c10abf15ce 100644 --- a/openupgrade_framework/odoo_patch/odoo/api.py +++ b/openupgrade_framework/odoo_patch/odoo/api.py @@ -8,7 +8,7 @@ class FakeRecord: - """Artificial construct to handle delete(records) submethod """ + """Artificial construct to handle delete(records) submethod""" def __new__(cls): return object.__new__(cls) diff --git a/openupgrade_framework/odoo_patch/odoo/models.py b/openupgrade_framework/odoo_patch/odoo/models.py index 12ec270e2f4c..4fd0eafa9a31 100644 --- a/openupgrade_framework/odoo_patch/odoo/models.py +++ b/openupgrade_framework/odoo_patch/odoo/models.py @@ -19,16 +19,26 @@ def unlink(self): """ if not self.env.context.get(MODULE_UNINSTALL_FLAG): return BaseModel.unlink._original_method(self) - savepoint = str(uuid4) + savepoint = str(uuid4()) try: self.env.cr.execute( # pylint: disable=sql-injection 'SAVEPOINT "%s"' % savepoint ) - return BaseModel.unlink._original_method(self) + result = BaseModel.unlink._original_method(self) + # release it: a savepoint left open per deleted record keeps a + # transactionid lock until the end of the update, enough to exhaust + # the lock table of the cluster on a large update + self.env.cr.execute( # pylint: disable=sql-injection + 'RELEASE SAVEPOINT "%s"' % savepoint + ) + return result except Exception as e: self.env.cr.execute( # pylint: disable=sql-injection 'ROLLBACK TO SAVEPOINT "%s"' % savepoint ) + self.env.cr.execute( # pylint: disable=sql-injection + 'RELEASE SAVEPOINT "%s"' % savepoint + ) _logger.warning( "Could not delete obsolete record with ids %s of model %s: %s", self.ids, diff --git a/openupgrade_framework/odoo_patch/odoo/modules/graph.py b/openupgrade_framework/odoo_patch/odoo/modules/graph.py index 5e454e5c5aa8..4bf3f36d9a2c 100644 --- a/openupgrade_framework/odoo_patch/odoo/modules/graph.py +++ b/openupgrade_framework/odoo_patch/odoo/modules/graph.py @@ -1,12 +1,16 @@ # Copyright Odoo Community Association (OCA) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import os + import odoo from odoo.modules.graph import Graph def update_from_db(self, cr): - """ Prevent reloading of demo data from the new version on major upgrade """ + """Prevent reloading of demo data from the new version on major upgrade""" Graph.update_from_db._original_method(self, cr) + if os.environ.get("OPENUPGRADE_USE_DEMO", "") == "yes": + return if ( "base" in self and self["base"].dbdemo @@ -17,5 +21,40 @@ def update_from_db(self, cr): package.dbdemo = False +def add_modules(self, cr, module_list, force=None): + """Add extra dependencies directly to the graph for immediate installation and + proper dependency resolution. + """ + modules_in = list(module_list) + dependencies = module_list + while dependencies: + cr.execute( + """ + SELECT DISTINCT dep.name + FROM + ir_module_module, + ir_module_module_dependency dep + WHERE + module_id = ir_module_module.id + AND ir_module_module.name in %s + AND dep.name not in %s + """, + (tuple(dependencies), tuple(module_list)), + ) + dependencies = [x[0] for x in cr.fetchall()] + module_list += dependencies + # Set proper state for new dependencies so that any init scripts are run + cr.execute( + """ + UPDATE ir_module_module SET state = 'to install' + WHERE name IN %s AND name NOT IN %s AND state = 'uninstalled' + """, + (tuple(module_list), tuple(modules_in)), + ) + return Graph.add_modules._original_method(self, cr, module_list, force=force) + + update_from_db._original_method = Graph.update_from_db Graph.update_from_db = update_from_db +add_modules._original_method = Graph.add_modules +Graph.add_modules = add_modules diff --git a/openupgrade_framework/readme/DESCRIPTION.rst b/openupgrade_framework/readme/DESCRIPTION.rst index 677579a463b7..96b05a944a01 100644 --- a/openupgrade_framework/readme/DESCRIPTION.rst +++ b/openupgrade_framework/readme/DESCRIPTION.rst @@ -17,6 +17,9 @@ OpenUpgrade migration scripts: * Run migration scripts for modules that are installed as new dependencies of upgraded modules (when there are such scripts for those particular modules) +* Production databases generated with demo data, will be transformed to + non-demo ones. If you want to avoid that, you have to pass through the + environment variable OPENUPGRADE_USE_DEMO, the value "yes". For detailed documentation see: diff --git a/openupgrade_framework/static/description/index.html b/openupgrade_framework/static/description/index.html index 99d78be5f388..a037fa255ddd 100644 --- a/openupgrade_framework/static/description/index.html +++ b/openupgrade_framework/static/description/index.html @@ -1,20 +1,20 @@ - - -Openupgrade Framework + +README.rst -
-

Openupgrade Framework

+
+ + +Odoo Community Association + +
+

Openupgrade Framework

-

Beta License: AGPL-3 OCA/OpenUpgrade Translate me on Weblate

+

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

This module is a technical module that contains a number of monkeypatches to improve the behaviour of Odoo when migrating your database using the OpenUpgrade migration scripts:

@@ -387,6 +394,9 @@

Openupgrade Framework

  • Run migration scripts for modules that are installed as new dependencies of upgraded modules (when there are such scripts for those particular modules)
  • +
  • Production databases generated with demo data, will be transformed to +non-demo ones. If you want to avoid that, you have to pass through the +environment variable OPENUPGRADE_USE_DEMO, the value “yes”.
  • For detailed documentation see:

    -[options]
    -server_wide_modules = web,openupgrade_framework
    +[options]
    +server_wide_modules = web,openupgrade_framework
     

    When you load the module in either way of these ways, and you have the openupgrade_scripts module in your addons path available, the @@ -433,7 +443,7 @@

    Configuration

    of the OpenUpgrade migration scripts.

    -

    Development

    +

    Development

    The odoo_patch folder contains python files in a tree that mimicks the folder tree of the Odoo project. It contains a number of monkey patches to improve the migration of an Odoo database between two major versions.

    @@ -450,43 +460,43 @@

    Development

    errors
    -# flake8: noqa
    -# pylint: skip-file
    +# flake8: noqa
    +# pylint: skip-file
     
    • When you want to change the code. add the following tags:

    For an addition:

    -# <OpenUpgrade:ADD>
    -some code...
    -# </OpenUpgrade>
    +# <OpenUpgrade:ADD>
    +some code...
    +# </OpenUpgrade>
     

    For a change:

    -# <OpenUpgrade:CHANGE>
    -some code...
    -# </OpenUpgrade>
    +# <OpenUpgrade:CHANGE>
    +some code...
    +# </OpenUpgrade>
     

    For a removal:

    -# <OpenUpgrade:REMOVE>
    -# Comment the code, instead of removing it.
    -# </OpenUpgrade>
    +# <OpenUpgrade:REMOVE>
    +# Comment the code, instead of removing it.
    +# </OpenUpgrade>
     
    -

    Bug Tracker

    +

    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 smashing it by providing a detailed and welcomed +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

    +

    Credits

    -

    Authors

    +

    Authors

    • Therp BV
    • Opener B.V.
    • @@ -494,32 +504,35 @@

      Authors

    -

    Other credits

    +

    Other credits

    Many developers have contributed to the OpenUpgrade framework in its previous incarnation. Their original contributions may no longer needed, or they are no longer recognizable in their current form but OpenUpgrade would not have existed at this point without them.

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +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.

    Current maintainers:

    -

    legalsylvain StefanRijnhart

    +

    legalsylvain StefanRijnhart

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

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

    +
    diff --git a/openupgrade_scripts/README.rst b/openupgrade_scripts/README.rst index 169d414551f2..98a159b26985 100644 --- a/openupgrade_scripts/README.rst +++ b/openupgrade_scripts/README.rst @@ -1,16 +1,23 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =================== Openupgrade Scripts =================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:da787d9d117ec976fde0deb83d6c97128e37903d61394b7df7db69af723994a7 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |badge2| image:: https://img.shields.io/badge/license-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%2FOpenUpgrade-lightgray.png?logo=github @@ -19,8 +26,11 @@ Openupgrade Scripts .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/OpenUpgrade-14-0/OpenUpgrade-14-0-openupgrade_scripts :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/OpenUpgrade&target_branch=14.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| +|badge1| |badge2| |badge3| |badge4| |badge5| This module is a containers of migration script to migrate from 13.0 to 14.0 version. @@ -54,7 +64,7 @@ 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 smashing it by providing a detailed and welcomed +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. diff --git a/docsource/__init__.py b/openupgrade_scripts/__init__.py similarity index 100% rename from docsource/__init__.py rename to openupgrade_scripts/__init__.py diff --git a/openupgrade_scripts/__manifest__.py b/openupgrade_scripts/__manifest__.py index fc38c4cbe2da..8fd3096f201b 100644 --- a/openupgrade_scripts/__manifest__.py +++ b/openupgrade_scripts/__manifest__.py @@ -6,9 +6,9 @@ and scripts for migrate Odoo SA modules.""", "author": "Odoo Community Association (OCA)", "maintainers": ["MiquelRForgeFlow", "StefanRijnhart", "pedrobaeza"], - "website": "https://github.com/OCA/openupgrade", + "website": "https://github.com/OCA/OpenUpgrade", "category": "Migration", - "version": "14.0.1.0.1", + "version": "14.0.1.0.2", "license": "AGPL-3", "depends": ["base"], "images": ["static/description/banner.jpg"], diff --git a/openupgrade_scripts/apriori.py b/openupgrade_scripts/apriori.py index 5d2c76ee9e8f..3a221260fd4e 100644 --- a/openupgrade_scripts/apriori.py +++ b/openupgrade_scripts/apriori.py @@ -8,6 +8,8 @@ "account_facturx": "account_edi_facturx", "sale_coupon": "coupon", "website_rating": "portal_rating", + # OCA/account-consolidation + "account_consolidation": "account_consolidation_oca", # OCA/account-invoice-reporting "account_invoice_comment_template": "account_comment_template", # OCA/bank-statement-import @@ -15,14 +17,15 @@ "account_bank_statement_import_bypass_check": "account_statement_import_bypass_check", # noqa: B950 "account_bank_statement_clear_partner": "account_statement_clear_partner", "account_bank_statement_import_camt_details": "account_statement_import_camt_details", # noqa: B950 - "account_bank_statement_import_camt_oca": "account_statement_import_camt_oca", + "account_bank_statement_import_camt_oca": "account_statement_import_camt", "account_bank_statement_import_move_line": "account_statement_import_move_line", "account_bank_statement_import_mt940_base": "account_statement_import_mt940_base", - "account_bank_statement_import_oca_camt54": "account_statement_import_oca_camt54", + "account_bank_statement_import_oca_camt54": "account_statement_import_camt54", "account_bank_statement_import_ofx": "account_statement_import_ofx", "account_bank_statement_import_online": "account_statement_import_online", "account_bank_statement_import_online_paypal": "account_statement_import_online_paypal", # noqa: B950 "account_bank_statement_import_online_ponto": "account_statement_import_online_ponto", # noqa: B950 + "account_bank_statement_import_online_qonto": "account_statement_import_online_qonto", # noqa: B950 "account_bank_statement_import_online_transferwise": "account_statement_import_online_transferwise", # noqa: B950 "account_bank_statement_import_paypal": "account_statement_import_paypal", "account_bank_statement_import_qif": "account_statement_import_qif", @@ -30,6 +33,10 @@ "account_bank_statement_import_save_file": "account_statement_import_save_file", "account_bank_statement_import_transfer_move": "account_statement_import_transfer_move", # noqa: B950 "account_bank_statement_import_txt_xlsx": "account_statement_import_txt_xlsx", + # OCA/e-commerce + "website_sale_attribute_filter_category": "website_sale_product_attribute_filter_category", # noqa: B950 + # OCA/event + "website_event_crm": "website_event_crm_invitation", # OCA/edi "account_e-invoice_generate": "account_einvoice_generate", "edi": "edi_oca", @@ -37,12 +44,38 @@ "edi_backend_partner": "edi_backend_partner_oca", "edi_exchange_template": "edi_exchange_template_oca", "edi_storage": "edi_storage_oca", + "edi_voxel": "edi_voxel_oca", + "edi_voxel_account_invoice": "edi_voxel_account_invoice_oca", + "edi_voxel_sale_order_import": "edi_voxel_sale_order_import_oca", + "edi_voxel_sale_secondary_unit": "edi_voxel_sale_secondary_unit_oca", + "edi_voxel_secondary_unit": "edi_voxel_secondary_unit_oca", + "edi_voxel_stock_picking": "edi_voxel_stock_picking_oca", + "edi_voxel_stock_picking_secondary_unit": "edi_voxel_stock_picking_secondary_unit_oca", # noqa: B950 "edi_webservice": "edi_webservice_oca", "edi_xml": "edi_xml_oca", + # OCA/hr-holidays + "hr_leave_hour": "hr_leave_custom_hour_interval", + # OCA/l10n-belgium + "account_bank_statement_import_coda": "account_statement_import_coda", # OCA/l10n-spain "l10n_es_account_bank_statement_import_n43": "l10n_es_account_statement_import_n43", + # OCA/manufacture + "account_move_line_manufacture_info": "account_move_line_mrp_info", + # OCA/pos + "pos_picking_load": "pos_sale_order_load", # OCA/server-tools + "base_jsonify": "jsonifier", "openupgrade_records": "upgrade_analysis", + # OCA/website + "website_analytics_piwik": "website_analytics_matomo", + # OCA/l10n-italy + "l10n_it_account_balance_report": "l10n_it_financial_statements_report", + "l10n_it_causali_pagamento": "l10n_it_payment_reason", + "l10n_it_codici_carica": "l10n_it_appointment_code", + "l10n_it_dichiarazione_intento": "l10n_it_declaration_of_intent", + "l10n_it_withholding_tax_causali": "l10n_it_withholding_tax_reason", + # OCA/l10n-france + "account_bank_statement_import_fr_cfonb": "account_statement_import_fr_cfonb", # OCA/... # Viindoo/tvtmaaddons "to_print_payment_vi": "viin_l10n_vn_payment_print", @@ -74,6 +107,9 @@ # Merged modules contain a mapping from old module names to other, # preexisting module names merged_modules = { + # Viindoo/tvtmaaddons: removed in 14.0 without a successor (public holidays + # per year are part of resource.calendar.leaves) + "to_holidays_in_years": "resource", # odoo "account_analytic_default": "account", "account_analytic_default_hr_expense": "hr_expense", @@ -88,20 +124,53 @@ "pos_kitchen_printer": "pos_restaurant", "pos_reprint": "point_of_sale", "website_theme_install": "website", + # odoo/design-themes + "theme_graphene_blog": "theme_graphene", + # odoo/enterprise + "hr_holidays_gantt_calendar": "hr_holidays_gantt", + # OCA/helpdesk + "helpdesk_mgmt_timesheet_time_control": "helpdesk_mgmt_timesheet", + # OCA/hr -> OCA/payroll: + "hr_period": "hr_payroll_period", + # OCA/intrastat-extrastat + "hs_code_link": "product_harmonized_system_delivery", + # OCA/event + "website_event_questions_free_text": "website_event_questions", + # OCA/e-commerce + "website_sale_product_style_badge": "website_sale", + "website_snippet_carousel_product": "website_sale", + # OCA/l10n-netherlands + "l10n_nl_tax_invoice_basis": "l10n_nl_tax_statement", + # OCA/margin-analysis + "sale_order_margin_percent": "sale_margin", # OCA/partner-contact "base_vat_sanitized": "base_vat", "partner_bank_active": "base", - # OCA/stock-logistics-warehouse - "stock_inventory_include_exhausted": "stock", + # OCA/pos + "pos_ticket_logo": "point_of_sale", # OCA/project "project_description": "project", "project_stage_closed": "project", - # OCA/survey - "survey_description": "survey", + # OCA/purchase-workflow + "purchase_tier_validation_forward": "base_tier_validation_forward", + # OCA/reporting-engine + "bi_sql_editor_aggregate": "bi_sql_editor", + # OCA/sale-reporting + "report_qweb_pdf_fixed_column": "web", + # OCA/sale-workflow + "sale_mrp_link": "sale_mrp", + "sale_order_price_recalculation": "sale", + "sale_order_pricelist_tracking": "sale", + # OCA/stock-logistics-warehouse + "stock_inventory_include_exhausted": "stock", # OCA/web "web_editor_background_color": "web_editor", # OCA/website "website_cookie_notice": "website", + "website_form_recaptcha": "website_form", + "website_crm_recaptcha": "website_form", + # OCA/web + "web_confirm_duplicate": "web_copy_confirm", # OCA/... # Viindoo/tvtmaaddons "to_l10n_vn_qweb_layout": "l10n_vn_common", @@ -117,6 +186,9 @@ "to_l10n_vn_fleet_driver": "to_fleet_driver", "to_hr_holidays_period_limit": "hr_holidays", "to_hr_work_day_type": "hr", + # no 14.0 code; website(_sale) 14.0 has its own search box (s_products_searchbar) + "to_website_search_suggestion": "website", + "to_website_search_suggestion_product": "website_sale", "to_shorten_url": "link_tracker", "to_website_registration_email_blacklist": "to_registration_email_blacklist", # removed in 14.0; auto-installed as soon as l10n_vn gets installed otherwise @@ -171,3 +243,17 @@ "account.vninvoice.template": "account.einvoice.template", "account.vninvoice.type": "account.einvoice.type", } + +# Modules of merged_modules that are not merged into anything: they are +# removed without a successor on our addons paths. The technical records they +# own (record rules, scheduled and server actions, views, menus, mail +# templates...) are deleted by the update even when they are noupdate, and the +# xml ids of records of models that go with them are detached: see +# release_records_of_lost_modules in the pre-migration of base. +lost_modules = [ + "to_holidays_in_years", + "to_hr_work_day_type", + "to_website_search_suggestion", + "to_website_search_suggestion_product", + "web_diagram", +] diff --git a/openupgrade_scripts/scripts/account/14.0.1.1/end-migration.py b/openupgrade_scripts/scripts/account/14.0.1.1/end-migration.py index 8285c7cba8b6..1c0d7b46191f 100644 --- a/openupgrade_scripts/scripts/account/14.0.1.1/end-migration.py +++ b/openupgrade_scripts/scripts/account/14.0.1.1/end-migration.py @@ -1,4 +1,108 @@ -from openupgradelib import openupgrade +# Copyright 2021 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import logging + +from openupgradelib import openupgrade, openupgrade_merge_records + +_logger = logging.getLogger(__name__) + + +def harmonize_groups(env): + """Unfold manual groups per company + proper company assignation""" + + # step 1: Generate the generic account groups for each company. Later code will + # do it for manually created groups + + companies = env["res.company"].with_context(active_test=False).search([]) + for company in companies.filtered("chart_template_id"): + company.chart_template_id.generate_account_groups(company) + + # step 2: For manually created groups, we check if such group is used in more than + # one company. If so, we unfold it. We also assure proper company for existing one + + def _get_all_children(groups): + children = env["account.group"].search([("parent_id", "in", groups.ids)]) + if children: + children |= _get_all_children(children) + return children + + def _get_all_parents(groups): + parents = groups.mapped("parent_id") + if parents: + parents |= _get_all_parents(parents) + return parents + + AccountGroup = env["account.group"] + AccountGroup._parent_store_compute() + env.cr.execute( + """SELECT ag.id FROM account_group ag + LEFT JOIN ir_model_data imd + ON ag.id = imd.res_id AND imd.model = 'account.group' + AND imd.module != '__export__' + WHERE imd.id IS NULL""" + ) + all_groups = AccountGroup.browse([x[0] for x in env.cr.fetchall()]) + all_groups = all_groups | _get_all_parents(all_groups) + relation_dict = {} + for group in all_groups.sorted(key="parent_path"): + subgroups = group | _get_all_children(group) + accounts = env["account.account"].search([("group_id", "in", subgroups.ids)]) + companies = accounts.mapped("company_id").sorted() + for i, company in enumerate(companies): + if company not in relation_dict: + relation_dict[company] = {} + if i == 0: + if group.company_id != company: + group.company_id = company.id + relation_dict[company][group] = group + continue + # Done by SQL for avoiding ORM derived problems + env.cr.execute( + """INSERT INTO account_group (parent_id, parent_path, name, + code_prefix_start, code_prefix_end, company_id, + create_uid, write_uid, create_date, write_date) + SELECT {parent_id}, parent_path, name, code_prefix_start, + code_prefix_end, {company_id}, create_uid, + write_uid, create_date, write_date + FROM account_group + WHERE id = {id} + RETURNING id + """.format( + id=group.id, + company_id=company.id, + parent_id=group.parent_id + and relation_dict[company][group.parent_id].id + or "NULL", + ) + ) + new_group = AccountGroup.browse(env.cr.fetchone()) + relation_dict[company][group] = new_group + + # step 3: Merge repeated groups + + env.cr.execute( + """SELECT array_agg(id order by id DESC), name, + code_prefix_start, company_id + FROM account_group + GROUP BY name, code_prefix_start, company_id + """ + ) + group_ids = [x[0] for x in env.cr.fetchall()] + for group in group_ids: + if len(group) > 1: + openupgrade_merge_records.merge_records( + env, + "account.group", + group[1:], + group[0], + field_spec=None, + method="sql", + delete=True, + exclude_columns=None, + model_table="account_group", + ) + + AccountGroup._parent_store_compute() def _make_correct_account_type(env): @@ -34,4 +138,7 @@ def _make_correct_account_type(env): @openupgrade.migrate() def migrate(env, version): + harmonize_groups(env) + # Launch a recomputation of the account groups after previous changes + env["account.account"].search([])._compute_account_group() _make_correct_account_type(env) diff --git a/openupgrade_scripts/scripts/account/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/account/14.0.1.1/noupdate_changes.xml index 0536e3602996..8c564fc66c4b 100644 --- a/openupgrade_scripts/scripts/account/14.0.1.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/account/14.0.1.1/noupdate_changes.xml @@ -8,36 +8,48 @@ + [('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids)] - [('move_id.move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')), ('move_id.message_partner_ids','child_of',[user.commercial_partner_id.id])] + [('parent_state', 'not in', ('cancel', 'draft')), ('move_id.move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')), ('move_id.message_partner_ids','child_of',[user.commercial_partner_id.id])] - [('move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')), ('message_partner_ids','child_of',[user.commercial_partner_id.id])] + [('state', 'not in', ('cancel', 'draft')), ('move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund')), ('message_partner_ids','child_of',[user.commercial_partner_id.id])] + [('company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids)] + + + [('company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids + [False])] @@ -82,12 +94,15 @@ + [('company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids)] @@ -111,5 +126,6 @@ + [('company_id', 'in', company_ids)] diff --git a/openupgrade_scripts/scripts/account/14.0.1.1/post-migration.py b/openupgrade_scripts/scripts/account/14.0.1.1/post-migration.py index 936a54092077..2e543a85ef78 100644 --- a/openupgrade_scripts/scripts/account/14.0.1.1/post-migration.py +++ b/openupgrade_scripts/scripts/account/14.0.1.1/post-migration.py @@ -92,6 +92,7 @@ def fill_payment_id_and_statement_line_id_fields(env): SET payment_id = am.payment_id FROM account_move am WHERE am.id = aml.move_id AND am.payment_id IS NOT NULL + AND aml.payment_id IS NULL """, ) openupgrade.logged_query( @@ -101,12 +102,13 @@ def fill_payment_id_and_statement_line_id_fields(env): SET statement_line_id = am.statement_line_id FROM account_move am WHERE am.id = aml.move_id AND am.statement_line_id IS NOT NULL + AND aml.statement_line_id IS NULL """, ) def fill_partial_reconcile_debit_and_credit_amounts(env): - # compute debit and credit amount when currencies are the same + # both journal items are in the company currency openupgrade.logged_query( env.cr, """ @@ -120,6 +122,8 @@ def fill_partial_reconcile_debit_and_credit_amounts(env): AND r.credit_currency_id = c.currency_id """, ) + # only one of the journal items is in the company currency: amount_currency + # is the amount in the currency of the other one openupgrade.logged_query( env.cr, """ @@ -143,6 +147,21 @@ def fill_partial_reconcile_debit_and_credit_amounts(env): OR r.debit_currency_id = c.currency_id) """, ) + # both journal items are in the same foreign currency and were reconciled in + # that currency: amount_currency is the amount in that currency + openupgrade.logged_query( + env.cr, + """ + UPDATE account_partial_reconcile + SET debit_amount_currency = amount_currency, + credit_amount_currency = amount_currency + WHERE debit_amount_currency IS NULL + AND credit_amount_currency IS NULL + AND credit_currency_id = debit_currency_id + AND currency_id = debit_currency_id + AND NULLIF(amount_currency, 0.0) IS NOT NULL + """, + ) # compute debit and credit amount when currencies are different partial_reconcile_lines = ( env["account.partial.reconcile"] @@ -357,7 +376,9 @@ def create_account_tax_report_lines(env): break -def post_statements_with_unreconciled_lines(env): +def post_statements(env): + """These 2 inconsistent use cases require to put the statement as posted.""" + # Confirmed statements that have unreconciled items openupgrade.logged_query( env.cr, """ @@ -368,6 +389,24 @@ def post_statements_with_unreconciled_lines(env): AND bstl.is_reconciled IS DISTINCT FROM TRUE """, ) + # New statements with reconciled items + openupgrade.logged_query( + env.cr, + """SELECT bst.id FROM account_bank_statement bst + JOIN account_bank_statement_line bstl ON bstl.statement_id = bst.id + WHERE bst.state = 'open' AND bstl.is_reconciled IS TRUE + """, + ) + stmt_ids = list({x[0] for x in env.cr.fetchall()}) + # calling .button_post() on all statements together fails with: + # File "/odoo_env/src/odoo/addons/account/models/account_move.py", line 1842, in _check_unique_sequence_number # noqa: B950 + # raise ValidationError(_('Posted journal entry must have an unique sequence number per company.\n' # noqa: B950 + # odoo.exceptions.ValidationError: Posted journal entry must have an unique sequence number per company. # noqa: B950 + # Problematic numbers: 198/100, 198/100, 198/104, 198/104, 198/101, 198/101, 198/102, 198/103, 198/103, 198/102 # noqa: B950 + # instead, call it one by one. + stmts = env["account.bank.statement"].browse(stmt_ids) + for stmt in stmts: + stmt.button_post() def pass_bank_statement_line_note_to_journal_entry_narration(env): @@ -433,80 +472,6 @@ def fill_company_account_cash_basis_base_account_id(env): ) -def populate_account_groups(env): - """Generate the generic account groups for each company. Later code will - do it for manually created groups. - """ - companies = env["res.company"].with_context(active_test=False).search([]) - for company in companies.filtered("chart_template_id"): - company.chart_template_id.generate_account_groups(company) - - -def unfold_manual_account_groups(env): - """For manually created groups, we check if such group is used in more than - one company. If so, we unfold it. We also assure proper company for existing one. - """ - - def _get_all_children(groups): - children = env["account.group"].search([("parent_id", "in", groups.ids)]) - if children: - children |= _get_all_children(children) - return children - - def _get_all_parents(groups): - parents = groups.mapped("parent_id") - if parents: - parents |= _get_all_parents(parents) - return parents - - AccountGroup = env["account.group"] - AccountGroup._parent_store_compute() - env.cr.execute( - """SELECT ag.id FROM account_group ag - LEFT JOIN ir_model_data imd - ON ag.id = imd.res_id AND imd.model = 'account.group' - AND imd.module != '__export__' - WHERE imd.id IS NULL""" - ) - all_groups = AccountGroup.browse([x[0] for x in env.cr.fetchall()]) - all_groups = all_groups | _get_all_parents(all_groups) - relation_dict = {} - for group in all_groups.sorted(key="parent_path"): - subgroups = group | _get_all_children(group) - accounts = env["account.account"].search([("group_id", "in", subgroups.ids)]) - companies = accounts.mapped("company_id").sorted() - for i, company in enumerate(companies): - if company not in relation_dict: - relation_dict[company] = {} - if i == 0: - if group.company_id != company: - group.company_id = company.id - relation_dict[company][group] = group - continue - # Done by SQL for avoiding ORM derived problems - env.cr.execute( - """INSERT INTO account_group (parent_id, parent_path, name, - code_prefix_start, code_prefix_end, company_id, - create_uid, write_uid, create_date, write_date) - SELECT {parent_id}, parent_path, name, code_prefix_start, - code_prefix_end, {company_id}, create_uid, - write_uid, create_date, write_date - FROM account_group - WHERE id = {id} - RETURNING id - """.format( - id=group.id, - company_id=company.id, - parent_id=group.parent_id - and relation_dict[company][group.parent_id].id - or "NULL", - ) - ) - new_group = AccountGroup.browse(env.cr.fetchone()) - relation_dict[company][group] = new_group - AccountGroup._parent_store_compute() - - def fill_company_account_journal_suspense_account_id(env): companies = env["res.company"].search([("chart_template_id", "!=", False)]) for company in companies: @@ -562,15 +527,40 @@ def fill_statement_lines_with_no_move(env): [("deprecated", "=", True), ("company_id", "=", st_line.company_id.id)] ) deprecated_accounts.deprecated = False - move.write( - { - "line_ids": [ - (0, 0, line_vals) - for line_vals in st_line._prepare_move_line_default_vals() + try: + st_line._synchronize_to_moves( + [ + "payment_ref", + "amount", + "amount_currency", + "foreign_currency_id", + "currency_id", + "partner_id", ] - } - ) + ) + except Exception as e: + _logger.error("Failed for statement line with id %s: %s", st_line.id, e) + raise deprecated_accounts.deprecated = True + to_write = { + "line_ids": [ + ( + 0, + 0, + st_line._prepare_move_line_default_vals( + counterpart_account_id=False + )[0], + ) + ] + } + st_line.move_id.with_context(skip_account_move_synchronization=True).write( + to_write + ) + # The ORM still holds pending values for these lines' stored computed fields + # (e.g. is_reconciled, computed while the moves had no suspense line yet). Write + # them now, so the SQL of fill_account_bank_statement_line_reconciliation is not + # overwritten by a later flush. + env["account.bank.statement.line"].flush() openupgrade.logged_query( env.cr, @@ -631,7 +621,7 @@ def fill_account_journal_payment_credit_debit_account_id(env): ) -def create_new_counterpar_account_payment_transfer(env): +def create_new_counterpart_account_payment_transfer(env): # Create new counterpart payment with account payment transfer openupgrade.logged_query( env.cr, @@ -639,14 +629,14 @@ def create_new_counterpar_account_payment_transfer(env): INSERT INTO account_payment (move_id, is_internal_transfer, partner_type, payment_type, amount, currency_id, - destination_account_id, partner_id, journal_id, + destination_account_id, partner_id, create_uid, create_date, write_uid, write_date) SELECT move.id, true, ap.partner_type, CASE WHEN journal.id = ap.destination_journal_id THEN 'inbound' ELSE 'outbound' END, ap.amount, ap.currency_id, - ap.destination_account_id, ap.partner_id, move.journal_id, + ap.destination_account_id, ap.partner_id, ap.create_uid, ap.create_date, ap.write_uid, ap.write_date FROM account_payment ap JOIN account_move move @@ -658,7 +648,7 @@ def create_new_counterpar_account_payment_transfer(env): def map_account_payment_transfer(env): - # map payment_type from transfer to 'outbound' + # map payment_type from transfer to 'inbound'/'outbound' # and set is_internal_transfer as true on account payment transfer openupgrade.logged_query( env.cr, @@ -670,6 +660,70 @@ def map_account_payment_transfer(env): ) +def fill_account_payment_reconciliation(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE account_payment ap + SET is_reconciled = True, + is_matched = True + FROM res_currency rcur + WHERE rcur.id = ap.currency_id + AND ROUND(ap.amount, rcur.decimal_places) = 0 + """, + ) + openupgrade.logged_query( + env.cr, + """ + WITH matched_payments as ( + SELECT ap.id, + CASE WHEN aj.default_account_id IS NOT NULL + AND bool_or(aj.default_account_id = aml.account_id) + THEN TRUE + ELSE + ROUND(SUM(CASE + WHEN aml.account_id in ( + aj.default_account_id, + aj.payment_debit_account_id, + aj.payment_credit_account_id + ) THEN CASE + WHEN rc.currency_id = rcur.id THEN aml.amount_residual + ELSE aml.amount_residual_currency END + ELSE 0 END + ), rcur.decimal_places) = 0 + END as is_matched, + ROUND( + SUM(CASE + WHEN NOT aa.reconcile THEN 0 + WHEN aml.account_id not in ( + aj.default_account_id, + aj.payment_debit_account_id, + aj.payment_credit_account_id + ) THEN CASE + WHEN rc.currency_id = rcur.id THEN aml.amount_residual + ELSE aml.amount_residual_currency END + ELSE 0 END + ), + rcur.decimal_places + ) = 0 as is_reconciled + FROM account_payment ap + JOIN account_move am ON am.id = ap.move_id + JOIN account_move_line aml ON aml.move_id = am.id + JOIN account_account aa ON aa.id = aml.account_id + JOIN res_company rc ON rc.id = am.company_id + JOIN account_journal aj ON aj.id = am.journal_id + JOIN res_currency rcur ON rcur.id = ap.currency_id + GROUP BY ap.id, rcur.decimal_places, aj.default_account_id + ) + UPDATE account_payment ap + SET is_matched = matched_payments.is_matched, + is_reconciled = matched_payments.is_reconciled + FROM matched_payments + where ap.id = matched_payments.id + """, + ) + + def fill_account_payment_with_no_move(env): p_data = {} p_dates_by_company = {} @@ -677,13 +731,14 @@ def fill_account_payment_with_no_move(env): """ SELECT ap.id, ap.%s, ap.%s, ap.%s, ap.state, aj.company_id FROM account_payment ap - JOIN account_journal aj ON ap.journal_id = aj.id + JOIN account_journal aj ON ap.%s = aj.id WHERE ap.move_id IS NULL """ % ( openupgrade.get_legacy_name("journal_id"), openupgrade.get_legacy_name("name"), openupgrade.get_legacy_name("payment_date"), + openupgrade.get_legacy_name("journal_id"), ) ) for ( @@ -697,7 +752,8 @@ def fill_account_payment_with_no_move(env): p_data[p_id] = { "journal_id": p_journal_id, "name": p_name, - "state": p_state, + # Switch to cancel when no linked move, but the payment was validated + "state": "cancelled" if p_state not in {"draft", "cancelled"} else p_state, "payment_date": p_payment_date, } if p_company in p_dates_by_company: @@ -856,8 +912,149 @@ def _switch_default_account_and_outstanding_account(env): ) +def fill_account_bank_statement_line_reconciliation(env): + openupgrade.logged_query( + env.cr, + """ + WITH absl_residual AS ( + SELECT absl.id, + CASE + WHEN am.to_check + AND absl.foreign_currency_id IS NOT NULL + THEN -absl.amount_currency + WHEN am.to_check THEN -absl.amount + ELSE SUM( + CASE + WHEN aa.reconcile AND aa.id != aj.default_account_id + AND aa.id = aj.suspense_account_id + THEN aml.amount_residual_currency + WHEN aa.id != aj.default_account_id + AND aa.id = aj.suspense_account_id + THEN aml.amount_currency + ELSE 0. + END + ) + END as amount_residual, + MIN(CASE + WHEN aa.id != aj.default_account_id + AND aa.id = aj.suspense_account_id + THEN aml.currency_id + ELSE NULL END) as suspense_currency_id + FROM account_bank_statement_line absl + JOIN account_move am ON am.id = absl.move_id + JOIN account_move_line aml ON aml.move_id = am.id + JOIN account_journal aj ON aj.id = am.journal_id + JOIN account_account aa ON aa.id = aml.account_id + JOIN res_company rc ON rc.id = aj.company_id + GROUP BY + absl.id, + am.to_check, + absl.foreign_currency_id, + absl.amount_currency, + absl.amount + ) + UPDATE account_bank_statement_line absl + SET amount_residual = absl_residual.amount_residual, + is_reconciled = CASE + WHEN suspense_currency_id IS NULL THEN TRUE + ELSE ROUND(absl_residual.amount_residual, rcur.decimal_places) = 0 + END + FROM absl_residual + LEFT JOIN res_currency rcur ON rcur.id = absl_residual.suspense_currency_id + WHERE absl_residual.id = absl.id + """, + ) + + +def update_payment_state_partial(env): + """As the 'Partially paid' didn't exist before, invoices with this condition are + still marked as 'Not paid', so we should update them as if they were partially paid + in this new version. + """ + openupgrade.logged_query( + env.cr, + """ + UPDATE account_move + SET payment_state='partial' + WHERE move_type IN ('out_invoice', 'out_refund', 'in_invoice', 'in_refund') + AND amount_residual > 0 + AND amount_residual < amount_total + AND payment_state != 'partial' + """, + ) + + +def cash_rounding_fields_to_company_dependent(env): + """Usually for such cases, openupgrade.convert_to_company_dependent() should + normally be used, but that function does not seem to support converting + a field to company-dependent without changing its name at the same time. + moreover, it stores boolean values even when they are false (what odoo + does not), and it creates values for all companies, which does not make + sense when a record is linked to a particular company only. + """ + field_names = ["profit_account_id"] + if openupgrade.column_exists(env.cr, "account_cash_rounding", "loss_account_id"): + # loss_account_id comes from pos_cash_rounding + field_names += ["loss_account_id"] + for field_name in field_names: + field_id = (env.ref(f"account.field_account_cash_rounding__{field_name}").id,) + # this many2one property stores its value in the value_reference column + openupgrade.logged_query( + env.cr, + f""" + insert into ir_property ( + company_id, fields_id, value_reference, name, res_id, type + ) + select + aa.company_id, + %(field_id)s, + 'account.account,' || acr.{field_name}, + '{field_name}', + 'account.cash.rounding,' || acr.id, + 'many2one' + from account_cash_rounding acr + join account_account aa ON acr.profit_account_id = aa.id + where + acr.{field_name} is not null + order by acr.id + """, + {"field_id": field_id}, + ) + if field_name == "loss_account_id": + # for account.cash.rounding records that are not linked to + # a company (i.e, to a profit_account_id), create an + # ir.property record for each company. + openupgrade.logged_query( + env.cr, + """ + insert into ir_property ( + company_id, + fields_id, + value_reference, + name, + res_id, + type + ) + select + rc.id, + %(field_id)s, + 'account.account,' || acr.loss_account_id, + 'loss_account_id', + 'account.cash.rounding,' || acr.id, + 'many2one' + from account_cash_rounding acr + inner join res_company as rc on + acr.profit_account_id is null + and acr.loss_account_id is not null + order by acr.id, rc.id + """, + {"field_id": field_id}, + ) + + @openupgrade.migrate() def migrate(env, version): + cash_rounding_fields_to_company_dependent(env) fill_account_journal_posted_before(env) fill_code_prefix_end_field(env) fill_default_account_id_field(env) @@ -866,7 +1063,6 @@ def migrate(env, version): create_account_reconcile_model_lines(env) create_account_reconcile_model_template_lines(env) create_account_tax_report_lines(env) - post_statements_with_unreconciled_lines(env) pass_bank_statement_line_note_to_journal_entry_narration(env) pass_payment_to_journal_entry_narration(env) fill_company_account_cash_basis_base_account_id(env) @@ -875,17 +1071,17 @@ def migrate(env, version): openupgrade.load_data(env.cr, "account", "14.0.1.1/noupdate_changes.xml") try_delete_noupdate_records(env) _create_hooks(env) - populate_account_groups(env) - unfold_manual_account_groups(env) - # Launch a recomputation of the account groups after previous changes - env["account.account"].search([])._compute_account_group() fill_company_account_journal_suspense_account_id(env) fill_statement_lines_with_no_move(env) fill_account_journal_payment_credit_debit_account_id(env) - create_new_counterpar_account_payment_transfer(env) + create_new_counterpart_account_payment_transfer(env) map_account_payment_transfer(env) + fill_account_payment_reconciliation(env) fill_account_payment_with_no_move(env) + fill_account_bank_statement_line_reconciliation(env) + post_statements(env) _delete_hooks(env) + update_payment_state_partial(env) openupgrade.delete_record_translations( env.cr, "account", diff --git a/openupgrade_scripts/scripts/account/14.0.1.1/pre-migration.py b/openupgrade_scripts/scripts/account/14.0.1.1/pre-migration.py index 822f09b7f3e1..029fea38e962 100644 --- a/openupgrade_scripts/scripts/account/14.0.1.1/pre-migration.py +++ b/openupgrade_scripts/scripts/account/14.0.1.1/pre-migration.py @@ -3,7 +3,20 @@ from openupgradelib import openupgrade -def rename_fields(env): +def convert_fields(env): + if openupgrade.column_exists(env.cr, "account_move", "move_type"): + # see account_tax_balance of OCA + openupgrade.rename_fields( + env, + [ + ( + "account.move", + "account_move", + "move_type", + openupgrade.get_legacy_name("move_type"), + ), + ], + ) openupgrade.rename_fields( env, [ @@ -87,6 +100,30 @@ def rename_fields(env): ), ], ) + openupgrade.rename_columns( + env.cr, + { + "account_journal": [ + ("default_credit_account_id", None), + ("default_debit_account_id", None), + ], + "account_bank_statement_line": [ + ("date", None), + ], + "account_payment": [ + ("name", None), + ("payment_date", None), + ], + }, + ) + openupgrade.copy_columns( + env.cr, + { + "account_payment": [ + ("currency_id", None, None), + ], + }, + ) def m2m_tables_account_journal_renamed(env): @@ -125,45 +162,6 @@ def remove_constrains_reconcile_models(env): ) -def copy_fields(env): - openupgrade.rename_columns( - env.cr, - { - "account_journal": [ - ("default_credit_account_id", None), - ("default_debit_account_id", None), - ], - }, - ) - if openupgrade.column_exists(env.cr, "account_move", "move_type"): - # see account_tax_balance of OCA - openupgrade.rename_fields( - env, - [ - ( - "account.move", - "account_move", - "move_type", - openupgrade.get_legacy_name("move_type"), - ), - ], - ) - openupgrade.copy_columns( - env.cr, - { - "account_bank_statement_line": [ - ("date", None, None), - ], - "account_payment": [ - ("journal_id", None, None), - ("name", None, None), - ("payment_date", None, None), - ("currency_id", None, None), - ], - }, - ) - - def _mark_move_line_statement_unreconciled(env): # 1. create legacy_statement column in account_move_line table openupgrade.logged_query( @@ -192,10 +190,7 @@ def add_move_id_field_account_bank_statement_line(env): ): openupgrade.logged_query( env.cr, - """ - ALTER TABLE account_bank_statement_line - ADD COLUMN currency_id integer - """, + "ALTER TABLE account_bank_statement_line ADD COLUMN currency_id integer", ) openupgrade.logged_query( env.cr, @@ -208,82 +203,27 @@ def add_move_id_field_account_bank_statement_line(env): WHERE absl.statement_id = bs.id """, ) + # Set the move in the statement line from the link in the aml if not openupgrade.column_exists(env.cr, "account_bank_statement_line", "move_id"): openupgrade.logged_query( - env.cr, - """ - ALTER TABLE account_bank_statement_line - ADD COLUMN move_id integer - """, + env.cr, "ALTER TABLE account_bank_statement_line ADD COLUMN move_id integer" ) - if not openupgrade.column_exists(env.cr, "account_move", "statement_line_id"): - # In v10 existed that field - openupgrade.logged_query( - env.cr, - """ - ALTER TABLE account_move - ADD COLUMN statement_line_id integer - """, - ) - openupgrade.logged_query( - env.cr, - """ - UPDATE account_move am - SET statement_line_id = aml.statement_line_id - FROM account_move_line aml - WHERE aml.move_id = am.id AND aml.statement_line_id IS NOT NULL - """, - ) - # 1. set move_id from moves where statement_line_id is defined - openupgrade.logged_query( - env.cr, - """ - UPDATE account_bank_statement_line absl - SET move_id = am.id - FROM account_move am - WHERE am.statement_line_id = absl.id - """, - ) - # 2. try to match on statement move_name or payment_ref (if move_name empty) - openupgrade.logged_query( - env.cr, - """ - UPDATE account_bank_statement_line absl - SET move_id = am.id - FROM account_move am, account_bank_statement bs - WHERE absl.statement_id = bs.id - AND absl.move_id IS NULL - AND am.name NOT IN ('', '/') - AND COALESCE(NULLIF(absl.move_name, ''), absl.payment_ref) = am.name - AND am.company_id = bs.company_id - """, - ) - # 3. match on statement payment_ref with payment communication openupgrade.logged_query( env.cr, """ UPDATE account_bank_statement_line absl - SET move_id = ap.move_id - FROM account_payment ap - JOIN account_journal aj ON ap.journal_id = aj.id, - account_bank_statement bs - WHERE absl.statement_id = bs.id AND aj.company_id = bs.company_id - AND absl.move_id IS NULL AND absl.payment_ref NOT IN ('', '/') - AND absl.payment_ref = ap.communication - """, - ) - # 4. match on statement account number and move ref - openupgrade.logged_query( - env.cr, - """ - UPDATE account_bank_statement_line absl - SET move_id = am.id - FROM account_move am, account_bank_statement bs - WHERE absl.statement_id = bs.id AND am.company_id = bs.company_id - AND absl.move_id IS NULL AND absl.account_number NOT IN ('', '/') - AND absl.account_number = am.ref + SET move_id = aml.move_id + FROM account_move_line aml + WHERE aml.statement_line_id = absl.id AND absl.move_id IS NULL """, ) + # Assign the reverse link from move to statement line + if not openupgrade.column_exists(env.cr, "account_move", "statement_line_id"): + # In v10, the fields exists + openupgrade.logged_query( + env.cr, + "ALTER TABLE account_move ADD COLUMN statement_line_id integer", + ) openupgrade.logged_query( env.cr, """ @@ -304,6 +244,15 @@ def add_move_id_field_account_payment(env): ADD COLUMN move_id integer """, ) + # Set move_id from move lines where payment_id is defined + openupgrade.logged_query( + env.cr, + """ + UPDATE account_payment ap + SET move_id = aml.move_id + FROM account_move_line aml + WHERE aml.payment_id = ap.id AND ap.move_id IS NULL""", + ) if not openupgrade.column_exists(env.cr, "account_move", "payment_id"): openupgrade.logged_query( env.cr, @@ -316,58 +265,26 @@ def add_move_id_field_account_payment(env): env.cr, """ UPDATE account_move am - SET payment_id = aml.payment_id - FROM account_move_line aml - WHERE aml.move_id = am.id AND aml.payment_id IS NOT NULL - """, - ) - # 1. set move_id from moves where payment_id is defined - openupgrade.logged_query( - env.cr, - """ - UPDATE account_payment ap - SET move_id = am.id - FROM account_move am - WHERE ap.move_id IS NULL - AND am.payment_id = ap.id - AND ap.state NOT IN ('draft', 'cancelled')""", - ) - # 2. try to match on payment move_name or payment_reference (if move_name empty) - openupgrade.logged_query( - env.cr, - """ - UPDATE account_payment ap - SET move_id = am.id - FROM account_move am, account_journal aj - WHERE ap.journal_id = aj.id - AND ap.move_id IS NULL - AND am.name NOT IN ('', '/') - AND COALESCE(NULLIF(ap.move_name, ''), ap.payment_reference) = am.name - AND am.company_id = aj.company_id - AND ap.state NOT IN ('draft', 'cancelled')""", - ) - # 3. match on payment communication with move payment_reference, ref or name - openupgrade.logged_query( - env.cr, - """ - UPDATE account_payment ap - SET move_id = am.id - FROM account_move am, account_journal aj - WHERE ap.journal_id = aj.id AND am.company_id = aj.company_id AND - ap.state NOT IN ('draft', 'cancelled') AND - ap.move_id IS NULL AND ap.communication NOT IN ('', '/') AND - am.ref = ap.communication + SET payment_id = ap.id + FROM account_payment ap + WHERE am.id = ap.move_id AND am.payment_id IS NULL """, ) + # An internal transfer of v13 is one payment with two journal entries. Link + # the other entry to the payment as well: post-migration needs it for creating + # the counterpart payment (create_new_counterpart_account_payment_transfer) openupgrade.logged_query( env.cr, """ UPDATE account_move am - SET payment_id = ap.id - FROM account_payment ap - WHERE am.id = ap.move_id AND am.payment_id IS NULL + SET payment_id = aml.payment_id + FROM account_move_line aml + JOIN account_payment ap ON ap.id = aml.payment_id + WHERE aml.move_id = am.id AND am.payment_id IS NULL + AND ap.payment_type = 'transfer' """, ) + # fix currency openupgrade.logged_query( env.cr, """ @@ -512,12 +429,48 @@ def fill_account_move_line_currency_id(env): env.cr, """ UPDATE account_move_line - SET currency_id = company_currency_id + SET currency_id = company_currency_id, + amount_residual_currency = amount_residual WHERE currency_id IS NULL """, ) +def fill_account_move_line_matching_number(env): + openupgrade.add_fields( + env, + [ + ( + "matching_number", + "account.move.line", + "account_move_line", + "char", + False, + "account", + ), + ], + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_move_line aml + SET matching_number = afr.name + FROM account_full_reconcile afr + WHERE afr.id = aml.full_reconcile_id + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_move_line aml + SET matching_number = 'P' + FROM account_partial_reconcile apr + WHERE aml.full_reconcile_id IS NULL AND + (apr.credit_move_id = aml.id OR apr.debit_move_id = aml.id) + """, + ) + + def fill_account_payment_partner_id(env): openupgrade.logged_query( env.cr, @@ -527,6 +480,336 @@ def fill_account_payment_partner_id(env): FROM account_journal aj JOIN res_company rc ON aj.company_id = rc.id WHERE ap.payment_type = 'transfer' + AND aj.id = ap.journal_id + """, + ) + + +def fill_account_payment_data(env): + openupgrade.add_fields( + env, + [ + ( + "is_internal_transfer", + "account.payment", + "account_payment", + "boolean", + False, + "account", + ), + ( + "destination_account_id", + "account.payment", + "account_payment", + "many2one", + False, + "account", + ), + ( + "partner_bank_id", + "account.payment", + "account_payment", + "many2one", + False, + "account", + ), + ], + ) + # Set data for internal transfers + openupgrade.logged_query( + env.cr, + """ + UPDATE account_payment ap + SET is_internal_transfer = TRUE, + destination_account_id = rc.transfer_account_id + FROM account_journal aj, + account_move am, + res_company rc + WHERE am.journal_id = aj.id + AND ap.move_id = am.id + AND aj.company_id = rc.id + AND ap.partner_id = rc.partner_id + """, + ) + # Set data for customer/supplier transfers + query = """ + UPDATE account_payment ap + SET destination_account_id = substring(ip.value_reference, 17)::int + FROM account_journal aj, + ir_property ip, + ir_model_fields imf + WHERE ap.partner_type IN ('customer', 'supplier') + AND ap.destination_account_id IS NULL + AND ap.journal_id = aj.id + AND ip.fields_id = imf.id + AND imf.name = CASE + WHEN partner_type = 'customer' THEN 'property_account_receivable_id' + ELSE 'property_account_payable_id' + END + AND imf.model = 'res.partner' + AND ip.company_id = aj.company_id""" + # with partner with specific AR/AP account + openupgrade.logged_query( + env.cr, + query + + """ + AND ap.partner_id IS NOT NULL + AND ip.res_id = 'res.partner,' || ap.partner_id::VARCHAR + """, + ) + # and without partner or without specific AR/AP account + openupgrade.logged_query(env.cr, query + " AND ip.res_id IS NULL") + # Set Partner Bank ID + openupgrade.logged_query( + env.cr, + """ + UPDATE account_payment ap + SET partner_bank_id = aj.bank_account_id + FROM account_journal aj + WHERE payment_type = 'inbound' + AND ap.journal_id = aj.id + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_payment ap + SET partner_bank_id = rpb.id + FROM res_partner_bank rpb, + account_journal aj + WHERE payment_type != 'inbound' + AND ap.partner_id IS NOT NULL + AND ap.partner_id = rpb.partner_id + AND ap.journal_id = aj.id + AND (rpb.company_id is NULL or rpb.company_id = aj.company_id) + """, + ) + + +def create_account_payment_reconciliation(env): + openupgrade.add_fields( + env, + [ + ( + "is_reconciled", + "account.payment", + "account_payment", + "boolean", + False, + "account", + False, + ), + ( + "is_matched", + "account.payment", + "account_payment", + "boolean", + False, + "account", + False, + ), + ], + ) + + +def fill_account_bank_statement_data(env): + openupgrade.add_fields( + env, + [ + ( + "is_valid_balance_start", + "account.bank.statement", + "account_bank_statement", + "boolean", + False, + "account", + ), + ( + "previous_statement_id", + "account.bank.statement", + "account_bank_statement", + "many2one", + False, + "account", + ), + ], + ) + openupgrade.logged_query( + env.cr, + """ + WITH previous_statement as ( + SELECT abst.id, + CASE + WHEN abst.journal_id = LAG(abst.journal_id, 1) OVER ( + ORDER BY abst.journal_id, abst.date, abst.id) + THEN LAG(abst.id, 1) OVER ( + ORDER BY abst.journal_id, abst.date, abst.id) + ELSE NULL + END as previous_statement_id, + CASE + WHEN abst.journal_id = LAG(abst.journal_id, 1) OVER ( + ORDER BY abst.journal_id, abst.date, abst.id) + THEN ROUND(LAG(abst.balance_end, 1) OVER ( + ORDER BY abst.journal_id, abst.date, abst.id) + - abst.balance_start, rcur.decimal_places) = 0 + ELSE TRUE + END as is_valid_balance_start + FROM account_bank_statement abst + LEFT JOIN account_journal aj ON aj.id = abst.journal_id + LEFT JOIN res_company rc ON rc.id = aj.company_id + LEFT JOIN res_currency rcur + ON rcur.id = aj.currency_id + OR (aj.currency_id IS NULL and rcur.id = rc.currency_id) + ) + UPDATE account_bank_statement abst + SET is_valid_balance_start = previous_statement.is_valid_balance_start, + previous_statement_id = previous_statement.previous_statement_id + FROM previous_statement + WHERE abst.id = previous_statement.id + """, + ) + + +def create_account_bank_statement_line_reconciliation(env): + openupgrade.add_fields( + env, + [ + ( + "amount_residual", + "account.bank.statement.line", + "account_bank_statement_line", + "float", + False, + "account", + ), + ( + "is_reconciled", + "account.bank.statement.line", + "account_bank_statement_line", + "boolean", + False, + "account", + ), + ], + ) + + +def delete_xmlid_existing_groups(env): + env.cr.execute( + """DELETE FROM ir_model_data imd + USING account_group ag + WHERE ag.id = imd.res_id AND imd.model = 'account.group' + AND imd.module != '__export__' + RETURNING imd.res_id""" + ) + # end-migration script will: + # - populate account groups from the templates + # - unfold manual groups per company + proper company assignation + # - merge repeated groups + + +def fill_sequence_mixin_fields(env): + openupgrade.add_fields( + env, + [ + ( + "sequence_prefix", + "account.move", + "account_move", + "char", + False, + "account", + ), + ( + "sequence_number", + "account.move", + "account_move", + "integer", + False, + "account", + ), + ( + "sequence_prefix", + "account.bank.statement", + "account_bank_statement", + "char", + False, + "account", + ), + ( + "sequence_number", + "account.bank.statement", + "account_bank_statement", + "integer", + False, + "account", + ), + ], + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_move + SET sequence_prefix = substring( + name, '^(.*?)(?:\\d{0,9})(?:\\D*?)$'), + sequence_number = CAST(COALESCE(NULLIF(substring( + name, '^(?:.*?)(\\d{0,9})(?:\\D*?)$'),''), '0') as int) + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_bank_statement + SET sequence_prefix = substring( + name, '^(.*?)(?:\\d{0,9})(?:\\D*?)$'), + sequence_number = CAST(COALESCE(NULLIF(substring( + name, '^(?:.*?)(\\d{0,9})(?:\\D*?)$'),''), '0') as int) + """, + ) + + +def fill_partial_reconcile_currency(env): + openupgrade.add_fields( + env, + [ + ( + "debit_currency_id", + "account.partial.reconcile", + "account_partial_reconcile", + "many2one", + False, + "account", + ), + ( + "credit_currency_id", + "account.partial.reconcile", + "account_partial_reconcile", + "many2one", + False, + "account", + ), + ], + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_partial_reconcile apr + SET debit_currency_id = COALESCE(aml.currency_id, rc.currency_id) + FROM account_move_line aml, + res_company rc + WHERE aml.id = apr.debit_move_id + AND rc.id = aml.company_id + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE account_partial_reconcile apr + SET credit_currency_id = COALESCE(aml.currency_id, rc.currency_id) + FROM account_move_line aml, + res_company rc + WHERE aml.id = apr.credit_move_id + AND rc.id = aml.company_id """, ) @@ -565,8 +848,7 @@ def migrate(env, version): env, "account", ["account_analytic_line_rule_billing_user"], True ) _mark_move_line_statement_unreconciled(env) - copy_fields(env) - rename_fields(env) + convert_fields(env) m2m_tables_account_journal_renamed(env) remove_constrains_reconcile_models(env) add_move_id_field_account_payment(env) @@ -574,21 +856,25 @@ def migrate(env, version): add_edi_state_field_account_move(env) fill_empty_partner_type_account_payment(env) fill_account_move_line_currency_id(env) + fill_account_move_line_matching_number(env) fill_account_payment_partner_id(env) + fill_account_payment_data(env) + create_account_payment_reconciliation(env) + fill_account_bank_statement_data(env) + create_account_bank_statement_line_reconciliation(env) + delete_xmlid_existing_groups(env) + fill_sequence_mixin_fields(env) + fill_partial_reconcile_currency(env) _update_reconciliation_date(env) - # Disappeared constraint - openupgrade.logged_query( - env.cr, - """ALTER TABLE account_move_line - DROP CONSTRAINT IF EXISTS - account_move_line_check_amount_currency_balance_sign""", - ) - openupgrade.delete_records_safely_by_xml_id( - env, ["account.constraint_account_move_line_check_amount_currency_balance_sign"] - ) openupgrade.remove_tables_fks( env.cr, ["account_bank_statement_import_ir_attachment_rel"] ) openupgrade.lift_constraints( env.cr, "account_bank_statement_line", "partner_account_id" ) + # Do this at the end for not having to use all time the get_legacy_name method + openupgrade.rename_columns(env.cr, {"account_payment": [("journal_id", None)]}) + # Remove SQL view account_invoice_report not used anymore in Odoo v14.0 + openupgrade.logged_query( + env.cr, "DROP VIEW IF EXISTS account_invoice_report CASCADE" + ) diff --git a/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis.txt index c218bbe87c4f..4b0d2e801bb4 100644 --- a/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis.txt @@ -18,13 +18,11 @@ new model sequence.mixin [abstract] account / account.account / _order : _order is now 'is_off_balance, code, company_id' ('code') account / account.account / allowed_journal_ids (many2many): NEW relation: account.journal account / account.account / group_id (many2one) : now a function -account / account.account / is_off_balance (boolean) : NEW hasdefault, isfunction: function, stored +account / account.account / is_off_balance (boolean) : NEW isfunction: function, stored account / account.account.template / group_id (many2one) : DEL relation: account.group account / account.account.template / root_id (many2one) : DEL relation: account.root account / account.bank.statement / _order : _order is now 'date desc, name desc, id desc' ('date desc, id desc') account / account.bank.statement / accounting_date (date) : DEL -account / account.bank.statement / balance_end_real (float) : now a function -account / account.bank.statement / balance_start (float) : now a function account / account.bank.statement / is_valid_balance_start (boolean): NEW isfunction: function, stored account / account.bank.statement / previous_statement_id (many2one): NEW relation: account.bank.statement, isfunction: function, stored account / account.bank.statement / sequence_number (integer) : NEW isfunction: function, stored @@ -53,12 +51,12 @@ account / account.bank.statement.line / ref (char) : not account / account.bank.statement.line / ref (char) : now related account / account.cash.rounding / account_id (many2one) : DEL relation: account.account account / account.cash.rounding / loss_account_id (many2one) : previously in module pos_cash_rounding -account / account.cash.rounding / profit_account_id (many2one) : NEW relation: account.account, hasdefault +account / account.cash.rounding / profit_account_id (many2one) : NEW relation: account.account account / account.chart.template / account_journal_suspense_account_id (many2one): NEW relation: account.account.template account / account.chart.template / property_cash_basis_base_account_id (many2one): NEW relation: account.account.template account / account.fiscal.position.account / company_id (many2one) : NEW relation: res.company, isrelated: related, stored account / account.fiscal.position.tax / company_id (many2one) : NEW relation: res.company, isrelated: related, stored -account / account.fiscal.year / company_id (many2one) : DEL relation: res.company, required, req_default: function +account / account.fiscal.year / company_id (many2one) : DEL relation: res.company, required account / account.fiscal.year / date_from (date) : DEL required account / account.fiscal.year / date_to (date) : DEL required account / account.fiscal.year / name (char) : DEL required @@ -66,42 +64,37 @@ account / account.group / _order : _order account / account.group / code_prefix (char) : DEL account / account.group / code_prefix_end (char) : NEW account / account.group / code_prefix_start (char) : NEW -account / account.group / company_id (many2one) : NEW relation: res.company, required, req_default: function, hasdefault +account / account.group / company_id (many2one) : NEW relation: res.company, required account / account.group.template / chart_template_id (many2one) : NEW relation: account.chart.template, required account / account.group.template / code_prefix_end (char) : NEW account / account.group.template / code_prefix_start (char) : NEW account / account.group.template / name (char) : NEW required account / account.group.template / parent_id (many2one) : NEW relation: account.group.template account / account.journal / account_control_ids (many2many): table is now 'journal_account_control_rel' ('account_account_type_rel') -account / account.journal / alias_name (char) : not a function anymore -account / account.journal / alias_name (char) : now related account / account.journal / default_account_id (many2one) : NEW relation: account.account account / account.journal / default_credit_account_id (many2one): DEL relation: account.account account / account.journal / default_debit_account_id (many2one): DEL relation: account.account -account / account.journal / inbound_payment_method_ids (many2many): now a function -account / account.journal / outbound_payment_method_ids (many2many): now a function account / account.journal / payment_credit_account_id (many2one): NEW relation: account.account account / account.journal / payment_debit_account_id (many2one): NEW relation: account.account account / account.journal / post_at (selection) : DEL selection_keys: ['bank_rec', 'pay_val'] account / account.journal / refund_sequence_id (many2one) : DEL relation: ir.sequence account / account.journal / sale_activity_note (text) : NEW -account / account.journal / sale_activity_type_id (many2one): NEW relation: mail.activity.type, hasdefault +account / account.journal / sale_activity_type_id (many2one): NEW relation: mail.activity.type, hasdefault: default account / account.journal / sale_activity_user_id (many2one): NEW relation: res.users account / account.journal / sequence_id (many2one) : DEL relation: ir.sequence, required account / account.journal / sequence_override_regex (text): NEW -account / account.journal / suspense_account_id (many2one): NEW relation: account.account, isfunction: function, stored +account / account.journal / suspense_account_id (many2one): NEW relation: account.account, hasdefault: compute account / account.journal / type_control_ids (many2many) : table is now 'journal_account_type_control_rel' ('account_journal_type_rel') account / account.move / country_code (char) : previously in module l10n_id_efaktur account / account.move / invoice_partner_bank_id (many2one): DEL relation: res.partner.bank account / account.move / invoice_payment_ref (char) : DEL account / account.move / invoice_payment_state (selection): DEL selection_keys: ['in_payment', 'not_paid', 'paid'] account / account.move / invoice_sent (boolean) : DEL -account / account.move / is_move_sent (boolean) : NEW hasdefault -account / account.move / move_type (selection) : NEW required, selection_keys: ['entry', 'in_invoice', 'in_receipt', 'in_refund', 'out_invoice', 'out_receipt', 'out_refund'], req_default: function, hasdefault -account / account.move / name (char) : now a function -account / account.move / partner_bank_id (many2one) : NEW relation: res.partner.bank +account / account.move / is_move_sent (boolean) : NEW +account / account.move / move_type (selection) : NEW required, selection_keys: ['entry', 'in_invoice', 'in_receipt', 'in_refund', 'out_invoice', 'out_receipt', 'out_refund'] +account / account.move / partner_bank_id (many2one) : NEW relation: res.partner.bank, hasdefault: compute account / account.move / payment_id (many2one) : NEW relation: account.payment -account / account.move / payment_reference (char) : NEW +account / account.move / payment_reference (char) : NEW hasdefault: compute account / account.move / payment_state (selection) : NEW selection_keys: ['in_payment', 'invoicing_legacy', 'not_paid', 'paid', 'partial', 'reversed'], isfunction: function, stored account / account.move / posted_before (boolean) : NEW account / account.move / qr_code_method (selection) : NEW selection_keys: function @@ -110,10 +103,8 @@ account / account.move / sequence_prefix (char) : NEW is account / account.move / show_name_warning (boolean) : NEW account / account.move / statement_line_id (many2one) : NEW relation: account.bank.statement.line account / account.move / tax_cash_basis_move_id (many2one): NEW relation: account.move -account / account.move / type (selection) : DEL required, selection_keys: ['entry', 'in_invoice', 'in_receipt', 'in_refund', 'out_invoice', 'out_receipt', 'out_refund'], req_default: function +account / account.move / type (selection) : DEL required, selection_keys: ['entry', 'in_invoice', 'in_receipt', 'in_refund', 'out_invoice', 'out_receipt', 'out_refund'] account / account.move.line / account_internal_type (selection): not stored anymore -account / account.move.line / analytic_account_id (many2one): now a function -account / account.move.line / analytic_tag_ids (many2many) : now a function account / account.move.line / currency_id (many2one) : now required account / account.move.line / matching_number (char) : NEW isfunction: function, stored account / account.move.line / payment_id (many2one) : now related @@ -129,11 +120,11 @@ account / account.partial.reconcile / debit_currency_id (many2one) : NEW r account / account.payment / _inherits : NEW _inherits: {'account.move': 'move_id'} account / account.payment / _order : _order is now 'date desc, name desc' ('payment_date desc, name desc') account / account.payment / communication (char) : DEL -account / account.payment / currency_id (many2one) : now a function account / account.payment / destination_account_id (many2one): is now stored +account / account.payment / destination_account_id (many2one): not a function anymore account / account.payment / destination_journal_id (many2one): DEL relation: account.journal account / account.payment / invoice_ids (many2many) : DEL relation: account.move -account / account.payment / is_internal_transfer (boolean): NEW isfunction: function, stored +account / account.payment / is_internal_transfer (boolean): NEW hasdefault: compute account / account.payment / is_matched (boolean) : NEW isfunction: function, stored account / account.payment / is_reconciled (boolean) : NEW isfunction: function, stored account / account.payment / journal_id (many2one) : not stored anymore @@ -144,12 +135,10 @@ account / account.payment / move_name (char) : DEL account / account.payment / name (char) : not stored anymore account / account.payment / name (char) : now related account / account.payment / partner_bank_account_id (many2one): DEL relation: res.partner.bank -account / account.payment / partner_bank_id (many2one) : NEW relation: res.partner.bank, isfunction: function, stored -account / account.payment / partner_id (many2one) : now a function -account / account.payment / partner_type (selection) : now required, req_default: function -account / account.payment / payment_date (date) : DEL required, req_default: function +account / account.payment / partner_bank_id (many2one) : NEW relation: res.partner.bank, hasdefault: compute +account / account.payment / partner_type (selection) : now required +account / account.payment / payment_date (date) : DEL required account / account.payment / payment_difference_handling (selection): DEL selection_keys: ['open', 'reconcile'] -account / account.payment / payment_method_id (many2one) : now a function account / account.payment / payment_type (selection) : selection_keys is now '['inbound', 'outbound']' ('['inbound', 'outbound', 'transfer']') account / account.payment / state (selection) : not stored anymore account / account.payment / state (selection) : now related @@ -158,12 +147,12 @@ account / account.payment / state (selection) : select account / account.payment / writeoff_account_id (many2one): DEL relation: account.account account / account.payment / writeoff_label (char) : DEL account / account.payment.method / _order : _order is now 'sequence' ('id') -account / account.payment.method / sequence (integer) : NEW hasdefault +account / account.payment.method / sequence (integer) : NEW hasdefault: default account / account.reconcile.model / account_id (many2one) : DEL relation: account.account -account / account.reconcile.model / active (boolean) : NEW hasdefault -account / account.reconcile.model / amount (float) : DEL required, req_default: function +account / account.reconcile.model / active (boolean) : NEW hasdefault: default +account / account.reconcile.model / amount (float) : DEL required account / account.reconcile.model / amount_from_label_regex (char): DEL -account / account.reconcile.model / amount_type (selection) : DEL required, selection_keys: ['fixed', 'percentage', 'regex'], req_default: function +account / account.reconcile.model / amount_type (selection) : DEL required, selection_keys: ['fixed', 'percentage', 'regex'] account / account.reconcile.model / analytic_account_id (many2one): DEL relation: account.analytic.account account / account.reconcile.model / analytic_tag_ids (many2many) : DEL relation: account.analytic.tag account / account.reconcile.model / force_second_tax_included (boolean): DEL @@ -172,16 +161,16 @@ account / account.reconcile.model / has_second_line (boolean) : DEL account / account.reconcile.model / journal_id (many2one) : DEL relation: account.journal account / account.reconcile.model / label (char) : DEL account / account.reconcile.model / line_ids (one2many) : NEW relation: account.reconcile.model.line -account / account.reconcile.model / match_text_location_label (boolean): NEW hasdefault -account / account.reconcile.model / match_text_location_note (boolean): NEW hasdefault -account / account.reconcile.model / match_text_location_reference (boolean): NEW hasdefault -account / account.reconcile.model / matching_order (selection) : NEW required, selection_keys: ['new_first', 'old_first'], req_default: function, hasdefault +account / account.reconcile.model / match_text_location_label (boolean): NEW hasdefault: default +account / account.reconcile.model / match_text_location_note (boolean): NEW hasdefault: default +account / account.reconcile.model / match_text_location_reference (boolean): NEW hasdefault: default +account / account.reconcile.model / matching_order (selection) : NEW required, selection_keys: ['new_first', 'old_first'], hasdefault: default account / account.reconcile.model / partner_mapping_line_ids (one2many): NEW relation: account.reconcile.model.partner.mapping -account / account.reconcile.model / past_months_limit (integer) : NEW hasdefault +account / account.reconcile.model / past_months_limit (integer) : NEW hasdefault: default account / account.reconcile.model / second_account_id (many2one) : DEL relation: account.account -account / account.reconcile.model / second_amount (float) : DEL required, req_default: function +account / account.reconcile.model / second_amount (float) : DEL required account / account.reconcile.model / second_amount_from_label_regex (char): DEL -account / account.reconcile.model / second_amount_type (selection): DEL required, selection_keys: ['fixed', 'percentage', 'regex'], req_default: function +account / account.reconcile.model / second_amount_type (selection): DEL required, selection_keys: ['fixed', 'percentage', 'regex'] account / account.reconcile.model / second_analytic_account_id (many2one): DEL relation: account.analytic.account account / account.reconcile.model / second_analytic_tag_ids (many2many): DEL relation: account.analytic.tag account / account.reconcile.model / second_journal_id (many2one) : DEL relation: account.journal @@ -190,46 +179,46 @@ account / account.reconcile.model / second_tax_ids (many2many) : DEL re account / account.reconcile.model / tax_ids (many2many) : DEL relation: account.tax account / account.reconcile.model.line / account_id (many2one) : NEW relation: account.account, required account / account.reconcile.model.line / amount (float) : NEW isfunction: function, stored -account / account.reconcile.model.line / amount_string (char) : NEW required, req_default: function, hasdefault -account / account.reconcile.model.line / amount_type (selection) : NEW required, selection_keys: ['fixed', 'percentage', 'regex'], req_default: function, hasdefault +account / account.reconcile.model.line / amount_string (char) : NEW required, hasdefault: default +account / account.reconcile.model.line / amount_type (selection) : NEW required, selection_keys: ['fixed', 'percentage', 'regex'], hasdefault: default account / account.reconcile.model.line / analytic_account_id (many2one): NEW relation: account.analytic.account account / account.reconcile.model.line / analytic_tag_ids (many2many) : NEW relation: account.analytic.tag -account / account.reconcile.model.line / company_id (many2one) : NEW relation: res.company, hasdefault, isrelated: related, stored +account / account.reconcile.model.line / company_id (many2one) : NEW relation: res.company, isrelated: related, stored account / account.reconcile.model.line / force_tax_included (boolean) : NEW account / account.reconcile.model.line / journal_id (many2one) : NEW relation: account.journal account / account.reconcile.model.line / label (char) : NEW account / account.reconcile.model.line / model_id (many2one) : NEW relation: account.reconcile.model -account / account.reconcile.model.line / sequence (integer) : NEW required, req_default: function, hasdefault +account / account.reconcile.model.line / sequence (integer) : NEW required, hasdefault: default account / account.reconcile.model.line / tax_ids (many2many) : NEW relation: account.tax account / account.reconcile.model.line.template / account_id (many2one) : NEW relation: account.account.template account / account.reconcile.model.line.template / amount_string (char) : NEW -account / account.reconcile.model.line.template / amount_type (selection) : NEW required, selection_keys: ['fixed', 'percentage', 'regex'], req_default: function, hasdefault +account / account.reconcile.model.line.template / amount_type (selection) : NEW required, selection_keys: ['fixed', 'percentage', 'regex'], hasdefault: default account / account.reconcile.model.line.template / force_tax_included (boolean) : NEW account / account.reconcile.model.line.template / label (char) : NEW account / account.reconcile.model.line.template / model_id (many2one) : NEW relation: account.reconcile.model.template -account / account.reconcile.model.line.template / sequence (integer) : NEW required, req_default: function, hasdefault +account / account.reconcile.model.line.template / sequence (integer) : NEW required, hasdefault: default account / account.reconcile.model.line.template / tax_ids (many2many) : NEW relation: account.tax.template account / account.reconcile.model.partner.mapping / model_id (many2one) : NEW relation: account.reconcile.model, required account / account.reconcile.model.partner.mapping / narration_regex (char) : NEW account / account.reconcile.model.partner.mapping / partner_id (many2one) : NEW relation: res.partner, required account / account.reconcile.model.partner.mapping / payment_ref_regex (char) : NEW account / account.reconcile.model.template / account_id (many2one) : DEL relation: account.account.template -account / account.reconcile.model.template / amount (float) : DEL required, req_default: function +account / account.reconcile.model.template / amount (float) : DEL required account / account.reconcile.model.template / amount_from_label_regex (char): DEL -account / account.reconcile.model.template / amount_type (selection) : DEL required, selection_keys: ['fixed', 'percentage', 'regex'], req_default: function +account / account.reconcile.model.template / amount_type (selection) : DEL required, selection_keys: ['fixed', 'percentage', 'regex'] account / account.reconcile.model.template / force_second_tax_included (boolean): DEL account / account.reconcile.model.template / force_tax_included (boolean) : DEL account / account.reconcile.model.template / has_second_line (boolean) : DEL account / account.reconcile.model.template / label (char) : DEL account / account.reconcile.model.template / line_ids (one2many) : NEW relation: account.reconcile.model.line.template -account / account.reconcile.model.template / match_text_location_label (boolean): NEW hasdefault -account / account.reconcile.model.template / match_text_location_note (boolean): NEW hasdefault -account / account.reconcile.model.template / match_text_location_reference (boolean): NEW hasdefault +account / account.reconcile.model.template / match_text_location_label (boolean): NEW hasdefault: default +account / account.reconcile.model.template / match_text_location_note (boolean): NEW hasdefault: default +account / account.reconcile.model.template / match_text_location_reference (boolean): NEW hasdefault: default account / account.reconcile.model.template / matching_order (selection) : NEW selection_keys: ['new_first', 'old_first'] account / account.reconcile.model.template / second_account_id (many2one) : DEL relation: account.account.template -account / account.reconcile.model.template / second_amount (float) : DEL required, req_default: function +account / account.reconcile.model.template / second_amount (float) : DEL required account / account.reconcile.model.template / second_amount_from_label_regex (char): DEL -account / account.reconcile.model.template / second_amount_type (selection): DEL required, selection_keys: ['fixed', 'percentage', 'regex'], req_default: function +account / account.reconcile.model.template / second_amount_type (selection): DEL required, selection_keys: ['fixed', 'percentage', 'regex'] account / account.reconcile.model.template / second_label (char) : DEL account / account.reconcile.model.template / second_tax_ids (many2many) : DEL relation: account.tax.template account / account.reconcile.model.template / tax_ids (many2many) : DEL relation: account.tax.template @@ -238,24 +227,25 @@ account / account.tax / tax_scope (selection) : NEW se account / account.tax.repartition.line / company_id (many2one) : now a function account / account.tax.repartition.line / use_in_tax_closing (boolean) : NEW account / account.tax.repartition.line.template / use_in_tax_closing (boolean) : NEW -account / account.tax.report / country_id (many2one) : NEW relation: res.country, required, req_default: function, hasdefault +account / account.tax.report / country_id (many2one) : NEW relation: res.country, required, hasdefault: default account / account.tax.report / line_ids (one2many) : NEW relation: account.tax.report.line account / account.tax.report / name (char) : NEW required account / account.tax.report / root_line_ids (one2many) : NEW relation: account.tax.report.line -account / account.tax.report.line / country_id (many2one) : DEL relation: res.country, required, req_default: function +account / account.tax.report.line / _order : _order is now 'sequence, id' ('sequence') +account / account.tax.report.line / country_id (many2one) : DEL relation: res.country, required account / account.tax.report.line / report_id (many2one) : NEW relation: account.tax.report, required account / account.tax.template / cash_basis_base_account_id (many2one): DEL relation: account.account.template account / account.tax.template / tax_scope (selection) : NEW selection_keys: ['consu', 'service'] account / res.company / account_bank_reconciliation_start (date): DEL account / res.company / account_cash_basis_base_account_id (many2one): NEW relation: account.account account / res.company / account_journal_suspense_account_id (many2one): NEW relation: account.account -account / res.company / account_onboarding_create_invoice_state (selection): NEW selection_keys: ['done', 'just_done', 'not_done'], hasdefault +account / res.company / account_onboarding_create_invoice_state (selection): NEW selection_keys: ['done', 'just_done', 'not_done'], hasdefault: default account / res.company / account_onboarding_sample_invoice_state (selection): DEL selection_keys: ['done', 'just_done', 'not_done'] account / res.company / account_opening_date (date) : is now stored account / res.company / account_opening_date (date) : not related anymore -account / res.company / account_opening_date (date) : now required, req_default: function -account / res.company / account_setup_bill_state (selection): NEW selection_keys: ['done', 'just_done', 'not_done'], hasdefault -account / res.company / account_tax_fiscal_country_id (many2one): NEW relation: res.country, isfunction: function, stored +account / res.company / account_opening_date (date) : now required +account / res.company / account_setup_bill_state (selection): NEW selection_keys: ['done', 'just_done', 'not_done'], hasdefault: default +account / res.company / account_tax_fiscal_country_id (many2one): NEW relation: res.country, hasdefault: compute account / res.company / accrual_default_journal_id (many2one): DEL relation: account.journal account / res.company / automatic_entry_default_journal_id (many2one): NEW relation: account.journal account / res.company / expense_currency_exchange_account_id (many2one): is now stored diff --git a/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis_work.txt index ad44c505172b..76450dc016e6 100644 --- a/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/account/14.0.1.1/upgrade_analysis_work.txt @@ -54,19 +54,21 @@ account / account.bank.statement / state (selection) : select account / account.bank.statement / balance_end_real (float) : now a function account / account.bank.statement / balance_start (float) : now a function +# NOTHING TO DO: Fields created and adapted for better usability. Now start balance is computed using the end balance from the previous statement. + account / account.bank.statement / is_valid_balance_start (boolean): NEW isfunction: function, stored account / account.bank.statement / previous_statement_id (many2one): NEW relation: account.bank.statement, isfunction: function, stored -# NOTHING TO DO: Fields created and adapted for better usability. Now start balance is computed using the end balance from the previous statement. +# DONE: pre-migrate: Add fields and compute account / account.bank.statement / sequence_number (integer) : NEW isfunction: function, stored account / account.bank.statement / sequence_prefix (char) : NEW isfunction: function, stored -# NOTHING TO DO: fields that store the sequence name splitted in prefix and number for fixing ordering bugs. +# DONE: pre-migration: Fill data. fields that store the sequence name splitted in prefix and number for fixing ordering bugs. account / account.bank.statement.line / _inherits : NEW _inherits: {'account.move': 'move_id'} account / account.bank.statement.line / move_id (many2one) : NEW relation: account.move, required account / account.move / statement_line_id (many2one) : NEW relation: account.bank.statement.line -DONE: # pre-migration: created move_id column and assigned account.move ids when -DONE: # post-migration: filled move_id where no move_name is is assigned to the bank statement line +# DONE: pre-migration: created move_id column and assigned account.move ids when +# DONE: post-migration: filled move_id where no move_name is is assigned to the bank statement line account / account.bank.statement.line / account_id (many2one) : DEL relation: account.account account / account.bank.statement.line / journal_entry_ids (one2many) : DEL relation: account.move.line @@ -79,14 +81,16 @@ account / account.bank.statement.line / bank_account_id (many2one) : DEL # DONE: pre/post: filled partner_bank_id of linked account moves account / account.bank.statement.line / amount_residual (float) : NEW isfunction: function, stored -# NOTHING TO DO: filled by Odoo. +# DONE: pre-migration: Create field +# DONE: post-migration: Fill field account / account.bank.statement.line / foreign_currency_id (many2one): NEW relation: res.currency # DONE: pre-migration: This field is the "currency_id" field from v13. It has been renamed because now, "currency_id" in v14 stores # the "journal_currency_id" values from v13. account / account.bank.statement.line / is_reconciled (boolean) : NEW isfunction: function, stored -# NOTHING TO DO: new feature. Technical field to indicate if statement line is already reconciled for display purposes. +# DONE: pre-migration: Create field +# DONE: post-migration: Fill field account / account.bank.statement.line / company_id (many2one) : not stored anymore account / account.bank.statement.line / date (date) : not stored anymore @@ -109,7 +113,8 @@ account / account.bank.statement.line / payment_ref (char) : NEW account / account.cash.rounding / account_id (many2one) : DEL relation: account.account account / account.cash.rounding / profit_account_id (many2one) : NEW relation: account.account, hasdefault account / account.cash.rounding / loss_account_id (many2one) : previously in module pos_cash_rounding -# DONE: pre_migration: "profit_account_id" is a rename of the "account_id" field. +# DONE: pre-migration: "profit_account_id" is a rename of the "account_id" field. +# DONE: post-migration: transform both fields to company-dependent (filling ir_property) account / account.chart.template / account_journal_suspense_account_id (many2one): NEW relation: account.account.template # NOTHING TO DO: new features (filled in data on some localization modules) @@ -133,10 +138,10 @@ account / account.group / code_prefix (char) : DEL account / account.group / code_prefix_end (char) : NEW account / account.group / code_prefix_start (char) : NEW # DONE: pre-migration: renamed code_prefix to code_prefix_start -# post-migration: assigned same start values to end field +# DONE: post-migration: assigned same start values to end field account / account.group / company_id (many2one) : NEW relation: res.company, required, req_default: function, hasdefault -# DONE: post-migration: Unfold manual groups per company + proper company assignation +# DONE: end-migration: Unfold manual groups per company + proper company assignation account / account.group.template / chart_template_id (many2one) : NEW relation: account.chart.template, required account / account.group.template / code_prefix_end (char) : NEW @@ -207,7 +212,7 @@ account / account.move / qr_code_method (selection) : NEW se account / account.move / sequence_number (integer) : NEW isfunction: function, stored account / account.move / sequence_prefix (char) : NEW isfunction: function, stored -# NOTHING TO DO: sequence.mixin model fields, filled by Odoo. +# DONE: pre-migration: Fill data account / account.move.line / account_internal_type (selection): not stored anymore # NOTHING TO DO: not stored to improve performance @@ -220,7 +225,7 @@ account / account.move.line / currency_id (many2one) : now re # DONE: filled with company currency if empty account / account.move.line / matching_number (char) : NEW isfunction: function, stored -# NOTHING TO DO +# DONE: pre-migration: Fill data account / account.move.line / payment_id (many2one) : now related account / account.move.line / statement_line_id (many2one) : now related @@ -237,26 +242,31 @@ account / account.partial.reconcile / debit_amount_currency (float) : NEW account / account.partial.reconcile / credit_currency_id (many2one) : NEW relation: res.currency, isfunction: function, stored account / account.partial.reconcile / debit_currency_id (many2one) : NEW relation: res.currency, isfunction: function, stored +# DONE: pre-migration: field created and filled + account / account.partial.reconcile / currency_id (many2one) : DEL relation: res.currency # NOTHING TO DO: filled by Odoo. account / account.payment / _inherits : NEW _inherits: {'account.move': 'move_id'} account / account.payment / move_id (many2one) : NEW relation: account.move, required account / account.move / payment_id (many2one) : NEW relation: account.payment -DONE: # pre-migration: created move_id column and assigned account.move ids when move_name exists -DONE: # post-migration: filled move_id where no move_name or payment_reference is assigned to the payment. +# DONE: pre-migration: created move_id column and assigned account.move ids when move_name exists +# DONE: post-migration: filled move_id where no move_name or payment_reference is assigned to the payment. account / account.payment / _order : _order is now 'date desc, name desc' ('payment_date desc, name desc') # NOTHING TO DO account / account.payment / currency_id (many2one) : now a function -account / account.payment / destination_account_id (many2one): is now stored # NOTHING TO DO +account / account.payment / destination_account_id (many2one): is now stored account / account.payment / is_internal_transfer (boolean): NEW isfunction: function, stored +# DONE: pre-migration: Fill data + account / account.payment / is_matched (boolean) : NEW isfunction: function, stored account / account.payment / is_reconciled (boolean) : NEW isfunction: function, stored -# NOTHING TO DO: new features +# DONE: pre-migration: Create columns +# DONE: post-migration: Fill data account / account.payment / journal_id (many2one) : not stored anymore account / account.payment / journal_id (many2one) : now related @@ -272,18 +282,23 @@ account / account.payment / invoice_ids (many2many) : DEL re account / account.payment / communication (char) : DEL # DONE: post-migration: added communication content in the narration field of its account move +# DONE: post-migration: filled the ref (memo) of its account move with the communication account / account.payment / move_line_ids (one2many) : DEL relation: account.move.line account / account.payment / move_name (char) : DEL # NOTHING TO DO: now the relation is made with the new field move_id account / account.payment / partner_bank_account_id (many2one): DEL relation: res.partner.bank +# NOTHING TO DO + account / account.payment / partner_bank_id (many2one) : NEW relation: res.partner.bank, isfunction: function, stored +# DONE: pre-migration: Filled by SQL + account / account.payment / partner_id (many2one) : now a function -# NOTHING TO DO: automated field filling +# NOTHING TO DO account / account.payment / partner_type (selection) : now required, req_default: function -# DONE: pre-migration: ensuring empty records are filled with default value ('customer') +# DONE: pre-migration: ensuring empty records are filled: 'employee' (viin_hr_account), from the counterpart account (to_account_counterpart), else 'supplier' for outbound payments and 'customer' for the others account / account.payment / payment_date (date) : DEL required, req_default: function # NOTHING TO DO: not used anymore in _order @@ -295,10 +310,11 @@ account / account.payment / payment_method_id (many2one) : now a # NOTHING TO DO account / account.payment / payment_type (selection) : selection_keys is now '['inbound', 'outbound']' ('['inbound', 'outbound', 'transfer']') -# DONE post-migration: mapped payment_type from 'transfer' to 'inbound'/'outbound' for account payment tranfer +# DONE: post-migration: mapped payment_type from 'transfer' to 'inbound'/'outbound' for account payment tranfer # created new counterpart payment with account payment transfer # (see https://github.com/odoo/odoo/commit/a30cfee04eaf48b581d2e327c1b56e115a1c751f) -# DONE pre-migration: filled partner_id with journal_id.company_id.partner_id to detect transfers +# DONE: pre-migration: filled partner_id with journal_id.company_id.partner_id to detect transfers +# DONE: pre-migration: linked the second journal entry of a transfer to its payment (account_move.payment_id), needed for creating the counterpart payment account / account.payment / writeoff_account_id (many2one): DEL relation: account.account account / account.payment / writeoff_label (char) : DEL @@ -445,7 +461,7 @@ account / res.company / expense_currency_exchange_account_id ( account / res.company / expense_currency_exchange_account_id (many2one): not related anymore account / res.company / income_currency_exchange_account_id (many2one): is now stored account / res.company / income_currency_exchange_account_id (many2one): not related anymore -# NOTHING TO DO: adaptation of account.journal change, where debit and credit account fields are now a unique field. +# DONE: post-migration: filled from the default debit/credit accounts that the currency exchange journal had in v13 account / res.partner / currency_id (many2one) : module is now 'test_access_rights' ('account') account / res.users / currency_id (many2one) : module is now 'test_access_rights' ('account') diff --git a/openupgrade_scripts/scripts/account_check_printing/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/account_check_printing/14.0.1.0/upgrade_analysis.txt index dae039dc5173..ac79acac5fed 100644 --- a/openupgrade_scripts/scripts/account_check_printing/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/account_check_printing/14.0.1.0/upgrade_analysis.txt @@ -4,7 +4,7 @@ account_check_printing / account.move / preferred_payment_method_id account_check_printing / account.payment / check_amount_in_words (char) : now a function account_check_printing / account.payment / check_number (char) : now a function account_check_printing / res.company / account_check_printing_layout (selection): selection_keys is now '['disabled']' ('['action_print_check_bottom', 'action_print_check_middle', 'action_print_check_top', 'disabled']') -account_check_printing / res.partner / property_payment_method_id (many2one): NEW relation: account.payment.method, hasdefault +account_check_printing / res.partner / property_payment_method_id (many2one): NEW relation: account.payment.method ---XML records in module 'account_check_printing'--- NEW ir.model.access: account_check_printing.access_print_prenumbered_checks NEW ir.ui.view: account_check_printing.view_account_invoice_filter diff --git a/openupgrade_scripts/scripts/account_edi/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/account_edi/14.0.1.0/upgrade_analysis.txt index f10f7b808d85..bbeae8fd91ba 100644 --- a/openupgrade_scripts/scripts/account_edi/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/account_edi/14.0.1.0/upgrade_analysis.txt @@ -9,13 +9,13 @@ account_edi / account.edi.document / move_id (many2one) : NEW re account_edi / account.edi.document / state (selection) : NEW selection_keys: ['cancelled', 'sent', 'to_cancel', 'to_send'] account_edi / account.edi.format / code (char) : NEW required account_edi / account.edi.format / name (char) : NEW -account_edi / account.journal / edi_format_ids (many2many) : NEW relation: account.edi.format, isfunction: function, stored +account_edi / account.journal / edi_format_ids (many2many) : NEW relation: account.edi.format, hasdefault: compute account_edi / account.move / edi_document_ids (one2many) : NEW relation: account.edi.document account_edi / account.move / edi_state (selection) : NEW selection_keys: ['cancelled', 'sent', 'to_cancel', 'to_send'], isfunction: function, stored ---XML records in module 'account_edi'--- NEW ir.actions.act_window: account_edi.action_open_edi_documents NEW ir.actions.act_window: account_edi.action_open_payment_edi_documents -NEW ir.cron: account_edi.ir_cron_edi_network +NEW ir.cron: account_edi.ir_cron_edi_network (noupdate) NEW ir.model.access: account_edi.access_account_edi_document_group_invoice NEW ir.model.access: account_edi.access_account_edi_document_readonly NEW ir.model.access: account_edi.access_account_edi_format_group_invoice diff --git a/openupgrade_scripts/scripts/account_edi_proxy_client/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/account_edi_proxy_client/14.0.1.0/upgrade_analysis.txt index a20d348ca57d..40a25a69ce0a 100644 --- a/openupgrade_scripts/scripts/account_edi_proxy_client/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/account_edi_proxy_client/14.0.1.0/upgrade_analysis.txt @@ -1,8 +1,8 @@ ---Models in module 'account_edi_proxy_client'--- new model account_edi_proxy_client.user ---Fields in module 'account_edi_proxy_client'--- -account_edi_proxy_client / account_edi_proxy_client.user / active (boolean) : NEW hasdefault -account_edi_proxy_client / account_edi_proxy_client.user / company_id (many2one) : NEW relation: res.company, required, req_default: function, hasdefault +account_edi_proxy_client / account_edi_proxy_client.user / active (boolean) : NEW hasdefault: default +account_edi_proxy_client / account_edi_proxy_client.user / company_id (many2one) : NEW relation: res.company, required, hasdefault: default account_edi_proxy_client / account_edi_proxy_client.user / edi_format_id (many2one) : NEW relation: account.edi.format, required account_edi_proxy_client / account_edi_proxy_client.user / edi_identification (char) : NEW required account_edi_proxy_client / account_edi_proxy_client.user / id_client (char) : NEW required @@ -10,6 +10,7 @@ account_edi_proxy_client / account_edi_proxy_client.user / private_key (binary) account_edi_proxy_client / account_edi_proxy_client.user / refresh_token (char) : NEW account_edi_proxy_client / res.company / account_edi_proxy_client_ids (one2many): NEW relation: account_edi_proxy_client.user ---XML records in module 'account_edi_proxy_client'--- +NEW ir.model.access: account_edi_proxy_client.access_account_edi_proxy_manager NEW ir.model.access: account_edi_proxy_client.access_account_edi_proxy_user NEW ir.model.constraint: account_edi_proxy_client.constraint_account_edi_proxy_client_user_unique_edi_identification_per_format NEW ir.model.constraint: account_edi_proxy_client.constraint_account_edi_proxy_client_user_unique_id_client diff --git a/openupgrade_scripts/scripts/account_edi_ubl_cii/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/account_edi_ubl_cii/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..b4c3e137e1b0 --- /dev/null +++ b/openupgrade_scripts/scripts/account_edi_ubl_cii/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,29 @@ +---Models in module 'account_edi_ubl_cii'--- +new model account.edi.common [abstract] +new model account.edi.xml.cii [abstract] +new model account.edi.xml.ubl_20 [abstract] +new model account.edi.xml.ubl_21 [abstract] +new model account.edi.xml.ubl_bis3 [abstract] +new model account.edi.xml.ubl_de [abstract] +new model account.edi.xml.ubl_efff [abstract] +---Fields in module 'account_edi_ubl_cii'--- +---XML records in module 'account_edi_ubl_cii'--- +NEW account.edi.format: account_edi_ubl_cii.ubl_bis3 +NEW account.edi.format: account_edi_ubl_cii.ubl_de +NEW ir.ui.view: account_edi_ubl_cii.account_invoice_address_facturx_export_22 +NEW ir.ui.view: account_edi_ubl_cii.account_invoice_facturx_export_22 +NEW ir.ui.view: account_edi_ubl_cii.account_invoice_line_facturx_export_22 +NEW ir.ui.view: account_edi_ubl_cii.account_invoice_partner_facturx_export_22 +NEW ir.ui.view: account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_AddressType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_AllowanceChargeType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_CreditNote +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_Invoice +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_InvoiceLineType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_InvoiceType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_PartyType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_PaymentMeansType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_TaxCategoryType +NEW ir.ui.view: account_edi_ubl_cii.ubl_20_TaxTotalType +NEW ir.ui.view: account_edi_ubl_cii.ubl_21_InvoiceLineType +NEW ir.ui.view: account_edi_ubl_cii.ubl_21_InvoiceType diff --git a/openupgrade_scripts/scripts/adyen_platforms/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/adyen_platforms/14.0.1.0/upgrade_analysis.txt index 215e9d4b5fa3..58f345bc0990 100644 --- a/openupgrade_scripts/scripts/adyen_platforms/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/adyen_platforms/14.0.1.0/upgrade_analysis.txt @@ -7,15 +7,15 @@ new model adyen.payout new model adyen.shareholder new model adyen.transaction ---Fields in module 'adyen_platforms'--- -adyen_platforms / adyen.account / account_holder_code (char) : NEW hasdefault +adyen_platforms / adyen.account / account_holder_code (char) : NEW hasdefault: default adyen_platforms / adyen.account / adyen_uuid (char) : NEW adyen_platforms / adyen.account / bank_account_ids (one2many) : NEW relation: adyen.bank.account adyen_platforms / adyen.account / city (char) : NEW required -adyen_platforms / adyen.account / company_id (many2one) : NEW relation: res.company, hasdefault +adyen_platforms / adyen.account / company_id (many2one) : NEW relation: res.company, hasdefault: default adyen_platforms / adyen.account / country_id (many2one) : NEW relation: res.country, required adyen_platforms / adyen.account / date_of_birth (date) : NEW adyen_platforms / adyen.account / document_number (char) : NEW -adyen_platforms / adyen.account / document_type (selection) : NEW selection_keys: ['DRIVINGLICENSE', 'ID', 'PASSPORT', 'VISA'], hasdefault +adyen_platforms / adyen.account / document_type (selection) : NEW selection_keys: ['DRIVINGLICENSE', 'ID', 'PASSPORT', 'VISA'], hasdefault: default adyen_platforms / adyen.account / doing_business_as (char) : NEW adyen_platforms / adyen.account / email (char) : NEW required adyen_platforms / adyen.account / first_name (char) : NEW @@ -26,7 +26,7 @@ adyen_platforms / adyen.account / id_front (binary) : NEW adyen_platforms / adyen.account / id_front_filename (char) : NEW adyen_platforms / adyen.account / id_type (selection) : NEW selection_keys: ['DRIVING_LICENSE', 'ID_CARD', 'PASSPORT'] adyen_platforms / adyen.account / is_business (boolean) : NEW required -adyen_platforms / adyen.account / kyc_status (selection) : NEW required, selection_keys: ['awaiting_data', 'failed', 'passed', 'pending'], req_default: function, hasdefault +adyen_platforms / adyen.account / kyc_status (selection) : NEW required, selection_keys: ['awaiting_data', 'failed', 'passed', 'pending'], hasdefault: default adyen_platforms / adyen.account / kyc_status_message (char) : NEW adyen_platforms / adyen.account / last_name (char) : NEW adyen_platforms / adyen.account / legal_business_name (char) : NEW @@ -45,7 +45,7 @@ adyen_platforms / adyen.account / zip (char) : NEW adyen_platforms / adyen.bank.account / account_number (char) : NEW adyen_platforms / adyen.bank.account / account_type (selection) : NEW selection_keys: ['checking', 'savings'] adyen_platforms / adyen.bank.account / adyen_account_id (many2one) : NEW relation: adyen.account -adyen_platforms / adyen.bank.account / bank_account_reference (char) : NEW hasdefault +adyen_platforms / adyen.bank.account / bank_account_reference (char) : NEW hasdefault: default adyen_platforms / adyen.bank.account / bank_account_uuid (char) : NEW adyen_platforms / adyen.bank.account / bank_code (char) : NEW adyen_platforms / adyen.bank.account / bank_statement (binary) : NEW attachment: True @@ -54,7 +54,7 @@ adyen_platforms / adyen.bank.account / branch_code (char) : NEW adyen_platforms / adyen.bank.account / country_id (many2one) : NEW relation: res.country, required adyen_platforms / adyen.bank.account / currency_id (many2one) : NEW relation: res.currency, required adyen_platforms / adyen.bank.account / iban (char) : NEW -adyen_platforms / adyen.bank.account / kyc_status (selection) : NEW required, selection_keys: ['awaiting_data', 'failed', 'passed', 'pending'], req_default: function, hasdefault +adyen_platforms / adyen.bank.account / kyc_status (selection) : NEW required, selection_keys: ['awaiting_data', 'failed', 'passed', 'pending'], hasdefault: default adyen_platforms / adyen.bank.account / kyc_status_message (char) : NEW adyen_platforms / adyen.bank.account / owner_city (char) : NEW adyen_platforms / adyen.bank.account / owner_country_id (many2one) : NEW relation: res.country @@ -66,9 +66,9 @@ adyen_platforms / adyen.bank.account / owner_zip (char) : NEW adyen_platforms / adyen.payout / adyen_account_id (many2one) : NEW relation: adyen.account adyen_platforms / adyen.payout / adyen_bank_account_id (many2one): NEW relation: adyen.bank.account adyen_platforms / adyen.payout / code (char) : NEW -adyen_platforms / adyen.payout / name (char) : NEW required, req_default: function, hasdefault +adyen_platforms / adyen.payout / name (char) : NEW required, hasdefault: default adyen_platforms / adyen.payout / next_scheduled_payout (date) : NEW isfunction: function, stored -adyen_platforms / adyen.payout / payout_schedule (selection) : NEW required, selection_keys: ['day', 'month', 'week'], req_default: function, hasdefault +adyen_platforms / adyen.payout / payout_schedule (selection) : NEW required, selection_keys: ['day', 'month', 'week'], hasdefault: default adyen_platforms / adyen.payout / transaction_ids (one2many) : NEW relation: adyen.transaction adyen_platforms / adyen.shareholder / adyen_account_id (many2one) : NEW relation: adyen.account adyen_platforms / adyen.shareholder / city (char) : NEW required @@ -82,10 +82,10 @@ adyen_platforms / adyen.shareholder / id_back_filename (char) : NEW adyen_platforms / adyen.shareholder / id_front (binary) : NEW attachment: True adyen_platforms / adyen.shareholder / id_front_filename (char) : NEW adyen_platforms / adyen.shareholder / id_type (selection) : NEW selection_keys: ['DRIVING_LICENSE', 'ID_CARD', 'PASSPORT'] -adyen_platforms / adyen.shareholder / kyc_status (selection) : NEW required, selection_keys: ['awaiting_data', 'failed', 'passed', 'pending'], req_default: function, hasdefault +adyen_platforms / adyen.shareholder / kyc_status (selection) : NEW required, selection_keys: ['awaiting_data', 'failed', 'passed', 'pending'], hasdefault: default adyen_platforms / adyen.shareholder / kyc_status_message (char) : NEW adyen_platforms / adyen.shareholder / last_name (char) : NEW required -adyen_platforms / adyen.shareholder / shareholder_reference (char) : NEW hasdefault +adyen_platforms / adyen.shareholder / shareholder_reference (char) : NEW hasdefault: default adyen_platforms / adyen.shareholder / shareholder_uuid (char) : NEW adyen_platforms / adyen.shareholder / state_id (many2one) : NEW relation: res.country.state adyen_platforms / adyen.shareholder / street (char) : NEW required diff --git a/openupgrade_scripts/scripts/analytic/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/analytic/14.0.1.1/noupdate_changes.xml new file mode 100644 index 000000000000..554ba33ebf2f --- /dev/null +++ b/openupgrade_scripts/scripts/analytic/14.0.1.1/noupdate_changes.xml @@ -0,0 +1,15 @@ + + + + [('company_id', 'in', company_ids + [False])] + + + [('company_id', 'in', company_ids + [False])] + + + [('company_id', 'in', company_ids)] + + + [('company_id', 'in', company_ids + [False])] + + diff --git a/openupgrade_scripts/scripts/analytic/14.0.1.1/post-migration.py b/openupgrade_scripts/scripts/analytic/14.0.1.1/post-migration.py new file mode 100644 index 000000000000..e39aab21b2b9 --- /dev/null +++ b/openupgrade_scripts/scripts/analytic/14.0.1.1/post-migration.py @@ -0,0 +1,6 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env.cr, "analytic", "14.0.1.1/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/auth_ldap/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_ldap/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..ddcf41f376bf --- /dev/null +++ b/openupgrade_scripts/scripts/auth_ldap/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'auth_ldap'--- +---Fields in module 'auth_ldap'--- +---XML records in module 'auth_ldap'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/end-migration.py b/openupgrade_scripts/scripts/base/14.0.1.3/end-migration.py index 6079a21f33f8..3e33c7eb8810 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/end-migration.py +++ b/openupgrade_scripts/scripts/base/14.0.1.3/end-migration.py @@ -3,7 +3,29 @@ from openupgradelib import openupgrade +def uninstall_conflicting_it_edi(cr): + it_edi_conflicting_modules = ("l10n_it_edi", "l10n_it_fatturapa") + if all( + openupgrade.is_module_installed(cr.cr, m) for m in it_edi_conflicting_modules + ): + it_edi_module = cr["ir.module.module"].search( + [ + ("name", "=", "l10n_it_edi"), + ], + limit=1, + ) + it_edi_module.button_uninstall() + + @openupgrade.migrate() def migrate(env, version): - """ Call disable_invalid_filters in every edition of openupgrade """ + """Call disable_invalid_filters in every edition of openupgrade""" openupgrade.disable_invalid_filters(env) + # web_diagram has been remove in V14 + # we merge into web, if no diagram are present, to avoid to + # have to uninstall the module manually + if not env["ir.ui.view"].search([("type", "=", "diagram")]): + openupgrade.update_module_names( + env.cr, [("web_diagram", "web")], merge_modules=True + ) + uninstall_conflicting_it_edi(env) diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/group_allow_export_noupdate_changes.xml b/openupgrade_scripts/scripts/base/14.0.1.3/group_allow_export_noupdate_changes.xml new file mode 100644 index 000000000000..5fb4d9357c17 --- /dev/null +++ b/openupgrade_scripts/scripts/base/14.0.1.3/group_allow_export_noupdate_changes.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/noupdate_changes.xml b/openupgrade_scripts/scripts/base/14.0.1.3/noupdate_changes.xml index 598b059c8da4..c4bc9e924d04 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/base/14.0.1.3/noupdate_changes.xml @@ -22,8 +22,15 @@ 1 - - + + + + 0 @@ -63,9 +70,16 @@ 30 + + [('company_id', 'in', company_ids + [False])] + + [('company_id', 'in', company_ids + [False])] + + ['|', ('partner_share', '=', False), ('company_id', 'in', company_ids + [False])] + diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/post-migrate.py b/openupgrade_scripts/scripts/base/14.0.1.3/post-migrate.py index 30bc6670d6c8..a1369b06e473 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/post-migrate.py +++ b/openupgrade_scripts/scripts/base/14.0.1.3/post-migrate.py @@ -1,8 +1,13 @@ # Copyright 2020 Odoo Community Association (OCA) # Copyright 2020 Opener B.V. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import base64 +import logging + from openupgradelib import openupgrade +_logger = logging.getLogger(__name__) + def fix_module_category_parent_id(env): # due to renames, we need to correct the parent_id @@ -44,8 +49,104 @@ def fix_module_category_parent_id(env): ) +def assign_module_category_parent(env): + """As these records are created as noupdate=1, we need to manually assign the + parent categories that are new in v14. + """ + category_mapping = [ + ("module_category_sales_sales", "module_category_sales"), + ("module_category_sales_point_of_sale", "module_category_sales"), + ("module_category_services_project", "module_category_services"), + ("module_category_services_timesheets", "module_category_services"), + ("module_category_accounting_accounting", "module_category_accounting"), + ("module_category_inventory_purchase", "module_category_inventory"), + ("module_category_inventory_inventory", "module_category_inventory"), + ( + "module_category_manufacturing_manufacturing", + "module_category_manufacturing", + ), + ("module_category_manufacturing_maintenance", "module_category_manufacturing"), + ("module_category_website_live_chat", "module_category_website"), + ("module_category_website_elearning", "module_category_website"), + ("module_category_website_website", "module_category_website"), + ("module_category_marketing_events", "module_category_marketing"), + ("module_category_marketing_email_marketing", "module_category_marketing"), + ("module_category_marketing_surveys", "module_category_marketing"), + ("module_category_human_resources_fleet", "module_category_human_resources"), + ("module_category_human_resources_lunch", "module_category_human_resources"), + ( + "module_category_human_resources_employees", + "module_category_human_resources", + ), + ( + "module_category_human_resources_contracts", + "module_category_human_resources", + ), + ("module_category_human_resources_time_off", "module_category_human_resources"), + ( + "module_category_human_resources_recruitment", + "module_category_human_resources", + ), + ("module_category_human_resources_expenses", "module_category_human_resources"), + ( + "module_category_human_resources_attendances", + "module_category_human_resources", + ), + ] + for xml_id, parent_xml_id in category_mapping: + record = env.ref("base." + xml_id, False) + if record: + record.parent_id = env.ref("base." + parent_xml_id, False) + + +def users_should_export(env): + # maintain same behavior as previous versions + export_group = env.ref("base.group_allow_export").id + user_group = env.ref("base.group_user").id + openupgrade.logged_query( + env.cr, + """ + INSERT INTO res_groups_users_rel (uid, gid) + SELECT rel.uid, %s + FROM res_groups_users_rel rel + WHERE rel.gid = %s + ON CONFLICT DO NOTHING + """, + (export_group, user_group), + ) + + +def binary_conversion_for_db_attachments(env): + attachments = env["ir.attachment"].search( + [ + ("db_datas", "!=", False), + ] + ) + for attachment in attachments: + try: + # Decoding base64 encoded data to binary + binary_data = base64.b64decode(attachment.db_datas) + attachment.write({"db_datas": binary_data}) + except Exception as e: + _logger.error( + "Error while migrating attachment id %s: %s", + attachment.id, + repr(e), + ) + + @openupgrade.migrate() def migrate(env, version): fix_module_category_parent_id(env) + assign_module_category_parent(env) + users_should_export(env) + binary_conversion_for_db_attachments(env) # Load noupdate changes openupgrade.load_data(env.cr, "base", "14.0.1.3/noupdate_changes.xml") + # By default Odoo grants new users export access. If we had web_disable_export_group + # installed is very likely that this isn't the desired behavior and that we want + # to keep the access to that feature restricted by default. + if not openupgrade.is_module_installed(env.cr, "web_disable_export_group"): + openupgrade.load_data( + env.cr, "base", "14.0.1.3/group_allow_export_noupdate_changes.xml" + ) diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/pre-migrate.py b/openupgrade_scripts/scripts/base/14.0.1.3/pre-migrate.py index 51db8e4d2588..5da1cf7430b0 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/pre-migrate.py +++ b/openupgrade_scripts/scripts/base/14.0.1.3/pre-migrate.py @@ -10,6 +10,7 @@ _logger = logging.getLogger(__name__) try: + # pylint: disable=odoo-addons-relative-import from odoo.addons.openupgrade_scripts.apriori import merged_modules, renamed_modules except ImportError: renamed_modules = {} @@ -87,6 +88,20 @@ def deduplicate_ir_properties(cr): ) +def uninstall_conflicting_it_edi(cr): + it_edi_conflicting_modules = ("l10n_it_edi", "l10n_it_fatturapa") + if all(openupgrade.is_module_installed(cr, m) for m in it_edi_conflicting_modules): + # Mark as 'to_remove' to avoid raising a conflict; it will be installed anyway, + # but we will uninstall it for good in end-migration. + openupgrade.logged_query( + cr, + """ + UPDATE ir_module_module + SET state='to remove' + WHERE name = 'l10n_it_edi'""", + ) + + def merge_web_diagram_if_unused(cr): """web_diagram is gone in 14.0 and nothing replaces it: merge it into web as long as no view uses the diagram type any more, the module has to be dealt with by hand @@ -101,6 +116,64 @@ def merge_web_diagram_if_unused(cr): ) +_TECHNICAL_MODELS = ( + "ir.actions.act_url", + "ir.actions.act_window", + "ir.actions.client", + "ir.actions.report", + "ir.actions.server", + "ir.actions.todo", + "ir.cron", + "ir.filters", + "ir.model.access", + "ir.property", + "ir.rule", + "ir.ui.menu", + "ir.ui.view", + "mail.template", + "website.menu", +) + + +def release_records_of_lost_modules(cr): + """A module that is removed without a successor is merged into the module + it extended (apriori.lost_modules), and the update of that module deletes + the records it no longer finds in the data files, except the noupdate + ones: release the technical records, so that they are deleted too, and + detach the xml ids of the records of models that go with the module (the + rows stay). Business records stay. + """ + from odoo.addons.openupgrade_scripts import apriori as _apriori + + lost_modules = tuple(getattr(_apriori, "lost_modules", [])) + if not lost_modules: + return + openupgrade.logged_query( + cr, + """ + UPDATE ir_model_data SET noupdate = FALSE + WHERE noupdate AND module IN %s AND model IN %s + """, + (lost_modules, _TECHNICAL_MODELS), + ) + openupgrade.logged_query( + cr, + """ + DELETE FROM ir_model_data d + WHERE d.module IN %s AND d.model IN ( + SELECT m.model + FROM ir_model m + JOIN ir_model_data md ON md.model = 'ir.model' + AND md.res_id = m.id AND md.module IN %s + WHERE NOT EXISTS ( + SELECT 1 FROM ir_model_data o + WHERE o.model = 'ir.model' AND o.res_id = m.id + AND o.module NOT IN %s)) + """, + (lost_modules,) * 3, + ) + + @openupgrade.migrate(use_env=False) def migrate(cr, version): """ @@ -137,8 +210,23 @@ def migrate(cr, version): """ ) # Perform module renames and merges - openupgrade.update_module_names(cr, renamed_modules.items()) - openupgrade.update_module_names(cr, merged_modules.items(), merge_modules=True) + + # edi_oca has been merged into oca/edi 12.0, so move the rename of edi + # to merged in case it already exists at this point (we still need the + # rename when migrating just a v13 db + cr.execute("SELECT 1 FROM ir_module_module WHERE name='edi_oca'") + if cr.fetchall(): + merged_modules["edi"] = renamed_modules.pop("edi") + + release_records_of_lost_modules(cr) + openupgrade.update_module_names( + cr, renamed_modules.items(), environment_namespec=True + ) + openupgrade.update_module_names( + cr, merged_modules.items(), merge_modules=True, environment_namespec=True + ) + openupgrade.clean_transient_models(cr) + uninstall_conflicting_it_edi(cr) merge_web_diagram_if_unused(cr) # Migrate partners from Fil to Tagalog # See https://github.com/odoo/odoo/commit/194ed76c5cc9 @@ -146,3 +234,25 @@ def migrate(cr, version): cr, "UPDATE res_partner SET lang = 'tl_PH' WHERE lang = 'fil_PH'" ) deduplicate_ir_properties(cr) + # Now Odoo supports disabling data exports, which is the main feature that + # the module web_disable_export_group provided. Although the module isn't completly + # merged into core as it allows to differentiate which type of export users can use. + # This might be unnecessary for some module users that would drop the module while + # others might want to keep it. To make the transition transparent for both cases, + # we put this migration script here. + cr.execute( + """ + SELECT id FROM ir_model_data + WHERE module='web_disable_export_group' AND name='group_export_data' + """ + ) + if cr.fetchone(): + openupgrade.rename_xmlids( + cr, + [ + ( + "web_disable_export_group.group_export_data", + "base.group_allow_export", + ) + ], + ) diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis.txt b/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis.txt index 54640ea84dfd..95fbcbfb0fa6 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis.txt @@ -6,26 +6,25 @@ new model res.users.apikeys.description [transient] new model res.users.apikeys.show [abstract] new model res.users.identitycheck [transient] ---Fields in module 'base'--- -base / ir.model / order (char) : NEW required, req_default: function, hasdefault +base / ir.model / order (char) : NEW required, hasdefault: default base / ir.model.data / date_init (datetime) : DEL base / ir.model.data / date_update (datetime) : DEL base / ir.model.data / res_id (integer) : relation is now 'model' ('False') [nothing to do] base / ir.model.data / res_id (integer) : type is now 'many2one_reference' ('integer') -base / ir.model.fields / copied (boolean) : now a function base / ir.model.fields / group_expand (boolean) : NEW base / ir.module.module / _order : _order is now 'application desc,sequence,name' ('sequence,name') base / ir.ui.view / model_ids (one2many) : DEL relation: ir.model.data base / ir.ui.view / type (selection) : selection_keys is now '['calendar', 'form', 'gantt', 'graph', 'kanban', 'pivot', 'qweb', 'search', 'tree']' ('['calendar', 'diagram', 'form', 'gantt', 'graph', 'kanban', 'pivot', 'qweb', 'search', 'tree']') base / report.layout / _order : _order is now 'sequence' ('id') -base / report.layout / sequence (integer) : NEW hasdefault +base / report.layout / sequence (integer) : NEW hasdefault: default base / res.company / account_no (char) : DEL base / res.country / image (binary) : DEL attachment: True -base / res.country / state_required (boolean) : NEW hasdefault -base / res.country / zip_required (boolean) : NEW hasdefault +base / res.country / state_required (boolean) : NEW hasdefault: default +base / res.country / zip_required (boolean) : NEW hasdefault: default base / res.currency.rate / currency_id (many2one) : now required base / res.lang / flag_image (binary) : NEW attachment: True base / res.partner / barcode (char) : previously in module point_of_sale -base / res.partner.bank / active (boolean) : NEW hasdefault +base / res.partner.bank / active (boolean) : NEW hasdefault: default base / res.users / api_key_ids (one2many) : NEW relation: res.users.apikeys base / res.users / barcode (char) : previously in module hr ---XML records in module 'base'--- diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis_work.txt index 834debe3d12e..1f685b5df794 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_analysis_work.txt @@ -117,7 +117,9 @@ DEL ir.ui.view: base.view_base_document_layout DEL ir.ui.view: base.view_menu DEL ir.ui.view: base.view_partner_short_form NEW res.country.group: base.sepa_zone (noupdate) -NEW res.groups: base.group_allow_export NEW res.lang: base.lang_en_IN DEL res.lang: base.lang_fil # Done: switch partners to Tagalog + +NEW res.groups: base.group_allow_export +# DONE: post-migration: put all users in this group to maintain previous behavior diff --git a/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_general_log.txt b/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_general_log.txt index 360de72ab4da..e47754157f5b 100644 --- a/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_general_log.txt +++ b/openupgrade_scripts/scripts/base/14.0.1.3/upgrade_general_log.txt @@ -1,12 +1,382 @@ ---Models in module 'general'--- +obsolete model account.accrual.accounting.wizard [module account] +obsolete model account.bank.statement.import [module account_statement_import] +obsolete model account.bank.statement.import.journal.creation [module account_statement_import] +obsolete model account.fiscal.year [module account] +obsolete model account.reconciliation.widget [module account] +obsolete model base.gengo.translations [module base_gengo] +obsolete model crm.lead.tag (renamed to crm.tag) [module crm] +obsolete model crm.partner.binding [module crm] +obsolete model email_template.preview (renamed to mail.template.preview) [module mail] +obsolete model event.answer (renamed to event.question.answer) [module website_event_questions] +obsolete model event.confirm [module event] +obsolete model event.question.report [module website_event_questions] +obsolete model fleet.vehicle.cost [module fleet] +obsolete model fleet.vehicle.log.fuel [module fleet] +obsolete model google.calendar [module google_calendar] +obsolete model hr.expense.sheet.register.payment.wizard [module hr_expense] +obsolete model lunch.order.temp [module lunch] +obsolete model mail.address.mixin [module mail] +obsolete model mail.test [module test_mail] +obsolete model mail.test.full [module test_mail] +obsolete model mass.mail.test [module test_mass_mailing] +obsolete model mass.mail.test.bl [module test_mass_mailing] +obsolete model mrp.abstract.workorder [module mrp] +obsolete model mrp.abstract.workorder.line [module mrp] +obsolete model mrp.product.produce [module mrp] +obsolete model mrp.product.produce.line [module mrp] +obsolete model mrp.routing [module mrp] +obsolete model mrp.workorder.line [module mrp] +obsolete model openupgrade.analysis.wizard (renamed to upgrade.analysis) [module upgrade_analysis] +obsolete model openupgrade.attribute (renamed to upgrade.attribute) [module upgrade_analysis] +obsolete model openupgrade.comparison.config (renamed to upgrade.comparison.config) [module upgrade_analysis] +obsolete model openupgrade.generate.records.wizard (renamed to upgrade.generate.record.wizard) [module upgrade_analysis] +obsolete model openupgrade.install.all.wizard (renamed to upgrade.install.wizard) [module upgrade_analysis] +obsolete model openupgrade.record (renamed to upgrade.record) [module upgrade_analysis] +obsolete model product.price_list [module product] +obsolete model product.style (renamed to product.ribbon) [module website_sale] +obsolete model repair.cancel [module repair] +obsolete model report.account.report_agedpartnerbalance [module account] +obsolete model report.sale_coupon.report_coupon (renamed to report.coupon.report_coupon) [module coupon] +obsolete model sale.coupon (renamed to coupon.coupon) [module coupon] +obsolete model sale.coupon.generate (renamed to coupon.generate.wizard) [module coupon] +obsolete model sale.coupon.program (renamed to coupon.program) [module coupon] +obsolete model sale.coupon.reward (renamed to coupon.reward) [module coupon] +obsolete model sale.coupon.rule (renamed to coupon.rule) [module coupon] +obsolete model stock.change.standard.price [module stock_account] +obsolete model stock.overprocessed.transfer [module stock] +obsolete model stock.picking.responsible [module stock] +obsolete model survey.label (renamed to survey.question.answer) [module survey] +obsolete model survey.user_input_line (renamed to survey.user_input.line) [module survey] +obsolete model test_performance.mail [module test_mail] +new model account.automatic.entry.wizard [module account] +new model account.edi.common [module account_edi_ubl_cii] +new model account.edi.document [module account_edi] +new model account.edi.format [module account_edi] +new model account_edi_proxy_client.user [module account_edi_proxy_client] +new model account.edi.xml.cii [module account_edi_ubl_cii] +new model account.edi.xml.ubl_20 [module account_edi_ubl_cii] +new model account.edi.xml.ubl_21 [module account_edi_ubl_cii] +new model account.edi.xml.ubl_bis3 [module account_edi_ubl_cii] +new model account.edi.xml.ubl_de [module account_edi_ubl_cii] +new model account.edi.xml.ubl_efff [module account_edi_ubl_cii] +new model account.group.template [module account] +new model account.reconcile.model.line [module account] +new model account.reconcile.model.line.template [module account] +new model account.reconcile.model.partner.mapping [module account] +new model account.resequence.wizard [module account] +new model account.tax.report [module account] +new model account.tour.upload.bill [module account] +new model account.tour.upload.bill.email.confirm [module account] +new model adyen.account [module adyen_platforms] +new model adyen.address.mixin [module adyen_platforms] +new model adyen.bank.account [module adyen_platforms] +new model adyen.id.mixin [module adyen_platforms] +new model adyen.payout [module adyen_platforms] +new model adyen.shareholder [module adyen_platforms] +new model adyen.store [module pos_adyen] +new model adyen.terminal [module pos_adyen] +new model adyen.transaction [module adyen_platforms] +new model applicant.get.refuse.reason [module hr_recruitment] +new model auth_totp.wizard [module auth_totp] +new model base.automation.link.test [module test_base_automation] +new model base.automation.linked.test [module test_base_automation] +new model calendar.recurrence [module calendar] +new model chat.room [module website_jitsi] +new model chat.room.mixin [module website_jitsi] +new model coupon.coupon (renamed from sale.coupon) [module coupon] +new model coupon.generate.wizard (renamed from sale.coupon.generate) [module coupon] +new model coupon.program (renamed from sale.coupon.program) [module coupon] +new model coupon.reward (renamed from sale.coupon.reward) [module coupon] +new model coupon.rule (renamed from sale.coupon.rule) [module coupon] +new model crm.recurring.plan [module crm] +new model crm.tag (renamed from crm.lead.tag) [module sales_team] +new model decimal.precision.test [module test_new_api] +new model domain.bool [module test_new_api] +new model event.lead.rule [module event_crm] +new model event.meeting.room [module website_event_meet] +new model event.question.answer (renamed from event.answer) [module website_event_questions] +new model event.quiz [module website_event_track_quiz] +new model event.quiz.answer [module website_event_track_quiz] +new model event.quiz.question [module website_event_track_quiz] +new model event.stage [module event] +new model event.tag [module event] +new model event.tag.category [module event] +new model event.track.tag.category [module website_event_track] +new model event.track.visitor [module website_event_track] +new model event.type.ticket [module event] +new model expiry.picking.confirmation [module product_expiry] +new model export.boolean [module test_impex] +new model export.computed.binary [module test_xlsx_export] +new model export.date [module test_impex] +new model export.datetime [module test_impex] +new model export.decimal [module test_impex] +new model export.float [module test_impex] +new model export.function [module test_impex] +new model export.group_operator [module test_xlsx_export] +new model export.group_operator.one2many [module test_xlsx_export] +new model export.inherits.child [module test_impex] +new model export.inherits.parent [module test_impex] +new model export.integer [module test_impex] +new model export.m2o.str [module test_impex] +new model export.m2o.str.child [module test_impex] +new model export.many2many [module test_impex] +new model export.many2many.other [module test_impex] +new model export.many2one [module test_impex] +new model export.one2many [module test_impex] +new model export.one2many.child [module test_impex] +new model export.one2many.child.1 [module test_impex] +new model export.one2many.child.2 [module test_impex] +new model export.one2many.multiple [module test_impex] +new model export.one2many.multiple.child [module test_impex] +new model export.one2many.recursive [module test_impex] +new model export.selection [module test_impex] +new model export.selection.function [module test_impex] +new model export.selection.withdefault [module test_impex] +new model export.string [module test_impex] +new model export.string.bounded [module test_impex] +new model export.string.required [module test_impex] +new model export.text [module test_impex] +new model export.unique [module test_impex] +new model fleet.vehicle.cost.report [module fleet] +new model gamification.karma.tracking [module gamification] +new model google.calendar.account.reset [module google_calendar] +new model google.calendar.sync [module google_calendar] +new model hr.applicant.refuse.reason [module hr_recruitment] +new model hr.payroll.structure.type [module hr_contract] +new model ir.qweb.field.image_url [module base] +new model l10n_es_edi.certificate [module l10n_es_edi_sii] +new model l10n_es.sii.account.tax.mixin [module l10n_es_edi_sii] +new model l10n_ph_2307.wizard [module l10n_ph] +new model mail.blacklist.remove [module mail] +new model mail.performance.thread [module test_mail] +new model mail.performance.tracking [module test_mail] +new model mail.render.mixin [module mail] +new model mail.template.preview (renamed from email_template.preview) [module mail] +new model mail.test.container [module test_mail] +new model mail.test.sms.bl.optout [module test_mail_full] +new model mail.test.sms.partner.2many [module test_mail_full] +new model mail.test.ticket [module test_mail] +new model mail.test.track.compute [module test_mail] +new model mailing.performance [module test_mass_mailing] +new model mailing.performance.blacklist [module test_mass_mailing] +new model mailing.test.blacklist [module test_mass_mailing] +new model mailing.test.optout [module test_mass_mailing] +new model mailing.test.simple [module test_mass_mailing] +new model mailing.test.utm [module test_mass_mailing] +new model microsoft.calendar.account.reset [module microsoft_calendar] +new model microsoft.calendar.sync [module microsoft_calendar] +new model microsoft.service [module microsoft_account] +new model mrp.consumption.warning [module mrp] +new model mrp.consumption.warning.line [module mrp] +new model mrp.immediate.production [module mrp] +new model mrp.immediate.production.line [module mrp] +new model mrp.production.backorder [module mrp] +new model mrp.production.backorder.line [module mrp] +new model o2m_changes_children [module test_testing_utilities] +new model o2m_changes_children.lines [module test_testing_utilities] +new model o2m_changes_parent [module test_testing_utilities] +new model o2m_readonly_subfield_child [module test_testing_utilities] +new model o2m_readonly_subfield_parent [module test_testing_utilities] +new model phone.blacklist.remove [module phone_validation] +new model product.ribbon (renamed from product.style) [module website_sale] +new model project.delete.wizard [module project] +new model project.task.create.sale.order [module sale_timesheet] +new model project.task.create.timesheet [module hr_timesheet] +new model project.task.recurrence [module project] +new model project.task.type.delete.wizard [module project] +new model report.account.report_invoice [module account] +new model report.coupon.report_coupon (renamed from report.sale_coupon.report_coupon) [module coupon] +new model report.l10n_ch.qr_report_main [module l10n_ch] +new model report.stock.report_product_product_replenishment [module stock] +new model report.stock.report_product_template_replenishment [module stock] +new model res.users.apikeys [module base] +new model res.users.apikeys.description [module base] +new model res.users.apikeys.show [module base] +new model res.users.identitycheck [module base] +new model sale.order.cancel [module sale] +new model sequence.mixin [module account] +new model slide.slide.resource [module website_slides] +new model snailmail.confirm [module snailmail] +new model snailmail.confirm.invoice [module snailmail_account] +new model stock.backorder.confirmation.line [module stock] +new model stock.immediate.transfer.line [module stock] +new model stock.orderpoint.snooze [module stock] +new model stock.valuation.layer.revaluation [module stock_account] +new model survey.question.answer (renamed from survey.label) [module survey] +new model survey.user_input.line (renamed from survey.user_input_line) [module survey] +new model tab.a [module test_action_bindings] +new model tab.b [module test_action_bindings] +new model test_access_right.container [module test_access_rights] +new model test_access_right.obj_categ [module test_access_rights] +new model test_access_right.parent [module test_access_rights] +new model test_access_right.some_obj [module test_access_rights] +new model test_access_right.ticket [module test_access_rights] +new model test.another_box [module test_inherits] +new model test.another_unit [module test_inherits] +new model test_base_automation.project [module test_base_automation] +new model test_base_automation.task [module test_base_automation] +new model test.box [module test_inherits] +new model test_convert.test_model [module test_convert] +new model test_convert.usered [module test_convert] +new model test_converter.monetary [module test_converter] +new model test_converter.test_model [module test_converter] +new model test_converter.test_model.sub [module test_converter] +new model test.exceptions.model [module test_exceptions] +new model test.inherit.child [module test_inherit] +new model test.inherit.daughter [module test_inherit] +new model test.inherit.mother [module test_inherit] +new model test.inherit.parent [module test_inherit] +new model test.inherit.property [module test_inherit] +new model test.limits.model [module test_limits] +new model test.model [module test_website] +new model test_new_api.attachment [module test_new_api] +new model test_new_api.attachment.host [module test_new_api] +new model test_new_api.bar [module test_new_api] +new model test_new_api.binary_svg [module test_new_api] +new model test_new_api.cascade [module test_new_api] +new model test_new_api.category [module test_new_api] +new model test_new_api.city [module test_new_api] +new model test_new_api.company [module test_new_api] +new model test_new_api.company.attr [module test_new_api] +new model test_new_api.compute.container [module test_new_api] +new model test_new_api.compute.dynamic.depends [module test_new_api] +new model test_new_api.compute_editable [module test_new_api] +new model test_new_api.compute_editable.line [module test_new_api] +new model test_new_api.compute.inverse [module test_new_api] +new model test_new_api.compute.member [module test_new_api] +new model test_new_api.compute.onchange [module test_new_api] +new model test_new_api.compute.onchange.line [module test_new_api] +new model test_new_api.compute.readonly [module test_new_api] +new model test_new_api.compute.readwrite [module test_new_api] +new model test_new_api.compute.unassigned [module test_new_api] +new model test_new_api.country [module test_new_api] +new model test_new_api.creativework.book [module test_new_api] +new model test_new_api.creativework.edition [module test_new_api] +new model test_new_api.creativework.movie [module test_new_api] +new model test_new_api.crew [module test_new_api] +new model test_new_api.discussion [module test_new_api] +new model test_new_api.display [module test_new_api] +new model test_new_api.emailmessage [module test_new_api] +new model test_new_api.field_with_caps [module test_new_api] +new model test_new_api.foo [module test_new_api] +new model test_new_api.inverse_m2o_ref [module test_new_api] +new model test_new_api.message [module test_new_api] +new model test_new_api.mixed [module test_new_api] +new model test_new_api.mixin [module test_new_api] +new model test_new_api.model_a [module test_new_api] +new model test_new_api.model_active_field [module test_new_api] +new model test_new_api.model_b [module test_new_api] +new model test_new_api.model_binary [module test_new_api] +new model test_new_api.model_child [module test_new_api] +new model test_new_api.model_child_m2o [module test_new_api] +new model test_new_api.model_child_nocheck [module test_new_api] +new model test_new_api.model_image [module test_new_api] +new model test_new_api.model_many2one_reference [module test_new_api] +new model test_new_api.model_parent [module test_new_api] +new model test_new_api.model_parent_m2o [module test_new_api] +new model test_new_api.model_private_address_onchange [module test_new_api] +new model test_new_api.model_selection_base [module test_new_api] +new model test_new_api.model_selection_non_stored [module test_new_api] +new model test_new_api.model_selection_required [module test_new_api] +new model test_new_api.model_selection_required_for_write_override [module test_new_api] +new model test_new_api.model_shared_cache_compute_line [module test_new_api] +new model test_new_api.model_shared_cache_compute_parent [module test_new_api] +new model test_new_api.monetary_base [module test_new_api] +new model test_new_api.monetary_custom [module test_new_api] +new model test_new_api.monetary_inherits [module test_new_api] +new model test_new_api.monetary_order [module test_new_api] +new model test_new_api.monetary_order_line [module test_new_api] +new model test_new_api.monetary_related [module test_new_api] +new model test_new_api.move [module test_new_api] +new model test_new_api.move_line [module test_new_api] +new model test_new_api.multi [module test_new_api] +new model test_new_api.multi_compute_inverse [module test_new_api] +new model test_new_api.multi.line [module test_new_api] +new model test_new_api.multi.line2 [module test_new_api] +new model test_new_api.multi.tag [module test_new_api] +new model test_new_api.one2many [module test_new_api] +new model test_new_api.one2many.line [module test_new_api] +new model test_new_api.order [module test_new_api] +new model test_new_api.order.line [module test_new_api] +new model test_new_api.payment [module test_new_api] +new model test_new_api.pirate [module test_new_api] +new model test_new_api.prisoner [module test_new_api] +new model test_new_api.recursive [module test_new_api] +new model test_new_api.recursive.tree [module test_new_api] +new model test_new_api.related [module test_new_api] +new model test_new_api.req_m2o [module test_new_api] +new model test_new_api.req_m2o_transient [module test_new_api] +new model test_new_api.selection [module test_new_api] +new model test_new_api.ship [module test_new_api] +new model test_new_api.state_mixin [module test_new_api] +new model test_new_api.trigger.left [module test_new_api] +new model test_new_api.trigger.middle [module test_new_api] +new model test_new_api.trigger.right [module test_new_api] +new model test.no.populate [module test_populate] +new model test.pallet [module test_inherits] +new model test.populate [module test_populate] +new model test.populate.category [module test_populate] +new model test.populate.inherit [module test_populate] +new model test_read_group.aggregate [module test_read_group] +new model test_read_group.aggregate.boolean [module test_read_group] +new model test_read_group.fill_temporal [module test_read_group] +new model test_read_group.on_date [module test_read_group] +new model test_read_group.on_selection [module test_read_group] +new model test_read_group.order [module test_read_group] +new model test_read_group.order.line [module test_read_group] +new model test_rpc.model_a [module test_rpc] +new model test_rpc.model_b [module test_rpc] +new model test_search_panel.category_target_model [module test_search_panel] +new model test_search_panel.category_target_model_no_parent_name [module test_search_panel] +new model test_search_panel.filter_target_model [module test_search_panel] +new model test_search_panel.source_model [module test_search_panel] +new model test_testing_utilities.a [module test_testing_utilities] +new model test_testing_utilities.c [module test_testing_utilities] +new model test_testing_utilities.d [module test_testing_utilities] +new model test_testing_utilities.default [module test_testing_utilities] +new model test_testing_utilities.e [module test_testing_utilities] +new model test_testing_utilities.f [module test_testing_utilities] +new model test_testing_utilities.g [module test_testing_utilities] +new model test_testing_utilities.m2o [module test_testing_utilities] +new model test_testing_utilities.onchange_count [module test_testing_utilities] +new model test_testing_utilities.onchange_count_sub [module test_testing_utilities] +new model test_testing_utilities.onchange_line [module test_testing_utilities] +new model test_testing_utilities.onchange_parent [module test_testing_utilities] +new model test_testing_utilities.parent [module test_testing_utilities] +new model test_testing_utilities.readonly [module test_testing_utilities] +new model test_testing_utilities.recursive [module test_testing_utilities] +new model test_testing_utilities.req_bool [module test_testing_utilities] +new model test_testing_utilities.sub [module test_testing_utilities] +new model test_testing_utilities.sub2 [module test_testing_utilities] +new model test_testing_utilities.sub3 [module test_testing_utilities] +new model test.translation.import [module test_translation_import] +new model test_uninstall.model [module test_uninstall] +new model test.unit [module test_inherits] +new model test.unit.line [module test_inherits] +new model ttu.child [module test_testing_utilities] +new model ttu.grandchild [module test_testing_utilities] +new model ttu.product [module test_testing_utilities] +new model ttu.root [module test_testing_utilities] +new model upgrade.analysis (renamed from openupgrade.analysis.wizard) [module upgrade_analysis] +new model upgrade.attribute (renamed from openupgrade.attribute) [module upgrade_analysis] +new model upgrade.comparison.config (renamed from openupgrade.comparison.config) [module upgrade_analysis] +new model upgrade.generate.record.wizard (renamed from openupgrade.generate.records.wizard) [module upgrade_analysis] +new model upgrade.install.wizard (renamed from openupgrade.install.all.wizard) [module upgrade_analysis] +new model upgrade.record (renamed from openupgrade.record) [module upgrade_analysis] +new model vendor.delay.report [module purchase_stock] +new model website.cover_properties.mixin [module website] +new model website.robots [module website] +new model website.sale.extra.field [module website_sale] +new model website.snippet.filter [module website] ---Fields in module 'general'--- -# 9783 fields matched, -# Direct match: 9719 -# Found in other module: 64 +# 9985 fields matched, +# Direct match: 9851 +# Found in other module: 134 # Found with different type: 0 -# In obsolete models: 3264 -# New columns: 3707 -# Not matched: 4233 +# In obsolete models: 204 +# New columns: 3394 +# Not matched: 562 ---XML records in module 'general'--- ERROR: module not in list of installed modules: ---Models in module 'account_bank_statement_import'--- diff --git a/openupgrade_scripts/scripts/base_import_module/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base_import_module/14.0.1.0/upgrade_analysis_work.txt index 6d4a5faf700f..a0d26350756f 100644 --- a/openupgrade_scripts/scripts/base_import_module/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/base_import_module/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'base_import_module'--- ---XML records in module 'base_import_module'--- NEW ir.model.access: base_import_module.access_base_import_module -# NOTHING TO DO \ No newline at end of file +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/base_sparse_field/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base_sparse_field/14.0.1.0/upgrade_analysis_work.txt index 6f20fe781c15..3d4648a35d23 100644 --- a/openupgrade_scripts/scripts/base_sparse_field/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/base_sparse_field/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'base_sparse_field'--- ---XML records in module 'base_sparse_field'--- NEW ir.model.access: base_sparse_field.access_sparse_fields_test -# NOTHING TO DO \ No newline at end of file +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/calendar/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/calendar/14.0.1.0/post-migration.py index 5bdcd514e67e..124cfccac781 100644 --- a/openupgrade_scripts/scripts/calendar/14.0.1.0/post-migration.py +++ b/openupgrade_scripts/scripts/calendar/14.0.1.0/post-migration.py @@ -85,9 +85,9 @@ def create_recurrent_events(env): duration = recurrence.base_event_id.stop - recurrence.base_event_id.start ranges = set(recurrence._get_ranges(recurrence.base_event_id.start, duration)) # Remove range that contains start < event's start to avoid create past events - for r in list(ranges): - if r[0] <= recurrence.base_event_id.start: - ranges.remove(r) + for event_range in list(ranges): + if event_range[0] <= recurrence.base_event_id.start: + ranges.remove(event_range) else: break # Remove range that contains detach events diff --git a/openupgrade_scripts/scripts/calendar/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/calendar/14.0.1.0/pre-migration.py index c1f2e56ea493..4f984e1ff18d 100644 --- a/openupgrade_scripts/scripts/calendar/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/calendar/14.0.1.0/pre-migration.py @@ -3,6 +3,39 @@ from openupgradelib import openupgrade +def fix_empty_end_type(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE calendar_event + SET end_type = 'count' + WHERE end_type is NULL AND recurrency is True + """, + ) + + +def fix_negative_interval(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE calendar_event + SET interval = 1 + WHERE interval<=0 AND recurrency is True + """, + ) + + +def fix_negative_count(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE calendar_event + SET count = 1 + WHERE count<=0 AND recurrency is True + """, + ) + + def delete_empty_event_id_partner_id_records(env): openupgrade.logged_query( env.cr, @@ -34,6 +67,9 @@ def fill_empty_privacy_and_show_as_fields(env): @openupgrade.migrate() def migrate(env, version): + fix_empty_end_type(env) + fix_negative_interval(env) + fix_negative_count(env) delete_empty_event_id_partner_id_records(env) fill_empty_privacy_and_show_as_fields(env) openupgrade.copy_columns(env.cr, {"calendar_event": [("byday", None, None)]}) diff --git a/openupgrade_scripts/scripts/calendar/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/calendar/14.0.1.0/upgrade_analysis.txt index 52ab7a64f0a7..c0589f855d32 100644 --- a/openupgrade_scripts/scripts/calendar/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/calendar/14.0.1.0/upgrade_analysis.txt @@ -7,67 +7,53 @@ calendar / calendar.attendee / event_id (many2one) : now re calendar / calendar.attendee / partner_id (many2one) : now required calendar / calendar.event / _order : _order is now 'start desc' ('id desc') calendar / calendar.event / byday (selection) : not stored anymore -calendar / calendar.event / byday (selection) : now a function calendar / calendar.event / byday (selection) : selection_keys is now '['-1', '1', '2', '3', '4']' ('['-1', '1', '2', '3', '4', '5']') calendar / calendar.event / count (integer) : not stored anymore -calendar / calendar.event / count (integer) : now a function calendar / calendar.event / day (integer) : not stored anymore -calendar / calendar.event / day (integer) : now a function calendar / calendar.event / display_start (char) : DEL -calendar / calendar.event / duration (float) : now a function calendar / calendar.event / end_type (selection) : not stored anymore -calendar / calendar.event / end_type (selection) : now a function calendar / calendar.event / end_type (selection) : selection_keys is now '['count', 'end_date', 'forever']' ('['count', 'end_date']') calendar / calendar.event / event_tz (selection) : not stored anymore -calendar / calendar.event / event_tz (selection) : now a function calendar / calendar.event / final_date (date) : DEL -calendar / calendar.event / follow_recurrence (boolean) : NEW hasdefault +calendar / calendar.event / follow_recurrence (boolean) : NEW hasdefault: default calendar / calendar.event / fr (boolean) : not stored anymore -calendar / calendar.event / fr (boolean) : now a function calendar / calendar.event / interval (integer) : not stored anymore -calendar / calendar.event / interval (integer) : now a function calendar / calendar.event / mo (boolean) : not stored anymore -calendar / calendar.event / mo (boolean) : now a function calendar / calendar.event / month_by (selection) : not stored anymore -calendar / calendar.event / month_by (selection) : now a function -calendar / calendar.event / privacy (selection) : now required, req_default: function +calendar / calendar.event / privacy (selection) : now required calendar / calendar.event / recurrence_id (many2one) : NEW relation: calendar.recurrence -calendar / calendar.event / recurrence_update (selection) : NEW selection_keys: ['all_events', 'future_events', 'self_only'], hasdefault +calendar / calendar.event / recurrence_update (selection) : NEW selection_keys: ['all_events', 'future_events', 'self_only'], hasdefault: default calendar / calendar.event / recurrent_id (integer) : DEL calendar / calendar.event / recurrent_id_date (datetime) : DEL +calendar / calendar.event / rrule (char) : not a function anymore calendar / calendar.event / rrule (char) : not stored anymore calendar / calendar.event / rrule_type (selection) : not stored anymore -calendar / calendar.event / rrule_type (selection) : now a function calendar / calendar.event / sa (boolean) : not stored anymore -calendar / calendar.event / sa (boolean) : now a function -calendar / calendar.event / show_as (selection) : now required, req_default: function +calendar / calendar.event / show_as (selection) : now required calendar / calendar.event / start_datetime (datetime) : DEL calendar / calendar.event / state (selection) : DEL selection_keys: ['draft', 'open'] -calendar / calendar.event / stop (datetime) : now a function calendar / calendar.event / stop_datetime (datetime) : DEL calendar / calendar.event / su (boolean) : not stored anymore -calendar / calendar.event / su (boolean) : now a function calendar / calendar.event / th (boolean) : not stored anymore -calendar / calendar.event / th (boolean) : now a function calendar / calendar.event / tu (boolean) : not stored anymore -calendar / calendar.event / tu (boolean) : now a function +calendar / calendar.event / until (date) : NEW hasdefault: compute calendar / calendar.event / we (boolean) : not stored anymore -calendar / calendar.event / we (boolean) : now a function calendar / calendar.event / week_list (selection) : DEL selection_keys: ['FR', 'MO', 'SA', 'SU', 'TH', 'TU', 'WE'] +calendar / calendar.event / weekday (selection) : NEW selection_keys: ['FR', 'MO', 'SA', 'SU', 'TH', 'TU', 'WE'], hasdefault: compute calendar / calendar.recurrence / base_event_id (many2one) : NEW relation: calendar.event calendar / calendar.recurrence / byday (selection) : NEW selection_keys: ['-1', '1', '2', '3', '4'] calendar / calendar.recurrence / calendar_event_ids (one2many) : NEW relation: calendar.event -calendar / calendar.recurrence / count (integer) : NEW hasdefault -calendar / calendar.recurrence / day (integer) : NEW hasdefault -calendar / calendar.recurrence / end_type (selection) : NEW selection_keys: ['count', 'end_date', 'forever'], hasdefault -calendar / calendar.recurrence / event_tz (selection) : NEW selection_keys: function, hasdefault +calendar / calendar.recurrence / count (integer) : NEW hasdefault: default +calendar / calendar.recurrence / day (integer) : NEW hasdefault: default +calendar / calendar.recurrence / end_type (selection) : NEW selection_keys: ['count', 'end_date', 'forever'], hasdefault: default +calendar / calendar.recurrence / event_tz (selection) : NEW selection_keys: function, hasdefault: default calendar / calendar.recurrence / fr (boolean) : NEW -calendar / calendar.recurrence / interval (integer) : NEW hasdefault +calendar / calendar.recurrence / interval (integer) : NEW hasdefault: default calendar / calendar.recurrence / mo (boolean) : NEW -calendar / calendar.recurrence / month_by (selection) : NEW selection_keys: ['date', 'day'], hasdefault +calendar / calendar.recurrence / month_by (selection) : NEW selection_keys: ['date', 'day'], hasdefault: default calendar / calendar.recurrence / name (char) : NEW isfunction: function, stored calendar / calendar.recurrence / rrule (char) : NEW isfunction: function, stored -calendar / calendar.recurrence / rrule_type (selection) : NEW selection_keys: ['daily', 'monthly', 'weekly', 'yearly'], hasdefault +calendar / calendar.recurrence / rrule_type (selection) : NEW selection_keys: ['daily', 'monthly', 'weekly', 'yearly'], hasdefault: default calendar / calendar.recurrence / sa (boolean) : NEW calendar / calendar.recurrence / su (boolean) : NEW calendar / calendar.recurrence / th (boolean) : NEW diff --git a/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/noupdate_changes.xml new file mode 100644 index 000000000000..a6eda0bad562 --- /dev/null +++ b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/noupdate_changes.xml @@ -0,0 +1,6 @@ + + + + Event reminder: ${object.name}, ${object.get_display_time_tz(object.partner_id.tz)} + + diff --git a/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/post-migration.py new file mode 100644 index 000000000000..fc2ec06b16bd --- /dev/null +++ b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/post-migration.py @@ -0,0 +1,15 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env.cr, "calendar_sms", "14.0.1.0/noupdate_changes.xml") + openupgrade.delete_record_translations( + env.cr, + "calendar_sms", + [ + "sms_template_data_calendar_reminder", + ], + ) diff --git a/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis.txt index 3a9ec1c7af67..912f6c9d5c59 100644 --- a/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis.txt @@ -1,4 +1,4 @@ ---Models in module 'calendar_sms'--- ---Fields in module 'calendar_sms'--- ---XML records in module 'calendar_sms'--- ----nothing has changed in this module-- +DEL ir.actions.act_window: calendar_sms.calendar_event_act_window_sms_composer_single diff --git a/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..ea06b154bda7 --- /dev/null +++ b/openupgrade_scripts/scripts/calendar_sms/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'calendar_sms'--- +---Fields in module 'calendar_sms'--- +---XML records in module 'calendar_sms'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/coupon/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/coupon/14.0.1.0/upgrade_analysis.txt index bde1dc2e6e0f..4c0b073f3c75 100644 --- a/openupgrade_scripts/scripts/coupon/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/coupon/14.0.1.0/upgrade_analysis.txt @@ -68,6 +68,7 @@ DEL ir.model.access: sale_coupon.access_program_salesman [moved to sale_coupon m DEL ir.model.access: sale_coupon.access_reward_manager [moved to sale_coupon module] DEL ir.model.access: sale_coupon.access_reward_salesman [moved to sale_coupon module] NEW ir.model.constraint: coupon.constraint_coupon_coupon_unique_coupon_code +NEW ir.model.constraint: coupon.constraint_coupon_rule_check_coupon_rule_dates DEL ir.model.constraint: sale_coupon.constraint_sale_coupon_unique_coupon_code NEW ir.rule: coupon.sale_coupon_generate_rule (noupdate) NEW ir.rule: sale_coupon.sale_coupon_apply_code_rule (noupdate) diff --git a/openupgrade_scripts/scripts/crm/14.0.1.2/noupdate_changes.xml b/openupgrade_scripts/scripts/crm/14.0.1.2/noupdate_changes.xml index 614d8d92e2fb..3c584df66202 100644 --- a/openupgrade_scripts/scripts/crm/14.0.1.2/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/crm/14.0.1.2/noupdate_changes.xml @@ -1,8 +1,12 @@ - + + [('company_id', 'in', company_ids + [False])] + + + + [('company_id', 'in', company_ids + [False])] + diff --git a/openupgrade_scripts/scripts/crm/14.0.1.2/pre-migration.py b/openupgrade_scripts/scripts/crm/14.0.1.2/pre-migration.py index 99db1aba2c8f..164c19144989 100644 --- a/openupgrade_scripts/scripts/crm/14.0.1.2/pre-migration.py +++ b/openupgrade_scripts/scripts/crm/14.0.1.2/pre-migration.py @@ -20,6 +20,7 @@ def migrate(env, version): ], ) openupgrade.rename_tables(env.cr, [("crm_lead_tag_rel", "crm_tag_rel")]) + openupgrade.remove_tables_fks(env.cr, ["crm_partner_binding"]) # Disappeared constraint openupgrade.logged_query( env.cr, diff --git a/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis.txt index 827d42dd3d12..1bd473d05294 100644 --- a/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis.txt @@ -4,46 +4,30 @@ obsolete model crm.partner.binding [transient] new model crm.recurring.plan ---Fields in module 'crm'--- crm / crm.lead / automated_probability (float) : now a function -crm / crm.lead / city (char) : now a function -crm / crm.lead / contact_name (char) : now a function -crm / crm.lead / country_id (many2one) : now a function crm / crm.lead / date_last_stage_update (datetime): now a function crm / crm.lead / date_open (datetime) : now a function crm / crm.lead / email_from (char) : now a function crm / crm.lead / expected_revenue (float) : not a function anymore -crm / crm.lead / function (char) : now a function -crm / crm.lead / mobile (char) : now a function -crm / crm.lead / name (char) : now a function -crm / crm.lead / partner_name (char) : now a function crm / crm.lead / phone (char) : now a function crm / crm.lead / phone_mobile_search (char) : NEW crm / crm.lead / phone_sanitized (char) : NEW isfunction: function, stored crm / crm.lead / planned_revenue (float) : DEL -crm / crm.lead / probability (float) : now a function crm / crm.lead / prorated_revenue (float) : NEW isfunction: function, stored crm / crm.lead / recurring_plan (many2one) : NEW relation: crm.recurring.plan crm / crm.lead / recurring_revenue (float) : NEW crm / crm.lead / recurring_revenue_monthly (float): NEW isfunction: function, stored crm / crm.lead / recurring_revenue_monthly_prorated (float): NEW isfunction: function, stored -crm / crm.lead / stage_id (many2one) : now a function -crm / crm.lead / state_id (many2one) : now a function -crm / crm.lead / street (char) : now a function -crm / crm.lead / street2 (char) : now a function crm / crm.lead / tag_ids (many2many) : relation is now 'crm.tag' ('crm.lead.tag') [nothing to do] crm / crm.lead / tag_ids (many2many) : table is now 'crm_tag_rel' ('crm_lead_tag_rel') -crm / crm.lead / team_id (many2one) : now a function -crm / crm.lead / title (many2one) : now a function -crm / crm.lead / website (char) : now a function -crm / crm.lead / zip (char) : now a function crm / crm.lead.tag / __last_update (datetime) : module is now 'sales_team' ('crm') crm / crm.lead.tag / _order : module is now 'sales_team' ('crm') crm / crm.lead.tag / color (integer) : module is now 'sales_team' ('crm') crm / crm.lead.tag / display_name (char) : module is now 'sales_team' ('crm') crm / crm.lead.tag / name (char) : module is now 'sales_team' ('crm') -crm / crm.recurring.plan / active (boolean) : NEW hasdefault +crm / crm.recurring.plan / active (boolean) : NEW hasdefault: default crm / crm.recurring.plan / name (char) : NEW required crm / crm.recurring.plan / number_of_months (integer) : NEW required -crm / crm.recurring.plan / sequence (integer) : NEW hasdefault +crm / crm.recurring.plan / sequence (integer) : NEW hasdefault: default crm / crm.team / opportunities_amount (integer): type is now 'float' ('integer') ---XML records in module 'crm'--- NEW crm.recurring.plan: crm.crm_recurring_plan_monthly (noupdate) diff --git a/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis_work.txt index df49dbf5719e..9ff4579ce18d 100644 --- a/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/crm/14.0.1.2/upgrade_analysis_work.txt @@ -1,9 +1,11 @@ ---Models in module 'crm'--- obsolete model crm.lead.tag (renamed to crm.tag in module sales_team) -obsolete model crm.partner.binding [transient] new model crm.recurring.plan # NOTHING TO DO +obsolete model crm.partner.binding [transient] +# DONE: pre-migration: remove table fks + ---Fields in module 'crm'--- crm / crm.lead / probability (float) : now a function crm / crm.lead / automated_probability (float) : now a function @@ -121,4 +123,4 @@ DEL ir.ui.view: crm.crm_lead_tag_tree DEL ir.model.access: crm.access_crm_lead_tag DEL ir.model.access: crm.access_crm_lead_tag_manager DEL ir.model.access: crm.access_crm_lead_tag_salesman -# NOTHING TO DO: Renamed in sales_team \ No newline at end of file +# NOTHING TO DO: Renamed in sales_team diff --git a/openupgrade_scripts/scripts/crm_iap_lead/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/crm_iap_lead/14.0.1.1/upgrade_analysis.txt index 9b8ea7944757..9944ec22a069 100644 --- a/openupgrade_scripts/scripts/crm_iap_lead/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/crm_iap_lead/14.0.1.1/upgrade_analysis.txt @@ -3,7 +3,6 @@ crm_iap_lead / crm.iap.lead.mining.request / tag_ids (many2many) : column2 is now 'crm_tag_id' ('crm_lead_tag_id') [crm_iap_lead_mining_request_crm_lead_tag_rel] crm_iap_lead / crm.iap.lead.mining.request / tag_ids (many2many) : relation is now 'crm.tag' ('crm.lead.tag') [nothing to do] crm_iap_lead / crm.iap.lead.mining.request / tag_ids (many2many) : table is now 'crm_iap_lead_mining_request_crm_tag_rel' ('crm_iap_lead_mining_request_crm_lead_tag_rel') -crm_iap_lead / crm.iap.lead.mining.request / team_id (many2one) : now a function crm_iap_lead / crm.lead / reveal_id (char) : module is now 'iap_crm' ('crm_iap_lead') ---XML records in module 'crm_iap_lead'--- NEW ir.ui.view: crm_iap_lead.enrich_company diff --git a/openupgrade_scripts/scripts/delivery/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/delivery/14.0.1.0/noupdate_changes.xml index 0489c6614d46..119557c99a00 100644 --- a/openupgrade_scripts/scripts/delivery/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/delivery/14.0.1.0/noupdate_changes.xml @@ -1,7 +1,8 @@ - + [('company_id', 'in', company_ids + [False])] + order diff --git a/openupgrade_scripts/scripts/digest/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/digest/14.0.1.1/upgrade_analysis.txt index 785cd5591ab7..8f6b6c99eaba 100644 --- a/openupgrade_scripts/scripts/digest/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/digest/14.0.1.1/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'digest'--- ---Fields in module 'digest'--- digest / digest.digest / periodicity (selection) : selection_keys is now '['daily', 'monthly', 'quarterly', 'weekly']' ('['monthly', 'quarterly', 'weekly']') -digest / digest.digest / template_id (many2one) : DEL relation: mail.template, required, req_default: function +digest / digest.digest / template_id (many2one) : DEL relation: mail.template, required digest / digest.tip / name (char) : NEW ---XML records in module 'digest'--- NEW digest.tip: digest.digest_tip_digest_0 (noupdate) diff --git a/openupgrade_scripts/scripts/event/14.0.1.3/noupdate_changes.xml b/openupgrade_scripts/scripts/event/14.0.1.3/noupdate_changes.xml index 34e088567d7e..8c446c8594c7 100644 --- a/openupgrade_scripts/scripts/event/14.0.1.3/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/event/14.0.1.3/noupdate_changes.xml @@ -1,12 +1,12 @@ - ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids + [False])] - ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids + [False])] diff --git a/openupgrade_scripts/scripts/event/14.0.1.3/upgrade_analysis.txt b/openupgrade_scripts/scripts/event/14.0.1.3/upgrade_analysis.txt index 9c9117716515..145f5c3eb68c 100644 --- a/openupgrade_scripts/scripts/event/14.0.1.3/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/event/14.0.1.3/upgrade_analysis.txt @@ -6,22 +6,18 @@ new model event.tag new model event.tag.category new model event.type.ticket ---Fields in module 'event'--- -event / event.event / auto_confirm (boolean) : now a function event / event.event / color (integer) : DEL -event / event.event / date_tz (selection) : now a function -event / event.event / event_mail_ids (one2many) : now a function event / event.event / event_ticket_ids (one2many) : previously in module event_sale event / event.event / is_online (boolean) : DEL -event / event.event / kanban_state (selection) : NEW selection_keys: ['blocked', 'done', 'normal'], hasdefault +event / event.event / kanban_state (selection) : NEW selection_keys: ['blocked', 'done', 'normal'], hasdefault: default event / event.event / kanban_state_label (char) : NEW isfunction: function, stored event / event.event / note (text) : NEW -event / event.event / seats_availability (selection): DEL required, selection_keys: ['limited', 'unlimited'], req_default: function -event / event.event / seats_limited (boolean) : NEW required, isfunction: function, stored -event / event.event / seats_max (integer) : now a function +event / event.event / seats_availability (selection): DEL required, selection_keys: ['limited', 'unlimited'] +event / event.event / seats_limited (boolean) : NEW required, hasdefault: compute event / event.event / seats_min (integer) : DEL -event / event.event / stage_id (many2one) : NEW relation: event.stage, hasdefault -event / event.event / state (selection) : DEL required, selection_keys: ['cancel', 'confirm', 'done', 'draft'], req_default: function -event / event.event / tag_ids (many2many) : NEW relation: event.tag, isfunction: function, stored +event / event.event / stage_id (many2one) : NEW relation: event.stage, hasdefault: default +event / event.event / state (selection) : DEL required, selection_keys: ['cancel', 'confirm', 'done', 'draft'] +event / event.event / tag_ids (many2many) : NEW relation: event.tag, hasdefault: compute event / event.event / twitter_hashtag (char) : DEL event / event.event.ticket / __last_update (datetime) : previously in module event_sale event / event.event.ticket / _order : previously in module event_sale @@ -42,44 +38,38 @@ event / event.event.ticket / seats_unconfirmed (integer) : previo event / event.event.ticket / seats_used (integer) : previously in module event_sale event / event.event.ticket / start_sale_date (date) : NEW event / event.registration / _order : _order is now 'id desc' ('name, create_date desc') -event / event.registration / date_closed (datetime) : now a function -event / event.registration / email (char) : now a function event / event.registration / event_ticket_id (many2one) : previously in module event_sale -event / event.registration / mobile (char) : now a function -event / event.registration / name (char) : now a function event / event.registration / origin (char) : DEL -event / event.registration / phone (char) : now a function event / event.registration / utm_campaign_id (many2one) : NEW relation: utm.campaign event / event.registration / utm_medium_id (many2one) : NEW relation: utm.medium event / event.registration / utm_source_id (many2one) : NEW relation: utm.source event / event.stage / description (text) : NEW -event / event.stage / fold (boolean) : NEW hasdefault -event / event.stage / legend_blocked (char) : NEW required, req_default: function, hasdefault -event / event.stage / legend_done (char) : NEW required, req_default: function, hasdefault -event / event.stage / legend_normal (char) : NEW required, req_default: function, hasdefault +event / event.stage / fold (boolean) : NEW hasdefault: default +event / event.stage / legend_blocked (char) : NEW required, hasdefault: default +event / event.stage / legend_done (char) : NEW required, hasdefault: default +event / event.stage / legend_normal (char) : NEW required, hasdefault: default event / event.stage / name (char) : NEW required -event / event.stage / pipe_end (boolean) : NEW hasdefault -event / event.stage / sequence (integer) : NEW hasdefault +event / event.stage / pipe_end (boolean) : NEW hasdefault: default +event / event.stage / sequence (integer) : NEW hasdefault: default event / event.tag / category_id (many2one) : NEW relation: event.tag.category, required -event / event.tag / color (integer) : NEW hasdefault +event / event.tag / color (integer) : NEW hasdefault: default event / event.tag / name (char) : NEW required -event / event.tag / sequence (integer) : NEW hasdefault +event / event.tag / sequence (integer) : NEW hasdefault: default event / event.tag.category / name (char) : NEW required -event / event.tag.category / sequence (integer) : NEW hasdefault +event / event.tag.category / sequence (integer) : NEW hasdefault: default event / event.tag.category / tag_ids (one2many) : NEW relation: event.tag event / event.type / default_hashtag (char) : DEL event / event.type / default_registration_max (integer): DEL event / event.type / default_registration_min (integer): DEL -event / event.type / event_type_mail_ids (one2many): now a function -event / event.type / event_type_ticket_ids (one2many): NEW relation: event.type.ticket, isfunction: function, stored +event / event.type / event_type_ticket_ids (one2many): NEW relation: event.type.ticket, hasdefault: compute event / event.type / is_online (boolean) : DEL -event / event.type / seats_max (integer) : NEW isfunction: function, stored +event / event.type / seats_max (integer) : NEW hasdefault: compute event / event.type / tag_ids (many2many) : NEW relation: event.tag event / event.type / use_hashtag (boolean) : DEL event / event.type / use_ticket (boolean) : NEW event / event.type.ticket / description (text) : NEW event / event.type.ticket / event_type_id (many2one) : NEW relation: event.type, required -event / event.type.ticket / name (char) : NEW required, req_default: function, hasdefault +event / event.type.ticket / name (char) : NEW required, hasdefault: default event / event.type.ticket / seats_limited (boolean) : NEW isfunction: function, stored event / event.type.ticket / seats_max (integer) : NEW ---XML records in module 'event'--- diff --git a/openupgrade_scripts/scripts/event_crm/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/event_crm/14.0.1.0/upgrade_analysis.txt index f81b8faa496c..31664c46bc31 100644 --- a/openupgrade_scripts/scripts/event_crm/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/event_crm/14.0.1.0/upgrade_analysis.txt @@ -5,17 +5,17 @@ event_crm / crm.lead / event_id (many2one) : NEW re event_crm / crm.lead / event_lead_rule_id (many2one) : NEW relation: event.lead.rule event_crm / crm.lead / registration_ids (many2many) : NEW relation: event.registration event_crm / event.event / lead_ids (one2many) : NEW relation: crm.lead -event_crm / event.lead.rule / active (boolean) : NEW hasdefault +event_crm / event.lead.rule / active (boolean) : NEW hasdefault: default event_crm / event.lead.rule / company_id (many2one) : NEW relation: res.company event_crm / event.lead.rule / event_id (many2one) : NEW relation: event.event event_crm / event.lead.rule / event_registration_filter (text): NEW event_crm / event.lead.rule / event_type_ids (many2many) : NEW relation: event.type -event_crm / event.lead.rule / lead_creation_basis (selection): NEW required, selection_keys: ['attendee', 'order'], req_default: function, hasdefault -event_crm / event.lead.rule / lead_creation_trigger (selection): NEW required, selection_keys: ['confirm', 'create', 'done'], req_default: function, hasdefault +event_crm / event.lead.rule / lead_creation_basis (selection): NEW required, selection_keys: ['attendee', 'order'], hasdefault: default +event_crm / event.lead.rule / lead_creation_trigger (selection): NEW required, selection_keys: ['confirm', 'create', 'done'], hasdefault: default event_crm / event.lead.rule / lead_ids (one2many) : NEW relation: crm.lead event_crm / event.lead.rule / lead_sales_team_id (many2one) : NEW relation: crm.team event_crm / event.lead.rule / lead_tag_ids (many2many) : NEW relation: crm.tag -event_crm / event.lead.rule / lead_type (selection) : NEW required, selection_keys: ['lead', 'opportunity'], req_default: function, hasdefault +event_crm / event.lead.rule / lead_type (selection) : NEW required, selection_keys: ['lead', 'opportunity'], hasdefault: default event_crm / event.lead.rule / lead_user_id (many2one) : NEW relation: res.users event_crm / event.lead.rule / name (char) : NEW required event_crm / event.registration / lead_ids (many2many) : NEW relation: crm.lead diff --git a/openupgrade_scripts/scripts/event_sale/14.0.1.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/event_sale/14.0.1.2/upgrade_analysis.txt index 3d604dbf7a11..27f47c9a6ae3 100644 --- a/openupgrade_scripts/scripts/event_sale/14.0.1.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/event_sale/14.0.1.2/upgrade_analysis.txt @@ -2,21 +2,20 @@ model event.event.ticket (moved to event) ---Fields in module 'event_sale'--- event_sale / event.event / event_ticket_ids (one2many) : module is now 'event' ('event_sale') -event_sale / event.event / event_ticket_ids (one2many) : now a function event_sale / event.event / sale_order_lines_ids (one2many): NEW relation: sale.order.line event_sale / event.event.ticket / __last_update (datetime) : module is now 'event' ('event_sale') event_sale / event.event.ticket / _order : module is now 'event' ('event_sale') event_sale / event.event.ticket / company_id (many2one) : module is now 'event' ('event_sale') event_sale / event.event.ticket / deadline (date) : DEL +event_sale / event.event.ticket / description (False) : NEW mode: modify, hasdefault: compute event_sale / event.event.ticket / display_name (char) : module is now 'event' ('event_sale') event_sale / event.event.ticket / event_id (many2one) : module is now 'event' ('event_sale') event_sale / event.event.ticket / event_id (many2one) : now required event_sale / event.event.ticket / event_type_id (many2one) : module is now 'event' ('event_sale') event_sale / event.event.ticket / is_expired (boolean) : module is now 'event' ('event_sale') event_sale / event.event.ticket / name (char) : module is now 'event' ('event_sale') -event_sale / event.event.ticket / price (float) : now a function event_sale / event.event.ticket / registration_ids (one2many) : module is now 'event' ('event_sale') -event_sale / event.event.ticket / seats_availability (selection): DEL required, selection_keys: ['limited', 'unlimited'], req_default: function +event_sale / event.event.ticket / seats_availability (selection): DEL required, selection_keys: ['limited', 'unlimited'] event_sale / event.event.ticket / seats_available (integer) : module is now 'event' ('event_sale') event_sale / event.event.ticket / seats_max (integer) : module is now 'event' ('event_sale') event_sale / event.event.ticket / seats_reserved (integer) : module is now 'event' ('event_sale') @@ -27,10 +26,14 @@ event_sale / event.registration / event_ticket_id (many2one) : module event_sale / event.registration / is_paid (boolean) : NEW event_sale / event.registration / medium_id (many2one) : DEL relation: utm.medium event_sale / event.registration / source_id (many2one) : DEL relation: utm.source +event_sale / event.registration / utm_campaign_id (False) : NEW mode: modify, hasdefault: compute +event_sale / event.registration / utm_medium_id (False) : NEW mode: modify, hasdefault: compute +event_sale / event.registration / utm_source_id (False) : NEW mode: modify, hasdefault: compute event_sale / event.type / event_ticket_ids (one2many) : DEL relation: event.event.ticket event_sale / event.type / use_ticketing (boolean) : DEL -event_sale / event.type.ticket / price (float) : NEW isfunction: function, stored -event_sale / event.type.ticket / product_id (many2one) : NEW relation: product.product, required, req_default: function, hasdefault +event_sale / event.type.ticket / description (False) : NEW mode: modify, hasdefault: compute +event_sale / event.type.ticket / price (float) : NEW hasdefault: compute +event_sale / event.type.ticket / product_id (many2one) : NEW relation: product.product, required, hasdefault: default ---XML records in module 'event_sale'--- DEL event.type: event_sale.event_type_data_sale (noupdate) NEW ir.model.access: event_sale.access_event_event_configurator diff --git a/openupgrade_scripts/scripts/fetchmail_outlook/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/fetchmail_outlook/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..751a4036e687 --- /dev/null +++ b/openupgrade_scripts/scripts/fetchmail_outlook/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,4 @@ +---Models in module 'fetchmail_outlook'--- +---Fields in module 'fetchmail_outlook'--- +---XML records in module 'fetchmail_outlook'--- +---nothing has changed in this module-- diff --git a/openupgrade_scripts/scripts/fleet/14.0.0.1/noupdate_changes.xml b/openupgrade_scripts/scripts/fleet/14.0.0.1/noupdate_changes.xml index dddab20ea0fc..22b05321ff96 100644 --- a/openupgrade_scripts/scripts/fleet/14.0.0.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/fleet/14.0.0.1/noupdate_changes.xml @@ -9,7 +9,17 @@ 4 + + [('company_id', 'in', company_ids + [False])] + + + [('company_id', 'in', company_ids + [False])] + + + [('vehicle_id.company_id', 'in', company_ids + [False])] + + [('company_id', 'in', company_ids + [False])] diff --git a/openupgrade_scripts/scripts/fleet/14.0.0.1/post-migration.py b/openupgrade_scripts/scripts/fleet/14.0.0.1/post-migration.py index 2e98e861190d..fd0f31018aa1 100644 --- a/openupgrade_scripts/scripts/fleet/14.0.0.1/post-migration.py +++ b/openupgrade_scripts/scripts/fleet/14.0.0.1/post-migration.py @@ -48,6 +48,29 @@ def fill_fleet_vehicle_log_services_fields(env): ) +def fill_fleet_vehicle_log_contract_service_ids(env): + openupgrade.logged_query( + env.cr, + """ + INSERT INTO fleet_service_type_fleet_vehicle_log_contract_rel + (fleet_vehicle_log_contract_id, fleet_service_type_id) + SELECT fvlc.id, fvc.cost_subtype_id + FROM fleet_vehicle_log_contract fvlc + JOIN fleet_vehicle_cost fvc ON fvc.parent_id = fvlc.cost_id + WHERE fvc.cost_subtype_id IS NOT NULL + """, + ) + + +def set_fleet_vehicle_log_services_state(env): + """Set all records to 'done', as it was the supposed option in v13 and the ORM + default 'todo' is not suitable. + """ + openupgrade.logged_query( + env.cr, "UPDATE fleet_vehicle_log_services SET state = 'done'" + ) + + def map_fleet_vehicle_log_contract_state(env): openupgrade.map_values( env.cr, @@ -60,7 +83,7 @@ def map_fleet_vehicle_log_contract_state(env): def delete_domain_from_view(env): view = env.ref("fleet.fleet_vehicle_service_types_action") - view.domain = None + view.domain = False def recompute_fleet_vehicle_log_contract_name(env): @@ -130,10 +153,19 @@ def set_module_viin_fleet_to_install(env): """ ) + @openupgrade.migrate() def migrate(env, version): fill_fleet_vehicle_log_contract_fields(env) fill_fleet_vehicle_log_services_fields(env) + # Move data from fleet_vehicle_cost and fleet_vehicle_log_fuel to + # fleet_vehicle_log_services: after the fill above (it would reset the + # service_type_id of the moved rows) and before setting the state (the moved + # v13 costs are 'done' too) + _move_data_from_cost_to_service(env) + _move_data_from_fuel_to_service(env) + fill_fleet_vehicle_log_contract_service_ids(env) + set_fleet_vehicle_log_services_state(env) map_fleet_vehicle_log_contract_state(env) delete_domain_from_view(env) openupgrade.load_data(env.cr, "fleet", "14.0.0.1/noupdate_changes.xml") @@ -150,9 +182,5 @@ def migrate(env, version): ) recompute_fleet_vehicle_log_contract_name(env) - # Move data from fleet_vehicle_cost and fleet_vehicle_log_fuel to fleet_vehicle_log_services - _move_data_from_cost_to_service(env) - _move_data_from_fuel_to_service(env) - # Install viin_fleet module set_module_viin_fleet_to_install(env) diff --git a/openupgrade_scripts/scripts/fleet/14.0.0.1/pre-migration.py b/openupgrade_scripts/scripts/fleet/14.0.0.1/pre-migration.py index 2693c805aa45..97561750cec2 100644 --- a/openupgrade_scripts/scripts/fleet/14.0.0.1/pre-migration.py +++ b/openupgrade_scripts/scripts/fleet/14.0.0.1/pre-migration.py @@ -9,3 +9,6 @@ def migrate(env, version): env.cr, {"fleet_vehicle_log_contract": [("state", None, None), ("name", None, None)]}, ) + openupgrade.remove_tables_fks( + env.cr, ["fleet_vehicle_cost", "fleet_vehicle_log_fuel"] + ) diff --git a/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis.txt index 7578f3027e85..32961a58888a 100644 --- a/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis.txt @@ -7,14 +7,13 @@ fleet / fleet.vehicle / description (text) : NEW fleet / fleet.vehicle / log_fuel (one2many) : DEL relation: fleet.vehicle.log.fuel fleet / fleet.vehicle / manager_id (many2one) : is now stored fleet / fleet.vehicle / manager_id (many2one) : not related anymore -fleet / fleet.vehicle / manager_id (many2one) : now a function fleet / fleet.vehicle.cost / amount (float) : DEL fleet / fleet.vehicle.cost / auto_generated (boolean) : DEL fleet / fleet.vehicle.cost / company_id (many2one) : DEL relation: res.company fleet / fleet.vehicle.cost / contract_id (many2one) : DEL relation: fleet.vehicle.log.contract fleet / fleet.vehicle.cost / cost_ids (one2many) : DEL relation: fleet.vehicle.cost fleet / fleet.vehicle.cost / cost_subtype_id (many2one) : DEL relation: fleet.service.type -fleet / fleet.vehicle.cost / cost_type (selection) : DEL required, selection_keys: ['contract', 'fuel', 'other', 'services'], req_default: function +fleet / fleet.vehicle.cost / cost_type (selection) : DEL required, selection_keys: ['contract', 'fuel', 'other', 'services'] fleet / fleet.vehicle.cost / date (date) : DEL fleet / fleet.vehicle.cost / description (char) : DEL fleet / fleet.vehicle.cost / name (char) : DEL @@ -51,7 +50,7 @@ fleet / fleet.vehicle.log.fuel / price_per_liter (float) : DEL fleet / fleet.vehicle.log.fuel / purchaser_id (many2one) : DEL relation: res.partner fleet / fleet.vehicle.log.fuel / vendor_id (many2one) : DEL relation: res.partner fleet / fleet.vehicle.log.services / _inherits : DEL _inherits: {'fleet.vehicle.cost': 'cost_id'} -fleet / fleet.vehicle.log.services / active (boolean) : NEW hasdefault +fleet / fleet.vehicle.log.services / active (boolean) : NEW hasdefault: default fleet / fleet.vehicle.log.services / activity_ids (one2many) : NEW relation: mail.activity fleet / fleet.vehicle.log.services / amount (float) : is now stored fleet / fleet.vehicle.log.services / amount (float) : not related anymore @@ -70,13 +69,12 @@ fleet / fleet.vehicle.log.services / odometer (float) : not fleet / fleet.vehicle.log.services / odometer (float) : now a function fleet / fleet.vehicle.log.services / odometer_id (many2one) : is now stored fleet / fleet.vehicle.log.services / odometer_id (many2one) : not related anymore -fleet / fleet.vehicle.log.services / purchaser_id (many2one) : now a function -fleet / fleet.vehicle.log.services / service_type_id (many2one) : NEW relation: fleet.service.type, required, req_default: function, hasdefault -fleet / fleet.vehicle.log.services / state (selection) : NEW selection_keys: ['cancelled', 'done', 'running', 'todo'], hasdefault +fleet / fleet.vehicle.log.services / service_type_id (many2one) : NEW relation: fleet.service.type, required, hasdefault: default +fleet / fleet.vehicle.log.services / state (selection) : NEW selection_keys: ['cancelled', 'done', 'running', 'todo'], hasdefault: default fleet / fleet.vehicle.log.services / vehicle_id (many2one) : is now stored fleet / fleet.vehicle.log.services / vehicle_id (many2one) : not related anymore -fleet / fleet.vehicle.model / active (boolean) : NEW hasdefault -fleet / fleet.vehicle.model / vehicle_type (selection) : NEW required, selection_keys: ['bike', 'car'], req_default: function, hasdefault +fleet / fleet.vehicle.model / active (boolean) : NEW hasdefault: default +fleet / fleet.vehicle.model / vehicle_type (selection) : NEW required, selection_keys: ['bike', 'car'], hasdefault: default fleet / fleet.vehicle.model.brand / _order : _order is now 'model_count desc, name asc' ('name asc') fleet / fleet.vehicle.model.brand / model_count (integer) : NEW isfunction: function, stored fleet / fleet.vehicle.model.brand / model_ids (one2many) : NEW relation: fleet.vehicle.model diff --git a/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis_work.txt index 02dc3dab61de..174dff9c7b05 100644 --- a/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/fleet/14.0.0.1/upgrade_analysis_work.txt @@ -1,6 +1,4 @@ ---Models in module 'fleet'--- -obsolete model fleet.vehicle.cost -obsolete model fleet.vehicle.log.fuel new model fleet.vehicle.cost.report [sql_view] # NOTHING TO DO @@ -14,6 +12,7 @@ fleet / fleet.vehicle / manager_id (many2one) : not re fleet / fleet.vehicle / manager_id (many2one) : now a function # NOTHING TO DO: computed in load +obsolete model fleet.vehicle.cost fleet / fleet.vehicle.log.contract / _inherits : DEL _inherits: {'fleet.vehicle.cost': 'cost_id'} fleet / fleet.vehicle.log.contract / cost_id (many2one) : DEL relation: fleet.vehicle.cost, required fleet / fleet.vehicle.log.services / _inherits : DEL _inherits: {'fleet.vehicle.cost': 'cost_id'} @@ -28,7 +27,6 @@ fleet / fleet.vehicle.log.contract / company_id (many2one) : is n fleet / fleet.vehicle.log.contract / company_id (many2one) : not related anymore fleet / fleet.vehicle.log.services / company_id (many2one) : is now stored fleet / fleet.vehicle.log.services / company_id (many2one) : not related anymore -fleet / fleet.vehicle.cost / cost_subtype_id (many2one) : DEL relation: fleet.service.type fleet / fleet.vehicle.log.contract / cost_subtype_id (many2one) : is now stored fleet / fleet.vehicle.log.contract / cost_subtype_id (many2one) : not related anymore fleet / fleet.vehicle.log.services / service_type_id (many2one) : NEW relation: fleet.service.type, required, req_default: function, hasdefault @@ -48,15 +46,12 @@ fleet / fleet.vehicle.log.contract / vehicle_id (many2one) : is n fleet / fleet.vehicle.log.contract / vehicle_id (many2one) : not related anymore fleet / fleet.vehicle.log.services / vehicle_id (many2one) : is now stored fleet / fleet.vehicle.log.services / vehicle_id (many2one) : not related anymore -# DONE: post-migration: filled log contract and log services from vehicle cost - fleet / fleet.vehicle.cost / auto_generated (boolean) : DEL -fleet / fleet.vehicle.cost / contract_id (many2one) : DEL relation: fleet.vehicle.log.contract -fleet / fleet.vehicle.cost / cost_ids (one2many) : DEL relation: fleet.vehicle.cost fleet / fleet.vehicle.cost / cost_type (selection) : DEL required, selection_keys: ['contract', 'fuel', 'other', 'services'], req_default: function fleet / fleet.vehicle.cost / name (char) : DEL fleet / fleet.vehicle.cost / parent_id (many2one) : DEL relation: fleet.vehicle.cost -# NOTHING TO DO: obsolete model +# DONE: post-migration: filled log contract and log services from vehicle cost +# DONE: post-migration: moved the vehicle costs of type 'other' to log services (new service type 'Other' when they have no cost subtype) fleet / fleet.vehicle.log.contract / name (text) : type is now 'char' ('text') # DONE: post-migration: recomputed, because now name is calculated differently @@ -66,12 +61,18 @@ fleet / fleet.vehicle.log.contract / generated_cost_ids (one2many) : DEL fleet / fleet.vehicle.log.contract / odometer (float) : DEL fleet / fleet.vehicle.log.contract / purchaser_id (many2one) : not stored anymore fleet / fleet.vehicle.log.contract / purchaser_id (many2one) : now related -fleet / fleet.vehicle.log.contract / service_ids (many2many) : NEW relation: fleet.service.type # NOTHING TO DO +fleet / fleet.vehicle.cost / cost_ids (one2many) : DEL relation: fleet.vehicle.cost +fleet / fleet.vehicle.cost / contract_id (many2one) : DEL relation: fleet.vehicle.log.contract +fleet / fleet.vehicle.log.contract / service_ids (many2many) : NEW relation: fleet.service.type +fleet / fleet.vehicle.cost / cost_subtype_id (many2one) : DEL relation: fleet.service.type +# DONE: post-migration: Fill service_ids from cost_ids.cost_subtype_id + fleet / fleet.vehicle.log.contract / state (selection) : selection_keys is now '['closed', 'expired', 'futur', 'open']' ('['closed', 'diesoon', 'expired', 'futur', 'open']') # DONE: post-migration: mapped 'diesoon' to 'open' +obsolete model fleet.vehicle.log.fuel fleet / fleet.vehicle.log.fuel / _inherits : DEL _inherits: {'fleet.vehicle.cost': 'cost_id'} fleet / fleet.vehicle.log.fuel / cost_amount (float) : DEL fleet / fleet.vehicle.log.fuel / cost_id (many2one) : DEL relation: fleet.vehicle.cost, required @@ -81,7 +82,8 @@ fleet / fleet.vehicle.log.fuel / notes (text) : DEL fleet / fleet.vehicle.log.fuel / price_per_liter (float) : DEL fleet / fleet.vehicle.log.fuel / purchaser_id (many2one) : DEL relation: res.partner fleet / fleet.vehicle.log.fuel / vendor_id (many2one) : DEL relation: res.partner -# NOTHING TO DO: obsolete model +# DONE: post-migration: moved the fuel logs to log services (new service type 'Refueling' when they have no cost subtype) and set viin_fleet to install +# DONE: end-migration: filled quantity and price_unit (viin_fleet) of those log services from liter and price_per_liter fleet / fleet.vehicle.log.services / activity_ids (one2many) : NEW relation: mail.activity fleet / fleet.vehicle.log.services / message_follower_ids (one2many): NEW relation: mail.followers @@ -93,15 +95,17 @@ fleet / fleet.vehicle.log.services / odometer (float) : not fleet / fleet.vehicle.log.services / odometer (float) : now a function # NOTHING TO DO: non stored field -fleet / fleet.vehicle.log.services / active (boolean) : NEW hasdefault fleet / fleet.vehicle.log.services / cost_amount (float) : DEL fleet / fleet.vehicle.log.services / purchaser_id (many2one) : now a function -fleet / fleet.vehicle.log.services / state (selection) : NEW selection_keys: ['cancelled', 'done', 'running', 'todo'], hasdefault # NOTHING TO DO +fleet / fleet.vehicle.log.services / state (selection) : NEW selection_keys: ['cancelled', 'done', 'running', 'todo'], hasdefault +# DONE: post-migration: Set all of them as 'done', as it was the supposed option in v13 and the ORM default 'todo' is not suitable + +fleet / fleet.vehicle.log.services / active (boolean) : NEW hasdefault fleet / fleet.vehicle.model / active (boolean) : NEW hasdefault fleet / fleet.vehicle.model / vehicle_type (selection) : NEW required, selection_keys: ['bike', 'car'], req_default: function, hasdefault -# NOTHING TO DO +# NOTHING TO DO: Defaults are sane fleet / fleet.vehicle.model.brand / _order : _order is now 'model_count desc, name asc' ('name asc') fleet / fleet.vehicle.model.brand / model_count (integer) : NEW isfunction: function, stored diff --git a/openupgrade_scripts/scripts/gamification/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/gamification/14.0.1.0/upgrade_analysis.txt index 4fe50400deb0..4c228c27158d 100644 --- a/openupgrade_scripts/scripts/gamification/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/gamification/14.0.1.0/upgrade_analysis.txt @@ -1,13 +1,13 @@ ---Models in module 'gamification'--- new model gamification.karma.tracking ---Fields in module 'gamification'--- -gamification / gamification.challenge / category (selection) : DEL required, selection_keys: ['hr', 'other'], req_default: function -gamification / gamification.challenge / challenge_category (selection): NEW required, selection_keys: ['hr', 'other'], req_default: function, hasdefault -gamification / gamification.karma.rank / karma_min (integer) : now required, req_default: function +gamification / gamification.challenge / category (selection) : DEL required, selection_keys: ['hr', 'other'] +gamification / gamification.challenge / challenge_category (selection): NEW required, selection_keys: ['hr', 'other'], hasdefault: default +gamification / gamification.karma.rank / karma_min (integer) : now required gamification / gamification.karma.tracking / consolidated (boolean) : NEW gamification / gamification.karma.tracking / new_value (integer) : NEW required gamification / gamification.karma.tracking / old_value (integer) : NEW required -gamification / gamification.karma.tracking / tracking_date (date) : NEW hasdefault +gamification / gamification.karma.tracking / tracking_date (date) : NEW hasdefault: default gamification / gamification.karma.tracking / user_id (many2one) : NEW relation: res.users, required gamification / res.users / karma_tracking_ids (one2many) : NEW relation: gamification.karma.tracking ---XML records in module 'gamification'--- diff --git a/openupgrade_scripts/scripts/google_account/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/google_account/14.0.1.0/upgrade_analysis_work.txt index 839d4a73536f..aeea586983ef 100644 --- a/openupgrade_scripts/scripts/google_account/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/google_account/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'google_account'--- ---XML records in module 'google_account'--- ---nothing has changed in this module-- -NOTHING TO DO \ No newline at end of file +NOTHING TO DO diff --git a/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis.txt index f131514f9c8c..8baec2e5bf69 100644 --- a/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis.txt @@ -5,12 +5,12 @@ new model google.calendar.sync [abstract] ---Fields in module 'google_calendar'--- google_calendar / calendar.attendee / google_internal_event_id (char): DEL google_calendar / calendar.attendee / oe_synchro_date (datetime) : DEL -google_calendar / calendar.event / google_id (char) : NEW isfunction: function, stored -google_calendar / calendar.event / need_sync (boolean) : NEW hasdefault +google_calendar / calendar.event / google_id (char) : NEW hasdefault: compute +google_calendar / calendar.event / need_sync (boolean) : NEW hasdefault: default google_calendar / calendar.event / oe_update_date (datetime) : DEL -google_calendar / calendar.recurrence / active (boolean) : NEW hasdefault +google_calendar / calendar.recurrence / active (boolean) : NEW hasdefault: default google_calendar / calendar.recurrence / google_id (char) : NEW -google_calendar / calendar.recurrence / need_sync (boolean) : NEW hasdefault +google_calendar / calendar.recurrence / need_sync (boolean) : NEW hasdefault: default google_calendar / res.users / google_calendar_last_sync_date (datetime): DEL google_calendar / res.users / google_calendar_sync_token (char): NEW ---XML records in module 'google_calendar'--- diff --git a/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis_work.txt index 550cf377ddf2..7747d691c82f 100644 --- a/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/google_calendar/14.0.1.0/upgrade_analysis_work.txt @@ -41,4 +41,4 @@ DEL ir.model.access: google_calendar.access_google_calendar_all NEW ir.ui.view: google_calendar.google_calendar_reset_account_view_form NEW ir.ui.view: google_calendar.qunit_mobile_suite NEW ir.ui.view: google_calendar.view_google_calendar_event -# NOTHING TO DO: new noupdate=0 internal stuff records \ No newline at end of file +# NOTHING TO DO: new noupdate=0 internal stuff records diff --git a/openupgrade_scripts/scripts/hr/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/hr/14.0.1.1/noupdate_changes.xml index 80f0b8e9dd54..4aaa3aee27c2 100644 --- a/openupgrade_scripts/scripts/hr/14.0.1.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr/14.0.1.1/noupdate_changes.xml @@ -3,16 +3,20 @@ - - - - + + [('company_id', 'in', company_ids + [False])] + + + + [('company_id', 'in', company_ids + [False])] + + + + + [('company_id', 'in', company_ids + [False])] + + + [('company_id', 'in', company_ids + [False])] + + diff --git a/openupgrade_scripts/scripts/hr/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr/14.0.1.1/upgrade_analysis.txt index 499dd6f84518..52d175ff1dab 100644 --- a/openupgrade_scripts/scripts/hr/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr/14.0.1.1/upgrade_analysis.txt @@ -1,14 +1,8 @@ ---Models in module 'hr'--- ---Fields in module 'hr'--- -hr / hr.employee / address_id (many2one) : now a function hr / hr.employee / certificate (selection) : selection_keys is now '['bachelor', 'doctor', 'graduate', 'master', 'other']' ('['bachelor', 'master', 'other']') -hr / hr.employee / coach_id (many2one) : now a function -hr / hr.employee / company_id (many2one) : now required, req_default: function +hr / hr.employee / company_id (many2one) : now required hr / hr.employee / departure_date (date) : NEW -hr / hr.employee / job_title (char) : now a function -hr / hr.employee / parent_id (many2one) : now a function -hr / hr.employee / work_phone (char) : now a function -hr / hr.plan.activity.type / summary (char) : now a function hr / res.users / barcode (char) : module is now 'base' ('hr') ---XML records in module 'hr'--- NEW ir.actions.act_window: hr.hr_department_kanban_action diff --git a/openupgrade_scripts/scripts/hr_contract/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_contract/14.0.1.0/noupdate_changes.xml index 7b7aa0a0002f..6d36525c39c3 100644 --- a/openupgrade_scripts/scripts/hr_contract/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr_contract/14.0.1.0/noupdate_changes.xml @@ -1,8 +1,12 @@ - + + model.with_context(from_cron=True).update_state() + + + [('company_id', 'in', company_ids)] + + diff --git a/openupgrade_scripts/scripts/hr_contract/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_contract/14.0.1.0/upgrade_analysis.txt index f6e79c86f103..a4866a3470f6 100644 --- a/openupgrade_scripts/scripts/hr_contract/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_contract/14.0.1.0/upgrade_analysis.txt @@ -2,16 +2,12 @@ new model hr.payroll.structure.type ---Fields in module 'hr_contract'--- hr_contract / hr.contract / advantages (text) : DEL -hr_contract / hr.contract / company_id (many2one) : now a function -hr_contract / hr.contract / department_id (many2one) : now a function -hr_contract / hr.contract / job_id (many2one) : now a function hr_contract / hr.contract / message_has_sms_error (boolean): module is now 'sms' ('hr_contract') -hr_contract / hr.contract / resource_calendar_id (many2one): now a function hr_contract / hr.contract / structure_type_id (many2one) : NEW relation: hr.payroll.structure.type hr_contract / hr.contract / website_message_ids (one2many): module is now 'portal' ('hr_contract') hr_contract / hr.employee / medic_exam (date) : DEL -hr_contract / hr.payroll.structure.type / country_id (many2one) : NEW relation: res.country, hasdefault -hr_contract / hr.payroll.structure.type / default_resource_calendar_id (many2one): NEW relation: resource.calendar, hasdefault +hr_contract / hr.payroll.structure.type / country_id (many2one) : NEW relation: res.country, hasdefault: default +hr_contract / hr.payroll.structure.type / default_resource_calendar_id (many2one): NEW relation: resource.calendar, hasdefault: default hr_contract / hr.payroll.structure.type / name (char) : NEW ---XML records in module 'hr_contract'--- NEW hr.payroll.structure.type: hr_contract.structure_type_employee (noupdate) diff --git a/openupgrade_scripts/scripts/hr_expense/14.0.2.0/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/noupdate_changes.xml new file mode 100644 index 000000000000..7b4f670abaa0 --- /dev/null +++ b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/noupdate_changes.xml @@ -0,0 +1,9 @@ + + + + [('company_id', 'in', company_ids)] + + + [('company_id', 'in', company_ids)] + + diff --git a/openupgrade_scripts/scripts/hr_expense/14.0.2.0/post-migration.py b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/post-migration.py new file mode 100644 index 000000000000..3dcffb91cd43 --- /dev/null +++ b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/post-migration.py @@ -0,0 +1,15 @@ +# Copyright 2023 ForgeFlow +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + product = env.ref("product_product_fixed_cost", raise_if_not_found=False) + if product and product.default_code == "EXP_GEN": + try: + product.default_code = False + except Exception: + # this means default_code is required + product.default_code = "EXP_GEN/1" + openupgrade.load_data(env.cr, "hr_expense", "14.0.2.0/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis.txt index 2796542e4b2d..cd63519be400 100644 --- a/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis.txt @@ -1,20 +1,13 @@ ---Models in module 'hr_expense'--- obsolete model hr.expense.sheet.register.payment.wizard [transient] ---Fields in module 'hr_expense'--- -hr_expense / hr.employee / expense_manager_id (many2one) : now a function -hr_expense / hr.expense / account_id (many2one) : now a function hr_expense / hr.expense / accounting_date (date) : NEW isrelated: related, stored -hr_expense / hr.expense / employee_id (many2one) : now a function hr_expense / hr.expense / name (char) : now a function hr_expense / hr.expense / product_uom_id (many2one) : now a function hr_expense / hr.expense / sample (boolean) : NEW -hr_expense / hr.expense / tax_ids (many2many) : now a function hr_expense / hr.expense / unit_amount (float) : now a function -hr_expense / hr.expense.sheet / address_id (many2one) : now a function hr_expense / hr.expense.sheet / amount_residual (float) : NEW isfunction: function, stored -hr_expense / hr.expense.sheet / department_id (many2one) : now a function hr_expense / hr.expense.sheet / user_id (many2one) : now a function -hr_expense / product.template / can_be_expensed (boolean) : now a function ---XML records in module 'hr_expense'--- NEW digest.tip: hr_expense.digest_tip_hr_expense_0 NEW ir.actions.act_window: hr_expense.action_hr_expense_account diff --git a/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..10497c2d6cdb --- /dev/null +++ b/openupgrade_scripts/scripts/hr_expense/14.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,63 @@ +---Models in module 'hr_expense'--- +obsolete model hr.expense.sheet.register.payment.wizard [transient] +---Fields in module 'hr_expense'--- +hr_expense / hr.employee / expense_manager_id (many2one) : now a function +hr_expense / hr.expense / account_id (many2one) : now a function +hr_expense / hr.expense / accounting_date (date) : NEW isrelated: related, stored +hr_expense / hr.expense / employee_id (many2one) : now a function +hr_expense / hr.expense / name (char) : now a function +hr_expense / hr.expense / product_uom_id (many2one) : now a function +hr_expense / hr.expense / sample (boolean) : NEW +hr_expense / hr.expense / tax_ids (many2many) : now a function +hr_expense / hr.expense / unit_amount (float) : now a function +hr_expense / hr.expense.sheet / address_id (many2one) : now a function +hr_expense / hr.expense.sheet / amount_residual (float) : NEW isfunction: function, stored +hr_expense / hr.expense.sheet / department_id (many2one) : now a function +hr_expense / hr.expense.sheet / user_id (many2one) : now a function +hr_expense / product.template / can_be_expensed (boolean) : now a function +# NOTHING TO DO: handled by ORM +---XML records in module 'hr_expense'--- +NEW digest.tip: hr_expense.digest_tip_hr_expense_0 +NEW ir.actions.act_window: hr_expense.action_hr_expense_account +NEW ir.actions.act_window: hr_expense.action_hr_expense_sheet_all +NEW ir.actions.act_window: hr_expense.hr_expense_actions_my_all +DEL ir.actions.act_window: hr_expense.action_approved_expense +DEL ir.actions.act_window: hr_expense.action_request_approve_expense_sheet +DEL ir.actions.act_window: hr_expense.action_request_to_pay_expense_sheet +DEL ir.actions.act_window: hr_expense.action_request_to_post_expense_sheet +DEL ir.actions.act_window: hr_expense.action_unsubmitted_expense +DEL ir.actions.act_window: hr_expense.hr_expense_action +DEL ir.actions.act_window: hr_expense.hr_expense_sheet_register_payment_wizard_action +NEW ir.actions.act_window.view: hr_expense.action_hr_expense_sheet_my_all_kanban +NEW ir.actions.act_window.view: hr_expense.action_hr_expense_sheet_my_all_tree +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_all_graph +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_all_kanban +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_all_pivot +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_all_tree +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_my_all_kanban +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_my_all_tree +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_my_unsubmitted_kanban +NEW ir.actions.act_window.view: hr_expense.hr_expense_actions_my_unsubmitted_tree +NEW ir.actions.server: hr_expense.action_expense_sheet_register_payment +NEW ir.actions.server: hr_expense.hr_expense_sheet_approve_action_server +NEW ir.actions.server: hr_expense.hr_expense_sheet_post_action_server +NEW ir.model.access: hr_expense.access_hr_expense_refuse_wizard +DEL ir.model.access: hr_expense.access_account_invoice_line_user +DEL ir.model.access: hr_expense.access_account_invoice_user +NEW ir.rule: hr_expense.hr_expense_team_approver_account_move_line_rule (noupdate) +# NOTHING TO DO +NEW ir.ui.menu: hr_expense.menu_hr_expense_account_employee_expenses +NEW ir.ui.menu: hr_expense.menu_hr_expense_my_expenses_all +NEW ir.ui.menu: hr_expense.menu_hr_expense_sheet_all +NEW ir.ui.view: hr_expense.hr_expense_kanban_view_header +NEW ir.ui.view: hr_expense.hr_expense_view_expenses_analysis_kanban +NEW ir.ui.view: hr_expense.hr_expense_view_expenses_analysis_tree +NEW ir.ui.view: hr_expense.view_employee_tree_inherit_expense +NEW ir.ui.view: hr_expense.view_hr_expense_sheet_dashboard_tree +NEW ir.ui.view: hr_expense.view_hr_expense_sheet_dashboard_tree_header +NEW ir.ui.view: hr_expense.view_hr_expense_sheet_kanban_header +NEW ir.ui.view: hr_expense.view_hr_expense_sheet_kanban_no_header +NEW ir.ui.view: hr_expense.view_my_expenses_tree +DEL ir.ui.view: hr_expense.hr_expense_sheet_register_payment_view_form +DEL ir.ui.view: hr_expense_check.hr_expense_register_payment_view_form_check_inherit +NEW product.product: hr_expense.product_product_fixed_cost (noupdate) diff --git a/openupgrade_scripts/scripts/hr_gamification/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_gamification/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..2d62ffeef38e --- /dev/null +++ b/openupgrade_scripts/scripts/hr_gamification/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'hr_gamification'--- +---Fields in module 'hr_gamification'--- +---XML records in module 'hr_gamification'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/end-migration.py b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/end-migration.py new file mode 100644 index 000000000000..1691c8a6544b --- /dev/null +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/end-migration.py @@ -0,0 +1,13 @@ +# Copyright (C) 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + + +def recompute_duration_display(env): + # We need to recomupte it once all has been migrated + env["hr.leave"].search([])._compute_duration_display() + + +@openupgrade.migrate() +def migrate(env, version): + recompute_duration_display(env) diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml index 75fd9bd4246e..ffb4f03ae8cc 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml @@ -19,9 +19,10 @@ both both --> - + + [('company_id', 'in', company_ids + [False])] + + [ '|', @@ -44,6 +45,9 @@ Allocations: base.group_user create/write + + [('holiday_status_id.company_id', 'in', company_ids + [False])] + [ ('holiday_type', '=', 'employee'), @@ -57,9 +61,10 @@ ] Allocations: holiday user : create/write - + + [('holiday_status_id.company_id', 'in', company_ids + [False])] + + diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py index def657e703ef..e462af73fa38 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py @@ -13,11 +13,23 @@ ("hr.leave.type", "hr_leave_type", "validation_type", "leave_validation_type"), ] +_field_spec = [ + ( + "duration_display", + "hr.leave", + "hr_leave", + "char", + False, + "hr_holidays", + ) +] + @openupgrade.migrate() def migrate(env, version): openupgrade.copy_columns(env.cr, _column_copies) openupgrade.rename_fields(env, _field_renames) + openupgrade.add_fields(env, _field_spec) openupgrade.set_xml_ids_noupdate_value( env, "hr_holidays", diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis.txt index 643a7d863833..23438c3861d5 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis.txt @@ -1,46 +1,24 @@ ---Models in module 'hr_holidays'--- ---Fields in module 'hr_holidays'--- hr_holidays / hr.employee / hr_icon_display (False) : NEW selection_keys: ['presence_absent', 'presence_absent_active', 'presence_holiday_absent', 'presence_holiday_present', 'presence_present', 'presence_to_define', 'presence_undetermined'], mode: modify -hr_holidays / hr.employee / leave_manager_id (many2one) : now a function hr_holidays / hr.leave / category_id (many2one) : now a function -hr_holidays / hr.leave / date_from (datetime) : now a function -hr_holidays / hr.leave / date_to (datetime) : now a function -hr_holidays / hr.leave / department_id (many2one) : now a function hr_holidays / hr.leave / duration_display (char) : is now stored -hr_holidays / hr.leave / employee_id (many2one) : now a function -hr_holidays / hr.leave / holiday_status_id (many2one) : now a function -hr_holidays / hr.leave / manager_id (many2one) : now a function hr_holidays / hr.leave / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') hr_holidays / hr.leave / mode_company_id (many2one) : now a function hr_holidays / hr.leave / name (char) : not stored anymore hr_holidays / hr.leave / name (char) : now a function -hr_holidays / hr.leave / number_of_days (float) : now a function hr_holidays / hr.leave / private_name (char) : NEW -hr_holidays / hr.leave / request_unit_custom (boolean) : now a function -hr_holidays / hr.leave / request_unit_half (boolean) : now a function -hr_holidays / hr.leave / request_unit_hours (boolean) : now a function -hr_holidays / hr.leave / state (selection) : now a function hr_holidays / hr.leave / website_message_ids (one2many): module is now 'portal' ('hr_holidays') -hr_holidays / hr.leave.allocation / category_id (many2one) : now a function -hr_holidays / hr.leave.allocation / date_to (datetime) : now a function hr_holidays / hr.leave.allocation / department_id (many2one) : now a function -hr_holidays / hr.leave.allocation / employee_id (many2one) : now a function -hr_holidays / hr.leave.allocation / holiday_status_id (many2one) : now a function -hr_holidays / hr.leave.allocation / interval_number (integer) : now a function -hr_holidays / hr.leave.allocation / interval_unit (selection) : now a function hr_holidays / hr.leave.allocation / interval_unit (selection) : selection_keys is now '['days', 'months', 'weeks', 'years']' ('['months', 'weeks', 'years']') hr_holidays / hr.leave.allocation / manager_id (many2one) : now a function hr_holidays / hr.leave.allocation / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') -hr_holidays / hr.leave.allocation / mode_company_id (many2one) : now a function hr_holidays / hr.leave.allocation / name (char) : not stored anymore hr_holidays / hr.leave.allocation / name (char) : now a function -hr_holidays / hr.leave.allocation / number_of_days (float) : now a function -hr_holidays / hr.leave.allocation / number_per_interval (float) : now a function hr_holidays / hr.leave.allocation / private_name (char) : NEW -hr_holidays / hr.leave.allocation / unit_per_interval (selection) : now a function hr_holidays / hr.leave.allocation / website_message_ids (one2many): module is now 'portal' ('hr_holidays') -hr_holidays / hr.leave.type / allocation_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager'], hasdefault -hr_holidays / hr.leave.type / leave_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager', 'no_validation'], hasdefault +hr_holidays / hr.leave.type / allocation_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager'], hasdefault: default +hr_holidays / hr.leave.type / leave_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager', 'no_validation'], hasdefault: default hr_holidays / hr.leave.type / validation_type (selection) : DEL selection_keys: ['both', 'hr', 'manager', 'no_validation'] ---XML records in module 'hr_holidays'--- DEL ir.actions.act_window: hr_holidays.hr_leave_action_all diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt index db07be09ba91..5ea5fa65e3da 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt @@ -14,7 +14,11 @@ hr_holidays / hr.leave / category_id (many2one) : now a hr_holidays / hr.leave / date_from (datetime) : now a function hr_holidays / hr.leave / date_to (datetime) : now a function hr_holidays / hr.leave / department_id (many2one) : now a function +# NOTHING TO DO + hr_holidays / hr.leave / duration_display (char) : is now stored +# DONE: pre-migration: create field, end-migration: fill using the compute + hr_holidays / hr.leave / employee_id (many2one) : now a function hr_holidays / hr.leave / holiday_status_id (many2one) : now a function hr_holidays / hr.leave / manager_id (many2one) : now a function diff --git a/openupgrade_scripts/scripts/hr_maintenance/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_maintenance/14.0.1.0/upgrade_analysis.txt index a88f2f97eae3..9878f1722cc7 100644 --- a/openupgrade_scripts/scripts/hr_maintenance/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_maintenance/14.0.1.0/upgrade_analysis.txt @@ -1,6 +1,5 @@ ---Models in module 'hr_maintenance'--- ---Fields in module 'hr_maintenance'--- -hr_maintenance / maintenance.equipment / department_id (many2one) : now a function -hr_maintenance / maintenance.equipment / employee_id (many2one) : now a function +hr_maintenance / maintenance.equipment / assign_date (False) : NEW mode: modify, hasdefault: compute hr_maintenance / maintenance.request / department_id (many2one) : DEL relation: hr.department ---XML records in module 'hr_maintenance'--- diff --git a/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/noupdate_changes.xml index a61db1d37278..0822225424ff 100644 --- a/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/noupdate_changes.xml @@ -149,6 +149,9 @@ + + [('company_id', 'in', company_ids + [False])] + diff --git a/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/upgrade_analysis.txt index 6f32f1647ef8..46611bd98cd8 100644 --- a/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_recruitment/14.0.1.0/upgrade_analysis.txt @@ -2,16 +2,12 @@ new model applicant.get.refuse.reason [transient] new model hr.applicant.refuse.reason ---Fields in module 'hr_recruitment'--- -hr_recruitment / hr.applicant / company_id (many2one) : now a function hr_recruitment / hr.applicant / date_closed (datetime) : now a function -hr_recruitment / hr.applicant / department_id (many2one) : now a function hr_recruitment / hr.applicant / email_from (char) : now a function hr_recruitment / hr.applicant / partner_mobile (char) : now a function hr_recruitment / hr.applicant / partner_phone (char) : now a function hr_recruitment / hr.applicant / refuse_reason_id (many2one) : NEW relation: hr.applicant.refuse.reason -hr_recruitment / hr.applicant / stage_id (many2one) : now a function -hr_recruitment / hr.applicant / user_id (many2one) : now a function -hr_recruitment / hr.applicant.refuse.reason / active (boolean) : NEW hasdefault +hr_recruitment / hr.applicant.refuse.reason / active (boolean) : NEW hasdefault: default hr_recruitment / hr.applicant.refuse.reason / name (char) : NEW required hr_recruitment / hr.employee / applicant_id (one2many) : NEW relation: hr.applicant ---XML records in module 'hr_recruitment'--- diff --git a/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/noupdate_changes.xml index 4806e3c476ff..ea2099030709 100644 --- a/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/noupdate_changes.xml @@ -1,8 +1,12 @@ + Helps you manage the timesheets. 13 @@ -22,12 +26,15 @@ - + --> + [ ('user_id', '=', user.id), diff --git a/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/pre-migration.py index 595903bea3b9..7a699ed82637 100644 --- a/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/pre-migration.py @@ -37,3 +37,8 @@ def migrate(env, version): ], ) _fill_task_overtime(env) + # Remove obsolete view from "hr_timesheet_analysis" module that would + # collide with the new "timesheet_action_view_all_pivot" view + openupgrade.delete_records_safely_by_xml_id( + env, ["hr_timesheet_analysis.act_hr_timesheet_line_view_all_pivot"] + ) diff --git a/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/upgrade_analysis.txt index 63d949bc306a..1e195a7adc2a 100644 --- a/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_timesheet/14.0.1.0/upgrade_analysis.txt @@ -1,9 +1,7 @@ ---Models in module 'hr_timesheet'--- new model project.task.create.timesheet [transient] ---Fields in module 'hr_timesheet'--- -hr_timesheet / account.analytic.line / project_id (many2one) : now a function -hr_timesheet / account.analytic.line / task_id (many2one) : now a function -hr_timesheet / project.project / allow_timesheets (boolean) : now a function +hr_timesheet / account.analytic.line / partner_id (False) : NEW mode: modify, hasdefault: compute hr_timesheet / project.project / timesheet_ids (one2many) : NEW relation: account.analytic.line hr_timesheet / project.task / analytic_account_active (boolean): not related anymore hr_timesheet / project.task / analytic_account_active (boolean): now a function diff --git a/openupgrade_scripts/scripts/hr_timesheet_attendance/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_timesheet_attendance/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..9468578f136c --- /dev/null +++ b/openupgrade_scripts/scripts/hr_timesheet_attendance/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'hr_timesheet_attendance'--- +---Fields in module 'hr_timesheet_attendance'--- +---XML records in module 'hr_timesheet_attendance'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/hr_work_entry/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/hr_work_entry/14.0.1.0/upgrade_analysis.txt index d2075dcc38d0..09117a87613d 100644 --- a/openupgrade_scripts/scripts/hr_work_entry/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/hr_work_entry/14.0.1.0/upgrade_analysis.txt @@ -1,6 +1,5 @@ ---Models in module 'hr_work_entry'--- ---Fields in module 'hr_work_entry'--- -hr_work_entry / hr.work.entry / date_stop (datetime) : now a function ---XML records in module 'hr_work_entry'--- NEW ir.model.access: hr_work_entry.access_hr_work_entry_system NEW ir.ui.view: hr_work_entry.resource_calendar_attendance_view_form diff --git a/openupgrade_scripts/scripts/iap_crm/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/iap_crm/14.0.1.0/upgrade_analysis_work.txt index 8d4ad565678b..58e2cb3fdc4f 100644 --- a/openupgrade_scripts/scripts/iap_crm/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/iap_crm/14.0.1.0/upgrade_analysis_work.txt @@ -1,6 +1,5 @@ ---Models in module 'iap_crm'--- ---Fields in module 'iap_crm'--- iap_crm / crm.lead / reveal_id (char) : previously in module crm_iap_lead -# NOTHING TO DO - ---XML records in module 'iap_crm'--- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/iap_mail/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/iap_mail/14.0.1.0/upgrade_analysis_work.txt index 0d6a0ece8c33..1238a116d20c 100644 --- a/openupgrade_scripts/scripts/iap_mail/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/iap_mail/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'iap_mail'--- ---XML records in module 'iap_mail'--- NEW ir.ui.view: iap_mail.enrich_company -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/im_livechat/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/im_livechat/14.0.1.0/noupdate_changes.xml index 7f620b28fc7c..4ba684b571e2 100644 --- a/openupgrade_scripts/scripts/im_livechat/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/im_livechat/14.0.1.0/noupdate_changes.xml @@ -5,4 +5,107 @@ True True + diff --git a/openupgrade_scripts/scripts/im_livechat/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/im_livechat/14.0.1.0/upgrade_analysis.txt index 455c64d4b333..eda83d01dc76 100644 --- a/openupgrade_scripts/scripts/im_livechat/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/im_livechat/14.0.1.0/upgrade_analysis.txt @@ -3,10 +3,10 @@ im_livechat / digest.digest / kpi_livechat_conversations (boolean): NEW im_livechat / digest.digest / kpi_livechat_rating (boolean) : NEW im_livechat / digest.digest / kpi_livechat_response (boolean): NEW -im_livechat / im_livechat.channel / button_background_color (char): NEW hasdefault -im_livechat / im_livechat.channel / button_text_color (char) : NEW hasdefault -im_livechat / im_livechat.channel / header_background_color (char): NEW hasdefault -im_livechat / im_livechat.channel / title_color (char) : NEW hasdefault +im_livechat / im_livechat.channel / button_background_color (char): NEW hasdefault: default +im_livechat / im_livechat.channel / button_text_color (char) : NEW hasdefault: default +im_livechat / im_livechat.channel / header_background_color (char): NEW hasdefault: default +im_livechat / im_livechat.channel / title_color (char) : NEW hasdefault: default im_livechat / mail.channel / livechat_active (boolean) : previously in module website_livechat ---XML records in module 'im_livechat'--- NEW digest.tip: im_livechat.digest_tip_im_livechat_0 diff --git a/openupgrade_scripts/scripts/im_livechat_mail_bot/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/im_livechat_mail_bot/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..9025f5082015 --- /dev/null +++ b/openupgrade_scripts/scripts/im_livechat_mail_bot/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'im_livechat_mail_bot'--- +---Fields in module 'im_livechat_mail_bot'--- +---XML records in module 'im_livechat_mail_bot'--- +---nothing has changed in this module-- +NOTHING TO DO diff --git a/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis.txt index 0cbf259d3677..d9c36d534330 100644 --- a/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis.txt @@ -350,8 +350,6 @@ NEW account.account.template: l10n_be.a773 NEW account.account.template: l10n_be.a792 NEW account.account.template: l10n_be.a794 DEL account.account.template: l10n_be.a1000 -DEL account.account.template: l10n_be.a140 -DEL account.account.template: l10n_be.a141 DEL account.account.template: l10n_be.a150 DEL account.account.template: l10n_be.a1600 DEL account.account.template: l10n_be.a1720 diff --git a/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..d7ea1b85068e --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_be/14.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,799 @@ +---Models in module 'l10n_be'--- +---Fields in module 'l10n_be'--- +l10n_be / account.journal / invoice_reference_model (False): previously in module l10n_be_invoice_bba +# NOTHING TO DO: managed by the ORM + +---XML records in module 'l10n_be'--- +NEW account.account.template: l10n_be.a000 +NEW account.account.template: l10n_be.a001 +NEW account.account.template: l10n_be.a010 +NEW account.account.template: l10n_be.a0110 +NEW account.account.template: l10n_be.a0111 +NEW account.account.template: l10n_be.a012 +NEW account.account.template: l10n_be.a013 +NEW account.account.template: l10n_be.a020 +NEW account.account.template: l10n_be.a021 +NEW account.account.template: l10n_be.a022 +NEW account.account.template: l10n_be.a023 +NEW account.account.template: l10n_be.a030 +NEW account.account.template: l10n_be.a031 +NEW account.account.template: l10n_be.a032 +NEW account.account.template: l10n_be.a033 +NEW account.account.template: l10n_be.a040 +NEW account.account.template: l10n_be.a041 +NEW account.account.template: l10n_be.a050 +NEW account.account.template: l10n_be.a051 +NEW account.account.template: l10n_be.a052 +NEW account.account.template: l10n_be.a053 +NEW account.account.template: l10n_be.a060 +NEW account.account.template: l10n_be.a061 +NEW account.account.template: l10n_be.a062 +NEW account.account.template: l10n_be.a063 +NEW account.account.template: l10n_be.a064 +NEW account.account.template: l10n_be.a065 +NEW account.account.template: l10n_be.a066 +NEW account.account.template: l10n_be.a067 +NEW account.account.template: l10n_be.a0700 +NEW account.account.template: l10n_be.a0701 +NEW account.account.template: l10n_be.a0702 +NEW account.account.template: l10n_be.a071 +NEW account.account.template: l10n_be.a072 +NEW account.account.template: l10n_be.a073 +NEW account.account.template: l10n_be.a074 +NEW account.account.template: l10n_be.a075 +NEW account.account.template: l10n_be.a090 +NEW account.account.template: l10n_be.a091 +NEW account.account.template: l10n_be.a092 +NEW account.account.template: l10n_be.a093 +NEW account.account.template: l10n_be.a094 +NEW account.account.template: l10n_be.a095 +NEW account.account.template: l10n_be.a096 +NEW account.account.template: l10n_be.a097 +NEW account.account.template: l10n_be.a098 +NEW account.account.template: l10n_be.a099 +NEW account.account.template: l10n_be.a100 +NEW account.account.template: l10n_be.a101 +NEW account.account.template: l10n_be.a120 +NEW account.account.template: l10n_be.a121 +NEW account.account.template: l10n_be.a122 +NEW account.account.template: l10n_be.a123 +NEW account.account.template: l10n_be.a124 +NEW account.account.template: l10n_be.a1310 +NEW account.account.template: l10n_be.a1311 +NEW account.account.template: l10n_be.a133 +NEW account.account.template: l10n_be.a15 +NEW account.account.template: l10n_be.a152 +NEW account.account.template: l10n_be.a160 +NEW account.account.template: l10n_be.a161 +NEW account.account.template: l10n_be.a162 +NEW account.account.template: l10n_be.a163 +NEW account.account.template: l10n_be.a1680 +NEW account.account.template: l10n_be.a1681 +NEW account.account.template: l10n_be.a1682 +NEW account.account.template: l10n_be.a1687 +NEW account.account.template: l10n_be.a1688 +NEW account.account.template: l10n_be.a1700 +NEW account.account.template: l10n_be.a1701 +NEW account.account.template: l10n_be.a1710 +NEW account.account.template: l10n_be.a1711 +NEW account.account.template: l10n_be.a1730 +NEW account.account.template: l10n_be.a1731 +NEW account.account.template: l10n_be.a1732 +NEW account.account.template: l10n_be.a1750 +NEW account.account.template: l10n_be.a1751 +NEW account.account.template: l10n_be.a178 +NEW account.account.template: l10n_be.a1790 +NEW account.account.template: l10n_be.a1791 +NEW account.account.template: l10n_be.a1792 +NEW account.account.template: l10n_be.a19 +NEW account.account.template: l10n_be.a200 +NEW account.account.template: l10n_be.a201 +NEW account.account.template: l10n_be.a202 +NEW account.account.template: l10n_be.a204 +NEW account.account.template: l10n_be.a210 +NEW account.account.template: l10n_be.a211 +NEW account.account.template: l10n_be.a212 +NEW account.account.template: l10n_be.a213 +NEW account.account.template: l10n_be.a220 +NEW account.account.template: l10n_be.a2201 +NEW account.account.template: l10n_be.a2202 +NEW account.account.template: l10n_be.a221 +NEW account.account.template: l10n_be.a2211 +NEW account.account.template: l10n_be.a2212 +NEW account.account.template: l10n_be.a222 +NEW account.account.template: l10n_be.a2221 +NEW account.account.template: l10n_be.a2222 +NEW account.account.template: l10n_be.a223 +NEW account.account.template: l10n_be.a2231 +NEW account.account.template: l10n_be.a2232 +NEW account.account.template: l10n_be.a23 +NEW account.account.template: l10n_be.a231 +NEW account.account.template: l10n_be.a232 +NEW account.account.template: l10n_be.a24 +NEW account.account.template: l10n_be.a241 +NEW account.account.template: l10n_be.a242 +NEW account.account.template: l10n_be.a250 +NEW account.account.template: l10n_be.a251 +NEW account.account.template: l10n_be.a252 +NEW account.account.template: l10n_be.a26 +NEW account.account.template: l10n_be.a261 +NEW account.account.template: l10n_be.a262 +NEW account.account.template: l10n_be.a27 +NEW account.account.template: l10n_be.a2801 +NEW account.account.template: l10n_be.a2808 +NEW account.account.template: l10n_be.a2809 +NEW account.account.template: l10n_be.a2810 +NEW account.account.template: l10n_be.a2811 +NEW account.account.template: l10n_be.a2812 +NEW account.account.template: l10n_be.a2817 +NEW account.account.template: l10n_be.a2819 +NEW account.account.template: l10n_be.a2820 +NEW account.account.template: l10n_be.a2821 +NEW account.account.template: l10n_be.a2828 +NEW account.account.template: l10n_be.a2829 +NEW account.account.template: l10n_be.a2830 +NEW account.account.template: l10n_be.a2831 +NEW account.account.template: l10n_be.a2832 +NEW account.account.template: l10n_be.a2837 +NEW account.account.template: l10n_be.a2839 +NEW account.account.template: l10n_be.a2840 +NEW account.account.template: l10n_be.a2841 +NEW account.account.template: l10n_be.a2848 +NEW account.account.template: l10n_be.a2849 +NEW account.account.template: l10n_be.a2850 +NEW account.account.template: l10n_be.a2851 +NEW account.account.template: l10n_be.a2852 +NEW account.account.template: l10n_be.a2857 +NEW account.account.template: l10n_be.a2859 +NEW account.account.template: l10n_be.a288 +NEW account.account.template: l10n_be.a2900 +NEW account.account.template: l10n_be.a2901 +NEW account.account.template: l10n_be.a2906 +NEW account.account.template: l10n_be.a2907 +NEW account.account.template: l10n_be.a2909 +NEW account.account.template: l10n_be.a2910 +NEW account.account.template: l10n_be.a2911 +NEW account.account.template: l10n_be.a2915 +NEW account.account.template: l10n_be.a2917 +NEW account.account.template: l10n_be.a2919 +NEW account.account.template: l10n_be.a309 +NEW account.account.template: l10n_be.a310 +NEW account.account.template: l10n_be.a319 +NEW account.account.template: l10n_be.a320 +NEW account.account.template: l10n_be.a330 +NEW account.account.template: l10n_be.a339 +NEW account.account.template: l10n_be.a340 +NEW account.account.template: l10n_be.a349 +NEW account.account.template: l10n_be.a350 +NEW account.account.template: l10n_be.a359 +NEW account.account.template: l10n_be.a369 +NEW account.account.template: l10n_be.a371 +NEW account.account.template: l10n_be.a379 +NEW account.account.template: l10n_be.a400 +NEW account.account.template: l10n_be.a401 +NEW account.account.template: l10n_be.a409 +NEW account.account.template: l10n_be.a410 +NEW account.account.template: l10n_be.a411 +NEW account.account.template: l10n_be.a412 +NEW account.account.template: l10n_be.a413 +NEW account.account.template: l10n_be.a415 +NEW account.account.template: l10n_be.a416 +NEW account.account.template: l10n_be.a4200 +NEW account.account.template: l10n_be.a4201 +NEW account.account.template: l10n_be.a4210 +NEW account.account.template: l10n_be.a4211 +NEW account.account.template: l10n_be.a422 +NEW account.account.template: l10n_be.a4231 +NEW account.account.template: l10n_be.a4232 +NEW account.account.template: l10n_be.a4250 +NEW account.account.template: l10n_be.a4251 +NEW account.account.template: l10n_be.a426 +NEW account.account.template: l10n_be.a428 +NEW account.account.template: l10n_be.a429 +NEW account.account.template: l10n_be.a431 +NEW account.account.template: l10n_be.a432 +NEW account.account.template: l10n_be.a433 +NEW account.account.template: l10n_be.a439 +NEW account.account.template: l10n_be.a441 +NEW account.account.template: l10n_be.a450 +NEW account.account.template: l10n_be.a4508 +NEW account.account.template: l10n_be.a451 +NEW account.account.template: l10n_be.a451063 +NEW account.account.template: l10n_be.a451800 +NEW account.account.template: l10n_be.a451820 +NEW account.account.template: l10n_be.a451830 +NEW account.account.template: l10n_be.a452 +NEW account.account.template: l10n_be.a4528 +NEW account.account.template: l10n_be.a453 +NEW account.account.template: l10n_be.a454 +NEW account.account.template: l10n_be.a455 +NEW account.account.template: l10n_be.a456 +NEW account.account.template: l10n_be.a459 +NEW account.account.template: l10n_be.a470 +NEW account.account.template: l10n_be.a471 +NEW account.account.template: l10n_be.a472 +NEW account.account.template: l10n_be.a473 +NEW account.account.template: l10n_be.a480 +NEW account.account.template: l10n_be.a483 +NEW account.account.template: l10n_be.a487 +NEW account.account.template: l10n_be.a488 +NEW account.account.template: l10n_be.a4890 +NEW account.account.template: l10n_be.a4891 +NEW account.account.template: l10n_be.a491 +NEW account.account.template: l10n_be.a493 +NEW account.account.template: l10n_be.a496 +NEW account.account.template: l10n_be.a497 +NEW account.account.template: l10n_be.a499 +NEW account.account.template: l10n_be.a500 +NEW account.account.template: l10n_be.a509 +NEW account.account.template: l10n_be.a510 +NEW account.account.template: l10n_be.a511 +NEW account.account.template: l10n_be.a519 +NEW account.account.template: l10n_be.a520 +NEW account.account.template: l10n_be.a529 +NEW account.account.template: l10n_be.a530 +NEW account.account.template: l10n_be.a531 +NEW account.account.template: l10n_be.a532 +NEW account.account.template: l10n_be.a539 +NEW account.account.template: l10n_be.a54 +NEW account.account.template: l10n_be.a55 +NEW account.account.template: l10n_be.a560 +NEW account.account.template: l10n_be.a561 +NEW account.account.template: l10n_be.a57 +NEW account.account.template: l10n_be.a578 +NEW account.account.template: l10n_be.a58 +NEW account.account.template: l10n_be.a605 +NEW account.account.template: l10n_be.a608 +NEW account.account.template: l10n_be.a6090 +NEW account.account.template: l10n_be.a6091 +NEW account.account.template: l10n_be.a6094 +NEW account.account.template: l10n_be.a6095 +NEW account.account.template: l10n_be.a61 +NEW account.account.template: l10n_be.a617 +NEW account.account.template: l10n_be.a618 +NEW account.account.template: l10n_be.a622 +NEW account.account.template: l10n_be.a623 +NEW account.account.template: l10n_be.a6240 +NEW account.account.template: l10n_be.a6241 +NEW account.account.template: l10n_be.a6300 +NEW account.account.template: l10n_be.a6308 +NEW account.account.template: l10n_be.a6309 +NEW account.account.template: l10n_be.a6311 +NEW account.account.template: l10n_be.a6321 +NEW account.account.template: l10n_be.a6330 +NEW account.account.template: l10n_be.a6331 +NEW account.account.template: l10n_be.a6340 +NEW account.account.template: l10n_be.a6341 +NEW account.account.template: l10n_be.a6350 +NEW account.account.template: l10n_be.a6351 +NEW account.account.template: l10n_be.a6360 +NEW account.account.template: l10n_be.a6361 +NEW account.account.template: l10n_be.a6370 +NEW account.account.template: l10n_be.a6371 +NEW account.account.template: l10n_be.a6380 +NEW account.account.template: l10n_be.a6381 +NEW account.account.template: l10n_be.a640 +NEW account.account.template: l10n_be.a641 +NEW account.account.template: l10n_be.a642 +NEW account.account.template: l10n_be.a643 +NEW account.account.template: l10n_be.a6431 +NEW account.account.template: l10n_be.a6432 +NEW account.account.template: l10n_be.a649 +NEW account.account.template: l10n_be.a6500 +NEW account.account.template: l10n_be.a6501 +NEW account.account.template: l10n_be.a6502 +NEW account.account.template: l10n_be.a6503 +NEW account.account.template: l10n_be.a6510 +NEW account.account.template: l10n_be.a6511 +NEW account.account.template: l10n_be.a652 +NEW account.account.template: l10n_be.a655 +NEW account.account.template: l10n_be.a6560 +NEW account.account.template: l10n_be.a6561 +NEW account.account.template: l10n_be.a659 +NEW account.account.template: l10n_be.a6601 +NEW account.account.template: l10n_be.a6602 +NEW account.account.template: l10n_be.a661 +NEW account.account.template: l10n_be.a66200 +NEW account.account.template: l10n_be.a66201 +NEW account.account.template: l10n_be.a66210 +NEW account.account.template: l10n_be.a66211 +NEW account.account.template: l10n_be.a6630 +NEW account.account.template: l10n_be.a6631 +NEW account.account.template: l10n_be.a668 +NEW account.account.template: l10n_be.a6690 +NEW account.account.template: l10n_be.a6691 +NEW account.account.template: l10n_be.a6701 +NEW account.account.template: l10n_be.a6702 +NEW account.account.template: l10n_be.a6703 +NEW account.account.template: l10n_be.a6710 +NEW account.account.template: l10n_be.a6711 +NEW account.account.template: l10n_be.a6712 +NEW account.account.template: l10n_be.a672 +NEW account.account.template: l10n_be.a673 +NEW account.account.template: l10n_be.a680 +NEW account.account.template: l10n_be.a689 +NEW account.account.template: l10n_be.a691 +NEW account.account.template: l10n_be.a6920 +NEW account.account.template: l10n_be.a6921 +NEW account.account.template: l10n_be.a694 +NEW account.account.template: l10n_be.a695 +NEW account.account.template: l10n_be.a696 +NEW account.account.template: l10n_be.a697 +NEW account.account.template: l10n_be.a708 +NEW account.account.template: l10n_be.a71 +NEW account.account.template: l10n_be.a712 +NEW account.account.template: l10n_be.a713 +NEW account.account.template: l10n_be.a715 +NEW account.account.template: l10n_be.a7170 +NEW account.account.template: l10n_be.a7171 +NEW account.account.template: l10n_be.a72 +NEW account.account.template: l10n_be.a730 +NEW account.account.template: l10n_be.a731 +NEW account.account.template: l10n_be.a732 +NEW account.account.template: l10n_be.a733 +NEW account.account.template: l10n_be.a734 +NEW account.account.template: l10n_be.a735 +NEW account.account.template: l10n_be.a736 +NEW account.account.template: l10n_be.a737 +NEW account.account.template: l10n_be.a738 +NEW account.account.template: l10n_be.a741 +NEW account.account.template: l10n_be.a742 +NEW account.account.template: l10n_be.a750 +NEW account.account.template: l10n_be.a7601 +NEW account.account.template: l10n_be.a761 +NEW account.account.template: l10n_be.a7620 +NEW account.account.template: l10n_be.a7621 +NEW account.account.template: l10n_be.a7630 +NEW account.account.template: l10n_be.a7631 +NEW account.account.template: l10n_be.a769 +NEW account.account.template: l10n_be.a77 +NEW account.account.template: l10n_be.a7712 +NEW account.account.template: l10n_be.a773 +NEW account.account.template: l10n_be.a792 +NEW account.account.template: l10n_be.a794 +DEL account.account.template: l10n_be.a1000 +DEL account.account.template: l10n_be.a150 +DEL account.account.template: l10n_be.a1600 +DEL account.account.template: l10n_be.a1720 +DEL account.account.template: l10n_be.a1721 +DEL account.account.template: l10n_be.a1722 +DEL account.account.template: l10n_be.a17300 +DEL account.account.template: l10n_be.a175110 +DEL account.account.template: l10n_be.a175111 +DEL account.account.template: l10n_be.a175112 +DEL account.account.template: l10n_be.a2000 +DEL account.account.template: l10n_be.a2009 +DEL account.account.template: l10n_be.a2100 +DEL account.account.template: l10n_be.a2108 +DEL account.account.template: l10n_be.a2109 +DEL account.account.template: l10n_be.a2110 +DEL account.account.template: l10n_be.a2118 +DEL account.account.template: l10n_be.a2119 +DEL account.account.template: l10n_be.a24000 +DEL account.account.template: l10n_be.a24001 +DEL account.account.template: l10n_be.a24010 +DEL account.account.template: l10n_be.a24011 +DEL account.account.template: l10n_be.a24090 +DEL account.account.template: l10n_be.a24100 +DEL account.account.template: l10n_be.a24105 +DEL account.account.template: l10n_be.a24190 +DEL account.account.template: l10n_be.a2500 +DEL account.account.template: l10n_be.a2501 +DEL account.account.template: l10n_be.a2520 +DEL account.account.template: l10n_be.a2521 +DEL account.account.template: l10n_be.a2528 +DEL account.account.template: l10n_be.a2529 +DEL account.account.template: l10n_be.a260 +DEL account.account.template: l10n_be.a2690 +DEL account.account.template: l10n_be.a29000 +DEL account.account.template: l10n_be.a3100 +DEL account.account.template: l10n_be.a3200 +DEL account.account.template: l10n_be.a3300 +DEL account.account.template: l10n_be.a3400 +DEL account.account.template: l10n_be.a3500 +DEL account.account.template: l10n_be.a4000 +DEL account.account.template: l10n_be.a411059 +DEL account.account.template: l10n_be.a4118 +DEL account.account.template: l10n_be.a4120 +DEL account.account.template: l10n_be.a4125 +DEL account.account.template: l10n_be.a4160 +DEL account.account.template: l10n_be.a4161 +DEL account.account.template: l10n_be.a4162 +DEL account.account.template: l10n_be.a4163 +DEL account.account.template: l10n_be.a4164 +DEL account.account.template: l10n_be.a4166 +DEL account.account.template: l10n_be.a41670 +DEL account.account.template: l10n_be.a41671 +DEL account.account.template: l10n_be.a4168 +DEL account.account.template: l10n_be.a4220 +DEL account.account.template: l10n_be.a4221 +DEL account.account.template: l10n_be.a448 +DEL account.account.template: l10n_be.a4500 +DEL account.account.template: l10n_be.a4530 +DEL account.account.template: l10n_be.a4533 +DEL account.account.template: l10n_be.a4538 +DEL account.account.template: l10n_be.a4540 +DEL account.account.template: l10n_be.a4541 +DEL account.account.template: l10n_be.a4542 +DEL account.account.template: l10n_be.a4543 +DEL account.account.template: l10n_be.a4544 +DEL account.account.template: l10n_be.a4550 +DEL account.account.template: l10n_be.a4551 +DEL account.account.template: l10n_be.a4552 +DEL account.account.template: l10n_be.a4553 +DEL account.account.template: l10n_be.a4560 +DEL account.account.template: l10n_be.a4561 +DEL account.account.template: l10n_be.a4562 +DEL account.account.template: l10n_be.a4590 +DEL account.account.template: l10n_be.a45930 +DEL account.account.template: l10n_be.a45931 +DEL account.account.template: l10n_be.a45932 +DEL account.account.template: l10n_be.a45933 +DEL account.account.template: l10n_be.a4594 +DEL account.account.template: l10n_be.a4597 +DEL account.account.template: l10n_be.a49100 +DEL account.account.template: l10n_be.a49101 +DEL account.account.template: l10n_be.a49102 +DEL account.account.template: l10n_be.a4930 +DEL account.account.template: l10n_be.a4990 +DEL account.account.template: l10n_be.a540 +DEL account.account.template: l10n_be.a6100 +DEL account.account.template: l10n_be.a6101 +DEL account.account.template: l10n_be.a611 +DEL account.account.template: l10n_be.a612 +DEL account.account.template: l10n_be.a613 +DEL account.account.template: l10n_be.a614 +DEL account.account.template: l10n_be.a62021 +DEL account.account.template: l10n_be.a62022 +DEL account.account.template: l10n_be.a6231 +DEL account.account.template: l10n_be.a64000 +DEL account.account.template: l10n_be.a656 +DEL account.account.template: l10n_be.a706 +DEL account.account.template: l10n_be.a7492 +DEL account.account.template: l10n_be.a7500 +DEL account.account.template: l10n_be.a7501 +DEL account.account.template: l10n_be.a7502 +DEL account.account.template: l10n_be.a756 +DEL account.account.template: l10n_be.a757 +NEW account.group.template: l10n_be.be_group_0 +NEW account.group.template: l10n_be.be_group_00 +NEW account.group.template: l10n_be.be_group_000 +NEW account.group.template: l10n_be.be_group_001 +NEW account.group.template: l10n_be.be_group_01 +NEW account.group.template: l10n_be.be_group_010 +NEW account.group.template: l10n_be.be_group_011 +NEW account.group.template: l10n_be.be_group_012 +NEW account.group.template: l10n_be.be_group_013 +NEW account.group.template: l10n_be.be_group_02 +NEW account.group.template: l10n_be.be_group_020 +NEW account.group.template: l10n_be.be_group_021 +NEW account.group.template: l10n_be.be_group_022 +NEW account.group.template: l10n_be.be_group_023 +NEW account.group.template: l10n_be.be_group_03 +NEW account.group.template: l10n_be.be_group_030 +NEW account.group.template: l10n_be.be_group_031 +NEW account.group.template: l10n_be.be_group_032 +NEW account.group.template: l10n_be.be_group_033 +NEW account.group.template: l10n_be.be_group_04 +NEW account.group.template: l10n_be.be_group_040 +NEW account.group.template: l10n_be.be_group_041 +NEW account.group.template: l10n_be.be_group_05 +NEW account.group.template: l10n_be.be_group_050 +NEW account.group.template: l10n_be.be_group_051 +NEW account.group.template: l10n_be.be_group_052 +NEW account.group.template: l10n_be.be_group_053 +NEW account.group.template: l10n_be.be_group_06 +NEW account.group.template: l10n_be.be_group_060 +NEW account.group.template: l10n_be.be_group_061 +NEW account.group.template: l10n_be.be_group_062 +NEW account.group.template: l10n_be.be_group_063 +NEW account.group.template: l10n_be.be_group_064 +NEW account.group.template: l10n_be.be_group_065 +NEW account.group.template: l10n_be.be_group_066 +NEW account.group.template: l10n_be.be_group_067 +NEW account.group.template: l10n_be.be_group_07 +NEW account.group.template: l10n_be.be_group_070 +NEW account.group.template: l10n_be.be_group_071 +NEW account.group.template: l10n_be.be_group_072 +NEW account.group.template: l10n_be.be_group_073 +NEW account.group.template: l10n_be.be_group_074 +NEW account.group.template: l10n_be.be_group_075 +NEW account.group.template: l10n_be.be_group_09 +NEW account.group.template: l10n_be.be_group_1 +NEW account.group.template: l10n_be.be_group_10 +NEW account.group.template: l10n_be.be_group_100 +NEW account.group.template: l10n_be.be_group_101 +NEW account.group.template: l10n_be.be_group_11 +NEW account.group.template: l10n_be.be_group_12 +NEW account.group.template: l10n_be.be_group_120 +NEW account.group.template: l10n_be.be_group_121 +NEW account.group.template: l10n_be.be_group_122 +NEW account.group.template: l10n_be.be_group_123 +NEW account.group.template: l10n_be.be_group_124 +NEW account.group.template: l10n_be.be_group_13 +NEW account.group.template: l10n_be.be_group_130 +NEW account.group.template: l10n_be.be_group_131 +NEW account.group.template: l10n_be.be_group_132 +NEW account.group.template: l10n_be.be_group_133 +NEW account.group.template: l10n_be.be_group_14 +NEW account.group.template: l10n_be.be_group_15 +NEW account.group.template: l10n_be.be_group_16 +NEW account.group.template: l10n_be.be_group_160 +NEW account.group.template: l10n_be.be_group_161 +NEW account.group.template: l10n_be.be_group_162 +NEW account.group.template: l10n_be.be_group_163 +NEW account.group.template: l10n_be.be_group_164 +NEW account.group.template: l10n_be.be_group_168 +NEW account.group.template: l10n_be.be_group_17 +NEW account.group.template: l10n_be.be_group_170 +NEW account.group.template: l10n_be.be_group_171 +NEW account.group.template: l10n_be.be_group_172 +NEW account.group.template: l10n_be.be_group_173 +NEW account.group.template: l10n_be.be_group_174 +NEW account.group.template: l10n_be.be_group_175 +NEW account.group.template: l10n_be.be_group_176 +NEW account.group.template: l10n_be.be_group_178 +NEW account.group.template: l10n_be.be_group_179 +NEW account.group.template: l10n_be.be_group_19 +NEW account.group.template: l10n_be.be_group_2 +NEW account.group.template: l10n_be.be_group_20 +NEW account.group.template: l10n_be.be_group_200 +NEW account.group.template: l10n_be.be_group_201 +NEW account.group.template: l10n_be.be_group_202 +NEW account.group.template: l10n_be.be_group_204 +NEW account.group.template: l10n_be.be_group_21 +NEW account.group.template: l10n_be.be_group_210 +NEW account.group.template: l10n_be.be_group_211 +NEW account.group.template: l10n_be.be_group_212 +NEW account.group.template: l10n_be.be_group_213 +NEW account.group.template: l10n_be.be_group_22 +NEW account.group.template: l10n_be.be_group_220 +NEW account.group.template: l10n_be.be_group_221 +NEW account.group.template: l10n_be.be_group_222 +NEW account.group.template: l10n_be.be_group_223 +NEW account.group.template: l10n_be.be_group_23 +NEW account.group.template: l10n_be.be_group_24 +NEW account.group.template: l10n_be.be_group_25 +NEW account.group.template: l10n_be.be_group_250 +NEW account.group.template: l10n_be.be_group_251 +NEW account.group.template: l10n_be.be_group_252 +NEW account.group.template: l10n_be.be_group_26 +NEW account.group.template: l10n_be.be_group_27 +NEW account.group.template: l10n_be.be_group_28 +NEW account.group.template: l10n_be.be_group_280 +NEW account.group.template: l10n_be.be_group_281 +NEW account.group.template: l10n_be.be_group_282 +NEW account.group.template: l10n_be.be_group_283 +NEW account.group.template: l10n_be.be_group_284 +NEW account.group.template: l10n_be.be_group_285 +NEW account.group.template: l10n_be.be_group_288 +NEW account.group.template: l10n_be.be_group_29 +NEW account.group.template: l10n_be.be_group_290 +NEW account.group.template: l10n_be.be_group_291 +NEW account.group.template: l10n_be.be_group_3 +NEW account.group.template: l10n_be.be_group_30 +NEW account.group.template: l10n_be.be_group_300 +NEW account.group.template: l10n_be.be_group_309 +NEW account.group.template: l10n_be.be_group_31 +NEW account.group.template: l10n_be.be_group_310 +NEW account.group.template: l10n_be.be_group_319 +NEW account.group.template: l10n_be.be_group_32 +NEW account.group.template: l10n_be.be_group_320 +NEW account.group.template: l10n_be.be_group_329 +NEW account.group.template: l10n_be.be_group_33 +NEW account.group.template: l10n_be.be_group_330 +NEW account.group.template: l10n_be.be_group_339 +NEW account.group.template: l10n_be.be_group_34 +NEW account.group.template: l10n_be.be_group_340 +NEW account.group.template: l10n_be.be_group_349 +NEW account.group.template: l10n_be.be_group_35 +NEW account.group.template: l10n_be.be_group_350 +NEW account.group.template: l10n_be.be_group_359 +NEW account.group.template: l10n_be.be_group_36 +NEW account.group.template: l10n_be.be_group_360 +NEW account.group.template: l10n_be.be_group_369 +NEW account.group.template: l10n_be.be_group_37 +NEW account.group.template: l10n_be.be_group_370 +NEW account.group.template: l10n_be.be_group_371 +NEW account.group.template: l10n_be.be_group_379 +NEW account.group.template: l10n_be.be_group_4 +NEW account.group.template: l10n_be.be_group_40 +NEW account.group.template: l10n_be.be_group_400 +NEW account.group.template: l10n_be.be_group_401 +NEW account.group.template: l10n_be.be_group_404 +NEW account.group.template: l10n_be.be_group_406 +NEW account.group.template: l10n_be.be_group_407 +NEW account.group.template: l10n_be.be_group_409 +NEW account.group.template: l10n_be.be_group_41 +NEW account.group.template: l10n_be.be_group_410 +NEW account.group.template: l10n_be.be_group_411 +NEW account.group.template: l10n_be.be_group_412 +NEW account.group.template: l10n_be.be_group_414 +NEW account.group.template: l10n_be.be_group_416 +NEW account.group.template: l10n_be.be_group_417 +NEW account.group.template: l10n_be.be_group_418 +NEW account.group.template: l10n_be.be_group_419 +NEW account.group.template: l10n_be.be_group_42 +NEW account.group.template: l10n_be.be_group_43 +NEW account.group.template: l10n_be.be_group_430 +NEW account.group.template: l10n_be.be_group_431 +NEW account.group.template: l10n_be.be_group_432 +NEW account.group.template: l10n_be.be_group_433 +NEW account.group.template: l10n_be.be_group_439 +NEW account.group.template: l10n_be.be_group_44 +NEW account.group.template: l10n_be.be_group_440 +NEW account.group.template: l10n_be.be_group_441 +NEW account.group.template: l10n_be.be_group_444 +NEW account.group.template: l10n_be.be_group_45 +NEW account.group.template: l10n_be.be_group_450 +NEW account.group.template: l10n_be.be_group_451 +NEW account.group.template: l10n_be.be_group_452 +NEW account.group.template: l10n_be.be_group_453 +NEW account.group.template: l10n_be.be_group_454 +NEW account.group.template: l10n_be.be_group_455 +NEW account.group.template: l10n_be.be_group_456 +NEW account.group.template: l10n_be.be_group_459 +NEW account.group.template: l10n_be.be_group_46 +NEW account.group.template: l10n_be.be_group_47 +NEW account.group.template: l10n_be.be_group_470 +NEW account.group.template: l10n_be.be_group_471 +NEW account.group.template: l10n_be.be_group_472 +NEW account.group.template: l10n_be.be_group_473 +NEW account.group.template: l10n_be.be_group_48 +NEW account.group.template: l10n_be.be_group_480 +NEW account.group.template: l10n_be.be_group_488 +NEW account.group.template: l10n_be.be_group_489 +NEW account.group.template: l10n_be.be_group_49 +NEW account.group.template: l10n_be.be_group_490 +NEW account.group.template: l10n_be.be_group_491 +NEW account.group.template: l10n_be.be_group_492 +NEW account.group.template: l10n_be.be_group_493 +NEW account.group.template: l10n_be.be_group_499 +NEW account.group.template: l10n_be.be_group_5 +NEW account.group.template: l10n_be.be_group_50 +NEW account.group.template: l10n_be.be_group_51 +NEW account.group.template: l10n_be.be_group_510 +NEW account.group.template: l10n_be.be_group_5100 +NEW account.group.template: l10n_be.be_group_5101 +NEW account.group.template: l10n_be.be_group_511 +NEW account.group.template: l10n_be.be_group_5110 +NEW account.group.template: l10n_be.be_group_519 +NEW account.group.template: l10n_be.be_group_5190 +NEW account.group.template: l10n_be.be_group_5191 +NEW account.group.template: l10n_be.be_group_52 +NEW account.group.template: l10n_be.be_group_520 +NEW account.group.template: l10n_be.be_group_529 +NEW account.group.template: l10n_be.be_group_53 +NEW account.group.template: l10n_be.be_group_530 +NEW account.group.template: l10n_be.be_group_531 +NEW account.group.template: l10n_be.be_group_532 +NEW account.group.template: l10n_be.be_group_539 +NEW account.group.template: l10n_be.be_group_54 +NEW account.group.template: l10n_be.be_group_55 +NEW account.group.template: l10n_be.be_group_550 +NEW account.group.template: l10n_be.be_group_56 +NEW account.group.template: l10n_be.be_group_560 +NEW account.group.template: l10n_be.be_group_561 +NEW account.group.template: l10n_be.be_group_57 +NEW account.group.template: l10n_be.be_group_570 +NEW account.group.template: l10n_be.be_group_578 +NEW account.group.template: l10n_be.be_group_58 +NEW account.group.template: l10n_be.be_group_6 +NEW account.group.template: l10n_be.be_group_60 +NEW account.group.template: l10n_be.be_group_600 +NEW account.group.template: l10n_be.be_group_601 +NEW account.group.template: l10n_be.be_group_602 +NEW account.group.template: l10n_be.be_group_603 +NEW account.group.template: l10n_be.be_group_604 +NEW account.group.template: l10n_be.be_group_605 +NEW account.group.template: l10n_be.be_group_608 +NEW account.group.template: l10n_be.be_group_609 +NEW account.group.template: l10n_be.be_group_61 +NEW account.group.template: l10n_be.be_group_617 +NEW account.group.template: l10n_be.be_group_618 +NEW account.group.template: l10n_be.be_group_62 +NEW account.group.template: l10n_be.be_group_620 +NEW account.group.template: l10n_be.be_group_621 +NEW account.group.template: l10n_be.be_group_622 +NEW account.group.template: l10n_be.be_group_623 +NEW account.group.template: l10n_be.be_group_624 +NEW account.group.template: l10n_be.be_group_63 +NEW account.group.template: l10n_be.be_group_630 +NEW account.group.template: l10n_be.be_group_631 +NEW account.group.template: l10n_be.be_group_632 +NEW account.group.template: l10n_be.be_group_633 +NEW account.group.template: l10n_be.be_group_634 +NEW account.group.template: l10n_be.be_group_635 +NEW account.group.template: l10n_be.be_group_636 +NEW account.group.template: l10n_be.be_group_637 +NEW account.group.template: l10n_be.be_group_638 +NEW account.group.template: l10n_be.be_group_64 +NEW account.group.template: l10n_be.be_group_640 +NEW account.group.template: l10n_be.be_group_641 +NEW account.group.template: l10n_be.be_group_642 +NEW account.group.template: l10n_be.be_group_643 +NEW account.group.template: l10n_be.be_group_649 +NEW account.group.template: l10n_be.be_group_65 +NEW account.group.template: l10n_be.be_group_650 +NEW account.group.template: l10n_be.be_group_651 +NEW account.group.template: l10n_be.be_group_652 +NEW account.group.template: l10n_be.be_group_653 +NEW account.group.template: l10n_be.be_group_654 +NEW account.group.template: l10n_be.be_group_655 +NEW account.group.template: l10n_be.be_group_656 +NEW account.group.template: l10n_be.be_group_657 +NEW account.group.template: l10n_be.be_group_659 +NEW account.group.template: l10n_be.be_group_66 +NEW account.group.template: l10n_be.be_group_660 +NEW account.group.template: l10n_be.be_group_661 +NEW account.group.template: l10n_be.be_group_662 +NEW account.group.template: l10n_be.be_group_663 +NEW account.group.template: l10n_be.be_group_664 +NEW account.group.template: l10n_be.be_group_668 +NEW account.group.template: l10n_be.be_group_669 +NEW account.group.template: l10n_be.be_group_67 +NEW account.group.template: l10n_be.be_group_670 +NEW account.group.template: l10n_be.be_group_671 +NEW account.group.template: l10n_be.be_group_672 +NEW account.group.template: l10n_be.be_group_673 +NEW account.group.template: l10n_be.be_group_68 +NEW account.group.template: l10n_be.be_group_680 +NEW account.group.template: l10n_be.be_group_689 +NEW account.group.template: l10n_be.be_group_69 +NEW account.group.template: l10n_be.be_group_690 +NEW account.group.template: l10n_be.be_group_691 +NEW account.group.template: l10n_be.be_group_692 +NEW account.group.template: l10n_be.be_group_693 +NEW account.group.template: l10n_be.be_group_694 +NEW account.group.template: l10n_be.be_group_695 +NEW account.group.template: l10n_be.be_group_696 +NEW account.group.template: l10n_be.be_group_697 +NEW account.group.template: l10n_be.be_group_7 +NEW account.group.template: l10n_be.be_group_70 +NEW account.group.template: l10n_be.be_group_700 +NEW account.group.template: l10n_be.be_group_708 +NEW account.group.template: l10n_be.be_group_71 +NEW account.group.template: l10n_be.be_group_712 +NEW account.group.template: l10n_be.be_group_713 +NEW account.group.template: l10n_be.be_group_715 +NEW account.group.template: l10n_be.be_group_717 +NEW account.group.template: l10n_be.be_group_72 +NEW account.group.template: l10n_be.be_group_74 +NEW account.group.template: l10n_be.be_group_740 +NEW account.group.template: l10n_be.be_group_741 +NEW account.group.template: l10n_be.be_group_742 +NEW account.group.template: l10n_be.be_group_743 +NEW account.group.template: l10n_be.be_group_75 +NEW account.group.template: l10n_be.be_group_750 +NEW account.group.template: l10n_be.be_group_751 +NEW account.group.template: l10n_be.be_group_752 +NEW account.group.template: l10n_be.be_group_753 +NEW account.group.template: l10n_be.be_group_754 +NEW account.group.template: l10n_be.be_group_755 +NEW account.group.template: l10n_be.be_group_756 +NEW account.group.template: l10n_be.be_group_76 +NEW account.group.template: l10n_be.be_group_760 +NEW account.group.template: l10n_be.be_group_761 +NEW account.group.template: l10n_be.be_group_762 +NEW account.group.template: l10n_be.be_group_763 +NEW account.group.template: l10n_be.be_group_764 +NEW account.group.template: l10n_be.be_group_769 +NEW account.group.template: l10n_be.be_group_77 +NEW account.group.template: l10n_be.be_group_771 +NEW account.group.template: l10n_be.be_group_773 +NEW account.group.template: l10n_be.be_group_78 +NEW account.group.template: l10n_be.be_group_780 +NEW account.group.template: l10n_be.be_group_789 +NEW account.group.template: l10n_be.be_group_79 +NEW account.group.template: l10n_be.be_group_790 +NEW account.group.template: l10n_be.be_group_791 +NEW account.group.template: l10n_be.be_group_792 +NEW account.group.template: l10n_be.be_group_793 +NEW account.group.template: l10n_be.be_group_794 +NEW account.reconcile.model.line.template: l10n_be.compte_attente_line_template +NEW account.reconcile.model.line.template: l10n_be.escompte_line_template +NEW account.reconcile.model.line.template: l10n_be.frais_bancaires_htva_line_template +NEW account.reconcile.model.line.template: l10n_be.frais_bancaires_tva21_line_template +NEW account.reconcile.model.line.template: l10n_be.virements_internes_line_template +NEW account.tax.report: l10n_be.tax_report_vat +# NOTHING TO DO: new features diff --git a/openupgrade_scripts/scripts/l10n_be_invoice_bba/14.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_be_invoice_bba/14.0.1.2/upgrade_analysis_work.txt new file mode 100644 index 000000000000..0c8bd9def557 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_be_invoice_bba/14.0.1.2/upgrade_analysis_work.txt @@ -0,0 +1,6 @@ +---Models in module 'l10n_be_invoice_bba'--- +---Fields in module 'l10n_be_invoice_bba'--- +l10n_be_invoice_bba / account.journal / invoice_reference_model (False): module is now 'l10n_be' ('l10n_be_invoice_bba') +l10n_be_invoice_bba / account.journal / invoice_reference_model (False): selection_keys is now '['be', 'euro', 'odoo']' ('['be', 'ch', 'euro', 'fi', 'fi_rf', 'no', 'odoo']') +# NOTHING TO DO: module merged with l10n_be +---XML records in module 'l10n_be_invoice_bba'--- diff --git a/openupgrade_scripts/scripts/l10n_ch/14.0.11.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_ch/14.0.11.0/upgrade_analysis.txt index e615749c9781..ab77908f5689 100644 --- a/openupgrade_scripts/scripts/l10n_ch/14.0.11.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_ch/14.0.11.0/upgrade_analysis.txt @@ -2,6 +2,6 @@ new model report.l10n_ch.qr_report_main [abstract] ---Fields in module 'l10n_ch'--- l10n_ch / account.journal / invoice_reference_model (False): selection_keys is now '['be', 'ch', 'euro', 'odoo']' ('['ch', 'euro', 'odoo']') -l10n_ch / res.partner.bank / l10n_ch_postal (char) : now a function ---XML records in module 'l10n_ch'--- NEW account.tax.report: l10n_ch.tax_report +NEW ir.ui.view: l10n_ch.l10n_ch_report_invoice_document diff --git a/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis.txt index 4beaf74fe030..836faf9d814f 100644 --- a/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis.txt @@ -2,5 +2,19 @@ ---Fields in module 'l10n_de'--- ---XML records in module 'l10n_de'--- NEW account.tax.report: l10n_de.tax_report +NEW account.tax.report.line: l10n_de.tax_report_de_tag_37_74 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_50 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_71 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_87 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_90 +NEW account.tax.report.line: l10n_de.tax_report_de_tax_tag_19 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_52 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_53 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_68 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_78 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_79 +DEL account.tax.report.line: l10n_de.tax_report_de_tax_tag_37 +DEL account.tax.report.line: l10n_de.tax_report_de_tax_tag_45 +DEL account.tax.report.line: l10n_de.tax_report_de_tax_tag_66 NEW ir.ui.view: l10n_de.din5008_css NEW report.paperformat: l10n_de.paperformat_euro_din_a diff --git a/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..a6b8cf642385 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_de/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,23 @@ +---Models in module 'l10n_de'--- +---Fields in module 'l10n_de'--- +---XML records in module 'l10n_de'--- +NEW account.tax.report: l10n_de.tax_report +NEW account.tax.report.line: l10n_de.tax_report_de_tag_37_74 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_50 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_71 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_87 +NEW account.tax.report.line: l10n_de.tax_report_de_tag_90 +NEW account.tax.report.line: l10n_de.tax_report_de_tax_tag_19 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_52 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_53 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_68 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_78 +DEL account.tax.report.line: l10n_de.tax_report_de_tag_79 +DEL account.tax.report.line: l10n_de.tax_report_de_tax_tag_37 +DEL account.tax.report.line: l10n_de.tax_report_de_tax_tag_45 +DEL account.tax.report.line: l10n_de.tax_report_de_tax_tag_66 +# NOTHING TO DO: changes in the tax report that are automatically updated + +NEW ir.ui.view: l10n_de.din5008_css +NEW report.paperformat: l10n_de.paperformat_euro_din_a +# NOTHING TO DO: noupdate=0 supplementary stuff diff --git a/openupgrade_scripts/scripts/l10n_de_skr03/14.0.3.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_de_skr03/14.0.3.1/upgrade_analysis.txt new file mode 100644 index 000000000000..86b500c20050 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_de_skr03/14.0.3.1/upgrade_analysis.txt @@ -0,0 +1,9 @@ +---Models in module 'l10n_de_skr03'--- +---Fields in module 'l10n_de_skr03'--- +---XML records in module 'l10n_de_skr03'--- +NEW account.reconcile.model.line.template: l10n_de_skr03.reconcile_2401_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr03.reconcile_2406_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr03.reconcile_3731_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr03.reconcile_3736_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr03.reconcile_8731_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr03.reconcile_8736_line (noupdate) diff --git a/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.1/upgrade_analysis.txt similarity index 84% rename from openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.0/upgrade_analysis.txt rename to openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.1/upgrade_analysis.txt index b0a6f1433ac3..f26aa9e65f08 100644 --- a/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.1/upgrade_analysis.txt @@ -1,6 +1,8 @@ ---Models in module 'l10n_de_skr04'--- ---Fields in module 'l10n_de_skr04'--- ---XML records in module 'l10n_de_skr04'--- +NEW account.account.template: l10n_de_skr04.chart_skr04_9991 +NEW account.account.template: l10n_de_skr04.chart_skr04_9994 NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_4731_line (noupdate) NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_4736_line (noupdate) NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_5731_line (noupdate) diff --git a/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..4d1c2d8534b7 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_de_skr04/14.0.3.1/upgrade_analysis_work.txt @@ -0,0 +1,12 @@ +---Models in module 'l10n_de_skr04'--- +---Fields in module 'l10n_de_skr04'--- +---XML records in module 'l10n_de_skr04'--- +NEW account.account.template: l10n_de_skr04.chart_skr04_9991 +NEW account.account.template: l10n_de_skr04.chart_skr04_9994 +NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_4731_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_4736_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_5731_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_5736_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_6931_line (noupdate) +NEW account.reconcile.model.line.template: l10n_de_skr04.reconcile_6936_line (noupdate) +# NOTHING TO DO: New accounts and reconcile templates diff --git a/openupgrade_scripts/scripts/l10n_dk/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/l10n_dk/14.0.1.0/noupdate_changes.xml new file mode 100644 index 000000000000..abd224ea3e8e --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_dk/14.0.1.0/noupdate_changes.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/openupgrade_scripts/scripts/l10n_dk/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_dk/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..61880e97c088 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_dk/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,4 @@ +---Models in module 'l10n_dk'--- +---Fields in module 'l10n_dk'--- +---XML records in module 'l10n_dk'--- +NEW account.tax.report: l10n_dk.account_tax_report_skat_dk diff --git a/openupgrade_scripts/scripts/l10n_do/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_do/14.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..197f7eb985ff --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_do/14.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,197 @@ +---Models in module 'l10n_do'--- +---Fields in module 'l10n_do'--- +---XML records in module 'l10n_do'--- +DEL account.group: l10n_do.account_group_1 +DEL account.group: l10n_do.account_group_11 +DEL account.group: l10n_do.account_group_1101 +DEL account.group: l10n_do.account_group_110101 +DEL account.group: l10n_do.account_group_110102 +DEL account.group: l10n_do.account_group_110103 +DEL account.group: l10n_do.account_group_1102 +DEL account.group: l10n_do.account_group_110301 +DEL account.group: l10n_do.account_group_110302 +DEL account.group: l10n_do.account_group_1104 +DEL account.group: l10n_do.account_group_1105 +DEL account.group: l10n_do.account_group_1106 +DEL account.group: l10n_do.account_group_1107 +DEL account.group: l10n_do.account_group_1108 +DEL account.group: l10n_do.account_group_110801 +DEL account.group: l10n_do.account_group_110803 +DEL account.group: l10n_do.account_group_1109 +DEL account.group: l10n_do.account_group_1110 +DEL account.group: l10n_do.account_group_12 +DEL account.group: l10n_do.account_group_1201 +DEL account.group: l10n_do.account_group_120101 +DEL account.group: l10n_do.account_group_120102 +DEL account.group: l10n_do.account_group_120103 +DEL account.group: l10n_do.account_group_1202 +DEL account.group: l10n_do.account_group_1203 +DEL account.group: l10n_do.account_group_1204 +DEL account.group: l10n_do.account_group_1205 +DEL account.group: l10n_do.account_group_1206 +DEL account.group: l10n_do.account_group_1207 +DEL account.group: l10n_do.account_group_1208 +DEL account.group: l10n_do.account_group_1209 +DEL account.group: l10n_do.account_group_13 +DEL account.group: l10n_do.account_group_1301 +DEL account.group: l10n_do.account_group_130101 +DEL account.group: l10n_do.account_group_2 +DEL account.group: l10n_do.account_group_21 +DEL account.group: l10n_do.account_group_2101 +DEL account.group: l10n_do.account_group_2102 +DEL account.group: l10n_do.account_group_2103 +DEL account.group: l10n_do.account_group_210301 +DEL account.group: l10n_do.account_group_210302 +DEL account.group: l10n_do.account_group_210303 +DEL account.group: l10n_do.account_group_210304 +DEL account.group: l10n_do.account_group_210305 +DEL account.group: l10n_do.account_group_2104 +DEL account.group: l10n_do.account_group_2105 +DEL account.group: l10n_do.account_group_22 +DEL account.group: l10n_do.account_group_2201 +DEL account.group: l10n_do.account_group_2202 +DEL account.group: l10n_do.account_group_2203 +DEL account.group: l10n_do.account_group_2204 +DEL account.group: l10n_do.account_group_3 +DEL account.group: l10n_do.account_group_31 +DEL account.group: l10n_do.account_group_3101 +DEL account.group: l10n_do.account_group_3102 +DEL account.group: l10n_do.account_group_32 +DEL account.group: l10n_do.account_group_3201 +DEL account.group: l10n_do.account_group_33 +DEL account.group: l10n_do.account_group_3301 +DEL account.group: l10n_do.account_group_3302 +DEL account.group: l10n_do.account_group_3304 +DEL account.group: l10n_do.account_group_4 +DEL account.group: l10n_do.account_group_41 +DEL account.group: l10n_do.account_group_4101 +DEL account.group: l10n_do.account_group_4102 +DEL account.group: l10n_do.account_group_4103 +DEL account.group: l10n_do.account_group_4104 +DEL account.group: l10n_do.account_group_42 +DEL account.group: l10n_do.account_group_4201 +DEL account.group: l10n_do.account_group_4202 +DEL account.group: l10n_do.account_group_4203 +DEL account.group: l10n_do.account_group_4204 +DEL account.group: l10n_do.account_group_5 +DEL account.group: l10n_do.account_group_51 +DEL account.group: l10n_do.account_group_5101 +DEL account.group: l10n_do.account_group_5102 +DEL account.group: l10n_do.account_group_6 +DEL account.group: l10n_do.account_group_61 +DEL account.group: l10n_do.account_group_6101 +DEL account.group: l10n_do.account_group_610101 +DEL account.group: l10n_do.account_group_610102 +DEL account.group: l10n_do.account_group_6102 +DEL account.group: l10n_do.account_group_6103 +DEL account.group: l10n_do.account_group_610301 +DEL account.group: l10n_do.account_group_610302 +DEL account.group: l10n_do.account_group_610303 +DEL account.group: l10n_do.account_group_6104 +DEL account.group: l10n_do.account_group_6105 +DEL account.group: l10n_do.account_group_6106 +DEL account.group: l10n_do.account_group_6107 +DEL account.group: l10n_do.account_group_6108 +DEL account.group: l10n_do.account_group_7 +DEL account.group: l10n_do.account_group_71 +DEL account.group: l10n_do.account_group_7101 +DEL account.group: l10n_do.account_group_documentosporcobrar +NEW account.group.template: l10n_do.account_group_1 +NEW account.group.template: l10n_do.account_group_11 +NEW account.group.template: l10n_do.account_group_1101 +NEW account.group.template: l10n_do.account_group_110101 +NEW account.group.template: l10n_do.account_group_110102 +NEW account.group.template: l10n_do.account_group_110103 +NEW account.group.template: l10n_do.account_group_1102 +NEW account.group.template: l10n_do.account_group_1103 +NEW account.group.template: l10n_do.account_group_110301 +NEW account.group.template: l10n_do.account_group_110302 +NEW account.group.template: l10n_do.account_group_1104 +NEW account.group.template: l10n_do.account_group_1105 +NEW account.group.template: l10n_do.account_group_1106 +NEW account.group.template: l10n_do.account_group_1107 +NEW account.group.template: l10n_do.account_group_1108 +NEW account.group.template: l10n_do.account_group_110801 +NEW account.group.template: l10n_do.account_group_110803 +NEW account.group.template: l10n_do.account_group_1109 +NEW account.group.template: l10n_do.account_group_1110 +NEW account.group.template: l10n_do.account_group_12 +NEW account.group.template: l10n_do.account_group_1201 +NEW account.group.template: l10n_do.account_group_120101 +NEW account.group.template: l10n_do.account_group_120102 +NEW account.group.template: l10n_do.account_group_120103 +NEW account.group.template: l10n_do.account_group_1202 +NEW account.group.template: l10n_do.account_group_1203 +NEW account.group.template: l10n_do.account_group_1204 +NEW account.group.template: l10n_do.account_group_1205 +NEW account.group.template: l10n_do.account_group_1206 +NEW account.group.template: l10n_do.account_group_1207 +NEW account.group.template: l10n_do.account_group_1208 +NEW account.group.template: l10n_do.account_group_1209 +NEW account.group.template: l10n_do.account_group_13 +NEW account.group.template: l10n_do.account_group_1301 +NEW account.group.template: l10n_do.account_group_130101 +NEW account.group.template: l10n_do.account_group_2 +NEW account.group.template: l10n_do.account_group_21 +NEW account.group.template: l10n_do.account_group_2101 +NEW account.group.template: l10n_do.account_group_2102 +NEW account.group.template: l10n_do.account_group_2103 +NEW account.group.template: l10n_do.account_group_210301 +NEW account.group.template: l10n_do.account_group_210302 +NEW account.group.template: l10n_do.account_group_210303 +NEW account.group.template: l10n_do.account_group_210304 +NEW account.group.template: l10n_do.account_group_210305 +NEW account.group.template: l10n_do.account_group_2104 +NEW account.group.template: l10n_do.account_group_2105 +NEW account.group.template: l10n_do.account_group_22 +NEW account.group.template: l10n_do.account_group_2201 +NEW account.group.template: l10n_do.account_group_2202 +NEW account.group.template: l10n_do.account_group_2203 +NEW account.group.template: l10n_do.account_group_2204 +NEW account.group.template: l10n_do.account_group_3 +NEW account.group.template: l10n_do.account_group_31 +NEW account.group.template: l10n_do.account_group_3101 +NEW account.group.template: l10n_do.account_group_3102 +NEW account.group.template: l10n_do.account_group_32 +NEW account.group.template: l10n_do.account_group_3201 +NEW account.group.template: l10n_do.account_group_33 +NEW account.group.template: l10n_do.account_group_3301 +NEW account.group.template: l10n_do.account_group_3302 +NEW account.group.template: l10n_do.account_group_3304 +NEW account.group.template: l10n_do.account_group_4 +NEW account.group.template: l10n_do.account_group_41 +NEW account.group.template: l10n_do.account_group_4101 +NEW account.group.template: l10n_do.account_group_4102 +NEW account.group.template: l10n_do.account_group_4103 +NEW account.group.template: l10n_do.account_group_4104 +NEW account.group.template: l10n_do.account_group_42 +NEW account.group.template: l10n_do.account_group_4201 +NEW account.group.template: l10n_do.account_group_4202 +NEW account.group.template: l10n_do.account_group_4203 +NEW account.group.template: l10n_do.account_group_4204 +NEW account.group.template: l10n_do.account_group_5 +NEW account.group.template: l10n_do.account_group_51 +NEW account.group.template: l10n_do.account_group_5101 +NEW account.group.template: l10n_do.account_group_5102 +NEW account.group.template: l10n_do.account_group_6 +NEW account.group.template: l10n_do.account_group_61 +NEW account.group.template: l10n_do.account_group_6101 +NEW account.group.template: l10n_do.account_group_610101 +NEW account.group.template: l10n_do.account_group_610102 +NEW account.group.template: l10n_do.account_group_6102 +NEW account.group.template: l10n_do.account_group_6103 +NEW account.group.template: l10n_do.account_group_610301 +NEW account.group.template: l10n_do.account_group_610302 +NEW account.group.template: l10n_do.account_group_610303 +NEW account.group.template: l10n_do.account_group_6104 +NEW account.group.template: l10n_do.account_group_6105 +NEW account.group.template: l10n_do.account_group_6106 +NEW account.group.template: l10n_do.account_group_6107 +NEW account.group.template: l10n_do.account_group_6108 +NEW account.group.template: l10n_do.account_group_7 +NEW account.group.template: l10n_do.account_group_71 +NEW account.group.template: l10n_do.account_group_7101 +NEW account.tax.report: l10n_do.tax_report +NEW account.tax.report.line: l10n_do.account_financial_report_line_02_01_do_account_tax_report_total_itbs +DEL account.tax.report.line: l10n_do.account_financial_report_line_02_01_do account_tax_report_total_itbs +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/l10n_dz/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_dz/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..5f4ced92d2b6 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_dz/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,5 @@ +---Models in module 'l10n_dz'--- +---Fields in module 'l10n_dz'--- +l10n_dz / account.move / amount_total_words (char) : previously in module l10n_in +---XML records in module 'l10n_dz'--- +NEW ir.ui.view: l10n_dz.invoice_report_amount_in_words_inherit diff --git a/openupgrade_scripts/scripts/l10n_es/14.0.5.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_es/14.0.5.1/upgrade_analysis.txt new file mode 100644 index 000000000000..0a10a1c1803e --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_es/14.0.5.1/upgrade_analysis.txt @@ -0,0 +1,1871 @@ +---Models in module 'l10n_es'--- +---Fields in module 'l10n_es'--- +---XML records in module 'l10n_es'--- +NEW account.account.tag: l10n_es.mod_111_11 +NEW account.account.tag: l10n_es.mod_111_12 +NEW account.fiscal.position.tax.template: l10n_es.fptt_reagyp_a_4b_3 +NEW account.fiscal.position.tax.template: l10n_es.fptt_reagyp_a_4b_4 +DEL account.group: l10n_es.account_group_1 +DEL account.group: l10n_es.account_group_10 +DEL account.group: l10n_es.account_group_100 +DEL account.group: l10n_es.account_group_101 +DEL account.group: l10n_es.account_group_102 +DEL account.group: l10n_es.account_group_103 +DEL account.group: l10n_es.account_group_1030 +DEL account.group: l10n_es.account_group_1034 +DEL account.group: l10n_es.account_group_104 +DEL account.group: l10n_es.account_group_1040 +DEL account.group: l10n_es.account_group_1044 +DEL account.group: l10n_es.account_group_108 +DEL account.group: l10n_es.account_group_109 +DEL account.group: l10n_es.account_group_11 +DEL account.group: l10n_es.account_group_110 +DEL account.group: l10n_es.account_group_111 +DEL account.group: l10n_es.account_group_1110 +DEL account.group: l10n_es.account_group_1111 +DEL account.group: l10n_es.account_group_112 +DEL account.group: l10n_es.account_group_113 +DEL account.group: l10n_es.account_group_114 +DEL account.group: l10n_es.account_group_1140 +DEL account.group: l10n_es.account_group_1141 +DEL account.group: l10n_es.account_group_1142 +DEL account.group: l10n_es.account_group_1143 +DEL account.group: l10n_es.account_group_1144 +DEL account.group: l10n_es.account_group_115 +DEL account.group: l10n_es.account_group_118 +DEL account.group: l10n_es.account_group_119 +DEL account.group: l10n_es.account_group_12 +DEL account.group: l10n_es.account_group_120 +DEL account.group: l10n_es.account_group_121 +DEL account.group: l10n_es.account_group_129 +DEL account.group: l10n_es.account_group_13 +DEL account.group: l10n_es.account_group_130 +DEL account.group: l10n_es.account_group_131 +DEL account.group: l10n_es.account_group_132 +DEL account.group: l10n_es.account_group_133 +DEL account.group: l10n_es.account_group_134 +DEL account.group: l10n_es.account_group_1340 +DEL account.group: l10n_es.account_group_1341 +DEL account.group: l10n_es.account_group_135 +DEL account.group: l10n_es.account_group_136 +DEL account.group: l10n_es.account_group_137 +DEL account.group: l10n_es.account_group_1370 +DEL account.group: l10n_es.account_group_1371 +DEL account.group: l10n_es.account_group_14 +DEL account.group: l10n_es.account_group_140 +DEL account.group: l10n_es.account_group_141 +DEL account.group: l10n_es.account_group_142 +DEL account.group: l10n_es.account_group_143 +DEL account.group: l10n_es.account_group_145 +DEL account.group: l10n_es.account_group_146 +DEL account.group: l10n_es.account_group_147 +DEL account.group: l10n_es.account_group_15 +DEL account.group: l10n_es.account_group_150 +DEL account.group: l10n_es.account_group_153 +DEL account.group: l10n_es.account_group_1533 +DEL account.group: l10n_es.account_group_1534 +DEL account.group: l10n_es.account_group_1535 +DEL account.group: l10n_es.account_group_1536 +DEL account.group: l10n_es.account_group_154 +DEL account.group: l10n_es.account_group_1543 +DEL account.group: l10n_es.account_group_1544 +DEL account.group: l10n_es.account_group_1545 +DEL account.group: l10n_es.account_group_1546 +DEL account.group: l10n_es.account_group_16 +DEL account.group: l10n_es.account_group_160 +DEL account.group: l10n_es.account_group_1603 +DEL account.group: l10n_es.account_group_1604 +DEL account.group: l10n_es.account_group_1605 +DEL account.group: l10n_es.account_group_161 +DEL account.group: l10n_es.account_group_1613 +DEL account.group: l10n_es.account_group_1614 +DEL account.group: l10n_es.account_group_1615 +DEL account.group: l10n_es.account_group_162 +DEL account.group: l10n_es.account_group_1623 +DEL account.group: l10n_es.account_group_1624 +DEL account.group: l10n_es.account_group_1625 +DEL account.group: l10n_es.account_group_163 +DEL account.group: l10n_es.account_group_1633 +DEL account.group: l10n_es.account_group_1634 +DEL account.group: l10n_es.account_group_1635 +DEL account.group: l10n_es.account_group_17 +DEL account.group: l10n_es.account_group_170 +DEL account.group: l10n_es.account_group_171 +DEL account.group: l10n_es.account_group_172 +DEL account.group: l10n_es.account_group_173 +DEL account.group: l10n_es.account_group_174 +DEL account.group: l10n_es.account_group_175 +DEL account.group: l10n_es.account_group_176 +DEL account.group: l10n_es.account_group_1760 +DEL account.group: l10n_es.account_group_1765 +DEL account.group: l10n_es.account_group_1768 +DEL account.group: l10n_es.account_group_177 +DEL account.group: l10n_es.account_group_178 +DEL account.group: l10n_es.account_group_179 +DEL account.group: l10n_es.account_group_18 +DEL account.group: l10n_es.account_group_180 +DEL account.group: l10n_es.account_group_181 +DEL account.group: l10n_es.account_group_185 +DEL account.group: l10n_es.account_group_189 +DEL account.group: l10n_es.account_group_19 +DEL account.group: l10n_es.account_group_190 +DEL account.group: l10n_es.account_group_192 +DEL account.group: l10n_es.account_group_194 +DEL account.group: l10n_es.account_group_195 +DEL account.group: l10n_es.account_group_197 +DEL account.group: l10n_es.account_group_199 +DEL account.group: l10n_es.account_group_2 +DEL account.group: l10n_es.account_group_20 +DEL account.group: l10n_es.account_group_200 +DEL account.group: l10n_es.account_group_201 +DEL account.group: l10n_es.account_group_202 +DEL account.group: l10n_es.account_group_203 +DEL account.group: l10n_es.account_group_204 +DEL account.group: l10n_es.account_group_205 +DEL account.group: l10n_es.account_group_206 +DEL account.group: l10n_es.account_group_207 +DEL account.group: l10n_es.account_group_209 +DEL account.group: l10n_es.account_group_21 +DEL account.group: l10n_es.account_group_210 +DEL account.group: l10n_es.account_group_211 +DEL account.group: l10n_es.account_group_212 +DEL account.group: l10n_es.account_group_213 +DEL account.group: l10n_es.account_group_214 +DEL account.group: l10n_es.account_group_215 +DEL account.group: l10n_es.account_group_216 +DEL account.group: l10n_es.account_group_217 +DEL account.group: l10n_es.account_group_218 +DEL account.group: l10n_es.account_group_219 +DEL account.group: l10n_es.account_group_22 +DEL account.group: l10n_es.account_group_220 +DEL account.group: l10n_es.account_group_221 +DEL account.group: l10n_es.account_group_23 +DEL account.group: l10n_es.account_group_230 +DEL account.group: l10n_es.account_group_231 +DEL account.group: l10n_es.account_group_232 +DEL account.group: l10n_es.account_group_233 +DEL account.group: l10n_es.account_group_237 +DEL account.group: l10n_es.account_group_239 +DEL account.group: l10n_es.account_group_24 +DEL account.group: l10n_es.account_group_240 +DEL account.group: l10n_es.account_group_2403 +DEL account.group: l10n_es.account_group_2404 +DEL account.group: l10n_es.account_group_2405 +DEL account.group: l10n_es.account_group_241 +DEL account.group: l10n_es.account_group_2413 +DEL account.group: l10n_es.account_group_2414 +DEL account.group: l10n_es.account_group_2415 +DEL account.group: l10n_es.account_group_242 +DEL account.group: l10n_es.account_group_2423 +DEL account.group: l10n_es.account_group_2424 +DEL account.group: l10n_es.account_group_2425 +DEL account.group: l10n_es.account_group_249 +DEL account.group: l10n_es.account_group_2493 +DEL account.group: l10n_es.account_group_2494 +DEL account.group: l10n_es.account_group_2495 +DEL account.group: l10n_es.account_group_25 +DEL account.group: l10n_es.account_group_250 +DEL account.group: l10n_es.account_group_251 +DEL account.group: l10n_es.account_group_252 +DEL account.group: l10n_es.account_group_253 +DEL account.group: l10n_es.account_group_254 +DEL account.group: l10n_es.account_group_255 +DEL account.group: l10n_es.account_group_2550 +DEL account.group: l10n_es.account_group_2553 +DEL account.group: l10n_es.account_group_257 +DEL account.group: l10n_es.account_group_258 +DEL account.group: l10n_es.account_group_259 +DEL account.group: l10n_es.account_group_26 +DEL account.group: l10n_es.account_group_260 +DEL account.group: l10n_es.account_group_265 +DEL account.group: l10n_es.account_group_28 +DEL account.group: l10n_es.account_group_280 +DEL account.group: l10n_es.account_group_2800 +DEL account.group: l10n_es.account_group_2801 +DEL account.group: l10n_es.account_group_2802 +DEL account.group: l10n_es.account_group_2803 +DEL account.group: l10n_es.account_group_2805 +DEL account.group: l10n_es.account_group_2806 +DEL account.group: l10n_es.account_group_281 +DEL account.group: l10n_es.account_group_2811 +DEL account.group: l10n_es.account_group_2812 +DEL account.group: l10n_es.account_group_2813 +DEL account.group: l10n_es.account_group_2814 +DEL account.group: l10n_es.account_group_2815 +DEL account.group: l10n_es.account_group_2816 +DEL account.group: l10n_es.account_group_2817 +DEL account.group: l10n_es.account_group_2818 +DEL account.group: l10n_es.account_group_2819 +DEL account.group: l10n_es.account_group_282 +DEL account.group: l10n_es.account_group_283 +DEL account.group: l10n_es.account_group_29 +DEL account.group: l10n_es.account_group_290 +DEL account.group: l10n_es.account_group_2900 +DEL account.group: l10n_es.account_group_2901 +DEL account.group: l10n_es.account_group_2902 +DEL account.group: l10n_es.account_group_2903 +DEL account.group: l10n_es.account_group_2905 +DEL account.group: l10n_es.account_group_2906 +DEL account.group: l10n_es.account_group_291 +DEL account.group: l10n_es.account_group_2910 +DEL account.group: l10n_es.account_group_2911 +DEL account.group: l10n_es.account_group_2912 +DEL account.group: l10n_es.account_group_2913 +DEL account.group: l10n_es.account_group_2914 +DEL account.group: l10n_es.account_group_2915 +DEL account.group: l10n_es.account_group_2916 +DEL account.group: l10n_es.account_group_2917 +DEL account.group: l10n_es.account_group_2918 +DEL account.group: l10n_es.account_group_2919 +DEL account.group: l10n_es.account_group_292 +DEL account.group: l10n_es.account_group_2920 +DEL account.group: l10n_es.account_group_2921 +DEL account.group: l10n_es.account_group_293 +DEL account.group: l10n_es.account_group_2933 +DEL account.group: l10n_es.account_group_2934 +DEL account.group: l10n_es.account_group_294 +DEL account.group: l10n_es.account_group_2943 +DEL account.group: l10n_es.account_group_2944 +DEL account.group: l10n_es.account_group_2945 +DEL account.group: l10n_es.account_group_295 +DEL account.group: l10n_es.account_group_2953 +DEL account.group: l10n_es.account_group_2954 +DEL account.group: l10n_es.account_group_2955 +DEL account.group: l10n_es.account_group_296 +DEL account.group: l10n_es.account_group_297 +DEL account.group: l10n_es.account_group_298 +DEL account.group: l10n_es.account_group_299 +DEL account.group: l10n_es.account_group_3 +DEL account.group: l10n_es.account_group_30 +DEL account.group: l10n_es.account_group_300 +DEL account.group: l10n_es.account_group_301 +DEL account.group: l10n_es.account_group_31 +DEL account.group: l10n_es.account_group_310 +DEL account.group: l10n_es.account_group_311 +DEL account.group: l10n_es.account_group_32 +DEL account.group: l10n_es.account_group_320 +DEL account.group: l10n_es.account_group_321 +DEL account.group: l10n_es.account_group_322 +DEL account.group: l10n_es.account_group_325 +DEL account.group: l10n_es.account_group_326 +DEL account.group: l10n_es.account_group_327 +DEL account.group: l10n_es.account_group_328 +DEL account.group: l10n_es.account_group_33 +DEL account.group: l10n_es.account_group_330 +DEL account.group: l10n_es.account_group_331 +DEL account.group: l10n_es.account_group_34 +DEL account.group: l10n_es.account_group_340 +DEL account.group: l10n_es.account_group_341 +DEL account.group: l10n_es.account_group_35 +DEL account.group: l10n_es.account_group_350 +DEL account.group: l10n_es.account_group_351 +DEL account.group: l10n_es.account_group_36 +DEL account.group: l10n_es.account_group_360 +DEL account.group: l10n_es.account_group_361 +DEL account.group: l10n_es.account_group_365 +DEL account.group: l10n_es.account_group_366 +DEL account.group: l10n_es.account_group_368 +DEL account.group: l10n_es.account_group_369 +DEL account.group: l10n_es.account_group_39 +DEL account.group: l10n_es.account_group_390 +DEL account.group: l10n_es.account_group_391 +DEL account.group: l10n_es.account_group_392 +DEL account.group: l10n_es.account_group_393 +DEL account.group: l10n_es.account_group_394 +DEL account.group: l10n_es.account_group_395 +DEL account.group: l10n_es.account_group_396 +DEL account.group: l10n_es.account_group_4 +DEL account.group: l10n_es.account_group_40 +DEL account.group: l10n_es.account_group_400 +DEL account.group: l10n_es.account_group_4000 +DEL account.group: l10n_es.account_group_4004 +DEL account.group: l10n_es.account_group_4009 +DEL account.group: l10n_es.account_group_401 +DEL account.group: l10n_es.account_group_403 +DEL account.group: l10n_es.account_group_4030 +DEL account.group: l10n_es.account_group_4031 +DEL account.group: l10n_es.account_group_4034 +DEL account.group: l10n_es.account_group_4036 +DEL account.group: l10n_es.account_group_4039 +DEL account.group: l10n_es.account_group_404 +DEL account.group: l10n_es.account_group_405 +DEL account.group: l10n_es.account_group_406 +DEL account.group: l10n_es.account_group_407 +DEL account.group: l10n_es.account_group_41 +DEL account.group: l10n_es.account_group_410 +DEL account.group: l10n_es.account_group_4100 +DEL account.group: l10n_es.account_group_4104 +DEL account.group: l10n_es.account_group_4109 +DEL account.group: l10n_es.account_group_411 +DEL account.group: l10n_es.account_group_412 +DEL account.group: l10n_es.account_group_419 +DEL account.group: l10n_es.account_group_43 +DEL account.group: l10n_es.account_group_430 +DEL account.group: l10n_es.account_group_4300 +DEL account.group: l10n_es.account_group_4304 +DEL account.group: l10n_es.account_group_4309 +DEL account.group: l10n_es.account_group_431 +DEL account.group: l10n_es.account_group_4310 +DEL account.group: l10n_es.account_group_4311 +DEL account.group: l10n_es.account_group_4312 +DEL account.group: l10n_es.account_group_4315 +DEL account.group: l10n_es.account_group_432 +DEL account.group: l10n_es.account_group_433 +DEL account.group: l10n_es.account_group_4330 +DEL account.group: l10n_es.account_group_4331 +DEL account.group: l10n_es.account_group_4332 +DEL account.group: l10n_es.account_group_4334 +DEL account.group: l10n_es.account_group_4336 +DEL account.group: l10n_es.account_group_4337 +DEL account.group: l10n_es.account_group_4339 +DEL account.group: l10n_es.account_group_434 +DEL account.group: l10n_es.account_group_435 +DEL account.group: l10n_es.account_group_436 +DEL account.group: l10n_es.account_group_437 +DEL account.group: l10n_es.account_group_438 +DEL account.group: l10n_es.account_group_44 +DEL account.group: l10n_es.account_group_440 +DEL account.group: l10n_es.account_group_4400 +DEL account.group: l10n_es.account_group_4404 +DEL account.group: l10n_es.account_group_4409 +DEL account.group: l10n_es.account_group_441 +DEL account.group: l10n_es.account_group_4410 +DEL account.group: l10n_es.account_group_4411 +DEL account.group: l10n_es.account_group_4412 +DEL account.group: l10n_es.account_group_4415 +DEL account.group: l10n_es.account_group_446 +DEL account.group: l10n_es.account_group_447 +DEL account.group: l10n_es.account_group_448 +DEL account.group: l10n_es.account_group_449 +DEL account.group: l10n_es.account_group_46 +DEL account.group: l10n_es.account_group_460 +DEL account.group: l10n_es.account_group_464 +DEL account.group: l10n_es.account_group_465 +DEL account.group: l10n_es.account_group_466 +DEL account.group: l10n_es.account_group_47 +DEL account.group: l10n_es.account_group_470 +DEL account.group: l10n_es.account_group_4700 +DEL account.group: l10n_es.account_group_4708 +DEL account.group: l10n_es.account_group_4709 +DEL account.group: l10n_es.account_group_471 +DEL account.group: l10n_es.account_group_472 +DEL account.group: l10n_es.account_group_473 +DEL account.group: l10n_es.account_group_474 +DEL account.group: l10n_es.account_group_4740 +DEL account.group: l10n_es.account_group_4742 +DEL account.group: l10n_es.account_group_4745 +DEL account.group: l10n_es.account_group_475 +DEL account.group: l10n_es.account_group_4750 +DEL account.group: l10n_es.account_group_4751 +DEL account.group: l10n_es.account_group_4752 +DEL account.group: l10n_es.account_group_4758 +DEL account.group: l10n_es.account_group_4759 +DEL account.group: l10n_es.account_group_476 +DEL account.group: l10n_es.account_group_477 +DEL account.group: l10n_es.account_group_479 +DEL account.group: l10n_es.account_group_48 +DEL account.group: l10n_es.account_group_480 +DEL account.group: l10n_es.account_group_485 +DEL account.group: l10n_es.account_group_49 +DEL account.group: l10n_es.account_group_490 +DEL account.group: l10n_es.account_group_493 +DEL account.group: l10n_es.account_group_4933 +DEL account.group: l10n_es.account_group_4934 +DEL account.group: l10n_es.account_group_4935 +DEL account.group: l10n_es.account_group_499 +DEL account.group: l10n_es.account_group_4994 +DEL account.group: l10n_es.account_group_4999 +DEL account.group: l10n_es.account_group_5 +DEL account.group: l10n_es.account_group_50 +DEL account.group: l10n_es.account_group_500 +DEL account.group: l10n_es.account_group_501 +DEL account.group: l10n_es.account_group_502 +DEL account.group: l10n_es.account_group_505 +DEL account.group: l10n_es.account_group_506 +DEL account.group: l10n_es.account_group_507 +DEL account.group: l10n_es.account_group_509 +DEL account.group: l10n_es.account_group_5090 +DEL account.group: l10n_es.account_group_5091 +DEL account.group: l10n_es.account_group_5095 +DEL account.group: l10n_es.account_group_51 +DEL account.group: l10n_es.account_group_510 +DEL account.group: l10n_es.account_group_5103 +DEL account.group: l10n_es.account_group_5104 +DEL account.group: l10n_es.account_group_5105 +DEL account.group: l10n_es.account_group_511 +DEL account.group: l10n_es.account_group_5113 +DEL account.group: l10n_es.account_group_5114 +DEL account.group: l10n_es.account_group_5115 +DEL account.group: l10n_es.account_group_512 +DEL account.group: l10n_es.account_group_5123 +DEL account.group: l10n_es.account_group_5124 +DEL account.group: l10n_es.account_group_5125 +DEL account.group: l10n_es.account_group_513 +DEL account.group: l10n_es.account_group_5133 +DEL account.group: l10n_es.account_group_5134 +DEL account.group: l10n_es.account_group_5135 +DEL account.group: l10n_es.account_group_514 +DEL account.group: l10n_es.account_group_5143 +DEL account.group: l10n_es.account_group_5144 +DEL account.group: l10n_es.account_group_5145 +DEL account.group: l10n_es.account_group_52 +DEL account.group: l10n_es.account_group_520 +DEL account.group: l10n_es.account_group_5200 +DEL account.group: l10n_es.account_group_5201 +DEL account.group: l10n_es.account_group_5208 +DEL account.group: l10n_es.account_group_5209 +DEL account.group: l10n_es.account_group_521 +DEL account.group: l10n_es.account_group_522 +DEL account.group: l10n_es.account_group_523 +DEL account.group: l10n_es.account_group_524 +DEL account.group: l10n_es.account_group_525 +DEL account.group: l10n_es.account_group_526 +DEL account.group: l10n_es.account_group_527 +DEL account.group: l10n_es.account_group_528 +DEL account.group: l10n_es.account_group_529 +DEL account.group: l10n_es.account_group_5290 +DEL account.group: l10n_es.account_group_5291 +DEL account.group: l10n_es.account_group_5292 +DEL account.group: l10n_es.account_group_5293 +DEL account.group: l10n_es.account_group_5295 +DEL account.group: l10n_es.account_group_5296 +DEL account.group: l10n_es.account_group_5297 +DEL account.group: l10n_es.account_group_53 +DEL account.group: l10n_es.account_group_530 +DEL account.group: l10n_es.account_group_5303 +DEL account.group: l10n_es.account_group_5304 +DEL account.group: l10n_es.account_group_5305 +DEL account.group: l10n_es.account_group_531 +DEL account.group: l10n_es.account_group_5313 +DEL account.group: l10n_es.account_group_5314 +DEL account.group: l10n_es.account_group_5315 +DEL account.group: l10n_es.account_group_532 +DEL account.group: l10n_es.account_group_5323 +DEL account.group: l10n_es.account_group_5324 +DEL account.group: l10n_es.account_group_5325 +DEL account.group: l10n_es.account_group_533 +DEL account.group: l10n_es.account_group_5333 +DEL account.group: l10n_es.account_group_5334 +DEL account.group: l10n_es.account_group_5335 +DEL account.group: l10n_es.account_group_534 +DEL account.group: l10n_es.account_group_5343 +DEL account.group: l10n_es.account_group_5344 +DEL account.group: l10n_es.account_group_5345 +DEL account.group: l10n_es.account_group_535 +DEL account.group: l10n_es.account_group_5353 +DEL account.group: l10n_es.account_group_5354 +DEL account.group: l10n_es.account_group_5355 +DEL account.group: l10n_es.account_group_539 +DEL account.group: l10n_es.account_group_5393 +DEL account.group: l10n_es.account_group_5394 +DEL account.group: l10n_es.account_group_5395 +DEL account.group: l10n_es.account_group_54 +DEL account.group: l10n_es.account_group_540 +DEL account.group: l10n_es.account_group_541 +DEL account.group: l10n_es.account_group_542 +DEL account.group: l10n_es.account_group_543 +DEL account.group: l10n_es.account_group_544 +DEL account.group: l10n_es.account_group_545 +DEL account.group: l10n_es.account_group_546 +DEL account.group: l10n_es.account_group_547 +DEL account.group: l10n_es.account_group_548 +DEL account.group: l10n_es.account_group_549 +DEL account.group: l10n_es.account_group_55 +DEL account.group: l10n_es.account_group_550 +DEL account.group: l10n_es.account_group_551 +DEL account.group: l10n_es.account_group_552 +DEL account.group: l10n_es.account_group_5523 +DEL account.group: l10n_es.account_group_5524 +DEL account.group: l10n_es.account_group_5525 +DEL account.group: l10n_es.account_group_553 +DEL account.group: l10n_es.account_group_5530 +DEL account.group: l10n_es.account_group_5531 +DEL account.group: l10n_es.account_group_5532 +DEL account.group: l10n_es.account_group_5533 +DEL account.group: l10n_es.account_group_554 +DEL account.group: l10n_es.account_group_555 +DEL account.group: l10n_es.account_group_556 +DEL account.group: l10n_es.account_group_5563 +DEL account.group: l10n_es.account_group_5564 +DEL account.group: l10n_es.account_group_5565 +DEL account.group: l10n_es.account_group_5566 +DEL account.group: l10n_es.account_group_557 +DEL account.group: l10n_es.account_group_558 +DEL account.group: l10n_es.account_group_5580 +DEL account.group: l10n_es.account_group_5585 +DEL account.group: l10n_es.account_group_559 +DEL account.group: l10n_es.account_group_5590 +DEL account.group: l10n_es.account_group_5593 +DEL account.group: l10n_es.account_group_5595 +DEL account.group: l10n_es.account_group_5598 +DEL account.group: l10n_es.account_group_56 +DEL account.group: l10n_es.account_group_560 +DEL account.group: l10n_es.account_group_561 +DEL account.group: l10n_es.account_group_565 +DEL account.group: l10n_es.account_group_566 +DEL account.group: l10n_es.account_group_567 +DEL account.group: l10n_es.account_group_568 +DEL account.group: l10n_es.account_group_569 +DEL account.group: l10n_es.account_group_57 +DEL account.group: l10n_es.account_group_570 +DEL account.group: l10n_es.account_group_571 +DEL account.group: l10n_es.account_group_572 +DEL account.group: l10n_es.account_group_573 +DEL account.group: l10n_es.account_group_574 +DEL account.group: l10n_es.account_group_575 +DEL account.group: l10n_es.account_group_576 +DEL account.group: l10n_es.account_group_58 +DEL account.group: l10n_es.account_group_580 +DEL account.group: l10n_es.account_group_581 +DEL account.group: l10n_es.account_group_582 +DEL account.group: l10n_es.account_group_583 +DEL account.group: l10n_es.account_group_584 +DEL account.group: l10n_es.account_group_585 +DEL account.group: l10n_es.account_group_586 +DEL account.group: l10n_es.account_group_587 +DEL account.group: l10n_es.account_group_588 +DEL account.group: l10n_es.account_group_589 +DEL account.group: l10n_es.account_group_59 +DEL account.group: l10n_es.account_group_593 +DEL account.group: l10n_es.account_group_5933 +DEL account.group: l10n_es.account_group_5934 +DEL account.group: l10n_es.account_group_594 +DEL account.group: l10n_es.account_group_5943 +DEL account.group: l10n_es.account_group_5944 +DEL account.group: l10n_es.account_group_5945 +DEL account.group: l10n_es.account_group_595 +DEL account.group: l10n_es.account_group_5953 +DEL account.group: l10n_es.account_group_5954 +DEL account.group: l10n_es.account_group_5955 +DEL account.group: l10n_es.account_group_596 +DEL account.group: l10n_es.account_group_597 +DEL account.group: l10n_es.account_group_598 +DEL account.group: l10n_es.account_group_599 +DEL account.group: l10n_es.account_group_5990 +DEL account.group: l10n_es.account_group_5991 +DEL account.group: l10n_es.account_group_5992 +DEL account.group: l10n_es.account_group_5993 +DEL account.group: l10n_es.account_group_5994 +DEL account.group: l10n_es.account_group_6 +DEL account.group: l10n_es.account_group_60 +DEL account.group: l10n_es.account_group_600 +DEL account.group: l10n_es.account_group_601 +DEL account.group: l10n_es.account_group_602 +DEL account.group: l10n_es.account_group_606 +DEL account.group: l10n_es.account_group_6060 +DEL account.group: l10n_es.account_group_6061 +DEL account.group: l10n_es.account_group_6062 +DEL account.group: l10n_es.account_group_607 +DEL account.group: l10n_es.account_group_608 +DEL account.group: l10n_es.account_group_6080 +DEL account.group: l10n_es.account_group_6081 +DEL account.group: l10n_es.account_group_6082 +DEL account.group: l10n_es.account_group_609 +DEL account.group: l10n_es.account_group_6090 +DEL account.group: l10n_es.account_group_6091 +DEL account.group: l10n_es.account_group_6092 +DEL account.group: l10n_es.account_group_61 +DEL account.group: l10n_es.account_group_610 +DEL account.group: l10n_es.account_group_611 +DEL account.group: l10n_es.account_group_612 +DEL account.group: l10n_es.account_group_62 +DEL account.group: l10n_es.account_group_620 +DEL account.group: l10n_es.account_group_621 +DEL account.group: l10n_es.account_group_622 +DEL account.group: l10n_es.account_group_623 +DEL account.group: l10n_es.account_group_624 +DEL account.group: l10n_es.account_group_625 +DEL account.group: l10n_es.account_group_626 +DEL account.group: l10n_es.account_group_627 +DEL account.group: l10n_es.account_group_628 +DEL account.group: l10n_es.account_group_629 +DEL account.group: l10n_es.account_group_63 +DEL account.group: l10n_es.account_group_630 +DEL account.group: l10n_es.account_group_6300 +DEL account.group: l10n_es.account_group_6301 +DEL account.group: l10n_es.account_group_631 +DEL account.group: l10n_es.account_group_633 +DEL account.group: l10n_es.account_group_634 +DEL account.group: l10n_es.account_group_6341 +DEL account.group: l10n_es.account_group_6342 +DEL account.group: l10n_es.account_group_636 +DEL account.group: l10n_es.account_group_638 +DEL account.group: l10n_es.account_group_639 +DEL account.group: l10n_es.account_group_6391 +DEL account.group: l10n_es.account_group_6392 +DEL account.group: l10n_es.account_group_64 +DEL account.group: l10n_es.account_group_640 +DEL account.group: l10n_es.account_group_641 +DEL account.group: l10n_es.account_group_642 +DEL account.group: l10n_es.account_group_643 +DEL account.group: l10n_es.account_group_644 +DEL account.group: l10n_es.account_group_6440 +DEL account.group: l10n_es.account_group_6442 +DEL account.group: l10n_es.account_group_645 +DEL account.group: l10n_es.account_group_6450 +DEL account.group: l10n_es.account_group_6457 +DEL account.group: l10n_es.account_group_649 +DEL account.group: l10n_es.account_group_65 +DEL account.group: l10n_es.account_group_650 +DEL account.group: l10n_es.account_group_651 +DEL account.group: l10n_es.account_group_6510 +DEL account.group: l10n_es.account_group_6511 +DEL account.group: l10n_es.account_group_653 +DEL account.group: l10n_es.account_group_654 +DEL account.group: l10n_es.account_group_655 +DEL account.group: l10n_es.account_group_656 +DEL account.group: l10n_es.account_group_658 +DEL account.group: l10n_es.account_group_659 +DEL account.group: l10n_es.account_group_66 +DEL account.group: l10n_es.account_group_660 +DEL account.group: l10n_es.account_group_661 +DEL account.group: l10n_es.account_group_6610 +DEL account.group: l10n_es.account_group_6611 +DEL account.group: l10n_es.account_group_6612 +DEL account.group: l10n_es.account_group_6613 +DEL account.group: l10n_es.account_group_6615 +DEL account.group: l10n_es.account_group_6616 +DEL account.group: l10n_es.account_group_6617 +DEL account.group: l10n_es.account_group_6618 +DEL account.group: l10n_es.account_group_662 +DEL account.group: l10n_es.account_group_6620 +DEL account.group: l10n_es.account_group_6621 +DEL account.group: l10n_es.account_group_6622 +DEL account.group: l10n_es.account_group_6623 +DEL account.group: l10n_es.account_group_6624 +DEL account.group: l10n_es.account_group_663 +DEL account.group: l10n_es.account_group_6630 +DEL account.group: l10n_es.account_group_6631 +DEL account.group: l10n_es.account_group_6632 +DEL account.group: l10n_es.account_group_6633 +DEL account.group: l10n_es.account_group_664 +DEL account.group: l10n_es.account_group_6640 +DEL account.group: l10n_es.account_group_6641 +DEL account.group: l10n_es.account_group_6642 +DEL account.group: l10n_es.account_group_6643 +DEL account.group: l10n_es.account_group_665 +DEL account.group: l10n_es.account_group_6650 +DEL account.group: l10n_es.account_group_6651 +DEL account.group: l10n_es.account_group_6652 +DEL account.group: l10n_es.account_group_6653 +DEL account.group: l10n_es.account_group_6654 +DEL account.group: l10n_es.account_group_6655 +DEL account.group: l10n_es.account_group_6656 +DEL account.group: l10n_es.account_group_6657 +DEL account.group: l10n_es.account_group_666 +DEL account.group: l10n_es.account_group_6660 +DEL account.group: l10n_es.account_group_6661 +DEL account.group: l10n_es.account_group_6662 +DEL account.group: l10n_es.account_group_6663 +DEL account.group: l10n_es.account_group_6665 +DEL account.group: l10n_es.account_group_6666 +DEL account.group: l10n_es.account_group_6667 +DEL account.group: l10n_es.account_group_6668 +DEL account.group: l10n_es.account_group_667 +DEL account.group: l10n_es.account_group_6670 +DEL account.group: l10n_es.account_group_6671 +DEL account.group: l10n_es.account_group_6672 +DEL account.group: l10n_es.account_group_6673 +DEL account.group: l10n_es.account_group_6675 +DEL account.group: l10n_es.account_group_6676 +DEL account.group: l10n_es.account_group_6677 +DEL account.group: l10n_es.account_group_6678 +DEL account.group: l10n_es.account_group_668 +DEL account.group: l10n_es.account_group_669 +DEL account.group: l10n_es.account_group_67 +DEL account.group: l10n_es.account_group_670 +DEL account.group: l10n_es.account_group_671 +DEL account.group: l10n_es.account_group_672 +DEL account.group: l10n_es.account_group_673 +DEL account.group: l10n_es.account_group_6733 +DEL account.group: l10n_es.account_group_6734 +DEL account.group: l10n_es.account_group_6735 +DEL account.group: l10n_es.account_group_675 +DEL account.group: l10n_es.account_group_678 +DEL account.group: l10n_es.account_group_68 +DEL account.group: l10n_es.account_group_680 +DEL account.group: l10n_es.account_group_681 +DEL account.group: l10n_es.account_group_682 +DEL account.group: l10n_es.account_group_69 +DEL account.group: l10n_es.account_group_690 +DEL account.group: l10n_es.account_group_691 +DEL account.group: l10n_es.account_group_692 +DEL account.group: l10n_es.account_group_693 +DEL account.group: l10n_es.account_group_6930 +DEL account.group: l10n_es.account_group_6931 +DEL account.group: l10n_es.account_group_6932 +DEL account.group: l10n_es.account_group_6933 +DEL account.group: l10n_es.account_group_694 +DEL account.group: l10n_es.account_group_695 +DEL account.group: l10n_es.account_group_6954 +DEL account.group: l10n_es.account_group_6959 +DEL account.group: l10n_es.account_group_696 +DEL account.group: l10n_es.account_group_6960 +DEL account.group: l10n_es.account_group_6961 +DEL account.group: l10n_es.account_group_6962 +DEL account.group: l10n_es.account_group_6963 +DEL account.group: l10n_es.account_group_6965 +DEL account.group: l10n_es.account_group_6966 +DEL account.group: l10n_es.account_group_6967 +DEL account.group: l10n_es.account_group_6968 +DEL account.group: l10n_es.account_group_697 +DEL account.group: l10n_es.account_group_6970 +DEL account.group: l10n_es.account_group_6971 +DEL account.group: l10n_es.account_group_6972 +DEL account.group: l10n_es.account_group_6973 +DEL account.group: l10n_es.account_group_698 +DEL account.group: l10n_es.account_group_6980 +DEL account.group: l10n_es.account_group_6981 +DEL account.group: l10n_es.account_group_6985 +DEL account.group: l10n_es.account_group_6986 +DEL account.group: l10n_es.account_group_6987 +DEL account.group: l10n_es.account_group_6988 +DEL account.group: l10n_es.account_group_699 +DEL account.group: l10n_es.account_group_6990 +DEL account.group: l10n_es.account_group_6991 +DEL account.group: l10n_es.account_group_6992 +DEL account.group: l10n_es.account_group_6993 +DEL account.group: l10n_es.account_group_7 +DEL account.group: l10n_es.account_group_70 +DEL account.group: l10n_es.account_group_700 +DEL account.group: l10n_es.account_group_701 +DEL account.group: l10n_es.account_group_702 +DEL account.group: l10n_es.account_group_703 +DEL account.group: l10n_es.account_group_704 +DEL account.group: l10n_es.account_group_705 +DEL account.group: l10n_es.account_group_706 +DEL account.group: l10n_es.account_group_7060 +DEL account.group: l10n_es.account_group_7061 +DEL account.group: l10n_es.account_group_7062 +DEL account.group: l10n_es.account_group_7063 +DEL account.group: l10n_es.account_group_708 +DEL account.group: l10n_es.account_group_7080 +DEL account.group: l10n_es.account_group_7081 +DEL account.group: l10n_es.account_group_7082 +DEL account.group: l10n_es.account_group_7083 +DEL account.group: l10n_es.account_group_7084 +DEL account.group: l10n_es.account_group_709 +DEL account.group: l10n_es.account_group_7090 +DEL account.group: l10n_es.account_group_7091 +DEL account.group: l10n_es.account_group_7092 +DEL account.group: l10n_es.account_group_7093 +DEL account.group: l10n_es.account_group_7094 +DEL account.group: l10n_es.account_group_71 +DEL account.group: l10n_es.account_group_710 +DEL account.group: l10n_es.account_group_711 +DEL account.group: l10n_es.account_group_712 +DEL account.group: l10n_es.account_group_713 +DEL account.group: l10n_es.account_group_72 +DEL account.group: l10n_es.account_group_720 +DEL account.group: l10n_es.account_group_721 +DEL account.group: l10n_es.account_group_722 +DEL account.group: l10n_es.account_group_723 +DEL account.group: l10n_es.account_group_728 +DEL account.group: l10n_es.account_group_73 +DEL account.group: l10n_es.account_group_730 +DEL account.group: l10n_es.account_group_731 +DEL account.group: l10n_es.account_group_732 +DEL account.group: l10n_es.account_group_733 +DEL account.group: l10n_es.account_group_74 +DEL account.group: l10n_es.account_group_740 +DEL account.group: l10n_es.account_group_746 +DEL account.group: l10n_es.account_group_747 +DEL account.group: l10n_es.account_group_75 +DEL account.group: l10n_es.account_group_751 +DEL account.group: l10n_es.account_group_7510 +DEL account.group: l10n_es.account_group_7511 +DEL account.group: l10n_es.account_group_752 +DEL account.group: l10n_es.account_group_753 +DEL account.group: l10n_es.account_group_754 +DEL account.group: l10n_es.account_group_755 +DEL account.group: l10n_es.account_group_759 +DEL account.group: l10n_es.account_group_76 +DEL account.group: l10n_es.account_group_760 +DEL account.group: l10n_es.account_group_7600 +DEL account.group: l10n_es.account_group_7601 +DEL account.group: l10n_es.account_group_7602 +DEL account.group: l10n_es.account_group_7603 +DEL account.group: l10n_es.account_group_761 +DEL account.group: l10n_es.account_group_7610 +DEL account.group: l10n_es.account_group_7611 +DEL account.group: l10n_es.account_group_7612 +DEL account.group: l10n_es.account_group_7613 +DEL account.group: l10n_es.account_group_762 +DEL account.group: l10n_es.account_group_7620 +DEL account.group: l10n_es.account_group_76200 +DEL account.group: l10n_es.account_group_76201 +DEL account.group: l10n_es.account_group_76202 +DEL account.group: l10n_es.account_group_76203 +DEL account.group: l10n_es.account_group_7621 +DEL account.group: l10n_es.account_group_76210 +DEL account.group: l10n_es.account_group_76211 +DEL account.group: l10n_es.account_group_76212 +DEL account.group: l10n_es.account_group_76213 +DEL account.group: l10n_es.account_group_763 +DEL account.group: l10n_es.account_group_7630 +DEL account.group: l10n_es.account_group_7631 +DEL account.group: l10n_es.account_group_7632 +DEL account.group: l10n_es.account_group_7633 +DEL account.group: l10n_es.account_group_766 +DEL account.group: l10n_es.account_group_7660 +DEL account.group: l10n_es.account_group_7661 +DEL account.group: l10n_es.account_group_7662 +DEL account.group: l10n_es.account_group_7663 +DEL account.group: l10n_es.account_group_7665 +DEL account.group: l10n_es.account_group_7666 +DEL account.group: l10n_es.account_group_7667 +DEL account.group: l10n_es.account_group_7668 +DEL account.group: l10n_es.account_group_767 +DEL account.group: l10n_es.account_group_768 +DEL account.group: l10n_es.account_group_769 +DEL account.group: l10n_es.account_group_77 +DEL account.group: l10n_es.account_group_770 +DEL account.group: l10n_es.account_group_771 +DEL account.group: l10n_es.account_group_772 +DEL account.group: l10n_es.account_group_773 +DEL account.group: l10n_es.account_group_7733 +DEL account.group: l10n_es.account_group_7734 +DEL account.group: l10n_es.account_group_7735 +DEL account.group: l10n_es.account_group_774 +DEL account.group: l10n_es.account_group_775 +DEL account.group: l10n_es.account_group_778 +DEL account.group: l10n_es.account_group_79 +DEL account.group: l10n_es.account_group_790 +DEL account.group: l10n_es.account_group_791 +DEL account.group: l10n_es.account_group_792 +DEL account.group: l10n_es.account_group_793 +DEL account.group: l10n_es.account_group_7930 +DEL account.group: l10n_es.account_group_7931 +DEL account.group: l10n_es.account_group_7932 +DEL account.group: l10n_es.account_group_7933 +DEL account.group: l10n_es.account_group_794 +DEL account.group: l10n_es.account_group_795 +DEL account.group: l10n_es.account_group_7950 +DEL account.group: l10n_es.account_group_7951 +DEL account.group: l10n_es.account_group_7952 +DEL account.group: l10n_es.account_group_7954 +DEL account.group: l10n_es.account_group_79544 +DEL account.group: l10n_es.account_group_79549 +DEL account.group: l10n_es.account_group_7955 +DEL account.group: l10n_es.account_group_7956 +DEL account.group: l10n_es.account_group_7957 +DEL account.group: l10n_es.account_group_796 +DEL account.group: l10n_es.account_group_7960 +DEL account.group: l10n_es.account_group_7961 +DEL account.group: l10n_es.account_group_7965 +DEL account.group: l10n_es.account_group_7966 +DEL account.group: l10n_es.account_group_7967 +DEL account.group: l10n_es.account_group_7968 +DEL account.group: l10n_es.account_group_797 +DEL account.group: l10n_es.account_group_7970 +DEL account.group: l10n_es.account_group_7971 +DEL account.group: l10n_es.account_group_7972 +DEL account.group: l10n_es.account_group_7973 +DEL account.group: l10n_es.account_group_798 +DEL account.group: l10n_es.account_group_7980 +DEL account.group: l10n_es.account_group_7981 +DEL account.group: l10n_es.account_group_7985 +DEL account.group: l10n_es.account_group_7986 +DEL account.group: l10n_es.account_group_7987 +DEL account.group: l10n_es.account_group_7988 +DEL account.group: l10n_es.account_group_799 +DEL account.group: l10n_es.account_group_7990 +DEL account.group: l10n_es.account_group_7991 +DEL account.group: l10n_es.account_group_7992 +DEL account.group: l10n_es.account_group_7993 +DEL account.group: l10n_es.account_group_8 +DEL account.group: l10n_es.account_group_80 +DEL account.group: l10n_es.account_group_800 +DEL account.group: l10n_es.account_group_802 +DEL account.group: l10n_es.account_group_81 +DEL account.group: l10n_es.account_group_810 +DEL account.group: l10n_es.account_group_811 +DEL account.group: l10n_es.account_group_812 +DEL account.group: l10n_es.account_group_813 +DEL account.group: l10n_es.account_group_82 +DEL account.group: l10n_es.account_group_820 +DEL account.group: l10n_es.account_group_821 +DEL account.group: l10n_es.account_group_83 +DEL account.group: l10n_es.account_group_830 +DEL account.group: l10n_es.account_group_8300 +DEL account.group: l10n_es.account_group_8301 +DEL account.group: l10n_es.account_group_833 +DEL account.group: l10n_es.account_group_834 +DEL account.group: l10n_es.account_group_835 +DEL account.group: l10n_es.account_group_836 +DEL account.group: l10n_es.account_group_837 +DEL account.group: l10n_es.account_group_838 +DEL account.group: l10n_es.account_group_84 +DEL account.group: l10n_es.account_group_840 +DEL account.group: l10n_es.account_group_841 +DEL account.group: l10n_es.account_group_842 +DEL account.group: l10n_es.account_group_85 +DEL account.group: l10n_es.account_group_850 +DEL account.group: l10n_es.account_group_851 +DEL account.group: l10n_es.account_group_86 +DEL account.group: l10n_es.account_group_860 +DEL account.group: l10n_es.account_group_862 +DEL account.group: l10n_es.account_group_89 +DEL account.group: l10n_es.account_group_891 +DEL account.group: l10n_es.account_group_892 +DEL account.group: l10n_es.account_group_9 +DEL account.group: l10n_es.account_group_90 +DEL account.group: l10n_es.account_group_900 +DEL account.group: l10n_es.account_group_902 +DEL account.group: l10n_es.account_group_91 +DEL account.group: l10n_es.account_group_910 +DEL account.group: l10n_es.account_group_911 +DEL account.group: l10n_es.account_group_912 +DEL account.group: l10n_es.account_group_913 +DEL account.group: l10n_es.account_group_92 +DEL account.group: l10n_es.account_group_920 +DEL account.group: l10n_es.account_group_921 +DEL account.group: l10n_es.account_group_94 +DEL account.group: l10n_es.account_group_940 +DEL account.group: l10n_es.account_group_941 +DEL account.group: l10n_es.account_group_942 +DEL account.group: l10n_es.account_group_95 +DEL account.group: l10n_es.account_group_950 +DEL account.group: l10n_es.account_group_951 +DEL account.group: l10n_es.account_group_96 +DEL account.group: l10n_es.account_group_960 +DEL account.group: l10n_es.account_group_962 +DEL account.group: l10n_es.account_group_99 +DEL account.group: l10n_es.account_group_991 +DEL account.group: l10n_es.account_group_992 +DEL account.group: l10n_es.account_group_993 +DEL account.group: l10n_es.account_group_994 +NEW account.group.template: l10n_es.account_group_1 +NEW account.group.template: l10n_es.account_group_10 +NEW account.group.template: l10n_es.account_group_100 +NEW account.group.template: l10n_es.account_group_101 +NEW account.group.template: l10n_es.account_group_102 +NEW account.group.template: l10n_es.account_group_103 +NEW account.group.template: l10n_es.account_group_1030 +NEW account.group.template: l10n_es.account_group_1034 +NEW account.group.template: l10n_es.account_group_104 +NEW account.group.template: l10n_es.account_group_1040 +NEW account.group.template: l10n_es.account_group_1044 +NEW account.group.template: l10n_es.account_group_108 +NEW account.group.template: l10n_es.account_group_109 +NEW account.group.template: l10n_es.account_group_11 +NEW account.group.template: l10n_es.account_group_110 +NEW account.group.template: l10n_es.account_group_111 +NEW account.group.template: l10n_es.account_group_1110 +NEW account.group.template: l10n_es.account_group_1111 +NEW account.group.template: l10n_es.account_group_112 +NEW account.group.template: l10n_es.account_group_113 +NEW account.group.template: l10n_es.account_group_114 +NEW account.group.template: l10n_es.account_group_1140 +NEW account.group.template: l10n_es.account_group_1141 +NEW account.group.template: l10n_es.account_group_1142 +NEW account.group.template: l10n_es.account_group_1143 +NEW account.group.template: l10n_es.account_group_1144 +NEW account.group.template: l10n_es.account_group_115 +NEW account.group.template: l10n_es.account_group_118 +NEW account.group.template: l10n_es.account_group_119 +NEW account.group.template: l10n_es.account_group_12 +NEW account.group.template: l10n_es.account_group_120 +NEW account.group.template: l10n_es.account_group_121 +NEW account.group.template: l10n_es.account_group_129 +NEW account.group.template: l10n_es.account_group_13 +NEW account.group.template: l10n_es.account_group_130 +NEW account.group.template: l10n_es.account_group_131 +NEW account.group.template: l10n_es.account_group_132 +NEW account.group.template: l10n_es.account_group_133 +NEW account.group.template: l10n_es.account_group_134 +NEW account.group.template: l10n_es.account_group_1340 +NEW account.group.template: l10n_es.account_group_1341 +NEW account.group.template: l10n_es.account_group_135 +NEW account.group.template: l10n_es.account_group_136 +NEW account.group.template: l10n_es.account_group_137 +NEW account.group.template: l10n_es.account_group_1370 +NEW account.group.template: l10n_es.account_group_1371 +NEW account.group.template: l10n_es.account_group_14 +NEW account.group.template: l10n_es.account_group_140 +NEW account.group.template: l10n_es.account_group_141 +NEW account.group.template: l10n_es.account_group_142 +NEW account.group.template: l10n_es.account_group_143 +NEW account.group.template: l10n_es.account_group_145 +NEW account.group.template: l10n_es.account_group_146 +NEW account.group.template: l10n_es.account_group_147 +NEW account.group.template: l10n_es.account_group_15 +NEW account.group.template: l10n_es.account_group_150 +NEW account.group.template: l10n_es.account_group_153 +NEW account.group.template: l10n_es.account_group_1533 +NEW account.group.template: l10n_es.account_group_1534 +NEW account.group.template: l10n_es.account_group_1535 +NEW account.group.template: l10n_es.account_group_1536 +NEW account.group.template: l10n_es.account_group_154 +NEW account.group.template: l10n_es.account_group_1543 +NEW account.group.template: l10n_es.account_group_1544 +NEW account.group.template: l10n_es.account_group_1545 +NEW account.group.template: l10n_es.account_group_1546 +NEW account.group.template: l10n_es.account_group_16 +NEW account.group.template: l10n_es.account_group_160 +NEW account.group.template: l10n_es.account_group_1603 +NEW account.group.template: l10n_es.account_group_1604 +NEW account.group.template: l10n_es.account_group_1605 +NEW account.group.template: l10n_es.account_group_161 +NEW account.group.template: l10n_es.account_group_1613 +NEW account.group.template: l10n_es.account_group_1614 +NEW account.group.template: l10n_es.account_group_1615 +NEW account.group.template: l10n_es.account_group_162 +NEW account.group.template: l10n_es.account_group_1623 +NEW account.group.template: l10n_es.account_group_1624 +NEW account.group.template: l10n_es.account_group_1625 +NEW account.group.template: l10n_es.account_group_163 +NEW account.group.template: l10n_es.account_group_1633 +NEW account.group.template: l10n_es.account_group_1634 +NEW account.group.template: l10n_es.account_group_1635 +NEW account.group.template: l10n_es.account_group_17 +NEW account.group.template: l10n_es.account_group_170 +NEW account.group.template: l10n_es.account_group_171 +NEW account.group.template: l10n_es.account_group_172 +NEW account.group.template: l10n_es.account_group_173 +NEW account.group.template: l10n_es.account_group_174 +NEW account.group.template: l10n_es.account_group_175 +NEW account.group.template: l10n_es.account_group_176 +NEW account.group.template: l10n_es.account_group_1760 +NEW account.group.template: l10n_es.account_group_1765 +NEW account.group.template: l10n_es.account_group_1768 +NEW account.group.template: l10n_es.account_group_177 +NEW account.group.template: l10n_es.account_group_178 +NEW account.group.template: l10n_es.account_group_179 +NEW account.group.template: l10n_es.account_group_18 +NEW account.group.template: l10n_es.account_group_180 +NEW account.group.template: l10n_es.account_group_181 +NEW account.group.template: l10n_es.account_group_185 +NEW account.group.template: l10n_es.account_group_189 +NEW account.group.template: l10n_es.account_group_19 +NEW account.group.template: l10n_es.account_group_190 +NEW account.group.template: l10n_es.account_group_192 +NEW account.group.template: l10n_es.account_group_194 +NEW account.group.template: l10n_es.account_group_195 +NEW account.group.template: l10n_es.account_group_197 +NEW account.group.template: l10n_es.account_group_199 +NEW account.group.template: l10n_es.account_group_2 +NEW account.group.template: l10n_es.account_group_20 +NEW account.group.template: l10n_es.account_group_200 +NEW account.group.template: l10n_es.account_group_201 +NEW account.group.template: l10n_es.account_group_202 +NEW account.group.template: l10n_es.account_group_203 +NEW account.group.template: l10n_es.account_group_204 +NEW account.group.template: l10n_es.account_group_205 +NEW account.group.template: l10n_es.account_group_206 +NEW account.group.template: l10n_es.account_group_207 +NEW account.group.template: l10n_es.account_group_209 +NEW account.group.template: l10n_es.account_group_21 +NEW account.group.template: l10n_es.account_group_210 +NEW account.group.template: l10n_es.account_group_211 +NEW account.group.template: l10n_es.account_group_212 +NEW account.group.template: l10n_es.account_group_213 +NEW account.group.template: l10n_es.account_group_214 +NEW account.group.template: l10n_es.account_group_215 +NEW account.group.template: l10n_es.account_group_216 +NEW account.group.template: l10n_es.account_group_217 +NEW account.group.template: l10n_es.account_group_218 +NEW account.group.template: l10n_es.account_group_219 +NEW account.group.template: l10n_es.account_group_22 +NEW account.group.template: l10n_es.account_group_220 +NEW account.group.template: l10n_es.account_group_221 +NEW account.group.template: l10n_es.account_group_23 +NEW account.group.template: l10n_es.account_group_230 +NEW account.group.template: l10n_es.account_group_231 +NEW account.group.template: l10n_es.account_group_232 +NEW account.group.template: l10n_es.account_group_233 +NEW account.group.template: l10n_es.account_group_237 +NEW account.group.template: l10n_es.account_group_239 +NEW account.group.template: l10n_es.account_group_24 +NEW account.group.template: l10n_es.account_group_240 +NEW account.group.template: l10n_es.account_group_2403 +NEW account.group.template: l10n_es.account_group_2404 +NEW account.group.template: l10n_es.account_group_2405 +NEW account.group.template: l10n_es.account_group_241 +NEW account.group.template: l10n_es.account_group_2413 +NEW account.group.template: l10n_es.account_group_2414 +NEW account.group.template: l10n_es.account_group_2415 +NEW account.group.template: l10n_es.account_group_242 +NEW account.group.template: l10n_es.account_group_2423 +NEW account.group.template: l10n_es.account_group_2424 +NEW account.group.template: l10n_es.account_group_2425 +NEW account.group.template: l10n_es.account_group_249 +NEW account.group.template: l10n_es.account_group_2493 +NEW account.group.template: l10n_es.account_group_2494 +NEW account.group.template: l10n_es.account_group_2495 +NEW account.group.template: l10n_es.account_group_25 +NEW account.group.template: l10n_es.account_group_250 +NEW account.group.template: l10n_es.account_group_251 +NEW account.group.template: l10n_es.account_group_252 +NEW account.group.template: l10n_es.account_group_253 +NEW account.group.template: l10n_es.account_group_254 +NEW account.group.template: l10n_es.account_group_255 +NEW account.group.template: l10n_es.account_group_2550 +NEW account.group.template: l10n_es.account_group_2553 +NEW account.group.template: l10n_es.account_group_257 +NEW account.group.template: l10n_es.account_group_258 +NEW account.group.template: l10n_es.account_group_259 +NEW account.group.template: l10n_es.account_group_26 +NEW account.group.template: l10n_es.account_group_260 +NEW account.group.template: l10n_es.account_group_265 +NEW account.group.template: l10n_es.account_group_28 +NEW account.group.template: l10n_es.account_group_280 +NEW account.group.template: l10n_es.account_group_2800 +NEW account.group.template: l10n_es.account_group_2801 +NEW account.group.template: l10n_es.account_group_2802 +NEW account.group.template: l10n_es.account_group_2803 +NEW account.group.template: l10n_es.account_group_2805 +NEW account.group.template: l10n_es.account_group_2806 +NEW account.group.template: l10n_es.account_group_281 +NEW account.group.template: l10n_es.account_group_2811 +NEW account.group.template: l10n_es.account_group_2812 +NEW account.group.template: l10n_es.account_group_2813 +NEW account.group.template: l10n_es.account_group_2814 +NEW account.group.template: l10n_es.account_group_2815 +NEW account.group.template: l10n_es.account_group_2816 +NEW account.group.template: l10n_es.account_group_2817 +NEW account.group.template: l10n_es.account_group_2818 +NEW account.group.template: l10n_es.account_group_2819 +NEW account.group.template: l10n_es.account_group_282 +NEW account.group.template: l10n_es.account_group_283 +NEW account.group.template: l10n_es.account_group_29 +NEW account.group.template: l10n_es.account_group_290 +NEW account.group.template: l10n_es.account_group_2900 +NEW account.group.template: l10n_es.account_group_2901 +NEW account.group.template: l10n_es.account_group_2902 +NEW account.group.template: l10n_es.account_group_2903 +NEW account.group.template: l10n_es.account_group_2905 +NEW account.group.template: l10n_es.account_group_2906 +NEW account.group.template: l10n_es.account_group_291 +NEW account.group.template: l10n_es.account_group_2910 +NEW account.group.template: l10n_es.account_group_2911 +NEW account.group.template: l10n_es.account_group_2912 +NEW account.group.template: l10n_es.account_group_2913 +NEW account.group.template: l10n_es.account_group_2914 +NEW account.group.template: l10n_es.account_group_2915 +NEW account.group.template: l10n_es.account_group_2916 +NEW account.group.template: l10n_es.account_group_2917 +NEW account.group.template: l10n_es.account_group_2918 +NEW account.group.template: l10n_es.account_group_2919 +NEW account.group.template: l10n_es.account_group_292 +NEW account.group.template: l10n_es.account_group_2920 +NEW account.group.template: l10n_es.account_group_2921 +NEW account.group.template: l10n_es.account_group_293 +NEW account.group.template: l10n_es.account_group_2933 +NEW account.group.template: l10n_es.account_group_2934 +NEW account.group.template: l10n_es.account_group_294 +NEW account.group.template: l10n_es.account_group_2943 +NEW account.group.template: l10n_es.account_group_2944 +NEW account.group.template: l10n_es.account_group_2945 +NEW account.group.template: l10n_es.account_group_295 +NEW account.group.template: l10n_es.account_group_2953 +NEW account.group.template: l10n_es.account_group_2954 +NEW account.group.template: l10n_es.account_group_2955 +NEW account.group.template: l10n_es.account_group_296 +NEW account.group.template: l10n_es.account_group_297 +NEW account.group.template: l10n_es.account_group_298 +NEW account.group.template: l10n_es.account_group_299 +NEW account.group.template: l10n_es.account_group_3 +NEW account.group.template: l10n_es.account_group_30 +NEW account.group.template: l10n_es.account_group_300 +NEW account.group.template: l10n_es.account_group_301 +NEW account.group.template: l10n_es.account_group_31 +NEW account.group.template: l10n_es.account_group_310 +NEW account.group.template: l10n_es.account_group_311 +NEW account.group.template: l10n_es.account_group_32 +NEW account.group.template: l10n_es.account_group_320 +NEW account.group.template: l10n_es.account_group_321 +NEW account.group.template: l10n_es.account_group_322 +NEW account.group.template: l10n_es.account_group_325 +NEW account.group.template: l10n_es.account_group_326 +NEW account.group.template: l10n_es.account_group_327 +NEW account.group.template: l10n_es.account_group_328 +NEW account.group.template: l10n_es.account_group_33 +NEW account.group.template: l10n_es.account_group_330 +NEW account.group.template: l10n_es.account_group_331 +NEW account.group.template: l10n_es.account_group_34 +NEW account.group.template: l10n_es.account_group_340 +NEW account.group.template: l10n_es.account_group_341 +NEW account.group.template: l10n_es.account_group_35 +NEW account.group.template: l10n_es.account_group_350 +NEW account.group.template: l10n_es.account_group_351 +NEW account.group.template: l10n_es.account_group_36 +NEW account.group.template: l10n_es.account_group_360 +NEW account.group.template: l10n_es.account_group_361 +NEW account.group.template: l10n_es.account_group_365 +NEW account.group.template: l10n_es.account_group_366 +NEW account.group.template: l10n_es.account_group_368 +NEW account.group.template: l10n_es.account_group_369 +NEW account.group.template: l10n_es.account_group_39 +NEW account.group.template: l10n_es.account_group_390 +NEW account.group.template: l10n_es.account_group_391 +NEW account.group.template: l10n_es.account_group_392 +NEW account.group.template: l10n_es.account_group_393 +NEW account.group.template: l10n_es.account_group_394 +NEW account.group.template: l10n_es.account_group_395 +NEW account.group.template: l10n_es.account_group_396 +NEW account.group.template: l10n_es.account_group_4 +NEW account.group.template: l10n_es.account_group_40 +NEW account.group.template: l10n_es.account_group_400 +NEW account.group.template: l10n_es.account_group_4000 +NEW account.group.template: l10n_es.account_group_4004 +NEW account.group.template: l10n_es.account_group_4009 +NEW account.group.template: l10n_es.account_group_401 +NEW account.group.template: l10n_es.account_group_403 +NEW account.group.template: l10n_es.account_group_4030 +NEW account.group.template: l10n_es.account_group_4031 +NEW account.group.template: l10n_es.account_group_4034 +NEW account.group.template: l10n_es.account_group_4036 +NEW account.group.template: l10n_es.account_group_4039 +NEW account.group.template: l10n_es.account_group_404 +NEW account.group.template: l10n_es.account_group_405 +NEW account.group.template: l10n_es.account_group_406 +NEW account.group.template: l10n_es.account_group_407 +NEW account.group.template: l10n_es.account_group_41 +NEW account.group.template: l10n_es.account_group_410 +NEW account.group.template: l10n_es.account_group_4100 +NEW account.group.template: l10n_es.account_group_4104 +NEW account.group.template: l10n_es.account_group_4109 +NEW account.group.template: l10n_es.account_group_411 +NEW account.group.template: l10n_es.account_group_412 +NEW account.group.template: l10n_es.account_group_419 +NEW account.group.template: l10n_es.account_group_43 +NEW account.group.template: l10n_es.account_group_430 +NEW account.group.template: l10n_es.account_group_4300 +NEW account.group.template: l10n_es.account_group_4304 +NEW account.group.template: l10n_es.account_group_4309 +NEW account.group.template: l10n_es.account_group_431 +NEW account.group.template: l10n_es.account_group_4310 +NEW account.group.template: l10n_es.account_group_4311 +NEW account.group.template: l10n_es.account_group_4312 +NEW account.group.template: l10n_es.account_group_4315 +NEW account.group.template: l10n_es.account_group_432 +NEW account.group.template: l10n_es.account_group_433 +NEW account.group.template: l10n_es.account_group_4330 +NEW account.group.template: l10n_es.account_group_4331 +NEW account.group.template: l10n_es.account_group_4332 +NEW account.group.template: l10n_es.account_group_4334 +NEW account.group.template: l10n_es.account_group_4336 +NEW account.group.template: l10n_es.account_group_4337 +NEW account.group.template: l10n_es.account_group_4339 +NEW account.group.template: l10n_es.account_group_434 +NEW account.group.template: l10n_es.account_group_435 +NEW account.group.template: l10n_es.account_group_436 +NEW account.group.template: l10n_es.account_group_437 +NEW account.group.template: l10n_es.account_group_438 +NEW account.group.template: l10n_es.account_group_44 +NEW account.group.template: l10n_es.account_group_440 +NEW account.group.template: l10n_es.account_group_4400 +NEW account.group.template: l10n_es.account_group_4404 +NEW account.group.template: l10n_es.account_group_4409 +NEW account.group.template: l10n_es.account_group_441 +NEW account.group.template: l10n_es.account_group_4410 +NEW account.group.template: l10n_es.account_group_4411 +NEW account.group.template: l10n_es.account_group_4412 +NEW account.group.template: l10n_es.account_group_4415 +NEW account.group.template: l10n_es.account_group_446 +NEW account.group.template: l10n_es.account_group_447 +NEW account.group.template: l10n_es.account_group_448 +NEW account.group.template: l10n_es.account_group_449 +NEW account.group.template: l10n_es.account_group_46 +NEW account.group.template: l10n_es.account_group_460 +NEW account.group.template: l10n_es.account_group_464 +NEW account.group.template: l10n_es.account_group_465 +NEW account.group.template: l10n_es.account_group_466 +NEW account.group.template: l10n_es.account_group_47 +NEW account.group.template: l10n_es.account_group_470 +NEW account.group.template: l10n_es.account_group_4700 +NEW account.group.template: l10n_es.account_group_4708 +NEW account.group.template: l10n_es.account_group_4709 +NEW account.group.template: l10n_es.account_group_471 +NEW account.group.template: l10n_es.account_group_472 +NEW account.group.template: l10n_es.account_group_473 +NEW account.group.template: l10n_es.account_group_474 +NEW account.group.template: l10n_es.account_group_4740 +NEW account.group.template: l10n_es.account_group_4742 +NEW account.group.template: l10n_es.account_group_4745 +NEW account.group.template: l10n_es.account_group_475 +NEW account.group.template: l10n_es.account_group_4750 +NEW account.group.template: l10n_es.account_group_4751 +NEW account.group.template: l10n_es.account_group_4752 +NEW account.group.template: l10n_es.account_group_4758 +NEW account.group.template: l10n_es.account_group_4759 +NEW account.group.template: l10n_es.account_group_476 +NEW account.group.template: l10n_es.account_group_477 +NEW account.group.template: l10n_es.account_group_479 +NEW account.group.template: l10n_es.account_group_48 +NEW account.group.template: l10n_es.account_group_480 +NEW account.group.template: l10n_es.account_group_485 +NEW account.group.template: l10n_es.account_group_49 +NEW account.group.template: l10n_es.account_group_490 +NEW account.group.template: l10n_es.account_group_493 +NEW account.group.template: l10n_es.account_group_4933 +NEW account.group.template: l10n_es.account_group_4934 +NEW account.group.template: l10n_es.account_group_4935 +NEW account.group.template: l10n_es.account_group_499 +NEW account.group.template: l10n_es.account_group_4994 +NEW account.group.template: l10n_es.account_group_4999 +NEW account.group.template: l10n_es.account_group_5 +NEW account.group.template: l10n_es.account_group_50 +NEW account.group.template: l10n_es.account_group_500 +NEW account.group.template: l10n_es.account_group_501 +NEW account.group.template: l10n_es.account_group_502 +NEW account.group.template: l10n_es.account_group_505 +NEW account.group.template: l10n_es.account_group_506 +NEW account.group.template: l10n_es.account_group_507 +NEW account.group.template: l10n_es.account_group_509 +NEW account.group.template: l10n_es.account_group_5090 +NEW account.group.template: l10n_es.account_group_5091 +NEW account.group.template: l10n_es.account_group_5095 +NEW account.group.template: l10n_es.account_group_51 +NEW account.group.template: l10n_es.account_group_510 +NEW account.group.template: l10n_es.account_group_5103 +NEW account.group.template: l10n_es.account_group_5104 +NEW account.group.template: l10n_es.account_group_5105 +NEW account.group.template: l10n_es.account_group_511 +NEW account.group.template: l10n_es.account_group_5113 +NEW account.group.template: l10n_es.account_group_5114 +NEW account.group.template: l10n_es.account_group_5115 +NEW account.group.template: l10n_es.account_group_512 +NEW account.group.template: l10n_es.account_group_5123 +NEW account.group.template: l10n_es.account_group_5124 +NEW account.group.template: l10n_es.account_group_5125 +NEW account.group.template: l10n_es.account_group_513 +NEW account.group.template: l10n_es.account_group_5133 +NEW account.group.template: l10n_es.account_group_5134 +NEW account.group.template: l10n_es.account_group_5135 +NEW account.group.template: l10n_es.account_group_514 +NEW account.group.template: l10n_es.account_group_5143 +NEW account.group.template: l10n_es.account_group_5144 +NEW account.group.template: l10n_es.account_group_5145 +NEW account.group.template: l10n_es.account_group_52 +NEW account.group.template: l10n_es.account_group_520 +NEW account.group.template: l10n_es.account_group_5200 +NEW account.group.template: l10n_es.account_group_5201 +NEW account.group.template: l10n_es.account_group_5208 +NEW account.group.template: l10n_es.account_group_5209 +NEW account.group.template: l10n_es.account_group_521 +NEW account.group.template: l10n_es.account_group_522 +NEW account.group.template: l10n_es.account_group_523 +NEW account.group.template: l10n_es.account_group_524 +NEW account.group.template: l10n_es.account_group_525 +NEW account.group.template: l10n_es.account_group_526 +NEW account.group.template: l10n_es.account_group_527 +NEW account.group.template: l10n_es.account_group_528 +NEW account.group.template: l10n_es.account_group_529 +NEW account.group.template: l10n_es.account_group_5290 +NEW account.group.template: l10n_es.account_group_5291 +NEW account.group.template: l10n_es.account_group_5292 +NEW account.group.template: l10n_es.account_group_5293 +NEW account.group.template: l10n_es.account_group_5295 +NEW account.group.template: l10n_es.account_group_5296 +NEW account.group.template: l10n_es.account_group_5297 +NEW account.group.template: l10n_es.account_group_53 +NEW account.group.template: l10n_es.account_group_530 +NEW account.group.template: l10n_es.account_group_5303 +NEW account.group.template: l10n_es.account_group_5304 +NEW account.group.template: l10n_es.account_group_5305 +NEW account.group.template: l10n_es.account_group_531 +NEW account.group.template: l10n_es.account_group_5313 +NEW account.group.template: l10n_es.account_group_5314 +NEW account.group.template: l10n_es.account_group_5315 +NEW account.group.template: l10n_es.account_group_532 +NEW account.group.template: l10n_es.account_group_5323 +NEW account.group.template: l10n_es.account_group_5324 +NEW account.group.template: l10n_es.account_group_5325 +NEW account.group.template: l10n_es.account_group_533 +NEW account.group.template: l10n_es.account_group_5333 +NEW account.group.template: l10n_es.account_group_5334 +NEW account.group.template: l10n_es.account_group_5335 +NEW account.group.template: l10n_es.account_group_534 +NEW account.group.template: l10n_es.account_group_5343 +NEW account.group.template: l10n_es.account_group_5344 +NEW account.group.template: l10n_es.account_group_5345 +NEW account.group.template: l10n_es.account_group_535 +NEW account.group.template: l10n_es.account_group_5353 +NEW account.group.template: l10n_es.account_group_5354 +NEW account.group.template: l10n_es.account_group_5355 +NEW account.group.template: l10n_es.account_group_539 +NEW account.group.template: l10n_es.account_group_5393 +NEW account.group.template: l10n_es.account_group_5394 +NEW account.group.template: l10n_es.account_group_5395 +NEW account.group.template: l10n_es.account_group_54 +NEW account.group.template: l10n_es.account_group_540 +NEW account.group.template: l10n_es.account_group_541 +NEW account.group.template: l10n_es.account_group_542 +NEW account.group.template: l10n_es.account_group_543 +NEW account.group.template: l10n_es.account_group_544 +NEW account.group.template: l10n_es.account_group_545 +NEW account.group.template: l10n_es.account_group_546 +NEW account.group.template: l10n_es.account_group_547 +NEW account.group.template: l10n_es.account_group_548 +NEW account.group.template: l10n_es.account_group_549 +NEW account.group.template: l10n_es.account_group_55 +NEW account.group.template: l10n_es.account_group_550 +NEW account.group.template: l10n_es.account_group_551 +NEW account.group.template: l10n_es.account_group_552 +NEW account.group.template: l10n_es.account_group_5523 +NEW account.group.template: l10n_es.account_group_5524 +NEW account.group.template: l10n_es.account_group_5525 +NEW account.group.template: l10n_es.account_group_553 +NEW account.group.template: l10n_es.account_group_5530 +NEW account.group.template: l10n_es.account_group_5531 +NEW account.group.template: l10n_es.account_group_5532 +NEW account.group.template: l10n_es.account_group_5533 +NEW account.group.template: l10n_es.account_group_554 +NEW account.group.template: l10n_es.account_group_555 +NEW account.group.template: l10n_es.account_group_556 +NEW account.group.template: l10n_es.account_group_5563 +NEW account.group.template: l10n_es.account_group_5564 +NEW account.group.template: l10n_es.account_group_5565 +NEW account.group.template: l10n_es.account_group_5566 +NEW account.group.template: l10n_es.account_group_557 +NEW account.group.template: l10n_es.account_group_558 +NEW account.group.template: l10n_es.account_group_5580 +NEW account.group.template: l10n_es.account_group_5585 +NEW account.group.template: l10n_es.account_group_559 +NEW account.group.template: l10n_es.account_group_5590 +NEW account.group.template: l10n_es.account_group_5593 +NEW account.group.template: l10n_es.account_group_5595 +NEW account.group.template: l10n_es.account_group_5598 +NEW account.group.template: l10n_es.account_group_56 +NEW account.group.template: l10n_es.account_group_560 +NEW account.group.template: l10n_es.account_group_561 +NEW account.group.template: l10n_es.account_group_565 +NEW account.group.template: l10n_es.account_group_566 +NEW account.group.template: l10n_es.account_group_567 +NEW account.group.template: l10n_es.account_group_568 +NEW account.group.template: l10n_es.account_group_569 +NEW account.group.template: l10n_es.account_group_57 +NEW account.group.template: l10n_es.account_group_570 +NEW account.group.template: l10n_es.account_group_571 +NEW account.group.template: l10n_es.account_group_572 +NEW account.group.template: l10n_es.account_group_573 +NEW account.group.template: l10n_es.account_group_574 +NEW account.group.template: l10n_es.account_group_575 +NEW account.group.template: l10n_es.account_group_576 +NEW account.group.template: l10n_es.account_group_58 +NEW account.group.template: l10n_es.account_group_580 +NEW account.group.template: l10n_es.account_group_581 +NEW account.group.template: l10n_es.account_group_582 +NEW account.group.template: l10n_es.account_group_583 +NEW account.group.template: l10n_es.account_group_584 +NEW account.group.template: l10n_es.account_group_585 +NEW account.group.template: l10n_es.account_group_586 +NEW account.group.template: l10n_es.account_group_587 +NEW account.group.template: l10n_es.account_group_588 +NEW account.group.template: l10n_es.account_group_589 +NEW account.group.template: l10n_es.account_group_59 +NEW account.group.template: l10n_es.account_group_593 +NEW account.group.template: l10n_es.account_group_5933 +NEW account.group.template: l10n_es.account_group_5934 +NEW account.group.template: l10n_es.account_group_594 +NEW account.group.template: l10n_es.account_group_5943 +NEW account.group.template: l10n_es.account_group_5944 +NEW account.group.template: l10n_es.account_group_5945 +NEW account.group.template: l10n_es.account_group_595 +NEW account.group.template: l10n_es.account_group_5953 +NEW account.group.template: l10n_es.account_group_5954 +NEW account.group.template: l10n_es.account_group_5955 +NEW account.group.template: l10n_es.account_group_596 +NEW account.group.template: l10n_es.account_group_597 +NEW account.group.template: l10n_es.account_group_598 +NEW account.group.template: l10n_es.account_group_599 +NEW account.group.template: l10n_es.account_group_5990 +NEW account.group.template: l10n_es.account_group_5991 +NEW account.group.template: l10n_es.account_group_5992 +NEW account.group.template: l10n_es.account_group_5993 +NEW account.group.template: l10n_es.account_group_5994 +NEW account.group.template: l10n_es.account_group_6 +NEW account.group.template: l10n_es.account_group_60 +NEW account.group.template: l10n_es.account_group_600 +NEW account.group.template: l10n_es.account_group_601 +NEW account.group.template: l10n_es.account_group_602 +NEW account.group.template: l10n_es.account_group_606 +NEW account.group.template: l10n_es.account_group_6060 +NEW account.group.template: l10n_es.account_group_6061 +NEW account.group.template: l10n_es.account_group_6062 +NEW account.group.template: l10n_es.account_group_607 +NEW account.group.template: l10n_es.account_group_608 +NEW account.group.template: l10n_es.account_group_6080 +NEW account.group.template: l10n_es.account_group_6081 +NEW account.group.template: l10n_es.account_group_6082 +NEW account.group.template: l10n_es.account_group_609 +NEW account.group.template: l10n_es.account_group_6090 +NEW account.group.template: l10n_es.account_group_6091 +NEW account.group.template: l10n_es.account_group_6092 +NEW account.group.template: l10n_es.account_group_61 +NEW account.group.template: l10n_es.account_group_610 +NEW account.group.template: l10n_es.account_group_611 +NEW account.group.template: l10n_es.account_group_612 +NEW account.group.template: l10n_es.account_group_62 +NEW account.group.template: l10n_es.account_group_620 +NEW account.group.template: l10n_es.account_group_621 +NEW account.group.template: l10n_es.account_group_622 +NEW account.group.template: l10n_es.account_group_623 +NEW account.group.template: l10n_es.account_group_624 +NEW account.group.template: l10n_es.account_group_625 +NEW account.group.template: l10n_es.account_group_626 +NEW account.group.template: l10n_es.account_group_627 +NEW account.group.template: l10n_es.account_group_628 +NEW account.group.template: l10n_es.account_group_629 +NEW account.group.template: l10n_es.account_group_63 +NEW account.group.template: l10n_es.account_group_630 +NEW account.group.template: l10n_es.account_group_6300 +NEW account.group.template: l10n_es.account_group_6301 +NEW account.group.template: l10n_es.account_group_631 +NEW account.group.template: l10n_es.account_group_633 +NEW account.group.template: l10n_es.account_group_634 +NEW account.group.template: l10n_es.account_group_6341 +NEW account.group.template: l10n_es.account_group_6342 +NEW account.group.template: l10n_es.account_group_636 +NEW account.group.template: l10n_es.account_group_638 +NEW account.group.template: l10n_es.account_group_639 +NEW account.group.template: l10n_es.account_group_6391 +NEW account.group.template: l10n_es.account_group_6392 +NEW account.group.template: l10n_es.account_group_64 +NEW account.group.template: l10n_es.account_group_640 +NEW account.group.template: l10n_es.account_group_641 +NEW account.group.template: l10n_es.account_group_642 +NEW account.group.template: l10n_es.account_group_643 +NEW account.group.template: l10n_es.account_group_644 +NEW account.group.template: l10n_es.account_group_6440 +NEW account.group.template: l10n_es.account_group_6442 +NEW account.group.template: l10n_es.account_group_645 +NEW account.group.template: l10n_es.account_group_6450 +NEW account.group.template: l10n_es.account_group_6457 +NEW account.group.template: l10n_es.account_group_649 +NEW account.group.template: l10n_es.account_group_65 +NEW account.group.template: l10n_es.account_group_650 +NEW account.group.template: l10n_es.account_group_651 +NEW account.group.template: l10n_es.account_group_6510 +NEW account.group.template: l10n_es.account_group_6511 +NEW account.group.template: l10n_es.account_group_653 +NEW account.group.template: l10n_es.account_group_654 +NEW account.group.template: l10n_es.account_group_655 +NEW account.group.template: l10n_es.account_group_656 +NEW account.group.template: l10n_es.account_group_658 +NEW account.group.template: l10n_es.account_group_659 +NEW account.group.template: l10n_es.account_group_66 +NEW account.group.template: l10n_es.account_group_660 +NEW account.group.template: l10n_es.account_group_661 +NEW account.group.template: l10n_es.account_group_6610 +NEW account.group.template: l10n_es.account_group_6611 +NEW account.group.template: l10n_es.account_group_6612 +NEW account.group.template: l10n_es.account_group_6613 +NEW account.group.template: l10n_es.account_group_6615 +NEW account.group.template: l10n_es.account_group_6616 +NEW account.group.template: l10n_es.account_group_6617 +NEW account.group.template: l10n_es.account_group_6618 +NEW account.group.template: l10n_es.account_group_662 +NEW account.group.template: l10n_es.account_group_6620 +NEW account.group.template: l10n_es.account_group_6621 +NEW account.group.template: l10n_es.account_group_6622 +NEW account.group.template: l10n_es.account_group_6623 +NEW account.group.template: l10n_es.account_group_6624 +NEW account.group.template: l10n_es.account_group_663 +NEW account.group.template: l10n_es.account_group_6630 +NEW account.group.template: l10n_es.account_group_6631 +NEW account.group.template: l10n_es.account_group_6632 +NEW account.group.template: l10n_es.account_group_6633 +NEW account.group.template: l10n_es.account_group_664 +NEW account.group.template: l10n_es.account_group_6640 +NEW account.group.template: l10n_es.account_group_6641 +NEW account.group.template: l10n_es.account_group_6642 +NEW account.group.template: l10n_es.account_group_6643 +NEW account.group.template: l10n_es.account_group_665 +NEW account.group.template: l10n_es.account_group_6650 +NEW account.group.template: l10n_es.account_group_6651 +NEW account.group.template: l10n_es.account_group_6652 +NEW account.group.template: l10n_es.account_group_6653 +NEW account.group.template: l10n_es.account_group_6654 +NEW account.group.template: l10n_es.account_group_6655 +NEW account.group.template: l10n_es.account_group_6656 +NEW account.group.template: l10n_es.account_group_6657 +NEW account.group.template: l10n_es.account_group_666 +NEW account.group.template: l10n_es.account_group_6660 +NEW account.group.template: l10n_es.account_group_6661 +NEW account.group.template: l10n_es.account_group_6662 +NEW account.group.template: l10n_es.account_group_6663 +NEW account.group.template: l10n_es.account_group_6665 +NEW account.group.template: l10n_es.account_group_6666 +NEW account.group.template: l10n_es.account_group_6667 +NEW account.group.template: l10n_es.account_group_6668 +NEW account.group.template: l10n_es.account_group_667 +NEW account.group.template: l10n_es.account_group_6670 +NEW account.group.template: l10n_es.account_group_6671 +NEW account.group.template: l10n_es.account_group_6672 +NEW account.group.template: l10n_es.account_group_6673 +NEW account.group.template: l10n_es.account_group_6675 +NEW account.group.template: l10n_es.account_group_6676 +NEW account.group.template: l10n_es.account_group_6677 +NEW account.group.template: l10n_es.account_group_6678 +NEW account.group.template: l10n_es.account_group_668 +NEW account.group.template: l10n_es.account_group_669 +NEW account.group.template: l10n_es.account_group_67 +NEW account.group.template: l10n_es.account_group_670 +NEW account.group.template: l10n_es.account_group_671 +NEW account.group.template: l10n_es.account_group_672 +NEW account.group.template: l10n_es.account_group_673 +NEW account.group.template: l10n_es.account_group_6733 +NEW account.group.template: l10n_es.account_group_6734 +NEW account.group.template: l10n_es.account_group_6735 +NEW account.group.template: l10n_es.account_group_675 +NEW account.group.template: l10n_es.account_group_678 +NEW account.group.template: l10n_es.account_group_68 +NEW account.group.template: l10n_es.account_group_680 +NEW account.group.template: l10n_es.account_group_681 +NEW account.group.template: l10n_es.account_group_682 +NEW account.group.template: l10n_es.account_group_69 +NEW account.group.template: l10n_es.account_group_690 +NEW account.group.template: l10n_es.account_group_691 +NEW account.group.template: l10n_es.account_group_692 +NEW account.group.template: l10n_es.account_group_693 +NEW account.group.template: l10n_es.account_group_6930 +NEW account.group.template: l10n_es.account_group_6931 +NEW account.group.template: l10n_es.account_group_6932 +NEW account.group.template: l10n_es.account_group_6933 +NEW account.group.template: l10n_es.account_group_694 +NEW account.group.template: l10n_es.account_group_695 +NEW account.group.template: l10n_es.account_group_6954 +NEW account.group.template: l10n_es.account_group_6959 +NEW account.group.template: l10n_es.account_group_696 +NEW account.group.template: l10n_es.account_group_6960 +NEW account.group.template: l10n_es.account_group_6961 +NEW account.group.template: l10n_es.account_group_6962 +NEW account.group.template: l10n_es.account_group_6963 +NEW account.group.template: l10n_es.account_group_6965 +NEW account.group.template: l10n_es.account_group_6966 +NEW account.group.template: l10n_es.account_group_6967 +NEW account.group.template: l10n_es.account_group_6968 +NEW account.group.template: l10n_es.account_group_697 +NEW account.group.template: l10n_es.account_group_6970 +NEW account.group.template: l10n_es.account_group_6971 +NEW account.group.template: l10n_es.account_group_6972 +NEW account.group.template: l10n_es.account_group_6973 +NEW account.group.template: l10n_es.account_group_698 +NEW account.group.template: l10n_es.account_group_6980 +NEW account.group.template: l10n_es.account_group_6981 +NEW account.group.template: l10n_es.account_group_6985 +NEW account.group.template: l10n_es.account_group_6986 +NEW account.group.template: l10n_es.account_group_6987 +NEW account.group.template: l10n_es.account_group_6988 +NEW account.group.template: l10n_es.account_group_699 +NEW account.group.template: l10n_es.account_group_6990 +NEW account.group.template: l10n_es.account_group_6991 +NEW account.group.template: l10n_es.account_group_6992 +NEW account.group.template: l10n_es.account_group_6993 +NEW account.group.template: l10n_es.account_group_7 +NEW account.group.template: l10n_es.account_group_70 +NEW account.group.template: l10n_es.account_group_700 +NEW account.group.template: l10n_es.account_group_701 +NEW account.group.template: l10n_es.account_group_702 +NEW account.group.template: l10n_es.account_group_703 +NEW account.group.template: l10n_es.account_group_704 +NEW account.group.template: l10n_es.account_group_705 +NEW account.group.template: l10n_es.account_group_706 +NEW account.group.template: l10n_es.account_group_7060 +NEW account.group.template: l10n_es.account_group_7061 +NEW account.group.template: l10n_es.account_group_7062 +NEW account.group.template: l10n_es.account_group_7063 +NEW account.group.template: l10n_es.account_group_708 +NEW account.group.template: l10n_es.account_group_7080 +NEW account.group.template: l10n_es.account_group_7081 +NEW account.group.template: l10n_es.account_group_7082 +NEW account.group.template: l10n_es.account_group_7083 +NEW account.group.template: l10n_es.account_group_7084 +NEW account.group.template: l10n_es.account_group_709 +NEW account.group.template: l10n_es.account_group_7090 +NEW account.group.template: l10n_es.account_group_7091 +NEW account.group.template: l10n_es.account_group_7092 +NEW account.group.template: l10n_es.account_group_7093 +NEW account.group.template: l10n_es.account_group_7094 +NEW account.group.template: l10n_es.account_group_71 +NEW account.group.template: l10n_es.account_group_710 +NEW account.group.template: l10n_es.account_group_711 +NEW account.group.template: l10n_es.account_group_712 +NEW account.group.template: l10n_es.account_group_713 +NEW account.group.template: l10n_es.account_group_72 +NEW account.group.template: l10n_es.account_group_720 +NEW account.group.template: l10n_es.account_group_721 +NEW account.group.template: l10n_es.account_group_722 +NEW account.group.template: l10n_es.account_group_723 +NEW account.group.template: l10n_es.account_group_728 +NEW account.group.template: l10n_es.account_group_73 +NEW account.group.template: l10n_es.account_group_730 +NEW account.group.template: l10n_es.account_group_731 +NEW account.group.template: l10n_es.account_group_732 +NEW account.group.template: l10n_es.account_group_733 +NEW account.group.template: l10n_es.account_group_74 +NEW account.group.template: l10n_es.account_group_740 +NEW account.group.template: l10n_es.account_group_746 +NEW account.group.template: l10n_es.account_group_747 +NEW account.group.template: l10n_es.account_group_75 +NEW account.group.template: l10n_es.account_group_751 +NEW account.group.template: l10n_es.account_group_7510 +NEW account.group.template: l10n_es.account_group_7511 +NEW account.group.template: l10n_es.account_group_752 +NEW account.group.template: l10n_es.account_group_753 +NEW account.group.template: l10n_es.account_group_754 +NEW account.group.template: l10n_es.account_group_755 +NEW account.group.template: l10n_es.account_group_759 +NEW account.group.template: l10n_es.account_group_76 +NEW account.group.template: l10n_es.account_group_760 +NEW account.group.template: l10n_es.account_group_7600 +NEW account.group.template: l10n_es.account_group_7601 +NEW account.group.template: l10n_es.account_group_7602 +NEW account.group.template: l10n_es.account_group_7603 +NEW account.group.template: l10n_es.account_group_761 +NEW account.group.template: l10n_es.account_group_7610 +NEW account.group.template: l10n_es.account_group_7611 +NEW account.group.template: l10n_es.account_group_7612 +NEW account.group.template: l10n_es.account_group_7613 +NEW account.group.template: l10n_es.account_group_762 +NEW account.group.template: l10n_es.account_group_7620 +NEW account.group.template: l10n_es.account_group_76200 +NEW account.group.template: l10n_es.account_group_76201 +NEW account.group.template: l10n_es.account_group_76202 +NEW account.group.template: l10n_es.account_group_76203 +NEW account.group.template: l10n_es.account_group_7621 +NEW account.group.template: l10n_es.account_group_76210 +NEW account.group.template: l10n_es.account_group_76211 +NEW account.group.template: l10n_es.account_group_76212 +NEW account.group.template: l10n_es.account_group_76213 +NEW account.group.template: l10n_es.account_group_763 +NEW account.group.template: l10n_es.account_group_7630 +NEW account.group.template: l10n_es.account_group_7631 +NEW account.group.template: l10n_es.account_group_7632 +NEW account.group.template: l10n_es.account_group_7633 +NEW account.group.template: l10n_es.account_group_766 +NEW account.group.template: l10n_es.account_group_7660 +NEW account.group.template: l10n_es.account_group_7661 +NEW account.group.template: l10n_es.account_group_7662 +NEW account.group.template: l10n_es.account_group_7663 +NEW account.group.template: l10n_es.account_group_7665 +NEW account.group.template: l10n_es.account_group_7666 +NEW account.group.template: l10n_es.account_group_7667 +NEW account.group.template: l10n_es.account_group_7668 +NEW account.group.template: l10n_es.account_group_767 +NEW account.group.template: l10n_es.account_group_768 +NEW account.group.template: l10n_es.account_group_769 +NEW account.group.template: l10n_es.account_group_77 +NEW account.group.template: l10n_es.account_group_770 +NEW account.group.template: l10n_es.account_group_771 +NEW account.group.template: l10n_es.account_group_772 +NEW account.group.template: l10n_es.account_group_773 +NEW account.group.template: l10n_es.account_group_7733 +NEW account.group.template: l10n_es.account_group_7734 +NEW account.group.template: l10n_es.account_group_7735 +NEW account.group.template: l10n_es.account_group_774 +NEW account.group.template: l10n_es.account_group_775 +NEW account.group.template: l10n_es.account_group_778 +NEW account.group.template: l10n_es.account_group_79 +NEW account.group.template: l10n_es.account_group_790 +NEW account.group.template: l10n_es.account_group_791 +NEW account.group.template: l10n_es.account_group_792 +NEW account.group.template: l10n_es.account_group_793 +NEW account.group.template: l10n_es.account_group_7930 +NEW account.group.template: l10n_es.account_group_7931 +NEW account.group.template: l10n_es.account_group_7932 +NEW account.group.template: l10n_es.account_group_7933 +NEW account.group.template: l10n_es.account_group_794 +NEW account.group.template: l10n_es.account_group_795 +NEW account.group.template: l10n_es.account_group_7950 +NEW account.group.template: l10n_es.account_group_7951 +NEW account.group.template: l10n_es.account_group_7952 +NEW account.group.template: l10n_es.account_group_7954 +NEW account.group.template: l10n_es.account_group_79544 +NEW account.group.template: l10n_es.account_group_79549 +NEW account.group.template: l10n_es.account_group_7955 +NEW account.group.template: l10n_es.account_group_7956 +NEW account.group.template: l10n_es.account_group_7957 +NEW account.group.template: l10n_es.account_group_796 +NEW account.group.template: l10n_es.account_group_7960 +NEW account.group.template: l10n_es.account_group_7961 +NEW account.group.template: l10n_es.account_group_7965 +NEW account.group.template: l10n_es.account_group_7966 +NEW account.group.template: l10n_es.account_group_7967 +NEW account.group.template: l10n_es.account_group_7968 +NEW account.group.template: l10n_es.account_group_797 +NEW account.group.template: l10n_es.account_group_7970 +NEW account.group.template: l10n_es.account_group_7971 +NEW account.group.template: l10n_es.account_group_7972 +NEW account.group.template: l10n_es.account_group_7973 +NEW account.group.template: l10n_es.account_group_798 +NEW account.group.template: l10n_es.account_group_7980 +NEW account.group.template: l10n_es.account_group_7981 +NEW account.group.template: l10n_es.account_group_7985 +NEW account.group.template: l10n_es.account_group_7986 +NEW account.group.template: l10n_es.account_group_7987 +NEW account.group.template: l10n_es.account_group_7988 +NEW account.group.template: l10n_es.account_group_799 +NEW account.group.template: l10n_es.account_group_7990 +NEW account.group.template: l10n_es.account_group_7991 +NEW account.group.template: l10n_es.account_group_7992 +NEW account.group.template: l10n_es.account_group_7993 +NEW account.group.template: l10n_es.account_group_8 +NEW account.group.template: l10n_es.account_group_80 +NEW account.group.template: l10n_es.account_group_800 +NEW account.group.template: l10n_es.account_group_802 +NEW account.group.template: l10n_es.account_group_81 +NEW account.group.template: l10n_es.account_group_810 +NEW account.group.template: l10n_es.account_group_811 +NEW account.group.template: l10n_es.account_group_812 +NEW account.group.template: l10n_es.account_group_813 +NEW account.group.template: l10n_es.account_group_82 +NEW account.group.template: l10n_es.account_group_820 +NEW account.group.template: l10n_es.account_group_821 +NEW account.group.template: l10n_es.account_group_83 +NEW account.group.template: l10n_es.account_group_830 +NEW account.group.template: l10n_es.account_group_8300 +NEW account.group.template: l10n_es.account_group_8301 +NEW account.group.template: l10n_es.account_group_833 +NEW account.group.template: l10n_es.account_group_834 +NEW account.group.template: l10n_es.account_group_835 +NEW account.group.template: l10n_es.account_group_836 +NEW account.group.template: l10n_es.account_group_837 +NEW account.group.template: l10n_es.account_group_838 +NEW account.group.template: l10n_es.account_group_84 +NEW account.group.template: l10n_es.account_group_840 +NEW account.group.template: l10n_es.account_group_841 +NEW account.group.template: l10n_es.account_group_842 +NEW account.group.template: l10n_es.account_group_85 +NEW account.group.template: l10n_es.account_group_850 +NEW account.group.template: l10n_es.account_group_851 +NEW account.group.template: l10n_es.account_group_86 +NEW account.group.template: l10n_es.account_group_860 +NEW account.group.template: l10n_es.account_group_862 +NEW account.group.template: l10n_es.account_group_89 +NEW account.group.template: l10n_es.account_group_891 +NEW account.group.template: l10n_es.account_group_892 +NEW account.group.template: l10n_es.account_group_9 +NEW account.group.template: l10n_es.account_group_90 +NEW account.group.template: l10n_es.account_group_900 +NEW account.group.template: l10n_es.account_group_902 +NEW account.group.template: l10n_es.account_group_91 +NEW account.group.template: l10n_es.account_group_910 +NEW account.group.template: l10n_es.account_group_911 +NEW account.group.template: l10n_es.account_group_912 +NEW account.group.template: l10n_es.account_group_913 +NEW account.group.template: l10n_es.account_group_92 +NEW account.group.template: l10n_es.account_group_920 +NEW account.group.template: l10n_es.account_group_921 +NEW account.group.template: l10n_es.account_group_94 +NEW account.group.template: l10n_es.account_group_940 +NEW account.group.template: l10n_es.account_group_941 +NEW account.group.template: l10n_es.account_group_942 +NEW account.group.template: l10n_es.account_group_95 +NEW account.group.template: l10n_es.account_group_950 +NEW account.group.template: l10n_es.account_group_951 +NEW account.group.template: l10n_es.account_group_96 +NEW account.group.template: l10n_es.account_group_960 +NEW account.group.template: l10n_es.account_group_962 +NEW account.group.template: l10n_es.account_group_99 +NEW account.group.template: l10n_es.account_group_991 +NEW account.group.template: l10n_es.account_group_992 +NEW account.group.template: l10n_es.account_group_993 +NEW account.group.template: l10n_es.account_group_994 +NEW account.tax.template: l10n_es.account_tax_template_oss_s_iva_ns +NEW account.tax.template: l10n_es.account_tax_template_oss_s_iva_ns_b +NEW account.tax.template: l10n_es.account_tax_template_p_irpf15e +NEW account.tax.template: l10n_es.account_tax_template_p_irpf7e diff --git a/openupgrade_scripts/scripts/l10n_es_edi_sii/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_es_edi_sii/14.0.1.0/upgrade_analysis.txt index 75584338a086..f2cdd1f0ec7a 100644 --- a/openupgrade_scripts/scripts/l10n_es_edi_sii/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_es_edi_sii/14.0.1.0/upgrade_analysis.txt @@ -4,20 +4,20 @@ new model l10n_es.sii.account.tax.mixin [abstract] ---Fields in module 'l10n_es_edi_sii'--- l10n_es_edi_sii / account.move / l10n_es_edi_csv (char) : NEW l10n_es_edi_sii / account.move / l10n_es_registration_date (date): NEW -l10n_es_edi_sii / account.tax / l10n_es_bien_inversion (boolean): NEW hasdefault +l10n_es_edi_sii / account.tax / l10n_es_bien_inversion (boolean): NEW hasdefault: default l10n_es_edi_sii / account.tax / l10n_es_exempt_reason (selection): NEW selection_keys: ['E1', 'E2', 'E3', 'E4', 'E5', 'E6'] -l10n_es_edi_sii / account.tax / l10n_es_type (selection) : NEW selection_keys: ['exento', 'ignore', 'no_deducible', 'no_sujeto', 'no_sujeto_loc', 'recargo', 'retencion', 'sujeto', 'sujeto_agricultura', 'sujeto_isp'], hasdefault -l10n_es_edi_sii / account.tax.template / l10n_es_bien_inversion (boolean): NEW hasdefault +l10n_es_edi_sii / account.tax / l10n_es_type (selection) : NEW selection_keys: ['exento', 'ignore', 'no_deducible', 'no_sujeto', 'no_sujeto_loc', 'recargo', 'retencion', 'sujeto', 'sujeto_agricultura', 'sujeto_isp'], hasdefault: default +l10n_es_edi_sii / account.tax.template / l10n_es_bien_inversion (boolean): NEW hasdefault: default l10n_es_edi_sii / account.tax.template / l10n_es_exempt_reason (selection): NEW selection_keys: ['E1', 'E2', 'E3', 'E4', 'E5', 'E6'] -l10n_es_edi_sii / account.tax.template / l10n_es_type (selection) : NEW selection_keys: ['exento', 'ignore', 'no_deducible', 'no_sujeto', 'no_sujeto_loc', 'recargo', 'retencion', 'sujeto', 'sujeto_agricultura', 'sujeto_isp'], hasdefault -l10n_es_edi_sii / l10n_es_edi.certificate / company_id (many2one) : NEW relation: res.company, required, req_default: function, hasdefault +l10n_es_edi_sii / account.tax.template / l10n_es_type (selection) : NEW selection_keys: ['exento', 'ignore', 'no_deducible', 'no_sujeto', 'no_sujeto_loc', 'recargo', 'retencion', 'sujeto', 'sujeto_agricultura', 'sujeto_isp'], hasdefault: default +l10n_es_edi_sii / l10n_es_edi.certificate / company_id (many2one) : NEW relation: res.company, required, hasdefault: default l10n_es_edi_sii / l10n_es_edi.certificate / content (binary) : NEW required, attachment: True l10n_es_edi_sii / l10n_es_edi.certificate / date_end (datetime) : NEW l10n_es_edi_sii / l10n_es_edi.certificate / date_start (datetime) : NEW l10n_es_edi_sii / l10n_es_edi.certificate / password (char) : NEW -l10n_es_edi_sii / res.company / l10n_es_edi_certificate_id (many2one): NEW relation: l10n_es_edi.certificate, isfunction: function, stored +l10n_es_edi_sii / res.company / l10n_es_edi_certificate_id (many2one): NEW relation: l10n_es_edi.certificate, hasdefault: compute l10n_es_edi_sii / res.company / l10n_es_edi_certificate_ids (one2many): NEW relation: l10n_es_edi.certificate -l10n_es_edi_sii / res.company / l10n_es_edi_tax_agency (selection): NEW selection_keys: ['aeat', 'bizkaia', 'gipuzkoa'], hasdefault +l10n_es_edi_sii / res.company / l10n_es_edi_tax_agency (selection): NEW selection_keys: ['aeat', 'bizkaia', 'gipuzkoa'], hasdefault: default l10n_es_edi_sii / res.company / l10n_es_edi_test_env (boolean): NEW ---XML records in module 'l10n_es_edi_sii'--- NEW account.edi.format: l10n_es_edi_sii.edi_es_sii diff --git a/openupgrade_scripts/scripts/l10n_fr/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_fr/14.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..692a40e0810a --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_fr/14.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,395 @@ +---Models in module 'l10n_fr'--- +---Fields in module 'l10n_fr'--- +---XML records in module 'l10n_fr'--- +DEL account.fiscal.position.tax.template: l10n_fr.fp_tax_template_impexp_ha_encaissement +DEL account.fiscal.position.tax.template: l10n_fr.fp_tax_template_impexp_ha_encaissement_reduite +DEL account.fiscal.position.tax.template: l10n_fr.fp_tax_template_impexp_ha_encaissement_super_reduite + +NEW account.group.template: l10n_fr.pcg_10 +NEW account.group.template: l10n_fr.pcg_101 +NEW account.group.template: l10n_fr.pcg_104 +NEW account.group.template: l10n_fr.pcg_105 +NEW account.group.template: l10n_fr.pcg_106 +NEW account.group.template: l10n_fr.pcg_13 +NEW account.group.template: l10n_fr.pcg_131 +NEW account.group.template: l10n_fr.pcg_139 +NEW account.group.template: l10n_fr.pcg_1391 +NEW account.group.template: l10n_fr.pcg_14 +NEW account.group.template: l10n_fr.pcg_142 +NEW account.group.template: l10n_fr.pcg_143 +NEW account.group.template: l10n_fr.pcg_15 +NEW account.group.template: l10n_fr.pcg_151 +NEW account.group.template: l10n_fr.pcg_158 +NEW account.group.template: l10n_fr.pcg_16 +NEW account.group.template: l10n_fr.pcg_165 +NEW account.group.template: l10n_fr.pcg_166 +NEW account.group.template: l10n_fr.pcg_167 +NEW account.group.template: l10n_fr.pcg_168 +NEW account.group.template: l10n_fr.pcg_17 +NEW account.group.template: l10n_fr.pcg_178 +NEW account.group.template: l10n_fr.pcg_18 +NEW account.group.template: l10n_fr.pcg_20 +NEW account.group.template: l10n_fr.pcg_201 +NEW account.group.template: l10n_fr.pcg_21 +NEW account.group.template: l10n_fr.pcg_211 +NEW account.group.template: l10n_fr.pcg_213 +NEW account.group.template: l10n_fr.pcg_21318 +NEW account.group.template: l10n_fr.pcg_21358 +NEW account.group.template: l10n_fr.pcg_2138 +NEW account.group.template: l10n_fr.pcg_215 +NEW account.group.template: l10n_fr.pcg_2151 +NEW account.group.template: l10n_fr.pcg_2153 +NEW account.group.template: l10n_fr.pcg_218 +NEW account.group.template: l10n_fr.pcg_23 +NEW account.group.template: l10n_fr.pcg_231 +NEW account.group.template: l10n_fr.pcg_238 +NEW account.group.template: l10n_fr.pcg_26 +NEW account.group.template: l10n_fr.pcg_261 +NEW account.group.template: l10n_fr.pcg_267 +NEW account.group.template: l10n_fr.pcg_268 +NEW account.group.template: l10n_fr.pcg_27 +NEW account.group.template: l10n_fr.pcg_271 +NEW account.group.template: l10n_fr.pcg_272 +NEW account.group.template: l10n_fr.pcg_274 +NEW account.group.template: l10n_fr.pcg_275 +NEW account.group.template: l10n_fr.pcg_276 +NEW account.group.template: l10n_fr.pcg_2768 +NEW account.group.template: l10n_fr.pcg_277 +NEW account.group.template: l10n_fr.pcg_28 +NEW account.group.template: l10n_fr.pcg_281 +NEW account.group.template: l10n_fr.pcg_29 +NEW account.group.template: l10n_fr.pcg_291 +NEW account.group.template: l10n_fr.pcg_293 +NEW account.group.template: l10n_fr.pcg_296 +NEW account.group.template: l10n_fr.pcg_297 +NEW account.group.template: l10n_fr.pcg_31 +NEW account.group.template: l10n_fr.pcg_32 +NEW account.group.template: l10n_fr.pcg_321 +NEW account.group.template: l10n_fr.pcg_322 +NEW account.group.template: l10n_fr.pcg_326 +NEW account.group.template: l10n_fr.pcg_33 +NEW account.group.template: l10n_fr.pcg_331 +NEW account.group.template: l10n_fr.pcg_335 +NEW account.group.template: l10n_fr.pcg_34 +NEW account.group.template: l10n_fr.pcg_341 +NEW account.group.template: l10n_fr.pcg_345 +NEW account.group.template: l10n_fr.pcg_35 +NEW account.group.template: l10n_fr.pcg_351 +NEW account.group.template: l10n_fr.pcg_355 +NEW account.group.template: l10n_fr.pcg_358 +NEW account.group.template: l10n_fr.pcg_37 +NEW account.group.template: l10n_fr.pcg_39 +NEW account.group.template: l10n_fr.pcg_391 +NEW account.group.template: l10n_fr.pcg_392 +NEW account.group.template: l10n_fr.pcg_393 +NEW account.group.template: l10n_fr.pcg_394 +NEW account.group.template: l10n_fr.pcg_395 +NEW account.group.template: l10n_fr.pcg_397 +NEW account.group.template: l10n_fr.pcg_40 +NEW account.group.template: l10n_fr.pcg_401 +NEW account.group.template: l10n_fr.pcg_404 +NEW account.group.template: l10n_fr.pcg_408 +NEW account.group.template: l10n_fr.pcg_409 +NEW account.group.template: l10n_fr.pcg_4097 +NEW account.group.template: l10n_fr.pcg_411 +NEW account.group.template: l10n_fr.pcg_418 +NEW account.group.template: l10n_fr.pcg_419 +NEW account.group.template: l10n_fr.pcg_42 +NEW account.group.template: l10n_fr.pcg_424 +NEW account.group.template: l10n_fr.pcg_428 +NEW account.group.template: l10n_fr.pcg_43 +NEW account.group.template: l10n_fr.pcg_438 +NEW account.group.template: l10n_fr.pcg_44 +NEW account.group.template: l10n_fr.pcg_441 +NEW account.group.template: l10n_fr.pcg_442 +NEW account.group.template: l10n_fr.pcg_443 +NEW account.group.template: l10n_fr.pcg_445 +NEW account.group.template: l10n_fr.pcg_4455 +NEW account.group.template: l10n_fr.pcg_4456 +NEW account.group.template: l10n_fr.pcg_4457 +NEW account.group.template: l10n_fr.pcg_448 +NEW account.group.template: l10n_fr.pcg_45 +NEW account.group.template: l10n_fr.pcg_455 +NEW account.group.template: l10n_fr.pcg_456 +NEW account.group.template: l10n_fr.pcg_4561 +NEW account.group.template: l10n_fr.pcg_4562 +NEW account.group.template: l10n_fr.pcg_458 +NEW account.group.template: l10n_fr.pcg_46 +NEW account.group.template: l10n_fr.pcg_468 +NEW account.group.template: l10n_fr.pcg_47 +NEW account.group.template: l10n_fr.pcg_476 +NEW account.group.template: l10n_fr.pcg_477 +NEW account.group.template: l10n_fr.pcg_48 +NEW account.group.template: l10n_fr.pcg_481 +NEW account.group.template: l10n_fr.pcg_488 +NEW account.group.template: l10n_fr.pcg_49 +NEW account.group.template: l10n_fr.pcg_495 +NEW account.group.template: l10n_fr.pcg_496 +NEW account.group.template: l10n_fr.pcg_50 +NEW account.group.template: l10n_fr.pcg_503 +NEW account.group.template: l10n_fr.pcg_506 +NEW account.group.template: l10n_fr.pcg_508 +NEW account.group.template: l10n_fr.pcg_51 +NEW account.group.template: l10n_fr.pcg_511 +NEW account.group.template: l10n_fr.pcg_512 +NEW account.group.template: l10n_fr.pcg_518 +NEW account.group.template: l10n_fr.pcg_519 +NEW account.group.template: l10n_fr.pcg_53 +NEW account.group.template: l10n_fr.pcg_531 +NEW account.group.template: l10n_fr.pcg_58 +NEW account.group.template: l10n_fr.pcg_59 +NEW account.group.template: l10n_fr.pcg_60 +NEW account.group.template: l10n_fr.pcg_601 +NEW account.group.template: l10n_fr.pcg_602 +NEW account.group.template: l10n_fr.pcg_6021 +NEW account.group.template: l10n_fr.pcg_6022 +NEW account.group.template: l10n_fr.pcg_6026 +NEW account.group.template: l10n_fr.pcg_603 +NEW account.group.template: l10n_fr.pcg_606 +NEW account.group.template: l10n_fr.pcg_607 +NEW account.group.template: l10n_fr.pcg_609 +NEW account.group.template: l10n_fr.pcg_61 +NEW account.group.template: l10n_fr.pcg_612 +NEW account.group.template: l10n_fr.pcg_615 +NEW account.group.template: l10n_fr.pcg_616 +NEW account.group.template: l10n_fr.pcg_6163 +NEW account.group.template: l10n_fr.pcg_618 +NEW account.group.template: l10n_fr.pcg_62 +NEW account.group.template: l10n_fr.pcg_621 +NEW account.group.template: l10n_fr.pcg_622 +NEW account.group.template: l10n_fr.pcg_623 +NEW account.group.template: l10n_fr.pcg_624 +NEW account.group.template: l10n_fr.pcg_625 +NEW account.group.template: l10n_fr.pcg_627 +NEW account.group.template: l10n_fr.pcg_628 +NEW account.group.template: l10n_fr.pcg_63 +NEW account.group.template: l10n_fr.pcg_631 +NEW account.group.template: l10n_fr.pcg_633 +NEW account.group.template: l10n_fr.pcg_635 +NEW account.group.template: l10n_fr.pcg_6351 +NEW account.group.template: l10n_fr.pcg_6354 +NEW account.group.template: l10n_fr.pcg_637 +NEW account.group.template: l10n_fr.pcg_64 +NEW account.group.template: l10n_fr.pcg_641 +NEW account.group.template: l10n_fr.pcg_645 +NEW account.group.template: l10n_fr.pcg_647 +NEW account.group.template: l10n_fr.pcg_65 +NEW account.group.template: l10n_fr.pcg_651 +NEW account.group.template: l10n_fr.pcg_654 +NEW account.group.template: l10n_fr.pcg_655 +NEW account.group.template: l10n_fr.pcg_66 +NEW account.group.template: l10n_fr.pcg_661 +NEW account.group.template: l10n_fr.pcg_6611 +NEW account.group.template: l10n_fr.pcg_6618 +NEW account.group.template: l10n_fr.pcg_67 +NEW account.group.template: l10n_fr.pcg_671 +NEW account.group.template: l10n_fr.pcg_674 +NEW account.group.template: l10n_fr.pcg_675 +NEW account.group.template: l10n_fr.pcg_678 +NEW account.group.template: l10n_fr.pcg_68 +NEW account.group.template: l10n_fr.pcg_681 +NEW account.group.template: l10n_fr.pcg_6816 +NEW account.group.template: l10n_fr.pcg_6817 +NEW account.group.template: l10n_fr.pcg_686 +NEW account.group.template: l10n_fr.pcg_6866 +NEW account.group.template: l10n_fr.pcg_687 +NEW account.group.template: l10n_fr.pcg_6872 +NEW account.group.template: l10n_fr.pcg_69 +NEW account.group.template: l10n_fr.pcg_695 +NEW account.group.template: l10n_fr.pcg_698 +NEW account.group.template: l10n_fr.pcg_70 +NEW account.group.template: l10n_fr.pcg_701 +NEW account.group.template: l10n_fr.pcg_704 +NEW account.group.template: l10n_fr.pcg_707 +NEW account.group.template: l10n_fr.pcg_708 +NEW account.group.template: l10n_fr.pcg_709 +NEW account.group.template: l10n_fr.pcg_71 +NEW account.group.template: l10n_fr.pcg_713 +NEW account.group.template: l10n_fr.pcg_7133 +NEW account.group.template: l10n_fr.pcg_7134 +NEW account.group.template: l10n_fr.pcg_7135 +NEW account.group.template: l10n_fr.pcg_72 +NEW account.group.template: l10n_fr.pcg_75 +NEW account.group.template: l10n_fr.pcg_751 +NEW account.group.template: l10n_fr.pcg_755 +NEW account.group.template: l10n_fr.pcg_76 +NEW account.group.template: l10n_fr.pcg_761 +NEW account.group.template: l10n_fr.pcg_762 +NEW account.group.template: l10n_fr.pcg_763 +NEW account.group.template: l10n_fr.pcg_77 +NEW account.group.template: l10n_fr.pcg_771 +NEW account.group.template: l10n_fr.pcg_774 +NEW account.group.template: l10n_fr.pcg_775 +NEW account.group.template: l10n_fr.pcg_778 +NEW account.group.template: l10n_fr.pcg_78 +NEW account.group.template: l10n_fr.pcg_781 +NEW account.group.template: l10n_fr.pcg_786 +NEW account.group.template: l10n_fr.pcg_7866 +NEW account.group.template: l10n_fr.pcg_787 +NEW account.group.template: l10n_fr.pcg_7872 +NEW account.group.template: l10n_fr.pcg_79 +# account.group.template is a new model to configure new chart of account. Nothing to do. + +NEW account.reconcile.model.line.template: l10n_fr.bank_charges_reconcile_model_line + +NEW account.tax.report: l10n_fr.tax_report +NEW account.tax.report.line: l10n_fr.tax_report_01 +NEW account.tax.report.line: l10n_fr.tax_report_02 +NEW account.tax.report.line: l10n_fr.tax_report_03 +NEW account.tax.report.line: l10n_fr.tax_report_04 +NEW account.tax.report.line: l10n_fr.tax_report_05 +NEW account.tax.report.line: l10n_fr.tax_report_06 +NEW account.tax.report.line: l10n_fr.tax_report_07 +NEW account.tax.report.line: l10n_fr.tax_report_08_base +NEW account.tax.report.line: l10n_fr.tax_report_08_taxe +NEW account.tax.report.line: l10n_fr.tax_report_09_base +NEW account.tax.report.line: l10n_fr.tax_report_09_taxe +NEW account.tax.report.line: l10n_fr.tax_report_10_base +NEW account.tax.report.line: l10n_fr.tax_report_10_taxe +NEW account.tax.report.line: l10n_fr.tax_report_11_base +NEW account.tax.report.line: l10n_fr.tax_report_11_taxe +NEW account.tax.report.line: l10n_fr.tax_report_13_base +NEW account.tax.report.line: l10n_fr.tax_report_13_taxe +NEW account.tax.report.line: l10n_fr.tax_report_14_base +NEW account.tax.report.line: l10n_fr.tax_report_14_taxe +NEW account.tax.report.line: l10n_fr.tax_report_15 +NEW account.tax.report.line: l10n_fr.tax_report_16 +NEW account.tax.report.line: l10n_fr.tax_report_17 +NEW account.tax.report.line: l10n_fr.tax_report_18 +NEW account.tax.report.line: l10n_fr.tax_report_19 +NEW account.tax.report.line: l10n_fr.tax_report_20 +NEW account.tax.report.line: l10n_fr.tax_report_21 +NEW account.tax.report.line: l10n_fr.tax_report_22 +NEW account.tax.report.line: l10n_fr.tax_report_22A +NEW account.tax.report.line: l10n_fr.tax_report_23 +NEW account.tax.report.line: l10n_fr.tax_report_24 +NEW account.tax.report.line: l10n_fr.tax_report_25 +NEW account.tax.report.line: l10n_fr.tax_report_26 +NEW account.tax.report.line: l10n_fr.tax_report_27 +NEW account.tax.report.line: l10n_fr.tax_report_28 +NEW account.tax.report.line: l10n_fr.tax_report_29 +NEW account.tax.report.line: l10n_fr.tax_report_2A +NEW account.tax.report.line: l10n_fr.tax_report_2B +NEW account.tax.report.line: l10n_fr.tax_report_2C +NEW account.tax.report.line: l10n_fr.tax_report_32 +NEW account.tax.report.line: l10n_fr.tax_report_3A +NEW account.tax.report.line: l10n_fr.tax_report_3B +NEW account.tax.report.line: l10n_fr.tax_report_3C +NEW account.tax.report.line: l10n_fr.tax_report_5A +NEW account.tax.report.line: l10n_fr.tax_report_5B +NEW account.tax.report.line: l10n_fr.tax_report_7A +NEW account.tax.report.line: l10n_fr.tax_report_7B +NEW account.tax.report.line: l10n_fr.tax_report_7C +NEW account.tax.report.line: l10n_fr.tax_report_9B_base +NEW account.tax.report.line: l10n_fr.tax_report_9B_taxe +NEW account.tax.report.line: l10n_fr.tax_report_AA +NEW account.tax.report.line: l10n_fr.tax_report_AB +NEW account.tax.report.line: l10n_fr.tax_report_credit +NEW account.tax.report.line: l10n_fr.tax_report_decompte_tva +NEW account.tax.report.line: l10n_fr.tax_report_montant_op_realisees +NEW account.tax.report.line: l10n_fr.tax_report_op_imposables_ht +NEW account.tax.report.line: l10n_fr.tax_report_op_non_imposables +NEW account.tax.report.line: l10n_fr.tax_report_taxes_a_payer +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute +NEW account.tax.report.line: l10n_fr.tax_report_tva_deductible +DEL account.tax.report.line: l10n_fr.tax_report_base_acq +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_non_imp +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_achats_import +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_hors_ue +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_livraisons_intra +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_non_ca3 +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_non_imposables +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_8_5 +# old account.tax.report.line items are drop during the upgrade process +# and new ones are created. Nothing to do. + +DEL account.tax.template: l10n_fr.tva_import_0 +# Template deletion. Nothing to do. diff --git a/openupgrade_scripts/scripts/l10n_fr/14.0.2.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_fr/14.0.2.1/upgrade_analysis.txt new file mode 100644 index 000000000000..f582f54f877f --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_fr/14.0.2.1/upgrade_analysis.txt @@ -0,0 +1,459 @@ +---Models in module 'l10n_fr'--- +---Fields in module 'l10n_fr'--- +---XML records in module 'l10n_fr'--- +NEW account.account.template: l10n_fr.pcg_44521 +NEW account.account.template: l10n_fr.pcg_4453 +NEW account.account.template: l10n_fr.pcg_44531 +NEW account.account.template: l10n_fr.pcg_44564 +NEW account.account.template: l10n_fr.pcg_445662 +NEW account.account.template: l10n_fr.pcg_445663 +NEW account.account.template: l10n_fr.pcg_44574 +DEL account.fiscal.position.tax.template: l10n_fr.fp_tax_template_impexp_ha_encaissement +DEL account.fiscal.position.tax.template: l10n_fr.fp_tax_template_impexp_ha_encaissement_reduite +DEL account.fiscal.position.tax.template: l10n_fr.fp_tax_template_impexp_ha_encaissement_super_reduite +NEW account.group.template: l10n_fr.pcg_10 +NEW account.group.template: l10n_fr.pcg_101 +NEW account.group.template: l10n_fr.pcg_104 +NEW account.group.template: l10n_fr.pcg_105 +NEW account.group.template: l10n_fr.pcg_106 +NEW account.group.template: l10n_fr.pcg_13 +NEW account.group.template: l10n_fr.pcg_131 +NEW account.group.template: l10n_fr.pcg_139 +NEW account.group.template: l10n_fr.pcg_1391 +NEW account.group.template: l10n_fr.pcg_14 +NEW account.group.template: l10n_fr.pcg_142 +NEW account.group.template: l10n_fr.pcg_143 +NEW account.group.template: l10n_fr.pcg_15 +NEW account.group.template: l10n_fr.pcg_151 +NEW account.group.template: l10n_fr.pcg_158 +NEW account.group.template: l10n_fr.pcg_16 +NEW account.group.template: l10n_fr.pcg_165 +NEW account.group.template: l10n_fr.pcg_166 +NEW account.group.template: l10n_fr.pcg_167 +NEW account.group.template: l10n_fr.pcg_168 +NEW account.group.template: l10n_fr.pcg_17 +NEW account.group.template: l10n_fr.pcg_178 +NEW account.group.template: l10n_fr.pcg_18 +NEW account.group.template: l10n_fr.pcg_20 +NEW account.group.template: l10n_fr.pcg_201 +NEW account.group.template: l10n_fr.pcg_21 +NEW account.group.template: l10n_fr.pcg_211 +NEW account.group.template: l10n_fr.pcg_213 +NEW account.group.template: l10n_fr.pcg_21318 +NEW account.group.template: l10n_fr.pcg_21358 +NEW account.group.template: l10n_fr.pcg_2138 +NEW account.group.template: l10n_fr.pcg_215 +NEW account.group.template: l10n_fr.pcg_2151 +NEW account.group.template: l10n_fr.pcg_2153 +NEW account.group.template: l10n_fr.pcg_218 +NEW account.group.template: l10n_fr.pcg_23 +NEW account.group.template: l10n_fr.pcg_231 +NEW account.group.template: l10n_fr.pcg_238 +NEW account.group.template: l10n_fr.pcg_26 +NEW account.group.template: l10n_fr.pcg_261 +NEW account.group.template: l10n_fr.pcg_267 +NEW account.group.template: l10n_fr.pcg_268 +NEW account.group.template: l10n_fr.pcg_27 +NEW account.group.template: l10n_fr.pcg_271 +NEW account.group.template: l10n_fr.pcg_272 +NEW account.group.template: l10n_fr.pcg_274 +NEW account.group.template: l10n_fr.pcg_275 +NEW account.group.template: l10n_fr.pcg_276 +NEW account.group.template: l10n_fr.pcg_2768 +NEW account.group.template: l10n_fr.pcg_277 +NEW account.group.template: l10n_fr.pcg_28 +NEW account.group.template: l10n_fr.pcg_281 +NEW account.group.template: l10n_fr.pcg_29 +NEW account.group.template: l10n_fr.pcg_291 +NEW account.group.template: l10n_fr.pcg_293 +NEW account.group.template: l10n_fr.pcg_296 +NEW account.group.template: l10n_fr.pcg_297 +NEW account.group.template: l10n_fr.pcg_31 +NEW account.group.template: l10n_fr.pcg_32 +NEW account.group.template: l10n_fr.pcg_321 +NEW account.group.template: l10n_fr.pcg_322 +NEW account.group.template: l10n_fr.pcg_326 +NEW account.group.template: l10n_fr.pcg_33 +NEW account.group.template: l10n_fr.pcg_331 +NEW account.group.template: l10n_fr.pcg_335 +NEW account.group.template: l10n_fr.pcg_34 +NEW account.group.template: l10n_fr.pcg_341 +NEW account.group.template: l10n_fr.pcg_345 +NEW account.group.template: l10n_fr.pcg_35 +NEW account.group.template: l10n_fr.pcg_351 +NEW account.group.template: l10n_fr.pcg_355 +NEW account.group.template: l10n_fr.pcg_358 +NEW account.group.template: l10n_fr.pcg_37 +NEW account.group.template: l10n_fr.pcg_39 +NEW account.group.template: l10n_fr.pcg_391 +NEW account.group.template: l10n_fr.pcg_392 +NEW account.group.template: l10n_fr.pcg_393 +NEW account.group.template: l10n_fr.pcg_394 +NEW account.group.template: l10n_fr.pcg_395 +NEW account.group.template: l10n_fr.pcg_397 +NEW account.group.template: l10n_fr.pcg_40 +NEW account.group.template: l10n_fr.pcg_401 +NEW account.group.template: l10n_fr.pcg_404 +NEW account.group.template: l10n_fr.pcg_408 +NEW account.group.template: l10n_fr.pcg_409 +NEW account.group.template: l10n_fr.pcg_4097 +NEW account.group.template: l10n_fr.pcg_411 +NEW account.group.template: l10n_fr.pcg_418 +NEW account.group.template: l10n_fr.pcg_419 +NEW account.group.template: l10n_fr.pcg_42 +NEW account.group.template: l10n_fr.pcg_424 +NEW account.group.template: l10n_fr.pcg_428 +NEW account.group.template: l10n_fr.pcg_43 +NEW account.group.template: l10n_fr.pcg_438 +NEW account.group.template: l10n_fr.pcg_44 +NEW account.group.template: l10n_fr.pcg_441 +NEW account.group.template: l10n_fr.pcg_442 +NEW account.group.template: l10n_fr.pcg_443 +NEW account.group.template: l10n_fr.pcg_445 +NEW account.group.template: l10n_fr.pcg_4455 +NEW account.group.template: l10n_fr.pcg_4456 +NEW account.group.template: l10n_fr.pcg_4457 +NEW account.group.template: l10n_fr.pcg_448 +NEW account.group.template: l10n_fr.pcg_45 +NEW account.group.template: l10n_fr.pcg_455 +NEW account.group.template: l10n_fr.pcg_456 +NEW account.group.template: l10n_fr.pcg_4561 +NEW account.group.template: l10n_fr.pcg_4562 +NEW account.group.template: l10n_fr.pcg_458 +NEW account.group.template: l10n_fr.pcg_46 +NEW account.group.template: l10n_fr.pcg_468 +NEW account.group.template: l10n_fr.pcg_47 +NEW account.group.template: l10n_fr.pcg_476 +NEW account.group.template: l10n_fr.pcg_477 +NEW account.group.template: l10n_fr.pcg_48 +NEW account.group.template: l10n_fr.pcg_481 +NEW account.group.template: l10n_fr.pcg_488 +NEW account.group.template: l10n_fr.pcg_49 +NEW account.group.template: l10n_fr.pcg_495 +NEW account.group.template: l10n_fr.pcg_496 +NEW account.group.template: l10n_fr.pcg_50 +NEW account.group.template: l10n_fr.pcg_503 +NEW account.group.template: l10n_fr.pcg_506 +NEW account.group.template: l10n_fr.pcg_508 +NEW account.group.template: l10n_fr.pcg_51 +NEW account.group.template: l10n_fr.pcg_511 +NEW account.group.template: l10n_fr.pcg_512 +NEW account.group.template: l10n_fr.pcg_518 +NEW account.group.template: l10n_fr.pcg_519 +NEW account.group.template: l10n_fr.pcg_53 +NEW account.group.template: l10n_fr.pcg_531 +NEW account.group.template: l10n_fr.pcg_58 +NEW account.group.template: l10n_fr.pcg_59 +NEW account.group.template: l10n_fr.pcg_60 +NEW account.group.template: l10n_fr.pcg_601 +NEW account.group.template: l10n_fr.pcg_602 +NEW account.group.template: l10n_fr.pcg_6021 +NEW account.group.template: l10n_fr.pcg_6022 +NEW account.group.template: l10n_fr.pcg_6026 +NEW account.group.template: l10n_fr.pcg_603 +NEW account.group.template: l10n_fr.pcg_606 +NEW account.group.template: l10n_fr.pcg_607 +NEW account.group.template: l10n_fr.pcg_609 +NEW account.group.template: l10n_fr.pcg_61 +NEW account.group.template: l10n_fr.pcg_612 +NEW account.group.template: l10n_fr.pcg_615 +NEW account.group.template: l10n_fr.pcg_616 +NEW account.group.template: l10n_fr.pcg_6163 +NEW account.group.template: l10n_fr.pcg_618 +NEW account.group.template: l10n_fr.pcg_62 +NEW account.group.template: l10n_fr.pcg_621 +NEW account.group.template: l10n_fr.pcg_622 +NEW account.group.template: l10n_fr.pcg_623 +NEW account.group.template: l10n_fr.pcg_624 +NEW account.group.template: l10n_fr.pcg_625 +NEW account.group.template: l10n_fr.pcg_627 +NEW account.group.template: l10n_fr.pcg_628 +NEW account.group.template: l10n_fr.pcg_63 +NEW account.group.template: l10n_fr.pcg_631 +NEW account.group.template: l10n_fr.pcg_633 +NEW account.group.template: l10n_fr.pcg_635 +NEW account.group.template: l10n_fr.pcg_6351 +NEW account.group.template: l10n_fr.pcg_6354 +NEW account.group.template: l10n_fr.pcg_637 +NEW account.group.template: l10n_fr.pcg_64 +NEW account.group.template: l10n_fr.pcg_641 +NEW account.group.template: l10n_fr.pcg_645 +NEW account.group.template: l10n_fr.pcg_647 +NEW account.group.template: l10n_fr.pcg_65 +NEW account.group.template: l10n_fr.pcg_651 +NEW account.group.template: l10n_fr.pcg_654 +NEW account.group.template: l10n_fr.pcg_655 +NEW account.group.template: l10n_fr.pcg_66 +NEW account.group.template: l10n_fr.pcg_661 +NEW account.group.template: l10n_fr.pcg_6611 +NEW account.group.template: l10n_fr.pcg_6618 +NEW account.group.template: l10n_fr.pcg_67 +NEW account.group.template: l10n_fr.pcg_671 +NEW account.group.template: l10n_fr.pcg_674 +NEW account.group.template: l10n_fr.pcg_675 +NEW account.group.template: l10n_fr.pcg_678 +NEW account.group.template: l10n_fr.pcg_68 +NEW account.group.template: l10n_fr.pcg_681 +NEW account.group.template: l10n_fr.pcg_6816 +NEW account.group.template: l10n_fr.pcg_6817 +NEW account.group.template: l10n_fr.pcg_686 +NEW account.group.template: l10n_fr.pcg_6866 +NEW account.group.template: l10n_fr.pcg_687 +NEW account.group.template: l10n_fr.pcg_6872 +NEW account.group.template: l10n_fr.pcg_69 +NEW account.group.template: l10n_fr.pcg_695 +NEW account.group.template: l10n_fr.pcg_698 +NEW account.group.template: l10n_fr.pcg_70 +NEW account.group.template: l10n_fr.pcg_701 +NEW account.group.template: l10n_fr.pcg_704 +NEW account.group.template: l10n_fr.pcg_707 +NEW account.group.template: l10n_fr.pcg_708 +NEW account.group.template: l10n_fr.pcg_709 +NEW account.group.template: l10n_fr.pcg_71 +NEW account.group.template: l10n_fr.pcg_713 +NEW account.group.template: l10n_fr.pcg_7133 +NEW account.group.template: l10n_fr.pcg_7134 +NEW account.group.template: l10n_fr.pcg_7135 +NEW account.group.template: l10n_fr.pcg_72 +NEW account.group.template: l10n_fr.pcg_75 +NEW account.group.template: l10n_fr.pcg_751 +NEW account.group.template: l10n_fr.pcg_755 +NEW account.group.template: l10n_fr.pcg_76 +NEW account.group.template: l10n_fr.pcg_761 +NEW account.group.template: l10n_fr.pcg_762 +NEW account.group.template: l10n_fr.pcg_763 +NEW account.group.template: l10n_fr.pcg_77 +NEW account.group.template: l10n_fr.pcg_771 +NEW account.group.template: l10n_fr.pcg_774 +NEW account.group.template: l10n_fr.pcg_775 +NEW account.group.template: l10n_fr.pcg_778 +NEW account.group.template: l10n_fr.pcg_78 +NEW account.group.template: l10n_fr.pcg_781 +NEW account.group.template: l10n_fr.pcg_786 +NEW account.group.template: l10n_fr.pcg_7866 +NEW account.group.template: l10n_fr.pcg_787 +NEW account.group.template: l10n_fr.pcg_7872 +NEW account.group.template: l10n_fr.pcg_79 +NEW account.reconcile.model.line.template: l10n_fr.bank_charges_reconcile_model_line +DEL account.tax.group: l10n_fr.tax_group_intra_10 (noupdate) +DEL account.tax.group: l10n_fr.tax_group_intra_20 (noupdate) +DEL account.tax.group: l10n_fr.tax_group_intra_21 (noupdate) +DEL account.tax.group: l10n_fr.tax_group_intra_55 (noupdate) +DEL account.tax.group: l10n_fr.tax_group_intra_85 (noupdate) +NEW account.tax.report: l10n_fr.tax_report +NEW account.tax.report.line: l10n_fr.tax_report_08_base +NEW account.tax.report.line: l10n_fr.tax_report_08_taxe +NEW account.tax.report.line: l10n_fr.tax_report_09_base +NEW account.tax.report.line: l10n_fr.tax_report_09_taxe +NEW account.tax.report.line: l10n_fr.tax_report_10_base +NEW account.tax.report.line: l10n_fr.tax_report_10_taxe +NEW account.tax.report.line: l10n_fr.tax_report_11_base +NEW account.tax.report.line: l10n_fr.tax_report_11_taxe +NEW account.tax.report.line: l10n_fr.tax_report_13_base +NEW account.tax.report.line: l10n_fr.tax_report_13_taxe +NEW account.tax.report.line: l10n_fr.tax_report_14_base +NEW account.tax.report.line: l10n_fr.tax_report_14_taxe +NEW account.tax.report.line: l10n_fr.tax_report_15 +NEW account.tax.report.line: l10n_fr.tax_report_15_1 +NEW account.tax.report.line: l10n_fr.tax_report_15_2 +NEW account.tax.report.line: l10n_fr.tax_report_16 +NEW account.tax.report.line: l10n_fr.tax_report_17 +NEW account.tax.report.line: l10n_fr.tax_report_18 +NEW account.tax.report.line: l10n_fr.tax_report_19 +NEW account.tax.report.line: l10n_fr.tax_report_20 +NEW account.tax.report.line: l10n_fr.tax_report_21 +NEW account.tax.report.line: l10n_fr.tax_report_22 +NEW account.tax.report.line: l10n_fr.tax_report_23 +NEW account.tax.report.line: l10n_fr.tax_report_24 +NEW account.tax.report.line: l10n_fr.tax_report_25 +NEW account.tax.report.line: l10n_fr.tax_report_26 +NEW account.tax.report.line: l10n_fr.tax_report_27 +NEW account.tax.report.line: l10n_fr.tax_report_28 +NEW account.tax.report.line: l10n_fr.tax_report_29 +NEW account.tax.report.line: l10n_fr.tax_report_2C +NEW account.tax.report.line: l10n_fr.tax_report_2E +NEW account.tax.report.line: l10n_fr.tax_report_32 +NEW account.tax.report.line: l10n_fr.tax_report_5B +NEW account.tax.report.line: l10n_fr.tax_report_9B_base +NEW account.tax.report.line: l10n_fr.tax_report_9B_taxe +NEW account.tax.report.line: l10n_fr.tax_report_A1 +NEW account.tax.report.line: l10n_fr.tax_report_A2 +NEW account.tax.report.line: l10n_fr.tax_report_A3 +NEW account.tax.report.line: l10n_fr.tax_report_A4 +NEW account.tax.report.line: l10n_fr.tax_report_A5 +NEW account.tax.report.line: l10n_fr.tax_report_AA +NEW account.tax.report.line: l10n_fr.tax_report_AB +NEW account.tax.report.line: l10n_fr.tax_report_B1 +NEW account.tax.report.line: l10n_fr.tax_report_B2 +NEW account.tax.report.line: l10n_fr.tax_report_B3 +NEW account.tax.report.line: l10n_fr.tax_report_B4 +NEW account.tax.report.line: l10n_fr.tax_report_B5 +NEW account.tax.report.line: l10n_fr.tax_report_E1 +NEW account.tax.report.line: l10n_fr.tax_report_E2 +NEW account.tax.report.line: l10n_fr.tax_report_E3 +NEW account.tax.report.line: l10n_fr.tax_report_E4 +NEW account.tax.report.line: l10n_fr.tax_report_E5 +NEW account.tax.report.line: l10n_fr.tax_report_E6 +NEW account.tax.report.line: l10n_fr.tax_report_F1 +NEW account.tax.report.line: l10n_fr.tax_report_F2 +NEW account.tax.report.line: l10n_fr.tax_report_F3 +NEW account.tax.report.line: l10n_fr.tax_report_F4 +NEW account.tax.report.line: l10n_fr.tax_report_F5 +NEW account.tax.report.line: l10n_fr.tax_report_F6 +NEW account.tax.report.line: l10n_fr.tax_report_F7 +NEW account.tax.report.line: l10n_fr.tax_report_F8 +NEW account.tax.report.line: l10n_fr.tax_report_I1_base +NEW account.tax.report.line: l10n_fr.tax_report_I1_taxe +NEW account.tax.report.line: l10n_fr.tax_report_I2_base +NEW account.tax.report.line: l10n_fr.tax_report_I2_taxe +NEW account.tax.report.line: l10n_fr.tax_report_I3_base +NEW account.tax.report.line: l10n_fr.tax_report_I3_taxe +NEW account.tax.report.line: l10n_fr.tax_report_I4_base +NEW account.tax.report.line: l10n_fr.tax_report_I4_taxe +NEW account.tax.report.line: l10n_fr.tax_report_I5_base +NEW account.tax.report.line: l10n_fr.tax_report_I5_taxe +NEW account.tax.report.line: l10n_fr.tax_report_I6_base +NEW account.tax.report.line: l10n_fr.tax_report_I6_taxe +NEW account.tax.report.line: l10n_fr.tax_report_P1_base +NEW account.tax.report.line: l10n_fr.tax_report_P1_taxe +NEW account.tax.report.line: l10n_fr.tax_report_P2_base +NEW account.tax.report.line: l10n_fr.tax_report_P2_taxe +NEW account.tax.report.line: l10n_fr.tax_report_credit +NEW account.tax.report.line: l10n_fr.tax_report_decompte_tva +NEW account.tax.report.line: l10n_fr.tax_report_montant_op_realisees +NEW account.tax.report.line: l10n_fr.tax_report_op_imposables_ht +NEW account.tax.report.line: l10n_fr.tax_report_op_non_imposables +NEW account.tax.report.line: l10n_fr.tax_report_taxes_a_payer +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute_autre +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute_dom +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute_import +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute_metropo +NEW account.tax.report.line: l10n_fr.tax_report_tva_brute_petrolier +NEW account.tax.report.line: l10n_fr.tax_report_tva_deductible +DEL account.tax.report.line: l10n_fr.tax_report_base_acq +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_acq_immo_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_coll_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_ded_intra_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_base_due_intra_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_non_imp +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_achats_import +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_hors_ue +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_livraisons_intra +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_non_ca3 +DEL account.tax.report.line: l10n_fr.tax_report_non_imp_non_imposables +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_acq_immo_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_coll_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_ded_intra_8_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_10 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_19_6 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_20 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_2_1 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_5_5 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_7 +DEL account.tax.report.line: l10n_fr.tax_report_tva_due_intra_8_5 +NEW account.tax.template: l10n_fr.tva_intra_intermediaire_biens +NEW account.tax.template: l10n_fr.tva_intra_intermediaire_services +NEW account.tax.template: l10n_fr.tva_intra_normale_biens +NEW account.tax.template: l10n_fr.tva_intra_normale_services +NEW account.tax.template: l10n_fr.tva_intra_reduite_biens +NEW account.tax.template: l10n_fr.tva_intra_reduite_services +NEW account.tax.template: l10n_fr.tva_intra_specifique_biens +NEW account.tax.template: l10n_fr.tva_intra_specifique_services +NEW account.tax.template: l10n_fr.tva_intra_super_reduite_biens +NEW account.tax.template: l10n_fr.tva_intra_super_reduite_services +NEW account.tax.template: l10n_fr.tva_purchase_good_fuel +NEW account.tax.template: l10n_fr.tva_purchase_good_fuel_TTC +NEW account.tax.template: l10n_fr.tva_purchase_imm_normale +NEW account.tax.template: l10n_fr.tva_purchase_service_0 +NEW account.tax.template: l10n_fr.tva_purchase_service_20_import +NEW account.tax.template: l10n_fr.tva_sale_good_0 +NEW account.tax.template: l10n_fr.tva_sale_good_export_0 +NEW account.tax.template: l10n_fr.tva_sale_good_intra_0 +NEW account.tax.template: l10n_fr.tva_sale_service_0 +NEW account.tax.template: l10n_fr.tva_sale_service_export_0 +NEW account.tax.template: l10n_fr.tva_sale_service_intra_0 +DEL account.tax.template: l10n_fr.tva_0 +DEL account.tax.template: l10n_fr.tva_export_0 +DEL account.tax.template: l10n_fr.tva_import_0 +DEL account.tax.template: l10n_fr.tva_intra_0 +DEL account.tax.template: l10n_fr.tva_intra_intermediaire +DEL account.tax.template: l10n_fr.tva_intra_normale +DEL account.tax.template: l10n_fr.tva_intra_reduite +DEL account.tax.template: l10n_fr.tva_intra_specifique +DEL account.tax.template: l10n_fr.tva_intra_super_reduite diff --git a/openupgrade_scripts/scripts/l10n_fr_facturx_chorus_pro/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_fr_facturx_chorus_pro/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..18697c54edec --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_fr_facturx_chorus_pro/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,7 @@ +---Models in module 'l10n_fr_facturx_chorus_pro'--- +---Fields in module 'l10n_fr_facturx_chorus_pro'--- +l10n_fr_facturx_chorus_pro / account.move / buyer_reference (char) : NEW +l10n_fr_facturx_chorus_pro / account.move / contract_reference (char) : NEW +l10n_fr_facturx_chorus_pro / account.move / purchase_order_reference (char): NEW +---XML records in module 'l10n_fr_facturx_chorus_pro'--- +NEW ir.ui.view: l10n_fr_facturx_chorus_pro.view_move_form_inherit_chorus_pro diff --git a/openupgrade_scripts/scripts/l10n_fr_fec/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_fr_fec/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..1253c16959ab --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_fr_fec/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'l10n_fr_fec'--- +---Fields in module 'l10n_fr_fec'--- +---XML records in module 'l10n_fr_fec'--- +NEW ir.model.access: l10n_fr_fec.access_account_fr_fec +# new ir.model.access doesn't requires specific action. diff --git a/openupgrade_scripts/scripts/l10n_id_efaktur/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_id_efaktur/14.0.1.0/upgrade_analysis.txt index bb6d381c9d0a..72ff87f4734b 100644 --- a/openupgrade_scripts/scripts/l10n_id_efaktur/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_id_efaktur/14.0.1.0/upgrade_analysis.txt @@ -1,4 +1,7 @@ ---Models in module 'l10n_id_efaktur'--- ---Fields in module 'l10n_id_efaktur'--- l10n_id_efaktur / account.move / country_code (char) : module is now 'account' ('l10n_id_efaktur') +l10n_id_efaktur / l10n_id_efaktur.efaktur.range / max (char) : not a function anymore +l10n_id_efaktur / l10n_id_efaktur.efaktur.range / min (char) : not a function anymore +l10n_id_efaktur / res.partner / l10n_id_pkp (boolean) : not a function anymore ---XML records in module 'l10n_id_efaktur'--- diff --git a/openupgrade_scripts/scripts/l10n_in/14.0.2.0/noupdate_changes.xml b/openupgrade_scripts/scripts/l10n_in/14.0.2.0/noupdate_changes.xml new file mode 100644 index 000000000000..26a25786541d --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_in/14.0.2.0/noupdate_changes.xml @@ -0,0 +1,12 @@ + + + + OTH-OTHERS + + + OTH-OTHERS + + + CBM-CUBIC METERS + + diff --git a/openupgrade_scripts/scripts/l10n_in/14.0.2.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_in/14.0.2.0/upgrade_analysis.txt index 86fa77bd0e7d..60e8a95eee1c 100644 --- a/openupgrade_scripts/scripts/l10n_in/14.0.2.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_in/14.0.2.0/upgrade_analysis.txt @@ -1,8 +1,9 @@ ---Models in module 'l10n_in'--- ---Fields in module 'l10n_in'--- l10n_in / account.journal / l10n_in_import_export (boolean): DEL -l10n_in / account.move / l10n_in_export_type (selection): DEL required, selection_keys: ['deemed', 'export_with_igst', 'regular', 'sale_from_bonded_wh', 'sez_with_igst', 'sez_without_igst'], req_default: function -l10n_in / account.move / l10n_in_gst_treatment (selection): NEW selection_keys: ['composition', 'consumer', 'deemed_export', 'overseas', 'regular', 'special_economic_zone', 'unregistered'], isfunction: function, stored +l10n_in / account.move / amount_total_words (char) : module is now 'l10n_dz' ('l10n_in') +l10n_in / account.move / l10n_in_export_type (selection): DEL required, selection_keys: ['deemed', 'export_with_igst', 'regular', 'sale_from_bonded_wh', 'sez_with_igst', 'sez_without_igst'] +l10n_in / account.move / l10n_in_gst_treatment (selection): NEW selection_keys: ['composition', 'consumer', 'deemed_export', 'overseas', 'regular', 'special_economic_zone', 'unregistered'], hasdefault: compute l10n_in / account.move / l10n_in_gstin (char) : NEW l10n_in / account.move / l10n_in_state_id (many2one) : NEW relation: res.country.state l10n_in / res.partner / l10n_in_gst_treatment (selection): NEW selection_keys: ['composition', 'consumer', 'deemed_export', 'overseas', 'regular', 'special_economic_zone', 'unregistered'] @@ -55,3 +56,4 @@ NEW account.tax.template: l10n_in.sgst_purchase_2_rc NEW account.tax.template: l10n_in.sgst_purchase_5_rc NEW account.tax.template: l10n_in.sgst_purchase_6_rc NEW account.tax.template: l10n_in.sgst_purchase_9_rc +DEL ir.ui.view: l10n_in.l10n_in_view_company_form diff --git a/openupgrade_scripts/scripts/l10n_it/14.0.0.2/post-migration.py b/openupgrade_scripts/scripts/l10n_it/14.0.0.2/post-migration.py new file mode 100644 index 000000000000..e371203edb44 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_it/14.0.0.2/post-migration.py @@ -0,0 +1,515 @@ +import logging + +from openupgradelib import openupgrade + +_logger = logging.getLogger(__name__) + +ACCOUNT_TAX_NAMES = [ + # Version 12.0 + { + "22v": "Iva al 22% (debito)", + "22a": "Iva al 22% (credito)", + "21v": "Iva al 21% (debito)", + "21a": "Iva al 21% (credito)", + "20v": "Iva al 20% (debito)", + "20a": "Iva al 20% (credito)", + "5v": "Iva al 5% (debito)", + "5a": "Iva al 5% (credito)", + "10v": "Iva al 10% (debito)", + "10a": "Iva al 10% (credito)", + "10AO": "Iva al 10% indetraibile", + "12v": "Iva 12% (debito)", + "12a": "Iva 12% (credito)", + "2010": "Iva al 20% detraibile 10%", + "2015": "Iva al 20% detraibile 15%", + "2040": "Iva al 20% detraibile 40%", + "20AO": "Iva al 20% indetraibile", + "20I5": "IVA al 20% detraibile al 50%", + "2v": "Iva 2% (debito)", + "2a": "Iva 2% (credito)", + "4v": "Iva 4% (debito)", + "4a": "Iva 4% (credito)", + "4AO": "Iva al 4% indetraibile", + "10I5": "IVA al 10% detraibile al 50%", + "4I5": "IVA al 4% detraibile al 50%", + "00v": "Fuori Campo IVA (debito)", + "00a": "Fuori Campo IVA (credito)", + "00art15v": "Imponibile Escluso Art.15 (debito)", + "00art15a": "Imponibile Escluso Art.15 (credito)", + "22v INC": "Iva al 22% (debito) INC", + "21v INC": "Iva al 21% (debito) INC", + "20v INC": "Iva al 20% (debito) INC", + "10v INC": "Iva al 10% (debito) INC", + "12v INC": "Iva 12% (debito) INC", + "2v INC": "Iva 2% (debito) INC", + "4v INC": "Iva 4% (debito) INC", + "00v INC": "Fuori Campo IVA (debito) INC", + "2110": "Iva al 21% detraibile 10%", + "2115": "Iva al 21% detraibile 15%", + "2140": "Iva al 21% detraibile 40%", + "21AO": "Iva al 21% indetraibile", + "21I5": "IVA al 21% detraibile al 50%", + "2210": "Iva al 22% detraibile 10%", + "2215": "Iva al 22% detraibile 15%", + "2240": "Iva al 22% detraibile 40%", + "22AO": "Iva al 22% indetraibile", + "22I5": "IVA al 22% detraibile al 50%", + }, + # Version 14.0 + { + "22am": "Iva al 22% (credito)", # code is changed + "5am": "Iva al 5% (credito)", # code is changed + "10am": "Iva al 10% (credito)", # code is changed + "4am": "Iva 4% (credito)", # code is changed + "00am": "Fuori Campo IVA (credito)", # code is changed + }, +] + + +def get_old_account_tax_names(xmlid): + """ + Return a list of old names for the account.tax given matching the + xmlid. + """ + names = [] + for version in ACCOUNT_TAX_NAMES: + name = version.get(xmlid) + if name: + names.append(name) + return names + + +def get_tags(env, repartition_line_tmpl): + """ + Return the tags linked to an account.tax.repartition.line.template + """ + tag_names = [] + for report_line in repartition_line_tmpl.plus_report_line_ids: + tag_names.append("+" + report_line.tag_name) + for report_line in repartition_line_tmpl.minus_report_line_ids: + tag_names.append("-" + report_line.tag_name) + return env["account.account.tag"].search([("name", "in", tag_names)]) + + +def is_account_tax_used(env, account_tax): + """Return True if account_tax is used on an account.move.line.""" + env.cr.execute( + """ + SELECT account_tax_id + FROM account_move_line_account_tax_rel + WHERE account_tax_id = %s + """, + (account_tax.id,), + ) + return len(env.cr.fetchall()) > 0 + + +def find_account_tax(env, xmlid, account_tax_template, company_id): + """Return the account tax based on the given account.tax.template""" + current_name = account_tax_template.name + old_names = get_old_account_tax_names(xmlid) + domain = [ + ("type_tax_use", "=", account_tax_template.type_tax_use), + ("company_id", "=", company_id), + ] + + if not old_names: + _logger.info( + "Skipping account.tax.template '%s', because it's a new one.", + current_name, + ) + return env["account.tax"] + + _logger.info( + "Looking for a account.tax that match account.tax.template '%s'.", current_name + ) + account_taxes = env["account.tax"].search(domain + [("name", "=", current_name)]) + + if not account_taxes: + _logger.info( + "No account.tax named '%s', searching with older names.", current_name + ) + account_taxes = env["account.tax"].search(domain + [("name", "in", old_names)]) + + nb_account_taxes = len(account_taxes) + account_taxes_used = account_taxes.filtered(lambda r: is_account_tax_used(env, r)) + + if nb_account_taxes > 1: + _logger.info( + "There is several account.tax found for the " + "account.tax.template '%s'. Trying to see which one is " + "realy used.", + current_name, + ) + + nb_account_taxes_used = len(account_taxes_used) + if nb_account_taxes_used > 1: + raise ValueError( + "There is several account.tax found for the " + "account.tax.template ID %s '%s' that are used on " + "account.move.line. Clean up " + "account.tax by renaming your specific account.tax " + "and migrate it via a dedicated script. " + "The matching account.tax ID %s" + % ( + account_tax_template.id, + current_name, + ", ".join(str(rec_id) for rec_id in account_taxes_used.ids), + ) + ) + + account_tax = account_taxes_used + + else: + account_tax = account_taxes + + if not account_tax: + _logger.error( + "No matching account.tax for the account.tax.template '%s'.", + current_name, + ) + else: + _logger.info( + "Using account.tax ID %s '%s' that correspond to the " + "account.tax.template '%s'.", + account_tax.id, + account_tax.name, + current_name, + ) + + return account_tax + + +def find_repartition_line(account_tax, repartition_line_tmpl): + """ + Retrieve the repartition line that match the given repartition + line from the account.tax.template + """ + # Choose to search on invoice repartition lines or refund ones. + if repartition_line_tmpl.invoice_tax_id: + repartition_lines = account_tax.invoice_repartition_line_ids + else: + repartition_lines = account_tax.refund_repartition_line_ids + + repartition_lines = repartition_lines.filtered( + lambda r: r.repartition_type == repartition_line_tmpl.repartition_type + ) + + if len(repartition_lines) > 1: + repartition_lines = repartition_lines.filtered( + lambda r: r.factor_percent == repartition_line_tmpl.factor_percent + ) + + if len(repartition_lines) > 1: + repartition_lines = repartition_lines.filtered( + lambda r: r.account_id == repartition_line_tmpl.account_id + ) + + if not repartition_lines: + # TODO: maybe in this case we need to create the repartition.line ? + # Or we should delegate this to account_chart_update ? + _logger.error( + "No matching account.tax.repartition.line on account.tax ID %s " + "for the account.tax.repartition.line.template ID %s", + account_tax.id, + repartition_line_tmpl.id, + ) + elif len(repartition_lines) > 1: + _logger.error( + "Several matching account.tax.repartition.line on account.tax " + "ID %s for the account.tax.repartition.line.template ID %s." + "Found account.tax.repartition.line ID %s.", + account_tax.id, + repartition_line_tmpl.id, + ", ".join(str(rec_id) for rec_id in repartition_lines.ids), + ) + else: + _logger.info( + "Found matching account.tax.repartition.line ID %s " + "on account.tax ID %s " + "for the account.tax.repartition.line.template ID %s", + repartition_lines.id, + account_tax.id, + repartition_line_tmpl.id, + ) + + return repartition_lines + + +def update_repartition_line(env, repartition_line, repartition_line_tmpl): + """ + Update tag of the account.tax.repartition.line based on + account.tax.repartition.line.template + + Update the following tables: + - account_account_tag_account_tax_repartition_line_rel + - account_account_tag_account_move_line_rel + """ + # FIXME: I'm not sure if the table : + # - account_tax_repartition_financial_tags + # should be updated or not. + + new_tag_ids = get_tags(env, repartition_line_tmpl) + old_tag_ids = repartition_line.tag_ids + # Update account_account_tag_account_tax_repartition_line_rel + openupgrade.logged_query( + env.cr, + """ + DELETE FROM account_account_tag_account_tax_repartition_line_rel + WHERE account_tax_repartition_line_id = %s; + """, + (repartition_line.id,), + ) + for new_tag_id in new_tag_ids: + openupgrade.logged_query( + env.cr, + """ + INSERT INTO account_account_tag_account_tax_repartition_line_rel + (account_tax_repartition_line_id, account_account_tag_id) + VALUES (%s, %s) + """, + (repartition_line.id, new_tag_id.id), + ) + + # Update account_account_tag_account_move_line_rel + domain = [ + "|", + ("tax_ids", "=", repartition_line.tax_id.id), + ("tax_line_id", "=", repartition_line.tax_id.id), + ("tax_repartition_line_id", "=", False), + ] + if repartition_line.repartition_type == "base": + # WARNING: Here I'm not sure if an account.move.line with a null + # value as tax_base_amount should be considered equal to zero or + # not. For now, I assume yes. + domain.append("|") + domain.append(("tax_base_amount", "=", 0)) + domain.append(("tax_base_amount", "=", False)) + if repartition_line.repartition_type == "tax": + domain.append(("tax_base_amount", "!=", 0)) + + account_move_line_ids = env["account.move.line"].search(domain) + + # Considering that "out_receipt" and "in_receipt" are not affected + # by tags. + if repartition_line.invoice_tax_id: + account_move_line_ids = account_move_line_ids.filtered( + lambda r: r.move_id.move_type in ("out_invoice", "in_invoice") + ) + if repartition_line.refund_tax_id: + # WARNING ! Some refund are invoices with a negative amount + # This case is not taken into account. + account_move_line_ids = account_move_line_ids.filtered( + lambda r: r.move_id.move_type in ("out_refund", "in_refund") + ) + + # Adding account.move.line that are linked to this specific + # repartition_line + account_move_line_ids += env["account.move.line"].search( + [("tax_repartition_line_id", "=", repartition_line.id)] + ) + + if not account_move_line_ids: + return + + openupgrade.logged_query( + env.cr, + """ + DELETE FROM account_account_tag_account_move_line_rel + WHERE account_move_line_id IN (%s) + AND account_account_tag_id IN (%s) + """ + % ( + ",".join(str(rec_id) for rec_id in account_move_line_ids.ids), + ",".join(str(rec_id) for rec_id in old_tag_ids.ids), + ), + ) + for new_tag_id in new_tag_ids: + values = [ + "(%s, %s)" % (aml_id, new_tag_id.id) for aml_id in account_move_line_ids.ids + ] + openupgrade.logged_query( + env.cr, + """ + INSERT INTO account_account_tag_account_move_line_rel + (account_move_line_id, account_account_tag_id) + VALUES %s + ON CONFLICT DO NOTHING + """ + % ",".join(values), + ) + + +def get_account_tax_templates_iterator(env): + """ + Return account.tax.template with their xmlid + """ + module = "l10n_it" + data = env["ir.model.data"].search( + [("model", "=", "account.tax.template"), ("module", "like", module)] + ) + for elem in data: + account_tax_template = env["account.tax.template"].browse(elem.res_id) + yield elem.name, account_tax_template + + +def apply_new_tax_tags_on_account_tax(env, account_tax, account_tax_template): + """ + The normal migration script of module account tries to link the old + account.account.tag to account.tax.repartition.line. + Which does not reflect the new account.tax.template and new + account.account.tag which comes with positive (debit) and negative + (credit) flavors. + This function replace the old tags by the new ones. + """ + for repartition_line_tmpl in ( + account_tax_template.invoice_repartition_line_ids + + account_tax_template.refund_repartition_line_ids + ): + repartition_line = find_repartition_line(account_tax, repartition_line_tmpl) + if not repartition_line: + _logger.info( + "No account.tax.repartition.line found that match " + "the repartition line ID %s of the account.tax.template " + "ID %s '%s'", + repartition_line_tmpl.id, + account_tax_template.id, + account_tax_template.name, + ) + continue + update_repartition_line(env, repartition_line, repartition_line_tmpl) + + +def update_account_tax(env, company_id): + """ + Use account.tax.template to update existing account.tax + """ + for xmlid, account_tax_template in get_account_tax_templates_iterator(env): + account_tax = find_account_tax(env, xmlid, account_tax_template, company_id) + + if not account_tax: + continue + + apply_new_tax_tags_on_account_tax(env, account_tax, account_tax_template) + + # Do not rename account_tax to avoid differences in reports + # account_tax.name = account_tax_template.name + + +def remove_wrong_tag(env): + """ + Remove tags on account.move.line that are not linked to an + account.tax. + """ + openupgrade.logged_query( + env.cr, + """ + DELETE FROM account_account_tag_account_move_line_rel + WHERE account_move_line_id IN ( + SELECT id FROM account_move_line + WHERE id NOT IN ( + SELECT DISTINCT account_move_line_id + FROM account_move_line_account_tax_rel + ) + ) + """, + ) + + +def unlink_tags_from_move_line(env, tag_xmlids): + """Unlink tags from account.move.line""" + openupgrade.logged_query( + env.cr, + """ + DELETE FROM account_account_tag_account_move_line_rel r + WHERE + account_account_tag_id IN ( + SELECT res_id FROM ir_model_data + WHERE + model = 'account.account.tag' AND + module = 'l10n_it' AND + name IN (%s) + ) + """ + % ",".join("'" + xmlid + "'" for xmlid in tag_xmlids), + ) + + +def disable_troublesome_tags(env): + """Disable old tags""" + openupgrade.logged_query( + env.cr, + """ + UPDATE account_account_tag + SET active = FALSE + WHERE + name NOT LIKE '+%' AND + name NOT LIKE '-%' AND + applicability = 'taxes' + """, + ) + + +# Based on file l10n_be/data/account_tax_template_data.xml +# Also based on Mis Builder VAT report +# (Cadre I, II et III -> base, Cardre IV and following -> tax). +base_tag_xmlids = [] +tax_tag_xmlids = [ + "tax_tag_01", # 10a + "tax_tag_02", # 10I5 + "tax_tag_03", # 12a + "tax_tag_04", # 2a + "tax_tag_05", # 20a + "tax_tag_06", # 2010 + "tax_tag_07", # 2015 + "tax_tag_08", # 2040 + "tax_tag_09", # 20I5 + "tax_tag_10", # 21a + "tax_tag_11", # 2110 + "tax_tag_12", # 2115 + "tax_tag_13", # 2140 + "tax_tag_14", # 21I5 + "tax_tag_15", # 22a + "tax_tag_16", # 2210 + "tax_tag_17", # 2215 + "tax_tag_18", # 2240 + "tax_tag_19", # 22I5 + "tax_tag_20", # 4a + "tax_tag_21", # 4I5 + "tax_tag_22", # 00a + "tax_tag_23", # 10AO + "tax_tag_24", # 20AO + "tax_tag_25", # 21AO + "tax_tag_26", # 22AO + "tax_tag_27", # 4AO + "tax_tag_28", # 00art15a + "tax_tag_29", # 10v + "tax_tag_30", # 10v INC + "tax_tag_31", # 12v + "tax_tag_32", # 12v INC + "tax_tag_33", # 2v + "tax_tag_34", # 2v INC + "tax_tag_35", # 20v + "tax_tag_36", # 20v INC + "tax_tag_37", # 21v + "tax_tag_38", # 21v INC + "tax_tag_39", # 22v + "tax_tag_40", # 22v INC + "tax_tag_41", # 4v + "tax_tag_42", # 4v INC + "tax_tag_43", # 00v + "tax_tag_44", # 00v INC + "tax_tag_45", # 00art15v + "tax_tag_5a", # 5a + "tax_tag_5v", # 5v +] + + +@openupgrade.migrate() +def migrate(env, version): + remove_wrong_tag(env) + for company in env["res.company"].search([]): + update_account_tax(env, company.id) + update_account_tax(env, False) + unlink_tags_from_move_line(env, base_tag_xmlids + tax_tag_xmlids) + disable_troublesome_tags(env) diff --git a/openupgrade_scripts/scripts/l10n_it/14.0.0.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_it/14.0.0.2/upgrade_analysis.txt index 99a0067a614c..b3e40ed23727 100644 --- a/openupgrade_scripts/scripts/l10n_it/14.0.0.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_it/14.0.0.2/upgrade_analysis.txt @@ -1,4 +1,71 @@ ---Models in module 'l10n_it'--- ---Fields in module 'l10n_it'--- ---XML records in module 'l10n_it'--- +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_1 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_10 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_11 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_12 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_13 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_14 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_15 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_2 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_3 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_4 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_5 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_6 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_7 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_8 +NEW account.fiscal.position.tax.template: l10n_it.afpttn_it_intra_9 NEW account.tax.report: l10n_it.tax_report_vat +NEW account.tax.report.line: l10n_it.tax_report_line_reverse_charge_iva +NEW account.tax.report.line: l10n_it.tax_report_line_vj1 +NEW account.tax.report.line: l10n_it.tax_report_line_vj10 +NEW account.tax.report.line: l10n_it.tax_report_line_vj11 +NEW account.tax.report.line: l10n_it.tax_report_line_vj12 +NEW account.tax.report.line: l10n_it.tax_report_line_vj13 +NEW account.tax.report.line: l10n_it.tax_report_line_vj14 +NEW account.tax.report.line: l10n_it.tax_report_line_vj15 +NEW account.tax.report.line: l10n_it.tax_report_line_vj16 +NEW account.tax.report.line: l10n_it.tax_report_line_vj17 +NEW account.tax.report.line: l10n_it.tax_report_line_vj18 +NEW account.tax.report.line: l10n_it.tax_report_line_vj19 +NEW account.tax.report.line: l10n_it.tax_report_line_vj2 +NEW account.tax.report.line: l10n_it.tax_report_line_vj3 +NEW account.tax.report.line: l10n_it.tax_report_line_vj4 +NEW account.tax.report.line: l10n_it.tax_report_line_vj5 +NEW account.tax.report.line: l10n_it.tax_report_line_vj6 +NEW account.tax.report.line: l10n_it.tax_report_line_vj7 +NEW account.tax.report.line: l10n_it.tax_report_line_vj8 +NEW account.tax.report.line: l10n_it.tax_report_line_vj9 +NEW account.tax.template: l10n_it.00am +NEW account.tax.template: l10n_it.00as +NEW account.tax.template: l10n_it.00eu +NEW account.tax.template: l10n_it.00rcd +NEW account.tax.template: l10n_it.00rcm +NEW account.tax.template: l10n_it.00rcs +NEW account.tax.template: l10n_it.10am +NEW account.tax.template: l10n_it.10as +NEW account.tax.template: l10n_it.10rcd +NEW account.tax.template: l10n_it.10rcm +NEW account.tax.template: l10n_it.10rcs +NEW account.tax.template: l10n_it.22am +NEW account.tax.template: l10n_it.22as +NEW account.tax.template: l10n_it.22rcd +NEW account.tax.template: l10n_it.22rcm +NEW account.tax.template: l10n_it.22rcs +NEW account.tax.template: l10n_it.4am +NEW account.tax.template: l10n_it.4as +NEW account.tax.template: l10n_it.4rcd +NEW account.tax.template: l10n_it.4rcm +NEW account.tax.template: l10n_it.4rcs +NEW account.tax.template: l10n_it.5am +NEW account.tax.template: l10n_it.5as +NEW account.tax.template: l10n_it.5rcd +NEW account.tax.template: l10n_it.5rcm +NEW account.tax.template: l10n_it.5rcs +DEL account.tax.template: l10n_it.00a +DEL account.tax.template: l10n_it.10a +DEL account.tax.template: l10n_it.22a +DEL account.tax.template: l10n_it.4a +DEL account.tax.template: l10n_it.5a +NEW ir.ui.view: l10n_it.report_invoice_document diff --git a/openupgrade_scripts/scripts/l10n_it_edi/14.0.0.3/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_it_edi/14.0.0.3/upgrade_analysis.txt index 217da107447c..a1a33918d109 100644 --- a/openupgrade_scripts/scripts/l10n_it_edi/14.0.0.3/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_it_edi/14.0.0.3/upgrade_analysis.txt @@ -8,3 +8,5 @@ l10n_it_edi / account.move / l10n_it_einvoice_name (char) : now a NEW account.edi.format: l10n_it_edi.edi_fatturaPA ir.model.constraint: l10n_it_edi.constraint_res_partner_l10n_it_codice_fiscale (changed definition: is now 'check(l10n_it_codice_fiscale is null or l10n_it_codice_fiscale = '' or length(l10n_it_codice_fiscale) >= 11)' ('check(l10n_it_codice_fiscale is null or length(l10n_it_codice_fiscale) >= 11)')) ir.model.constraint: l10n_it_edi.constraint_res_partner_l10n_it_pa_index (changed definition: is now 'check(l10n_it_pa_index is null or l10n_it_pa_index = '' or length(l10n_it_pa_index) >= 6)' ('check(l10n_it_pa_index is null or length(l10n_it_pa_index) >= 6)')) +NEW ir.ui.view: l10n_it_edi.account_invoice_it_simplified_FatturaPA_export +NEW ir.ui.view: l10n_it_edi.account_invoice_line_it_simplified_FatturaPA diff --git a/openupgrade_scripts/scripts/l10n_it_stock_ddt/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_it_stock_ddt/14.0.0.1/upgrade_analysis.txt index 07984905337c..f680c7cfe93c 100644 --- a/openupgrade_scripts/scripts/l10n_it_stock_ddt/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_it_stock_ddt/14.0.0.1/upgrade_analysis.txt @@ -1,4 +1,4 @@ ---Models in module 'l10n_it_stock_ddt'--- ---Fields in module 'l10n_it_stock_ddt'--- ---XML records in module 'l10n_it_stock_ddt'--- ----nothing has changed in this module-- +NEW ir.ui.view: l10n_it_stock_ddt.report_ddt diff --git a/openupgrade_scripts/scripts/l10n_latam_invoice_document/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_latam_invoice_document/14.0.1.0/upgrade_analysis.txt index 78c19cc193d9..63406a622de0 100644 --- a/openupgrade_scripts/scripts/l10n_latam_invoice_document/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_latam_invoice_document/14.0.1.0/upgrade_analysis.txt @@ -1,5 +1,6 @@ ---Models in module 'l10n_latam_invoice_document'--- ---Fields in module 'l10n_latam_invoice_document'--- +l10n_latam_invoice_document / account.move / l10n_latam_document_type_id (many2one): not a function anymore l10n_latam_invoice_document / ir.sequence / l10n_latam_journal_id (many2one): DEL relation: account.journal ---XML records in module 'l10n_latam_invoice_document'--- DEL ir.ui.view: l10n_latam_invoice_document.report_invoice diff --git a/openupgrade_scripts/scripts/l10n_lu/14.0.2.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_lu/14.0.2.1/upgrade_analysis.txt new file mode 100644 index 000000000000..213025199f03 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_lu/14.0.2.1/upgrade_analysis.txt @@ -0,0 +1,1142 @@ +---Models in module 'l10n_lu'--- +---Fields in module 'l10n_lu'--- +---XML records in module 'l10n_lu'--- +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_133 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_134 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_135 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_136 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_137 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_138 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_139 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_140 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_141 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_142 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_143 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_144 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_145 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_146 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_147 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_148 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_149 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_150 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_151 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_152 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_153 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_154 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_155 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_156 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_157 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_158 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_159 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_160 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_161 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_162 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_163 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_164 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_165 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_166 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_167 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_168 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_169 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_170 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_171 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_172 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_173 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_174 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_175 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_176 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_177 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_178 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_179 +NEW account.fiscal.position.tax.template: l10n_lu.fiscal_position_tax_template_LU_180 +NEW account.group.template: l10n_lu.account_group_1 +NEW account.group.template: l10n_lu.account_group_10 +NEW account.group.template: l10n_lu.account_group_101 +NEW account.group.template: l10n_lu.account_group_102 +NEW account.group.template: l10n_lu.account_group_103 +NEW account.group.template: l10n_lu.account_group_104 +NEW account.group.template: l10n_lu.account_group_105 +NEW account.group.template: l10n_lu.account_group_106 +NEW account.group.template: l10n_lu.account_group_11 +NEW account.group.template: l10n_lu.account_group_111 +NEW account.group.template: l10n_lu.account_group_112 +NEW account.group.template: l10n_lu.account_group_113 +NEW account.group.template: l10n_lu.account_group_114 +NEW account.group.template: l10n_lu.account_group_115 +NEW account.group.template: l10n_lu.account_group_12 +NEW account.group.template: l10n_lu.account_group_122 +NEW account.group.template: l10n_lu.account_group_123 +NEW account.group.template: l10n_lu.account_group_128 +NEW account.group.template: l10n_lu.account_group_13 +NEW account.group.template: l10n_lu.account_group_131 +NEW account.group.template: l10n_lu.account_group_132 +NEW account.group.template: l10n_lu.account_group_133 +NEW account.group.template: l10n_lu.account_group_138 +NEW account.group.template: l10n_lu.account_group_1381 +NEW account.group.template: l10n_lu.account_group_1382 +NEW account.group.template: l10n_lu.account_group_13821 +NEW account.group.template: l10n_lu.account_group_13822 +NEW account.group.template: l10n_lu.account_group_13823 +NEW account.group.template: l10n_lu.account_group_138231 +NEW account.group.template: l10n_lu.account_group_138232 +NEW account.group.template: l10n_lu.account_group_13828 +NEW account.group.template: l10n_lu.account_group_14 +NEW account.group.template: l10n_lu.account_group_141 +NEW account.group.template: l10n_lu.account_group_1411 +NEW account.group.template: l10n_lu.account_group_1412 +NEW account.group.template: l10n_lu.account_group_142 +NEW account.group.template: l10n_lu.account_group_15 +NEW account.group.template: l10n_lu.account_group_16 +NEW account.group.template: l10n_lu.account_group_161 +NEW account.group.template: l10n_lu.account_group_1611 +NEW account.group.template: l10n_lu.account_group_1612 +NEW account.group.template: l10n_lu.account_group_16121 +NEW account.group.template: l10n_lu.account_group_16122 +NEW account.group.template: l10n_lu.account_group_1613 +NEW account.group.template: l10n_lu.account_group_162 +NEW account.group.template: l10n_lu.account_group_1621 +NEW account.group.template: l10n_lu.account_group_1622 +NEW account.group.template: l10n_lu.account_group_1623 +NEW account.group.template: l10n_lu.account_group_168 +NEW account.group.template: l10n_lu.account_group_18 +NEW account.group.template: l10n_lu.account_group_181 +NEW account.group.template: l10n_lu.account_group_182 +NEW account.group.template: l10n_lu.account_group_183 +NEW account.group.template: l10n_lu.account_group_188 +NEW account.group.template: l10n_lu.account_group_1881 +NEW account.group.template: l10n_lu.account_group_1882 +NEW account.group.template: l10n_lu.account_group_19 +NEW account.group.template: l10n_lu.account_group_192 +NEW account.group.template: l10n_lu.account_group_1921 +NEW account.group.template: l10n_lu.account_group_1922 +NEW account.group.template: l10n_lu.account_group_193 +NEW account.group.template: l10n_lu.account_group_1931 +NEW account.group.template: l10n_lu.account_group_1932 +NEW account.group.template: l10n_lu.account_group_194 +NEW account.group.template: l10n_lu.account_group_1941 +NEW account.group.template: l10n_lu.account_group_1942 +NEW account.group.template: l10n_lu.account_group_2 +NEW account.group.template: l10n_lu.account_group_20 +NEW account.group.template: l10n_lu.account_group_201 +NEW account.group.template: l10n_lu.account_group_203 +NEW account.group.template: l10n_lu.account_group_204 +NEW account.group.template: l10n_lu.account_group_208 +NEW account.group.template: l10n_lu.account_group_21 +NEW account.group.template: l10n_lu.account_group_211 +NEW account.group.template: l10n_lu.account_group_212 +NEW account.group.template: l10n_lu.account_group_2121 +NEW account.group.template: l10n_lu.account_group_21211 +NEW account.group.template: l10n_lu.account_group_21212 +NEW account.group.template: l10n_lu.account_group_21213 +NEW account.group.template: l10n_lu.account_group_21214 +NEW account.group.template: l10n_lu.account_group_21215 +NEW account.group.template: l10n_lu.account_group_212151 +NEW account.group.template: l10n_lu.account_group_212152 +NEW account.group.template: l10n_lu.account_group_212158 +NEW account.group.template: l10n_lu.account_group_2122 +NEW account.group.template: l10n_lu.account_group_21221 +NEW account.group.template: l10n_lu.account_group_21222 +NEW account.group.template: l10n_lu.account_group_21223 +NEW account.group.template: l10n_lu.account_group_21224 +NEW account.group.template: l10n_lu.account_group_21225 +NEW account.group.template: l10n_lu.account_group_212251 +NEW account.group.template: l10n_lu.account_group_212258 +NEW account.group.template: l10n_lu.account_group_213 +NEW account.group.template: l10n_lu.account_group_214 +NEW account.group.template: l10n_lu.account_group_22 +NEW account.group.template: l10n_lu.account_group_221 +NEW account.group.template: l10n_lu.account_group_2211 +NEW account.group.template: l10n_lu.account_group_22111 +NEW account.group.template: l10n_lu.account_group_221111 +NEW account.group.template: l10n_lu.account_group_221112 +NEW account.group.template: l10n_lu.account_group_221118 +NEW account.group.template: l10n_lu.account_group_22112 +NEW account.group.template: l10n_lu.account_group_2212 +NEW account.group.template: l10n_lu.account_group_22121 +NEW account.group.template: l10n_lu.account_group_22122 +NEW account.group.template: l10n_lu.account_group_2213 +NEW account.group.template: l10n_lu.account_group_22131 +NEW account.group.template: l10n_lu.account_group_221311 +NEW account.group.template: l10n_lu.account_group_221312 +NEW account.group.template: l10n_lu.account_group_221313 +NEW account.group.template: l10n_lu.account_group_221318 +NEW account.group.template: l10n_lu.account_group_22132 +NEW account.group.template: l10n_lu.account_group_2214 +NEW account.group.template: l10n_lu.account_group_22141 +NEW account.group.template: l10n_lu.account_group_22142 +NEW account.group.template: l10n_lu.account_group_2215 +NEW account.group.template: l10n_lu.account_group_22151 +NEW account.group.template: l10n_lu.account_group_22152 +NEW account.group.template: l10n_lu.account_group_222 +NEW account.group.template: l10n_lu.account_group_2221 +NEW account.group.template: l10n_lu.account_group_2222 +NEW account.group.template: l10n_lu.account_group_223 +NEW account.group.template: l10n_lu.account_group_2231 +NEW account.group.template: l10n_lu.account_group_2232 +NEW account.group.template: l10n_lu.account_group_2233 +NEW account.group.template: l10n_lu.account_group_2234 +NEW account.group.template: l10n_lu.account_group_2235 +NEW account.group.template: l10n_lu.account_group_2236 +NEW account.group.template: l10n_lu.account_group_2237 +NEW account.group.template: l10n_lu.account_group_2238 +NEW account.group.template: l10n_lu.account_group_224 +NEW account.group.template: l10n_lu.account_group_2241 +NEW account.group.template: l10n_lu.account_group_22411 +NEW account.group.template: l10n_lu.account_group_22412 +NEW account.group.template: l10n_lu.account_group_2242 +NEW account.group.template: l10n_lu.account_group_2243 +NEW account.group.template: l10n_lu.account_group_23 +NEW account.group.template: l10n_lu.account_group_231 +NEW account.group.template: l10n_lu.account_group_232 +NEW account.group.template: l10n_lu.account_group_233 +NEW account.group.template: l10n_lu.account_group_234 +NEW account.group.template: l10n_lu.account_group_235 +NEW account.group.template: l10n_lu.account_group_2351 +NEW account.group.template: l10n_lu.account_group_23511 +NEW account.group.template: l10n_lu.account_group_235111 +NEW account.group.template: l10n_lu.account_group_235112 +NEW account.group.template: l10n_lu.account_group_23518 +NEW account.group.template: l10n_lu.account_group_2352 +NEW account.group.template: l10n_lu.account_group_23521 +NEW account.group.template: l10n_lu.account_group_23528 +NEW account.group.template: l10n_lu.account_group_2353 +NEW account.group.template: l10n_lu.account_group_2358 +NEW account.group.template: l10n_lu.account_group_236 +NEW account.group.template: l10n_lu.account_group_2361 +NEW account.group.template: l10n_lu.account_group_2362 +NEW account.group.template: l10n_lu.account_group_2363 +NEW account.group.template: l10n_lu.account_group_3 +NEW account.group.template: l10n_lu.account_group_30 +NEW account.group.template: l10n_lu.account_group_301 +NEW account.group.template: l10n_lu.account_group_303 +NEW account.group.template: l10n_lu.account_group_304 +NEW account.group.template: l10n_lu.account_group_31 +NEW account.group.template: l10n_lu.account_group_311 +NEW account.group.template: l10n_lu.account_group_312 +NEW account.group.template: l10n_lu.account_group_313 +NEW account.group.template: l10n_lu.account_group_314 +NEW account.group.template: l10n_lu.account_group_315 +NEW account.group.template: l10n_lu.account_group_32 +NEW account.group.template: l10n_lu.account_group_321 +NEW account.group.template: l10n_lu.account_group_322 +NEW account.group.template: l10n_lu.account_group_323 +NEW account.group.template: l10n_lu.account_group_36 +NEW account.group.template: l10n_lu.account_group_361 +NEW account.group.template: l10n_lu.account_group_362 +NEW account.group.template: l10n_lu.account_group_3621 +NEW account.group.template: l10n_lu.account_group_3622 +NEW account.group.template: l10n_lu.account_group_363 +NEW account.group.template: l10n_lu.account_group_3631 +NEW account.group.template: l10n_lu.account_group_3632 +NEW account.group.template: l10n_lu.account_group_37 +NEW account.group.template: l10n_lu.account_group_4 +NEW account.group.template: l10n_lu.account_group_40 +NEW account.group.template: l10n_lu.account_group_401 +NEW account.group.template: l10n_lu.account_group_4011 +NEW account.group.template: l10n_lu.account_group_4012 +NEW account.group.template: l10n_lu.account_group_4013 +NEW account.group.template: l10n_lu.account_group_4014 +NEW account.group.template: l10n_lu.account_group_4015 +NEW account.group.template: l10n_lu.account_group_4019 +NEW account.group.template: l10n_lu.account_group_402 +NEW account.group.template: l10n_lu.account_group_4021 +NEW account.group.template: l10n_lu.account_group_4025 +NEW account.group.template: l10n_lu.account_group_4029 +NEW account.group.template: l10n_lu.account_group_41 +NEW account.group.template: l10n_lu.account_group_411 +NEW account.group.template: l10n_lu.account_group_4111 +NEW account.group.template: l10n_lu.account_group_41111 +NEW account.group.template: l10n_lu.account_group_41112 +NEW account.group.template: l10n_lu.account_group_41118 +NEW account.group.template: l10n_lu.account_group_41119 +NEW account.group.template: l10n_lu.account_group_4112 +NEW account.group.template: l10n_lu.account_group_41121 +NEW account.group.template: l10n_lu.account_group_41122 +NEW account.group.template: l10n_lu.account_group_41128 +NEW account.group.template: l10n_lu.account_group_41129 +NEW account.group.template: l10n_lu.account_group_412 +NEW account.group.template: l10n_lu.account_group_4121 +NEW account.group.template: l10n_lu.account_group_41211 +NEW account.group.template: l10n_lu.account_group_41212 +NEW account.group.template: l10n_lu.account_group_41218 +NEW account.group.template: l10n_lu.account_group_41219 +NEW account.group.template: l10n_lu.account_group_4122 +NEW account.group.template: l10n_lu.account_group_41221 +NEW account.group.template: l10n_lu.account_group_41222 +NEW account.group.template: l10n_lu.account_group_41228 +NEW account.group.template: l10n_lu.account_group_41229 +NEW account.group.template: l10n_lu.account_group_42 +NEW account.group.template: l10n_lu.account_group_421 +NEW account.group.template: l10n_lu.account_group_4211 +NEW account.group.template: l10n_lu.account_group_42111 +NEW account.group.template: l10n_lu.account_group_42119 +NEW account.group.template: l10n_lu.account_group_4212 +NEW account.group.template: l10n_lu.account_group_4213 +NEW account.group.template: l10n_lu.account_group_42131 +NEW account.group.template: l10n_lu.account_group_42132 +NEW account.group.template: l10n_lu.account_group_42138 +NEW account.group.template: l10n_lu.account_group_4214 +NEW account.group.template: l10n_lu.account_group_42141 +NEW account.group.template: l10n_lu.account_group_42142 +NEW account.group.template: l10n_lu.account_group_42143 +NEW account.group.template: l10n_lu.account_group_42144 +NEW account.group.template: l10n_lu.account_group_42145 +NEW account.group.template: l10n_lu.account_group_42146 +NEW account.group.template: l10n_lu.account_group_42148 +NEW account.group.template: l10n_lu.account_group_4215 +NEW account.group.template: l10n_lu.account_group_4216 +NEW account.group.template: l10n_lu.account_group_42161 +NEW account.group.template: l10n_lu.account_group_421611 +NEW account.group.template: l10n_lu.account_group_421612 +NEW account.group.template: l10n_lu.account_group_421613 +NEW account.group.template: l10n_lu.account_group_421618 +NEW account.group.template: l10n_lu.account_group_42162 +NEW account.group.template: l10n_lu.account_group_421621 +NEW account.group.template: l10n_lu.account_group_421622 +NEW account.group.template: l10n_lu.account_group_421628 +NEW account.group.template: l10n_lu.account_group_42168 +NEW account.group.template: l10n_lu.account_group_4217 +NEW account.group.template: l10n_lu.account_group_42171 +NEW account.group.template: l10n_lu.account_group_42172 +NEW account.group.template: l10n_lu.account_group_42178 +NEW account.group.template: l10n_lu.account_group_4218 +NEW account.group.template: l10n_lu.account_group_42181 +NEW account.group.template: l10n_lu.account_group_421811 +NEW account.group.template: l10n_lu.account_group_421818 +NEW account.group.template: l10n_lu.account_group_42187 +NEW account.group.template: l10n_lu.account_group_42188 +NEW account.group.template: l10n_lu.account_group_42189 +NEW account.group.template: l10n_lu.account_group_422 +NEW account.group.template: l10n_lu.account_group_4221 +NEW account.group.template: l10n_lu.account_group_4222 +NEW account.group.template: l10n_lu.account_group_4223 +NEW account.group.template: l10n_lu.account_group_42231 +NEW account.group.template: l10n_lu.account_group_42232 +NEW account.group.template: l10n_lu.account_group_42238 +NEW account.group.template: l10n_lu.account_group_4228 +NEW account.group.template: l10n_lu.account_group_42287 +NEW account.group.template: l10n_lu.account_group_42288 +NEW account.group.template: l10n_lu.account_group_42289 +NEW account.group.template: l10n_lu.account_group_43 +NEW account.group.template: l10n_lu.account_group_431 +NEW account.group.template: l10n_lu.account_group_4311 +NEW account.group.template: l10n_lu.account_group_4312 +NEW account.group.template: l10n_lu.account_group_432 +NEW account.group.template: l10n_lu.account_group_4321 +NEW account.group.template: l10n_lu.account_group_4322 +NEW account.group.template: l10n_lu.account_group_44 +NEW account.group.template: l10n_lu.account_group_441 +NEW account.group.template: l10n_lu.account_group_4411 +NEW account.group.template: l10n_lu.account_group_44111 +NEW account.group.template: l10n_lu.account_group_44112 +NEW account.group.template: l10n_lu.account_group_44113 +NEW account.group.template: l10n_lu.account_group_4412 +NEW account.group.template: l10n_lu.account_group_44121 +NEW account.group.template: l10n_lu.account_group_44123 +NEW account.group.template: l10n_lu.account_group_442 +NEW account.group.template: l10n_lu.account_group_4421 +NEW account.group.template: l10n_lu.account_group_4422 +NEW account.group.template: l10n_lu.account_group_45 +NEW account.group.template: l10n_lu.account_group_451 +NEW account.group.template: l10n_lu.account_group_4511 +NEW account.group.template: l10n_lu.account_group_45111 +NEW account.group.template: l10n_lu.account_group_45112 +NEW account.group.template: l10n_lu.account_group_45118 +NEW account.group.template: l10n_lu.account_group_4512 +NEW account.group.template: l10n_lu.account_group_45121 +NEW account.group.template: l10n_lu.account_group_45122 +NEW account.group.template: l10n_lu.account_group_45128 +NEW account.group.template: l10n_lu.account_group_452 +NEW account.group.template: l10n_lu.account_group_4521 +NEW account.group.template: l10n_lu.account_group_45211 +NEW account.group.template: l10n_lu.account_group_45212 +NEW account.group.template: l10n_lu.account_group_45218 +NEW account.group.template: l10n_lu.account_group_4522 +NEW account.group.template: l10n_lu.account_group_45221 +NEW account.group.template: l10n_lu.account_group_45222 +NEW account.group.template: l10n_lu.account_group_45228 +NEW account.group.template: l10n_lu.account_group_46 +NEW account.group.template: l10n_lu.account_group_461 +NEW account.group.template: l10n_lu.account_group_4611 +NEW account.group.template: l10n_lu.account_group_4612 +NEW account.group.template: l10n_lu.account_group_46121 +NEW account.group.template: l10n_lu.account_group_461211 +NEW account.group.template: l10n_lu.account_group_461212 +NEW account.group.template: l10n_lu.account_group_46122 +NEW account.group.template: l10n_lu.account_group_461221 +NEW account.group.template: l10n_lu.account_group_461222 +NEW account.group.template: l10n_lu.account_group_46123 +NEW account.group.template: l10n_lu.account_group_461231 +NEW account.group.template: l10n_lu.account_group_461232 +NEW account.group.template: l10n_lu.account_group_46124 +NEW account.group.template: l10n_lu.account_group_46125 +NEW account.group.template: l10n_lu.account_group_46126 +NEW account.group.template: l10n_lu.account_group_46128 +NEW account.group.template: l10n_lu.account_group_4613 +NEW account.group.template: l10n_lu.account_group_4614 +NEW account.group.template: l10n_lu.account_group_46141 +NEW account.group.template: l10n_lu.account_group_461411 +NEW account.group.template: l10n_lu.account_group_461412 +NEW account.group.template: l10n_lu.account_group_461413 +NEW account.group.template: l10n_lu.account_group_461418 +NEW account.group.template: l10n_lu.account_group_46142 +NEW account.group.template: l10n_lu.account_group_461421 +NEW account.group.template: l10n_lu.account_group_461422 +NEW account.group.template: l10n_lu.account_group_461428 +NEW account.group.template: l10n_lu.account_group_46148 +NEW account.group.template: l10n_lu.account_group_4615 +NEW account.group.template: l10n_lu.account_group_46151 +NEW account.group.template: l10n_lu.account_group_46158 +NEW account.group.template: l10n_lu.account_group_462 +NEW account.group.template: l10n_lu.account_group_4621 +NEW account.group.template: l10n_lu.account_group_4622 +NEW account.group.template: l10n_lu.account_group_4628 +NEW account.group.template: l10n_lu.account_group_47 +NEW account.group.template: l10n_lu.account_group_471 +NEW account.group.template: l10n_lu.account_group_4711 +NEW account.group.template: l10n_lu.account_group_4712 +NEW account.group.template: l10n_lu.account_group_4713 +NEW account.group.template: l10n_lu.account_group_4714 +NEW account.group.template: l10n_lu.account_group_4715 +NEW account.group.template: l10n_lu.account_group_4716 +NEW account.group.template: l10n_lu.account_group_47161 +NEW account.group.template: l10n_lu.account_group_47162 +NEW account.group.template: l10n_lu.account_group_47163 +NEW account.group.template: l10n_lu.account_group_47168 +NEW account.group.template: l10n_lu.account_group_4717 +NEW account.group.template: l10n_lu.account_group_4718 +NEW account.group.template: l10n_lu.account_group_472 +NEW account.group.template: l10n_lu.account_group_4721 +NEW account.group.template: l10n_lu.account_group_4722 +NEW account.group.template: l10n_lu.account_group_4723 +NEW account.group.template: l10n_lu.account_group_4724 +NEW account.group.template: l10n_lu.account_group_4726 +NEW account.group.template: l10n_lu.account_group_47261 +NEW account.group.template: l10n_lu.account_group_47262 +NEW account.group.template: l10n_lu.account_group_47263 +NEW account.group.template: l10n_lu.account_group_47268 +NEW account.group.template: l10n_lu.account_group_4727 +NEW account.group.template: l10n_lu.account_group_4728 +NEW account.group.template: l10n_lu.account_group_48 +NEW account.group.template: l10n_lu.account_group_481 +NEW account.group.template: l10n_lu.account_group_482 +NEW account.group.template: l10n_lu.account_group_483 +NEW account.group.template: l10n_lu.account_group_484 +NEW account.group.template: l10n_lu.account_group_485 +NEW account.group.template: l10n_lu.account_group_486 +NEW account.group.template: l10n_lu.account_group_487 +NEW account.group.template: l10n_lu.account_group_5 +NEW account.group.template: l10n_lu.account_group_50 +NEW account.group.template: l10n_lu.account_group_501 +NEW account.group.template: l10n_lu.account_group_502 +NEW account.group.template: l10n_lu.account_group_503 +NEW account.group.template: l10n_lu.account_group_508 +NEW account.group.template: l10n_lu.account_group_5081 +NEW account.group.template: l10n_lu.account_group_5082 +NEW account.group.template: l10n_lu.account_group_5083 +NEW account.group.template: l10n_lu.account_group_5084 +NEW account.group.template: l10n_lu.account_group_5085 +NEW account.group.template: l10n_lu.account_group_5088 +NEW account.group.template: l10n_lu.account_group_51 +NEW account.group.template: l10n_lu.account_group_513 +NEW account.group.template: l10n_lu.account_group_5131 +NEW account.group.template: l10n_lu.account_group_5132 +NEW account.group.template: l10n_lu.account_group_516 +NEW account.group.template: l10n_lu.account_group_517 +NEW account.group.template: l10n_lu.account_group_5171 +NEW account.group.template: l10n_lu.account_group_5172 +NEW account.group.template: l10n_lu.account_group_518 +NEW account.group.template: l10n_lu.account_group_6 +NEW account.group.template: l10n_lu.account_group_60 +NEW account.group.template: l10n_lu.account_group_601 +NEW account.group.template: l10n_lu.account_group_603 +NEW account.group.template: l10n_lu.account_group_6031 +NEW account.group.template: l10n_lu.account_group_60311 +NEW account.group.template: l10n_lu.account_group_60312 +NEW account.group.template: l10n_lu.account_group_60313 +NEW account.group.template: l10n_lu.account_group_60314 +NEW account.group.template: l10n_lu.account_group_60315 +NEW account.group.template: l10n_lu.account_group_6032 +NEW account.group.template: l10n_lu.account_group_6033 +NEW account.group.template: l10n_lu.account_group_6034 +NEW account.group.template: l10n_lu.account_group_6035 +NEW account.group.template: l10n_lu.account_group_6036 +NEW account.group.template: l10n_lu.account_group_6037 +NEW account.group.template: l10n_lu.account_group_6038 +NEW account.group.template: l10n_lu.account_group_604 +NEW account.group.template: l10n_lu.account_group_606 +NEW account.group.template: l10n_lu.account_group_6061 +NEW account.group.template: l10n_lu.account_group_6062 +NEW account.group.template: l10n_lu.account_group_6063 +NEW account.group.template: l10n_lu.account_group_607 +NEW account.group.template: l10n_lu.account_group_6071 +NEW account.group.template: l10n_lu.account_group_6073 +NEW account.group.template: l10n_lu.account_group_6074 +NEW account.group.template: l10n_lu.account_group_6076 +NEW account.group.template: l10n_lu.account_group_60761 +NEW account.group.template: l10n_lu.account_group_60762 +NEW account.group.template: l10n_lu.account_group_60763 +NEW account.group.template: l10n_lu.account_group_608 +NEW account.group.template: l10n_lu.account_group_6081 +NEW account.group.template: l10n_lu.account_group_60811 +NEW account.group.template: l10n_lu.account_group_60812 +NEW account.group.template: l10n_lu.account_group_60813 +NEW account.group.template: l10n_lu.account_group_60814 +NEW account.group.template: l10n_lu.account_group_6082 +NEW account.group.template: l10n_lu.account_group_6083 +NEW account.group.template: l10n_lu.account_group_6088 +NEW account.group.template: l10n_lu.account_group_609 +NEW account.group.template: l10n_lu.account_group_6091 +NEW account.group.template: l10n_lu.account_group_6093 +NEW account.group.template: l10n_lu.account_group_6094 +NEW account.group.template: l10n_lu.account_group_6096 +NEW account.group.template: l10n_lu.account_group_6098 +NEW account.group.template: l10n_lu.account_group_6099 +NEW account.group.template: l10n_lu.account_group_61 +NEW account.group.template: l10n_lu.account_group_611 +NEW account.group.template: l10n_lu.account_group_6111 +NEW account.group.template: l10n_lu.account_group_61111 +NEW account.group.template: l10n_lu.account_group_61112 +NEW account.group.template: l10n_lu.account_group_6112 +NEW account.group.template: l10n_lu.account_group_61123 +NEW account.group.template: l10n_lu.account_group_61128 +NEW account.group.template: l10n_lu.account_group_6113 +NEW account.group.template: l10n_lu.account_group_6114 +NEW account.group.template: l10n_lu.account_group_6115 +NEW account.group.template: l10n_lu.account_group_61153 +NEW account.group.template: l10n_lu.account_group_61158 +NEW account.group.template: l10n_lu.account_group_612 +NEW account.group.template: l10n_lu.account_group_6121 +NEW account.group.template: l10n_lu.account_group_6122 +NEW account.group.template: l10n_lu.account_group_61221 +NEW account.group.template: l10n_lu.account_group_61223 +NEW account.group.template: l10n_lu.account_group_61228 +NEW account.group.template: l10n_lu.account_group_613 +NEW account.group.template: l10n_lu.account_group_6131 +NEW account.group.template: l10n_lu.account_group_6132 +NEW account.group.template: l10n_lu.account_group_6133 +NEW account.group.template: l10n_lu.account_group_61332 +NEW account.group.template: l10n_lu.account_group_61333 +NEW account.group.template: l10n_lu.account_group_61334 +NEW account.group.template: l10n_lu.account_group_61336 +NEW account.group.template: l10n_lu.account_group_61338 +NEW account.group.template: l10n_lu.account_group_6134 +NEW account.group.template: l10n_lu.account_group_61341 +NEW account.group.template: l10n_lu.account_group_61342 +NEW account.group.template: l10n_lu.account_group_61348 +NEW account.group.template: l10n_lu.account_group_6135 +NEW account.group.template: l10n_lu.account_group_6138 +NEW account.group.template: l10n_lu.account_group_614 +NEW account.group.template: l10n_lu.account_group_6141 +NEW account.group.template: l10n_lu.account_group_61411 +NEW account.group.template: l10n_lu.account_group_61412 +NEW account.group.template: l10n_lu.account_group_61418 +NEW account.group.template: l10n_lu.account_group_6142 +NEW account.group.template: l10n_lu.account_group_6143 +NEW account.group.template: l10n_lu.account_group_6144 +NEW account.group.template: l10n_lu.account_group_6145 +NEW account.group.template: l10n_lu.account_group_6146 +NEW account.group.template: l10n_lu.account_group_6148 +NEW account.group.template: l10n_lu.account_group_615 +NEW account.group.template: l10n_lu.account_group_6151 +NEW account.group.template: l10n_lu.account_group_61511 +NEW account.group.template: l10n_lu.account_group_61512 +NEW account.group.template: l10n_lu.account_group_61513 +NEW account.group.template: l10n_lu.account_group_61514 +NEW account.group.template: l10n_lu.account_group_61515 +NEW account.group.template: l10n_lu.account_group_61516 +NEW account.group.template: l10n_lu.account_group_61517 +NEW account.group.template: l10n_lu.account_group_61518 +NEW account.group.template: l10n_lu.account_group_6152 +NEW account.group.template: l10n_lu.account_group_61521 +NEW account.group.template: l10n_lu.account_group_615211 +NEW account.group.template: l10n_lu.account_group_615212 +NEW account.group.template: l10n_lu.account_group_61522 +NEW account.group.template: l10n_lu.account_group_61523 +NEW account.group.template: l10n_lu.account_group_61524 +NEW account.group.template: l10n_lu.account_group_6153 +NEW account.group.template: l10n_lu.account_group_61531 +NEW account.group.template: l10n_lu.account_group_61532 +NEW account.group.template: l10n_lu.account_group_616 +NEW account.group.template: l10n_lu.account_group_6161 +NEW account.group.template: l10n_lu.account_group_6162 +NEW account.group.template: l10n_lu.account_group_6165 +NEW account.group.template: l10n_lu.account_group_6168 +NEW account.group.template: l10n_lu.account_group_617 +NEW account.group.template: l10n_lu.account_group_6171 +NEW account.group.template: l10n_lu.account_group_6172 +NEW account.group.template: l10n_lu.account_group_618 +NEW account.group.template: l10n_lu.account_group_6181 +NEW account.group.template: l10n_lu.account_group_6182 +NEW account.group.template: l10n_lu.account_group_6183 +NEW account.group.template: l10n_lu.account_group_6184 +NEW account.group.template: l10n_lu.account_group_61841 +NEW account.group.template: l10n_lu.account_group_61842 +NEW account.group.template: l10n_lu.account_group_61843 +NEW account.group.template: l10n_lu.account_group_61844 +NEW account.group.template: l10n_lu.account_group_61845 +NEW account.group.template: l10n_lu.account_group_6185 +NEW account.group.template: l10n_lu.account_group_61851 +NEW account.group.template: l10n_lu.account_group_61852 +NEW account.group.template: l10n_lu.account_group_61853 +NEW account.group.template: l10n_lu.account_group_61854 +NEW account.group.template: l10n_lu.account_group_61858 +NEW account.group.template: l10n_lu.account_group_6186 +NEW account.group.template: l10n_lu.account_group_6187 +NEW account.group.template: l10n_lu.account_group_6188 +NEW account.group.template: l10n_lu.account_group_619 +NEW account.group.template: l10n_lu.account_group_62 +NEW account.group.template: l10n_lu.account_group_621 +NEW account.group.template: l10n_lu.account_group_6211 +NEW account.group.template: l10n_lu.account_group_62111 +NEW account.group.template: l10n_lu.account_group_62112 +NEW account.group.template: l10n_lu.account_group_621121 +NEW account.group.template: l10n_lu.account_group_621122 +NEW account.group.template: l10n_lu.account_group_621123 +NEW account.group.template: l10n_lu.account_group_621128 +NEW account.group.template: l10n_lu.account_group_62114 +NEW account.group.template: l10n_lu.account_group_62115 +NEW account.group.template: l10n_lu.account_group_62116 +NEW account.group.template: l10n_lu.account_group_62117 +NEW account.group.template: l10n_lu.account_group_6218 +NEW account.group.template: l10n_lu.account_group_6219 +NEW account.group.template: l10n_lu.account_group_622 +NEW account.group.template: l10n_lu.account_group_6221 +NEW account.group.template: l10n_lu.account_group_6222 +NEW account.group.template: l10n_lu.account_group_6228 +NEW account.group.template: l10n_lu.account_group_623 +NEW account.group.template: l10n_lu.account_group_6231 +NEW account.group.template: l10n_lu.account_group_6232 +NEW account.group.template: l10n_lu.account_group_624 +NEW account.group.template: l10n_lu.account_group_6241 +NEW account.group.template: l10n_lu.account_group_62411 +NEW account.group.template: l10n_lu.account_group_62412 +NEW account.group.template: l10n_lu.account_group_62413 +NEW account.group.template: l10n_lu.account_group_62414 +NEW account.group.template: l10n_lu.account_group_62415 +NEW account.group.template: l10n_lu.account_group_6248 +NEW account.group.template: l10n_lu.account_group_63 +NEW account.group.template: l10n_lu.account_group_631 +NEW account.group.template: l10n_lu.account_group_6311 +NEW account.group.template: l10n_lu.account_group_6313 +NEW account.group.template: l10n_lu.account_group_6314 +NEW account.group.template: l10n_lu.account_group_6318 +NEW account.group.template: l10n_lu.account_group_632 +NEW account.group.template: l10n_lu.account_group_6321 +NEW account.group.template: l10n_lu.account_group_6322 +NEW account.group.template: l10n_lu.account_group_6323 +NEW account.group.template: l10n_lu.account_group_6324 +NEW account.group.template: l10n_lu.account_group_633 +NEW account.group.template: l10n_lu.account_group_6331 +NEW account.group.template: l10n_lu.account_group_63311 +NEW account.group.template: l10n_lu.account_group_63312 +NEW account.group.template: l10n_lu.account_group_63313 +NEW account.group.template: l10n_lu.account_group_63314 +NEW account.group.template: l10n_lu.account_group_63315 +NEW account.group.template: l10n_lu.account_group_6332 +NEW account.group.template: l10n_lu.account_group_6333 +NEW account.group.template: l10n_lu.account_group_6334 +NEW account.group.template: l10n_lu.account_group_634 +NEW account.group.template: l10n_lu.account_group_6341 +NEW account.group.template: l10n_lu.account_group_6342 +NEW account.group.template: l10n_lu.account_group_6343 +NEW account.group.template: l10n_lu.account_group_6344 +NEW account.group.template: l10n_lu.account_group_6345 +NEW account.group.template: l10n_lu.account_group_635 +NEW account.group.template: l10n_lu.account_group_6351 +NEW account.group.template: l10n_lu.account_group_6352 +NEW account.group.template: l10n_lu.account_group_6353 +NEW account.group.template: l10n_lu.account_group_6354 +NEW account.group.template: l10n_lu.account_group_64 +NEW account.group.template: l10n_lu.account_group_641 +NEW account.group.template: l10n_lu.account_group_6411 +NEW account.group.template: l10n_lu.account_group_6412 +NEW account.group.template: l10n_lu.account_group_6413 +NEW account.group.template: l10n_lu.account_group_6414 +NEW account.group.template: l10n_lu.account_group_6415 +NEW account.group.template: l10n_lu.account_group_64151 +NEW account.group.template: l10n_lu.account_group_64158 +NEW account.group.template: l10n_lu.account_group_642 +NEW account.group.template: l10n_lu.account_group_643 +NEW account.group.template: l10n_lu.account_group_6431 +NEW account.group.template: l10n_lu.account_group_6432 +NEW account.group.template: l10n_lu.account_group_6438 +NEW account.group.template: l10n_lu.account_group_644 +NEW account.group.template: l10n_lu.account_group_6441 +NEW account.group.template: l10n_lu.account_group_64411 +NEW account.group.template: l10n_lu.account_group_64412 +NEW account.group.template: l10n_lu.account_group_6442 +NEW account.group.template: l10n_lu.account_group_64421 +NEW account.group.template: l10n_lu.account_group_64422 +NEW account.group.template: l10n_lu.account_group_645 +NEW account.group.template: l10n_lu.account_group_6451 +NEW account.group.template: l10n_lu.account_group_6452 +NEW account.group.template: l10n_lu.account_group_6453 +NEW account.group.template: l10n_lu.account_group_6454 +NEW account.group.template: l10n_lu.account_group_646 +NEW account.group.template: l10n_lu.account_group_6461 +NEW account.group.template: l10n_lu.account_group_6462 +NEW account.group.template: l10n_lu.account_group_6463 +NEW account.group.template: l10n_lu.account_group_6464 +NEW account.group.template: l10n_lu.account_group_6465 +NEW account.group.template: l10n_lu.account_group_64651 +NEW account.group.template: l10n_lu.account_group_64658 +NEW account.group.template: l10n_lu.account_group_6466 +NEW account.group.template: l10n_lu.account_group_6467 +NEW account.group.template: l10n_lu.account_group_6468 +NEW account.group.template: l10n_lu.account_group_647 +NEW account.group.template: l10n_lu.account_group_648 +NEW account.group.template: l10n_lu.account_group_6481 +NEW account.group.template: l10n_lu.account_group_6488 +NEW account.group.template: l10n_lu.account_group_649 +NEW account.group.template: l10n_lu.account_group_6491 +NEW account.group.template: l10n_lu.account_group_6492 +NEW account.group.template: l10n_lu.account_group_65 +NEW account.group.template: l10n_lu.account_group_651 +NEW account.group.template: l10n_lu.account_group_6511 +NEW account.group.template: l10n_lu.account_group_65111 +NEW account.group.template: l10n_lu.account_group_65112 +NEW account.group.template: l10n_lu.account_group_65113 +NEW account.group.template: l10n_lu.account_group_65114 +NEW account.group.template: l10n_lu.account_group_65115 +NEW account.group.template: l10n_lu.account_group_65116 +NEW account.group.template: l10n_lu.account_group_6512 +NEW account.group.template: l10n_lu.account_group_652 +NEW account.group.template: l10n_lu.account_group_6521 +NEW account.group.template: l10n_lu.account_group_65211 +NEW account.group.template: l10n_lu.account_group_65212 +NEW account.group.template: l10n_lu.account_group_65213 +NEW account.group.template: l10n_lu.account_group_65214 +NEW account.group.template: l10n_lu.account_group_65215 +NEW account.group.template: l10n_lu.account_group_65216 +NEW account.group.template: l10n_lu.account_group_6522 +NEW account.group.template: l10n_lu.account_group_65221 +NEW account.group.template: l10n_lu.account_group_652211 +NEW account.group.template: l10n_lu.account_group_652212 +NEW account.group.template: l10n_lu.account_group_65222 +NEW account.group.template: l10n_lu.account_group_652221 +NEW account.group.template: l10n_lu.account_group_652222 +NEW account.group.template: l10n_lu.account_group_65223 +NEW account.group.template: l10n_lu.account_group_652231 +NEW account.group.template: l10n_lu.account_group_652232 +NEW account.group.template: l10n_lu.account_group_65224 +NEW account.group.template: l10n_lu.account_group_652241 +NEW account.group.template: l10n_lu.account_group_652242 +NEW account.group.template: l10n_lu.account_group_65225 +NEW account.group.template: l10n_lu.account_group_652251 +NEW account.group.template: l10n_lu.account_group_652252 +NEW account.group.template: l10n_lu.account_group_65226 +NEW account.group.template: l10n_lu.account_group_652261 +NEW account.group.template: l10n_lu.account_group_652262 +NEW account.group.template: l10n_lu.account_group_653 +NEW account.group.template: l10n_lu.account_group_6531 +NEW account.group.template: l10n_lu.account_group_65311 +NEW account.group.template: l10n_lu.account_group_65312 +NEW account.group.template: l10n_lu.account_group_65313 +NEW account.group.template: l10n_lu.account_group_65318 +NEW account.group.template: l10n_lu.account_group_6532 +NEW account.group.template: l10n_lu.account_group_654 +NEW account.group.template: l10n_lu.account_group_6541 +NEW account.group.template: l10n_lu.account_group_65411 +NEW account.group.template: l10n_lu.account_group_65412 +NEW account.group.template: l10n_lu.account_group_65413 +NEW account.group.template: l10n_lu.account_group_6542 +NEW account.group.template: l10n_lu.account_group_65421 +NEW account.group.template: l10n_lu.account_group_65422 +NEW account.group.template: l10n_lu.account_group_65423 +NEW account.group.template: l10n_lu.account_group_65428 +NEW account.group.template: l10n_lu.account_group_655 +NEW account.group.template: l10n_lu.account_group_6551 +NEW account.group.template: l10n_lu.account_group_65511 +NEW account.group.template: l10n_lu.account_group_65512 +NEW account.group.template: l10n_lu.account_group_6552 +NEW account.group.template: l10n_lu.account_group_65521 +NEW account.group.template: l10n_lu.account_group_65522 +NEW account.group.template: l10n_lu.account_group_65523 +NEW account.group.template: l10n_lu.account_group_655231 +NEW account.group.template: l10n_lu.account_group_655232 +NEW account.group.template: l10n_lu.account_group_6553 +NEW account.group.template: l10n_lu.account_group_6554 +NEW account.group.template: l10n_lu.account_group_65541 +NEW account.group.template: l10n_lu.account_group_65542 +NEW account.group.template: l10n_lu.account_group_6555 +NEW account.group.template: l10n_lu.account_group_65551 +NEW account.group.template: l10n_lu.account_group_65552 +NEW account.group.template: l10n_lu.account_group_6556 +NEW account.group.template: l10n_lu.account_group_65561 +NEW account.group.template: l10n_lu.account_group_65562 +NEW account.group.template: l10n_lu.account_group_6558 +NEW account.group.template: l10n_lu.account_group_65581 +NEW account.group.template: l10n_lu.account_group_65582 +NEW account.group.template: l10n_lu.account_group_656 +NEW account.group.template: l10n_lu.account_group_6561 +NEW account.group.template: l10n_lu.account_group_6562 +NEW account.group.template: l10n_lu.account_group_657 +NEW account.group.template: l10n_lu.account_group_658 +NEW account.group.template: l10n_lu.account_group_6581 +NEW account.group.template: l10n_lu.account_group_6582 +NEW account.group.template: l10n_lu.account_group_659 +NEW account.group.template: l10n_lu.account_group_6591 +NEW account.group.template: l10n_lu.account_group_6592 +NEW account.group.template: l10n_lu.account_group_67 +NEW account.group.template: l10n_lu.account_group_671 +NEW account.group.template: l10n_lu.account_group_6711 +NEW account.group.template: l10n_lu.account_group_6712 +NEW account.group.template: l10n_lu.account_group_672 +NEW account.group.template: l10n_lu.account_group_6721 +NEW account.group.template: l10n_lu.account_group_6722 +NEW account.group.template: l10n_lu.account_group_673 +NEW account.group.template: l10n_lu.account_group_6731 +NEW account.group.template: l10n_lu.account_group_6732 +NEW account.group.template: l10n_lu.account_group_67321 +NEW account.group.template: l10n_lu.account_group_67322 +NEW account.group.template: l10n_lu.account_group_6733 +NEW account.group.template: l10n_lu.account_group_6738 +NEW account.group.template: l10n_lu.account_group_679 +NEW account.group.template: l10n_lu.account_group_68 +NEW account.group.template: l10n_lu.account_group_681 +NEW account.group.template: l10n_lu.account_group_6811 +NEW account.group.template: l10n_lu.account_group_6812 +NEW account.group.template: l10n_lu.account_group_682 +NEW account.group.template: l10n_lu.account_group_683 +NEW account.group.template: l10n_lu.account_group_688 +NEW account.group.template: l10n_lu.account_group_7 +NEW account.group.template: l10n_lu.account_group_70 +NEW account.group.template: l10n_lu.account_group_702 +NEW account.group.template: l10n_lu.account_group_7021 +NEW account.group.template: l10n_lu.account_group_7022 +NEW account.group.template: l10n_lu.account_group_7023 +NEW account.group.template: l10n_lu.account_group_7029 +NEW account.group.template: l10n_lu.account_group_703 +NEW account.group.template: l10n_lu.account_group_7031 +NEW account.group.template: l10n_lu.account_group_70311 +NEW account.group.template: l10n_lu.account_group_70312 +NEW account.group.template: l10n_lu.account_group_70313 +NEW account.group.template: l10n_lu.account_group_70314 +NEW account.group.template: l10n_lu.account_group_70315 +NEW account.group.template: l10n_lu.account_group_703151 +NEW account.group.template: l10n_lu.account_group_703158 +NEW account.group.template: l10n_lu.account_group_7032 +NEW account.group.template: l10n_lu.account_group_70321 +NEW account.group.template: l10n_lu.account_group_70322 +NEW account.group.template: l10n_lu.account_group_7033 +NEW account.group.template: l10n_lu.account_group_7039 +NEW account.group.template: l10n_lu.account_group_704 +NEW account.group.template: l10n_lu.account_group_705 +NEW account.group.template: l10n_lu.account_group_706 +NEW account.group.template: l10n_lu.account_group_7061 +NEW account.group.template: l10n_lu.account_group_7062 +NEW account.group.template: l10n_lu.account_group_7063 +NEW account.group.template: l10n_lu.account_group_708 +NEW account.group.template: l10n_lu.account_group_709 +NEW account.group.template: l10n_lu.account_group_7092 +NEW account.group.template: l10n_lu.account_group_7093 +NEW account.group.template: l10n_lu.account_group_7094 +NEW account.group.template: l10n_lu.account_group_7095 +NEW account.group.template: l10n_lu.account_group_7096 +NEW account.group.template: l10n_lu.account_group_7098 +NEW account.group.template: l10n_lu.account_group_7099 +NEW account.group.template: l10n_lu.account_group_71 +NEW account.group.template: l10n_lu.account_group_711 +NEW account.group.template: l10n_lu.account_group_7111 +NEW account.group.template: l10n_lu.account_group_7112 +NEW account.group.template: l10n_lu.account_group_7113 +NEW account.group.template: l10n_lu.account_group_7114 +NEW account.group.template: l10n_lu.account_group_712 +NEW account.group.template: l10n_lu.account_group_7121 +NEW account.group.template: l10n_lu.account_group_7122 +NEW account.group.template: l10n_lu.account_group_7123 +NEW account.group.template: l10n_lu.account_group_72 +NEW account.group.template: l10n_lu.account_group_721 +NEW account.group.template: l10n_lu.account_group_7211 +NEW account.group.template: l10n_lu.account_group_7212 +NEW account.group.template: l10n_lu.account_group_72121 +NEW account.group.template: l10n_lu.account_group_72122 +NEW account.group.template: l10n_lu.account_group_72123 +NEW account.group.template: l10n_lu.account_group_72124 +NEW account.group.template: l10n_lu.account_group_72125 +NEW account.group.template: l10n_lu.account_group_721251 +NEW account.group.template: l10n_lu.account_group_721258 +NEW account.group.template: l10n_lu.account_group_722 +NEW account.group.template: l10n_lu.account_group_7221 +NEW account.group.template: l10n_lu.account_group_7222 +NEW account.group.template: l10n_lu.account_group_7223 +NEW account.group.template: l10n_lu.account_group_73 +NEW account.group.template: l10n_lu.account_group_732 +NEW account.group.template: l10n_lu.account_group_7321 +NEW account.group.template: l10n_lu.account_group_7322 +NEW account.group.template: l10n_lu.account_group_7324 +NEW account.group.template: l10n_lu.account_group_733 +NEW account.group.template: l10n_lu.account_group_7331 +NEW account.group.template: l10n_lu.account_group_73311 +NEW account.group.template: l10n_lu.account_group_73312 +NEW account.group.template: l10n_lu.account_group_73313 +NEW account.group.template: l10n_lu.account_group_73314 +NEW account.group.template: l10n_lu.account_group_73315 +NEW account.group.template: l10n_lu.account_group_7332 +NEW account.group.template: l10n_lu.account_group_7333 +NEW account.group.template: l10n_lu.account_group_7334 +NEW account.group.template: l10n_lu.account_group_734 +NEW account.group.template: l10n_lu.account_group_7341 +NEW account.group.template: l10n_lu.account_group_7342 +NEW account.group.template: l10n_lu.account_group_7343 +NEW account.group.template: l10n_lu.account_group_7344 +NEW account.group.template: l10n_lu.account_group_7345 +NEW account.group.template: l10n_lu.account_group_735 +NEW account.group.template: l10n_lu.account_group_7351 +NEW account.group.template: l10n_lu.account_group_7352 +NEW account.group.template: l10n_lu.account_group_7353 +NEW account.group.template: l10n_lu.account_group_7354 +NEW account.group.template: l10n_lu.account_group_74 +NEW account.group.template: l10n_lu.account_group_741 +NEW account.group.template: l10n_lu.account_group_7411 +NEW account.group.template: l10n_lu.account_group_7412 +NEW account.group.template: l10n_lu.account_group_7413 +NEW account.group.template: l10n_lu.account_group_7414 +NEW account.group.template: l10n_lu.account_group_7415 +NEW account.group.template: l10n_lu.account_group_74151 +NEW account.group.template: l10n_lu.account_group_74158 +NEW account.group.template: l10n_lu.account_group_742 +NEW account.group.template: l10n_lu.account_group_7421 +NEW account.group.template: l10n_lu.account_group_7422 +NEW account.group.template: l10n_lu.account_group_743 +NEW account.group.template: l10n_lu.account_group_744 +NEW account.group.template: l10n_lu.account_group_7441 +NEW account.group.template: l10n_lu.account_group_74411 +NEW account.group.template: l10n_lu.account_group_74412 +NEW account.group.template: l10n_lu.account_group_7442 +NEW account.group.template: l10n_lu.account_group_74421 +NEW account.group.template: l10n_lu.account_group_74422 +NEW account.group.template: l10n_lu.account_group_745 +NEW account.group.template: l10n_lu.account_group_7451 +NEW account.group.template: l10n_lu.account_group_7452 +NEW account.group.template: l10n_lu.account_group_7453 +NEW account.group.template: l10n_lu.account_group_7454 +NEW account.group.template: l10n_lu.account_group_7458 +NEW account.group.template: l10n_lu.account_group_746 +NEW account.group.template: l10n_lu.account_group_747 +NEW account.group.template: l10n_lu.account_group_7471 +NEW account.group.template: l10n_lu.account_group_7472 +NEW account.group.template: l10n_lu.account_group_7473 +NEW account.group.template: l10n_lu.account_group_748 +NEW account.group.template: l10n_lu.account_group_7481 +NEW account.group.template: l10n_lu.account_group_7488 +NEW account.group.template: l10n_lu.account_group_749 +NEW account.group.template: l10n_lu.account_group_7491 +NEW account.group.template: l10n_lu.account_group_7492 +NEW account.group.template: l10n_lu.account_group_75 +NEW account.group.template: l10n_lu.account_group_751 +NEW account.group.template: l10n_lu.account_group_7511 +NEW account.group.template: l10n_lu.account_group_75111 +NEW account.group.template: l10n_lu.account_group_75112 +NEW account.group.template: l10n_lu.account_group_75113 +NEW account.group.template: l10n_lu.account_group_75114 +NEW account.group.template: l10n_lu.account_group_75115 +NEW account.group.template: l10n_lu.account_group_75116 +NEW account.group.template: l10n_lu.account_group_7512 +NEW account.group.template: l10n_lu.account_group_752 +NEW account.group.template: l10n_lu.account_group_7521 +NEW account.group.template: l10n_lu.account_group_75211 +NEW account.group.template: l10n_lu.account_group_75212 +NEW account.group.template: l10n_lu.account_group_75213 +NEW account.group.template: l10n_lu.account_group_75214 +NEW account.group.template: l10n_lu.account_group_75215 +NEW account.group.template: l10n_lu.account_group_75216 +NEW account.group.template: l10n_lu.account_group_7522 +NEW account.group.template: l10n_lu.account_group_75221 +NEW account.group.template: l10n_lu.account_group_752211 +NEW account.group.template: l10n_lu.account_group_752212 +NEW account.group.template: l10n_lu.account_group_75222 +NEW account.group.template: l10n_lu.account_group_752221 +NEW account.group.template: l10n_lu.account_group_752222 +NEW account.group.template: l10n_lu.account_group_75223 +NEW account.group.template: l10n_lu.account_group_752231 +NEW account.group.template: l10n_lu.account_group_752232 +NEW account.group.template: l10n_lu.account_group_75224 +NEW account.group.template: l10n_lu.account_group_752241 +NEW account.group.template: l10n_lu.account_group_752242 +NEW account.group.template: l10n_lu.account_group_75225 +NEW account.group.template: l10n_lu.account_group_752251 +NEW account.group.template: l10n_lu.account_group_752252 +NEW account.group.template: l10n_lu.account_group_75226 +NEW account.group.template: l10n_lu.account_group_752261 +NEW account.group.template: l10n_lu.account_group_752262 +NEW account.group.template: l10n_lu.account_group_753 +NEW account.group.template: l10n_lu.account_group_7531 +NEW account.group.template: l10n_lu.account_group_75311 +NEW account.group.template: l10n_lu.account_group_75312 +NEW account.group.template: l10n_lu.account_group_75313 +NEW account.group.template: l10n_lu.account_group_75318 +NEW account.group.template: l10n_lu.account_group_7532 +NEW account.group.template: l10n_lu.account_group_754 +NEW account.group.template: l10n_lu.account_group_7541 +NEW account.group.template: l10n_lu.account_group_75411 +NEW account.group.template: l10n_lu.account_group_75412 +NEW account.group.template: l10n_lu.account_group_75413 +NEW account.group.template: l10n_lu.account_group_7542 +NEW account.group.template: l10n_lu.account_group_75421 +NEW account.group.template: l10n_lu.account_group_75422 +NEW account.group.template: l10n_lu.account_group_75423 +NEW account.group.template: l10n_lu.account_group_75428 +NEW account.group.template: l10n_lu.account_group_7548 +NEW account.group.template: l10n_lu.account_group_75481 +NEW account.group.template: l10n_lu.account_group_75482 +NEW account.group.template: l10n_lu.account_group_75483 +NEW account.group.template: l10n_lu.account_group_75488 +NEW account.group.template: l10n_lu.account_group_755 +NEW account.group.template: l10n_lu.account_group_7552 +NEW account.group.template: l10n_lu.account_group_75521 +NEW account.group.template: l10n_lu.account_group_75523 +NEW account.group.template: l10n_lu.account_group_755231 +NEW account.group.template: l10n_lu.account_group_755232 +NEW account.group.template: l10n_lu.account_group_7553 +NEW account.group.template: l10n_lu.account_group_7554 +NEW account.group.template: l10n_lu.account_group_75541 +NEW account.group.template: l10n_lu.account_group_75542 +NEW account.group.template: l10n_lu.account_group_7555 +NEW account.group.template: l10n_lu.account_group_75551 +NEW account.group.template: l10n_lu.account_group_75552 +NEW account.group.template: l10n_lu.account_group_7556 +NEW account.group.template: l10n_lu.account_group_75561 +NEW account.group.template: l10n_lu.account_group_75562 +NEW account.group.template: l10n_lu.account_group_7558 +NEW account.group.template: l10n_lu.account_group_75581 +NEW account.group.template: l10n_lu.account_group_75582 +NEW account.group.template: l10n_lu.account_group_756 +NEW account.group.template: l10n_lu.account_group_7561 +NEW account.group.template: l10n_lu.account_group_7562 +NEW account.group.template: l10n_lu.account_group_757 +NEW account.group.template: l10n_lu.account_group_758 +NEW account.group.template: l10n_lu.account_group_7581 +NEW account.group.template: l10n_lu.account_group_7582 +NEW account.group.template: l10n_lu.account_group_759 +NEW account.group.template: l10n_lu.account_group_7591 +NEW account.group.template: l10n_lu.account_group_7592 +NEW account.group.template: l10n_lu.account_group_77 +NEW account.group.template: l10n_lu.account_group_771 +NEW account.group.template: l10n_lu.account_group_772 +NEW account.group.template: l10n_lu.account_group_773 +NEW account.group.template: l10n_lu.account_group_779 +NEW account.group.template: l10n_lu.account_group_78 +NEW account.group.template: l10n_lu.account_group_781 +NEW account.group.template: l10n_lu.account_group_782 +NEW account.group.template: l10n_lu.account_group_783 +NEW account.group.template: l10n_lu.account_group_788 +NEW account.reconcile.model.line.template: l10n_lu.bank_fees_line_template +NEW account.reconcile.model.line.template: l10n_lu.cash_discount_line_template +NEW account.tax.group: l10n_lu.tax_group_13 +NEW account.tax.group: l10n_lu.tax_group_16 +NEW account.tax.group: l10n_lu.tax_group_7 +NEW account.tax.report: l10n_lu.tax_report +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2a_base_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2a_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2a_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2a_tax_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2a_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2a_tax_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2b_base_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2b_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2b_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2b_tax_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2b_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2b_tax_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_1_base_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_1_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_1_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_1_tax_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_1_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_1_tax_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_2_base_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_2_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_2_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_2_tax_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_2_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2d_2_tax_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_1_a_base_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_1_a_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_1_a_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_1_a_tax_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_1_a_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_1_a_tax_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_2_base_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_2_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_2_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_2_tax_13 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_2_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_2_tax_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_3_base_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2e_3_tax_16 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2f_supply_goods_base_7 +NEW account.tax.report.line: l10n_lu.account_tax_report_line_2f_supply_goods_tax_7 +DEL account.tax.report.line: l10n_lu.account_tax_report_line_1a_vat_acc_scheme +DEL account.tax.report.line: l10n_lu.account_tax_report_line_2a_tax_0 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-EC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-EC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-EC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-ECP-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-ECP-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-ECP-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-IC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-IC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-IC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AB-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-EC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-EC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-EC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-IC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-IC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-IC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_AP-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_ATN_sale_16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-EC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-EC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-EC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-ECP-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-ECP-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-ECP-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-IC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-IC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-IC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FB-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-EC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-EC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-EC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-IC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-IC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-IC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_FP-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-EC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-EC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-EC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-ECP-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-ECP-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-ECP-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-IC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-IC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-IC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IB-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-EC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-EC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-EC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-IC-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-IC-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-IC-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_IP-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_VB-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_VB-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_VB-PA-7 +NEW account.tax.template: l10n_lu.lu_2015_tax_VP-PA-13 +NEW account.tax.template: l10n_lu.lu_2015_tax_VP-PA-16 +NEW account.tax.template: l10n_lu.lu_2015_tax_VP-PA-7 diff --git a/openupgrade_scripts/scripts/l10n_lu_peppol_id/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_lu_peppol_id/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..2502474289e2 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_lu_peppol_id/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,5 @@ +---Models in module 'l10n_lu_peppol_id'--- +---Fields in module 'l10n_lu_peppol_id'--- +l10n_lu_peppol_id / res.partner / l10n_lu_peppol_identifier (char): NEW +---XML records in module 'l10n_lu_peppol_id'--- +NEW ir.ui.view: l10n_lu_peppol_id.res_partner_form_inherit_l10n_lu_peppol_id diff --git a/openupgrade_scripts/scripts/l10n_ma/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_ma/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..dde5d86848c6 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_ma/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'l10n_ma'--- +---Fields in module 'l10n_ma'--- +---XML records in module 'l10n_ma'--- +NEW account.tax.report: l10n_ma.tax_report +# NOTHING TO DO: New features diff --git a/openupgrade_scripts/scripts/l10n_multilang/14.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_multilang/14.0.1.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..f6dbf7eb1077 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_multilang/14.0.1.1/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'l10n_multilang'--- +---Fields in module 'l10n_multilang'--- +---XML records in module 'l10n_multilang'--- +---nothing has changed in this module-- +NOTHING TO DO diff --git a/openupgrade_scripts/scripts/l10n_mx/14.0.2.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_mx/14.0.2.0/upgrade_analysis.txt index ae4cebda2e30..fe4bb42a58be 100644 --- a/openupgrade_scripts/scripts/l10n_mx/14.0.2.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_mx/14.0.2.0/upgrade_analysis.txt @@ -1,5 +1,5 @@ ---Models in module 'l10n_mx'--- ---Fields in module 'l10n_mx'--- -l10n_mx / account.tax / l10n_mx_tax_type (selection) : NEW selection_keys: ['Cuota', 'Exento', 'Tasa'], hasdefault -l10n_mx / account.tax.template / l10n_mx_tax_type (selection) : NEW selection_keys: ['Cuota', 'Exento', 'Tasa'], hasdefault +l10n_mx / account.tax / l10n_mx_tax_type (selection) : NEW selection_keys: ['Cuota', 'Exento', 'Tasa'], hasdefault: default +l10n_mx / account.tax.template / l10n_mx_tax_type (selection) : NEW selection_keys: ['Cuota', 'Exento', 'Tasa'], hasdefault: default ---XML records in module 'l10n_mx'--- diff --git a/openupgrade_scripts/scripts/l10n_pe/14.0.2.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_pe/14.0.2.0/upgrade_analysis.txt index c685ac9fcd88..3231a6d578d2 100644 --- a/openupgrade_scripts/scripts/l10n_pe/14.0.2.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_pe/14.0.2.0/upgrade_analysis.txt @@ -176,5 +176,6 @@ NEW account.group.template: l10n_pe.group85 NEW account.group.template: l10n_pe.group88 NEW account.group.template: l10n_pe.group89 NEW account.tax.template: l10n_pe.sale_tax_exp +NEW l10n_latam.identification.type: l10n_pe.it_CPP NEW l10n_latam.identification.type: l10n_pe.it_PTP NEW l10n_latam.identification.type: l10n_pe.it_SP diff --git a/openupgrade_scripts/scripts/l10n_ph/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_ph/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..7db5605c8305 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_ph/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,159 @@ +---Models in module 'l10n_ph'--- +new model l10n_ph_2307.wizard [transient] +---Fields in module 'l10n_ph'--- +l10n_ph / account.tax / l10n_ph_atc (char) : NEW +l10n_ph / account.tax.template / l10n_ph_atc (char) : NEW +l10n_ph / res.partner / branch_code (char) : NEW required, hasdefault: default +l10n_ph / res.partner / first_name (char) : NEW +l10n_ph / res.partner / last_name (char) : NEW +l10n_ph / res.partner / middle_name (char) : NEW +---XML records in module 'l10n_ph'--- +NEW account.account.template: l10n_ph.l10n_ph_100000 +NEW account.account.template: l10n_ph.l10n_ph_110000 +NEW account.account.template: l10n_ph.l10n_ph_110003 +NEW account.account.template: l10n_ph.l10n_ph_110100 +NEW account.account.template: l10n_ph.l10n_ph_110101 +NEW account.account.template: l10n_ph.l10n_ph_110102 +NEW account.account.template: l10n_ph.l10n_ph_110103 +NEW account.account.template: l10n_ph.l10n_ph_110104 +NEW account.account.template: l10n_ph.l10n_ph_110105 +NEW account.account.template: l10n_ph.l10n_ph_110106 +NEW account.account.template: l10n_ph.l10n_ph_110200 +NEW account.account.template: l10n_ph.l10n_ph_110201 +NEW account.account.template: l10n_ph.l10n_ph_110202 +NEW account.account.template: l10n_ph.l10n_ph_110203 +NEW account.account.template: l10n_ph.l10n_ph_110205 +NEW account.account.template: l10n_ph.l10n_ph_110206 +NEW account.account.template: l10n_ph.l10n_ph_110207 +NEW account.account.template: l10n_ph.l10n_ph_110300 +NEW account.account.template: l10n_ph.l10n_ph_110301 +NEW account.account.template: l10n_ph.l10n_ph_110302 +NEW account.account.template: l10n_ph.l10n_ph_110303 +NEW account.account.template: l10n_ph.l10n_ph_110304 +NEW account.account.template: l10n_ph.l10n_ph_110400 +NEW account.account.template: l10n_ph.l10n_ph_110500 +NEW account.account.template: l10n_ph.l10n_ph_110501 +NEW account.account.template: l10n_ph.l10n_ph_110502 +NEW account.account.template: l10n_ph.l10n_ph_110503 +NEW account.account.template: l10n_ph.l10n_ph_110504 +NEW account.account.template: l10n_ph.l10n_ph_110505 +NEW account.account.template: l10n_ph.l10n_ph_110506 +NEW account.account.template: l10n_ph.l10n_ph_110507 +NEW account.account.template: l10n_ph.l10n_ph_200000 +NEW account.account.template: l10n_ph.l10n_ph_200200 +NEW account.account.template: l10n_ph.l10n_ph_200201 +NEW account.account.template: l10n_ph.l10n_ph_200202 +NEW account.account.template: l10n_ph.l10n_ph_200300 +NEW account.account.template: l10n_ph.l10n_ph_200301 +NEW account.account.template: l10n_ph.l10n_ph_200302 +NEW account.account.template: l10n_ph.l10n_ph_200303 +NEW account.account.template: l10n_ph.l10n_ph_200304 +NEW account.account.template: l10n_ph.l10n_ph_200305 +NEW account.account.template: l10n_ph.l10n_ph_200306 +NEW account.account.template: l10n_ph.l10n_ph_200307 +NEW account.account.template: l10n_ph.l10n_ph_200308 +NEW account.account.template: l10n_ph.l10n_ph_200400 +NEW account.account.template: l10n_ph.l10n_ph_300000 +NEW account.account.template: l10n_ph.l10n_ph_300001 +NEW account.account.template: l10n_ph.l10n_ph_300002 +NEW account.account.template: l10n_ph.l10n_ph_430400 +NEW account.account.template: l10n_ph.l10n_ph_510000 +NEW account.account.template: l10n_ph.l10n_ph_511100 +NEW account.account.template: l10n_ph.l10n_ph_511600 +NEW account.account.template: l10n_ph.l10n_ph_511700 +NEW account.account.template: l10n_ph.l10n_ph_511800 +NEW account.account.template: l10n_ph.l10n_ph_620000 +NEW account.account.template: l10n_ph.l10n_ph_620001 +NEW account.account.template: l10n_ph.l10n_ph_620100 +NEW account.account.template: l10n_ph.l10n_ph_621000 +NEW account.account.template: l10n_ph.l10n_ph_622000 +NEW account.account.template: l10n_ph.l10n_ph_623000 +NEW account.account.template: l10n_ph.l10n_ph_623001 +NEW account.account.template: l10n_ph.l10n_ph_623002 +NEW account.account.template: l10n_ph.l10n_ph_623003 +NEW account.account.template: l10n_ph.l10n_ph_623004 +NEW account.account.template: l10n_ph.l10n_ph_623005 +NEW account.account.template: l10n_ph.l10n_ph_623006 +NEW account.account.template: l10n_ph.l10n_ph_623007 +NEW account.account.template: l10n_ph.l10n_ph_623008 +NEW account.account.template: l10n_ph.l10n_ph_623009 +NEW account.account.template: l10n_ph.l10n_ph_623014 +NEW account.account.template: l10n_ph.l10n_ph_623015 +NEW account.account.template: l10n_ph.l10n_ph_624000 +NEW account.account.template: l10n_ph.l10n_ph_625000 +NEW account.account.template: l10n_ph.l10n_ph_626000 +NEW account.account.template: l10n_ph.l10n_ph_626001 +NEW account.account.template: l10n_ph.l10n_ph_627000 +NEW account.account.template: l10n_ph.l10n_ph_628000 +NEW account.account.template: l10n_ph.l10n_ph_629000 +NEW account.account.template: l10n_ph.l10n_ph_632000 +NEW account.account.template: l10n_ph.l10n_ph_633000 +NEW account.account.template: l10n_ph.l10n_ph_634000 +NEW account.account.template: l10n_ph.l10n_ph_634001 +NEW account.account.template: l10n_ph.l10n_ph_635000 +NEW account.account.template: l10n_ph.l10n_ph_635001 +NEW account.account.template: l10n_ph.l10n_ph_635002 +NEW account.account.template: l10n_ph.l10n_ph_635003 +NEW account.account.template: l10n_ph.l10n_ph_710100 +NEW account.account.template: l10n_ph.l10n_ph_710101 +NEW account.account.template: l10n_ph.l10n_ph_710102 +NEW account.account.template: l10n_ph.l10n_ph_710103 +NEW account.account.template: l10n_ph.l10n_ph_710200 +NEW account.account.template: l10n_ph.l10n_ph_710201 +NEW account.account.template: l10n_ph.l10n_ph_710300 +NEW account.account.template: l10n_ph.l10n_ph_710301 +NEW account.account.template: l10n_ph.l10n_ph_710400 +NEW account.account.template: l10n_ph.l10n_ph_710500 +NEW account.account.template: l10n_ph.l10n_ph_999999 +NEW account.chart.template: l10n_ph.l10n_ph_chart_template +NEW account.fiscal.position.tax.template: l10n_ph.l10n_ph_fiscal_position_tax_purchase_vat_exempt_vat_registered +NEW account.fiscal.position.tax.template: l10n_ph.l10n_ph_fiscal_position_tax_purchase_vat_registered_vat_exempt +NEW account.fiscal.position.tax.template: l10n_ph.l10n_ph_fiscal_position_tax_sale_vat_exempt_vat_registered +NEW account.fiscal.position.tax.template: l10n_ph.l10n_ph_fiscal_position_tax_sale_vat_registered_vat_exempt +NEW account.fiscal.position.template: l10n_ph.l10n_ph_fiscal_position_vat_exempt +NEW account.fiscal.position.template: l10n_ph.l10n_ph_fiscal_position_vat_registered +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_vat_12 (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_vat_exempt (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_wht_1 (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_wht_10 (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_wht_15 (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_wht_2 (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_wht_5 (noupdate) +NEW account.tax.group: l10n_ph.l10n_ph_tax_group_wht_p5 (noupdate) +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_vat_12 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_vat_exempt +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc010 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc011 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc100 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc120 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc139 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc140 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc157 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc158_1 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc158_p5 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc160 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc515 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc516 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wc640 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi010 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi011 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi100 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi120 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi139 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi140 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi157 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi158_1 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi158_p5 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi160 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi515 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi516 +NEW account.tax.template: l10n_ph.l10n_ph_tax_purchase_wi640 +NEW account.tax.template: l10n_ph.l10n_ph_tax_sale_vat_12 +NEW account.tax.template: l10n_ph.l10n_ph_tax_sale_vat_exempt +NEW ir.actions.act_window: l10n_ph.view_l10n_ph_2307_wizard_act_window +NEW ir.actions.server: l10n_ph.action_account_move_bir_2307 +NEW ir.actions.server: l10n_ph.action_account_payment_bir_2307 +NEW ir.model.access: l10n_ph.generate_2307_wizard +NEW ir.ui.view: l10n_ph.l10n_ph_2307_wizard_view_form +NEW ir.ui.view: l10n_ph.view_partner_form +NEW ir.ui.view: l10n_ph.view_tax_form diff --git a/openupgrade_scripts/scripts/l10n_pl/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_pl/14.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..c213038b5537 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_pl/14.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,21 @@ +---Models in module 'l10n_pl'--- +---Fields in module 'l10n_pl'--- +---XML records in module 'l10n_pl'--- +NEW account.tax.report: l10n_pl.tax_report +NEW res.country.state: l10n_pl.state_pl_ds +NEW res.country.state: l10n_pl.state_pl_kp +NEW res.country.state: l10n_pl.state_pl_lb +NEW res.country.state: l10n_pl.state_pl_ld +NEW res.country.state: l10n_pl.state_pl_ls +NEW res.country.state: l10n_pl.state_pl_mp +NEW res.country.state: l10n_pl.state_pl_mz +NEW res.country.state: l10n_pl.state_pl_op +NEW res.country.state: l10n_pl.state_pl_pk +NEW res.country.state: l10n_pl.state_pl_pl +NEW res.country.state: l10n_pl.state_pl_pm +NEW res.country.state: l10n_pl.state_pl_sk +NEW res.country.state: l10n_pl.state_pl_sl +NEW res.country.state: l10n_pl.state_pl_wm +NEW res.country.state: l10n_pl.state_pl_wp +NEW res.country.state: l10n_pl.state_pl_zp +# Nothing to do diff --git a/openupgrade_scripts/scripts/l10n_sa_invoice/14.0.1.0.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_sa_invoice/14.0.1.0.0/upgrade_analysis.txt index 0042af788eb5..b1f0a755a21d 100644 --- a/openupgrade_scripts/scripts/l10n_sa_invoice/14.0.1.0.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/l10n_sa_invoice/14.0.1.0.0/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'l10n_sa_invoice'--- ---Fields in module 'l10n_sa_invoice'--- l10n_sa_invoice / account.move / l10n_sa_confirmation_datetime (datetime): NEW -l10n_sa_invoice / account.move / l10n_sa_delivery_date (date) : NEW hasdefault +l10n_sa_invoice / account.move / l10n_sa_delivery_date (date) : NEW ---XML records in module 'l10n_sa_invoice'--- NEW ir.ui.view: l10n_sa_invoice.arabic_english_invoice NEW ir.ui.view: l10n_sa_invoice.external_layout_standard diff --git a/openupgrade_scripts/scripts/l10n_sg/14.0.2.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/l10n_sg/14.0.2.1/upgrade_analysis.txt new file mode 100644 index 000000000000..cac9b827e677 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_sg/14.0.2.1/upgrade_analysis.txt @@ -0,0 +1,16 @@ +---Models in module 'l10n_sg'--- +---Fields in module 'l10n_sg'--- +---XML records in module 'l10n_sg'--- +NEW account.tax.group: l10n_sg.tax_group_8 (noupdate) +NEW account.tax.report: l10n_sg.tax_report +NEW account.tax.template: l10n_sg.sg_purchase_tax_bl_8 +NEW account.tax.template: l10n_sg.sg_purchase_tax_im_8 +NEW account.tax.template: l10n_sg.sg_purchase_tax_me_08 +NEW account.tax.template: l10n_sg.sg_purchase_tax_tx8_8 +NEW account.tax.template: l10n_sg.sg_purchase_tax_txca_8 +NEW account.tax.template: l10n_sg.sg_purchase_tax_txe33_8 +NEW account.tax.template: l10n_sg.sg_purchase_tax_txn33_8 +NEW account.tax.template: l10n_sg.sg_purchase_tax_txre_8 +NEW account.tax.template: l10n_sg.sg_sale_tax_ds_8 +NEW account.tax.template: l10n_sg.sg_sale_tax_sr_8 +NEW account.tax.template: l10n_sg.sg_sale_tax_srca_c_8 diff --git a/openupgrade_scripts/scripts/lunch/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/lunch/14.0.1.0/noupdate_changes.xml index 1ff8ed024b94..7e5df5934465 100644 --- a/openupgrade_scripts/scripts/lunch/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/lunch/14.0.1.0/noupdate_changes.xml @@ -2,15 +2,18 @@ + [('company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids + [False])] - ['|', ('company_id', '=', False), ('company_id', 'in', company_ids), '|', ('category_id.company_id', '=', False), ('category_id.company_id', 'in', company_ids)] + [('company_id', 'in', company_ids + [False]), ('category_id.company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids + [False])] diff --git a/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis.txt index e2f8cb79733e..62196bb692ac 100644 --- a/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'lunch'--- obsolete model lunch.order.temp [transient] ---Fields in module 'lunch'--- -lunch / lunch.product.category / active (boolean) : NEW hasdefault +lunch / lunch.product.category / active (boolean) : NEW hasdefault: default lunch / lunch.supplier / company_id (many2one) : is now stored ---XML records in module 'lunch'--- NEW ir.rule: lunch.ir_rule_lunch_product_category_multi_company (noupdate) diff --git a/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis_work.txt index 7e33c6dd8c20..95a08e13db90 100644 --- a/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/lunch/14.0.1.0/upgrade_analysis_work.txt @@ -26,4 +26,3 @@ NEW ir.ui.view: lunch.lunch_product_category_view_search NEW ir.ui.view: lunch.lunch_product_report_view_tree DEL ir.ui.view: lunch.view_lunch_order_temp # NOTHING TO DO - diff --git a/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis.txt index c9033e8ae9b3..1209646318c4 100644 --- a/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis.txt @@ -8,7 +8,7 @@ new model mail.template.preview (renamed from email_template.preview) [transient mail / ir.ui.view / type (False) : selection_keys is now '['activity', 'calendar', 'form', 'gantt', 'graph', 'kanban', 'pivot', 'qweb', 'search', 'tree']' ('['activity', 'calendar', 'diagram', 'form', 'gantt', 'graph', 'kanban', 'pivot', 'qweb', 'search', 'tree']') mail / mail.activity / request_partner_id (many2one) : NEW relation: res.partner mail / mail.alias / alias_bounced_content (html) : NEW -mail / mail.channel / active (boolean) : NEW hasdefault +mail / mail.channel / active (boolean) : NEW hasdefault: default mail / mail.mail / description (char) : previously in module website_mail mail / mail.message / description (char) : previously in module website_mail mail / mail.message / is_internal (boolean) : NEW diff --git a/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt index 4c7e24f9c01a..989284f5d4da 100644 --- a/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt @@ -93,4 +93,4 @@ NEW mail.channel.partner: mail.channel_partner_general_channel_for_admin (noupda # NOTHING TO DO: New noupdate="1" records DEL ir.rule: mail.mail_followers_read_write_own (noupdate) -# DONE: post-migration: try to delete \ No newline at end of file +# DONE: post-migration: try to delete diff --git a/openupgrade_scripts/scripts/mail_bot_hr/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/mail_bot_hr/14.0.1.0/upgrade_analysis.txt index fe631bff4869..1b4836e5ea66 100644 --- a/openupgrade_scripts/scripts/mail_bot_hr/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/mail_bot_hr/14.0.1.0/upgrade_analysis.txt @@ -1,5 +1,6 @@ ---Models in module 'mail_bot_hr'--- ---Fields in module 'mail_bot_hr'--- ---XML records in module 'mail_bot_hr'--- +NEW ir.ui.view: mail_bot_hr.res_users_view_form_preferences NEW ir.ui.view: mail_bot_hr.res_users_view_form_profile NEW ir.ui.view: mail_bot_hr.res_users_view_form_simple_modif diff --git a/openupgrade_scripts/scripts/maintenance/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/maintenance/14.0.1.0/noupdate_changes.xml index 552264f9a761..f7429cdd41d2 100644 --- a/openupgrade_scripts/scripts/maintenance/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/maintenance/14.0.1.0/noupdate_changes.xml @@ -1,16 +1,23 @@ + + ['|', '|', ('owner_user_id', '=', user.id), ('message_partner_ids', 'in', [user.partner_id.id]), ('user_id.id', '=', user.id)] + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + diff --git a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/post-migration.py b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/post-migration.py new file mode 100644 index 000000000000..4cd383e6bd10 --- /dev/null +++ b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/post-migration.py @@ -0,0 +1,23 @@ +# Copyright 2023 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +def set_mailing_medium(env): + """The field column exists before migration so the new compute behavior won't be + triggered. We need to load the values as it's required in the view""" + medium_email = env.ref("utm.utm_medium_email").id + openupgrade.logged_query( + env.cr, + f""" + UPDATE mailing_mailing + SET medium_id = {medium_email} + WHERE mailing_type = 'mail' + AND medium_id IS NULL + """, + ) + + +@openupgrade.migrate() +def migrate(env, version): + set_mailing_medium(env) diff --git a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/pre-migration.py b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/pre-migration.py index 1aedf3d1ffaa..b6cf0b29d4d3 100644 --- a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/pre-migration.py +++ b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/pre-migration.py @@ -30,6 +30,30 @@ ] +def _assign_newsletter_xml_id(env): + """If you come from v12 or before, there was a mailing list called 'Newsletter' as + data. This list dissapeared in v13, so on OpenUpgrade v13, we removed the associated + XML-ID for preserving it. + As now in v14 it's being introduced again (although with other XML-ID), the unique + name contraint makes the migration to crash, so we need to detect if a mailing list + with such name exists, and give it in advance the required XML-ID for avoiding the + duplicity. + """ + env.cr.execute("SELECT id FROM mailing_list WHERE name='Newsletter'") + row = env.cr.fetchone() + if row: + openupgrade.logged_query( + env.cr, + """INSERT INTO ir_model_data + (module, name, res_id, model, noupdate) + VALUES + ('mass_mailing', 'mailing_list_data', %s, 'mailing.list', True) + """, + (row[0],), + ) + + @openupgrade.migrate() def migrate(env, version): openupgrade.rename_xmlids(env.cr, _xmlid_renames) + _assign_newsletter_xml_id(env) diff --git a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis.txt index b6031a8bbe83..11d6d0738ece 100644 --- a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis.txt @@ -5,15 +5,11 @@ mass_mailing / mailing.contact / website_message_ids (one2many): previo mass_mailing / mailing.mailing / copyvalue (char) : NEW mass_mailing / mailing.mailing / kpi_mail_required (boolean) : NEW mass_mailing / mailing.mailing / lang (char) : NEW -mass_mailing / mailing.mailing / mailing_domain (char) : now a function -mass_mailing / mailing.mailing / mailing_model_id (many2one) : now required, req_default: function -mass_mailing / mailing.mailing / medium_id (many2one) : now a function +mass_mailing / mailing.mailing / mailing_model_id (many2one) : now required mass_mailing / mailing.mailing / message_has_sms_error (boolean): previously in module sms mass_mailing / mailing.mailing / model_object_field (many2one) : NEW relation: ir.model.fields mass_mailing / mailing.mailing / null_value (char) : NEW mass_mailing / mailing.mailing / preview (char) : NEW -mass_mailing / mailing.mailing / reply_to (char) : now a function -mass_mailing / mailing.mailing / reply_to_mode (selection) : now a function mass_mailing / mailing.mailing / sub_model_object_field (many2one): NEW relation: ir.model.fields mass_mailing / mailing.mailing / sub_object (many2one) : NEW relation: ir.model mass_mailing / mailing.mailing / website_message_ids (one2many): previously in module portal diff --git a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis_work.txt index 1220a1463970..c54ba1b68663 100644 --- a/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/mass_mailing/14.0.2.2/upgrade_analysis_work.txt @@ -21,7 +21,11 @@ mass_mailing / mailing.mailing / preview (char) : NEW mass_mailing / mailing.mailing / mailing_domain (char) : now a function mass_mailing / mailing.mailing / mailing_model_id (many2one) : now required, req_default: function +# NOTHING TO DO: computed in load + mass_mailing / mailing.mailing / medium_id (many2one) : now a function +# DONE: post-migration: the field is required in the mailing view, so we fill it according to its default computed values if empty + mass_mailing / mailing.mailing / reply_to (char) : now a function mass_mailing / mailing.mailing / reply_to_mode (selection) : now a function # NOTHING TO DO: computed in load @@ -39,9 +43,11 @@ NEW ir.ui.view: mass_mailing.s_mail_block_header_view NEW ir.ui.view: mass_mailing.social_links NEW ir.ui.view: mass_mailing.view NEW mailing.contact: mass_mailing.mass_mailing_contact_0 (noupdate) -NEW mailing.list: mass_mailing.mailing_list_data (noupdate) # NOTHING TO DO +NEW mailing.list: mass_mailing.mailing_list_data (noupdate) +# DONE: pre-migration: Assign this XML-ID if there's a list with "Newsletter" name + NEW ir.ui.view: mass_mailing.mailing_contact_view_form NEW ir.ui.view: mass_mailing.mailing_contact_view_graph NEW ir.ui.view: mass_mailing.mailing_contact_view_kanban diff --git a/openupgrade_scripts/scripts/mass_mailing_crm/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mass_mailing_crm/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..ea8150ad9f5a --- /dev/null +++ b/openupgrade_scripts/scripts/mass_mailing_crm/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'mass_mailing_crm'--- +---Fields in module 'mass_mailing_crm'--- +---XML records in module 'mass_mailing_crm'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/mass_mailing_sale/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mass_mailing_sale/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..06fe7334f319 --- /dev/null +++ b/openupgrade_scripts/scripts/mass_mailing_sale/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'mass_mailing_sale'--- +---Fields in module 'mass_mailing_sale'--- +---XML records in module 'mass_mailing_sale'--- +---nothing has changed in this module-- +# Nothing to do diff --git a/openupgrade_scripts/scripts/mass_mailing_sms/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/mass_mailing_sms/14.0.1.0/upgrade_analysis.txt index 56f68d33fbe6..5b4506845d77 100644 --- a/openupgrade_scripts/scripts/mass_mailing_sms/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/mass_mailing_sms/14.0.1.0/upgrade_analysis.txt @@ -1,6 +1,5 @@ ---Models in module 'mass_mailing_sms'--- ---Fields in module 'mass_mailing_sms'--- -mass_mailing_sms / mailing.mailing / body_plaintext (text) : now a function mass_mailing_sms / mailing.trace / failure_type (False) : selection_keys is now '['BOUNCE', 'RECIPIENT', 'SMTP', 'UNKNOWN', 'sms_acc', 'sms_blacklist', 'sms_credit', 'sms_duplicate', 'sms_number_format', 'sms_number_missing', 'sms_server']' ('['BOUNCE', 'RECIPIENT', 'SMTP', 'UNKNOWN', 'sms_blacklist', 'sms_credit', 'sms_duplicate', 'sms_number_format', 'sms_number_missing', 'sms_server']') ---XML records in module 'mass_mailing_sms'--- NEW ir.actions.act_window.view: mass_mailing_sms.mailing_trace_report_action_sms_view_graph diff --git a/openupgrade_scripts/scripts/membership/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/membership/14.0.1.0/upgrade_analysis_work.txt index 73ce01032a7f..2a6fe44599bd 100644 --- a/openupgrade_scripts/scripts/membership/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/membership/14.0.1.0/upgrade_analysis_work.txt @@ -3,4 +3,4 @@ ---XML records in module 'membership'--- NEW ir.model.access: membership.access_membership_invoice NEW ir.ui.menu: membership.menu_membership_products -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/microsoft_calendar/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/microsoft_calendar/14.0.1.0/upgrade_analysis.txt index 7eaccd93a398..3a6fc32c15fc 100644 --- a/openupgrade_scripts/scripts/microsoft_calendar/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/microsoft_calendar/14.0.1.0/upgrade_analysis.txt @@ -4,9 +4,9 @@ new model microsoft.calendar.sync [abstract] ---Fields in module 'microsoft_calendar'--- microsoft_calendar / calendar.event / microsoft_id (char) : NEW microsoft_calendar / calendar.event / microsoft_recurrence_master_id (char): NEW -microsoft_calendar / calendar.event / need_sync_m (boolean) : NEW hasdefault +microsoft_calendar / calendar.event / need_sync_m (boolean) : NEW hasdefault: default microsoft_calendar / calendar.recurrence / microsoft_id (char) : NEW -microsoft_calendar / calendar.recurrence / need_sync_m (boolean) : NEW hasdefault +microsoft_calendar / calendar.recurrence / need_sync_m (boolean) : NEW hasdefault: default microsoft_calendar / res.users / microsoft_calendar_sync_token (char): NEW ---XML records in module 'microsoft_calendar'--- NEW ir.actions.act_window: microsoft_calendar.microsoft_calendar_reset_account_action diff --git a/openupgrade_scripts/scripts/microsoft_outlook/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/microsoft_outlook/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..ab174e5e9d22 --- /dev/null +++ b/openupgrade_scripts/scripts/microsoft_outlook/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,4 @@ +---Models in module 'microsoft_outlook'--- +---Fields in module 'microsoft_outlook'--- +---XML records in module 'microsoft_outlook'--- +---nothing has changed in this module-- diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml b/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml index a0c7c162ccea..8f8afec3400a 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml @@ -1,30 +1,40 @@ - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - - - - + [('company_id', 'in', company_ids + [False])] + + - + [('company_id', 'in', company_ids + [False])] + - - + - + + --> - - - - + [('company_id', 'in', company_ids + [False])] + + + + + + {} diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py b/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py index 9e1d912808fb..a622eae1ecb5 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py @@ -42,15 +42,52 @@ def map_stock_move_line_lot_produced_ids(env): def map_mrp_production_state_planned(env): - # post-migration: map 'planned' to 'confirmed'/'progress'/'done' env["mrp.production"].search([("state", "=", "planned")])._compute_state() +def generate_workorders_for_draft_orders(env): + """Recreate workorders for draft production orders, as in v13, this is only done + later when planning production. + """ + env.cr.execute( + "SELECT id, routing_id FROM mrp_production " + "WHERE state = 'draft' AND routing_id IS NOT NULL" + ) + for production_id, routing_id in env.cr.fetchall(): + production = env["mrp.production"].browse(production_id) + workorders_values = [] + env.cr.execute( + """ + SELECT mrw.id, mrw.name, mrw.workcenter_id + FROM mrp_routing_workcenter mrw + WHERE mrw.routing_id = %s AND mrw.bom_id = %s + """, + (routing_id, production.bom_id.id), + ) + # TODO: If there are phantom BoMs with other routings, it won't be covered + for operation_id, operation_name, workcenter_id in env.cr.fetchall(): + workorders_values += [ + { + "name": operation_name, + "production_id": production_id, + "workcenter_id": workcenter_id, + "product_uom_id": production.product_uom_id.id, + "operation_id": operation_id, + "state": "pending", + "consumption": production.consumption, + } + ] + workorders = production.workorder_ids.create(workorders_values) + for workorder in workorders: + workorder.duration_expected = workorder._get_duration_expected() + + @openupgrade.migrate() def migrate(env, version): merge_priorities(env) map_stock_move_line_lot_produced_ids(env) map_mrp_production_state_planned(env) + generate_workorders_for_draft_orders(env) openupgrade.load_data(env.cr, "mrp", "14.0.2.0/noupdate_changes.xml") openupgrade.delete_records_safely_by_xml_id( env, ["mrp.mrp_routing_rule", "mrp.sequence_mrp_route"] diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py b/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py index e2f42d3f7c03..b13948247770 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py @@ -10,6 +10,32 @@ } +def switch_flexible_consumption_to_warning(env): + """For benefiting from this new feature.""" + openupgrade.logged_query( + env.cr, + "UPDATE mrp_bom SET consumption = 'warning' WHERE consumption='flexible'", + ) + openupgrade.logged_query( + env.cr, + "UPDATE mrp_workorder SET consumption = 'warning' WHERE consumption='flexible'", + ) + + +def fill_mrp_production__consumption(env): + openupgrade.logged_query( + env.cr, "ALTER TABLE mrp_production ADD consumption VARCHAR" + ) + openupgrade.logged_query( + env.cr, + """UPDATE mrp_production mp + SET consumption = mb.consumption + FROM mrp_bom mb + WHERE mb.id = mp.bom_id + """, + ) + + def fill_mrp_routing_workcenter_bom_id(env): openupgrade.logged_query( env.cr, @@ -104,4 +130,6 @@ def fill_mrp_routing_workcenter_bom_id(env): @openupgrade.migrate() def migrate(env, version): openupgrade.copy_columns(env.cr, _column_copies) + switch_flexible_consumption_to_warning(env) + fill_mrp_production__consumption(env) fill_mrp_routing_workcenter_bom_id(env) diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis.txt index 72db58a06484..5fab92c2e7c8 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis.txt @@ -12,7 +12,7 @@ new model mrp.immediate.production.line [transient] new model mrp.production.backorder [transient] new model mrp.production.backorder.line [transient] ---Fields in module 'mrp'--- -mrp / mrp.bom / consumption (selection) : now required, req_default: function +mrp / mrp.bom / consumption (selection) : now required mrp / mrp.bom / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') mrp / mrp.bom / operation_ids (one2many) : NEW relation: mrp.routing.workcenter mrp / mrp.bom / routing_id (many2one) : DEL relation: mrp.routing @@ -23,8 +23,8 @@ mrp / mrp.document / theme_template_id (many2one) : previo mrp / mrp.document / website_id (many2one) : previously in module website mrp / mrp.document / website_url (char) : previously in module website mrp / mrp.production / _order : _order is now 'priority desc, date_planned_start asc,id' ('date_planned_start asc,id') -mrp / mrp.production / backorder_sequence (integer) : NEW hasdefault -mrp / mrp.production / consumption (selection) : NEW required, selection_keys: ['flexible', 'strict', 'warning'], req_default: function, hasdefault +mrp / mrp.production / backorder_sequence (integer) : NEW hasdefault: default +mrp / mrp.production / consumption (selection) : NEW required, selection_keys: ['flexible', 'strict', 'warning'] mrp / mrp.production / date_deadline (datetime) : now a function mrp / mrp.production / date_start_wo (datetime) : DEL mrp / mrp.production / lot_producing_id (many2one) : NEW relation: stock.production.lot @@ -44,7 +44,7 @@ mrp / mrp.routing / company_id (many2one) : DEL re mrp / mrp.routing / name (char) : DEL required mrp / mrp.routing / note (text) : DEL mrp / mrp.routing / operation_ids (one2many) : DEL relation: mrp.routing.workcenter -mrp / mrp.routing.workcenter / batch (selection) : DEL required, selection_keys: ['no', 'yes'], req_default: function +mrp / mrp.routing.workcenter / batch (selection) : DEL required, selection_keys: ['no', 'yes'] mrp / mrp.routing.workcenter / batch_size (float) : DEL mrp / mrp.routing.workcenter / bom_id (many2one) : NEW relation: mrp.bom mrp / mrp.routing.workcenter / company_id (many2one) : not related anymore @@ -119,6 +119,7 @@ NEW ir.ui.view: mrp.view_immediate_production NEW ir.ui.view: mrp.view_mrp_consumption_warning_form NEW ir.ui.view: mrp.view_mrp_document_form NEW ir.ui.view: mrp.view_mrp_production_backorder_form +NEW ir.ui.view: mrp.view_stock_move_line_operation_tree_finished NEW ir.ui.view: mrp.view_stock_move_operations_finished NEW ir.ui.view: mrp.view_stock_move_operations_raw NEW ir.ui.view: mrp.view_warehouse_orderpoint_tree_editable_inherited_purchase diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt index 74b9e4c6d56f..3d6e0bc5524f 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt @@ -11,7 +11,6 @@ new model mrp.production.backorder [transient] new model mrp.production.backorder.line [transient] # NOTHING TO DO: abstract + transient models -obsolete model mrp.routing obsolete model mrp.workorder.line # NOTHING TO DO: obsolete models @@ -24,24 +23,28 @@ mrp / mrp.document / website_url (char) : previo mrp / mrp.bom / consumption (selection) : now required, req_default: function mrp / mrp.bom / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') -# NOTHING TO DO: new default value 'warning' +mrp / mrp.workorder / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') +# DONE: pre-migration: Switch 'flexible' to 'warning' for benefiting from this new feature mrp / mrp.production / consumption (selection) : NEW required, selection_keys: ['flexible', 'strict', 'warning'], req_default: function, hasdefault -mrp / mrp.workorder / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') -# NOTHING TO DO: new features +# DONE: pre-migration: Init the field with its related BoM value +obsolete model mrp.routing mrp / mrp.bom / operation_ids (one2many) : NEW relation: mrp.routing.workcenter mrp / mrp.routing / operation_ids (one2many) : DEL relation: mrp.routing.workcenter mrp / mrp.routing.workcenter / bom_id (many2one) : NEW relation: mrp.bom mrp / mrp.routing.workcenter / routing_id (many2one) : DEL relation: mrp.routing, required -# DONE: pre-migration: duplicate mrp.routing.workcenter records and fill bom_id - mrp / mrp.bom / routing_id (many2one) : DEL relation: mrp.routing +# DONE: pre-migration: duplicate mrp.routing.workcenter records per assigned BoM, filling bom_id +# TODO: There can be mrp.routing without assigned BoMs that will be in a limbo after this migration. This will be highlighted through mrp.routing.workcenter having nulls in `bom_id` field. One possible strategy is to create fake BoMs for that routings with a wildcard product. + mrp / mrp.bom.byproduct / routing_id (many2one) : DEL relation: mrp.routing mrp / mrp.bom.line / routing_id (many2one) : DEL relation: mrp.routing -mrp / mrp.production / routing_id (many2one) : DEL relation: mrp.routing # NOTHING TO DO: mrp.routing model is obsolete +mrp / mrp.production / routing_id (many2one) : DEL relation: mrp.routing +# DONE: post-migration: Populate workorders for draft production orders from old routing + mrp / mrp.production / _order : _order is now 'priority desc, date_planned_start asc,id' ('date_planned_start asc,id') # NOTHING TO DO @@ -72,7 +75,7 @@ mrp / mrp.production / propagate_date_minimum_delta (integer) # NOTHING TO DO: not used anymore mrp / mrp.production / state (selection) : selection_keys is now '['cancel', 'confirmed', 'done', 'draft', 'progress', 'to_close']' ('['cancel', 'confirmed', 'done', 'draft', 'planned', 'progress', 'to_close']') -TODO: post-migration: map 'planned' to 'confirmed'/'progress'/'done' depending of some conditions +DONE: post-migration: map 'planned' to 'confirmed'/'progress'/'done' using _compute_state method mrp / mrp.routing / active (boolean) : DEL mrp / mrp.routing / code (char) : DEL @@ -117,7 +120,7 @@ mrp / mrp.workorder.line / qty_reserved (float) : DEL mrp / mrp.workorder.line / qty_to_consume (float) : DEL mrp / mrp.workorder.line / raw_workorder_id (many2one) : DEL relation: mrp.workorder mrp / mrp.workorder / finished_workorder_line_ids (one2many): DEL relation: mrp.workorder.line -# NOTHING TO DO: obsolete model +# TODO: Not clear if there should be any conversion mrp / procurement.group / mrp_production_ids (one2many) : NEW relation: mrp.production # NOTHING TO DO: one2many diff --git a/openupgrade_scripts/scripts/mrp_account/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mrp_account/14.0.1.0/upgrade_analysis_work.txt index 27ad657ed3d8..dc05b0045bab 100644 --- a/openupgrade_scripts/scripts/mrp_account/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/mrp_account/14.0.1.0/upgrade_analysis_work.txt @@ -3,4 +3,4 @@ ---XML records in module 'mrp_account'--- NEW ir.model.access: mrp_account.access_mrp_bom_invoice_bom_readonly NEW ir.model.access: mrp_account.access_mrp_bom_line_invoice_bom_readonly -# NOTHING TO DO: noupdate="0" records +NOTHING TO DO diff --git a/openupgrade_scripts/scripts/pad_project/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/pad_project/14.0.1.0/upgrade_analysis.txt index 0537db88abb6..4d48e2f56a66 100644 --- a/openupgrade_scripts/scripts/pad_project/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/pad_project/14.0.1.0/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'pad_project'--- ---Fields in module 'pad_project'--- pad_project / project.project / description_pad (char) : NEW -pad_project / project.project / pad_availability (selection) : NEW required, selection_keys: ['internal', 'portal'], req_default: function, hasdefault, isfunction: function, stored +pad_project / project.project / pad_availability (selection) : NEW required, selection_keys: ['internal', 'portal'], hasdefault: default ---XML records in module 'pad_project'--- NEW ir.ui.view: pad_project.portal_my_task NEW ir.ui.view: pad_project.project_portal_assets_frontend diff --git a/openupgrade_scripts/scripts/payment/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/payment/14.0.1.0/pre-migration.py new file mode 100644 index 000000000000..cb676ce0048d --- /dev/null +++ b/openupgrade_scripts/scripts/payment/14.0.1.0/pre-migration.py @@ -0,0 +1,15 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.set_xml_ids_noupdate_value( + env, + "payment", + [ + "account_payment_method_electronic_in", + ], + True, + ) diff --git a/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis.txt index 9aff1af776f3..9d1ee7456874 100644 --- a/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis.txt @@ -1,6 +1,7 @@ ---Models in module 'payment'--- ---Fields in module 'payment'--- ---XML records in module 'payment'--- +account.payment.method: payment.account_payment_method_electronic_in (noupdate) (noupdate switched) NEW ir.model.access: payment.access_payment_acquirer_onboarding_wizard NEW ir.model.access: payment.access_payment_link_wizard NEW ir.rule: payment.payment_token_salesman_rule (noupdate) diff --git a/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis_work.txt index f530a477dfd6..17a70c7810f8 100644 --- a/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/payment/14.0.1.0/upgrade_analysis_work.txt @@ -1,6 +1,9 @@ ---Models in module 'payment'--- ---Fields in module 'payment'--- ---XML records in module 'payment'--- +account.payment.method: payment.account_payment_method_electronic_in (noupdate) (noupdate switched) +# DONE: pre-migration: switched noupdate + NEW ir.model.access: payment.access_payment_acquirer_onboarding_wizard NEW ir.model.access: payment.access_payment_link_wizard # NOTHING TO DO: noupdate = "0" records diff --git a/openupgrade_scripts/scripts/payment_adyen_paybylink/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/payment_adyen_paybylink/14.0.1.0/upgrade_analysis.txt new file mode 100644 index 000000000000..8ddce691fe2b --- /dev/null +++ b/openupgrade_scripts/scripts/payment_adyen_paybylink/14.0.1.0/upgrade_analysis.txt @@ -0,0 +1,4 @@ +---Models in module 'payment_adyen_paybylink'--- +---Fields in module 'payment_adyen_paybylink'--- +---XML records in module 'payment_adyen_paybylink'--- +---nothing has changed in this module-- diff --git a/openupgrade_scripts/scripts/payment_authorize/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/payment_authorize/14.0.1.0/noupdate_changes.xml new file mode 100644 index 000000000000..08b6beed58b3 --- /dev/null +++ b/openupgrade_scripts/scripts/payment_authorize/14.0.1.0/noupdate_changes.xml @@ -0,0 +1,46 @@ + + + + diff --git a/openupgrade_scripts/scripts/payment_paypal/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/payment_paypal/14.0.1.0/upgrade_analysis_work.txt index 7385059d567c..71af99d9412b 100644 --- a/openupgrade_scripts/scripts/payment_paypal/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/payment_paypal/14.0.1.0/upgrade_analysis_work.txt @@ -1,6 +1,5 @@ ---Models in module 'payment_paypal'--- ---Fields in module 'payment_paypal'--- payment_paypal / payment.acquirer / provider (False) : selection_keys is now '['adyen', 'alipay', 'authorize', 'buckaroo', 'manual', 'odoo_adyen', 'ogone', 'paypal']' ('['adyen', 'alipay', 'authorize', 'buckaroo', 'manual', 'ogone', 'paypal']') -# NOTHING TO DO: New feature - +# NOTHING TO DO: Extra payment modules have been added ---XML records in module 'payment_paypal'--- diff --git a/openupgrade_scripts/scripts/payment_sips/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/payment_sips/14.0.1.1/upgrade_analysis.txt index c0d6acba6c77..28138be92ebe 100644 --- a/openupgrade_scripts/scripts/payment_sips/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/payment_sips/14.0.1.1/upgrade_analysis.txt @@ -1,5 +1,5 @@ ---Models in module 'payment_sips'--- ---Fields in module 'payment_sips'--- payment_sips / payment.acquirer / provider (False) : selection_keys is now '['adyen', 'alipay', 'authorize', 'buckaroo', 'manual', 'odoo_adyen', 'ogone', 'paypal', 'payulatam', 'payumoney', 'sips']' ('['adyen', 'alipay', 'authorize', 'buckaroo', 'manual', 'ogone', 'paypal', 'payulatam', 'payumoney', 'sips']') -payment_sips / payment.acquirer / sips_key_version (integer) : NEW hasdefault +payment_sips / payment.acquirer / sips_key_version (integer) : NEW hasdefault: default ---XML records in module 'payment_sips'--- diff --git a/openupgrade_scripts/scripts/payment_stripe/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/payment_stripe/14.0.1.0/upgrade_analysis_work.txt index 137d20ea8d7c..cb46f2805e7a 100644 --- a/openupgrade_scripts/scripts/payment_stripe/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/payment_stripe/14.0.1.0/upgrade_analysis_work.txt @@ -1,8 +1,5 @@ ---Models in module 'payment_stripe'--- ---Fields in module 'payment_stripe'--- payment_stripe / payment.acquirer / provider (False) : selection_keys is now '['adyen', 'alipay', 'authorize', 'buckaroo', 'manual', 'odoo_adyen', 'ogone', 'paypal', 'payulatam', 'payumoney', 'sips', 'stripe']' ('['adyen', 'alipay', 'authorize', 'buckaroo', 'manual', 'ogone', 'paypal', 'payulatam', 'payumoney', 'sips', 'stripe']') -# NOTHING TO DO: New feature - ---XML records in module 'payment_stripe'--- DEL ir.ui.view: payment_stripe_checkout_webhook.acquirer_form_stripe -# NOTHING TO DO: noupdate="0" records diff --git a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/noupdate_changes.xml b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/noupdate_changes.xml index 8017be1a9669..b7374c7d94b9 100644 --- a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/noupdate_changes.xml @@ -1,27 +1,28 @@ - - - + False - - - - - - + + + + + - - - - - - - - - - + [('company_id', 'in', company_ids)] + diff --git a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/post-migration.py b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/post-migration.py index 0df4c333f41f..97930d64f697 100644 --- a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/post-migration.py +++ b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/post-migration.py @@ -1,7 +1,7 @@ from openupgradelib import openupgrade -def convert_field_m2o_to_o2m(env): +def convert_pos_order_pickings(env): openupgrade.m2o_to_x2m( env.cr, env["pos.order"], "pos_order", "picking_ids", "picking_id" ) @@ -11,13 +11,11 @@ def fill_sesion_on_picking_by_pos_order(env): openupgrade.logged_query( env.cr, """ - UPDATE stock_picking - SET pos_session_id = (SELECT session_id - FROM pos_order - WHERE pos_order.id = stock_picking.pos_order_id - LIMIT 1) - WHERE pos_session_id IS NULL AND pos_order_id IS NOT NULL; - """, + UPDATE stock_picking sp + SET pos_session_id = po.session_id + FROM pos_order po + WHERE po.id = sp.pos_order_id + AND sp.pos_session_id IS NULL""", ) @@ -36,21 +34,48 @@ def transfer_new_session_state(env): env.cr, """ UPDATE pos_session ps - SET state = CASE - WHEN pc.cash_control=True AND - COALESCE(ps.rescue,False)=False THEN 'opening_control' - ELSE 'opened' - END + SET state = + CASE + WHEN pc.cash_control AND NOT COALESCE(ps.rescue, FALSE) + THEN 'opening_control' + ELSE 'opened' + END FROM pos_config pc WHERE pc.id = ps.config_id AND ps.state = 'new_session'; """, ) +def activate_pos_config_manage_orders(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE pos_config + SET manage_orders = TRUE""", + ) + + +def fill_full_product_name_on_pos_order_line(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE pos_order_line pol + SET full_product_name = ( + CASE WHEN COALESCE(pp.default_code, '') != '' + THEN '[' || pp.default_code || '] ' ELSE '' END + ) || pt.name + FROM product_product pp + JOIN product_template pt ON pp.product_tmpl_id = pt.id + WHERE pol.product_id = pp.id""", + ) + + @openupgrade.migrate() def migrate(env, version): - convert_field_m2o_to_o2m(env) + convert_pos_order_pickings(env) fill_sesion_on_picking_by_pos_order(env) set_point_of_sale_update_stock_quantities_to_real(env) transfer_new_session_state(env) + activate_pos_config_manage_orders(env) + fill_full_product_name_on_pos_order_line(env) openupgrade.load_data(env.cr, "point_of_sale", "14.0.1.0.1/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/pre-migration.py b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/pre-migration.py index 2e3ccae2dd46..a0d4210a7c88 100644 --- a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/pre-migration.py +++ b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/pre-migration.py @@ -5,32 +5,24 @@ def fill_pos_config_default_picking_type_id(env): openupgrade.logged_query( env.cr, """ - UPDATE pos_config - SET picking_type_id = (SELECT pos_type_id - FROM stock_warehouse - WHERE stock_warehouse.company_id = pos_config.company_id - LIMIT 1) - WHERE picking_type_id IS NULL; - """, + UPDATE pos_config pc + SET picking_type_id = sw.pos_type_id + FROM stock_warehouse sw + WHERE sw.company_id = pc.company_id + AND pc.picking_type_id IS NULL""", ) def delete_constraint(env): # Disappeared constraint - openupgrade.logged_query( - env.cr, - """ALTER TABLE res_partner - DROP CONSTRAINT IF EXISTS res_partner_unique_barcode""", - ) - openupgrade.delete_records_safely_by_xml_id( - env, ["point_of_sale.constraint_res_partner_unique_barcode"] + openupgrade.delete_sql_constraint_safely( + env, "point_of_sale", "res_partner", "unique_barcode" ) @openupgrade.migrate() def migrate(env, version): fill_pos_config_default_picking_type_id(env) - openupgrade.set_xml_ids_noupdate_value( env, "point_of_sale", @@ -49,5 +41,4 @@ def migrate(env, version): ], True, ) - delete_constraint(env) diff --git a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis.txt index 31b5acab8dd6..303fcf2e043c 100644 --- a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis.txt @@ -2,9 +2,9 @@ ---Fields in module 'point_of_sale'--- point_of_sale / pos.config / iface_precompute_cash (boolean): DEL point_of_sale / pos.config / manage_orders (boolean) : NEW -point_of_sale / pos.config / manual_discount (boolean) : NEW hasdefault +point_of_sale / pos.config / manual_discount (boolean) : NEW hasdefault: default point_of_sale / pos.config / module_pos_reprint (boolean) : DEL -point_of_sale / pos.config / picking_type_id (many2one) : now required, req_default: function +point_of_sale / pos.config / picking_type_id (many2one) : now required point_of_sale / pos.config / product_configurator (boolean): NEW point_of_sale / pos.order / _order : _order is now 'date_order desc, name desc, id desc' ('id desc') point_of_sale / pos.order / is_tipped (boolean) : NEW @@ -14,17 +14,17 @@ point_of_sale / pos.order / picking_ids (one2many) : NEW r point_of_sale / pos.order / tip_amount (float) : NEW point_of_sale / pos.order.line / full_product_name (char) : NEW point_of_sale / pos.payment / cardholder_name (char) : NEW -point_of_sale / pos.payment / is_change (boolean) : NEW hasdefault +point_of_sale / pos.payment / is_change (boolean) : NEW hasdefault: default point_of_sale / pos.payment / payment_status (char) : NEW point_of_sale / pos.payment / ticket (char) : NEW -point_of_sale / pos.payment.method / active (boolean) : NEW hasdefault +point_of_sale / pos.payment.method / active (boolean) : NEW hasdefault: default point_of_sale / pos.session / cash_real_difference (float) : NEW point_of_sale / pos.session / cash_real_expected (float) : NEW point_of_sale / pos.session / cash_real_transaction (float) : NEW point_of_sale / pos.session / picking_ids (one2many) : NEW relation: stock.picking point_of_sale / pos.session / state (selection) : selection_keys is now '['closed', 'closing_control', 'opened', 'opening_control']' ('['closed', 'closing_control', 'new_session', 'opened', 'opening_control']') point_of_sale / pos.session / update_stock_at_closing (boolean): NEW -point_of_sale / res.company / point_of_sale_update_stock_quantities (selection): NEW selection_keys: ['closing', 'real'], hasdefault +point_of_sale / res.company / point_of_sale_update_stock_quantities (selection): NEW selection_keys: ['closing', 'real'], hasdefault: default point_of_sale / res.partner / barcode (char) : module is now 'base' ('point_of_sale') point_of_sale / res.partner / barcode (char) : not stored anymore point_of_sale / stock.picking / pos_order_id (many2one) : NEW relation: pos.order diff --git a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis_work.txt index 51beba90a20a..8d97b6df3c17 100644 --- a/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/point_of_sale/14.0.1.0.1/upgrade_analysis_work.txt @@ -1,11 +1,13 @@ ---Models in module 'point_of_sale'--- ---Fields in module 'point_of_sale'--- point_of_sale / pos.config / iface_precompute_cash (boolean): DEL -point_of_sale / pos.config / manage_orders (boolean) : NEW point_of_sale / pos.config / manual_discount (boolean) : NEW hasdefault point_of_sale / pos.config / module_pos_reprint (boolean) : DEL # NOTHING TO DO +point_of_sale / pos.config / manage_orders (boolean) : NEW +# DONE: post-migration: active by default + point_of_sale / pos.config / picking_type_id (many2one) : now required, req_default: function # DONE: pre-migration fill record having empty field with default value @@ -21,8 +23,10 @@ point_of_sale / pos.order / picking_id (many2one) : DEL r point_of_sale / pos.order / picking_ids (one2many) : NEW relation: stock.picking # DONE: post-migration convert data many2one to one2many -point_of_sale / pos.order / tip_amount (float) : NEW point_of_sale / pos.order.line / full_product_name (char) : NEW +# DONE: post-migration: filled full_product_name with product display_name + +point_of_sale / pos.order / tip_amount (float) : NEW point_of_sale / pos.payment / cardholder_name (char) : NEW point_of_sale / pos.payment / is_change (boolean) : NEW hasdefault point_of_sale / pos.payment / payment_status (char) : NEW @@ -100,4 +104,4 @@ DEL ir.ui.view: pos_cash_rounding.pos_rounding_form_view_inherited DEL ir.ui.view: pos_cash_rounding.res_config_view_form_inherit_pos_cash_rounding DEL ir.ui.view: pos_reprint.assets DEL ir.ui.view: pos_reprint.pos_config_view_form_inherit_pos_reprint -# NOTHING TO DO \ No newline at end of file +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/portal/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/portal/14.0.1.0/upgrade_analysis.txt index 916c59ba6181..a9b97d4686ce 100644 --- a/openupgrade_scripts/scripts/portal/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/portal/14.0.1.0/upgrade_analysis.txt @@ -13,11 +13,13 @@ portal / mail.test.cc / website_message_ids (one2many): previo portal / mail.test.container / website_message_ids (one2many): NEW relation: mail.message portal / mail.test.field.type / website_message_ids (one2many): previously in module test_mail portal / mail.test.gateway / website_message_ids (one2many): previously in module test_mail +portal / mail.test.gateway.groups / website_message_ids (one2many): previously in module test_mail portal / mail.test.multi.company / website_message_ids (one2many): previously in module test_mail portal / mail.test.simple / website_message_ids (one2many): previously in module test_mail portal / mail.test.ticket / website_message_ids (one2many): NEW relation: mail.message portal / mail.test.track / website_message_ids (one2many): previously in module test_mail portal / mail.test.track.compute / website_message_ids (one2many): NEW relation: mail.message +portal / mail.test.track.selection / website_message_ids (one2many): previously in module test_mail portal / mailing.contact / website_message_ids (one2many): module is now 'mass_mailing' ('portal') portal / mailing.mailing / website_message_ids (one2many): module is now 'mass_mailing' ('portal') ---XML records in module 'portal'--- diff --git a/openupgrade_scripts/scripts/portal_rating/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/portal_rating/14.0.1.0/upgrade_analysis_work.txt index 970287d2841e..ab0a62c52761 100644 --- a/openupgrade_scripts/scripts/portal_rating/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/portal_rating/14.0.1.0/upgrade_analysis_work.txt @@ -14,4 +14,4 @@ DEL ir.ui.view: website_rating.message_thread DEL ir.ui.view: website_rating.rating_rating_view_form DEL ir.ui.view: website_rating.rating_stars_static_popup_composer DEL ir.ui.view: website_rating.rating_widget_stars_static -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/pos_adyen/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/pos_adyen/14.0.1.0/upgrade_analysis.txt index e081b748b5e1..c58ce7a94786 100644 --- a/openupgrade_scripts/scripts/pos_adyen/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/pos_adyen/14.0.1.0/upgrade_analysis.txt @@ -11,7 +11,7 @@ pos_adyen / adyen.store / house_number_or_name (char) : NEW re pos_adyen / adyen.store / name (char) : NEW required pos_adyen / adyen.store / phone_number (char) : NEW required pos_adyen / adyen.store / state_id (many2one) : NEW relation: res.country.state -pos_adyen / adyen.store / store_reference (char) : NEW hasdefault +pos_adyen / adyen.store / store_reference (char) : NEW hasdefault: default pos_adyen / adyen.store / store_uuid (char) : NEW pos_adyen / adyen.store / street (char) : NEW required pos_adyen / adyen.store / terminal_ids (one2many) : NEW relation: adyen.terminal diff --git a/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis.txt index c61f0e856cd9..6281116d6f68 100644 --- a/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'pos_restaurant'--- ---Fields in module 'pos_restaurant'--- pos_restaurant / pos.config / set_tip_after_payment (boolean): NEW -pos_restaurant / restaurant.floor / active (boolean) : NEW hasdefault +pos_restaurant / restaurant.floor / active (boolean) : NEW hasdefault: default ---XML records in module 'pos_restaurant'--- NEW ir.ui.view: pos_restaurant.qunit_suite_tests NEW ir.ui.view: pos_restaurant.view_restaurant_floor_search diff --git a/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis_work.txt index 3b212cbd9a31..3701d4e3466a 100644 --- a/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/pos_restaurant/14.0.1.0/upgrade_analysis_work.txt @@ -1,10 +1,11 @@ ---Models in module 'pos_restaurant'--- ---Fields in module 'pos_restaurant'--- pos_restaurant / pos.config / set_tip_after_payment (boolean): NEW +# New feature. Nothing to do. + pos_restaurant / restaurant.floor / active (boolean) : NEW hasdefault -# NOTHING TO DO +# New active field on pos.restaurant (default=True). Nothing to do. ---XML records in module 'pos_restaurant'--- NEW ir.ui.view: pos_restaurant.qunit_suite_tests NEW ir.ui.view: pos_restaurant.view_restaurant_floor_search -# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/pos_restaurant_adyen/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/pos_restaurant_adyen/14.0.1.0/upgrade_analysis_work.txt index d7398c816fbf..621717cf6852 100644 --- a/openupgrade_scripts/scripts/pos_restaurant_adyen/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/pos_restaurant_adyen/14.0.1.0/upgrade_analysis_work.txt @@ -6,4 +6,4 @@ pos_restaurant_adyen / pos.payment.method / adyen_merchant_account (char) ---XML records in module 'pos_restaurant_adyen'--- NEW ir.ui.view: pos_restaurant_adyen.assets NEW ir.ui.view: pos_restaurant_adyen.pos_payment_method_view_form_inherit_pos_restaurant_adyen -# NOTHING TO DO \ No newline at end of file +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/pos_sale/14.0.1.0/openupgrade_analysis_work.txt b/openupgrade_scripts/scripts/pos_sale/14.0.1.0/openupgrade_analysis_work.txt index 5ecc0390ac3f..456d6cd5aa24 100644 --- a/openupgrade_scripts/scripts/pos_sale/14.0.1.0/openupgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/pos_sale/14.0.1.0/openupgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'pos_sale'--- ---XML records in module 'pos_sale'--- ir.rule: pos_sale.pos_sale_rule_pos_channel_pos_manager (noupdate) (noupdate switched) -# Done pre-migration \ No newline at end of file +# Done pre-migration diff --git a/openupgrade_scripts/scripts/product/14.0.1.2/noupdate_changes.xml b/openupgrade_scripts/scripts/product/14.0.1.2/noupdate_changes.xml index f2f78d1df959..a5dc91b703d1 100644 --- a/openupgrade_scripts/scripts/product/14.0.1.2/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/product/14.0.1.2/noupdate_changes.xml @@ -1,21 +1,26 @@ - + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + diff --git a/openupgrade_scripts/scripts/product/14.0.1.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/product/14.0.1.2/upgrade_analysis.txt index 09c33363e5ac..1525e9ab9643 100644 --- a/openupgrade_scripts/scripts/product/14.0.1.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/product/14.0.1.2/upgrade_analysis.txt @@ -12,7 +12,7 @@ product / product.attribute.custom.value / name (char) : product / product.attribute.value / display_type (selection) : previously in module sale product / product.attribute.value / html_color (char) : previously in module sale product / product.attribute.value / is_custom (boolean) : previously in module sale -product / product.pricelist / discount_policy (selection) : now required, req_default: function +product / product.pricelist / discount_policy (selection) : now required product / product.pricelist.item / date_end (date) : type is now 'datetime' ('date') product / product.pricelist.item / date_start (date) : type is now 'datetime' ('date') product / product.pricelist.item / min_quantity (integer) : type is now 'float' ('integer') diff --git a/openupgrade_scripts/scripts/product_expiry/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/product_expiry/14.0.1.0/post-migration.py index a5084152fe2f..8bb77da1d168 100644 --- a/openupgrade_scripts/scripts/product_expiry/14.0.1.0/post-migration.py +++ b/openupgrade_scripts/scripts/product_expiry/14.0.1.0/post-migration.py @@ -10,8 +10,18 @@ def migrate(env, version): """ UPDATE product_template SET use_expiration_date = TRUE - WHERE expiration_time > 0 - """, + WHERE expiration_time > 0""", + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE product_template pt + SET use_expiration_date = TRUE + FROM stock_production_lot spl + JOIN product_product pp ON spl.product_id = pp.id + WHERE pp.product_tmpl_id = pt.id AND ( + spl.expiration_date IS NOT NULL OR spl.removal_date IS NOT NULL + OR spl.use_date IS NOT NULL OR spl.alert_date IS NOT NULL)""", ) openupgrade.logged_query( # sml has lot_it @@ -19,12 +29,9 @@ def migrate(env, version): """ UPDATE stock_move_line sml SET expiration_date = spl.expiration_date - FROM stock_production_lot spl, product_product pp - JOIN product_template pt ON pp.product_tmpl_id = pt.id, stock_picking sp - JOIN stock_picking_type spt ON sp.picking_type_id = spt.id - WHERE spl.id = sml.lot_id AND sml.picking_id = sp.id - AND spt.use_existing_lots AND sml.product_id = pp.id - AND pt.use_expiration_date""", + FROM stock_production_lot spl + WHERE spl.id = sml.lot_id AND spl.expiration_date IS NOT NULL + """, ) openupgrade.logged_query( # use sml.create_date @@ -36,7 +43,11 @@ def migrate(env, version): FROM product_product pp JOIN product_template pt ON pp.product_tmpl_id = pt.id, stock_picking sp JOIN stock_picking_type spt ON sp.picking_type_id = spt.id - WHERE (sml.lot_id IS NULL OR sml.expiration_date IS NULL) AND - sml.picking_id = sp.id AND spt.use_existing_lots AND sml.product_id = pp.id - AND pt.use_expiration_date AND pt.expiration_time IS NOT NULL""", + WHERE + sml.product_id = pp.id + AND sml.picking_id = sp.id + AND spt.use_create_lots + AND pt.use_expiration_date + AND pt.expiration_time IS NOT NULL + AND sml.expiration_date IS NULL""", ) diff --git a/openupgrade_scripts/scripts/product_expiry/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/product_expiry/14.0.1.0/pre-migration.py index 4536778242bd..ff7a6e78a31d 100644 --- a/openupgrade_scripts/scripts/product_expiry/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/product_expiry/14.0.1.0/pre-migration.py @@ -6,8 +6,19 @@ ("product.template", "product_template", "life_time", "expiration_time"), ("stock.production.lot", "stock_production_lot", "life_date", "expiration_date"), ] +_field_creates = [ + ( + "expiration_date", + "stock.move.line", + "stock_move_line", + "datetime", + False, + "stock", + ) +] @openupgrade.migrate() def migrate(env, version): openupgrade.rename_fields(env, _field_renames) + openupgrade.add_fields(env, _field_creates) diff --git a/openupgrade_scripts/scripts/product_margin/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/product_margin/14.0.1.0/upgrade_analysis_work.txt index dbc88181c223..594b34375663 100644 --- a/openupgrade_scripts/scripts/product_margin/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/product_margin/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'product_margin'--- ---XML records in module 'product_margin'--- NEW ir.model.access: product_margin.access_product_margin -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO: noupdate = 0 record diff --git a/openupgrade_scripts/scripts/project/14.0.1.1/post-migration.py b/openupgrade_scripts/scripts/project/14.0.1.1/post-migration.py index d5af0f49b2fe..efbac6a22ab4 100644 --- a/openupgrade_scripts/scripts/project/14.0.1.1/post-migration.py +++ b/openupgrade_scripts/scripts/project/14.0.1.1/post-migration.py @@ -33,6 +33,14 @@ def _fill_res_users_m2m_tables(env): JOIN mail_followers mf ON mf.res_model = 'project.project' AND mf.res_id = pp.id JOIN res_users ru ON ru.partner_id = mf.partner_id AND NOT ru.share WHERE pp.privacy_visibility = 'followers' + UNION + SELECT pp.id, ru.id + FROM project_project pp + JOIN mail_followers mf ON mf.res_model = 'project.project' AND mf.res_id = pp.id + JOIN mail_channel_partner mcp ON mcp.channel_id = mf.channel_id + JOIN res_users ru ON ru.partner_id = mcp.partner_id AND NOT ru.share + WHERE pp.privacy_visibility = 'followers' + ON CONFLICT DO NOTHING """, ) openupgrade.logged_query( @@ -58,9 +66,27 @@ def _fill_res_users_m2m_tables(env): FROM project_allowed_internal_users_rel rel JOIN project_task pt ON pt.project_id = rel.project_project_id UNION + SELECT pt.id, pt.user_id + FROM project_task pt + JOIN project_project pp ON pp.id = pt.project_id + WHERE pp.privacy_visibility = 'followers' AND pt.user_id IS NOT NULL + UNION SELECT pt.id, rel.res_users_id FROM project_allowed_portal_users_rel rel JOIN project_task pt ON pt.project_id = rel.project_project_id + JOIN mail_followers mf ON mf.res_model = 'project.task' AND mf.res_id = pt.id + JOIN res_partner rp ON mf.partner_id = rp.id + OR mf.partner_id = rp.commercial_partner_id + JOIN res_users ru ON ru.partner_id = rp.id + AND ru.share AND ru.id = rel.res_users_id + UNION + SELECT pt.id, ru.id AS res_users_id + FROM project_task pt + JOIN mail_followers mf ON mf.res_model = 'project.task' AND mf.res_id = pt.id + JOIN res_users ru ON ru.partner_id = mf.partner_id AND NOT ru.share + JOIN project_project pp ON pp.id = pt.project_id + WHERE pp.privacy_visibility = 'followers' + ON CONFLICT DO NOTHING """, ) diff --git a/openupgrade_scripts/scripts/project/14.0.1.1/pre-migration.py b/openupgrade_scripts/scripts/project/14.0.1.1/pre-migration.py index e8a7271c0217..1a01fc1cb990 100644 --- a/openupgrade_scripts/scripts/project/14.0.1.1/pre-migration.py +++ b/openupgrade_scripts/scripts/project/14.0.1.1/pre-migration.py @@ -13,7 +13,7 @@ def _set_default_rating_status_period(env): def fast_fill_stored_calculated_fields(env): - """ Faster way """ + """Faster way""" openupgrade.logged_query( env.cr, """ diff --git a/openupgrade_scripts/scripts/project/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/project/14.0.1.1/upgrade_analysis.txt index 941938e2de41..01b76878b249 100644 --- a/openupgrade_scripts/scripts/project/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/project/14.0.1.1/upgrade_analysis.txt @@ -3,42 +3,56 @@ new model project.delete.wizard [transient] new model project.task.recurrence new model project.task.type.delete.wizard [transient] ---Fields in module 'project'--- -project / project.project / allow_recurring_tasks (boolean): NEW hasdefault -project / project.project / allow_subtasks (boolean) : NEW hasdefault -project / project.project / allowed_internal_user_ids (many2many): NEW relation: res.users, hasdefault +project / project.project / alias_enabled (boolean) : NEW hasdefault: compute +project / project.project / allow_recurring_tasks (boolean): NEW hasdefault: default +project / project.project / allow_subtasks (boolean) : NEW hasdefault: default +project / project.project / allowed_internal_user_ids (many2many): NEW relation: res.users, hasdefault: default project / project.project / allowed_portal_user_ids (many2many): NEW relation: res.users project / project.project / description (html) : NEW project / project.project / partner_email (char) : NEW isfunction: function, stored project / project.project / partner_phone (char) : NEW isfunction: function, stored project / project.project / portal_show_rating (boolean) : DEL -project / project.project / rating_active (boolean) : NEW hasdefault +project / project.project / rating_active (boolean) : NEW hasdefault: default project / project.project / rating_status (selection) : selection_keys is now '['periodic', 'stage']' ('['no', 'periodic', 'stage']') -project / project.project / rating_status_period (selection): now required, req_default: function +project / project.project / rating_status_period (selection): now required project / project.project / resource_calendar_id (many2one): not stored anymore project / project.project / resource_calendar_id (many2one): now related -project / project.task / allowed_user_ids (many2many) : NEW relation: res.users, isfunction: function, stored -project / project.task / company_id (many2one) : now a function -project / project.task / email_from (char) : now a function +project / project.task / allowed_user_ids (many2many) : NEW relation: res.users, hasdefault: compute +project / project.task / fri (boolean) : NEW hasdefault: compute +project / project.task / mon (boolean) : NEW hasdefault: compute project / project.task / partner_email (char) : NEW isfunction: function, stored -project / project.task / partner_id (many2one) : now a function project / project.task / partner_phone (char) : NEW isfunction: function, stored -project / project.task / project_id (many2one) : now a function project / project.task / recurrence_id (many2one) : NEW relation: project.task.recurrence -project / project.task / recurrence_update (selection) : NEW selection_keys: ['all', 'subsequent', 'this'], hasdefault +project / project.task / recurrence_update (selection) : NEW selection_keys: ['all', 'subsequent', 'this'], hasdefault: default project / project.task / recurring_task (boolean) : NEW -project / project.task / stage_id (many2one) : now a function +project / project.task / repeat_day (selection) : NEW selection_keys: ['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '3', '30', '31', '4', '5', '6', '7', '8', '9'], hasdefault: compute +project / project.task / repeat_interval (integer) : NEW hasdefault: default +project / project.task / repeat_month (selection) : NEW selection_keys: ['april', 'august', 'december', 'february', 'january', 'july', 'june', 'march', 'may', 'november', 'october', 'september'], hasdefault: compute +project / project.task / repeat_number (integer) : NEW hasdefault: default +project / project.task / repeat_on_month (selection) : NEW selection_keys: ['date', 'day'], hasdefault: default +project / project.task / repeat_on_year (selection) : NEW selection_keys: ['date', 'day'], hasdefault: default +project / project.task / repeat_type (selection) : NEW selection_keys: ['after', 'forever', 'until'], hasdefault: default +project / project.task / repeat_unit (selection) : NEW selection_keys: ['day', 'month', 'week', 'year'], hasdefault: default +project / project.task / repeat_until (date) : NEW hasdefault: compute +project / project.task / repeat_week (selection) : NEW selection_keys: ['first', 'last', 'second', 'third'], hasdefault: default +project / project.task / repeat_weekday (selection) : NEW selection_keys: ['fri', 'mon', 'sat', 'sun', 'thu', 'tue', 'wed'], hasdefault: compute +project / project.task / sat (boolean) : NEW hasdefault: compute +project / project.task / sun (boolean) : NEW hasdefault: compute +project / project.task / thu (boolean) : NEW hasdefault: compute +project / project.task / tue (boolean) : NEW hasdefault: compute +project / project.task / wed (boolean) : NEW hasdefault: compute project / project.task.recurrence / fri (boolean) : NEW project / project.task.recurrence / mon (boolean) : NEW project / project.task.recurrence / next_recurrence_date (date) : NEW project / project.task.recurrence / recurrence_left (integer) : NEW project / project.task.recurrence / repeat_day (selection) : NEW selection_keys: ['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '3', '30', '31', '4', '5', '6', '7', '8', '9'] -project / project.task.recurrence / repeat_interval (integer) : NEW hasdefault +project / project.task.recurrence / repeat_interval (integer) : NEW hasdefault: default project / project.task.recurrence / repeat_month (selection) : NEW selection_keys: ['april', 'august', 'december', 'february', 'january', 'july', 'june', 'march', 'may', 'november', 'october', 'september'] project / project.task.recurrence / repeat_number (integer) : NEW project / project.task.recurrence / repeat_on_month (selection) : NEW selection_keys: ['date', 'day'] project / project.task.recurrence / repeat_on_year (selection) : NEW selection_keys: ['date', 'day'] -project / project.task.recurrence / repeat_type (selection) : NEW selection_keys: ['after', 'forever', 'until'], hasdefault -project / project.task.recurrence / repeat_unit (selection) : NEW selection_keys: ['day', 'month', 'week', 'year'], hasdefault +project / project.task.recurrence / repeat_type (selection) : NEW selection_keys: ['after', 'forever', 'until'], hasdefault: default +project / project.task.recurrence / repeat_unit (selection) : NEW selection_keys: ['day', 'month', 'week', 'year'], hasdefault: default project / project.task.recurrence / repeat_until (date) : NEW project / project.task.recurrence / repeat_week (selection) : NEW selection_keys: ['first', 'last', 'second', 'third'] project / project.task.recurrence / repeat_weekday (selection) : NEW selection_keys: ['fri', 'mon', 'sat', 'sun', 'thu', 'tue', 'wed'] @@ -48,7 +62,7 @@ project / project.task.recurrence / task_ids (one2many) : NEW re project / project.task.recurrence / thu (boolean) : NEW project / project.task.recurrence / tue (boolean) : NEW project / project.task.recurrence / wed (boolean) : NEW -project / project.task.type / active (boolean) : NEW hasdefault +project / project.task.type / active (boolean) : NEW hasdefault: default project / project.task.type / is_closed (boolean) : NEW ---XML records in module 'project'--- NEW ir.actions.act_window: project.action_view_all_task diff --git a/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis.txt index fe9d493d8d73..9a5917d1eae1 100644 --- a/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis.txt @@ -1,5 +1,4 @@ ---Models in module 'project_timesheet_holidays'--- ---Fields in module 'project_timesheet_holidays'--- -project_timesheet_holidays / hr.leave.type / timesheet_generate (boolean) : now a function -project_timesheet_holidays / hr.leave.type / timesheet_task_id (many2one) : now a function ---XML records in module 'project_timesheet_holidays'--- +---nothing has changed in this module-- diff --git a/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis_work.txt index dd83efa2d827..96dec3753cfa 100644 --- a/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/project_timesheet_holidays/14.0.1.0/upgrade_analysis_work.txt @@ -1,6 +1,10 @@ ---Models in module 'project_timesheet_holidays'--- ---Fields in module 'project_timesheet_holidays'--- +# NOTHING TO DO + project_timesheet_holidays / hr.leave.type / timesheet_generate (boolean) : now a function project_timesheet_holidays / hr.leave.type / timesheet_task_id (many2one) : now a function +# NOTHING TO DO: Fields are now computed, but store=True, so fields are still stored + ---XML records in module 'project_timesheet_holidays'--- # NOTHING TO DO diff --git a/openupgrade_scripts/scripts/purchase/14.0.1.2/noupdate_changes.xml b/openupgrade_scripts/scripts/purchase/14.0.1.2/noupdate_changes.xml index 3bfcaa8578ad..5d0d366711d5 100644 --- a/openupgrade_scripts/scripts/purchase/14.0.1.2/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/purchase/14.0.1.2/noupdate_changes.xml @@ -32,16 +32,20 @@ Portal Purchase Order Lines - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids)] + - + [('company_id', 'in', company_ids)] + - + [('company_id', 'in', company_ids)] + [('move_id.move_type', 'in', ('in_invoice', 'in_refund', 'in_receipt'))] diff --git a/openupgrade_scripts/scripts/purchase/14.0.1.2/pre-migration.py b/openupgrade_scripts/scripts/purchase/14.0.1.2/pre-migration.py index 78dc5d16549e..a6d8df1b0111 100644 --- a/openupgrade_scripts/scripts/purchase/14.0.1.2/pre-migration.py +++ b/openupgrade_scripts/scripts/purchase/14.0.1.2/pre-migration.py @@ -30,3 +30,5 @@ def fill_purchase_order_line_qty_to_invoice(env): @openupgrade.migrate() def migrate(env, version): fill_purchase_order_line_qty_to_invoice(env) + # Remove SQL view purchase_report not used anymore in Odoo v14.0 + openupgrade.logged_query(env.cr, "DROP VIEW IF EXISTS purchase_report CASCADE") diff --git a/openupgrade_scripts/scripts/purchase/14.0.1.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/purchase/14.0.1.2/upgrade_analysis.txt index 3abec1418481..7b32eb98ffe8 100644 --- a/openupgrade_scripts/scripts/purchase/14.0.1.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/purchase/14.0.1.2/upgrade_analysis.txt @@ -2,15 +2,12 @@ ---Fields in module 'purchase'--- purchase / purchase.order / _order : _order is now 'priority desc, id desc' ('date_order desc, id desc') purchase / purchase.order / date_calendar_start (datetime): NEW isfunction: function, stored -purchase / purchase.order / date_planned (datetime) : now a function -purchase / purchase.order / mail_reception_confirmed (boolean): NEW hasdefault -purchase / purchase.order / mail_reminder_confirmed (boolean): NEW hasdefault -purchase / purchase.order / priority (selection) : NEW selection_keys: ['0', '1'], hasdefault -purchase / purchase.order.line / account_analytic_id (many2one): now a function -purchase / purchase.order.line / analytic_tag_ids (many2many) : now a function +purchase / purchase.order / mail_reception_confirmed (boolean): NEW +purchase / purchase.order / mail_reminder_confirmed (boolean): NEW +purchase / purchase.order / priority (selection) : NEW selection_keys: ['0', '1'], hasdefault: default purchase / purchase.order.line / qty_to_invoice (float) : NEW isfunction: function, stored -purchase / res.partner / receipt_reminder_email (boolean): NEW hasdefault -purchase / res.partner / reminder_date_before_receipt (integer): NEW hasdefault +purchase / res.partner / receipt_reminder_email (boolean): NEW +purchase / res.partner / reminder_date_before_receipt (integer): NEW ---XML records in module 'purchase'--- NEW digest.tip: purchase.digest_tip_purchase_0 NEW digest.tip: purchase.digest_tip_purchase_1 diff --git a/openupgrade_scripts/scripts/purchase_mrp/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/purchase_mrp/14.0.1.0/upgrade_analysis_work.txt index 4fdccad95a4a..baeb8dd802b0 100644 --- a/openupgrade_scripts/scripts/purchase_mrp/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/purchase_mrp/14.0.1.0/upgrade_analysis_work.txt @@ -3,4 +3,4 @@ ---XML records in module 'purchase_mrp'--- NEW ir.ui.view: purchase_mrp.mrp_production_form_view_purchase NEW ir.ui.view: purchase_mrp.purchase_order_form_mrp -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/noupdate_changes.xml b/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/noupdate_changes.xml index 01a16b70e5b4..d1c8d380785d 100644 --- a/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/noupdate_changes.xml @@ -2,8 +2,10 @@ + [('company_id', 'in', company_ids)] + [('company_id', 'in', company_ids)] diff --git a/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/post-migration.py b/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/post-migration.py new file mode 100644 index 000000000000..e12fcf503985 --- /dev/null +++ b/openupgrade_scripts/scripts/purchase_requisition/14.0.0.1/post-migration.py @@ -0,0 +1,8 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data( + env.cr, "purchase_requisition", "14.0.0.1/noupdate_changes.xml" + ) diff --git a/openupgrade_scripts/scripts/purchase_requisition_stock/14.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/purchase_requisition_stock/14.0.1.2/upgrade_analysis_work.txt new file mode 100644 index 000000000000..df479351625b --- /dev/null +++ b/openupgrade_scripts/scripts/purchase_requisition_stock/14.0.1.2/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'purchase_requisition_stock'--- +---Fields in module 'purchase_requisition_stock'--- +---XML records in module 'purchase_requisition_stock'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/purchase_stock/14.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/purchase_stock/14.0.1.2/upgrade_analysis_work.txt index a3a29c9b8d1a..397b707aee56 100644 --- a/openupgrade_scripts/scripts/purchase_stock/14.0.1.2/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/purchase_stock/14.0.1.2/upgrade_analysis_work.txt @@ -1,7 +1,5 @@ ---Models in module 'purchase_stock'--- new model vendor.delay.report [sql_view] -# NOTHING TO DO - ---Fields in module 'purchase_stock'--- purchase_stock / product.product / purchase_order_line_ids (one2many): NEW relation: purchase.order.line purchase_stock / purchase.order / effective_date (datetime) : NEW isfunction: function, stored @@ -11,8 +9,6 @@ purchase_stock / purchase.order.line / propagate_date_minimum_delta (intege purchase_stock / res.company / days_to_purchase (float) : NEW purchase_stock / res.partner / purchase_line_ids (one2many) : NEW relation: purchase.order.line purchase_stock / stock.warehouse.orderpoint / supplier_id (many2one) : NEW relation: product.supplierinfo -# NOTHING TO DO - ---XML records in module 'purchase_stock'--- NEW ir.actions.act_window: purchase_stock.action_purchase_vendor_delay_report DEL ir.actions.act_window: purchase_stock.purchase_open_picking diff --git a/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis.txt index 062127e79090..6057e081f29f 100644 --- a/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis.txt @@ -4,7 +4,7 @@ obsolete model repair.cancel [transient] repair / repair.fee / company_id (many2one) : NEW relation: res.company, isrelated: related, stored repair / repair.line / company_id (many2one) : NEW relation: res.company, isrelated: related, stored repair / repair.line / repair_id (many2one) : now required -repair / repair.order / company_id (many2one) : now required, req_default: function +repair / repair.order / company_id (many2one) : now required ---XML records in module 'repair'--- DEL ir.actions.act_window: repair.action_cancel_repair NEW ir.model.access: repair.access_repair_order_make_invoice diff --git a/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..57d089139593 --- /dev/null +++ b/openupgrade_scripts/scripts/repair/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,27 @@ +---Models in module 'repair'--- +obsolete model repair.cancel [transient] +# NOTHING TO DO + +---Fields in module 'repair'--- +repair / repair.line / repair_id (many2one) : now required +repair / repair.order / company_id (many2one) : now required, req_default: function +# NOTHING TO DO: Already filled for all records that came regularly by Odoo UI + +repair / repair.fee / company_id (many2one) : NEW relation: res.company, isrelated: related, stored +repair / repair.line / company_id (many2one) : NEW relation: res.company, isrelated: related, stored +# NOTHING TO DO: Filled by ORM + +---XML records in module 'repair'--- +DEL ir.actions.act_window: repair.action_cancel_repair +NEW ir.model.access: repair.access_repair_order_make_invoice +NEW ir.model.access: repair.access_stock_warn_insufficient_qty_repair +DEL ir.ui.view: repair.view_cancel_repair +# NOTHING TO DO: noupdate=0 ir records + +NEW ir.rule: repair.repair_order_rule (noupdate) +DEL ir.rule: repair.repair_rule (noupdate) +# DONE: pre-migration: renamed xmlid + +NEW ir.rule: repair.repair_fee_rule (noupdate) +NEW ir.rule: repair.repair_line_rule (noupdate) +# NOTHING TO DO: New records diff --git a/openupgrade_scripts/scripts/resource/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/resource/14.0.1.1/upgrade_analysis.txt index 769bc19476fb..35329c73f409 100644 --- a/openupgrade_scripts/scripts/resource/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/resource/14.0.1.1/upgrade_analysis.txt @@ -1,6 +1,4 @@ ---Models in module 'resource'--- ---Fields in module 'resource'--- -resource / resource.calendar / active (boolean) : NEW hasdefault -resource / resource.calendar / attendance_ids (one2many) : now a function -resource / resource.calendar / global_leave_ids (one2many) : now a function +resource / resource.calendar / active (boolean) : NEW hasdefault: default ---XML records in module 'resource'--- diff --git a/openupgrade_scripts/scripts/sale/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/sale/14.0.1.1/noupdate_changes.xml index 630ac5619567..ff7ad123c070 100644 --- a/openupgrade_scripts/scripts/sale/14.0.1.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/sale/14.0.1.1/noupdate_changes.xml @@ -3,6 +3,26 @@ ${object.company_id.name} ${object.state in ('draft', 'sent') and (ctx.get('proforma') and 'Proforma' or 'Quotation') or 'Order'} (Ref ${object.name or 'n/a' }) +

    @@ -112,12 +132,14 @@ - - + + [('company_id', 'in', company_ids)] + + + + [('company_id', 'in', company_ids)] + + [('move_type', 'in', ('out_invoice', 'out_refund'))] diff --git a/openupgrade_scripts/scripts/sale_coupon_delivery/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_coupon_delivery/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..ca9008d53b4f --- /dev/null +++ b/openupgrade_scripts/scripts/sale_coupon_delivery/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'sale_coupon_delivery'--- +---Fields in module 'sale_coupon_delivery'--- +---XML records in module 'sale_coupon_delivery'--- +---nothing has changed in this module-- +NOTHING TO DO diff --git a/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis.txt index 3d576b1fdcc0..57e9ee2934cb 100644 --- a/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis.txt @@ -1,6 +1,6 @@ ---Models in module 'sale_expense'--- ---Fields in module 'sale_expense'--- -sale_expense / hr.expense / sale_order_id (many2one) : now a function +sale_expense / hr.expense / analytic_account_id (False) : NEW mode: modify, hasdefault: compute ---XML records in module 'sale_expense'--- DEL digest.tip: sale_expense.digest_tip_sale_expense_0 NEW ir.ui.view: sale_expense.hr_expense_tree_view_inherit_sale_expense diff --git a/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis_work.txt index 796d497ff233..dc20b0d0b42f 100644 --- a/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/sale_expense/14.0.1.0/upgrade_analysis_work.txt @@ -1,9 +1,9 @@ ---Models in module 'sale_expense'--- ---Fields in module 'sale_expense'--- sale_expense / hr.expense / sale_order_id (many2one) : now a function -# NOTHING TO DO +# NOTHING TO DO: Turned into computed writable ---XML records in module 'sale_expense'--- DEL digest.tip: sale_expense.digest_tip_sale_expense_0 NEW ir.ui.view: sale_expense.hr_expense_tree_view_inherit_sale_expense -# NOTHING TO DO +# NOTHING TO DO: noupdate=0 records diff --git a/openupgrade_scripts/scripts/sale_management/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/sale_management/14.0.1.0/noupdate_changes.xml index 428fa47ce72e..0fadad619bf2 100644 --- a/openupgrade_scripts/scripts/sale_management/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/sale_management/14.0.1.0/noupdate_changes.xml @@ -1,6 +1,7 @@ - + + [('company_id', 'in', company_ids + [False])] + + diff --git a/openupgrade_scripts/scripts/sale_margin/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/sale_margin/14.0.1.0/pre-migration.py index 9a7dcf66297c..2665034ffc5b 100644 --- a/openupgrade_scripts/scripts/sale_margin/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/sale_margin/14.0.1.0/pre-migration.py @@ -1,19 +1,27 @@ from openupgradelib import openupgrade -@openupgrade.migrate() -def migrate(env, installed_version): +def recompute_margin_percent(env): openupgrade.logged_query( env.cr, """ - ALTER TABLE sale_order_line - ADD COLUMN IF NOT EXISTS margin_percent double precision; + UPDATE sale_order + SET margin_percent = percent / 100; - ALTER TABLE sale_order - ADD COLUMN IF NOT EXISTS margin_percent double precision; + UPDATE sale_order_line + SET margin_percent = margin_percent / 100; """, ) + +def fast_filled_margin_percent(env): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE sale_order_line + ADD COLUMN IF NOT EXISTS margin_percent double precision; + """, + ) openupgrade.logged_query( env.cr, """ @@ -24,3 +32,22 @@ def migrate(env, installed_version): SET margin_percent = COALESCE(margin / NULLIF(amount_untaxed, 0), 0); """, ) + + +@openupgrade.migrate() +def migrate(env, installed_version): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE sale_order + ADD COLUMN IF NOT EXISTS margin_percent double precision; + """, + ) + # If sale_order_margin_percent module was installed, + # recompute margin_percent field." + if openupgrade.column_exists( + env.cr, "sale_order_line", "margin_percent" + ) and openupgrade.column_exists(env.cr, "sale_order", "percent"): + recompute_margin_percent(env) + else: + fast_filled_margin_percent(env) diff --git a/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis.txt index 85a9f8674109..e24724cec430 100644 --- a/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis.txt @@ -2,6 +2,6 @@ ---Fields in module 'sale_margin'--- sale_margin / sale.order / margin_percent (float) : NEW isfunction: function, stored sale_margin / sale.order.line / margin_percent (float) : NEW isfunction: function, stored -sale_margin / sale.order.line / purchase_price (float) : now a function ---XML records in module 'sale_margin'--- +NEW ir.ui.view: sale_margin.sale_margin_sale_order_graph NEW ir.ui.view: sale_margin.sale_margin_sale_order_pivot diff --git a/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis_work.txt index cf54d8eb6172..0ffa1e8fc32d 100644 --- a/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/sale_margin/14.0.1.0/upgrade_analysis_work.txt @@ -2,7 +2,7 @@ ---Fields in module 'sale_margin'--- sale_margin / sale.order / margin_percent (float) : NEW : function, stored sale_margin / sale.order.line / margin_percent (float) : NEW isfunction: function, stored -# DONE: pre-migration fast filled +# DONE: pre-migration fast filled and recompute if the column exists sale_margin / sale.order.line / purchase_price (float) : now a function # NOTHING TO DO diff --git a/openupgrade_scripts/scripts/sale_mrp/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_mrp/14.0.1.0/upgrade_analysis_work.txt index 6b071b7cedc2..fefd326ef1ca 100644 --- a/openupgrade_scripts/scripts/sale_mrp/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/sale_mrp/14.0.1.0/upgrade_analysis_work.txt @@ -4,4 +4,4 @@ DEL ir.model.access: sale_mrp.access_mrp_bom_salesman NEW ir.ui.view: sale_mrp.mrp_production_form_view_sale NEW ir.ui.view: sale_mrp.sale_order_form_mrp -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO: noupdate=0 ir records diff --git a/openupgrade_scripts/scripts/sale_product_configurator/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_product_configurator/14.0.1.0/upgrade_analysis_work.txt index 0fd330251d38..6fbe023c7c2f 100644 --- a/openupgrade_scripts/scripts/sale_product_configurator/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/sale_product_configurator/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'sale_product_configurator'--- ---XML records in module 'sale_product_configurator'--- NEW ir.model.access: sale_product_configurator.access_sale_product_configurator -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/sale_purchase/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_purchase/14.0.1.0/upgrade_analysis_work.txt index 3ea1b2986dd0..2e47d7808751 100644 --- a/openupgrade_scripts/scripts/sale_purchase/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/sale_purchase/14.0.1.0/upgrade_analysis_work.txt @@ -4,4 +4,4 @@ NEW ir.ui.view: sale_purchase.purchase_order_inherited_form_sale NEW ir.ui.view: sale_purchase.sale_order_inherited_form_purchase DEL ir.ui.view: sale_purchase.sale_order_form_view_inherit -# NOTHING TO DO: noupdate="0" records +# View refactoring, nothing to do. diff --git a/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis.txt index 01157581272b..a752ba836ab5 100644 --- a/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis.txt @@ -1,6 +1,6 @@ ---Models in module 'sale_stock'--- ---Fields in module 'sale_stock'--- -sale_stock / res.users / property_warehouse_id (many2one): NEW relation: stock.warehouse, hasdefault +sale_stock / res.users / property_warehouse_id (many2one): NEW relation: stock.warehouse sale_stock / sale.order.line / warehouse_id (many2one) : not a function anymore sale_stock / sale.order.line / warehouse_id (many2one) : now related ---XML records in module 'sale_stock'--- diff --git a/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis_work.txt index ff18d4e46cb3..61a780739a57 100644 --- a/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/sale_stock/14.0.1.0/upgrade_analysis_work.txt @@ -18,4 +18,4 @@ NEW ir.ui.view: sale_stock.res_users_view_form_preferences NEW ir.ui.view: sale_stock.res_users_view_simple_form NEW ir.ui.view: sale_stock.sale_order_cancel_view_form_inherit NEW ir.ui.view: sale_stock.sale_report_product_product_replenishment -# NOTHING TO DO +# NOTHING TO DO: noupdate=0 ir records diff --git a/openupgrade_scripts/scripts/sale_timesheet/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/sale_timesheet/14.0.1.0/upgrade_analysis.txt index 6b3101dc1f8d..92a4b485b503 100644 --- a/openupgrade_scripts/scripts/sale_timesheet/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/sale_timesheet/14.0.1.0/upgrade_analysis.txt @@ -2,6 +2,7 @@ new model project.task.create.sale.order [transient] ---Fields in module 'sale_timesheet'--- sale_timesheet / account.analytic.line / non_allow_billable (boolean) : NEW +sale_timesheet / account.analytic.line / so_line (False) : NEW mode: modify, hasdefault: compute sale_timesheet / account.analytic.line / timesheet_invoice_type (selection): selection_keys is now '['billable_fixed', 'billable_time', 'non_billable', 'non_billable_project', 'non_billable_timesheet']' ('['billable_fixed', 'billable_time', 'non_billable', 'non_billable_project']') sale_timesheet / product.product / project_id (many2one) : module is now 'sale_project' ('sale_timesheet') sale_timesheet / product.product / project_template_id (many2one): module is now 'sale_project' ('sale_timesheet') @@ -10,13 +11,13 @@ sale_timesheet / product.template / project_id (many2one) : modu sale_timesheet / product.template / project_template_id (many2one): module is now 'sale_project' ('sale_timesheet') sale_timesheet / product.template / service_tracking (selection) : module is now 'sale_project' ('sale_timesheet') sale_timesheet / project.project / allow_billable (boolean) : NEW -sale_timesheet / project.project / bill_type (selection) : NEW selection_keys: ['customer_project', 'customer_task'], hasdefault +sale_timesheet / project.project / bill_type (selection) : NEW selection_keys: ['customer_project', 'customer_task'], hasdefault: default sale_timesheet / project.project / billable_type (selection) : DEL selection_keys: ['employee_rate', 'no', 'task_rate'] -sale_timesheet / project.project / pricing_type (selection) : NEW selection_keys: ['employee_rate', 'fixed_rate'], hasdefault +sale_timesheet / project.project / pricing_type (selection) : NEW selection_keys: ['employee_rate', 'fixed_rate'], hasdefault: default sale_timesheet / project.project / sale_line_id (many2one) : module is now 'sale_project' ('sale_timesheet') sale_timesheet / project.project / sale_order_id (many2one) : module is now 'sale_project' ('sale_timesheet') -sale_timesheet / project.project / timesheet_product_id (many2one): NEW relation: product.product, hasdefault, isfunction: function, stored -sale_timesheet / project.sale.line.employee.map / currency_id (many2one) : NEW relation: res.currency, isfunction: function, stored +sale_timesheet / project.project / timesheet_product_id (many2one): NEW relation: product.product, hasdefault: default +sale_timesheet / project.sale.line.employee.map / currency_id (many2one) : NEW relation: res.currency, hasdefault: compute sale_timesheet / project.sale.line.employee.map / price_unit (float) : is now stored sale_timesheet / project.sale.line.employee.map / price_unit (float) : not related anymore sale_timesheet / project.sale.line.employee.map / price_unit (float) : now a function @@ -24,7 +25,7 @@ sale_timesheet / project.sale.line.employee.map / timesheet_product_id (many2one sale_timesheet / project.task / billable_type (selection) : DEL selection_keys: ['employee_rate', 'no', 'task_rate'] sale_timesheet / project.task / non_allow_billable (boolean) : NEW sale_timesheet / project.task / sale_line_id (many2one) : module is now 'sale_project' ('sale_timesheet') -sale_timesheet / project.task / sale_line_id (many2one) : now a function +sale_timesheet / project.task / sale_order_id (False) : NEW mode: modify, hasdefault: compute sale_timesheet / project.task / sale_order_id (many2one) : module is now 'sale_project' ('sale_timesheet') sale_timesheet / project.task / sale_order_id (many2one) : not a function anymore sale_timesheet / project.task / timesheet_product_id (many2one): NEW relation: product.product @@ -49,7 +50,7 @@ NEW ir.model.access: sale_timesheet.access_project_create_sale_order_line NEW ir.model.access: sale_timesheet.access_project_task_create_sale_order DEL ir.model.access: sale_timesheet.access_sale_order_line_project_manager [renamed to sale_project module] DEL ir.model.access: sale_timesheet.access_sale_order_project_manager [renamed to sale_project module] -NEW ir.model.constraint: sale_timesheet.constraint_project_project_timesheet_product_required_if_billable_and_timesheets +NEW ir.model.constraint: sale_timesheet.constraint_project_project_timesheet_product_required_if_billable_and_time DEL ir.model.constraint: sale_timesheet.constraint_project_project_sale_order_required_if_sale_line [renamed to sale_project module] DEL ir.rule: sale_timesheet.sale_order_line_rule_project_manager [renamed to sale_project module] (noupdate) NEW ir.ui.view: sale_timesheet.portal_my_timesheets_inherit diff --git a/openupgrade_scripts/scripts/sales_team/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/sales_team/14.0.1.0/noupdate_changes.xml new file mode 100644 index 000000000000..883848b63ed9 --- /dev/null +++ b/openupgrade_scripts/scripts/sales_team/14.0.1.0/noupdate_changes.xml @@ -0,0 +1,6 @@ + + + + [('company_id', 'in', company_ids + [False])] + + diff --git a/openupgrade_scripts/scripts/sales_team/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/sales_team/14.0.1.0/post-migration.py new file mode 100644 index 000000000000..7f97eaeb1917 --- /dev/null +++ b/openupgrade_scripts/scripts/sales_team/14.0.1.0/post-migration.py @@ -0,0 +1,6 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env.cr, "sales_team", "14.0.1.0/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/sms/14.0.2.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/sms/14.0.2.1/upgrade_analysis.txt index 2263bbc94c1e..ca9f88d036bc 100644 --- a/openupgrade_scripts/scripts/sms/14.0.2.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/sms/14.0.2.1/upgrade_analysis.txt @@ -9,9 +9,11 @@ sms / mail.test.activity / message_has_sms_error (boolean): previ sms / mail.test.cc / message_has_sms_error (boolean): previously in module test_mail sms / mail.test.field.type / message_has_sms_error (boolean): previously in module test_mail sms / mail.test.gateway / message_has_sms_error (boolean): previously in module test_mail +sms / mail.test.gateway.groups / message_has_sms_error (boolean): previously in module test_mail sms / mail.test.multi.company / message_has_sms_error (boolean): previously in module test_mail sms / mail.test.simple / message_has_sms_error (boolean): previously in module test_mail sms / mail.test.track / message_has_sms_error (boolean): previously in module test_mail +sms / mail.test.track.selection / message_has_sms_error (boolean): previously in module test_mail sms / mailing.contact / message_has_sms_error (boolean): module is now 'mass_mailing' ('sms') sms / mailing.mailing / message_has_sms_error (boolean): module is now 'mass_mailing' ('sms') sms / sms.sms / error_code (selection) : selection_keys is now '['sms_acc', 'sms_blacklist', 'sms_credit', 'sms_duplicate', 'sms_number_format', 'sms_number_missing', 'sms_server']' ('['sms_blacklist', 'sms_credit', 'sms_duplicate', 'sms_number_format', 'sms_number_missing', 'sms_server']') diff --git a/openupgrade_scripts/scripts/snailmail/14.0.0.3/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/snailmail/14.0.0.3/upgrade_analysis_work.txt index d8d27891b630..229a2c72b462 100644 --- a/openupgrade_scripts/scripts/snailmail/14.0.0.3/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/snailmail/14.0.0.3/upgrade_analysis_work.txt @@ -12,4 +12,4 @@ NEW ir.model.access: snailmail.access_snailmail_letter_format_error NEW ir.model.access: snailmail.access_snailmail_letter_missing_required_fields NEW ir.ui.view: snailmail.snailmail_confirm_view NEW ir.ui.view: snailmail.tests_assets -# Nothing to do \ No newline at end of file +# Nothing to do diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml index e555c0fb7431..bf734aab87d2 100644 --- a/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml @@ -35,66 +35,72 @@ - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids)] + - - - - - + + - + + --> - + [('company_id', 'in', company_ids + [False])] + - - - - + - + [('company_id', 'in', company_ids + [False])] + - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - + [('company_id', 'in', company_ids + [False])] + [('company_id', 'in', company_ids)] - + - - + + - + - - + + --> - + [('company_id', 'in', company_ids + [False])] + - + [('company_id', 'in', company_ids + [False])] + - - + + - + - - - + + San Francisco + --> diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py b/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py index 0bd59ba78142..c49f7a0419d7 100644 --- a/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py +++ b/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py @@ -1,4 +1,5 @@ # Copyright 2021 ForgeFlow S.L. +# Copyright 2023 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openupgradelib import openupgrade @@ -36,10 +37,10 @@ def merge_priorities(env): def recompute_stock_picking_scheduled_date(env): env.cr.execute( """ - SELECT sp.id + SELECT DISTINCT sp.id FROM stock_picking sp JOIN stock_move sm ON sm.picking_id = sp.id - WHERE sm.state NOT IN ('done', 'cancel')""" + WHERE sp.state NOT IN ('done', 'cancel')""" ) picking_ids = [pick[0] for pick in env.cr.fetchall()] if picking_ids: @@ -47,6 +48,53 @@ def recompute_stock_picking_scheduled_date(env): pickings._compute_scheduled_date() +def save_stock_picking_date_deadline(env): + openupgrade.logged_query( + env.cr, + """ + WITH picking_deadline AS ( + SELECT sp.id, + CASE + WHEN sp.move_type = 'direct' THEN + MIN(sm.date_deadline) + ELSE + MAX(sm.date_deadline) + END as date_deadline + FROM stock_picking sp + JOIN stock_move sm ON sm.picking_id = sp.id + WHERE sm.date_deadline IS NOT NULL + GROUP BY sp.id, sp.move_type + ) + UPDATE stock_picking sp + SET date_deadline = picking_deadline.date_deadline + FROM picking_deadline + WHERE picking_deadline.id = sp.id + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE stock_picking sp + SET has_deadline_issue = TRUE + WHERE date_deadline IS NOT NULL AND date_deadline < scheduled_date + """, + ) + + +def recompute_stock_move_delay_alert_date(env): + env.cr.execute( + """ + SELECT sm.id + FROM stock_move sm + WHERE sm.state NOT IN ('done', 'cancel') + """ + ) + move_ids = [move[0] for move in env.cr.fetchall()] + if move_ids: + moves = env["stock.move"].browse(move_ids) + moves._compute_delay_alert_date() + + def delete_domain_from_view(env): view = env.ref("stock.report_stock_quantity_action") view.domain = None @@ -59,6 +107,8 @@ def migrate(env, version): delete_domain_from_view(env) openupgrade.load_data(env.cr, "stock", "14.0.1.1/noupdate_changes.xml") recompute_stock_picking_scheduled_date(env) + save_stock_picking_date_deadline(env) + recompute_stock_move_delay_alert_date(env) openupgrade.delete_record_translations( env.cr, "stock", ["mail_template_data_delivery_confirmation"] ) diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py b/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py index 6493e44b59a7..efa6f062cd3e 100644 --- a/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py +++ b/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py @@ -18,13 +18,27 @@ ("stock.access_stock_picking_portal", "sale_stock.access_stock_picking_portal"), ] +_field_additons = [ + ("delay_alert_date", "stock.move", "stock_move", "datetime", False, "stock"), + ("date_deadline", "stock.picking", "stock_picking", "datetime", False, "stock"), + ( + "has_deadline_issue", + "stock.picking", + "stock_picking", + "boolean", + False, + "stock", + False, + ), +] + def fast_precreate_orderpoint_product_category_id(env): openupgrade.logged_query( env.cr, """ ALTER TABLE stock_warehouse_orderpoint - ADD COLUMN product_category_id integer""", + ADD COLUMN IF NOT EXISTS product_category_id integer""", ) openupgrade.logged_query( env.cr, @@ -42,6 +56,7 @@ def migrate(env, version): openupgrade.copy_columns(env.cr, _column_copies) openupgrade.rename_fields(env, _field_renames) openupgrade.rename_xmlids(env.cr, _xmlid_renames) + openupgrade.add_fields(env, _field_additons) fast_precreate_orderpoint_product_category_id(env) # Disappeared constraint openupgrade.logged_query( @@ -52,3 +67,7 @@ def migrate(env, version): openupgrade.delete_records_safely_by_xml_id( env, ["stock.constraint_stock_production_lot_name_ref_uniq"] ) + # Remove SQL view report_stock_forecast not used anymore in Odoo v14.0 + openupgrade.logged_query( + env.cr, "DROP VIEW IF EXISTS report_stock_forecast CASCADE" + ) diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis.txt index 1c6d1a2a62de..971cad8e3fad 100644 --- a/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis.txt @@ -15,7 +15,7 @@ stock / stock.inventory / message_ids (one2many) : NEW re stock / stock.inventory / message_main_attachment_id (many2one): NEW relation: ir.attachment stock / stock.inventory / website_message_ids (one2many): NEW relation: mail.message stock / stock.move / date_deadline (datetime) : NEW -stock / stock.move / date_expected (datetime) : DEL required, req_default: function +stock / stock.move / date_expected (datetime) : DEL required stock / stock.move / delay_alert (boolean) : DEL stock / stock.move / delay_alert_date (datetime) : NEW isfunction: function, stored stock / stock.move / orderpoint_id (many2one) : NEW relation: stock.warehouse.orderpoint @@ -25,7 +25,7 @@ stock / stock.move / propagate_date (boolean) : DEL stock / stock.move / propagate_date_minimum_delta (integer): DEL stock / stock.picking / _order : _order is now 'priority desc, scheduled_date asc, id desc' ('priority desc, date asc, id desc') stock / stock.picking / date_deadline (datetime) : NEW isfunction: function, stored -stock / stock.picking / has_deadline_issue (boolean) : NEW hasdefault, isfunction: function, stored +stock / stock.picking / has_deadline_issue (boolean) : NEW isfunction: function, stored stock / stock.picking / priority (selection) : not a function anymore stock / stock.picking / priority (selection) : selection_keys is now '['0', '1']' ('['0', '1', '2', '3']') stock / stock.picking / signature (binary) : NEW attachment: True @@ -34,12 +34,12 @@ stock / stock.rule / propagate_date (boolean) : DEL stock / stock.rule / propagate_date_minimum_delta (integer): DEL stock / stock.warehouse.orderpoint / _order : _order is now 'location_id,company_id,id' ('id') stock / stock.warehouse.orderpoint / lead_days (integer) : DEL -stock / stock.warehouse.orderpoint / lead_type (selection) : DEL required, selection_keys: ['net', 'supplier'], req_default: function +stock / stock.warehouse.orderpoint / lead_type (selection) : DEL required, selection_keys: ['net', 'supplier'] stock / stock.warehouse.orderpoint / product_category_id (many2one): NEW relation: product.category, isrelated: related, stored -stock / stock.warehouse.orderpoint / qty_to_order (float) : NEW isfunction: function, stored +stock / stock.warehouse.orderpoint / qty_to_order (float) : NEW hasdefault: compute stock / stock.warehouse.orderpoint / route_id (many2one) : NEW relation: stock.location.route stock / stock.warehouse.orderpoint / snoozed_until (date) : NEW -stock / stock.warehouse.orderpoint / trigger (selection) : NEW required, selection_keys: ['auto', 'manual'], req_default: function, hasdefault +stock / stock.warehouse.orderpoint / trigger (selection) : NEW required, selection_keys: ['auto', 'manual'], hasdefault: default ---XML records in module 'stock'--- NEW digest.tip: stock.digest_tip_stock_0 NEW ir.actions.act_window: stock.action_orderpoint diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt index 3970be1b35a5..caace4eb8eaf 100644 --- a/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt @@ -27,7 +27,7 @@ stock / stock.move / date_expected (datetime) : DEL re # DONE: pre-migration: renamed field stock / stock.move / delay_alert_date (datetime) : NEW isfunction: function, stored -# NOTHING TO DO: computed during loading +# DONE: pre-migration: Create field, post-migration: Fill data stock / stock.move / delay_alert (boolean) : DEL stock / stock.move / propagate_date (boolean) : DEL @@ -49,7 +49,7 @@ stock / stock.picking / _order : _order stock / stock.picking / date_deadline (datetime) : NEW isfunction: function, stored stock / stock.picking / has_deadline_issue (boolean) : NEW hasdefault, isfunction: function, stored -# NOTHING TO DO: computed during loading +# DONE: pre-migration: Create fields, post-migration: Fill fields stock / stock.picking / priority (selection) : not a function anymore stock / stock.picking / priority (selection) : selection_keys is now '['0', '1']' ('['0', '1', '2', '3']') diff --git a/openupgrade_scripts/scripts/stock_account/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/stock_account/14.0.1.1/noupdate_changes.xml index 61406e964624..f438b4f40fc1 100644 --- a/openupgrade_scripts/scripts/stock_account/14.0.1.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/stock_account/14.0.1.1/noupdate_changes.xml @@ -1,6 +1,9 @@ - - + + + diff --git a/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/noupdate_changes.xml index d85ba3eee71c..60fc16ba551b 100644 --- a/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/noupdate_changes.xml @@ -1,6 +1,7 @@ + [('company_id', 'in', company_ids)] diff --git a/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/openupgrade_analysis_work.txt b/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/openupgrade_analysis_work.txt new file mode 100644 index 000000000000..b4065f399268 --- /dev/null +++ b/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/openupgrade_analysis_work.txt @@ -0,0 +1,9 @@ +---Models in module 'stock_landed_costs'--- +---Fields in module 'stock_landed_costs'--- +stock_landed_costs / product.template / split_method_landed_cost (selection): NEW selection_keys: ['by_current_cost_price', 'by_quantity', 'by_volume', 'by_weight', 'equal'] +stock_landed_costs / stock.landed.cost / target_model (selection) : NEW required, selection_keys: ['picking'], req_default: function, hasdefault +# NOTHING TO DO + +---XML records in module 'stock_landed_costs'--- +ir.rule: stock_landed_costs.stock_landed_cost_rule (noupdate) (noupdate switched) +# DONE: pre-migration: switched noupdate diff --git a/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/upgrade_analysis.txt index e1085a1e6474..4168fa7a6e62 100644 --- a/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/stock_landed_costs/14.0.1.1/upgrade_analysis.txt @@ -1,6 +1,6 @@ ---Models in module 'stock_landed_costs'--- ---Fields in module 'stock_landed_costs'--- stock_landed_costs / product.template / split_method_landed_cost (selection): NEW selection_keys: ['by_current_cost_price', 'by_quantity', 'by_volume', 'by_weight', 'equal'] -stock_landed_costs / stock.landed.cost / target_model (selection) : NEW required, selection_keys: ['picking'], req_default: function, hasdefault +stock_landed_costs / stock.landed.cost / target_model (selection) : NEW required, selection_keys: ['picking'], hasdefault: default ---XML records in module 'stock_landed_costs'--- ir.rule: stock_landed_costs.stock_landed_cost_rule (noupdate) (noupdate switched) diff --git a/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/pre-migration.py new file mode 100644 index 000000000000..36fb45238433 --- /dev/null +++ b/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/pre-migration.py @@ -0,0 +1,39 @@ +# Copyright 2023 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + + +def _prefill_scheduled_date(env): + """Add manually the field and do the same as the compute, but through SQL.""" + openupgrade.add_fields( + env, + [ + ( + "scheduled_date", + "stock.picking.batch", + "stock_picking_batch", + "datetime", + False, + "stock_picking_batch", + ) + ], + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE stock_picking_batch spb + SET scheduled_date = sub.scheduled_date + FROM ( + SELECT batch_id, MIN(scheduled_date) AS scheduled_date + FROM stock_picking + WHERE batch_id IS NOT NULL + GROUP BY batch_id + ) sub + WHERE spb.id = sub.batch_id + """, + ) + + +@openupgrade.migrate() +def migrate(env, version): + _prefill_scheduled_date(env) diff --git a/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis.txt index 9ee722ed2902..7a8f3ea1dece 100644 --- a/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'stock_picking_batch'--- ---Fields in module 'stock_picking_batch'--- stock_picking_batch / stock.picking.batch / picking_type_id (many2one) : NEW relation: stock.picking.type -stock_picking_batch / stock.picking.batch / scheduled_date (datetime) : NEW isfunction: function, stored +stock_picking_batch / stock.picking.batch / scheduled_date (datetime) : NEW hasdefault: compute stock_picking_batch / stock.picking.batch / state (selection) : now a function ---XML records in module 'stock_picking_batch'--- DEL ir.actions.act_window: stock_picking_batch.stock_picking_to_batch_action diff --git a/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis_work.txt index 007adca3b61a..0a769b068840 100644 --- a/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/stock_picking_batch/14.0.1.0/upgrade_analysis_work.txt @@ -1,9 +1,13 @@ ---Models in module 'stock_picking_batch'--- ---Fields in module 'stock_picking_batch'--- stock_picking_batch / stock.picking.batch / picking_type_id (many2one) : NEW relation: stock.picking.type +# NOTHING TO DO: New field that restricts the elegible pickings if filled, but can be null, so we keep it that way for not altering behavior + stock_picking_batch / stock.picking.batch / scheduled_date (datetime) : NEW isfunction: function, stored +# DONE: pre-migration: pre-created and filled by SQL for performance + stock_picking_batch / stock.picking.batch / state (selection) : now a function -# NOTHING TO DO +# NOTHING TO DO: Existing state values should be correct ---XML records in module 'stock_picking_batch'--- DEL ir.actions.act_window: stock_picking_batch.stock_picking_to_batch_action @@ -11,4 +15,4 @@ NEW ir.model.access: stock_picking_batch.access_stock_picking_to_batch NEW ir.ui.view: stock_picking_batch.view_move_line_tree NEW ir.ui.view: stock_picking_batch.view_picking_form_inherited NEW ir.ui.view: stock_picking_batch.view_picking_move_tree_inherited -# NOTHING TO DO +# NOTHING TO DO: noupdate=0 data diff --git a/openupgrade_scripts/scripts/survey/14.0.3.2/post-migration.py b/openupgrade_scripts/scripts/survey/14.0.3.2/post-migration.py index 94bb25df007d..2bbe51a31f83 100644 --- a/openupgrade_scripts/scripts/survey/14.0.3.2/post-migration.py +++ b/openupgrade_scripts/scripts/survey/14.0.3.2/post-migration.py @@ -28,3 +28,9 @@ def migrate(env, version): map_survey_user_input_line_answer_type(env) map_survey_question_question_type(env) openupgrade.load_data(env.cr, "survey", "14.0.3.2/noupdate_changes.xml") + # cron of 9.0 (noupdate) calling survey.user_input.do_clean_emptys, a method + # removed in 14.0: databases upgraded before the 10.0 script deleted it still + # have it, and it would fail at every run + openupgrade.delete_records_safely_by_xml_id( + env, ["survey.ir_cron_clean_empty_surveys"] + ) diff --git a/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis.txt index 6cfd9d280f17..a94ea5a39ee3 100644 --- a/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis.txt @@ -15,42 +15,39 @@ survey / survey.question / answer_numerical_box (float) : NEW survey / survey.question / answer_score (float) : NEW survey / survey.question / display_mode (selection) : DEL selection_keys: ['columns', 'dropdown'] survey / survey.question / is_conditional (boolean) : NEW -survey / survey.question / is_scored_question (boolean) : NEW isfunction: function, stored +survey / survey.question / is_scored_question (boolean) : NEW hasdefault: compute survey / survey.question / is_time_limited (boolean) : NEW survey / survey.question / labels_ids (one2many) : DEL relation: survey.label survey / survey.question / labels_ids_2 (one2many) : DEL relation: survey.label survey / survey.question / matrix_row_ids (one2many) : NEW relation: survey.question.answer -survey / survey.question / question_type (selection) : now a function survey / survey.question / question_type (selection) : selection_keys is now '['char_box', 'date', 'datetime', 'matrix', 'multiple_choice', 'numerical_box', 'simple_choice', 'text_box']' ('['date', 'datetime', 'free_text', 'matrix', 'multiple_choice', 'numerical_box', 'simple_choice', 'textbox']') -survey / survey.question / save_as_email (boolean) : NEW isfunction: function, stored -survey / survey.question / save_as_nickname (boolean) : NEW isfunction: function, stored +survey / survey.question / save_as_email (boolean) : NEW hasdefault: compute +survey / survey.question / save_as_nickname (boolean) : NEW hasdefault: compute survey / survey.question / suggested_answer_ids (one2many): NEW relation: survey.question.answer survey / survey.question / time_limit (integer) : NEW -survey / survey.question / triggering_answer_id (many2one): NEW relation: survey.question.answer, isfunction: function, stored -survey / survey.question / triggering_question_id (many2one): NEW relation: survey.question, isfunction: function, stored +survey / survey.question / triggering_answer_id (many2one): NEW relation: survey.question.answer, hasdefault: compute +survey / survey.question / triggering_question_id (many2one): NEW relation: survey.question, hasdefault: compute survey / survey.question / user_input_line_ids (one2many): relation is now 'survey.user_input.line' ('survey.user_input_line') [nothing to do] survey / survey.question.answer / matrix_question_id (many2one) : NEW relation: survey.question survey / survey.question.answer / value_image (binary) : NEW attachment: True survey / survey.survey / background_image (binary) : NEW attachment: True -survey / survey.survey / category (selection) : DEL required, selection_keys: ['default'], req_default: function +survey / survey.survey / category (selection) : DEL required, selection_keys: ['default'] survey / survey.survey / certificate (boolean) : DEL -survey / survey.survey / certification (boolean) : NEW isfunction: function, stored -survey / survey.survey / certification_give_badge (boolean): now a function -survey / survey.survey / certification_report_layout (selection): NEW selection_keys: ['classic_blue', 'classic_gold', 'classic_purple', 'modern_blue', 'modern_gold', 'modern_purple'], hasdefault +survey / survey.survey / certification (boolean) : NEW hasdefault: compute +survey / survey.survey / certification_report_layout (selection): NEW selection_keys: ['classic_blue', 'classic_gold', 'classic_purple', 'modern_blue', 'modern_gold', 'modern_purple'], hasdefault: default survey / survey.survey / description_done (html) : NEW -survey / survey.survey / is_attempts_limited (boolean) : now a function -survey / survey.survey / passing_score (float) : DEL required, req_default: function -survey / survey.survey / progression_mode (selection) : NEW selection_keys: ['number', 'percent'], hasdefault -survey / survey.survey / scoring_success_min (float) : NEW hasdefault -survey / survey.survey / session_code (char) : NEW hasdefault +survey / survey.survey / passing_score (float) : DEL required +survey / survey.survey / progression_mode (selection) : NEW selection_keys: ['number', 'percent'], hasdefault: default +survey / survey.survey / scoring_success_min (float) : NEW hasdefault: default +survey / survey.survey / session_code (char) : NEW hasdefault: default survey / survey.survey / session_question_id (many2one): NEW relation: survey.question survey / survey.survey / session_question_start_time (datetime): NEW survey / survey.survey / session_speed_rating (boolean): NEW survey / survey.survey / session_start_time (datetime) : NEW survey / survey.survey / session_state (selection) : NEW selection_keys: ['in_progress', 'ready'] survey / survey.survey / thank_you_message (html) : DEL -survey / survey.user_input / access_token (char) : NEW required, req_default: function, hasdefault -survey / survey.user_input / input_type (selection) : DEL required, selection_keys: ['link', 'manually'], req_default: function +survey / survey.user_input / access_token (char) : NEW required +survey / survey.user_input / input_type (selection) : DEL required, selection_keys: ['link', 'manually'] survey / survey.user_input / is_session_answer (boolean) : NEW survey / survey.user_input / nickname (char) : NEW survey / survey.user_input / predefined_question_ids (many2many): NEW relation: survey.question @@ -61,7 +58,7 @@ survey / survey.user_input / scoring_percentage (float) : NEW is survey / survey.user_input / scoring_success (boolean) : NEW isfunction: function, stored survey / survey.user_input / scoring_total (float) : NEW isfunction: function, stored survey / survey.user_input / state (selection) : selection_keys is now '['done', 'in_progress', 'new']' ('['done', 'new', 'skip']') -survey / survey.user_input / token (char) : DEL required, req_default: function +survey / survey.user_input / token (char) : DEL required survey / survey.user_input / user_input_line_ids (one2many): relation is now 'survey.user_input.line' ('survey.user_input_line') [nothing to do] survey / survey.user_input.line / matrix_row_id (many2one) : NEW relation: survey.question.answer survey / survey.user_input.line / suggested_answer_id (many2one): NEW relation: survey.question.answer diff --git a/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis_work.txt index 5a501e67d6c6..0e543d8fd5ef 100644 --- a/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/survey/14.0.3.2/upgrade_analysis_work.txt @@ -277,3 +277,7 @@ NEW ir.ui.view: survey.user_input_session_manage NEW ir.ui.view: survey.user_input_session_manage_content NEW ir.ui.view: survey.user_input_session_open # NOTHING TO DO + +# Not in the analysis (no 13.0 module ships it): survey.ir_cron_clean_empty_surveys, noupdate +# cron of 9.0 calling survey.user_input.do_clean_emptys, removed in 14.0. +# DONE: post-migration: deleted (databases upgraded before the 10.0 script deleted it) diff --git a/openupgrade_scripts/scripts/test_access_rights/14.0.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_access_rights/14.0.0.0.1/upgrade_analysis.txt index 80e8a477a72a..0dd692d5ab8e 100644 --- a/openupgrade_scripts/scripts/test_access_rights/14.0.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_access_rights/14.0.0.0.1/upgrade_analysis.txt @@ -14,7 +14,7 @@ test_access_rights / test_access_right.parent / _inherits : test_access_rights / test_access_right.parent / obj_id (many2one) : NEW relation: test_access_right.some_obj, required test_access_rights / test_access_right.some_obj / categ_id (many2one) : NEW relation: test_access_right.obj_categ test_access_rights / test_access_right.some_obj / company_id (many2one) : NEW relation: res.company -test_access_rights / test_access_right.some_obj / forbidden (integer) : NEW hasdefault +test_access_rights / test_access_right.some_obj / forbidden (integer) : NEW hasdefault: default test_access_rights / test_access_right.some_obj / forbidden2 (integer) : NEW test_access_rights / test_access_right.some_obj / forbidden3 (integer) : NEW test_access_rights / test_access_right.some_obj / val (integer) : NEW diff --git a/openupgrade_scripts/scripts/test_base_automation/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_base_automation/14.0.1.0/upgrade_analysis.txt index e93e604e27ec..dd4f9785aa53 100644 --- a/openupgrade_scripts/scripts/test_base_automation/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_base_automation/14.0.1.0/upgrade_analysis.txt @@ -34,7 +34,7 @@ test_base_automation / test_base_automation.project / name (char) test_base_automation / test_base_automation.project / task_ids (one2many) : NEW relation: test_base_automation.task test_base_automation / test_base_automation.task / name (char) : NEW test_base_automation / test_base_automation.task / parent_id (many2one) : NEW relation: test_base_automation.task -test_base_automation / test_base_automation.task / project_id (many2one) : NEW relation: test_base_automation.project, isfunction: function, stored +test_base_automation / test_base_automation.task / project_id (many2one) : NEW relation: test_base_automation.project, hasdefault: compute ---XML records in module 'test_base_automation'--- NEW ir.model.access: test_base_automation.access_base_automation_lead_test [renamed from base_automation module] NEW ir.model.access: test_base_automation.access_base_automation_line_test [renamed from base_automation module] diff --git a/openupgrade_scripts/scripts/test_convert/14.0.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_convert/14.0.0.0.1/upgrade_analysis.txt index f3f36c73938d..29211b9c410c 100644 --- a/openupgrade_scripts/scripts/test_convert/14.0.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_convert/14.0.0.0.1/upgrade_analysis.txt @@ -3,8 +3,8 @@ new model test_convert.test_model new model test_convert.usered ---Fields in module 'test_convert'--- test_convert / test_convert.usered / name (char) : NEW -test_convert / test_convert.usered / tz (char) : NEW hasdefault -test_convert / test_convert.usered / user_id (many2one) : NEW relation: res.users, hasdefault +test_convert / test_convert.usered / tz (char) : NEW hasdefault: default +test_convert / test_convert.usered / user_id (many2one) : NEW relation: res.users, hasdefault: default ---XML records in module 'test_convert'--- NEW ir.model.access: test_convert.access_test_convert_test_model NEW ir.model.access: test_convert.access_test_convert_usered diff --git a/openupgrade_scripts/scripts/test_impex/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_impex/14.0.0.1/upgrade_analysis.txt index e1e2e8590499..4bebcfde6954 100644 --- a/openupgrade_scripts/scripts/test_impex/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_impex/14.0.0.1/upgrade_analysis.txt @@ -29,32 +29,32 @@ new model export.string.required new model export.text new model export.unique ---Fields in module 'test_impex'--- -test_impex / export.boolean / const (integer) : NEW hasdefault +test_impex / export.boolean / const (integer) : NEW hasdefault: default test_impex / export.boolean / value (boolean) : NEW -test_impex / export.date / const (integer) : NEW hasdefault +test_impex / export.date / const (integer) : NEW hasdefault: default test_impex / export.date / value (date) : NEW -test_impex / export.datetime / const (integer) : NEW hasdefault +test_impex / export.datetime / const (integer) : NEW hasdefault: default test_impex / export.datetime / value (datetime) : NEW -test_impex / export.decimal / const (integer) : NEW hasdefault +test_impex / export.decimal / const (integer) : NEW hasdefault: default test_impex / export.decimal / value (float) : NEW -test_impex / export.float / const (integer) : NEW hasdefault +test_impex / export.float / const (integer) : NEW hasdefault: default test_impex / export.float / value (float) : NEW -test_impex / export.function / const (integer) : NEW hasdefault +test_impex / export.function / const (integer) : NEW hasdefault: default test_impex / export.inherits.child / _inherits : NEW _inherits: {'export.inherits.parent': 'parent_id'} test_impex / export.inherits.child / parent_id (many2one) : NEW relation: export.inherits.parent, required test_impex / export.inherits.child / value (integer) : NEW test_impex / export.inherits.parent / value_parent (integer) : NEW -test_impex / export.integer / const (integer) : NEW hasdefault +test_impex / export.integer / const (integer) : NEW hasdefault: default test_impex / export.integer / value (integer) : NEW test_impex / export.m2o.str / child_id (many2one) : NEW relation: export.m2o.str.child test_impex / export.m2o.str.child / name (char) : NEW -test_impex / export.many2many / const (integer) : NEW hasdefault +test_impex / export.many2many / const (integer) : NEW hasdefault: default test_impex / export.many2many / value (many2many) : NEW relation: export.many2many.other test_impex / export.many2many.other / str (char) : NEW test_impex / export.many2many.other / value (integer) : NEW -test_impex / export.many2one / const (integer) : NEW hasdefault +test_impex / export.many2one / const (integer) : NEW hasdefault: default test_impex / export.many2one / value (many2one) : NEW relation: export.integer -test_impex / export.one2many / const (integer) : NEW hasdefault +test_impex / export.one2many / const (integer) : NEW hasdefault: default test_impex / export.one2many / value (one2many) : NEW relation: export.one2many.child test_impex / export.one2many.child / m2o (many2one) : NEW relation: export.integer test_impex / export.one2many.child / parent_id (many2one) : NEW relation: export.one2many @@ -68,26 +68,26 @@ test_impex / export.one2many.child.2 / str (char) : NEW test_impex / export.one2many.child.2 / value (integer) : NEW test_impex / export.one2many.multiple / child1 (one2many) : NEW relation: export.one2many.child.1 test_impex / export.one2many.multiple / child2 (one2many) : NEW relation: export.one2many.child.2 -test_impex / export.one2many.multiple / const (integer) : NEW hasdefault +test_impex / export.one2many.multiple / const (integer) : NEW hasdefault: default test_impex / export.one2many.multiple / parent_id (many2one) : NEW relation: export.one2many.recursive test_impex / export.one2many.multiple.child / parent_id (many2one) : NEW relation: export.one2many.multiple test_impex / export.one2many.multiple.child / str (char) : NEW test_impex / export.one2many.multiple.child / value (integer) : NEW test_impex / export.one2many.recursive / child (one2many) : NEW relation: export.one2many.multiple test_impex / export.one2many.recursive / value (integer) : NEW -test_impex / export.selection / const (integer) : NEW hasdefault +test_impex / export.selection / const (integer) : NEW hasdefault: default test_impex / export.selection / value (selection) : NEW selection_keys: ['1', '2', '3', '4'] -test_impex / export.selection.function / const (integer) : NEW hasdefault +test_impex / export.selection.function / const (integer) : NEW hasdefault: default test_impex / export.selection.function / value (selection) : NEW selection_keys: function -test_impex / export.selection.withdefault / const (integer) : NEW hasdefault -test_impex / export.selection.withdefault / value (selection) : NEW selection_keys: ['1', '2'], hasdefault -test_impex / export.string / const (integer) : NEW hasdefault +test_impex / export.selection.withdefault / const (integer) : NEW hasdefault: default +test_impex / export.selection.withdefault / value (selection) : NEW selection_keys: ['1', '2'], hasdefault: default +test_impex / export.string / const (integer) : NEW hasdefault: default test_impex / export.string / value (char) : NEW -test_impex / export.string.bounded / const (integer) : NEW hasdefault +test_impex / export.string.bounded / const (integer) : NEW hasdefault: default test_impex / export.string.bounded / value (char) : NEW -test_impex / export.string.required / const (integer) : NEW hasdefault +test_impex / export.string.required / const (integer) : NEW hasdefault: default test_impex / export.string.required / value (char) : NEW required -test_impex / export.text / const (integer) : NEW hasdefault +test_impex / export.text / const (integer) : NEW hasdefault: default test_impex / export.text / value (text) : NEW test_impex / export.unique / value (integer) : NEW test_impex / export.unique / value2 (integer) : NEW diff --git a/openupgrade_scripts/scripts/test_inherit/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_inherit/14.0.0.1/upgrade_analysis.txt index 2f849e3dab8e..a3b9547497c9 100644 --- a/openupgrade_scripts/scripts/test_inherit/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_inherit/14.0.0.1/upgrade_analysis.txt @@ -8,10 +8,10 @@ new model test.inherit.property test_inherit / res.partner / daughter_ids (one2many) : NEW relation: test.inherit.daughter test_inherit / test.inherit.daughter / _inherits : NEW _inherits: {'test.inherit.mother': 'template_id'} test_inherit / test.inherit.daughter / field_in_daughter (char) : NEW -test_inherit / test.inherit.daughter / name (char) : NEW hasdefault +test_inherit / test.inherit.daughter / name (char) : NEW hasdefault: default test_inherit / test.inherit.daughter / template_id (many2one) : NEW relation: test.inherit.mother, required test_inherit / test.inherit.mother / field_in_mother (char) : NEW -test_inherit / test.inherit.mother / name (char) : NEW required, req_default: function, hasdefault +test_inherit / test.inherit.mother / name (char) : NEW required, hasdefault: default test_inherit / test.inherit.mother / partner_id (many2one) : NEW relation: res.partner test_inherit / test.inherit.mother / state (selection) : NEW selection_keys: ['a', 'b', 'c', 'd'] test_inherit / test.inherit.property / name (char) : NEW required diff --git a/openupgrade_scripts/scripts/test_mail/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_mail/14.0.1.0/upgrade_analysis.txt index 3e808068029e..b4751c18be10 100644 --- a/openupgrade_scripts/scripts/test_mail/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_mail/14.0.1.0/upgrade_analysis.txt @@ -13,7 +13,7 @@ test_mail / mail.performance.thread / message_ids (one2many) : NEW re test_mail / mail.performance.thread / message_main_attachment_id (many2one): NEW relation: ir.attachment test_mail / mail.performance.thread / name (char) : NEW test_mail / mail.performance.thread / partner_id (many2one) : NEW relation: res.partner -test_mail / mail.performance.thread / track (char) : NEW hasdefault +test_mail / mail.performance.thread / track (char) : NEW hasdefault: default test_mail / mail.performance.thread / value (integer) : NEW test_mail / mail.performance.thread / value_pc (float) : NEW isfunction: function, stored test_mail / mail.performance.tracking / field_0 (char) : NEW @@ -60,14 +60,16 @@ test_mail / mail.test.full / user_id (many2one) : DEL re test_mail / mail.test.full / website_message_ids (one2many): DEL relation: mail.message test_mail / mail.test.gateway / message_has_sms_error (boolean): module is now 'sms' ('test_mail') test_mail / mail.test.gateway / website_message_ids (one2many): module is now 'portal' ('test_mail') +test_mail / mail.test.gateway.groups / message_has_sms_error (boolean): module is now 'sms' ('test_mail') +test_mail / mail.test.gateway.groups / website_message_ids (one2many): module is now 'portal' ('test_mail') test_mail / mail.test.multi.company / message_has_sms_error (boolean): module is now 'sms' ('test_mail') test_mail / mail.test.multi.company / website_message_ids (one2many): module is now 'portal' ('test_mail') test_mail / mail.test.simple / message_has_sms_error (boolean): module is now 'sms' ('test_mail') test_mail / mail.test.simple / website_message_ids (one2many): module is now 'portal' ('test_mail') test_mail / mail.test.ticket / container_id (many2one) : NEW relation: mail.test.container -test_mail / mail.test.ticket / count (integer) : NEW hasdefault +test_mail / mail.test.ticket / count (integer) : NEW hasdefault: default test_mail / mail.test.ticket / customer_id (many2one) : NEW relation: res.partner -test_mail / mail.test.ticket / datetime (datetime) : NEW hasdefault +test_mail / mail.test.ticket / datetime (datetime) : NEW hasdefault: default test_mail / mail.test.ticket / email_from (char) : NEW test_mail / mail.test.ticket / mail_template (many2one) : NEW relation: mail.template test_mail / mail.test.ticket / message_follower_ids (one2many): NEW relation: mail.followers @@ -85,6 +87,8 @@ test_mail / mail.test.track.compute / message_main_attachment_id (many2one): test_mail / mail.test.track.compute / partner_email (char) : NEW isrelated: related, stored test_mail / mail.test.track.compute / partner_id (many2one) : NEW relation: res.partner test_mail / mail.test.track.compute / partner_name (char) : NEW isrelated: related, stored +test_mail / mail.test.track.selection / message_has_sms_error (boolean): module is now 'sms' ('test_mail') +test_mail / mail.test.track.selection / website_message_ids (one2many): module is now 'portal' ('test_mail') test_mail / test_performance.mail / message_follower_ids (one2many): DEL relation: mail.followers test_mail / test_performance.mail / message_ids (one2many) : DEL relation: mail.message test_mail / test_performance.mail / message_main_attachment_id (many2one): DEL relation: ir.attachment diff --git a/openupgrade_scripts/scripts/test_mass_mailing/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_mass_mailing/14.0.1.0/upgrade_analysis.txt index f9f995e3bca6..2ef8c66e4c73 100644 --- a/openupgrade_scripts/scripts/test_mass_mailing/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_mass_mailing/14.0.1.0/upgrade_analysis.txt @@ -17,7 +17,7 @@ test_mass_mailing / mailing.performance / website_message_ids (one2many): N test_mass_mailing / mailing.performance.blacklist / container_id (many2one) : NEW relation: mail.test.container test_mass_mailing / mailing.performance.blacklist / email_from (char) : NEW test_mass_mailing / mailing.performance.blacklist / email_normalized (char) : NEW isfunction: function, stored -test_mass_mailing / mailing.performance.blacklist / message_bounce (integer) : NEW hasdefault +test_mass_mailing / mailing.performance.blacklist / message_bounce (integer) : NEW hasdefault: default test_mass_mailing / mailing.performance.blacklist / message_follower_ids (one2many): NEW relation: mail.followers test_mass_mailing / mailing.performance.blacklist / message_ids (one2many) : NEW relation: mail.message test_mass_mailing / mailing.performance.blacklist / message_main_attachment_id (many2one): NEW relation: ir.attachment @@ -27,7 +27,7 @@ test_mass_mailing / mailing.performance.blacklist / website_message_ids (one2man test_mass_mailing / mailing.test.blacklist / customer_id (many2one) : NEW relation: res.partner test_mass_mailing / mailing.test.blacklist / email_from (char) : NEW test_mass_mailing / mailing.test.blacklist / email_normalized (char) : NEW isfunction: function, stored -test_mass_mailing / mailing.test.blacklist / message_bounce (integer) : NEW hasdefault +test_mass_mailing / mailing.test.blacklist / message_bounce (integer) : NEW hasdefault: default test_mass_mailing / mailing.test.blacklist / message_follower_ids (one2many): NEW relation: mail.followers test_mass_mailing / mailing.test.blacklist / message_ids (one2many) : NEW relation: mail.message test_mass_mailing / mailing.test.blacklist / message_main_attachment_id (many2one): NEW relation: ir.attachment @@ -37,7 +37,7 @@ test_mass_mailing / mailing.test.blacklist / website_message_ids (one2many): N test_mass_mailing / mailing.test.optout / customer_id (many2one) : NEW relation: res.partner test_mass_mailing / mailing.test.optout / email_from (char) : NEW test_mass_mailing / mailing.test.optout / email_normalized (char) : NEW isfunction: function, stored -test_mass_mailing / mailing.test.optout / message_bounce (integer) : NEW hasdefault +test_mass_mailing / mailing.test.optout / message_bounce (integer) : NEW hasdefault: default test_mass_mailing / mailing.test.optout / message_follower_ids (one2many): NEW relation: mail.followers test_mass_mailing / mailing.test.optout / message_ids (one2many) : NEW relation: mail.message test_mass_mailing / mailing.test.optout / message_main_attachment_id (many2one): NEW relation: ir.attachment diff --git a/openupgrade_scripts/scripts/test_new_api/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_new_api/14.0.1.0/upgrade_analysis.txt index 51f4ad5122af..0e3cc7e71f36 100644 --- a/openupgrade_scripts/scripts/test_new_api/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_new_api/14.0.1.0/upgrade_analysis.txt @@ -25,6 +25,7 @@ new model test_new_api.country new model test_new_api.creativework.book new model test_new_api.creativework.edition new model test_new_api.creativework.movie +new model test_new_api.crew new model test_new_api.discussion new model test_new_api.display new model test_new_api.emailmessage @@ -70,12 +71,15 @@ new model test_new_api.one2many.line new model test_new_api.order new model test_new_api.order.line new model test_new_api.payment +new model test_new_api.pirate +new model test_new_api.prisoner new model test_new_api.recursive new model test_new_api.recursive.tree new model test_new_api.related new model test_new_api.req_m2o new model test_new_api.req_m2o_transient [transient] new model test_new_api.selection +new model test_new_api.ship new model test_new_api.state_mixin [abstract] new model test_new_api.trigger.left new model test_new_api.trigger.middle @@ -84,8 +88,8 @@ new model test_new_api.trigger.right test_new_api / decimal.precision.test / float (float) : NEW test_new_api / decimal.precision.test / float_2 (float) : NEW test_new_api / decimal.precision.test / float_4 (float) : NEW -test_new_api / domain.bool / bool_false (boolean) : NEW hasdefault -test_new_api / domain.bool / bool_true (boolean) : NEW hasdefault +test_new_api / domain.bool / bool_false (boolean) : NEW hasdefault: default +test_new_api / domain.bool / bool_true (boolean) : NEW hasdefault: default test_new_api / domain.bool / bool_undefined (boolean) : NEW test_new_api / test_new_api.attachment / name (char) : NEW isfunction: function, stored test_new_api / test_new_api.attachment / res_id (integer) : NEW required @@ -105,13 +109,13 @@ test_new_api / test_new_api.category / parent (many2one) : NEW re test_new_api / test_new_api.category / parent_path (char) : NEW test_new_api / test_new_api.city / country_id (many2one) : NEW relation: test_new_api.country test_new_api / test_new_api.city / name (char) : NEW -test_new_api / test_new_api.company / count (integer) : NEW hasdefault -test_new_api / test_new_api.company / date (date) : NEW hasdefault -test_new_api / test_new_api.company / foo (char) : NEW hasdefault -test_new_api / test_new_api.company / moment (datetime) : NEW hasdefault -test_new_api / test_new_api.company / phi (float) : NEW hasdefault -test_new_api / test_new_api.company / tag_id (many2one) : NEW relation: test_new_api.multi.tag, hasdefault -test_new_api / test_new_api.company / truth (boolean) : NEW hasdefault +test_new_api / test_new_api.company / count (integer) : NEW +test_new_api / test_new_api.company / date (date) : NEW +test_new_api / test_new_api.company / foo (char) : NEW +test_new_api / test_new_api.company / moment (datetime) : NEW +test_new_api / test_new_api.company / phi (float) : NEW +test_new_api / test_new_api.company / tag_id (many2one) : NEW relation: test_new_api.multi.tag +test_new_api / test_new_api.company / truth (boolean) : NEW test_new_api / test_new_api.company.attr / bar (char) : NEW isfunction: function, stored test_new_api / test_new_api.company.attr / company (many2one) : NEW relation: test_new_api.company test_new_api / test_new_api.company.attr / quantity (integer) : NEW @@ -127,23 +131,24 @@ test_new_api / test_new_api.compute.member / container_id (many2one) : NEW test_new_api / test_new_api.compute.member / name (char) : NEW test_new_api / test_new_api.compute.onchange / active (boolean) : NEW test_new_api / test_new_api.compute.onchange / bar (char) : NEW isfunction: function, stored -test_new_api / test_new_api.compute.onchange / baz (char) : NEW isfunction: function, stored -test_new_api / test_new_api.compute.onchange / count (integer) : NEW hasdefault +test_new_api / test_new_api.compute.onchange / baz (char) : NEW hasdefault: compute +test_new_api / test_new_api.compute.onchange / count (integer) : NEW hasdefault: default test_new_api / test_new_api.compute.onchange / foo (char) : NEW -test_new_api / test_new_api.compute.onchange / line_ids (one2many) : NEW relation: test_new_api.compute.onchange.line, isfunction: function, stored -test_new_api / test_new_api.compute.onchange / tag_ids (many2many) : NEW relation: test_new_api.multi.tag, isfunction: function, stored +test_new_api / test_new_api.compute.onchange / line_ids (one2many) : NEW relation: test_new_api.compute.onchange.line, hasdefault: compute +test_new_api / test_new_api.compute.onchange / tag_ids (many2many) : NEW relation: test_new_api.multi.tag, hasdefault: compute test_new_api / test_new_api.compute.onchange.line / foo (char) : NEW test_new_api / test_new_api.compute.onchange.line / record_id (many2one) : NEW relation: test_new_api.compute.onchange test_new_api / test_new_api.compute.readonly / bar (char) : NEW isfunction: function, stored -test_new_api / test_new_api.compute.readonly / foo (char) : NEW hasdefault -test_new_api / test_new_api.compute.readwrite / bar (char) : NEW isfunction: function, stored +test_new_api / test_new_api.compute.readonly / foo (char) : NEW hasdefault: default +test_new_api / test_new_api.compute.readwrite / bar (char) : NEW hasdefault: compute test_new_api / test_new_api.compute.readwrite / foo (char) : NEW -test_new_api / test_new_api.compute.unassigned / bares (char) : NEW isfunction: function, stored +test_new_api / test_new_api.compute.unassigned / bare (char) : NEW hasdefault: compute +test_new_api / test_new_api.compute.unassigned / bares (char) : NEW hasdefault: compute test_new_api / test_new_api.compute.unassigned / bars (char) : NEW isfunction: function, stored test_new_api / test_new_api.compute.unassigned / foo (char) : NEW test_new_api / test_new_api.compute_editable / line_ids (one2many) : NEW relation: test_new_api.compute_editable.line test_new_api / test_new_api.compute_editable.line / count (integer) : NEW -test_new_api / test_new_api.compute_editable.line / edit (integer) : NEW isfunction: function, stored +test_new_api / test_new_api.compute_editable.line / edit (integer) : NEW hasdefault: compute test_new_api / test_new_api.compute_editable.line / parent_id (many2one) : NEW relation: test_new_api.compute_editable test_new_api / test_new_api.compute_editable.line / same (integer) : NEW isfunction: function, stored test_new_api / test_new_api.compute_editable.line / value (integer) : NEW @@ -156,6 +161,9 @@ test_new_api / test_new_api.creativework.edition / res_model (char) test_new_api / test_new_api.creativework.edition / res_model_id (many2one) : NEW relation: ir.model, required test_new_api / test_new_api.creativework.movie / editions (one2many) : NEW relation: test_new_api.creativework.edition test_new_api / test_new_api.creativework.movie / name (char) : NEW +test_new_api / test_new_api.crew / pirate_id (many2one) : NEW relation: test_new_api.pirate +test_new_api / test_new_api.crew / prisoner_id (many2one) : NEW relation: test_new_api.prisoner +test_new_api / test_new_api.crew / ship_id (many2one) : NEW relation: test_new_api.ship test_new_api / test_new_api.discussion / categories (many2many) : NEW relation: test_new_api.category test_new_api / test_new_api.discussion / emails (one2many) : NEW relation: test_new_api.emailmessage test_new_api / test_new_api.discussion / important_emails (one2many) : NEW relation: test_new_api.emailmessage @@ -176,7 +184,7 @@ test_new_api / test_new_api.foo / text (char) : NEW test_new_api / test_new_api.foo / value1 (integer) : NEW test_new_api / test_new_api.foo / value2 (integer) : NEW test_new_api / test_new_api.inverse_m2o_ref / model_ids (one2many) : NEW relation: test_new_api.model_many2one_reference -test_new_api / test_new_api.message / author (many2one) : NEW relation: res.users, hasdefault +test_new_api / test_new_api.message / author (many2one) : NEW relation: res.users, hasdefault: default test_new_api / test_new_api.message / body (text) : NEW test_new_api / test_new_api.message / discussion (many2one) : NEW relation: test_new_api.discussion test_new_api / test_new_api.message / important (boolean) : NEW @@ -188,17 +196,17 @@ test_new_api / test_new_api.mixed / comment1 (html) : NEW test_new_api / test_new_api.mixed / comment2 (html) : NEW test_new_api / test_new_api.mixed / comment3 (html) : NEW test_new_api / test_new_api.mixed / comment4 (html) : NEW -test_new_api / test_new_api.mixed / currency_id (many2one) : NEW relation: res.currency, hasdefault +test_new_api / test_new_api.mixed / currency_id (many2one) : NEW relation: res.currency, hasdefault: default test_new_api / test_new_api.mixed / date (date) : NEW test_new_api / test_new_api.mixed / lang (selection) : NEW selection_keys: function test_new_api / test_new_api.mixed / moment (datetime) : NEW -test_new_api / test_new_api.mixed / number (float) : NEW hasdefault +test_new_api / test_new_api.mixed / number (float) : NEW hasdefault: default test_new_api / test_new_api.mixed / number2 (float) : NEW test_new_api / test_new_api.mixed / reference (reference) : NEW test_new_api / test_new_api.model_a / a_restricted_b_ids (many2many): NEW relation: test_new_api.model_b test_new_api / test_new_api.model_a / b_restricted_b_ids (many2many): NEW relation: test_new_api.model_b test_new_api / test_new_api.model_a / name (char) : NEW -test_new_api / test_new_api.model_active_field / active (boolean) : NEW hasdefault +test_new_api / test_new_api.model_active_field / active (boolean) : NEW hasdefault: default test_new_api / test_new_api.model_active_field / active_children_ids (one2many): NEW relation: test_new_api.model_active_field test_new_api / test_new_api.model_active_field / all_children_ids (one2many) : NEW relation: test_new_api.model_active_field test_new_api / test_new_api.model_active_field / children_ids (one2many) : NEW relation: test_new_api.model_active_field @@ -213,7 +221,7 @@ test_new_api / test_new_api.model_binary / binary_related_store (binary) : NEW a test_new_api / test_new_api.model_child / company_id (many2one) : NEW relation: res.company, required test_new_api / test_new_api.model_child / name (char) : NEW test_new_api / test_new_api.model_child / parent_id (many2one) : NEW relation: test_new_api.model_parent -test_new_api / test_new_api.model_child_m2o / cost (integer) : NEW isfunction: function, stored +test_new_api / test_new_api.model_child_m2o / cost (integer) : NEW hasdefault: compute test_new_api / test_new_api.model_child_m2o / name (char) : NEW test_new_api / test_new_api.model_child_m2o / parent_id (many2one) : NEW relation: test_new_api.model_parent_m2o test_new_api / test_new_api.model_child_m2o / size1 (integer) : NEW isfunction: function, stored @@ -237,12 +245,12 @@ test_new_api / test_new_api.model_private_address_onchange / company_id (many2on test_new_api / test_new_api.model_private_address_onchange / name (char) : NEW test_new_api / test_new_api.model_selection_base / my_selection (selection) : NEW selection_keys: ['bar', 'foo', 'ham', 'quux'] test_new_api / test_new_api.model_selection_non_stored / my_selection (selection) : NEW selection_keys: ['bar', 'foo'] -test_new_api / test_new_api.model_selection_required / active (boolean) : NEW hasdefault -test_new_api / test_new_api.model_selection_required / my_selection (selection) : NEW required, selection_keys: ['bacon', 'bar', 'baz', 'eevee', 'eggs', 'foo', 'knickers', 'pikachu'], req_default: function, hasdefault -test_new_api / test_new_api.model_selection_required_for_write_override / my_selection (selection) : NEW required, selection_keys: ['bar', 'divinity', 'foo'], req_default: function, hasdefault +test_new_api / test_new_api.model_selection_required / active (boolean) : NEW hasdefault: default +test_new_api / test_new_api.model_selection_required / my_selection (selection) : NEW required, selection_keys: ['bacon', 'bar', 'baz', 'eevee', 'eggs', 'foo', 'knickers', 'pikachu'], hasdefault: default +test_new_api / test_new_api.model_selection_required_for_write_override / my_selection (selection) : NEW required, selection_keys: ['bar', 'divinity', 'foo'], hasdefault: default test_new_api / test_new_api.model_shared_cache_compute_line / amount (integer) : NEW test_new_api / test_new_api.model_shared_cache_compute_line / parent_id (many2one) : NEW relation: test_new_api.model_shared_cache_compute_parent -test_new_api / test_new_api.model_shared_cache_compute_line / user_id (many2one) : NEW relation: res.users, hasdefault +test_new_api / test_new_api.model_shared_cache_compute_line / user_id (many2one) : NEW relation: res.users, hasdefault: default test_new_api / test_new_api.model_shared_cache_compute_parent / line_ids (one2many) : NEW relation: test_new_api.model_shared_cache_compute_line test_new_api / test_new_api.model_shared_cache_compute_parent / name (char) : NEW test_new_api / test_new_api.model_shared_cache_compute_parent / total_amount (integer) : NEW isfunction: function, stored @@ -258,12 +266,13 @@ test_new_api / test_new_api.monetary_order / total (float) : NEW test_new_api / test_new_api.monetary_order_line / order_id (many2one) : NEW relation: test_new_api.monetary_order, required test_new_api / test_new_api.monetary_order_line / subtotal (float) : NEW test_new_api / test_new_api.monetary_related / monetary_id (many2one) : NEW relation: test_new_api.monetary_base +test_new_api / test_new_api.monetary_related / total (float) : NEW test_new_api / test_new_api.move / line_ids (one2many) : NEW relation: test_new_api.move_line test_new_api / test_new_api.move / quantity (integer) : NEW isfunction: function, stored test_new_api / test_new_api.move / tag_id (many2one) : NEW relation: test_new_api.multi.tag test_new_api / test_new_api.move_line / move_id (many2one) : NEW relation: test_new_api.move, required test_new_api / test_new_api.move_line / quantity (integer) : NEW -test_new_api / test_new_api.move_line / visible (boolean) : NEW hasdefault +test_new_api / test_new_api.move_line / visible (boolean) : NEW hasdefault: default test_new_api / test_new_api.multi / lines (one2many) : NEW relation: test_new_api.multi.line test_new_api / test_new_api.multi / partner (many2one) : NEW relation: res.partner test_new_api / test_new_api.multi.line / multi (many2one) : NEW relation: test_new_api.multi @@ -278,11 +287,11 @@ test_new_api / test_new_api.multi.tag / name (char) : NEW test_new_api / test_new_api.multi_compute_inverse / bar1 (char) : NEW isfunction: function, stored test_new_api / test_new_api.multi_compute_inverse / bar2 (char) : NEW isfunction: function, stored test_new_api / test_new_api.multi_compute_inverse / bar3 (char) : NEW isfunction: function, stored -test_new_api / test_new_api.multi_compute_inverse / foo (char) : NEW required, req_default: function, hasdefault -test_new_api / test_new_api.one2many / line_ids (one2many) : NEW relation: test_new_api.one2many.line, isfunction: function, stored +test_new_api / test_new_api.multi_compute_inverse / foo (char) : NEW required, hasdefault: default +test_new_api / test_new_api.one2many / line_ids (one2many) : NEW relation: test_new_api.one2many.line, hasdefault: compute test_new_api / test_new_api.one2many / name (char) : NEW test_new_api / test_new_api.one2many.line / container_id (many2one) : NEW relation: test_new_api.one2many, required -test_new_api / test_new_api.one2many.line / count (integer) : NEW hasdefault +test_new_api / test_new_api.one2many.line / count (integer) : NEW hasdefault: default test_new_api / test_new_api.one2many.line / name (char) : NEW test_new_api / test_new_api.order / line_ids (one2many) : NEW relation: test_new_api.order.line test_new_api / test_new_api.order.line / order_id (many2one) : NEW relation: test_new_api.order, required @@ -290,6 +299,10 @@ test_new_api / test_new_api.order.line / product (char) : NEW test_new_api / test_new_api.order.line / reward (boolean) : NEW test_new_api / test_new_api.payment / _inherits : NEW _inherits: {'test_new_api.move': 'move_id'} test_new_api / test_new_api.payment / move_id (many2one) : NEW relation: test_new_api.move, required +test_new_api / test_new_api.pirate / name (char) : NEW +test_new_api / test_new_api.pirate / ship_ids (many2many) : NEW relation: test_new_api.ship +test_new_api / test_new_api.prisoner / name (char) : NEW +test_new_api / test_new_api.prisoner / ship_ids (many2many) : NEW relation: test_new_api.ship test_new_api / test_new_api.recursive / display_name (char) : NEW isfunction: function, stored test_new_api / test_new_api.recursive / name (char) : NEW required test_new_api / test_new_api.recursive / parent (many2one) : NEW relation: test_new_api.recursive @@ -303,6 +316,9 @@ test_new_api / test_new_api.req_m2o / bar (many2one) : NEW re test_new_api / test_new_api.req_m2o / foo (many2one) : NEW relation: res.currency, required test_new_api / test_new_api.selection / other (selection) : NEW selection_keys: ['bar', 'foo'] test_new_api / test_new_api.selection / state (selection) : NEW selection_keys: ['bar', 'foo'] +test_new_api / test_new_api.ship / name (char) : NEW +test_new_api / test_new_api.ship / pirate_ids (many2many) : NEW relation: test_new_api.pirate +test_new_api / test_new_api.ship / prisoner_ids (many2many) : NEW relation: test_new_api.prisoner test_new_api / test_new_api.trigger.left / middle_ids (one2many) : NEW relation: test_new_api.trigger.middle test_new_api / test_new_api.trigger.left / right_id (many2one) : NEW relation: test_new_api.trigger.right, isrelated: related, stored test_new_api / test_new_api.trigger.middle / left_id (many2one) : NEW relation: test_new_api.trigger.left, required @@ -355,6 +371,7 @@ NEW ir.model.access: test_new_api.access_test_new_api_compute_readonly NEW ir.model.access: test_new_api.access_test_new_api_compute_readwrite NEW ir.model.access: test_new_api.access_test_new_api_compute_unassigned NEW ir.model.access: test_new_api.access_test_new_api_country +NEW ir.model.access: test_new_api.access_test_new_api_crew NEW ir.model.access: test_new_api.access_test_new_api_display NEW ir.model.access: test_new_api.access_test_new_api_field_with_caps NEW ir.model.access: test_new_api.access_test_new_api_foo @@ -391,12 +408,15 @@ NEW ir.model.access: test_new_api.access_test_new_api_one2many_line NEW ir.model.access: test_new_api.access_test_new_api_order NEW ir.model.access: test_new_api.access_test_new_api_order_line NEW ir.model.access: test_new_api.access_test_new_api_payment +NEW ir.model.access: test_new_api.access_test_new_api_pirate +NEW ir.model.access: test_new_api.access_test_new_api_prisoner NEW ir.model.access: test_new_api.access_test_new_api_recursive NEW ir.model.access: test_new_api.access_test_new_api_recursive_tree NEW ir.model.access: test_new_api.access_test_new_api_related NEW ir.model.access: test_new_api.access_test_new_api_req_m2o NEW ir.model.access: test_new_api.access_test_new_api_req_m2o_transient NEW ir.model.access: test_new_api.access_test_new_api_selection +NEW ir.model.access: test_new_api.access_test_new_api_ship NEW ir.model.access: test_new_api.access_test_new_api_trigger_left NEW ir.model.access: test_new_api.access_test_new_api_trigger_middle NEW ir.model.access: test_new_api.access_test_new_api_trigger_right diff --git a/openupgrade_scripts/scripts/test_populate/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_populate/14.0.0.1/upgrade_analysis.txt index fb70bb706b1e..d62a957d9fd1 100644 --- a/openupgrade_scripts/scripts/test_populate/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_populate/14.0.0.1/upgrade_analysis.txt @@ -5,25 +5,25 @@ new model test.populate.category new model test.populate.inherit ---Fields in module 'test_populate'--- test_populate / test.no.populate / name (char) : NEW required -test_populate / test.populate / active (boolean) : NEW hasdefault +test_populate / test.populate / active (boolean) : NEW hasdefault: default test_populate / test.populate / category_id (many2one) : NEW relation: test.populate.category test_populate / test.populate / dependant_field_1 (char) : NEW test_populate / test.populate / dependant_field_2 (char) : NEW -test_populate / test.populate / name (char) : NEW hasdefault +test_populate / test.populate / name (char) : NEW hasdefault: default test_populate / test.populate / sequence (integer) : NEW test_populate / test.populate / some_ref (integer) : NEW -test_populate / test.populate / state (selection) : NEW selection_keys: ['a', 'b'], hasdefault -test_populate / test.populate.category / active (boolean) : NEW hasdefault -test_populate / test.populate.category / name (char) : NEW required, req_default: function, hasdefault -test_populate / test.populate.inherit / active (boolean) : NEW hasdefault +test_populate / test.populate / state (selection) : NEW selection_keys: ['a', 'b'], hasdefault: default +test_populate / test.populate.category / active (boolean) : NEW hasdefault: default +test_populate / test.populate.category / name (char) : NEW required, hasdefault: default +test_populate / test.populate.inherit / active (boolean) : NEW hasdefault: default test_populate / test.populate.inherit / additionnal_field (char) : NEW required test_populate / test.populate.inherit / category_id (many2one) : NEW relation: test.populate.category test_populate / test.populate.inherit / dependant_field_1 (char) : NEW test_populate / test.populate.inherit / dependant_field_2 (char) : NEW -test_populate / test.populate.inherit / name (char) : NEW hasdefault +test_populate / test.populate.inherit / name (char) : NEW hasdefault: default test_populate / test.populate.inherit / sequence (integer) : NEW test_populate / test.populate.inherit / some_ref (integer) : NEW -test_populate / test.populate.inherit / state (selection) : NEW selection_keys: ['a', 'b'], hasdefault +test_populate / test.populate.inherit / state (selection) : NEW selection_keys: ['a', 'b'], hasdefault: default ---XML records in module 'test_populate'--- NEW ir.model.access: test_populate.access_test_no_populat NEW ir.model.access: test_populate.access_test_populate diff --git a/openupgrade_scripts/scripts/test_read_group/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_read_group/14.0.0.1/upgrade_analysis.txt index 50a61674324f..7485b4797800 100644 --- a/openupgrade_scripts/scripts/test_read_group/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_read_group/14.0.0.1/upgrade_analysis.txt @@ -10,9 +10,9 @@ new model test_read_group.order.line test_read_group / test_read_group.aggregate / key (integer) : NEW test_read_group / test_read_group.aggregate / partner_id (many2one) : NEW relation: res.partner test_read_group / test_read_group.aggregate / value (integer) : NEW -test_read_group / test_read_group.aggregate.boolean / bool_and (boolean) : NEW hasdefault -test_read_group / test_read_group.aggregate.boolean / bool_array (boolean) : NEW hasdefault -test_read_group / test_read_group.aggregate.boolean / bool_or (boolean) : NEW hasdefault +test_read_group / test_read_group.aggregate.boolean / bool_and (boolean) : NEW hasdefault: default +test_read_group / test_read_group.aggregate.boolean / bool_array (boolean) : NEW hasdefault: default +test_read_group / test_read_group.aggregate.boolean / bool_or (boolean) : NEW hasdefault: default test_read_group / test_read_group.aggregate.boolean / key (integer) : NEW test_read_group / test_read_group.fill_temporal / date (date) : NEW test_read_group / test_read_group.fill_temporal / datetime (datetime) : NEW diff --git a/openupgrade_scripts/scripts/test_testing_utilities/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_testing_utilities/14.0.1.0/upgrade_analysis.txt index 4d027a408abd..5ee664d8063f 100644 --- a/openupgrade_scripts/scripts/test_testing_utilities/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_testing_utilities/14.0.1.0/upgrade_analysis.txt @@ -41,19 +41,19 @@ test_testing_utilities / o2m_readonly_subfield_child / name (char) test_testing_utilities / o2m_readonly_subfield_child / parent_id (many2one) : NEW relation: o2m_readonly_subfield_parent test_testing_utilities / o2m_readonly_subfield_parent / line_ids (one2many) : NEW relation: o2m_readonly_subfield_child test_testing_utilities / test_testing_utilities.a / f1 (char) : NEW required -test_testing_utilities / test_testing_utilities.a / f2 (integer) : NEW hasdefault +test_testing_utilities / test_testing_utilities.a / f2 (integer) : NEW hasdefault: default test_testing_utilities / test_testing_utilities.a / f3 (integer) : NEW test_testing_utilities / test_testing_utilities.a / f5 (integer) : NEW test_testing_utilities / test_testing_utilities.a / f6 (integer) : NEW test_testing_utilities / test_testing_utilities.c / f2 (many2one) : NEW relation: test_testing_utilities.m2o test_testing_utilities / test_testing_utilities.c / name (char) : NEW required -test_testing_utilities / test_testing_utilities.d / f (many2one) : NEW relation: test_testing_utilities.m2o, required, req_default: function, hasdefault +test_testing_utilities / test_testing_utilities.d / f (many2one) : NEW relation: test_testing_utilities.m2o, required, hasdefault: default test_testing_utilities / test_testing_utilities.d / f2 (char) : NEW -test_testing_utilities / test_testing_utilities.default / subs (one2many) : NEW relation: test_testing_utilities.sub3, hasdefault +test_testing_utilities / test_testing_utilities.default / subs (one2many) : NEW relation: test_testing_utilities.sub3, hasdefault: default test_testing_utilities / test_testing_utilities.default / v (integer) : NEW -test_testing_utilities / test_testing_utilities.default / value (integer) : NEW hasdefault +test_testing_utilities / test_testing_utilities.default / value (integer) : NEW hasdefault: default test_testing_utilities / test_testing_utilities.e / m2m (many2many) : NEW relation: test_testing_utilities.sub2 -test_testing_utilities / test_testing_utilities.f / m2m (many2many) : NEW relation: test_testing_utilities.sub2, hasdefault +test_testing_utilities / test_testing_utilities.f / m2m (many2many) : NEW relation: test_testing_utilities.sub2, hasdefault: default test_testing_utilities / test_testing_utilities.f / m2o (many2one) : NEW relation: test_testing_utilities.sub2 test_testing_utilities / test_testing_utilities.g / m2m (many2many) : NEW relation: test_testing_utilities.sub3 test_testing_utilities / test_testing_utilities.m2o / name (char) : NEW required @@ -67,25 +67,25 @@ test_testing_utilities / test_testing_utilities.onchange_line / parent (many2one test_testing_utilities / test_testing_utilities.onchange_parent / line_ids (one2many) : NEW relation: test_testing_utilities.onchange_line test_testing_utilities / test_testing_utilities.parent / subs (one2many) : NEW relation: test_testing_utilities.sub test_testing_utilities / test_testing_utilities.parent / v (integer) : NEW -test_testing_utilities / test_testing_utilities.parent / value (integer) : NEW hasdefault -test_testing_utilities / test_testing_utilities.readonly / f1 (integer) : NEW hasdefault +test_testing_utilities / test_testing_utilities.parent / value (integer) : NEW hasdefault: default +test_testing_utilities / test_testing_utilities.readonly / f1 (integer) : NEW test_testing_utilities / test_testing_utilities.recursive / many_to_one_ids (one2many) : NEW relation: test_testing_utilities.recursive test_testing_utilities / test_testing_utilities.recursive / one_to_many_id (many2one) : NEW relation: test_testing_utilities.recursive test_testing_utilities / test_testing_utilities.req_bool / f_bool (boolean) : NEW required test_testing_utilities / test_testing_utilities.sub / has_parent (boolean) : NEW test_testing_utilities / test_testing_utilities.sub / parent_id (many2one) : NEW relation: test_testing_utilities.parent test_testing_utilities / test_testing_utilities.sub / v (integer) : NEW -test_testing_utilities / test_testing_utilities.sub / value (integer) : NEW hasdefault +test_testing_utilities / test_testing_utilities.sub / value (integer) : NEW hasdefault: default test_testing_utilities / test_testing_utilities.sub2 / m2o_ids (many2many) : NEW relation: test_testing_utilities.m2o test_testing_utilities / test_testing_utilities.sub2 / name (char) : NEW test_testing_utilities / test_testing_utilities.sub3 / parent_id (many2one) : NEW relation: test_testing_utilities.default -test_testing_utilities / test_testing_utilities.sub3 / v (integer) : NEW hasdefault -test_testing_utilities / test_testing_utilities.sub3 / value (integer) : NEW hasdefault +test_testing_utilities / test_testing_utilities.sub3 / v (integer) : NEW hasdefault: default +test_testing_utilities / test_testing_utilities.sub3 / value (integer) : NEW hasdefault: default test_testing_utilities / ttu.child / move_line_ids (one2many) : NEW relation: ttu.grandchild test_testing_utilities / ttu.child / product_id (many2one) : NEW relation: ttu.product test_testing_utilities / ttu.child / root_id (many2one) : NEW relation: ttu.root test_testing_utilities / ttu.child / root_raw_id (many2one) : NEW relation: ttu.root -test_testing_utilities / ttu.child / unit_factor (integer) : NEW required, req_default: function, hasdefault +test_testing_utilities / ttu.child / unit_factor (integer) : NEW required, hasdefault: default test_testing_utilities / ttu.grandchild / move_id (many2one) : NEW relation: ttu.child test_testing_utilities / ttu.grandchild / product_id (many2one) : NEW relation: ttu.product test_testing_utilities / ttu.grandchild / product_uom_qty (integer) : NEW diff --git a/openupgrade_scripts/scripts/test_website/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_website/14.0.1.0/upgrade_analysis.txt index 0c98256770b7..ad6411627fdb 100644 --- a/openupgrade_scripts/scripts/test_website/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_website/14.0.1.0/upgrade_analysis.txt @@ -1,7 +1,7 @@ ---Models in module 'test_website'--- new model test.model ---Fields in module 'test_website'--- -test_website / test.model / is_published (boolean) : NEW hasdefault +test_website / test.model / is_published (boolean) : NEW hasdefault: default test_website / test.model / name (char) : NEW required test_website / test.model / seo_name (char) : NEW test_website / test.model / website_meta_description (text): NEW @@ -12,3 +12,4 @@ test_website / test.model / website_meta_title (char) : NEW NEW ir.model.access: test_website.access_test_model NEW ir.rule: test_website.test_model_publish (noupdate) NEW ir.ui.view: test_website.test_redirect_view (noupdate) +NEW ir.ui.view: test_website.test_redirect_view_qs (noupdate) diff --git a/openupgrade_scripts/scripts/test_xlsx_export/14.0.0.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/test_xlsx_export/14.0.0.1/upgrade_analysis.txt index 0de22bcf03a3..c645f0955879 100644 --- a/openupgrade_scripts/scripts/test_xlsx_export/14.0.0.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/test_xlsx_export/14.0.0.1/upgrade_analysis.txt @@ -1,4 +1,5 @@ ---Models in module 'test_xlsx_export'--- +new model export.computed.binary new model export.group_operator new model export.group_operator.one2many ---Fields in module 'test_xlsx_export'--- @@ -15,8 +16,9 @@ test_xlsx_export / export.group_operator / many2one (many2one) : NE test_xlsx_export / export.group_operator / one2many (one2many) : NEW relation: export.group_operator.one2many test_xlsx_export / export.group_operator.one2many / parent_id (many2one) : NEW relation: export.group_operator test_xlsx_export / export.group_operator.one2many / value (integer) : NEW -test_xlsx_export / export.integer / value (False) : NEW mode: modify, hasdefault +test_xlsx_export / export.integer / value (False) : NEW mode: modify, hasdefault: default ---XML records in module 'test_xlsx_export'--- +NEW ir.model.access: test_xlsx_export.access_export_computed_binary NEW ir.model.access: test_xlsx_export.access_export_group_operator NEW ir.model.access: test_xlsx_export.access_export_group_operator_one2many NEW ir.model.access: test_xlsx_export.access_export_integer diff --git a/openupgrade_scripts/scripts/transifex/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/transifex/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..2854f5feadd6 --- /dev/null +++ b/openupgrade_scripts/scripts/transifex/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'transifex'--- +---Fields in module 'transifex'--- +---XML records in module 'transifex'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/uom/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/uom/14.0.1.0/noupdate_changes.xml index cdd1619b40fb..e99b0faef7df 100644 --- a/openupgrade_scripts/scripts/uom/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/uom/14.0.1.0/noupdate_changes.xml @@ -1,8 +1,10 @@ + fl oz (US) @@ -16,19 +18,21 @@ in - - reference + + lb L - reference + + mi @@ -39,7 +43,7 @@ qt (US) - - reference + + diff --git a/openupgrade_scripts/scripts/uom/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/uom/14.0.1.0/post-migration.py index 8a215686d4a4..7d57012e21c7 100644 --- a/openupgrade_scripts/scripts/uom/14.0.1.0/post-migration.py +++ b/openupgrade_scripts/scripts/uom/14.0.1.0/post-migration.py @@ -3,6 +3,22 @@ from openupgradelib import openupgrade +def change_default_uom_rounding(env): + # in 13.0, the default value for the rounding field of these units is set + # to 0.001 in uom_data.xml. this is removed in 14.0, so it falls back to + # the default value of the field, which is 0.01. the rounding on these + # units is reset here to their default value if the value hasn’t change, + # to match how it would be if the database was created in 14.0, which is + # what is expected from openupgrade. + for ref in ("uom.product_uom_unit", "uom.product_uom_kgm"): + uom = env.ref(ref, raise_if_not_found=False) + if not uom: + continue + if uom.rounding == 0.001: + uom.rounding = 0.01 + + @openupgrade.migrate() def migrate(env, version): openupgrade.load_data(env.cr, "uom", "14.0.1.0/noupdate_changes.xml") + change_default_uom_rounding(env) diff --git a/openupgrade_scripts/scripts/web/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/web/14.0.1.0/upgrade_analysis_work.txt index 8cf2d9503323..768806139b7b 100644 --- a/openupgrade_scripts/scripts/web/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/web/14.0.1.0/upgrade_analysis_work.txt @@ -21,4 +21,4 @@ NEW ir.ui.view: web.view_base_document_layout # NOTHING TO DO DEL ir.ui.view: web.js_tests_assets -#NOTHING TO DO \ No newline at end of file +#NOTHING TO DO diff --git a/openupgrade_scripts/scripts/web_editor/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/web_editor/14.0.1.0/upgrade_analysis_work.txt index ef4b9e8d7dab..5f9f580cc851 100644 --- a/openupgrade_scripts/scripts/web_editor/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/web_editor/14.0.1.0/upgrade_analysis_work.txt @@ -13,4 +13,4 @@ NEW ir.ui.view: web_editor.snippet_options_image_optimization_widgets # NOTHING TO DO DEL ir.ui.view: web_editor.summernote -# NOTHING TO DO \ No newline at end of file +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website/14.0.1.0/end-migration.py b/openupgrade_scripts/scripts/website/14.0.1.0/end-migration.py new file mode 100644 index 000000000000..fc60aa28cf5b --- /dev/null +++ b/openupgrade_scripts/scripts/website/14.0.1.0/end-migration.py @@ -0,0 +1,38 @@ +# Copyright 2023 Tecnativa - Pilar Vargas +from openupgradelib import openupgrade, openupgrade_140 + + +def convert_field_html_string(env): + exclusions = [ + "mail.message", + "mail.mail", + "mail.template", + "res.users", + "mail.channel", + "mailing.mailing", + "account.invoice.send", + "mail.alias", + ] + fields = env["ir.model.fields"].search( + [("ttype", "=", "html"), ("store", "=", True)] + ) + for field in fields: + model = field.model_id.model + if model in exclusions: + continue + if env.get(model, False) is not False and env[model]._auto: + if openupgrade.table_exists(env.cr, env[model]._table): + if field.name in env[model]._fields and openupgrade.column_exists( + env.cr, env[model]._table, field.name + ): + openupgrade_140.convert_field_html_string_13to14( + env, + model, + field.name, + ) + + +@openupgrade.migrate() +def migrate(env, version): + convert_field_html_string(env) + openupgrade.cow_templates_replicate_upstream(env.cr) diff --git a/openupgrade_scripts/scripts/website/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/website/14.0.1.0/post-migration.py index d8121dd57854..fc3e031e2043 100644 --- a/openupgrade_scripts/scripts/website/14.0.1.0/post-migration.py +++ b/openupgrade_scripts/scripts/website/14.0.1.0/post-migration.py @@ -1,13 +1,64 @@ # Copyright 2021 ForgeFlow S.L. +# Copyright 2023 Tecnativa - Pilar Vargas # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import os +import re + from openupgradelib import openupgrade +from openupgradelib.openupgrade_140 import convert_html_string_13to14 + + +def extract_footer_copyright_company_name(env): + """Replace Copyright content in the footer so as not to lose + content from previous versions if the copyright has been customised. + + Don't do anything if the target version is not 14.0, as if not, we have a website + view tree copy of the main website.layout, provoking in later versions inheritance + problems. + """ + target_version = os.environ.get("OPENUPGRADE_TARGET_VERSION", "14.0") + if target_version != "14.0": + return + for website in env["website"].search([]): + # Search for old copyright and if it does not exist set the default company name + web_frontend_layout_view = env["ir.ui.view"].search( + [("key", "=", "web.frontend_layout"), ("website_id", "=", website.id)] + ) + if web_frontend_layout_view: + frontend_layout_pattern = r"(.*?)" + frontend_layout_matches = re.findall( + frontend_layout_pattern, + web_frontend_layout_view.arch_db, + re.DOTALL, + ) + copyright_content = " ".join( + match.strip() for match in frontend_layout_matches + ) + else: + copyright_content = f"Copyright © {website.company_id.name}" + # Set new copyright + website_layout_view = website.with_context(website_id=website.id).viewref( + "website.layout" + ) + website_layout_pattern = ( + r'(.*?)<\/span>' + ) + + new_arch = re.sub( + website_layout_pattern, + lambda match: copyright_content, + website_layout_view.arch_db, + flags=re.DOTALL, + ) + website_layout_view.with_context(website_id=website.id).arch = new_arch def website_cookie_notice_post_migration(env): cookie_message = env.ref("website.cookie_message", raise_if_not_found=False) if cookie_message: websites = env["website"].search([]) - websites.write({"cookies_bar": True}) + for website in websites: + website.write({"cookies_bar": True}) env.cr.execute( """WITH keys AS ( SELECT key @@ -25,8 +76,43 @@ def website_cookie_notice_post_migration(env): env["ir.ui.view"].browse(view_ids).unlink() +def convert_html_string(env): + website_views = env["ir.ui.view"].search( + [("type", "=", "qweb"), ("website_id", "!=", False)] + ) + for view in website_views: + new_arch_db = convert_html_string_13to14(view.arch_db) + if new_arch_db != view.arch_db: + view.arch_db = new_arch_db + + +def keep_customized_aboutus_pages(env): + """14.0 no longer ships the About us page: its page and its view go. The + changes made to it with the website editor live in website-specific copies + of the view (same key), and deleting the generic view deletes them too (the + cascade of website on the key): the website's own About us page was lost, + with its URL. Give those copies a key of their own, their pages stay.""" + openupgrade.logged_query( + env.cr, + """ + UPDATE ir_ui_view + SET key = key || '_website_' || website_id + WHERE key = 'website.aboutus' AND website_id IS NOT NULL + """, + ) + + @openupgrade.migrate() def migrate(env, version): openupgrade.load_data(env.cr, "website", "14.0.1.0/noupdate_changes.xml") + keep_customized_aboutus_pages(env) openupgrade.delete_records_safely_by_xml_id(env, ["website.aboutus_page"]) website_cookie_notice_post_migration(env) + convert_html_string(env) + # This call is commented out as this script causes conflicts with inheritance + # in migrations to later versions. In v14 a duplicate of website.layout with + # associated website is made when the company name is modified in the footer, + # this script replicates that behaviour in the migration but in later versions + # it can be a problem of inheritance. However, it can be uncommented and used if + # deemed appropriate. + # extract_footer_copyright_company_name(env) diff --git a/openupgrade_scripts/scripts/website/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/website/14.0.1.0/pre-migration.py index f4e2c009768f..f9d893cfe17f 100644 --- a/openupgrade_scripts/scripts/website/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/website/14.0.1.0/pre-migration.py @@ -55,3 +55,4 @@ def migrate(env, version): True, ) website_cookie_notice_pre_migration(env) + openupgrade.cow_templates_mark_if_equal_to_upstream(env.cr) diff --git a/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis.txt index ec21a9a4cc7e..29c8e07bb5af 100644 --- a/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis.txt @@ -5,7 +5,7 @@ new model website.snippet.filter ---Fields in module 'website'--- website / ir.ui.view / customize_show (boolean) : module is now 'portal' ('website') website / ir.ui.view / seo_name (char) : NEW -website / ir.ui.view / visibility (selection) : NEW selection_keys: ['', 'connected', 'password', 'restricted_group'], hasdefault +website / ir.ui.view / visibility (selection) : NEW selection_keys: ['', 'connected', 'password', 'restricted_group'], hasdefault: default website / ir.ui.view / visibility_password (char) : NEW website / mrp.document / key (char) : module is now 'mrp' ('website') website / mrp.document / website_id (many2one) : module is now 'mrp' ('website') @@ -21,13 +21,13 @@ website / website / google_search_console (char) : NEW website / website / has_social_default_image (boolean): NEW isfunction: function, stored website / website / robots_txt (text) : NEW website / website.page / cache_key_expr (char) : NEW -website / website.page / cache_time (integer) : NEW hasdefault -website / website.page / footer_visible (boolean) : NEW hasdefault -website / website.page / header_visible (boolean) : NEW hasdefault +website / website.page / cache_time (integer) : NEW hasdefault: default +website / website.page / footer_visible (boolean) : NEW hasdefault: default +website / website.page / header_visible (boolean) : NEW hasdefault: default website / website.snippet.filter / action_server_id (many2one) : NEW relation: ir.actions.server website / website.snippet.filter / field_names (char) : NEW required website / website.snippet.filter / filter_id (many2one) : NEW relation: ir.filters -website / website.snippet.filter / is_published (boolean) : NEW hasdefault +website / website.snippet.filter / is_published (boolean) : NEW hasdefault: default website / website.snippet.filter / limit (integer) : NEW required website / website.snippet.filter / name (char) : NEW required website / website.snippet.filter / website_id (many2one) : NEW relation: website, required diff --git a/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis_work.txt index 532ecde65b63..a8f2c9deb6b8 100644 --- a/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website/14.0.1.0/upgrade_analysis_work.txt @@ -326,3 +326,5 @@ NEW website.snippet.filter: website.dynamic_snippet_data_source_country DEL website.page: website.aboutus_page (noupdate) # DONE: post-migration: deleted xmlid safely +# website-specific copies of website.aboutus (changes made with the website editor) get a key of their +# own first (post-migration), so that the deletion of the generic view does not take them and their pages diff --git a/openupgrade_scripts/scripts/website_blog/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/website_blog/14.0.1.0/post-migration.py index f5e541259212..9baa205f7996 100644 --- a/openupgrade_scripts/scripts/website_blog/14.0.1.0/post-migration.py +++ b/openupgrade_scripts/scripts/website_blog/14.0.1.0/post-migration.py @@ -1,6 +1,28 @@ from openupgradelib import openupgrade +from odoo.tools.json import scriptsafe as json_safe + + +def update_cover_properties_field(env, records): + for record in records: + cover_properties = json_safe.loads(record.cover_properties) + cover_properties["background_color_class"] = "o_cc3" + cover_properties.pop("background-color", None) + record.write({"cover_properties": json_safe.dumps(cover_properties)}) + + +def blog_post_update_cover_properties_field(env): + blog_post = env["blog.post"].search([]) + update_cover_properties_field(env, blog_post) + + +def blog_blog_update_cover_properties_field(env): + blog_blog = env["blog.blog"].search([]) + update_cover_properties_field(env, blog_blog) + @openupgrade.migrate() def migrate(env, version): openupgrade.load_data(env.cr, "website_blog", "14.0.1.0/noupdate_changes.xml") + blog_post_update_cover_properties_field(env) + blog_blog_update_cover_properties_field(env) diff --git a/openupgrade_scripts/scripts/website_crm/14.0.2.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_crm/14.0.2.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..93ee8a73e599 --- /dev/null +++ b/openupgrade_scripts/scripts/website_crm/14.0.2.1/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_crm'--- +---Fields in module 'website_crm'--- +---XML records in module 'website_crm'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_crm_livechat/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_crm_livechat/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..6bb8e66c1e88 --- /dev/null +++ b/openupgrade_scripts/scripts/website_crm_livechat/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_crm_livechat'--- +---Fields in module 'website_crm_livechat'--- +---XML records in module 'website_crm_livechat'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/pre-migration.py index 91bfda3c5850..7765e55006a5 100644 --- a/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/pre-migration.py @@ -17,3 +17,7 @@ def migrate(env, version): ], True, ) + # Remove SQL view crm_partner_report_assign not used anymore in Odoo v14.0 + openupgrade.logged_query( + env.cr, "DROP VIEW IF EXISTS crm_partner_report_assign CASCADE" + ) diff --git a/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/upgrade_analysis.txt index 40f9f4909675..44ea23a2f676 100644 --- a/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_crm_partner_assign/14.0.1.0/upgrade_analysis.txt @@ -1,8 +1,7 @@ ---Models in module 'website_crm_partner_assign'--- ---Fields in module 'website_crm_partner_assign'--- website_crm_partner_assign / crm.lead / date_assign (date) : DEL -website_crm_partner_assign / crm.lead / date_partner_assign (date) : NEW isfunction: function, stored -website_crm_partner_assign / res.partner / partner_weight (integer) : now a function +website_crm_partner_assign / crm.lead / date_partner_assign (date) : NEW hasdefault: compute website_crm_partner_assign / res.partner.grade / _order : _order is now 'sequence' ('id') ---XML records in module 'website_crm_partner_assign'--- NEW ir.model.access: website_crm_partner_assign.access_crm_lead_assignation diff --git a/openupgrade_scripts/scripts/website_event/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_event/14.0.1.1/upgrade_analysis.txt index f4faf866980b..9b42d5233fd3 100644 --- a/openupgrade_scripts/scripts/website_event/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_event/14.0.1.1/upgrade_analysis.txt @@ -1,14 +1,13 @@ ---Models in module 'website_event'--- model website.event.menu (moved from website_event_track) ---Fields in module 'website_event'--- -website_event / event.event / community_menu (boolean) : NEW isfunction: function, stored +website_event / event.event / community_menu (boolean) : NEW hasdefault: compute website_event / event.event / community_menu_ids (one2many) : NEW relation: website.event.menu -website_event / event.event / menu_register_cta (boolean) : NEW isfunction: function, stored +website_event / event.event / menu_register_cta (boolean) : NEW hasdefault: compute website_event / event.event / seo_name (char) : NEW -website_event / event.event / website_menu (boolean) : now a function website_event / event.registration / visitor_id (many2one) : NEW relation: website.visitor -website_event / event.type / community_menu (boolean) : NEW isfunction: function, stored -website_event / event.type / menu_register_cta (boolean) : NEW isfunction: function, stored +website_event / event.type / community_menu (boolean) : NEW hasdefault: compute +website_event / event.type / menu_register_cta (boolean) : NEW hasdefault: compute website_event / website.event.menu / __last_update (datetime) : previously in module website_event_track website_event / website.event.menu / _order : previously in module website_event_track website_event / website.event.menu / display_name (char) : previously in module website_event_track diff --git a/openupgrade_scripts/scripts/website_event_meet/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_event_meet/14.0.1.0/upgrade_analysis.txt index d1af03190254..f04bddf318d6 100644 --- a/openupgrade_scripts/scripts/website_event_meet/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_event_meet/14.0.1.0/upgrade_analysis.txt @@ -1,17 +1,17 @@ ---Models in module 'website_event_meet'--- new model event.meeting.room ---Fields in module 'website_event_meet'--- -website_event_meet / event.event / meeting_room_allow_creation (boolean): NEW isfunction: function, stored +website_event_meet / event.event / meeting_room_allow_creation (boolean): NEW hasdefault: compute website_event_meet / event.event / meeting_room_ids (one2many) : NEW relation: event.meeting.room -website_event_meet / event.meeting.room / active (boolean) : NEW hasdefault +website_event_meet / event.meeting.room / active (boolean) : NEW hasdefault: default website_event_meet / event.meeting.room / chat_room_id (many2one) : NEW relation: chat.room, required website_event_meet / event.meeting.room / event_id (many2one) : NEW relation: event.event, required website_event_meet / event.meeting.room / is_pinned (boolean) : NEW -website_event_meet / event.meeting.room / is_published (boolean) : NEW hasdefault +website_event_meet / event.meeting.room / is_published (boolean) : NEW hasdefault: default website_event_meet / event.meeting.room / name (char) : NEW required website_event_meet / event.meeting.room / summary (char) : NEW website_event_meet / event.meeting.room / target_audience (char) : NEW -website_event_meet / event.type / meeting_room_allow_creation (boolean): NEW isfunction: function, stored +website_event_meet / event.type / meeting_room_allow_creation (boolean): NEW hasdefault: compute website_event_meet / website.event.menu / menu_type (False) : NEW selection_keys: ['community', 'meeting_room'], mode: modify ---XML records in module 'website_event_meet'--- NEW ir.actions.act_window: website_event_meet.event_meeting_room_action diff --git a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/post-migration.py b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/post-migration.py new file mode 100644 index 000000000000..6147d4048d6e --- /dev/null +++ b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/post-migration.py @@ -0,0 +1,34 @@ +from openupgradelib import openupgrade + + +def migrate_website_event_questions_free_text(env): + openupgrade.logged_query( + env.cr, + """UPDATE event_question + SET question_type = 'text_box' + WHERE free_text + """, + ) + openupgrade.logged_query( + env.cr, + """INSERT INTO event_registration_answer + (question_id, registration_id, value_text_box) + SELECT eaf.question_id, eaf.registration_id, eaf.answer + FROM event_answer_free eaf + """, + ) + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.logged_query( + env.cr, + """ + UPDATE event_registration_answer era + SET question_id = eqa.question_id + FROM event_question_answer eqa + WHERE era.value_answer_id = eqa.id + """, + ) + if openupgrade.column_exists(env.cr, "event_question", "free_text"): + migrate_website_event_questions_free_text(env) diff --git a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/pre-migration.py b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/pre-migration.py index 810fe8fc124d..9e4aacf8e3da 100644 --- a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/pre-migration.py +++ b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/pre-migration.py @@ -3,6 +3,8 @@ @openupgrade.migrate() def migrate(env, version): + openupgrade.rename_models(env.cr, [("event.answer", "event.question.answer")]) + openupgrade.rename_tables( env.cr, [("event_answer", "event_question_answer")], @@ -25,3 +27,7 @@ def migrate(env, version): ), ], ) + # Remove SQL view event_question_report not used anymore in Odoo v14.0 + openupgrade.logged_query( + env.cr, "DROP VIEW IF EXISTS event_question_report CASCADE" + ) diff --git a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis.txt index edbd7fbf3fb1..91d9e5a4e692 100644 --- a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis.txt @@ -3,11 +3,10 @@ obsolete model event.answer (renamed to event.question.answer) obsolete model event.question.report [sql_view] new model event.question.answer (renamed from event.answer) ---Fields in module 'website_event_questions'--- -website_event_questions / event.event / question_ids (one2many) : now a function website_event_questions / event.question / answer_ids (one2many) : relation is now 'event.question.answer' ('event.answer') [nothing to do] website_event_questions / event.question / is_individual (boolean) : DEL website_event_questions / event.question / once_per_order (boolean) : NEW -website_event_questions / event.question / question_type (selection) : NEW required, selection_keys: ['simple_choice', 'text_box'], req_default: function, hasdefault +website_event_questions / event.question / question_type (selection) : NEW required, selection_keys: ['simple_choice', 'text_box'], hasdefault: default website_event_questions / event.registration / answer_ids (many2many) : DEL relation: event.answer website_event_questions / event.registration / registration_answer_ids (one2many): NEW relation: event.registration.answer website_event_questions / event.registration.answer / event_answer_id (many2one) : DEL relation: event.answer, required diff --git a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis_work.txt index 40026fca98fe..5c3ae9a940b7 100644 --- a/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_event_questions/14.0.1.1/upgrade_analysis_work.txt @@ -24,7 +24,7 @@ website_event_questions / event.registration.answer / question_id (many2one) website_event_questions / event.registration.answer / registration_id (many2one) : NEW relation: event.registration, required website_event_questions / event.registration.answer / value_answer_id (many2one) : NEW relation: event.question.answer website_event_questions / event.registration.answer / value_text_box (text) : NEW -# DONE: pre-migration: field renamed +# DONE: pre-migration: field renamed and fill value ---XML records in module 'website_event_questions'--- NEW ir.actions.act_window: website_event_questions.action_event_registration_report diff --git a/openupgrade_scripts/scripts/website_event_track/14.0.1.1/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_event_track/14.0.1.1/upgrade_analysis.txt index e71aa500a83e..ceb1bd2848de 100644 --- a/openupgrade_scripts/scripts/website_event_track/14.0.1.1/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_event_track/14.0.1.1/upgrade_analysis.txt @@ -3,31 +3,23 @@ model website.event.menu (moved to website_event) new model event.track.tag.category new model event.track.visitor ---Fields in module 'website_event_track'--- -website_event_track / event.event / website_track (boolean) : now a function -website_event_track / event.event / website_track_proposal (boolean): now a function website_event_track / event.sponsor / _order : _order is now 'sequence, sponsor_type_id' ('sequence') -website_event_track / event.sponsor / active (boolean) : NEW hasdefault +website_event_track / event.sponsor / active (boolean) : NEW hasdefault: default website_event_track / event.sponsor / activity_ids (one2many) : NEW relation: mail.activity -website_event_track / event.sponsor / email (char) : NEW isfunction: function, stored +website_event_track / event.sponsor / email (char) : NEW hasdefault: compute website_event_track / event.sponsor / image_128 (binary) : not stored anymore -website_event_track / event.sponsor / image_512 (binary) : NEW attachment: True, isfunction: function, stored +website_event_track / event.sponsor / image_512 (binary) : NEW attachment: True, hasdefault: compute website_event_track / event.sponsor / message_follower_ids (one2many): NEW relation: mail.followers website_event_track / event.sponsor / message_ids (one2many) : NEW relation: mail.message website_event_track / event.sponsor / message_main_attachment_id (many2one): NEW relation: ir.attachment -website_event_track / event.sponsor / mobile (char) : NEW isfunction: function, stored -website_event_track / event.sponsor / name (char) : NEW isfunction: function, stored -website_event_track / event.sponsor / phone (char) : NEW isfunction: function, stored +website_event_track / event.sponsor / mobile (char) : NEW hasdefault: compute +website_event_track / event.sponsor / name (char) : NEW hasdefault: compute +website_event_track / event.sponsor / phone (char) : NEW hasdefault: compute website_event_track / event.sponsor / sequence (integer) : not related anymore -website_event_track / event.sponsor / url (char) : now a function website_event_track / event.sponsor / website_message_ids (one2many): NEW relation: mail.message website_event_track / event.sponsor.type / display_ribbon_style (selection): NEW selection_keys: ['Bronze', 'Gold', 'Silver', 'no_ribbon'] website_event_track / event.track / event_track_visitor_ids (one2many): NEW relation: event.track.visitor website_event_track / event.track / image (binary) : not related anymore -website_event_track / event.track / image (binary) : now a function -website_event_track / event.track / partner_biography (html) : now a function -website_event_track / event.track / partner_email (char) : now a function -website_event_track / event.track / partner_name (char) : now a function -website_event_track / event.track / partner_phone (char) : now a function website_event_track / event.track / seo_name (char) : NEW website_event_track / event.track / website_cta (boolean) : NEW website_event_track / event.track / website_cta_delay (integer) : NEW @@ -40,19 +32,17 @@ website_event_track / event.track.stage / color (integer) : website_event_track / event.track.stage / is_accepted (boolean) : NEW website_event_track / event.track.tag / _order : _order is now 'category_id, sequence, name' ('name') website_event_track / event.track.tag / category_id (many2one) : NEW relation: event.track.tag.category -website_event_track / event.track.tag / sequence (integer) : NEW hasdefault +website_event_track / event.track.tag / sequence (integer) : NEW hasdefault: default website_event_track / event.track.tag.category / name (char) : NEW required -website_event_track / event.track.tag.category / sequence (integer) : NEW hasdefault +website_event_track / event.track.tag.category / sequence (integer) : NEW hasdefault: default website_event_track / event.track.tag.category / tag_ids (one2many) : NEW relation: event.track.tag website_event_track / event.track.visitor / is_blacklisted (boolean) : NEW website_event_track / event.track.visitor / is_wishlisted (boolean) : NEW -website_event_track / event.track.visitor / partner_id (many2one) : NEW relation: res.partner, isfunction: function, stored +website_event_track / event.track.visitor / partner_id (many2one) : NEW relation: res.partner, hasdefault: compute website_event_track / event.track.visitor / track_id (many2one) : NEW relation: event.track, required website_event_track / event.track.visitor / visitor_id (many2one) : NEW relation: website.visitor -website_event_track / event.type / website_track (boolean) : now a function -website_event_track / event.type / website_track_proposal (boolean): now a function website_event_track / website / app_icon (binary) : NEW attachment: True, isfunction: function, stored -website_event_track / website / events_app_name (char) : NEW isfunction: function, stored +website_event_track / website / events_app_name (char) : NEW hasdefault: compute website_event_track / website.event.menu / __last_update (datetime) : module is now 'website_event' ('website_event_track') website_event_track / website.event.menu / _order : module is now 'website_event' ('website_event_track') website_event_track / website.event.menu / display_name (char) : module is now 'website_event' ('website_event_track') diff --git a/openupgrade_scripts/scripts/website_event_track_exhibitor/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_event_track_exhibitor/14.0.1.0/upgrade_analysis.txt index 24141baa8aee..56eca5694591 100644 --- a/openupgrade_scripts/scripts/website_event_track_exhibitor/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_event_track_exhibitor/14.0.1.0/upgrade_analysis.txt @@ -1,15 +1,15 @@ ---Models in module 'website_event_track_exhibitor'--- ---Fields in module 'website_event_track_exhibitor'--- -website_event_track_exhibitor / event.event / exhibitor_menu (boolean) : NEW isfunction: function, stored +website_event_track_exhibitor / event.event / exhibitor_menu (boolean) : NEW hasdefault: compute website_event_track_exhibitor / event.event / exhibitor_menu_ids (one2many) : NEW relation: website.event.menu website_event_track_exhibitor / event.sponsor / chat_room_id (many2one) : NEW relation: chat.room -website_event_track_exhibitor / event.sponsor / hour_from (float) : NEW hasdefault -website_event_track_exhibitor / event.sponsor / hour_to (float) : NEW hasdefault +website_event_track_exhibitor / event.sponsor / hour_from (float) : NEW hasdefault: default +website_event_track_exhibitor / event.sponsor / hour_to (float) : NEW hasdefault: default website_event_track_exhibitor / event.sponsor / is_exhibitor (boolean) : NEW -website_event_track_exhibitor / event.sponsor / is_published (boolean) : NEW hasdefault +website_event_track_exhibitor / event.sponsor / is_published (boolean) : NEW hasdefault: default website_event_track_exhibitor / event.sponsor / subtitle (char) : NEW -website_event_track_exhibitor / event.sponsor / website_description (html) : NEW isfunction: function, stored -website_event_track_exhibitor / event.type / exhibitor_menu (boolean) : NEW isfunction: function, stored +website_event_track_exhibitor / event.sponsor / website_description (html) : NEW hasdefault: compute +website_event_track_exhibitor / event.type / exhibitor_menu (boolean) : NEW hasdefault: compute website_event_track_exhibitor / website.event.menu / menu_type (False) : NEW selection_keys: ['community', 'exhibitor', 'meeting_room', 'track', 'track_proposal'], mode: modify ---XML records in module 'website_event_track_exhibitor'--- NEW ir.actions.act_window: website_event_track_exhibitor.event_sponsor_action diff --git a/openupgrade_scripts/scripts/website_event_track_quiz/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_event_track_quiz/14.0.1.0/upgrade_analysis.txt index 83ec50482852..6200b1c7bf7d 100644 --- a/openupgrade_scripts/scripts/website_event_track_quiz/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_event_track_quiz/14.0.1.0/upgrade_analysis.txt @@ -19,7 +19,7 @@ website_event_track_quiz / event.quiz.question / quiz_id (many2one) website_event_track_quiz / event.quiz.question / sequence (integer) : NEW website_event_track_quiz / event.track / quiz_id (many2one) : NEW relation: event.quiz website_event_track_quiz / event.track.visitor / quiz_completed (boolean) : NEW -website_event_track_quiz / event.track.visitor / quiz_points (integer) : NEW hasdefault +website_event_track_quiz / event.track.visitor / quiz_points (integer) : NEW hasdefault: default ---XML records in module 'website_event_track_quiz'--- NEW ir.actions.act_window: website_event_track_quiz.event_quiz_action NEW ir.actions.act_window: website_event_track_quiz.event_quiz_question_action diff --git a/openupgrade_scripts/scripts/website_form/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_form/14.0.1.0/upgrade_analysis_work.txt index 9d1811fb8953..9ed69717f144 100644 --- a/openupgrade_scripts/scripts/website_form/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_form/14.0.1.0/upgrade_analysis_work.txt @@ -13,4 +13,4 @@ DEL ir.ui.view: website_form.assets_frontend DEL ir.ui.view: website_form.register_s_website_form DEL ir.ui.view: website_form.res_config_settings_view_form DEL ir.ui.view: website_form.snippet_options -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_forum/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/website_forum/14.0.1.0/noupdate_changes.xml index c72983d5e5b0..5af74619ff8b 100644 --- a/openupgrade_scripts/scripts/website_forum/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/website_forum/14.0.1.0/noupdate_changes.xml @@ -2,115 +2,115 @@ - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + - forum + diff --git a/openupgrade_scripts/scripts/website_forum/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/website_forum/14.0.1.0/post-migration.py new file mode 100644 index 000000000000..7f1abb497b67 --- /dev/null +++ b/openupgrade_scripts/scripts/website_forum/14.0.1.0/post-migration.py @@ -0,0 +1,8 @@ +# Copyright 2021 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env.cr, "website_forum", "14.0.1.0/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/website_forum/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/website_forum/14.0.1.0/pre-migration.py new file mode 100644 index 000000000000..8dcdd431c8b8 --- /dev/null +++ b/openupgrade_scripts/scripts/website_forum/14.0.1.0/pre-migration.py @@ -0,0 +1,17 @@ +# Copyright 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + +_field_renames = [ + ( + "gamification.challenge", + "gamification_challenge", + "category", + "challenge_category", + ), +] + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_fields(env, _field_renames) diff --git a/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis.txt index 77bcb53fe98b..084e63a6ce35 100644 --- a/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis.txt @@ -2,7 +2,7 @@ ---Fields in module 'website_forum'--- website_forum / forum.forum / authorized_group_id (many2one): NEW relation: res.groups website_forum / forum.forum / menu_id (many2one) : NEW relation: website.menu -website_forum / forum.forum / privacy (selection) : NEW selection_keys: ['connected', 'private', 'public'], hasdefault +website_forum / forum.forum / privacy (selection) : NEW selection_keys: ['connected', 'private', 'public'], hasdefault: default website_forum / forum.forum / seo_name (char) : NEW website_forum / forum.forum / teaser (text) : NEW isfunction: function, stored website_forum / forum.post / seo_name (char) : NEW diff --git a/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..f9decde170b5 --- /dev/null +++ b/openupgrade_scripts/scripts/website_forum/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,50 @@ +---Models in module 'website_forum'--- +---Fields in module 'website_forum'--- +website_forum / forum.forum / authorized_group_id (many2one): NEW relation: res.groups +website_forum / forum.forum / menu_id (many2one) : NEW relation: website.menu +website_forum / forum.forum / privacy (selection) : NEW selection_keys: ['connected', 'private', 'public'], hasdefault +# NOTHING TO DO: new features + +website_forum / forum.forum / teaser (text) : NEW isfunction: function, stored +website_forum / forum.forum / seo_name (char) : NEW +website_forum / forum.post / seo_name (char) : NEW +website_forum / forum.tag / seo_name (char) : NEW +# NOTHING TO DO: new features + +website_forum / forum.post.reason / reason_type (char) : selection_keys is now '['basic', 'offensive']' ('False') +website_forum / forum.post.reason / reason_type (char) : type is now 'selection' ('char') +# NOTHING TO DO + +website_forum / gamification.challenge / category (False) : DEL selection_keys: ['certification', 'forum', 'hr', 'other'], mode: modify +website_forum / gamification.challenge / challenge_category (False) : NEW selection_keys: ['certification', 'forum', 'hr', 'other'], mode: modify +# DONE: pre-migration: renamed field + +website_forum / website / forums_count (integer) : is now stored +website_forum / website / forums_count (integer) : not a function anymore +# NOTHING TO DO: will be automatically filled + +---XML records in module 'website_forum'--- +NEW ir.actions.act_window: website_forum.action_forum_favorites +NEW ir.actions.act_window: website_forum.action_forum_posts +NEW ir.actions.act_window: website_forum.forum_post_reasons_action +NEW ir.rule: website_forum.website_forum_connected (noupdate) +NEW ir.rule: website_forum.website_forum_connected_post (noupdate) +NEW ir.rule: website_forum.website_forum_connected_tag (noupdate) +NEW ir.rule: website_forum.website_forum_create_website_designer (noupdate) +NEW ir.rule: website_forum.website_forum_private (noupdate) +NEW ir.rule: website_forum.website_forum_private_post (noupdate) +NEW ir.rule: website_forum.website_forum_private_tag (noupdate) +NEW ir.rule: website_forum.website_forum_public (noupdate) +NEW ir.rule: website_forum.website_forum_public_post (noupdate) +NEW ir.rule: website_forum.website_forum_public_tag (noupdate) +NEW ir.ui.menu: website_forum.menu_forum_badges +NEW ir.ui.menu: website_forum.menu_forum_post_reasons +NEW ir.ui.view: website_forum.default_faq +NEW ir.ui.view: website_forum.faq_karma +NEW ir.ui.view: website_forum.forum_filter_tag +NEW ir.ui.view: website_forum.forum_post_options +NEW ir.ui.view: website_forum.forum_post_reason_view_list +NEW ir.ui.view: website_forum.opt_last_post +NEW ir.ui.view: website_forum.opt_list_view +NEW ir.ui.view: website_forum.opt_post_count +# NOTHING TO DO: new features diff --git a/openupgrade_scripts/scripts/website_jitsi/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_jitsi/14.0.1.0/upgrade_analysis.txt index 734b4029c23e..a3c89d7e337f 100644 --- a/openupgrade_scripts/scripts/website_jitsi/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_jitsi/14.0.1.0/upgrade_analysis.txt @@ -2,12 +2,12 @@ new model chat.room new model chat.room.mixin [abstract] ---Fields in module 'website_jitsi'--- -website_jitsi / chat.room / lang_id (many2one) : NEW relation: res.lang, hasdefault -website_jitsi / chat.room / last_activity (datetime) : NEW hasdefault -website_jitsi / chat.room / max_capacity (selection) : NEW required, selection_keys: ['12', '16', '20', '4', '8', 'no_limit'], req_default: function, hasdefault +website_jitsi / chat.room / lang_id (many2one) : NEW relation: res.lang, hasdefault: default +website_jitsi / chat.room / last_activity (datetime) : NEW +website_jitsi / chat.room / max_capacity (selection) : NEW required, selection_keys: ['12', '16', '20', '4', '8', 'no_limit'], hasdefault: default website_jitsi / chat.room / max_participant_reached (integer): NEW -website_jitsi / chat.room / name (char) : NEW required, req_default: function, hasdefault -website_jitsi / chat.room / participant_count (integer) : NEW hasdefault +website_jitsi / chat.room / name (char) : NEW required, hasdefault: default +website_jitsi / chat.room / participant_count (integer) : NEW hasdefault: default ---XML records in module 'website_jitsi'--- NEW ir.actions.act_window: website_jitsi.chat_room_action NEW ir.model.access: website_jitsi.access_chat_room_all diff --git a/openupgrade_scripts/scripts/website_mass_mailing/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_mass_mailing/14.0.1.0/upgrade_analysis_work.txt index d958e33d68e0..c2d37444d2b1 100644 --- a/openupgrade_scripts/scripts/website_mass_mailing/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_mass_mailing/14.0.1.0/upgrade_analysis_work.txt @@ -4,4 +4,4 @@ NEW ir.ui.view: website_mass_mailing.assets_tests NEW ir.ui.view: website_mass_mailing.s_newsletter_subscribe_popup_content DEL ir.ui.view: website_mass_mailing.social_links -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_payment/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_payment/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..134fda47ac1e --- /dev/null +++ b/openupgrade_scripts/scripts/website_payment/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_payment'--- +---Fields in module 'website_payment'--- +---XML records in module 'website_payment'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_profile/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_profile/14.0.1.0/upgrade_analysis_work.txt index 50bd162acd2b..6f005fc893ff 100644 --- a/openupgrade_scripts/scripts/website_profile/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_profile/14.0.1.0/upgrade_analysis_work.txt @@ -2,4 +2,4 @@ ---Fields in module 'website_profile'--- ---XML records in module 'website_profile'--- NEW ir.ui.view: website_profile.badge_header -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_sale/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/website_sale/14.0.1.0/noupdate_changes.xml index f0d331b0f208..8317b5b562e7 100644 --- a/openupgrade_scripts/scripts/website_sale/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/website_sale/14.0.1.0/noupdate_changes.xml @@ -1,9 +1,9 @@ - - - - - - + + diff --git a/openupgrade_scripts/scripts/website_sale/14.0.1.0/post-migration-website_snippet_carousel_product.py b/openupgrade_scripts/scripts/website_sale/14.0.1.0/post-migration-website_snippet_carousel_product.py new file mode 100644 index 000000000000..b21017818bdd --- /dev/null +++ b/openupgrade_scripts/scripts/website_sale/14.0.1.0/post-migration-website_snippet_carousel_product.py @@ -0,0 +1,115 @@ +# Copyright 2022 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import uuid + +from lxml import etree +from openupgradelib import openupgrade + + +def prepare_dynamic_carousel(defaults_dict): + return """ +

    + """.format( + **defaults_dict + ) + + +def update_carousels(env, views_with_carousel): + # For each view analyze and extract the snippet + default_snippet_filter = env.ref("website_sale.dynamic_filter_demo_products") + for view in views_with_carousel: + tree = etree.fromstring(view.arch_db) + carousels = tree.xpath("//section[hasclass('s_product_carousel')]") + for carousel in carousels: + try: + data = tree.xpath("//*[hasclass('js_product_carousel')]")[0] + except IndexError: + continue + # The snnipet could have relevant extra attributes like t-if + carousel.attrib.pop("class") + extra_attribs = " ".join({f"{a}='{v}'" for a, v in carousel.attrib.items()}) + # If there are sibling elements, we'd like to append keep them in the final + # carousel + previous_xml = next_xml = "" + if data.getprevious() is not None: + previous_xml = etree.tostring(data.getprevious(), encoding="unicode") + if data.getnext() is not None: + next_xml = etree.tostring(data.getnext(), encoding="unicode") + # We'll use the dynamic widget if the carousel has a domain. Otherwise we'll + # use the regular product carousel. + domain = data.attrib.get("data-domain") + # Apply default values when they aren't declared + defaults_dict = { + "products_limit": data.attrib.get("data-products-limit", 16), + "products_per_slide": data.attrib.get("data-products-per-slide", 4), + "interval": data.attrib.get("data-interval", 5000), + "previous_xml": previous_xml, + "next_xml": next_xml, + "extra_attribs": extra_attribs, + } + # To use domains we need to create a website snippet filter and link it to + # the proper values. When no domain is set, we can rely on Odoo's defaults. + # Otherwise, we have to prepare the proper filter. + if not domain: + defaults_dict["filter"] = default_snippet_filter.id + else: + carousel_filter = env["ir.filters"].create( + { + "name": "Filter {} - {}".format( + carousel.attrib.get("data-name", uuid.uuid4().hex[:6]), + view.id, + ), + "model_id": "product.product", + "user_id": False, + "domain": domain, + } + ) + snippet_filter = env.ref( + "website_sale.dynamic_filter_demo_products" + ).copy( + { + "name": "{} - {}".format( + carousel.attrib.get("data-name"), view.id + ), + "action_server_id": False, + "website_id": view.website_id.id, + "filter_id": carousel_filter.id, + } + ) + defaults_dict["filter"] = snippet_filter.id + updated_snippet = etree.fromstring(prepare_dynamic_carousel(defaults_dict)) + carousel.getparent().replace(carousel, updated_snippet) + view.arch_db = etree.tostring(tree) + + +@openupgrade.migrate() +def migrate(env, version): + if not env.ref("website_sale.s_product_carousel", raise_if_not_found=False): + return + # Search views with the snippet applied. If no views are found, no carousels will + # be changed + views_with_carousel = env["ir.ui.view"].search( + [ + ("website_id", "!=", False), + ("arch_db", "ilike", "
    # Copyright 2021 ForgeFlow S.L. +# Copyright 2023 Tecnativa - Pilar Vargas # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import re from openupgradelib import openupgrade +def extract_custom_product_page_term_conditions(env): + """Replace Terms and Conditions content in the new v14 template so as not to lose + content from previous versions if it has been customised.""" + product_custom_text_view = env.ref("website_sale.product_custom_text") + product_custom_text_arch = product_custom_text_view.arch_db + product_custom_text_pattern = r'

    (.*?)<\/p>' + product_custom_text_content, *_ = re.findall( + product_custom_text_pattern, product_custom_text_arch, re.DOTALL + ) + product_views = env["ir.ui.view"].search( + [("key", "=", "website_sale.product"), ("website_id", "!=", False)] + ) + for view in product_views: + product_arch = view.arch_db + product_pattern = r'\s*(.*?)

    ' + product_matches = re.findall(product_pattern, product_arch, re.DOTALL) + if product_matches: + new_arch = product_custom_text_arch.replace( + product_custom_text_content, product_matches[0] + ) + product_custom_text_view.with_context( + website_id=view.website_id.id + ).arch_db = new_arch + + @openupgrade.migrate() def migrate(env, version): # set simple ribbons (simple case): @@ -50,4 +77,11 @@ def migrate(env, version): WHERE pt.id = sub.product_template_id AND pt.website_ribbon_id IS NULL""", ) openupgrade.load_data(env.cr, "website_sale", "14.0.1.0/noupdate_changes.xml") - openupgrade.delete_records_safely_by_xml_id(env, ["website_sale.image_full"]) + openupgrade.logged_query( + env.cr, + """ + DELETE FROM ir_model_data + WHERE module = 'website_sale' and name = 'image_full' + """, + ) + extract_custom_product_page_term_conditions(env) diff --git a/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis.txt index d3ab87a0fad3..21b165fe35b3 100644 --- a/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis.txt @@ -8,14 +8,14 @@ website_sale / product.public.category / seo_name (char) : NEW website_sale / product.ribbon / bg_color (char) : NEW website_sale / product.ribbon / html (char) : NEW required website_sale / product.ribbon / text_color (char) : NEW -website_sale / product.style / html_class (char) : now required, req_default: function +website_sale / product.style / html_class (char) : now required website_sale / product.style / name (char) : DEL required website_sale / product.template / seo_name (char) : NEW website_sale / product.template / website_ribbon_id (many2one) : NEW relation: product.ribbon website_sale / product.template / website_style_ids (many2many) : DEL relation: product.style website_sale / website / shop_extra_field_ids (one2many): NEW relation: website.sale.extra.field website_sale / website.sale.extra.field / field_id (many2one) : NEW relation: ir.model.fields -website_sale / website.sale.extra.field / sequence (integer) : NEW hasdefault +website_sale / website.sale.extra.field / sequence (integer) : NEW hasdefault: default website_sale / website.sale.extra.field / website_id (many2one) : NEW relation: website ---XML records in module 'website_sale'--- DEL ir.actions.act_window: website_sale.action_abandoned_orders_ecommerce @@ -35,6 +35,7 @@ NEW ir.ui.view: website_sale.ecom_show_extra_fields NEW ir.ui.view: website_sale.header_cart_link NEW ir.ui.view: website_sale.header_hide_empty_cart_link NEW ir.ui.view: website_sale.product_custom_text +NEW ir.ui.view: website_sale.product_ribbon_view_tree NEW ir.ui.view: website_sale.products_images_full NEW ir.ui.view: website_sale.s_dynamic_snippet_products NEW ir.ui.view: website_sale.s_dynamic_snippet_products_options diff --git a/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..ef4fe49cddde --- /dev/null +++ b/openupgrade_scripts/scripts/website_sale/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,89 @@ +---Models in module 'website_sale'--- +obsolete model product.style (renamed to product.ribbon) +new model product.ribbon (renamed from product.style) +# DONE: pre-migration: renamed models and tables + +new model website.sale.extra.field +# NOTHING TO DO + +---Fields in module 'website_sale'--- +website_sale / product.public.category / _order : _order is now 'sequence, name, id' ('sequence, name') +website_sale / product.public.category / seo_name (char) : NEW +# NOTHING TO DO + +website_sale / product.style / name (char) : DEL required +website_sale / product.ribbon / html (char) : NEW required +# DONE: pre-migration: renamed fields + +website_sale / product.style / html_class (char) : now required, req_default: function +# DONE: pre-migration: set default '' in case is NULL + +website_sale / product.ribbon / bg_color (char) : NEW +website_sale / product.ribbon / text_color (char) : NEW +website_sale / product.template / seo_name (char) : NEW +# NOTHING TO DO + +website_sale / product.template / website_ribbon_id (many2one) : NEW relation: product.ribbon +website_sale / product.template / website_style_ids (many2many) : DEL relation: product.style +# DONE: post-migration: if there is more than one valid website_style_ids, then create a fused ribbon from those styles + +website_sale / website / shop_extra_field_ids (one2many): NEW relation: website.sale.extra.field +website_sale / website.sale.extra.field / field_id (many2one) : NEW relation: ir.model.fields +website_sale / website.sale.extra.field / sequence (integer) : NEW hasdefault +website_sale / website.sale.extra.field / website_id (many2one) : NEW relation: website +# NOTHING TO DO: new features + +---XML records in module 'website_sale'--- +DEL ir.actions.act_window: website_sale.action_abandoned_orders_ecommerce +NEW ir.actions.server: website_sale.dynamic_snippet_products_action +NEW ir.model.access: website_sale.access_ecom_extra_fields_public +NEW ir.model.access: website_sale.access_ecom_extra_fields_publisher +NEW ir.model.access: website_sale.access_product_ribbon_sale_manager +NEW ir.model.access: website_sale.access_website_sale_payment_acquirer_onboarding_wizard +DEL ir.model.access: website_sale.access_product_supplierinfo +DEL ir.model.access: website_sale.access_product_supplierinfo_user +# NOTHING TO DO + +DEL ir.model.access: website_sale.access_product_style +NEW ir.model.access: website_sale.access_product_ribbon_public +# DONE: pre-migration: renamed xmlids + +DEL ir.rule: website_sale.product_supplierinfo_public (noupdate) +NEW ir.ui.view: website_sale.assets_snippet_s_dynamic_snippet_products_js_000 +NEW ir.ui.view: website_sale.assets_snippet_s_products_searchbar_js_000 +NEW ir.ui.view: website_sale.ecom_show_extra_fields +NEW ir.ui.view: website_sale.header_cart_link +NEW ir.ui.view: website_sale.header_hide_empty_cart_link +NEW ir.ui.view: website_sale.product_custom_text +NEW ir.ui.view: website_sale.products_images_full +NEW ir.ui.view: website_sale.s_dynamic_snippet_products +NEW ir.ui.view: website_sale.s_dynamic_snippet_products_options +NEW ir.ui.view: website_sale.searchbar_input_snippet_options +NEW ir.ui.view: website_sale.template_header_boxed +NEW ir.ui.view: website_sale.template_header_centered_logo +NEW ir.ui.view: website_sale.template_header_contact +NEW ir.ui.view: website_sale.template_header_default +NEW ir.ui.view: website_sale.template_header_hamburger +NEW ir.ui.view: website_sale.template_header_hamburger_full +NEW ir.ui.view: website_sale.template_header_image +NEW ir.ui.view: website_sale.template_header_magazine +NEW ir.ui.view: website_sale.template_header_minimalist +NEW ir.ui.view: website_sale.template_header_sidebar +NEW ir.ui.view: website_sale.template_header_slogan +NEW ir.ui.view: website_sale.template_header_vertical +NEW ir.ui.view: website_sale.view_website_sale_website_form +DEL ir.ui.view: website_sale.404 +DEL ir.ui.view: website_sale.header +DEL ir.ui.view: website_sale.remove_external_snippets +DEL ir.ui.view: website_sale.website_sale_pricelist_form_view2 +NEW product.ribbon: website_sale.new_ribbon (noupdate) +NEW product.ribbon: website_sale.sold_out_ribbon (noupdate) +NEW website.snippet.filter: website_sale.dynamic_filter_demo_products +# NOTHING TO DO + +DEL product.style: website_sale.image_promo (noupdate) +NEW product.ribbon: website_sale.sale_ribbon (noupdate) +# DONE: pre-migration: renamed xmlid (and update values) + +DEL product.style: website_sale.image_full (noupdate) +# DONE: post-migration: deleted safely diff --git a/openupgrade_scripts/scripts/website_sale_comparison/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_sale_comparison/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..623b1525ceb1 --- /dev/null +++ b/openupgrade_scripts/scripts/website_sale_comparison/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_sale_comparison'--- +---Fields in module 'website_sale_comparison'--- +---XML records in module 'website_sale_comparison'--- +---nothing has changed in this module-- +# Nothing to do diff --git a/openupgrade_scripts/scripts/website_sale_coupon/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_sale_coupon/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..b559c142ba9d --- /dev/null +++ b/openupgrade_scripts/scripts/website_sale_coupon/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_sale_coupon'--- +---Fields in module 'website_sale_coupon'--- +---XML records in module 'website_sale_coupon'--- +---nothing has changed in this module-- +NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_sale_delivery/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_sale_delivery/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..52d74ed74fa4 --- /dev/null +++ b/openupgrade_scripts/scripts/website_sale_delivery/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_sale_delivery'--- +---Fields in module 'website_sale_delivery'--- +---XML records in module 'website_sale_delivery'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_sale_wishlist/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_sale_wishlist/14.0.1.0/upgrade_analysis_work.txt index dd0ccee20403..a4fb439f157d 100644 --- a/openupgrade_scripts/scripts/website_sale_wishlist/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_sale_wishlist/14.0.1.0/upgrade_analysis_work.txt @@ -4,6 +4,8 @@ NEW ir.ui.view: website_sale_wishlist.header_hide_empty_wishlist_link NEW ir.ui.view: website_sale_wishlist.header_wishlist_link NEW ir.ui.view: website_sale_wishlist.snippet_options +# NOTHING TO DO: noupdate = 0 records. + NEW ir.ui.view: website_sale_wishlist.template_header_boxed NEW ir.ui.view: website_sale_wishlist.template_header_centered_logo NEW ir.ui.view: website_sale_wishlist.template_header_contact @@ -17,4 +19,4 @@ NEW ir.ui.view: website_sale_wishlist.template_header_sidebar NEW ir.ui.view: website_sale_wishlist.template_header_slogan NEW ir.ui.view: website_sale_wishlist.template_header_vertical DEL ir.ui.view: website_sale_wishlist.header -# NOTHING TO DO: noupdate="0" records +# NOTHING TO DO: noupdate = 0 new templates. diff --git a/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis.txt b/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis.txt index 3e102384d47d..afc4c98aa269 100644 --- a/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis.txt +++ b/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis.txt @@ -15,7 +15,7 @@ website_slides / slide.channel.partner / completed_slides_count (integer): NE website_slides / slide.channel.tag / color (integer) : NEW website_slides / slide.question / _order : _order is now 'sequence' ('id') website_slides / slide.slide / seo_name (char) : NEW -website_slides / slide.slide / slide_resource_downloadable (boolean): NEW hasdefault +website_slides / slide.slide / slide_resource_downloadable (boolean): NEW hasdefault: default website_slides / slide.slide / slide_resource_ids (one2many) : NEW relation: slide.slide.resource website_slides / slide.slide.resource / data (binary) : NEW attachment: True website_slides / slide.slide.resource / name (char) : NEW required @@ -30,6 +30,8 @@ NEW ir.model.access: website_slides.access_slide_slide_link_officer NEW ir.model.access: website_slides.access_slide_slide_manager NEW ir.model.access: website_slides.access_slide_slide_officer NEW ir.model.access: website_slides.access_slide_slide_resource_all +NEW ir.model.access: website_slides.access_slide_slide_resource_internal +NEW ir.model.access: website_slides.access_slide_slide_resource_portal NEW ir.model.access: website_slides.access_slide_slide_resource_public NEW ir.model.access: website_slides.access_slide_slide_resource_publisher NEW ir.model.access: website_slides.access_slide_tag_officer @@ -54,6 +56,9 @@ NEW ir.rule: website_slides.rule_slide_slide_officer_r (noupdate) NEW ir.rule: website_slides.rule_slide_slide_partner_manager (noupdate) NEW ir.rule: website_slides.rule_slide_slide_partner_officer (noupdate) NEW ir.rule: website_slides.rule_slide_slide_resource_downloadable (noupdate) +NEW ir.rule: website_slides.rule_slide_slide_resource_manager (noupdate) +NEW ir.rule: website_slides.rule_slide_slide_resource_officer_crud (noupdate) +NEW ir.rule: website_slides.rule_slide_slide_resource_officer_read (noupdate) DEL ir.rule: website_slides.rule_slide_channel_website DEL ir.rule: website_slides.rule_slide_slide_website NEW ir.ui.menu: website_slides.website_slides_menu_config_course_groups diff --git a/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis_work.txt index 94fa06eb17d3..d0a21672b78e 100644 --- a/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_slides/14.0.2.2/upgrade_analysis_work.txt @@ -91,10 +91,12 @@ NEW ir.ui.view: website_slides.website_slides_tests DEL ir.ui.view: website_slides.slide_social_media DEL ir.ui.view: website_slides.slides_share NEW mail.activity.type: website_slides.mail_activity_data_access_request (noupdate) -NEW res.groups: website_slides.group_website_slides_manager -NEW res.groups: website_slides.group_website_slides_officer NEW slide.channel.tag: website_slides.slide_channel_tag_level_advanced (noupdate) NEW slide.channel.tag: website_slides.slide_channel_tag_level_basic (noupdate) NEW slide.channel.tag: website_slides.slide_channel_tag_level_intermediate (noupdate) NEW slide.channel.tag.group: website_slides.slide_channel_tag_group_level (noupdate) -# NOTHING TO DO \ No newline at end of file +# NOTHING TO DO + +NEW res.groups: website_slides.group_website_slides_manager +NEW res.groups: website_slides.group_website_slides_officer +# DONE: post-migration: set group_website_slides_officer on the root menu (website_slides_menu_root) diff --git a/openupgrade_scripts/scripts/website_slides_forum/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_slides_forum/14.0.1.0/upgrade_analysis_work.txt index 65e42d862775..611deb29ffd6 100644 --- a/openupgrade_scripts/scripts/website_slides_forum/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_slides_forum/14.0.1.0/upgrade_analysis_work.txt @@ -1,7 +1,7 @@ ---Models in module 'website_slides_forum'--- ---Fields in module 'website_slides_forum'--- website_slides_forum / forum.forum / slide_channel_id (many2one) : is now stored -# NOTHING TO DO +# NOTHING TO DO: computed stored ---XML records in module 'website_slides_forum'--- NEW ir.model.access: website_slides_forum.access_forum_forum_website_slides_officer diff --git a/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/pre-migration.py new file mode 100644 index 000000000000..56cae3d0a607 --- /dev/null +++ b/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/pre-migration.py @@ -0,0 +1,16 @@ +# Copyright 2022 ForgeFlow S.L. +from openupgradelib import openupgrade + +_fields_rename = [ + ( + "slide.slide.partner", + "slide_slide_partner", + "survey_quizz_passed", + "survey_scoring_success", + ) +] + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_fields(env, _fields_rename) diff --git a/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/upgrade_analysis_work.txt index c55b1b820f80..305f2da2f14c 100644 --- a/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/website_slides_survey/14.0.1.0/upgrade_analysis_work.txt @@ -2,7 +2,11 @@ ---Fields in module 'website_slides_survey'--- website_slides_survey / slide.slide.partner / survey_quizz_passed (boolean) : DEL website_slides_survey / slide.slide.partner / survey_scoring_success (boolean): NEW isfunction: function, stored +# DONE: pre-migration: renamed fields + website_slides_survey / survey.survey / slide_ids (one2many) : NEW relation: slide.slide +# NOTHING TO DO + ---XML records in module 'website_slides_survey'--- NEW ir.model.access: website_slides_survey.access_survey_question_answer_slides_officer NEW ir.model.access: website_slides_survey.access_survey_question_slides_officer @@ -14,3 +18,4 @@ NEW ir.ui.view: website_slides_survey.course_slides_list_inherit_survey NEW ir.ui.view: website_slides_survey.survey_fill_form_done_inherit_website_slides NEW ir.ui.view: website_slides_survey.survey_survey_view_form DEL ir.ui.view: website_slides_survey.survey_templates_inherit_website_slides +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/website_twitter/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website_twitter/14.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..db1ccf0bf06f --- /dev/null +++ b/openupgrade_scripts/scripts/website_twitter/14.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,5 @@ +---Models in module 'website_twitter'--- +---Fields in module 'website_twitter'--- +---XML records in module 'website_twitter'--- +---nothing has changed in this module-- +# NOTHING TO DO diff --git a/openupgrade_scripts/static/description/index.html b/openupgrade_scripts/static/description/index.html index 878e5efa6ca5..3d86156c0d65 100644 --- a/openupgrade_scripts/static/description/index.html +++ b/openupgrade_scripts/static/description/index.html @@ -1,20 +1,20 @@ - - -Openupgrade Scripts + +README.rst -
    -

    Openupgrade Scripts

    +
    + + +Odoo Community Association + +
    +

    Openupgrade Scripts

    -

    Beta License: AGPL-3 OCA/OpenUpgrade Translate me on Weblate

    +

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

    This module is a containers of migration script to migrate from 13.0 to 14.0 version.

    Table of contents

    -

    Installation

    +

    Installation

    This module does not need to be installed on a database. It simply needs to be available via your addons-path.

    -

    Configuration

    +

    Configuration

    • call your odoo instance with the option --upgrade-path=/PATH_TO_openupgrade_scripts_MODULE/scripts/
    @@ -397,40 +404,43 @@

    Configuration

  • add the key to your configuration file:
  • -[options]
    -upgrade_path = /PATH_TO_openupgrade_scripts_MODULE/scripts/
    +[options]
    +upgrade_path = /PATH_TO_openupgrade_scripts_MODULE/scripts/
     
    -

    Bug Tracker

    +

    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 smashing it by providing a detailed and welcomed +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

    +

    Credits

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +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.

    Current maintainers:

    -

    MiquelRForgeFlow StefanRijnhart pedrobaeza

    +

    MiquelRForgeFlow StefanRijnhart pedrobaeza

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

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

    +
    diff --git a/requirements.txt b/requirements.txt index 11c9dc204295..180fc49789ba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ +# generated from manifests external_dependencies openupgradelib diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000000..abafd66f5328 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +openupgradelib @ git+https://github.com/OCA/openupgradelib.git@master