Tuesday, April 22, 2025
21 changes · saas-18.1
Resolved issues and error corrections
The reset shortcuts used when preparing IoT box images now point to the latest downloaded code instead of sometimes failing to find the expected branch. This reduces setup errors for development or origin-based image builds and helps keep device preparation predictable.
Original PR description
`odoo_origin` and `odoo_dev` aliases used to reset odoo code on a dev/origin branch were sometimes returning an error not finding the fetched branch. They are now resetting on FETCH_HEAD to ensure the reset on the latest fetched branch.
Installing Event Products, Sales, or Sales Timesheets no longer fails if the default Service product category was previously deleted. The change helps users recover from configuration changes without hitting a blocking installation error.
Original PR description
Currently a `ParseError` arises when the user installs the modules after deleting the `Service` Category in Invoicing. Steps to reproduce: --- - Install `Invoicing` application (without demo data). -…
Currently a `ParseError` arises when the user installs the modules after deleting the `Service` Category in Invoicing.
Steps to reproduce:
---
- Install `Invoicing` application (without demo data).
- Invoicing > Configuration > Categories > Delete `Service`
- Now installs the modules (event_product, sale, sale_timesheet)
Traceback:
---
```
ValueError: External ID not found in the system: product.product_category_services
ParseError: while parsing /home/odoo/src/odoo/saas-18.1/addons/event_product/data/event_product_data.xml:4, somewhere inside <record id="product_category_events" model="product.category">
<field name="parent_id" ref="product.product_category_services"/>
<field name="name">Events</field>
</record>
```
The error occurs because the user deleted the category, and then installed the modules, that reference the missing product category.
This commit resolves the error by providing a False value for the field if the product category is missing.
sentry-6235143606
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prFixes an error that could occur when users clicked Get Critical Path in the project task Gantt view after removing planned start dates. This keeps project planning usable and prevents an unexpected crash in a specific task-dependency workflow.
Original PR description
Currently, a traceback occurs when the user clicks critical path in tasks gantt. To reproduce this issue: 1) Install Project and add the `Use Task Dependencies` group to the current user 2) Open the…
Currently, a traceback occurs when the user clicks critical path in tasks gantt. To reproduce this issue: 1) Install Project and add the `Use Task Dependencies` group to the current user 2) Open the list view of the project 3) Enable the `Task Dependencies` to any one project 4) Now remove all the start dates from the Planned Date for all tasks 5) Open the Gantt view of the tasks and add a task 6) Refresh the page, and click the `Get Critical Path` button Error:- ``` KeyError: 24 ``` https://github.com/odoo/enterprise/blob/c9a753fce85dfb09dc413831993e63c7736d258a/project_enterprise/models/project_task.py#L1544 From the above line, the traceback is occurring because the `path_last_task` will take the value from the sorted_tasks's first record. But we don't have any `planned_date_begin` in any task except the one we added in the Gantt view. So the first task which is `path_last_task` will not execute further because of this, https://github.com/odoo/enterprise/blob/c9a753fce85dfb09dc413831993e63c7736d258a/project_enterprise/models/project_task.py#L1529-L1531 This leads to the above traceback when we compare the value of the `path_last_task` from the `total_time` with the current task. https://github.com/odoo/enterprise/blob/c9a753fce85dfb09dc413831993e63c7736d258a/project_enterprise/models/project_task.py#L1544 We can resolve this issue by taking the `path_last_task` if only the task contains `planned_date_begin`. sentry-6327461743
Miscellaneous changes
The test introduced in 5734ba9 opens the product catalog, filters it, then adds a product and updates its quantity. The problem is that when the product is already visible in the catalog (before filtering), the next steps can be triggerred while the filtering is still being processed. Once the filtering is done, the state of the product in the catalog is "reverted" to how it was when the filtering was called. This might be inconsistent with the state expected by the step the tour is currently in
Original PR description
The test introduced in 5734ba9 opens the product catalog, filters it, then adds a product and updates its quantity. The problem is that when the product is already visible in the catalog (before filtering), the next steps can be triggerred while the filtering is still being processed. Once the filtering is done, the state of the product in the catalog is "reverted" to how it was when the filtering was called. This might be inconsistent with the state expected by the step the tour is currently in. We can solve this by adding a different product to be filtered out. This allows to add a blocking step that just waits for the catalog not to include the new product. Fixes runbot errors: [162099](https://runbot.odoo.com/odoo/error/162099) [163417](https://runbot.odoo.com/odoo/error/163417) Forward-Port-Of: odoo/odoo#206219
Currently, when using a cash rounding method with the strategy `Modify tax amount` on a Pos config, an error message appears upon trying to close the session. Steps to reproduce: ------------------- * Create a cash rounding method with strategy `Modify tax amount` * Open pos setting and apply the cash rounding method * Open pos session * Make an order that will trigger the cash rounding * Validate the order * Try closing the session > Observation: The operation cannot be completed:
Original PR description
Currently, when using a cash rounding method with the strategy `Modify tax amount` on a Pos config, an error message appears upon trying to close the session. Steps to reproduce: -------------------…
Currently, when using a cash rounding method with the strategy `Modify tax amount` on a Pos config, an error message appears upon trying to close the session. Steps to reproduce: ------------------- * Create a cash rounding method with strategy `Modify tax amount` * Open pos setting and apply the cash rounding method * Open pos session * Make an order that will trigger the cash rounding * Validate the order * Try closing the session > Observation: The operation cannot be completed: Missing required account on accountable line Why the fix: ------------ Prior to 18.0, the point of sale would only allow rounding methods using the strategy `add_invoice_line`. https://github.com/odoo/odoo/blob/786abeb0783461d555c4077b8258490a7aed8c21/addons/point_of_sale/models/pos_config.py#L302-L314 This constraint was removed in this commit to also allow using `biggest_tax` strategy: [8fb7e5f#diff-4c6e412c7d8f4df2a05831547e7df93d0b91f510d03b7b3ed0d689a18f5dae44](https://github.com/odoo/odoo/commit/8fb7e5fd304697aebcce085602a5f3a1ecaf757a#diff-4c6e412c7d8f4df2a05831547e7df93d0b91f510d03b7b3ed0d689a18f5dae44) This is a temporary fix bringing back the constraint has the pos wasns't fully ready to use it. It will be remove later when the integration is complete. opw-[4673618] Forward-Port-Of: odoo/odoo#204943
Commit ebb09234e6444576e7e934f53de1d23a0d9760d2 made it so that bank account are archived instead of deleted meaning that they are never deleted in the DB. If a user tries to create a new bank account for the same partner with the same account number, the following validation error is raised: "The operation cannot be completed: The combination Account Number/Partner must be unique." This commit introduces a new UserError when a user attempts to create an account that was previously arch
Original PR description
Commit ebb09234e6444576e7e934f53de1d23a0d9760d2 made it so that bank account are archived instead of deleted meaning that they are never deleted in the DB. If a user tries to create a new bank account for the same partner with the same account number, the following validation error is raised: "The operation cannot be completed: The combination Account Number/Partner must be unique." This commit introduces a new UserError when a user attempts to create an account that was previously archived. It also updates the message in the chatter from "deleted" to "archived." opw-4669340 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203474
<b>Steps to produce:</b> 1) Install CRM 2) In debug mode, open the stages from the crm configuration 3) Give a long text to Requirements with spaces to the stage 'new' 4) Now open my pipeline and hover on the new stage <b>Issue:-</b> When the user gives a long text with spaces to the requirements in the first stage, It is overflowing the screen. <b>Solution:-</b> Add the class text-prewrap to the tooltip of the kanban header. So the "formatted text" is respected for the k
Original PR description
<b>Steps to produce:</b> 1) Install CRM 2) In debug mode, open the stages from the crm configuration 3) Give a long text to Requirements with spaces to the stage 'new' 4) Now open my pipeline and hover on the new stage <b>Issue:-</b> When the user gives a long text with spaces to the requirements in the first stage, It is overflowing the screen. <b>Solution:-</b> Add the class text-prewrap to the tooltip of the kanban header. So the "formatted text" is respected for the kanban stage. opw-4623639 Forward-Port-Of: odoo/odoo#206193
Before this commit, when the user enables the task dependencies feature globally, all basic projects (that is, non fsm ones) will get the feature. By doing that, the open tasks state will be recomputed to set `Waiting` state on tasks with blocking tasks linked to them. The problem is the compute method of the task state will also reset the state instead of keeping the one set on those open tasks when there is no blocking task linked. This commit makes sure the compute method of task state fie
Original PR description
Before this commit, when the user enables the task dependencies feature globally, all basic projects (that is, non fsm ones) will get the feature. By doing that, the open tasks state will be…
Before this commit, when the user enables the task dependencies feature globally, all basic projects (that is, non fsm ones) will get the feature. By doing that, the open tasks state will be recomputed to set `Waiting` state on tasks with blocking tasks linked to them. The problem is the compute method of the task state will also reset the state instead of keeping the one set on those open tasks when there is no blocking task linked. This commit makes sure the compute method of task state field is no longer called when the task dependencies feature changes. Instead, a inverse method is added on allow_task_dependencies field on `project.project` model to correctly update the state of the tasks linked to the project in which the task dependencies feature changed. Steps to reproduce the issue: ---------------------------- 0. install project 1. Create a project 2. Create some tasks inside that project and changes the state to some tasks 3. Enable the task dependencies feature in `Project > Configuration > Settings` menu. 4. Go back to the tasks kanban view of that project. Current Behavior: ---------------- The state of those tasks is reset to `In progress` (if those tasks did not have a state equals to `Done` or `Canceled`). Expected Behavior: ----------------- The state of those tasks should not be altered since no dependencies are added in those tasks yet. task-4487922 Forward-Port-Of: odoo/odoo#206371 Forward-Port-Of: odoo/odoo#198952
Steps to reproduce the issue: - Add a popup with a 0.0001 days config. - Visit the page as a non-connected user. - The popup opens at some point. - Close the popup. - Wait 10 seconds. - Refresh the page ---> The popup never reappears. This issue comes from the fact that we were setting a non-integer value for the cookie expiration. The "max-age" attribute does not accept float values, so the cookie is treated as a "session" cookie. It only expires when the session ends, which can be e
Original PR description
Steps to reproduce the issue: - Add a popup with a 0.0001 days config. - Visit the page as a non-connected user. - The popup opens at some point. - Close the popup. - Wait 10 seconds. - Refresh the…
Steps to reproduce the issue: - Add a popup with a 0.0001 days config. - Visit the page as a non-connected user. - The popup opens at some point. - Close the popup. - Wait 10 seconds. - Refresh the page ---> The popup never reappears. This issue comes from the fact that we were setting a non-integer value for the cookie expiration. The "max-age" attribute does not accept float values, so the cookie is treated as a "session" cookie. It only expires when the session ends, which can be effectively "never" on some browsers that keep sessions open indefinitely. This used to work before commit [1] because we were also setting an "expires" attribute. When the "max-age" attribute was invalid, the browser would fallback to the "expires" attribute. Since that commit removed the "expires" attribute, the only remaining value (max-age) is invalid, and the popup never reappears as expected. This fix ensures the value used in "max-age" is always an integer, avoiding any invalid cookie behavior. [1]: https://github.com/odoo/odoo/commit/006ee1fc470eabdcbde68077259cf543633d6490 task-4690318 Forward-Port-Of: odoo/odoo#206429
overtime_status is currently readonly which prevents record importation of extra hours, since if they are not approved, the compute will get triggered Forward-Port-Of: odoo/odoo#206589
Original PR description
overtime_status is currently readonly which prevents record importation of extra hours, since if they are not approved, the compute will get triggered Forward-Port-Of: odoo/odoo#206589
Description of the issue/feature this PR addresses: Current behavior before PR: Project users can't subscribe partners in projectw which visibility is set to 'Invited internal users': - Set a project to that visibility type. - Create a task. - Assign a user outside the project who just has 'Project user' permissions to that task. - With that user: in the task, try to subscribe a partner to the chatter. - With that user: in the chatter, try to mention a partner who's not subscribed
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Project users can't subscribe partners in projectw which visibility is set to 'Invited internal users': - Set a project to that visibility type. - Create a task. - Assign a user outside the project who just has 'Project user' permissions to that task. - With that user: in the task, try to subscribe a partner to the chatter. - With that user: in the chatter, try to mention a partner who's not subscribed to the task's thread. The user couldn't subscribe any user due to permission issues on project.project. Desired behavior after PR is merged: User's are able to operate normally where access is granted. OPW-4725100 MT-9830 cc @moduon @rafaelbn @EmilioPascual --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206298 Forward-Port-Of: odoo/odoo#205908
Steps to reproduce: - Switch to Dark Mode (Version Enterprise). - Go to Website --> Edit Mode. - Drag and drop any snippet. - Select the snippet --> background color --> Custom tab. - Bug: The white color is dark, and the black is a white color. This commit fixes the issue by copying the variables: Black, White, and their opacity variants from the website preview to the snippet menu, so they are used in the color picker instead of the backend ones. Note that this commit also fixes a
Original PR description
Steps to reproduce: - Switch to Dark Mode (Version Enterprise). - Go to Website --> Edit Mode. - Drag and drop any snippet. - Select the snippet --> background color --> Custom tab. - Bug: The white color is dark, and the black is a white color. This commit fixes the issue by copying the variables: Black, White, and their opacity variants from the website preview to the snippet menu, so they are used in the color picker instead of the backend ones. Note that this commit also fixes another bug: the "bg-black-15" color was incorrect in the colorpicker before this commit because that class does not exist in the backend. task-4690318 Forward-Port-Of: odoo/odoo#206492
Description of the issue/feature this PR addresses: Kanban view of the website pages not working (opw-4651572) Current behavior before PR: The kanban view was not working if the database only contains one website because of the group multi-website not set on the users so the t-if="record.website_id.value" cannot be evaluated. Desired behavior after PR is merged: The group attribute is now set correctly on the parent div so the if statement is working properly --- I confirm I
Original PR description
Description of the issue/feature this PR addresses: Kanban view of the website pages not working (opw-4651572) Current behavior before PR: The kanban view was not working if the database only contains one website because of the group multi-website not set on the users so the t-if="record.website_id.value" cannot be evaluated. Desired behavior after PR is merged: The group attribute is now set correctly on the parent div so the if statement is working properly --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203693
### Steps to reproduce: - Create a storable product tracked by lot and avco valuated. - Put 10 units of that product in stock withtout set lot. - On the stock quant, click on history - Modify the inventory adjustment move to set a quantity of 3 and a lot. - Inventory > Reporting > Valuation #### > Stock valuation layer inconsistency: +10, -10, -7, +3 > the -7 should not be there ### Cause of the issue: If you change the quantity of a move line you will automatically reconcile the qua
Original PR description
### Steps to reproduce: - Create a storable product tracked by lot and avco valuated. - Put 10 units of that product in stock withtout set lot. - On the stock quant, click on history - Modify the…
### Steps to reproduce: - Create a storable product tracked by lot and avco valuated. - Put 10 units of that product in stock withtout set lot. - On the stock quant, click on history - Modify the inventory adjustment move to set a quantity of 3 and a lot. - Inventory > Reporting > Valuation #### > Stock valuation layer inconsistency: +10, -10, -7, +3 > the -7 should not be there ### Cause of the issue: If you change the quantity of a move line you will automatically reconcile the quantity difference because of these lines: https://github.com/odoo/odoo/blob/6f3f89f55ab67d39b2487fdf8220747f568b7eb0/addons/stock_account/models/stock_move_line.py#L34-L36 However, if you change the lot of your move line you already plan to conter balance the entire quantity of the previous lot because of these lines: https://github.com/odoo/odoo/blob/6f3f89f55ab67d39b2487fdf8220747f568b7eb0/addons/stock_account/models/stock_move_line.py#L37-L46 In partciular, the first reconciliation should not be performed in case we change both the quantity and the lot of the move line. opw-4685988 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204960
The issue was introduced by: https://github.com/odoo/odoo/commit/90158f647ba610b31499555641c9db8450b49c4c The issue has been fixed by: https://github.com/odoo/odoo/commit/b1666c61bbc9d7e7b920483e168c6048ecde011c This commit is adding a test for it. **Steps to reproduce:** - Install Accounting and purchase_stock - Activate a foreign currency (e.g. Euro) - Create a PO: * Vendor: [any] * Currency: EUR * Product: [any with a Unit Price and a tax] * Payment Terms: [any] (e.g
Original PR description
The issue was introduced by: https://github.com/odoo/odoo/commit/90158f647ba610b31499555641c9db8450b49c4c The issue has been fixed by:…
The issue was introduced by: https://github.com/odoo/odoo/commit/90158f647ba610b31499555641c9db8450b49c4c The issue has been fixed by: https://github.com/odoo/odoo/commit/b1666c61bbc9d7e7b920483e168c6048ecde011c This commit is adding a test for it. **Steps to reproduce:** - Install Accounting and purchase_stock - Activate a foreign currency (e.g. Euro) - Create a PO: * Vendor: [any] * Currency: EUR * Product: [any with a Unit Price and a tax] * Payment Terms: [any] (e.g. 15 Days) - Confirm the PO - Validate the receipt order - Go to "Accounting / Vendors / Bills" - Create a new bill - In "Auto-Complete" field, select the created PO **Issue:** A traceback is raised due to a division by zero. **Cause:** The bill and its lines are created from some information coming from the PO. In the computation of the needed terms of the bill, a computation of the taxes is called on the lines (i.e. _compute_all_tax). During that computation, the rate is computed as followed: (*) rate = line.amount_currency / line.balance if line.balance else line.currency_rate and later, rate is used as followed: 'balance': tax['amount'] / rate When "purchase_stock" module is not installed, there is no issue because "_prepare_account_move_line" method from "purchase.order. line" model doesn't initialized "amount_currency" nor "balance". Therefore, the result of (*) falls back on "line.currency_rate" which is not zero. However, when "purchase_stock" module is installed, "balance" is initialized in "_prepare_account_move_line" but not "amount_currency", leading a result of 0 for (*). opw-4681735 Forward-Port-Of: odoo/odoo#205233
Creating a `resource.calendar` record requirest the settings group. This is only necessary for the setup of this test, so just create it in `sudo` (afterwards the calendar is only referenced to create events). https://runbot.odoo.com/odoo/error/145744 Forward-Port-Of: odoo/odoo#206670
Original PR description
Creating a `resource.calendar` record requirest the settings group. This is only necessary for the setup of this test, so just create it in `sudo` (afterwards the calendar is only referenced to create events). https://runbot.odoo.com/odoo/error/145744 Forward-Port-Of: odoo/odoo#206670
### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock. - Create a rental order for 10 units of that product planed for the period : [today + 2 days, today + 3 days] and confirm it. - Create a rental order for 10 units of that product planed for the period : [today + 1 days, today + 2 days] and confirm it. - Look at the forecast rentable quantity. #### > It should be 90 but it is 100. ### Cause of the i
Original PR description
### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock. - Create a rental order for 10 units of that product planed…
### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock. - Create a rental order for 10 units of that product planed for the period : [today + 2 days, today + 3 days] and confirm it. - Create a rental order for 10 units of that product planed for the period : [today + 1 days, today + 2 days] and confirm it. - Look at the forecast rentable quantity. #### > It should be 90 but it is 100. ### Cause of the issue: Since c18a7d2dc36d33134c5bdb1569865bd554e04130, the rentable forecast for future dates ignores the `rented_qty_during_period` if the setting "Rental transfers" is enabled. This happens because that rented quantity during period is supposed to be absorbed by the stock forecast: https://github.com/odoo/enterprise/blob/8ea5f4f9a0a907c57844c6274688171193f6a904/sale_stock_renting/models/sale_order_line.py#L132-L134 However, the stock forecast of the 'virtual_available' relies solely on deliveries and receipt happening prior to the start of the renting period. Therefore the rental orders that are planned to start during the renting period should still contribute to the `rented_qty_during_period` in that use case. opw-4552760 Forward-Port-Of: odoo/enterprise#83262 Forward-Port-Of: odoo/enterprise#82172
Currently, we have regular (Raspberry Pi) IoT Boxes and Widnows ("Virtual") IoT Boxes The subscription for the Raspberry Pis cost a monthly fee to the users, while Windows IoT is considered to be free for the users. However when sending information about the number of IoT Boxes connected to a database we currently don't make a difference between Windows and Raspberry Pi IoT Boxes. This PR adds a distinction between the two and send the Raspberry Pi IoT Boxes under "IoTBox" message and t
Original PR description
Currently, we have regular (Raspberry Pi) IoT Boxes and Widnows ("Virtual") IoT Boxes
The subscription for the Raspberry Pis cost a monthly fee to the users, while Windows IoT is considered to be free for the users.
However when sending information about the number of IoT Boxes connected to a database we currently don't make a difference between Windows and Raspberry Pi IoT Boxes.
This PR adds a distinction between the two and send the Raspberry Pi IoT Boxes under "IoTBox" message and the Windows ones under "WindowsIoT" message.
This allows us to distinguish the two subscriptions on odoo.com
task-4567313
Forward-Port-Of: odoo/enterprise#78516It's always useful to keep the original .coda or .xml (for SODA) file that we receive from CodaBox on the created entry. task-none Forward-Port-Of: odoo/enterprise#83643 Forward-Port-Of: odoo/enterprise#81612
Original PR description
It's always useful to keep the original .coda or .xml (for SODA) file that we receive from CodaBox on the created entry. task-none Forward-Port-Of: odoo/enterprise#83643 Forward-Port-Of: odoo/enterprise#81612
Sale orders have to be created during the test, which can fail if the test user does not have the right ACLs. The creation of the SOs seem to be just setup for what the tests want to check, so just sudo into them. https://runbot.odoo.com/odoo/error/163653 Forward-Port-Of: odoo/enterprise#83717
Original PR description
Sale orders have to be created during the test, which can fail if the test user does not have the right ACLs. The creation of the SOs seem to be just setup for what the tests want to check, so just sudo into them. https://runbot.odoo.com/odoo/error/163653 Forward-Port-Of: odoo/enterprise#83717
Followup to #83427 as I missed a second issue in the test: `action_validate` can only be performed by a time off officer. So set that on the current user. Also `self.Requests.env.user` is the same as `self.env.user` so don't bother with the unnecessary indirection. https://runbot.odoo.com/odoo/error/164047 Forward-Port-Of: odoo/enterprise#83579
Original PR description
Followup to #83427 as I missed a second issue in the test: `action_validate` can only be performed by a time off officer. So set that on the current user. Also `self.Requests.env.user` is the same as `self.env.user` so don't bother with the unnecessary indirection. https://runbot.odoo.com/odoo/error/164047 Forward-Port-Of: odoo/enterprise#83579