From 853fdf03256fc5c99d09105716ced633a1e3f134 Mon Sep 17 00:00:00 2001 From: AdanCortes Date: Tue, 21 Apr 2026 16:50:57 -0600 Subject: [PATCH 1/7] [ADD] project_timesheet_time_control Add the project_timesheet_time_control module as requested in task Timesheets - add stop/go module (873834): Add project timesheet control module. --- oca_all/__manifest__.py | 1 + uv.lock | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 3d256467..f0adf1d6 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -152,6 +152,7 @@ "multi_step_wizard", "partner_statement", "project_task_add_very_high", + "project_timesheet_time_control", "oca_custom", "partner_contact_access_link", "pdf_xml_attachment", diff --git a/uv.lock b/uv.lock index df45819e..4c4d9e5f 100644 --- a/uv.lock +++ b/uv.lock @@ -676,6 +676,7 @@ dependencies = [ { name = "odoo-addon-pdf-xml-attachment" }, { name = "odoo-addon-project-role" }, { name = "odoo-addon-project-task-add-very-high" }, + { name = "odoo-addon-project-timesheet-time-control" }, { name = "odoo-addon-report-xlsx" }, { name = "odoo-addon-report-xlsx-helper" }, { name = "odoo-addon-sale-loyalty-partner-applicability" }, @@ -763,7 +764,7 @@ requires-dist = [ { name = "odoo-addon-account-financial-report", specifier = "==18.0.*" }, { name = "odoo-addon-account-invoice-overdue-reminder", specifier = "==18.0.*" }, { name = "odoo-addon-account-lock-to-date", specifier = "==18.0.*" }, - { name = "odoo-addon-account-payment-method-base-mode", git = "https://github.com/Therp/bank-payment?subdirectory=account_payment_method_base_mode&branch=18.0-add-account_payment_method_base_mode" }, + { name = "odoo-addon-account-payment-method-base-mode", specifier = "==18.0.*" }, { name = "odoo-addon-account-payment-mode", specifier = "==18.0.*" }, { name = "odoo-addon-account-payment-order", specifier = "==18.0.*" }, { name = "odoo-addon-account-payment-partner", specifier = "==18.0.*" }, @@ -809,6 +810,7 @@ requires-dist = [ { name = "odoo-addon-pdf-xml-attachment", specifier = "==18.0.*" }, { name = "odoo-addon-project-role", specifier = "==18.0.*" }, { name = "odoo-addon-project-task-add-very-high", specifier = "==18.0.*" }, + { name = "odoo-addon-project-timesheet-time-control", specifier = "==18.0.*" }, { name = "odoo-addon-report-xlsx", specifier = "==18.0.*" }, { name = "odoo-addon-report-xlsx-helper", specifier = "==18.0.*" }, { name = "odoo-addon-sale-loyalty-partner-applicability", specifier = "==18.0.*" }, @@ -994,13 +996,16 @@ wheels = [ [[package]] name = "odoo-addon-account-payment-method-base-mode" -version = "18.0.1.0.0" -source = { git = "https://github.com/Therp/bank-payment?subdirectory=account_payment_method_base_mode&branch=18.0-add-account_payment_method_base_mode#3af732e133fe923ed4ec767e24f057491a059bb8" } +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "odoo" }, { name = "odoo-addon-account-payment-method-base" }, { name = "odoo-addon-account-payment-mode" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/6d/d2dbe009c452472b5e3416e5ecf83f58ecdb8009d48ead0f503dbb96ec95/odoo_addon_account_payment_method_base_mode-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:7fbf64d3ca0470c4bc2560b91d526164478b6decced5efa644549b448c817b45", size = 23763, upload-time = "2026-04-04T02:42:44.733Z" }, +] [[package]] name = "odoo-addon-account-payment-mode" @@ -1586,6 +1591,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/46/c9/fa473f0b83d56c86ebff691f8df26137d24cde37fbddcb73d7e9f4e767e2/odoo_addon_project_task_add_very_high-18.0.1.1.0.2-py3-none-any.whl", hash = "sha256:1e2df58b9d8cae8657c7cab3ceff2f1865f29a87d6020ac50c03a321c93b2fc5", size = 84181, upload-time = "2025-06-05T03:25:37.08Z" }, ] +[[package]] +name = "odoo-addon-project-timesheet-time-control" +version = "18.0.1.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/fa/fd44fcee2a72c4f5a499f9ac33d695492564c265496f9e7d38770b58d191/odoo_addon_project_timesheet_time_control-18.0.1.0.6-py3-none-any.whl", hash = "sha256:073e224f0ecc8e1fc12cbbdf730cf0c57f80fcbedf6afa284fc9c68f267481f6", size = 167479, upload-time = "2026-02-12T18:31:12.089Z" }, +] + [[package]] name = "odoo-addon-report-xlsx" version = "18.0.1.1.2.2" From 68424e652eba139a40035f8c72415901d9589c83 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 24 Apr 2026 09:13:49 +0200 Subject: [PATCH 2/7] [ADD] account_statement_import_online_ponto --- oca_all/__manifest__.py | 1 + uv.lock | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index f0adf1d6..18a179d0 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -124,6 +124,7 @@ "account_statement_import_online_stripe", "account_statement_import_online_wise", "account_statement_import_online_paypal", + "account_statement_import_online_ponto", "account_statement_import_sheet_file", "account_tax_unece", "account_usability", diff --git a/uv.lock b/uv.lock index 4c4d9e5f..02378216 100644 --- a/uv.lock +++ b/uv.lock @@ -642,6 +642,7 @@ dependencies = [ { name = "odoo-addon-account-statement-import-file" }, { name = "odoo-addon-account-statement-import-file-reconcile-oca" }, { name = "odoo-addon-account-statement-import-online-paypal" }, + { name = "odoo-addon-account-statement-import-online-ponto" }, { name = "odoo-addon-account-statement-import-online-stripe" }, { name = "odoo-addon-account-statement-import-online-wise" }, { name = "odoo-addon-account-statement-import-sheet-file" }, @@ -776,6 +777,7 @@ requires-dist = [ { name = "odoo-addon-account-statement-import-file", specifier = "==18.0.*" }, { name = "odoo-addon-account-statement-import-file-reconcile-oca", specifier = "==18.0.*" }, { name = "odoo-addon-account-statement-import-online-paypal", specifier = "==18.0.*" }, + { name = "odoo-addon-account-statement-import-online-ponto", specifier = "==18.0.*" }, { name = "odoo-addon-account-statement-import-online-stripe", specifier = "==18.0.*" }, { name = "odoo-addon-account-statement-import-online-wise", git = "https://github.com/Therp/bank-statement-import?subdirectory=account_statement_import_online_wise&branch=18.0-fix-account-statement-import-online-wise" }, { name = "odoo-addon-account-statement-import-sheet-file", specifier = "==18.0.*" }, @@ -1187,6 +1189,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/f6/fcce33781f7fb924584cc0b2107322a45a17db216afa5c363b673296b752/odoo_addon_account_statement_import_online_paypal-18.0.1.0.2-py3-none-any.whl", hash = "sha256:b53f8baae23caf8d52a01226bfe7c686eee2544c26988bc73b0f0b41144ec967", size = 50836, upload-time = "2025-10-07T13:56:22.993Z" }, ] +[[package]] +name = "odoo-addon-account-statement-import-online-ponto" +version = "18.0.1.0.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-statement-import-online" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/a2/82056480d532ec3fb0b9e6950112e85881e68445adcb6a7885995962755f/odoo_addon_account_statement_import_online_ponto-18.0.1.0.1.3-py3-none-any.whl", hash = "sha256:2b6e35e218cf8dc1100e3992d96cd2ade03ef7a7b29cf8d5680f85a992403fe9", size = 48214, upload-time = "2026-01-21T02:44:17.49Z" }, +] + [[package]] name = "odoo-addon-account-statement-import-online-stripe" version = "18.0.1.0.1" From bb4a9a75a517deacbc46bded90cba5b605675571 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 24 Apr 2026 09:14:47 +0200 Subject: [PATCH 3/7] [ADD] scheduler_error_mailer Purpose: to more easily become aware that scheduled actions are failing --- oca_all/__manifest__.py | 1 + uv.lock | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 18a179d0..e741d0bb 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -161,6 +161,7 @@ "report_xlsx", "report_xlsx_helper", "sale_loyalty_partner_applicability", + "scheduler_error_mailer", "sentry", "server_action_mass_edit", "survey_xlsx", diff --git a/uv.lock b/uv.lock index 02378216..a8bf8075 100644 --- a/uv.lock +++ b/uv.lock @@ -681,6 +681,7 @@ dependencies = [ { name = "odoo-addon-report-xlsx" }, { name = "odoo-addon-report-xlsx-helper" }, { name = "odoo-addon-sale-loyalty-partner-applicability" }, + { name = "odoo-addon-scheduler-error-mailer" }, { name = "odoo-addon-sentry" }, { name = "odoo-addon-server-action-mass-edit" }, { name = "odoo-addon-sql-request-abstract" }, @@ -816,6 +817,7 @@ requires-dist = [ { name = "odoo-addon-report-xlsx", specifier = "==18.0.*" }, { name = "odoo-addon-report-xlsx-helper", specifier = "==18.0.*" }, { name = "odoo-addon-sale-loyalty-partner-applicability", specifier = "==18.0.*" }, + { name = "odoo-addon-scheduler-error-mailer", specifier = "==18.0.*" }, { name = "odoo-addon-sentry", specifier = "==18.0.*" }, { name = "odoo-addon-server-action-mass-edit", specifier = "==18.0.*" }, { name = "odoo-addon-sql-request-abstract", specifier = "==18.0.*" }, @@ -1651,6 +1653,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/14/a3/c6f356c47f5af202abf958a5498f759c0f911a380d5ba5d286f2befbedd8/odoo_addon_sale_loyalty_partner_applicability-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:fccf0fd83885baeda3ebf5fb228bd738ece937454eecd6620c880e4e4fe17230", size = 28475, upload-time = "2025-09-05T06:26:28.674Z" }, ] +[[package]] +name = "odoo-addon-scheduler-error-mailer" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/bd/8173c16335a297b542b5f3bf0b67f67d66919007ce945e40dd11eb7df7e2/odoo_addon_scheduler_error_mailer-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:71afb2aac28a3208d4da091c9c515e8d4682b5b5072a98159af48f73a63b215f", size = 63244, upload-time = "2025-06-27T07:41:32.477Z" }, +] + [[package]] name = "odoo-addon-sentry" version = "18.0.1.0.3" From 5676c95e9ad9162abda3e0686908014c367ec07e Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 24 Apr 2026 09:29:49 +0200 Subject: [PATCH 4/7] [UPD] dotfiles --- .copier-answers.yml | 3 +-- .github/workflows/pre-commit.yml | 2 ++ .github/workflows/test.yml | 7 +++++++ .pre-commit-config.yaml | 5 +++++ .pylintrc | 18 +++++++++--------- README.md | 5 +++-- checklog-odoo.cfg | 2 ++ oca_all/README.rst | 6 +----- oca_all/static/description/index.html | 22 ++++++++-------------- 9 files changed, 38 insertions(+), 32 deletions(-) diff --git a/.copier-answers.yml b/.copier-answers.yml index 098d650e..968b9dc9 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,8 +1,7 @@ # Do NOT update manually; changes here will be overwritten by Copier -_commit: v1.35 +_commit: v1.40 _src_path: git+https://github.com/OCA/oca-addons-repo-template additional_ruff_rules: [] -ci: GitHub convert_readme_fragments_to_markdown: true enable_checklog_odoo: true generate_requirements_txt: true diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 5eb021ef..1291da52 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -17,6 +17,8 @@ jobs: - uses: actions/setup-python@v5 with: 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 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c495b9ea..5a730afc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -70,6 +70,13 @@ jobs: run: oca_init_test_database - name: Run tests run: oca_run_tests + - name: Upload screenshots from JS tests + uses: actions/upload-artifact@v4 + if: ${{ failure() }} + with: + name: Screenshots of failed JS tests - ${{ matrix.name }}${{ join(matrix.include) }} + path: /tmp/odoo_tests/${{ env.PGDATABASE }} + if-no-files-found: ignore - uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 946fa380..cc7d5d5c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,6 +38,11 @@ repos: 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|\.prettierrc\.yml|\.eslintrc\.yml)$' + language: fail - repo: https://github.com/sbidoul/whool rev: v1.3 hooks: diff --git a/.pylintrc b/.pylintrc index d103ffcd..197cb673 100644 --- a/.pylintrc +++ b/.pylintrc @@ -99,22 +99,22 @@ enable=anomalous-backslash-in-string, translation-positional-used, website-manifest-key-not-valid-uri, external-request-timeout, - # messages that do not cause the lint step to fail - consider-merging-classes-inherited, + missing-manifest-dependency, + too-complex,, 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, + # messages that do not cause the lint step to fail + consider-merging-classes-inherited, + deprecated-module, + invalid-commit, + missing-readme, + odoo-addons-relative-import, + redefined-builtin, manifest-external-assets diff --git a/README.md b/README.md index f8f49563..b3d32f17 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ +[![Support the OCA](https://odoo-community.org/readme-banner-image)](https://odoo-community.org/get-involved?utm_source=repo-readme) + +# oca-custom [![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/oca-custom&target_branch=18.0) [![Pre-commit Status](https://github.com/OCA/oca-custom/actions/workflows/pre-commit.yml/badge.svg?branch=18.0)](https://github.com/OCA/oca-custom/actions/workflows/pre-commit.yml?query=branch%3A18.0) [![Build Status](https://github.com/OCA/oca-custom/actions/workflows/test.yml/badge.svg?branch=18.0)](https://github.com/OCA/oca-custom/actions/workflows/test.yml?query=branch%3A18.0) @@ -7,8 +10,6 @@ -# oca-custom - oca-custom diff --git a/checklog-odoo.cfg b/checklog-odoo.cfg index 0b55b7bf..58d43aa6 100644 --- a/checklog-odoo.cfg +++ b/checklog-odoo.cfg @@ -1,3 +1,5 @@ [checklog-odoo] ignore= WARNING.* 0 failed, 0 error\(s\).* + WARNING .* Killing chrome descendants-or-self .* + WARNING.* Missing widget: res_partner_many2one for field of type many2one.* diff --git a/oca_all/README.rst b/oca_all/README.rst index 89040ad0..e7a2a88e 100644 --- a/oca_all/README.rst +++ b/oca_all/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ======= OCA All ======= @@ -17,7 +13,7 @@ OCA All .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github diff --git a/oca_all/static/description/index.html b/oca_all/static/description/index.html index 80c14f36..5819b2d2 100644 --- a/oca_all/static/description/index.html +++ b/oca_all/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +OCA All -
+
+

