Tuesday, June 10, 2025
16 changes · master
Enhancements to existing features
The Point of Sale settings now include the missing documentation link for the Tyro payment provider. This makes it easier for users configuring Tyro payments to find the right setup guidance directly from Odoo.
Original PR description
Before this commit: --------------------------- - Tyro payment provider were missing documentation link in POS configuration. After this commit: ------------------------- - Added missing documentation link for Tyro payment Provider. Task: 4797691 Related PR: https://github.com/odoo/odoo/pull/210133
The WhatsApp test setup now uses partner and guest records instead of a generic persona representation. This keeps enterprise tests closer to real system behavior and helps reduce the risk of mismatches between automated checks and actual customer usage.
Original PR description
Use partners and guests to be as close to python as possible. Part of task-4675747 Part of task-4676466 https://github.com/odoo/odoo/pull/212092
Code cleanup and technical improvements
Odoo now builds IoT box connection links based on how the user is currently accessing the system, avoiding mismatches between secure and non-secure connections. This helps Point of Sale and self-ordering IoT integrations connect more consistently in environments where Odoo can be reached through multiple URLs.
Original PR description
The `ip_url` field on the IoT box model was intended to provide the full URL of the IoT box, e.g. 'http://1.2.3.4:8069' or 'https://1-2-3-4.abcd.odoo-iot.com'. However the problem was that it relied on `web.base.url` to determine if it should use HTTP or HTTPS, which can cause problems if the Odoo database can be accessed via both. To fix this, we instead started to use a helper on the frontend, `formatEndpoint`, to perform the same task, except that it can take into account the actual browsing context and always use the same protocol. This changes the remaining uses of `ip_url` to use `formatEndpoint`, except the `open_homepage` action which now gets the current protocol from the request object. With no remaining usages the field itself can be removed. task-4813536
Miscellaneous changes
When executing follow-up actions, a KeyError could occur if the 'journals' key was missing from the options dictionary Steps to reproduce: Go to Accounting > Reports, open the Follow-up Report, and click Options. Untick journals so that the 'journals' list is effectively removed. Go to Customers, select any customer, Click on Customer Statement. Try to change Report (up right) to Follow_Up Report OPW-4798813 Forward-Port-Of: odoo/enterprise#87079
Original PR description
When executing follow-up actions, a KeyError could occur if the 'journals' key was missing from the options dictionary Steps to reproduce: Go to Accounting > Reports, open the Follow-up Report, and click Options. Untick journals so that the 'journals' list is effectively removed. Go to Customers, select any customer, Click on Customer Statement. Try to change Report (up right) to Follow_Up Report OPW-4798813 Forward-Port-Of: odoo/enterprise#87079
This change reorganizes a shared testing helper so multiple website-related modules can use the same request mock from a common location. It reduces duplicated test setup and helps keep automated checks consistent across areas like subscriptions, appointments, signing, WhatsApp, and support forums.
Original PR description
odoo/odoo#212405
**Issue** In the Mexican localization, the CFDI usage (`l10n_mx_edi_usage`) field is not visible on POS orders in the backend. This prevents users from selecting or modifying the usage when manually generating an invoice from the POS order. **Steps to Reproduce** 1. Install the Point of Sale app and the Mexican localization (l10n_mx) 2. Complete a POS order without generating an invoice 3. In the backend, go to Point of Sale > Orders > Orders 4. Open the newly created order 5. Notice th
Original PR description
**Issue** In the Mexican localization, the CFDI usage (`l10n_mx_edi_usage`) field is not visible on POS orders in the backend. This prevents users from selecting or modifying the usage when manually…
**Issue** In the Mexican localization, the CFDI usage (`l10n_mx_edi_usage`) field is not visible on POS orders in the backend. This prevents users from selecting or modifying the usage when manually generating an invoice from the POS order. **Steps to Reproduce** 1. Install the Point of Sale app and the Mexican localization (l10n_mx) 2. Complete a POS order without generating an invoice 3. In the backend, go to Point of Sale > Orders > Orders 4. Open the newly created order 5. Notice that the CFDI Usage field is missing **Root Cause** The usage field is given a default value at the model level: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/l10n_mx_edi_pos/models/pos_order.py#L65-L70 However, this value gets lost during the order processing flow. When an invoice is requested directly from the POS UI, the usage is explicitly set in the `sync_from_ui` method: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/l10n_mx_edi_pos/models/pos_order.py#L110-L112 But if no invoice is requested at the time of the order, the usage is not preserved or restored in the backend. **Fix** Explicitly set the CFDI usage to its default value when an invoice is not requested during the POS flow. This ensures the usage field is retained and displayed properly in the backend, allowing users to create invoices manually. opw-4776487 Forward-Port-Of: odoo/enterprise#85954
Previously, the `company_id` field on `budget.analytic` was mandatory. - Removed the `required=True` constraint on the `company_id` field in the `budget.analytic` model. - Updated the record rules `budget_comp_rule` and `budget_lines_comp_rule` to allow access to records where `company_id` is either in the user's companies or unset (`False`). task-4677599 Forward-Port-Of: odoo/enterprise#82955
Original PR description
Previously, the `company_id` field on `budget.analytic` was mandatory. - Removed the `required=True` constraint on the `company_id` field in the `budget.analytic` model. - Updated the record rules `budget_comp_rule` and `budget_lines_comp_rule` to allow access to records where `company_id` is either in the user's companies or unset (`False`). task-4677599 Forward-Port-Of: odoo/enterprise#82955
**[FIX] account_accountant: fully reconcile the move_line if amounts close** If an invoice has a bigger amount than the bank line but within the tolerance of 3%, reconcile the invoice automatically and leave the difference in the suspense account. The statement line will be partially matched. **[IMP] account_accountant: allow filling with reco model on partial** So, with the idea of directly reconciling the aml and leave the partial on the statement line if the amount is close, we want
Original PR description
**[FIX] account_accountant: fully reconcile the move_line if amounts close** If an invoice has a bigger amount than the bank line but within the tolerance of 3%, reconcile the invoice automatically…
**[FIX] account_accountant: fully reconcile the move_line if amounts close** If an invoice has a bigger amount than the bank line but within the tolerance of 3%, reconcile the invoice automatically and leave the difference in the suspense account. The statement line will be partially matched. **[IMP] account_accountant: allow filling with reco model on partial** So, with the idea of directly reconciling the aml and leave the partial on the statement line if the amount is close, we want an easy way for a user to assign these leftovers. Before this commit, when you clicked on the reconciliation model after partially putting amount, it would try to override everything on the statement line and putting what is said by the model. Now, we leave the amounts previously reconciled and complete it with the model. **[IMP] account_accountant: automatic model for fees** For the leftover from the full reco of the invoice that are left on the statement line, we propose a new reconciliation model that will be put when we encounter these situations. We create it when the user is in the case of the 3% and that he put the leftover on a specific account. **[FIX] account_accountant: line auto-reconciled does not change count** To reproduce: Create a statement line of 1000 for partner A Create an invoice of 1000 for same partner Create a statement line of 1000 for same partner => The invoice is now auto-reconciled. But the Count of Reconcile for the first st_line is still 1 task-4749343 Forward-Port-Of: odoo/enterprise#84264
For untracked component moves in the shop floor: - No longer show move lines - Show pencil button instead of add button, clicking opens edit quantity - Apply sets picked (and passes check if applicable) - No remove button, instead: - Add an undo button to unreserve and reassign the move, and set picked to false (and sets quality status to none on check if applicable) Also: make sure to display moves created via Add Component in the shop floor on the relevant MO card (as well as a
Original PR description
For untracked component moves in the shop floor:
- No longer show move lines
- Show pencil button instead of add button, clicking opens edit quantity
- Apply sets picked (and passes check if applicable)
- No remove button, instead:
- Add an undo button to unreserve and reassign the move, and set picked to false (and sets quality status to none on check if applicable)
Also: make sure to display moves created via Add Component in the shop floor on the relevant MO card (as well as all WOs of this MO)
task-4760982
Forward-Port-Of: odoo/enterprise#85019When using the 'skip until' option, we assume the early entries have been already posted elsewhere and their value should be accounted for. However, the outstanding balance of the loan will not keep into account skipped entries, resulting in an incorrectly higher amount, Steps to reproduce: - Create a new loan with: - Amount Borrowed: 24000 - Loan Date: 01/01/2024 - Duration: 48 months - Skip Until: 01/01/2025 - Compute (Duration of 4 years, Interest 1%) - Confirm Issue:
Original PR description
When using the 'skip until' option, we assume the early entries have been already posted elsewhere and their value should be accounted for. However, the outstanding balance of the loan will not keep into account skipped entries, resulting in an incorrectly higher amount, Steps to reproduce: - Create a new loan with: - Amount Borrowed: 24000 - Loan Date: 01/01/2024 - Duration: 48 months - Skip Until: 01/01/2025 - Compute (Duration of 4 years, Interest 1%) - Confirm Issue: Outstanding balance should be 16,105.73 and not 22,016.71 This occurs because, from the amount borrowed, the system subtracts only the posted entries amount, not considering the 'skip until' option opw-4711642 Forward-Port-Of: odoo/enterprise#86711
Problem: When calling `/v1/embeddings`, if the request fails for any reason, the `response` will be `None`. Attempting to access `response['data'][0]['embedding']` then results in a traceback. Solution: Check if `response` is `None` before attempting to extract the embedding from it to ensure graceful error handling. Steps to reproduce: 1. Add a new AI Agent. 2. Attach a document to the agent. 3. Click "Test" to open the chatbot. 4. Send any message. → A traceback occurs due to a fai
Original PR description
Problem: When calling `/v1/embeddings`, if the request fails for any reason, the `response` will be `None`. Attempting to access `response['data'][0]['embedding']` then results in a traceback. Solution: Check if `response` is `None` before attempting to extract the embedding from it to ensure graceful error handling. Steps to reproduce: 1. Add a new AI Agent. 2. Attach a document to the agent. 3. Click "Test" to open the chatbot. 4. Send any message. → A traceback occurs due to a failed embeddings request. opw-4817213 Forward-Port-Of: odoo/enterprise#86803
Using Odoo URLs in the AI app demo data while Odoo.com is upgrading is causing an issue in the runbot as all these URLs are unreachable causing the runbot to be completely red. I am removing these urls for now as a hot fix. Forward-Port-Of: odoo/enterprise#87308
Original PR description
Using Odoo URLs in the AI app demo data while Odoo.com is upgrading is causing an issue in the runbot as all these URLs are unreachable causing the runbot to be completely red. I am removing these urls for now as a hot fix. Forward-Port-Of: odoo/enterprise#87308
Duplicate field was introduced in https://github.com/odoo/enterprise/commit/0703cf2834aeca2db498575ac6e0a35e37e7d048 Duplicate of : https://github.com/odoo/enterprise/pull/85692/files#diff-a75131997102fa2a43d54afca5d43c93165f9eb91a0afc1a707d82ad80e35cf9L48 Forward-Port-Of: odoo/enterprise#85692
Original PR description
Duplicate field was introduced in https://github.com/odoo/enterprise/commit/0703cf2834aeca2db498575ac6e0a35e37e7d048 Duplicate of : https://github.com/odoo/enterprise/pull/85692/files#diff-a75131997102fa2a43d54afca5d43c93165f9eb91a0afc1a707d82ad80e35cf9L48 Forward-Port-Of: odoo/enterprise#85692
Currently, there is an button related to the MX localization that can be accessed outside the localization if `l10n_mx` is installed. Steps to reproduce: ------------------- * Install `l10n_mx` * With company other than MX, go to the pos orders * Select multiple pos orders, select the button **Actions** > Observation: The action `Create Global Invoice` is visible * Select the action `Create GLobal Invoice` > Validation error, Selected orders are not eligible for CFDI Why the fix: -
Original PR description
Currently, there is an button related to the MX localization that can be accessed outside the localization if `l10n_mx` is installed. Steps to reproduce: ------------------- * Install `l10n_mx` * With company other than MX, go to the pos orders * Select multiple pos orders, select the button **Actions** > Observation: The action `Create Global Invoice` is visible * Select the action `Create GLobal Invoice` > Validation error, Selected orders are not eligible for CFDI Why the fix: ------------ This is an `ir.actions.server` which is introduced in the `l10n_mx` localization. It does not look possible to add `invisible` on the xml for the action. https://github.com/odoo/odoo/blob/2540155b5e00a6547fcceee4af4b83f385dcd4ad/odoo/addons/base/models/ir_actions.py#L179-L215 What we can do instead is to throw a more explicit error when trying to use the action outside the MX loca. opw-4805257 Forward-Port-Of: odoo/enterprise#86612
The `account_accountant_tour` test was failing at the step that attempts to set an amount, due to the selector `input[id=amount_0]` not being found within the timeout. The root cause was that the selector used an ID (`amount_0`) which is dynamically generated and can change across test runs . To resolve this, the selector was replaced with a more stable one: `div[name=amount] input`, which targets the same field but does not rely on dynamic IDs. Additionally, a no-op wait step was in
Original PR description
The `account_accountant_tour` test was failing at the step that attempts to set an amount, due to the selector `input[id=amount_0]` not being found within the timeout. The root cause was that the selector used an ID (`amount_0`) which is dynamically generated and can change across test runs . To resolve this, the selector was replaced with a more stable one: `div[name=amount] input`, which targets the same field but does not rely on dynamic IDs. Additionally, a no-op wait step was introduced immediately before this interaction to ensure the DOM has fully rendered the input element before the test proceeds. build_error-220890 Forward-Port-Of: odoo/enterprise#86715
Steps: ----------- - Install the pos_l10n_se module. - Open a POS session with the Swedish Fiscal Data Module configured in the IoT Box settings. - Add a product to the order. Issue: ------------- - An error popup states: "Product has an invalid tax amount. Only 25%, 12%, 6% and 0% are allowed." even when the product is correctly configured with one of these tax rates. Cause: ---------- - The validation logic incorrectly applies conditions for displaying the error popup, mistakenly
Original PR description
Steps: ----------- - Install the pos_l10n_se module. - Open a POS session with the Swedish Fiscal Data Module configured in the IoT Box settings. - Add a product to the order. Issue: ------------- - An error popup states: "Product has an invalid tax amount. Only 25%, 12%, 6% and 0% are allowed." even when the product is correctly configured with one of these tax rates. Cause: ---------- - The validation logic incorrectly applies conditions for displaying the error popup, mistakenly rejecting valid tax rates when the PoS receipt label is set. FIX: ----------- - Updated the tax validation conditions to handle products correctly, allowing tax rates, and preventing false error messages. task-4687156 Forward-Port-Of: odoo/enterprise#87275 Forward-Port-Of: odoo/enterprise#83221