diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml new file mode 100644 index 000000000000..6a84fd5f89bc --- /dev/null +++ b/.github/workflows/aggregate.yml @@ -0,0 +1,94 @@ +name: Aggregate fork branches + +on: + push: + branches: + - ledoent + - "19.0-fix-*" + workflow_dispatch: + +permissions: + contents: write + +jobs: + aggregate: + runs-on: ubuntu-latest + steps: + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install git-aggregator + run: pip install git-aggregator==4.1 + + - name: Configure git identity (gitaggregate needs this before merging) + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + + - name: Checkout fork (no working tree needed; gitaggregate clones fresh) + uses: actions/checkout@v4 + with: + ref: ledoent + path: fork-meta + fetch-depth: 1 + + - name: Write aggregate config + # gitaggregate clones into ./openupgrade so the lab's repos.yaml layout is reproduced. + # `target ledoent aggregated` is what gets pushed back. + run: | + cat > aggregate.yml <<'YAML' + ./openupgrade: + defaults: + depth: 500 + remotes: + origin: https://github.com/OCA/OpenUpgrade.git + ledoent: https://github.com/ledoent/OpenUpgrade.git + target: ledoent aggregated + merges: + - ledoent ledoent + - ledoent 19.0-fix-user-groups-id-rename + # 19.0-fix-rollup is a conflict-resolved combination of the five + # OCA/OpenUpgrade PRs #5628-5632 (cherry-picked onto origin/19.0 + # in dependency order). Listing them individually here fails + # because #5628 and #5630 both touch hr/19.0.1.1/pre-migration.py + # with non-overlapping additions that gitaggregate's straight + # `git pull --no-rebase` can't auto-merge. When any OCA PR + # changes, rebase the rollup branch. + - ledoent 19.0-fix-rollup + YAML + + - name: Run gitaggregate + run: gitaggregate -c aggregate.yml + + - name: Force-push aggregated + id: push + working-directory: openupgrade + env: + PUSH_TOKEN: ${{ secrets.AGGREGATE_PUSH_TOKEN || secrets.GITHUB_TOKEN }} + run: | + git remote set-url ledoent "https://x-access-token:${PUSH_TOKEN}@github.com/ledoent/OpenUpgrade.git" + git push --force ledoent HEAD:refs/heads/aggregated + sha=$(git rev-parse HEAD) + echo "Aggregated head: $sha" + echo "sha=$sha" >> "$GITHUB_OUTPUT" + + - name: Trigger build-image workflow + # GITHUB_TOKEN-driven branch pushes don't fire downstream workflows + # (loop protection). Use repository_dispatch with a PAT so build-image + # can react. Falls back to no-op if AGGREGATE_PUSH_TOKEN is unset. + env: + GH_TOKEN: ${{ secrets.AGGREGATE_PUSH_TOKEN }} + run: | + if [ -z "$GH_TOKEN" ]; then + echo "AGGREGATE_PUSH_TOKEN not set; skipping repository_dispatch." + echo "Run \`gh workflow run build-image.yml --ref aggregated\` manually." + exit 0 + fi + gh api \ + -X POST \ + "/repos/${{ github.repository }}/dispatches" \ + -f event_type=aggregated-updated \ + -f "client_payload[sha]=${{ steps.push.outputs.sha }}" + echo "Fired repository_dispatch event_type=aggregated-updated" diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml new file mode 100644 index 000000000000..3b684ed68606 --- /dev/null +++ b/.github/workflows/build-image.yml @@ -0,0 +1,58 @@ +name: Build openupgrade image + +# Builds an Odoo 19 image with the aggregated OpenUpgrade tree baked in +# and pushes to the ledoent Zot registry at registry.hz.ledoweb.com. +# +# Auth: basic-auth via the `robot-ci` Zot user. +# Secrets: ZOT_USERNAME (= robot-ci), ZOT_PASSWORD (set on this repo). +# +# Image: registry.hz.ledoweb.com/openupgrade/openupgrade +# Consumed by: openupgrade-lab/docker-compose.yml (odoo-19 service) + +on: + push: + branches: + - aggregated + repository_dispatch: + types: [aggregated-updated] + workflow_dispatch: + +concurrency: + group: build-image-${{ github.ref }} + cancel-in-progress: true + +env: + ZOT_HOST: registry.hz.ledoweb.com + ZOT_IMAGE: registry.hz.ledoweb.com/openupgrade/openupgrade + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + with: + ref: aggregated + fetch-depth: 1 + + - uses: docker/login-action@v3 + with: + registry: ${{ env.ZOT_HOST }} + username: ${{ secrets.ZOT_USERNAME }} + password: ${{ secrets.ZOT_PASSWORD }} + + - uses: docker/setup-buildx-action@v3 + + - name: Build and push (amd64 only — cluster is amd64; M-series uses Rosetta) + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile.openupgrade + push: true + platforms: linux/amd64 + tags: | + ${{ env.ZOT_IMAGE }}:latest + ${{ env.ZOT_IMAGE }}:${{ github.sha }} + cache-from: type=registry,ref=${{ env.ZOT_IMAGE }}:buildcache + cache-to: type=registry,ref=${{ env.ZOT_IMAGE }}:buildcache,mode=max diff --git a/.github/workflows/documentation-commit.yml b/.github/workflows/documentation-commit.yml index c7d445ee6521..84842b18ecf6 100644 --- a/.github/workflows/documentation-commit.yml +++ b/.github/workflows/documentation-commit.yml @@ -8,10 +8,15 @@ name: Build and commit documentation on: push: + branches: ["19.0"] paths: ["docsource/modules180-190.rst"] jobs: documentation-commit: + # Docs publishing only makes sense on OCA upstream (default branch + # publishes to https://oca.github.io/OpenUpgrade/). Forks don't have + # a `documentation` branch — checkout would fail. Restrict to OCA. + if: ${{ github.repository_owner == 'OCA' }} runs-on: ubuntu-latest steps: - name: Check out OpenUpgrade Documentation diff --git a/.github/workflows/mirror-upstream.yml b/.github/workflows/mirror-upstream.yml new file mode 100644 index 000000000000..7d1819a4dc17 --- /dev/null +++ b/.github/workflows/mirror-upstream.yml @@ -0,0 +1,62 @@ +name: Mirror upstream OCA/OpenUpgrade + +on: + schedule: + - cron: "0 6 * * *" # daily 06:00 UTC + workflow_dispatch: + +permissions: + contents: write + +jobs: + mirror: + runs-on: ubuntu-latest + steps: + - name: Checkout fork + uses: actions/checkout@v4 + with: + ref: ledoent + fetch-depth: 0 + token: ${{ secrets.GIT_PUSH_TOKEN || secrets.GITHUB_TOKEN }} + + - name: Fetch upstream + run: | + git remote add upstream https://github.com/OCA/OpenUpgrade.git + git fetch upstream 19.0 + + - name: Force-push upstream/19.0 to fork's 19.0 + run: | + git push origin "upstream/19.0:refs/heads/19.0" --force-with-lease || \ + git push origin "upstream/19.0:refs/heads/19.0" --force + + - name: Check whether ledoent has drifted from upstream/19.0 + id: drift + run: | + # ledoent should be upstream/19.0 + custom-CI commits. If a merge-base + # comparison shows ledoent missing upstream commits, we need a rebase. + if git merge-base --is-ancestor upstream/19.0 ledoent; then + echo "drift=no" >> "$GITHUB_OUTPUT" + echo "ledoent is up to date with upstream/19.0" + else + echo "drift=yes" >> "$GITHUB_OUTPUT" + behind=$(git rev-list --count ledoent..upstream/19.0) + echo "ledoent is behind upstream/19.0 by $behind commits — rebase needed" + fi + + - name: Open issue if drift detected + if: steps.drift.outputs.drift == 'yes' + uses: actions/github-script@v7 + with: + script: | + const { owner, repo } = context.repo; + const title = 'ledoent branch needs rebase onto upstream/19.0'; + const existing = await github.rest.issues.listForRepo({ + owner, repo, labels: 'mirror-drift', state: 'open' + }); + if (existing.data.length === 0) { + await github.rest.issues.create({ + owner, repo, title, + labels: ['mirror-drift'], + body: 'upstream OCA/OpenUpgrade `19.0` has advanced. Rebase `ledoent` onto it and force-push.\n\n```bash\ngit fetch origin\ngit checkout ledoent\ngit rebase origin/19.0\ngit push -f origin ledoent\n```' + }); + } diff --git a/.github/workflows/test-migration.yml b/.github/workflows/test-migration.yml index bc425add5de4..46da397ffc28 100644 --- a/.github/workflows/test-migration.yml +++ b/.github/workflows/test-migration.yml @@ -13,6 +13,10 @@ on: branches: - "19.0" - "19.0-ocabot-*" + - "19.0-mig-*" + - "19.0-fix-*" + - "aggregated" + - "ledoent" jobs: test: @@ -23,7 +27,9 @@ jobs: DB_PASSWORD: "odoo" DB_PORT: 5432 DB_USERNAME: "odoo" - DOWNLOADS: https://github.com/${{github.repository}}/releases/download/databases + # Test databases live only on OCA upstream; forks reuse them so we + # don't have to mirror multi-GB psql dumps. + DOWNLOADS: https://github.com/OCA/OpenUpgrade/releases/download/databases ODOO: "./odoo/odoo-bin" PGHOST: "localhost" PGPASSWORD: "odoo" diff --git a/Dockerfile.openupgrade b/Dockerfile.openupgrade new file mode 100644 index 000000000000..5d946f732c28 --- /dev/null +++ b/Dockerfile.openupgrade @@ -0,0 +1,34 @@ +## Image: registry.ledoweb.com/openupgrade +## +## Built by .github/workflows/build-image.yml on every push to `aggregated`. +## Contains: +## - Odoo 19.0 base +## - Python deps the openupgrade-lab uses (s3fs, redis, sentry-sdk, etc.) +## - The full `aggregated` checkout of this repo as /opt/openupgrade +## The lab's docker-compose mounts the openupgradelib source over the +## pip-installed lib so it can hot-swap during development. + +FROM odoo:19.0 + +USER root + +# git needed for the openupgradelib install (no pinned PyPI release yet for 19.0). +RUN apt-get update && \ + apt-get install -y --no-install-recommends git && \ + rm -rf /var/lib/apt/lists/* + +RUN pip install --no-cache-dir --break-system-packages \ + fsspec>=2025.3.0 \ + s3fs \ + packaging \ + python-json-logger \ + redis \ + sentry-sdk \ + python-slugify \ + plaid-python \ + cssselect \ + "git+https://github.com/OCA/openupgradelib@master" + +COPY --chown=odoo:odoo . /opt/openupgrade + +USER odoo diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst index 39d37c51049d..999eebebda02 100644 --- a/docsource/modules180-190.rst +++ b/docsource/modules180-190.rst @@ -44,11 +44,11 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | auth_ldap | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| auth_oauth | | | +| auth_oauth |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| auth_passkey | | | +| auth_passkey |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| |new| auth_passkey_portal | | | +| |new| auth_passkey_portal |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | auth_password_policy | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -58,11 +58,11 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | auth_signup |Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| |new| auth_timeout | | | +| |new| auth_timeout |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| auth_totp | | | +| auth_totp |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| auth_totp_mail | | | +| auth_totp_mail |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | |del| auth_totp_mail_enforce | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -150,9 +150,9 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | event_sms | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| fleet | | | +| fleet |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| gamification | | | +| gamification |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | gamification_sale_crm | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -712,7 +712,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | mail_plugin | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| maintenance | | | +| maintenance |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | marketing_card | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -1104,7 +1104,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | stock_sms | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| survey | | | +| survey |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | |new| survey_crm | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/auth_oauth/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_oauth/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..83b57ee061b0 --- /dev/null +++ b/openupgrade_scripts/scripts/auth_oauth/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,11 @@ +---Models in module 'auth_oauth'--- + +---Fields in module 'auth_oauth'--- + +---XML records in module 'auth_oauth'--- +DEL ir.ui.view: auth_oauth.login +DEL ir.ui.view: auth_oauth.reset_password +DEL ir.ui.view: auth_oauth.signup +DEL ir.ui.view: auth_oauth.view_users_form + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/auth_passkey/19.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_passkey/19.0.1.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..0b5bbd707ba2 --- /dev/null +++ b/openupgrade_scripts/scripts/auth_passkey/19.0.1.1/upgrade_analysis_work.txt @@ -0,0 +1,14 @@ +---Models in module 'auth_passkey'--- + +---Fields in module 'auth_passkey'--- + +---XML records in module 'auth_passkey'--- +NEW ir.model.access: auth_passkey.access_auth_passkey_key_create_portal +NEW ir.model.access: auth_passkey.access_auth_passkey_key_portal +ir.rule: auth_passkey.rule_auth_passkey_key_admin (noupdate) (noupdate switched) +NEW ir.rule: auth_passkey.rule_auth_passkey_key_create_portal (noupdate) +ir.rule: auth_passkey.rule_auth_passkey_key_user (noupdate) (noupdate switched) +NEW ir.ui.view: auth_passkey.auth_passkey_key_view_kanban +NEW ir.ui.view: auth_passkey.auth_passkey_login_oauth + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/auth_passkey_portal/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_passkey_portal/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..f3af80d86294 --- /dev/null +++ b/openupgrade_scripts/scripts/auth_passkey_portal/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'auth_passkey_portal'--- + +---Fields in module 'auth_passkey_portal'--- + +---XML records in module 'auth_passkey_portal'--- +NEW ir.ui.view: auth_passkey_portal.passkeys_portal_hook + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/auth_timeout/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_timeout/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..43b16a75379b --- /dev/null +++ b/openupgrade_scripts/scripts/auth_timeout/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,21 @@ +---Models in module 'auth_timeout'--- + +---Fields in module 'auth_timeout'--- +auth_timeout / res.groups / has_lock_timeout (boolean) : NEW hasdefault: compute, stored: False +auth_timeout / res.groups / has_lock_timeout_inactivity (boolean): NEW hasdefault: compute, stored: False +auth_timeout / res.groups / lock_timeout (integer) : NEW +auth_timeout / res.groups / lock_timeout_delay_in_unit (integer): NEW hasdefault: compute, stored: False +auth_timeout / res.groups / lock_timeout_delay_unit (selection): NEW selection_keys: ['days', 'hours', 'minutes'], hasdefault: compute, stored: False +auth_timeout / res.groups / lock_timeout_inactivity (integer): NEW +auth_timeout / res.groups / lock_timeout_inactivity_delay_in_unit (integer): NEW hasdefault: compute, stored: False +auth_timeout / res.groups / lock_timeout_inactivity_delay_unit (selection): NEW selection_keys: ['days', 'hours', 'minutes'], hasdefault: compute, stored: False +auth_timeout / res.groups / lock_timeout_inactivity_mfa (boolean): NEW +auth_timeout / res.groups / lock_timeout_mfa (boolean) : NEW + +# NOTHING TO DO + +---XML records in module 'auth_timeout'--- +NEW ir.ui.view: auth_timeout.auth_passkey_groups_form +NEW ir.ui.view: auth_timeout.check_identity + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/auth_totp/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_totp/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..8826846d9f60 --- /dev/null +++ b/openupgrade_scripts/scripts/auth_totp/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,15 @@ +---Models in module 'auth_totp'--- +model auth.totp.rate.limit.log (moved from auth_totp_mail_enforce) [transient] + +# NOTHING TO DO + +---Fields in module 'auth_totp'--- +auth_totp / res.users / totp_last_counter (integer) : NEW + +# NOTHING TO DO + +---XML records in module 'auth_totp'--- +NEW ir.model.access: auth_totp.access_auth_totp_rate_limit_log [renamed from auth_totp_mail_enforce module] +NEW ir.model.constraint: auth_totp.constraint_auth_totp_rate_limit_log_user_id_limit_type_create_date_idx + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/auth_totp_mail/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/auth_totp_mail/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..55cd6a02c305 --- /dev/null +++ b/openupgrade_scripts/scripts/auth_totp_mail/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,19 @@ +---Models in module 'auth_totp_mail'--- +model auth.totp.rate.limit.log (moved to auth_totp) [transient] + +# NOTHING TO DO + +---Fields in module 'auth_totp_mail'--- + +---XML records in module 'auth_totp_mail'--- +DEL ir.model.access: auth_totp_mail_enforce.access_auth_totp_rate_limit_log [renamed to auth_totp module] +NEW ir.ui.view: auth_totp_mail.account_security_alert +NEW ir.ui.view: auth_totp_mail.auth_totp_mail_form +NEW ir.ui.view: auth_totp_mail.res_config_settings_view_form +DEL ir.ui.view: auth_totp_mail.account_security_setting_update +DEL ir.ui.view: auth_totp_mail_enforce.auth_totp_mail_form +DEL ir.ui.view: auth_totp_mail_enforce.res_config_settings_view_form +NEW mail.template: auth_totp_mail.mail_template_totp_mail_code [renamed from auth_totp_mail_enforce module] (noupdate) +DEL mail.template: auth_totp_mail_enforce.mail_template_totp_mail_code [renamed to auth_totp_mail module] (noupdate) + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py b/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py index 39b145615b4b..699de5d46ed7 100644 --- a/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py +++ b/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py @@ -176,3 +176,48 @@ def migrate(env, version): openupgrade.rename_xmlids(env.cr, _renamed_xmlids) openupgrade.rename_xmlids(env.cr, _merged_xmlids, allow_merge=True) openupgrade.rename_fields(env, _renamed_fields) + _fix_user_groups_id_references(env) + + +def _fix_user_groups_id_references(env): + """rename_fields() renames the field column on res_users and quoted + references in ir.filters.domain, but it does not process ir.rule + domain_force, nor does it match unquoted dotted references like + ``user.groups_id.ids`` in Python-evaluated domain expressions. + + Concretely, an ir.rule with + domain_force = "[('groups_id', 'in', user.groups_id.ids)]" + has its LHS migrated to 'group_ids' but the RHS is left untouched, + so any view referencing the rule crashes at runtime with + ``AttributeError: 'res.users' object has no attribute 'groups_id'``. + """ + openupgrade.logged_query( + env.cr, + r""" + UPDATE ir_rule + SET domain_force = regexp_replace( + domain_force, '\muser\.groups_id\M', 'user.group_ids', 'g' + ) + WHERE domain_force ~ '\muser\.groups_id\M' + """, + ) + openupgrade.logged_query( + env.cr, + r""" + UPDATE ir_filters + SET domain = regexp_replace( + domain, '\muser\.groups_id\M', 'user.group_ids', 'g' + ) + WHERE domain ~ '\muser\.groups_id\M' + """, + ) + openupgrade.logged_query( + env.cr, + r""" + UPDATE ir_act_server + SET code = regexp_replace( + code, '\muser\.groups_id\M', 'user.group_ids', 'g' + ) + WHERE code ~ '\muser\.groups_id\M' + """, + ) diff --git a/openupgrade_scripts/scripts/fleet/19.0.0.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/fleet/19.0.0.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..7619fb490449 --- /dev/null +++ b/openupgrade_scripts/scripts/fleet/19.0.0.1/upgrade_analysis_work.txt @@ -0,0 +1,49 @@ +---Models in module 'fleet'--- +new model fleet.vehicle.odometer.report [sql_view] + +# NOTHING TO DO + +---Fields in module 'fleet'--- +fleet / fleet.vehicle / co2_emission_unit (selection) : NEW required, selection_keys: ['g/km', 'g/mi'], isfunction: function, stored +fleet / fleet.vehicle / contract_date_start (date) : NEW hasdefault: default +fleet / fleet.vehicle / first_contract_date (date) : DEL +fleet / fleet.vehicle / horsepower (integer) : type is now 'float' ('integer') +fleet / fleet.vehicle / model_year (char) : selection_keys is now 'function' ('False') +fleet / fleet.vehicle / model_year (char) : type is now 'selection' ('char') +fleet / fleet.vehicle / plan_to_change_bike (boolean) : not related anymore +fleet / fleet.vehicle / plan_to_change_car (boolean) : not related anymore +fleet / fleet.vehicle / power (integer) : type is now 'float' ('integer') +fleet / fleet.vehicle / range_unit (selection) : NEW required, selection_keys: ['km', 'mi'], hasdefault: default +fleet / fleet.vehicle.log.services / brand_id (many2one) : NEW relation: fleet.vehicle.model.brand, isrelated: related, stored +fleet / fleet.vehicle.log.services / model_id (many2one) : NEW relation: fleet.vehicle.model, isrelated: related, stored +fleet / fleet.vehicle.model / drive_type (selection) : NEW selection_keys: ['4wd', 'awd', 'fwd', 'rwd'] +fleet / fleet.vehicle.model / horsepower (integer) : type is now 'float' ('integer') +fleet / fleet.vehicle.model / model_year (integer) : selection_keys is now 'function' ('False') +fleet / fleet.vehicle.model / model_year (integer) : type is now 'selection' ('integer') +fleet / fleet.vehicle.model / power (integer) : type is now 'float' ('integer') +fleet / fleet.vehicle.model / range_unit (selection) : NEW required, selection_keys: ['km', 'mi'], hasdefault: default +fleet / fleet.vehicle.odometer / driver_id (many2one) : is now stored +fleet / fleet.vehicle.odometer / driver_id (many2one) : not related anymore +fleet / fleet.vehicle.state / fold (boolean) : NEW +fleet / res.partner / plan_to_change_bike (boolean) : DEL +fleet / res.partner / plan_to_change_car (boolean) : DEL + +# NOTHING TO DO + +---XML records in module 'fleet'--- +NEW fleet.vehicle.model.brand: fleet.brand_gmc +NEW ir.actions.act_window: fleet.fleet_vehicle_odometer_reporting_action +NEW ir.model.access: fleet.access_fleet_vehicle_odometer_report_manager +DEL ir.module.category: fleet.module_fleet_category +DEL ir.rule: fleet.fleet_rule_contract_visibility_user (noupdate) +DEL ir.rule: fleet.fleet_rule_odometer_visibility_user (noupdate) +DEL ir.rule: fleet.fleet_rule_service_visibility_user (noupdate) +DEL ir.rule: fleet.fleet_rule_vehicle_visibility_user (noupdate) +NEW ir.ui.menu: fleet.menu_fleet_odometer_reporting_odometer +NEW ir.ui.view: fleet.fleet_vehicle_odometer_report_view_graph +NEW ir.ui.view: fleet.fleet_vehicle_odometer_report_view_search +NEW ir.ui.view: fleet.fleet_vehicle_view_form_quick_create +DEL ir.ui.view: fleet.fleet_vehicle_odometer_view_kanban +NEW res.groups.privilege: fleet.res_groups_privilege_fleet + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/gamification/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/gamification/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..59aca57d82f8 --- /dev/null +++ b/openupgrade_scripts/scripts/gamification/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,9 @@ +---Models in module 'gamification'--- + +---Fields in module 'gamification'--- +gamification / gamification.badge.user / message_follower_ids (one2many): NEW relation: mail.followers +gamification / gamification.badge.user / message_ids (one2many) : NEW relation: mail.message + +# NOTHING TO DO + +---XML records in module 'gamification'--- diff --git a/openupgrade_scripts/scripts/maintenance/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/maintenance/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..a23dc47b1401 --- /dev/null +++ b/openupgrade_scripts/scripts/maintenance/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,22 @@ +---Models in module 'maintenance'--- + +---Fields in module 'maintenance'--- +maintenance / maintenance.equipment / location (char) : DEL +maintenance / maintenance.equipment / match_serial (boolean) : module is now 'stock_maintenance' ('maintenance') +maintenance / maintenance.equipment.category / _inherits : DEL _inherits: {'mail.alias': 'alias_id'}, stored: False +maintenance / maintenance.equipment.category / alias_id (many2one) : DEL relation: mail.alias, required +maintenance / maintenance.equipment.category / message_follower_ids (one2many): DEL relation: mail.followers +maintenance / maintenance.equipment.category / message_ids (one2many) : DEL relation: mail.message +maintenance / maintenance.request / duration (float) : now a function +maintenance / maintenance.request / schedule_end (datetime) : NEW hasdefault: compute +maintenance / maintenance.team / _inherits : NEW _inherits: {'mail.alias': 'alias_id'}, stored: False +maintenance / maintenance.team / alias_id (many2one) : NEW relation: mail.alias, required +maintenance / maintenance.team / message_follower_ids (one2many): NEW relation: mail.followers +maintenance / maintenance.team / message_ids (one2many) : NEW relation: mail.message + +# NOTHING TO DO + +---XML records in module 'maintenance'--- +NEW res.groups.privilege: maintenance.res_groups_privilege_maintenance + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/survey/19.0.3.7/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/survey/19.0.3.7/upgrade_analysis_work.txt new file mode 100644 index 000000000000..f320c8e8154a --- /dev/null +++ b/openupgrade_scripts/scripts/survey/19.0.3.7/upgrade_analysis_work.txt @@ -0,0 +1,14 @@ +---Models in module 'survey'--- + +---Fields in module 'survey'--- +survey / survey.survey / lang_ids (many2many) : NEW relation: res.lang, hasdefault: default +survey / survey.user_input / lang_id (many2one) : NEW relation: res.lang +survey / survey.user_input.line / answer_is_correct (boolean) : now a function +survey / survey.user_input.line / answer_score (float) : now a function + +# NOTHING TO DO + +---XML records in module 'survey'--- +NEW res.groups.privilege: survey.res_groups_privilege_surveys (noupdate) + +# NOTHING TO DO