OCA All

- - -Odoo Community Association - -
-

OCA All

-

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

OCA’s Odoo instance’s dependencies.

Installing this module will create an instance likes the one used to manage the OCA association.

@@ -396,7 +391,7 @@

OCA All

-

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 to smash it by providing a detailed and welcomed @@ -404,15 +399,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -427,6 +422,5 @@

Maintainers

-
From 5c8c6f0d2b112e2605aead9151d013176a204f27 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 24 Apr 2026 09:40:54 +0200 Subject: [PATCH 5/7] [UPD] CONTRIBUTING.md to README.md --- CONTRIBUTING.md | 239 -------------------------------------------- README.md | 257 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 225 insertions(+), 271 deletions(-) delete mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 7de47bc9..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,239 +0,0 @@ -# Contribute to the OCA's Odoo instance (kick-starter guide) - -This one-pager guide aims to help happy volunteers to contribute to the OCA's Odoo -instance, supposedly the OCA's Internal Tools team. - -## Table of content - -1. [Introduction](#introduction): who we are, how we work -2. [Getting Started](#getting-started) - - [Concepts](#concepts): main concepts to understand and general organization - - [Processes](#processes): helping doing the work without missing crucial steps - - [How-Tos](#how-tos): how to do specific tasks -3. [FAQ](#FAQ) - -## Introduction - -This repository is managed by OCA's Internal Tools team: - -- email: [internaltools@odoo-community.org](mailto:internaltools@odoo-community.org) -- [Github team page](https://github.com/orgs/OCA/teams/internal-tools) -- [Github project Kanban](https://github.com/orgs/OCA/projects/13) - -Please refer to the document -[Scope & Objective](https://docs.google.com/document/d/1RcOUstPJDev1bgPZcNXWiHBt5PeqraisU5bKIZatcnY/edit?pli=1&tab=t.0#heading=h.jrsgv4k2u2ao) -to understand the governance and missions of the Internal Tools team within the OCA. -Under the watch of OCA board, this document mainly explains: - -- The "Raison d'être" of the Internal Tools group -- Tasks and responsabilities -- Autonomy scope -- How to become part of the group -- Internal governances (leaders & members) -- Useful processes to start working in the group - -## Getting Started - -This section will guide you to: - -1. Build a test environment on a developer's machine, replicating OCA's Odoo production - instance -2. Push a change in production to OCA's Odoo production instance - -### Concepts - -This repository is setup as other OCA's repositories to launch CI as usual and as an -extra configuration in order to build the OCA' Docker image used by our Odoo instance, -as well as facilitate the bootstrapping of a development environment. - -Managing and freezing modules versions rely on python tools: - -- [uv](https://docs.astral.sh/uv/) -- [hatch-odoo](https://pypi.org/project/hatch-odoo/) - -### Processes - -Here we focus on what to do without explaining how to do it. - -### Release - -While we are building and publishing a docker image the current state is that the image -is build at deploy time on OCA server. - -While technically speaking there is nothing more than accessing to a public commit to -deploy a new version it's a common practice to merge your work on branch 14.0 before -deploying a new version in production. - -> **Note**: in this repository we allow unreleased dependencies. - -#### Deployment - -Ask administrator to deploy the given commit. - -### How-Tos - -Here we focus on how to do it, it's a suggest way to works but feel free to use your own -way. - -#### Setup developer environment - -Requirements: - -- **uv**: several methods exist to install it, one can be - `curl -LsSf https://astral.sh/uv/install.sh | sh`. It will install other - prerequisites. -- Postgresql -- Some dependencies to be able to build some python packages: `libpq-dev`, - `build-essential`, ... -- wkhtmltopdf - -Run the following commands to prepare a python virtual environment with the correct -python version (which uv will download for you if necessary) and install the required -dependencies: - -```bash -git clone git@github.com:OCA/oca-custom -branch 14.0 -cd oca-custom -uv sync -``` - -#### Setup database - -Setup database with demo data and all OCA modules installed: - -```bash -uv run odoo -d oca-custom -i oca_all --stop-after-init --without-demo= -``` - -The `oca_all` module contains the `__manifest__.py` with all Odoo modules dependencies -for the OCA Odoo instance. - -#### Neutralize database - -If you are allow to access to a production database, neutralization happens while -stating the Docker container if the running environnement is not the production server. - -On development, if your are not using docker you can running neutralize scripts such as: - -```bash - find entrypoints/neutralize/*.sql -type f -exec psql -f {} \; -``` - -#### Development - -For addons living in this repository, you can just change code and restart Odoo with the -`uv run` command. - -For addons in other repositories, the procedure is as follows: - -- check out the repository somewhere, ie /src/\$repo -- add the following line to `pyproject.toml` in the `[tool.uv.sources]` section: - - ```pyproject - odoo14-addon-$youraddon = { path = "/srv/$repo/setup/$youraddon", editable = true } - ``` - -- run `uv sync` -- restart Odoo - -#### Use unreleased dependency - -There is two different goals: - -- making the test CI pass: using regular test-requirements.txt files add a line such as - - ``` - odoo14-addon-membership-delegated-partner-line @ git+https://github.com/OCA/vertical-association@refs/pull/151/head#subdirectory=setup/membership_delegated_partner_line - ``` - -- bring the unreleased dependency in the uv project (and the built docker image), add - the following line to `pyproject.toml` in the `[tool.uv.sources]` section: - - ```pyproject - odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } - ``` - -#### Launch tests - -Run tests using pytest launcher. - -```bash -uv run pytest --odoo-database oca-custom --cov ./oca_psc_team/ oca_psc_team/ -``` - -#### Update OCB Branch - -```bash -uv sync -P odoo -``` - -#### Update a specific OCA module dependency using the latest pypi release - -```bash -uv sync -P odoo14-addon- -``` - -Note bug https://github.com/astral-sh/uv/issues/14684, that says if multiple packages -are sourced from the same branch/PR, we need to specify both of them as to upgrade, -otherwise they don't get rescanned. - -#### Bump all dependencies to the latest version - -```bash -uv sync -U -``` - -## FAQ - -#### How can I start contributing in OCA toolings? - -- Get to know the manifest document of OCA's Internal Tools team: - [Scope & Objective](https://docs.google.com/document/d/1RcOUstPJDev1bgPZcNXWiHBt5PeqraisU5bKIZatcnY/edit?pli=1&tab=t.0#heading=h.jrsgv4k2u2ao). -- Write to us at - [internaltools@odoo-community.org](mailto:internaltools@odoo-community.org). -- Install a test environment on your machine of the OCA's Odoo instance by following the - [§ Getting Started](#getting-started). - -#### How to communicate with the OCA Internal Tools? - -Our main communication channel is the mailing list -[internaltools@odoo-community.org](mailto:internaltools@odoo-community.org). For -task-related discussion, also directly use the Chatter of the Odoo tasks. - -#### Where is the tasks backlog of the OCA Internal Tools? - -We use the Odoo project **OCA internal tools workgroup** on the OCA's Odoo instance to -organize our tasks and priorities. A public access to the project can be provided to OCA -members who contributes to the tooling tasks (not requesting privacy form signing). - -#### How to access the backend of OCA's Odoo instance? - -It can be useful to access Odoo back-end for both task management and browse instance's -modules and data. For such, prerquisites are: - -- being a member of the OCA and the **OCA Internal Tools group** -- be registered on OCA's Odoo instance -- fullfil and send back the **Data protection & privacy** form, available on OCA website - [Resources / How to guides / Protect data & privacy when you support OCA projects](https://odoo-community.org/privacy) - -#### What are useful Github repositories? - -- The current **oca-custom** is the main repository. It contains both all Odoo modules - dependencies of OCA instance in `oca_all/__manifest__.py` and all configuration to - build an Odoo test instance the `uv`, as described in - [Getting Started](#getting-started). -- [**apps-store**](https://github.com/OCA/apps-store/tree/14.0) holds mechanisms of OCA - modules replication to official Odoo's App Store - -#### How to get representive data, for troubleshooting and test? - -Contact the mailing list to get a neutralized and anonymized database. - -#### How to gain command line access and read logs? - -Only a few people have admin server access, please reach the mailing list for further -details. - -#### How to refresh test instance from production instances (on the server)? - -`home/odoo/instance/README` gives some guidance. diff --git a/README.md b/README.md index b3d32f17..7de47bc9 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,239 @@ +# Contribute to the OCA's Odoo instance (kick-starter guide) -[![Support the OCA](https://odoo-community.org/readme-banner-image)](https://odoo-community.org/get-involved?utm_source=repo-readme) +This one-pager guide aims to help happy volunteers to contribute to the OCA's Odoo +instance, supposedly the OCA's Internal Tools team. -# oca-custom -[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/oca-custom&target_branch=18.0) -[![Pre-commit Status](https://github.com/OCA/oca-custom/actions/workflows/pre-commit.yml/badge.svg?branch=18.0)](https://github.com/OCA/oca-custom/actions/workflows/pre-commit.yml?query=branch%3A18.0) -[![Build Status](https://github.com/OCA/oca-custom/actions/workflows/test.yml/badge.svg?branch=18.0)](https://github.com/OCA/oca-custom/actions/workflows/test.yml?query=branch%3A18.0) -[![codecov](https://codecov.io/gh/OCA/oca-custom/branch/18.0/graph/badge.svg)](https://codecov.io/gh/OCA/oca-custom) -[![Translation Status](https://translation.odoo-community.org/widgets/oca-custom-18-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/oca-custom-18-0/?utm_source=widget) +## Table of content - +1. [Introduction](#introduction): who we are, how we work +2. [Getting Started](#getting-started) + - [Concepts](#concepts): main concepts to understand and general organization + - [Processes](#processes): helping doing the work without missing crucial steps + - [How-Tos](#how-tos): how to do specific tasks +3. [FAQ](#FAQ) -oca-custom +## Introduction - +This repository is managed by OCA's Internal Tools team: - +- email: [internaltools@odoo-community.org](mailto:internaltools@odoo-community.org) +- [Github team page](https://github.com/orgs/OCA/teams/internal-tools) +- [Github project Kanban](https://github.com/orgs/OCA/projects/13) -[//]: # (addons) +Please refer to the document +[Scope & Objective](https://docs.google.com/document/d/1RcOUstPJDev1bgPZcNXWiHBt5PeqraisU5bKIZatcnY/edit?pli=1&tab=t.0#heading=h.jrsgv4k2u2ao) +to understand the governance and missions of the Internal Tools team within the OCA. +Under the watch of OCA board, this document mainly explains: -Available addons ----------------- -addon | version | maintainers | summary ---- | --- | --- | --- -[oca_all](oca_all/) | 18.0.0.0.2 | petrus-v | All oca modules dependencies -[oca_custom](oca_custom/) | 18.0.1.0.1 | | Custom Settings for OCA Instance -[oca_website](oca_website/) | 18.0.1.0.0 | | OCA Website Theme -[website_oca_integrator](website_oca_integrator/) | 18.0.1.0.1 | | Displays Integrators in website. -[website_sale_oca_apps](website_sale_oca_apps/) | 18.0.1.0.2 | | Redirect all archived OCA-App-Related Products to the new shop +- The "Raison d'être" of the Internal Tools group +- Tasks and responsabilities +- Autonomy scope +- How to become part of the group +- Internal governances (leaders & members) +- Useful processes to start working in the group -[//]: # (end addons) +## Getting Started - +This section will guide you to: -## Licenses +1. Build a test environment on a developer's machine, replicating OCA's Odoo production + instance +2. Push a change in production to OCA's Odoo production instance -This repository is licensed under [AGPL-3.0](LICENSE). +### Concepts -However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA) -policy. Consult each module's `__manifest__.py` file, which contains a `license` key -that explains its license. +This repository is setup as other OCA's repositories to launch CI as usual and as an +extra configuration in order to build the OCA' Docker image used by our Odoo instance, +as well as facilitate the bootstrapping of a development environment. ----- -OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit -organization whose mission is to support the collaborative development of Odoo features -and promote its widespread use. +Managing and freezing modules versions rely on python tools: + +- [uv](https://docs.astral.sh/uv/) +- [hatch-odoo](https://pypi.org/project/hatch-odoo/) + +### Processes + +Here we focus on what to do without explaining how to do it. + +### Release + +While we are building and publishing a docker image the current state is that the image +is build at deploy time on OCA server. + +While technically speaking there is nothing more than accessing to a public commit to +deploy a new version it's a common practice to merge your work on branch 14.0 before +deploying a new version in production. + +> **Note**: in this repository we allow unreleased dependencies. + +#### Deployment + +Ask administrator to deploy the given commit. + +### How-Tos + +Here we focus on how to do it, it's a suggest way to works but feel free to use your own +way. + +#### Setup developer environment + +Requirements: + +- **uv**: several methods exist to install it, one can be + `curl -LsSf https://astral.sh/uv/install.sh | sh`. It will install other + prerequisites. +- Postgresql +- Some dependencies to be able to build some python packages: `libpq-dev`, + `build-essential`, ... +- wkhtmltopdf + +Run the following commands to prepare a python virtual environment with the correct +python version (which uv will download for you if necessary) and install the required +dependencies: + +```bash +git clone git@github.com:OCA/oca-custom -branch 14.0 +cd oca-custom +uv sync +``` + +#### Setup database + +Setup database with demo data and all OCA modules installed: + +```bash +uv run odoo -d oca-custom -i oca_all --stop-after-init --without-demo= +``` + +The `oca_all` module contains the `__manifest__.py` with all Odoo modules dependencies +for the OCA Odoo instance. + +#### Neutralize database + +If you are allow to access to a production database, neutralization happens while +stating the Docker container if the running environnement is not the production server. + +On development, if your are not using docker you can running neutralize scripts such as: + +```bash + find entrypoints/neutralize/*.sql -type f -exec psql -f {} \; +``` + +#### Development + +For addons living in this repository, you can just change code and restart Odoo with the +`uv run` command. + +For addons in other repositories, the procedure is as follows: + +- check out the repository somewhere, ie /src/\$repo +- add the following line to `pyproject.toml` in the `[tool.uv.sources]` section: + + ```pyproject + odoo14-addon-$youraddon = { path = "/srv/$repo/setup/$youraddon", editable = true } + ``` + +- run `uv sync` +- restart Odoo + +#### Use unreleased dependency + +There is two different goals: + +- making the test CI pass: using regular test-requirements.txt files add a line such as + + ``` + odoo14-addon-membership-delegated-partner-line @ git+https://github.com/OCA/vertical-association@refs/pull/151/head#subdirectory=setup/membership_delegated_partner_line + ``` + +- bring the unreleased dependency in the uv project (and the built docker image), add + the following line to `pyproject.toml` in the `[tool.uv.sources]` section: + + ```pyproject + odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } + ``` + +#### Launch tests + +Run tests using pytest launcher. + +```bash +uv run pytest --odoo-database oca-custom --cov ./oca_psc_team/ oca_psc_team/ +``` + +#### Update OCB Branch + +```bash +uv sync -P odoo +``` + +#### Update a specific OCA module dependency using the latest pypi release + +```bash +uv sync -P odoo14-addon- +``` + +Note bug https://github.com/astral-sh/uv/issues/14684, that says if multiple packages +are sourced from the same branch/PR, we need to specify both of them as to upgrade, +otherwise they don't get rescanned. + +#### Bump all dependencies to the latest version + +```bash +uv sync -U +``` + +## FAQ + +#### How can I start contributing in OCA toolings? + +- Get to know the manifest document of OCA's Internal Tools team: + [Scope & Objective](https://docs.google.com/document/d/1RcOUstPJDev1bgPZcNXWiHBt5PeqraisU5bKIZatcnY/edit?pli=1&tab=t.0#heading=h.jrsgv4k2u2ao). +- Write to us at + [internaltools@odoo-community.org](mailto:internaltools@odoo-community.org). +- Install a test environment on your machine of the OCA's Odoo instance by following the + [§ Getting Started](#getting-started). + +#### How to communicate with the OCA Internal Tools? + +Our main communication channel is the mailing list +[internaltools@odoo-community.org](mailto:internaltools@odoo-community.org). For +task-related discussion, also directly use the Chatter of the Odoo tasks. + +#### Where is the tasks backlog of the OCA Internal Tools? + +We use the Odoo project **OCA internal tools workgroup** on the OCA's Odoo instance to +organize our tasks and priorities. A public access to the project can be provided to OCA +members who contributes to the tooling tasks (not requesting privacy form signing). + +#### How to access the backend of OCA's Odoo instance? + +It can be useful to access Odoo back-end for both task management and browse instance's +modules and data. For such, prerquisites are: + +- being a member of the OCA and the **OCA Internal Tools group** +- be registered on OCA's Odoo instance +- fullfil and send back the **Data protection & privacy** form, available on OCA website + [Resources / How to guides / Protect data & privacy when you support OCA projects](https://odoo-community.org/privacy) + +#### What are useful Github repositories? + +- The current **oca-custom** is the main repository. It contains both all Odoo modules + dependencies of OCA instance in `oca_all/__manifest__.py` and all configuration to + build an Odoo test instance the `uv`, as described in + [Getting Started](#getting-started). +- [**apps-store**](https://github.com/OCA/apps-store/tree/14.0) holds mechanisms of OCA + modules replication to official Odoo's App Store + +#### How to get representive data, for troubleshooting and test? + +Contact the mailing list to get a neutralized and anonymized database. + +#### How to gain command line access and read logs? + +Only a few people have admin server access, please reach the mailing list for further +details. + +#### How to refresh test instance from production instances (on the server)? + +`home/odoo/instance/README` gives some guidance. From 3373ffc658115cdf9ef6e43475ef310f5d76a8f2 Mon Sep 17 00:00:00 2001 From: Internal Tools from Odoo instance Date: Fri, 24 Apr 2026 12:24:39 +0200 Subject: [PATCH 6/7] [IMP] be able to disable the triggering of neutralization, mainly because sometimes you have regular workers and cron workers be a separate process, and only one needs to trigger the neutralization --- entrypoints/000_08_standard-neutralize | 4 ++++ entrypoints/000_10_odoo-neutralize | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/entrypoints/000_08_standard-neutralize b/entrypoints/000_08_standard-neutralize index 960e3f3e..4396445f 100755 --- a/entrypoints/000_08_standard-neutralize +++ b/entrypoints/000_08_standard-neutralize @@ -26,6 +26,10 @@ def neutralize_db(env): @click_odoo.env_options(with_rollback=False) def main(env): running_env = os.getenv("RUNNING_ENV") + disable_neutralize = os.getenv("DISABLE_NEUTRALIZE") + if disable_neutralize == "yes": + _logger.info("DISABLE_NEUTRALIZE = yes, not neutralizing") + sys.exit(0) if not running_env: _logger.info( "RUNNING_ENV is not defined, please set a RUNNING_ENV and try again" diff --git a/entrypoints/000_10_odoo-neutralize b/entrypoints/000_10_odoo-neutralize index 9ff7b883..229b7e4f 100755 --- a/entrypoints/000_10_odoo-neutralize +++ b/entrypoints/000_10_odoo-neutralize @@ -2,6 +2,12 @@ set -e set -x +if [[ "${DISABLE_NEUTRALIZE}" = 'yes' ]] +then + echo "DISABLE_NEUTRALIZE = yes, skipping neutralization" + exit 0 +fi + if [[ -z "${RUNNING_ENV}" ]] then echo "RUNNING_ENV is not defined, please set a RUNNING_ENV and try again" From f93da7ffd71c8d8f61c0d9cef7a9c27c355b1b14 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 24 Apr 2026 12:50:06 +0200 Subject: [PATCH 7/7] [UPD] crowdfunding to merged version --- pyproject.toml | 2 -- test-requirements.txt | 2 -- uv.lock | 18 ++++++++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9481459e..a6863b8f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -108,8 +108,6 @@ odoo-addon-apps_product_creator = { git = "https://github.com/Therp/apps-store", # Unreleased addon sources (git), handled via uv.sources (NOT requirements/test-requirements) odoo-addon-membership_delegated_partner_line = { git = "https://github.com/gfcapalbo/vertical-association", branch = "18.0-MIG-membership_delegated_partner_line", subdirectory = "membership_delegated_partner_line" } odoo-addon-github_connector_oca = { git = "https://github.com/Therp/interface-github", branch = "18.0-mig-github_connector_oca", subdirectory = "github_connector_oca" } -odoo-addon-crowdfunding = { git = "https://github.com/hbrunn/crowdfunding", branch = "18.0-mig-crowdfunding", subdirectory = "crowdfunding" } -odoo-addon-crowdfunding_public_pledge = { git = "https://github.com/hbrunn/crowdfunding", branch = "18.0-mig-crowdfunding", subdirectory = "crowdfunding_public_pledge" } odoo-addon-account_statement_import_online_wise = { git = "https://github.com/Therp/bank-statement-import", branch="18.0-fix-account-statement-import-online-wise", subdirectory = "account_statement_import_online_wise" } odoo-addon-account_banking_pain_base = { git = "https://github.com/Therp/bank-payment", branch = "18.0-mig-account_banking_pain_base_sepa_hybrid_extended_for_09", subdirectory = "account_banking_pain_base" } odoo-addon-account_banking_sepa_credit_transfer = { git = "https://github.com/Therp/bank-payment", branch = "18.0-mig-account_banking_pain_base_sepa_hybrid_extended_for_09", subdirectory = "account_banking_sepa_credit_transfer" } diff --git a/test-requirements.txt b/test-requirements.txt index 490872bf..0e996346 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -4,8 +4,6 @@ coverage[toml] odoo-addon-membership-delegated-partner-line @ git+https://github.com/gfcapalbo/vertical-association.git@18.0-MIG-membership_delegated_partner_line#subdirectory=membership_delegated_partner_line odoo-addon-github_connector_oca @ git+https://github.com/Therp/interface-github.git@18.0-mig-github_connector_oca#subdirectory=github_connector_oca odoo-addon-apps_product_creator @ git+https://github.com/Therp/apps-store.git@18.0-mig-apps_product_creator#subdirectory=apps_product_creator -odoo-addon-crowdfunding @ git+https://github.com/hbrunn/crowdfunding.git@18.0-mig-crowdfunding#subdirectory=crowdfunding -odoo-addon-crowdfunding_public_pledge @ git+https://github.com/hbrunn/crowdfunding.git@18.0-mig-crowdfunding#subdirectory=crowdfunding_public_pledge odoo-addon-account_statement_import_online_wise @ git+https://github.com/Therp/bank-statement-import@18.0-fix-account-statement-import-online-wise#subdirectory=account_statement_import_online_wise odoo-addon-account_banking_pain_base @ git+https://github.com/Therp/bank-payment.git@18.0-mig-account_banking_pain_base_sepa_hybrid_extended_for_09#subdirectory=account_banking_pain_base odoo-addon-account_banking_sepa_credit_transfer @ git+https://github.com/Therp/bank-payment.git@18.0-mig-account_banking_pain_base_sepa_hybrid_extended_for_09#subdirectory=account_banking_sepa_credit_transfer diff --git a/uv.lock b/uv.lock index a8bf8075..38350084 100644 --- a/uv.lock +++ b/uv.lock @@ -789,8 +789,8 @@ requires-dist = [ { name = "odoo-addon-base-ubl", specifier = "==18.0.*" }, { name = "odoo-addon-base-unece", specifier = "==18.0.*" }, { name = "odoo-addon-bi-sql-editor", specifier = "==18.0.*" }, - { name = "odoo-addon-crowdfunding", git = "https://github.com/hbrunn/crowdfunding?subdirectory=crowdfunding&branch=18.0-mig-crowdfunding" }, - { name = "odoo-addon-crowdfunding-public-pledge", git = "https://github.com/hbrunn/crowdfunding?subdirectory=crowdfunding_public_pledge&branch=18.0-mig-crowdfunding" }, + { name = "odoo-addon-crowdfunding", specifier = "==18.0.*" }, + { name = "odoo-addon-crowdfunding-public-pledge", specifier = "==18.0.*" }, { name = "odoo-addon-currency-rate-update", specifier = "==18.0.*" }, { name = "odoo-addon-date-range", specifier = "==18.0.*" }, { name = "odoo-addon-date-range-account", specifier = "==18.0.*" }, @@ -1318,21 +1318,27 @@ wheels = [ [[package]] name = "odoo-addon-crowdfunding" -version = "18.0.1.0.0.6" -source = { git = "https://github.com/hbrunn/crowdfunding?subdirectory=crowdfunding&branch=18.0-mig-crowdfunding#b300e33302f55324470859a168515104d1e79f12" } +version = "18.0.1.0.0.8" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "odoo" }, { name = "odoo-addon-onchange-helper" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/28/eaa271176b85bb5c62b2f10b337b7907c1ee541bf655989904dd9d446833/odoo_addon_crowdfunding-18.0.1.0.0.8-py3-none-any.whl", hash = "sha256:60b9f2f423c133f117a93208f126b09b0fa10af1b68014e2829a7bb148bdfd65", size = 46399, upload-time = "2026-04-24T07:57:42.992Z" }, +] [[package]] name = "odoo-addon-crowdfunding-public-pledge" -version = "18.0.1.0.0.3" -source = { git = "https://github.com/hbrunn/crowdfunding?subdirectory=crowdfunding_public_pledge&branch=18.0-mig-crowdfunding#b300e33302f55324470859a168515104d1e79f12" } +version = "18.0.1.0.0.6" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "odoo" }, { name = "odoo-addon-crowdfunding" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/e1/498f600244e14bf2770f82c8b9d878c7da63abbb6f56a136950bda0e32b1/odoo_addon_crowdfunding_public_pledge-18.0.1.0.0.6-py3-none-any.whl", hash = "sha256:0fe327955675eed0b7aad75dc4c89acbed5a651f8c6f0fa98f697d8348c7f7b5", size = 23261, upload-time = "2026-04-24T07:57:39.742Z" }, +] [[package]] name = "odoo-addon-currency-rate-update"