Wednesday, February 26, 2025
42 changes · saas-18.1
Enhancements to existing features
The restaurant point-of-sale split bill screen has been simplified by removing the tax and total summary. This makes the split bill view cleaner and reduces unnecessary information for staff during bill splitting.
Original PR description
In this commit: ========== - We are removing the tax and total summary from the split screen. task-4551695
The Point of Sale reload data popup now uses simpler, more user-friendly wording. This helps store staff better understand what is happening when data needs to be refreshed, reducing confusion during sales operations.
Original PR description
Description of the issue/feature this PR addresses: I improved the information displayed to the user. Current behavior before PR: Explanation not user friendly Desired behavior after PR is merged: tqt --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update fixes a faulty automated test in the base module so it checks the intended record behavior correctly. It helps keep the test suite reliable and reduces false failures in development checks, with no expected impact on end users.
Original PR description
`test_15_o2m` was trying to check the result of an `in` query with False and False/id, however the id provided was the parent of a leaf, which should not return the parent itself, while the assertion right after checks that the parent is present in the result. The test was passing as with demo data the first record in `leaves` didn't have a parent_id. Runbot Error 135019
Miscellaneous changes
Steps: - Set domain of an embedded action to false - this override the default value - Try to use the embedded action Actual result: - Error due to invalid domain Expected result: - Embedded action work and use empty domain as default opw-4529210 opw-4563505 Forward-Port-Of: odoo/odoo#196919
Original PR description
Steps:
- Set domain of an embedded action to false
- this override the default value
- Try to use the embedded action
Actual result:
- Error due to invalid domain
Expected result:
- Embedded action work and use empty domain as default
opw-4529210
opw-4563505
Forward-Port-Of: odoo/odoo#196919This fix prevents loyalty-related product filtering from accidentally hiding regular products in Point of Sale. It makes loyalty behavior more reliable and helps ensure POS tests and workflows reflect the correct available products.
Original PR description
check commit message for description
The mobile navigation bar in Point of Sale and Restaurant Point of Sale now scrolls horizontally as expected. This makes the interface easier and more consistent to use on mobile devices, especially when many navigation items are available.
Original PR description
Before this commit: ========== - Horizontal scroll for a navbar bar is not working as expected in the mobile view. After this commit: ========== - Horizontal scroll for a navbar bar will work fine, ensuring the navbar remains consistent on mobile devices. task-4550203
The HR app now avoids an error when someone tries to archive a new employee record before saving it. This prevents an unexpected interruption and keeps the employee management workflow smoother.
Original PR description
Currently, an exception is raised when a user attempts to archive a new employee before saving. Steps to Reproduce: 1. Install the HR module. 2. Navigate to the Employee Module. 3. Try to archive a new employee before saving. 4. An error occurs. Error: `ValueError Expected singleton: hr.employee() ` This issue occurs when a user tries to archive a new employee before saving because the system expects a default departure date for the employee, which can't be set properly without saving the employee record first. [1] - https://github.com/odoo/odoo/blob/4f58eb9db55c102786010efe3c1fb74edefaf8f3/addons/hr/wizard/hr_departure_wizard.py#L13 This fix resolves the issue by first checking if the employee exists, and then proceeding to find the departure date. sentry-6301787988 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Call participant avatars in Discuss now stay clearer when many people are in a call. Status indicators are hidden in crowded avatar stacks but remain visible where there is enough space, and the participant count is positioned to avoid covering the active avatar in compact mode.
Original PR description
Before this commit, when there's a call in a discuss conversation with many participants and the participants in sidebar are folded as an avatar stack, their short status (e.g. mute, deafen) were…
Before this commit, when there's a call in a discuss conversation with many participants and the participants in sidebar are folded as an avatar stack, their short status (e.g. mute, deafen) were shown below avatar too. This is a problem because the avatar stack is so compact that there's no room to show the short status. This looks quite off. This commit fixes the issue by removing the short status in the avatar stack. To see the call status of participant, we can easily see it by expanding the call participants. When the discuss sidebar is compact, however, it always show a single call participant (= most recently active participant). There's room to show the short status, so it's shown there to help see whether the most recent participant starts screen-sharing or becomes mute/deaf. Before / After <img width="294" alt="Screenshot 2025-02-19 at 17 41 15" src="https://github.com/user-attachments/assets/a23938ba-0cb8-4bb9-ae38-8f7638ebe5d5" /> <img width="297" alt="Screenshot 2025-02-19 at 17 40 24" src="https://github.com/user-attachments/assets/ee545083-dbde-44f3-ba64-95c4d6a8a536" /> ------- This commit also fixes a small issue with the position of "+X" in the avatar stack when sidebar is compact: the "+X" being at the very top and overlapping avatars make sense when the avatar stack is a preview of avatars and the number is more important in this view than the avatars. This is the case in non-compact sidebar mode, as we can easily expand the call participants. In compact mode, however, the active participant is as important if not more than/as the counter. Overlapping the visibility of the single avatar is a problem. Putting the counter at the bottom, while better, hides the counter value so it has some drawbacks. This commit fixes the issue by putting the counter next to avatar in this specific configuration of compact sidebar with call participants. Before / After <img width="67" alt="Screenshot 2025-02-19 at 17 41 09" src="https://github.com/user-attachments/assets/f596e896-6b37-4bc8-b4bd-e92539ebaa67" /> <img width="51" alt="Screenshot 2025-02-20 at 11 08 43" src="https://github.com/user-attachments/assets/88f34855-b02c-4653-8621-63563f0731ed" />
Avatars in the Discuss command palette now display with the correct cropping instead of appearing stretched. This improves visual consistency when users search or mention people using the command palette.
Original PR description
Before this commit, avatars in the discuss command palette (`@` mode in ctrl-k) could have images stretched. This happens due to missing `.o_object_fit_cover`, which is important in all discuss images. Before  After 
Previously, if a request in the Nilvera Client failed due to connectivity issues, a traceback was thrown. This behavior caused upgrade CI failures because the internet is blocked and check_nilvera_customer would be triggered for newly created partners. This commit enhances the exception handling for all requests and fixes the upgrade CI issue by silently exiting the function when a connectivity problem is detected. no task ID. Forward-Port-Of: odoo/odoo#197841 Forward-Port-Of: odoo/odoo#1977
Original PR description
Previously, if a request in the Nilvera Client failed due to connectivity issues, a traceback was thrown. This behavior caused upgrade CI failures because the internet is blocked and check_nilvera_customer would be triggered for newly created partners. This commit enhances the exception handling for all requests and fixes the upgrade CI issue by silently exiting the function when a connectivity problem is detected. no task ID. Forward-Port-Of: odoo/odoo#197841 Forward-Port-Of: odoo/odoo#197797
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/78636 --- I confirm I have s
Original PR description
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/78636 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189710
Versions -------- - saas-17.4+ Steps ----- 1. Create a new product with a lot of variants; 2. publish it to the website; 3. edit the website home page to add a product carousel; 4. set it to display newest products & hide variants. Issue ----- Fewer than 16 products are displayed in the carousel. Cause ----- Unlike the other product filters handled in https://github.com/odoo/odoo/pull/189040, the "Newest Products" filter is defined in `data/data.xml`, and stored as a record.
Original PR description
Versions -------- - saas-17.4+ Steps ----- 1. Create a new product with a lot of variants; 2. publish it to the website; 3. edit the website home page to add a product carousel; 4. set it to display…
Versions -------- - saas-17.4+ Steps ----- 1. Create a new product with a lot of variants; 2. publish it to the website; 3. edit the website home page to add a product carousel; 4. set it to display newest products & hide variants. Issue ----- Fewer than 16 products are displayed in the carousel. Cause ----- Unlike the other product filters handled in https://github.com/odoo/odoo/pull/189040, the "Newest Products" filter is defined in `data/data.xml`, and stored as a record. This means it doesn't use the `_get_products` method to perform the search, instead using the `_prepare_values` method from the `website` module. For obvious reasons, the method defined in `website` doesn't take the `hide_variants` parameter into account to get the correct amount of search results: https://github.com/odoo/odoo/blob/0f64298c871ffea088a4fe6255d19852c8348159/addons/website/models/website_snippet_filter.py#L102-L108 Instead it passes 16 `product.product` records to the `_filter_records_to_values` override in `website_sale`, where duplicate templates are filtered out, resulting in fewer than 16 product templates: https://github.com/odoo/odoo/blob/0f64298c871ffea088a4fe6255d19852c8348159/addons/website_sale/models/website_snippet_filter.py#L73-L76 Solution -------- When calling `super()._prepare_values` for stored `product.product` filters, temporarily square the usual limit for the search, and filter reduce to size later. This may still be inadequate when working with products with dozens of variants, but should cover most normal use cases without requiring drastic changes to filter templates or search domain in stable. On master, we could add a new filter specifically for `product.template`. opw-4302856 Forward-Port-Of: odoo/odoo#195857
We add the variable msg_id and references to the test mail template MAIL_EML_ATTACHMENT to allow to use it as a response to another mail. We also add "subject" to allow to use test-related subject. Task-3707821 Forward-Port-Of: odoo/odoo#197641 Forward-Port-Of: odoo/odoo#154332
Original PR description
We add the variable msg_id and references to the test mail template MAIL_EML_ATTACHMENT to allow to use it as a response to another mail. We also add "subject" to allow to use test-related subject. Task-3707821 Forward-Port-Of: odoo/odoo#197641 Forward-Port-Of: odoo/odoo#154332
Before this commit: ========== - The floating order dialog title was not translated due to the use of `title.translate` in the .js file. After this commit: ========== - The floating order dialog title will be translated. task-4576073 Forward-Port-Of: odoo/odoo#198858 Forward-Port-Of: odoo/odoo#198490
Original PR description
Before this commit: ========== - The floating order dialog title was not translated due to the use of `title.translate` in the .js file. After this commit: ========== - The floating order dialog title will be translated. task-4576073 Forward-Port-Of: odoo/odoo#198858 Forward-Port-Of: odoo/odoo#198490
Steps to reproduce: - Set up the editor with a link at the end of a line. - Refresh to start with fresh content. - Place the cursor at the end of the line with the link. - Notice that the cursor defaults inside the link, displaying the green overlay. - Attempt to type after the link—this requires pressing right arrow key to exit. Description of the issue/feature this PR addresses: - Clicking at the end or start of a line with a link placed the cursor inside the link by default, disp
Original PR description
Steps to reproduce: - Set up the editor with a link at the end of a line. - Refresh to start with fresh content. - Place the cursor at the end of the line with the link. - Notice that the cursor defaults inside the link, displaying the green overlay. - Attempt to type after the link—this requires pressing right arrow key to exit. Description of the issue/feature this PR addresses: - Clicking at the end or start of a line with a link placed the cursor inside the link by default, displaying the green overlay. - Typing outside the link required pressing the arrow key. Current behavior before PR: - Placing the cursor at the start or end of a line with a link now defaults to positioning it outside the link. - Green overlay is no longer shown, enabling direct text entry beside link. - Accessing the link requires an intentional left or right arrow key press. task-4089085 Forward-Port-Of: odoo/odoo#197606 Forward-Port-Of: odoo/odoo#186213
Sometimes, a tag is added after the release (e.g. f221381fbdf8) and this lead to an error when load_account_translations is executed (e.g. when updating a language translations). Do not crash but log an error instead. Forward-Port-Of: odoo/odoo#199062
Original PR description
Sometimes, a tag is added after the release (e.g. f221381fbdf8) and this lead to an error when load_account_translations is executed (e.g. when updating a language translations). Do not crash but log an error instead. Forward-Port-Of: odoo/odoo#199062
Issue: ------ Case: User Settings menu is basically used to handle created users but when clicking on the `New` button within the User Settings the form view corresponding to that model i.e; `res.users.settings` will be opened which is an inappropriate behavior. Whenever a User is created that user will be reflected within that menu. There's no meaning of having `New` button when no user is created to handle. Solution: ----------- Some users do not have a user settings yet, so it is a p
Original PR description
Issue: ------ Case: User Settings menu is basically used to handle created users but when clicking on the `New` button within the User Settings the form view corresponding to that model i.e;…
Issue: ------ Case: User Settings menu is basically used to handle created users but when clicking on the `New` button within the User Settings the form view corresponding to that model i.e; `res.users.settings` will be opened which is an inappropriate behavior. Whenever a User is created that user will be reflected within that menu. There's no meaning of having `New` button when no user is created to handle. Solution: ----------- Some users do not have a user settings yet, so it is a perfectly valid use case to create one. We should not artificially prevent acceptable behavior in technical/admin menus. Steps to reproduce: ------------------------ 1. Create a database in version 16.0. 2. Go to `User Settings`. 3. Click On `New` button. Try making changes and save. 4. An Invalid Field `User` error will Occur. This is because there's a many2One field i.e; `user_id` within the tree and form views which is basically an existing user. The `New` button will open a form view with no User which is a must. And will cause the Invalid field error when trying to save any change. Ref: https://github.com/odoo/odoo/blob/16.0/addons/mail/views/res_users_settings_views.xml#L24 Ref Screenshot:  Co-Authored By - @seb-odoo Forward-Port-Of: odoo/odoo#196844 Forward-Port-Of: odoo/odoo#193400
In this PR https://github.com/odoo/enterprise/pull/78465 the test is failing because it is not taking the override into account as it is not a post_install. opw-4192775 Forward-Port-Of: odoo/odoo#198004
Original PR description
In this PR https://github.com/odoo/enterprise/pull/78465 the test is failing because it is not taking the override into account as it is not a post_install. opw-4192775 Forward-Port-Of: odoo/odoo#198004
To configure the RPI display as customer display we needed: **Before this commit:** - Go to configuration, - Check "IoT Box" checkbox, - Select a display, - Go to "Configuration -> Settings", - Scroll until "Customer Display" then select "An IoT-connected system. **After this commit:** - Go to configuration, - Check "IoT Box" checkbox, - Select a display. **Note:** the "Customer Display" setting is now only used for a second display. That means that customer display can now
Original PR description
To configure the RPI display as customer display we needed: **Before this commit:** - Go to configuration, - Check "IoT Box" checkbox, - Select a display, - Go to "Configuration -> Settings", - Scroll until "Customer Display" then select "An IoT-connected system. **After this commit:** - Go to configuration, - Check "IoT Box" checkbox, - Select a display. **Note:** the "Customer Display" setting is now only used for a second display. That means that customer display can now be opened on both an IoT Display and a new window. The Customer Display now also opens automatically on the IoT Box display while opening PoS. Task: 4585446 Forward-Port-Of: odoo/odoo#198755
Bug: At the moment, searching on `account.account` does not return accounts whose `company_ids` does not contain any of the companies accessible to the current user, even in sudo mode. Diagnosis: The default `_order` on `account.account` includes `placeholder_code`. When we call `_field_to_sql` for `placeholder_code`, we do a JOIN, which excludes any accounts for which a value could not be computed on `placeholder_code`. These are the accounts that are not accessible to the current user. S
Original PR description
Bug: At the moment, searching on `account.account` does not return accounts whose `company_ids` does not contain any of the companies accessible to the current user, even in sudo mode. Diagnosis: The default `_order` on `account.account` includes `placeholder_code`. When we call `_field_to_sql` for `placeholder_code`, we do a JOIN, which excludes any accounts for which a value could not be computed on `placeholder_code`. These are the accounts that are not accessible to the current user. Solution: We change `_field_to_sql` for `placeholder_code` to perform a LEFT JOIN rather than a JOIN on the first account company accessible to the user. If none of the account's companies are accessible to the user, `placeholder_code` will simply be NULL. We add tests that check this behaviour and ensure that no accounts are excluded from a `search` in `sudo` mode. opw-4393854 Forward-Port-Of: odoo/odoo#198643
At confirmation page, we wait 500 ms before printing the order. That led to some problems when the user did not have a good network connection since the order was not yet initialized that the order would be printed and thus leading to an error. Here, if the order is not initialized yet, we reset a timeout to print the order runbot-error: 111762 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199050
Original PR description
At confirmation page, we wait 500 ms before printing the order. That led to some problems when the user did not have a good network connection since the order was not yet initialized that the order would be printed and thus leading to an error. Here, if the order is not initialized yet, we reset a timeout to print the order runbot-error: 111762 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199050
**Problem**: When selecting all content with `Ctrl+A`, the main `o_editable` element is selected, which has an `ltr` direction by default. If we switch the direction while having a single `rtl` paragraph, the toolbar appears on the left instead of above the text. **Solution**: When `Ctrl+A` is used (selection is on `o_editable`), use deep position on the container edges. This simulates the browser’s default `Ctrl+A` behavior. **Example**: content: `<div contenteditable=true><p>tex[
Original PR description
**Problem**: When selecting all content with `Ctrl+A`, the main `o_editable` element is selected, which has an `ltr` direction by default. If we switch the direction while having a single `rtl`…
**Problem**: When selecting all content with `Ctrl+A`, the main `o_editable` element is selected, which has an `ltr` direction by default. If we switch the direction while having a single `rtl` paragraph, the toolbar appears on the left instead of above the text. **Solution**: When `Ctrl+A` is used (selection is on `o_editable`), use deep position on the container edges. This simulates the browser’s default `Ctrl+A` behavior. **Example**: content: `<div contenteditable=true><p>tex[]t</p></div>` Existing Ctrl+A: `<div contenteditable=true>[<p>text</p>]</div>` New Ctrl+A: `<div contenteditable=true><p>[text]</p></div>` Default Ctrl+A (done by browser): `<div contenteditable=true><p>[text]</p></div>` **Steps to reproduce**: 1. Add some text. 2. Switch the text direction to `rtl`. 3. Press `Ctrl+A`. 4. The toolbar appears on the left instead of above the text. opw-4557762 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198100
check commit message for description Forward-Port-Of: odoo/odoo#198372
Original PR description
check commit message for description Forward-Port-Of: odoo/odoo#198372
Before this commit, the pricelist was not considered when displaying product prices in the self-ordering, leading to incorrect pricing information. This commit ensures that the pricelist is correctly applied. opw-4190268 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183420 Forward-Port-Of: odoo/odoo#182884
Original PR description
Before this commit, the pricelist was not considered when displaying product prices in the self-ordering, leading to incorrect pricing information. This commit ensures that the pricelist is correctly applied. opw-4190268 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183420 Forward-Port-Of: odoo/odoo#182884
revert the commit as when we fetch archived warehouse's pos type it will raise error for other source or destination loction for newly created stock operation type like even functinally also there is no need to fetch archived warehouse's operation type. ``` quality Control cross Dock, Storage type ``` we got this error during upgrade : ``` File "/home/odoo/src/odoo/saas-17.4/odoo/sql_db.py", line 347, in execute res = self._obj.execute(query, params) psycopg2.errors.NotNullVi
Original PR description
revert the commit as when we fetch archived warehouse's pos type it will raise error for other source or destination loction for newly created stock operation type like even functinally also there is…
revert the commit
as when we fetch archived warehouse's pos type
it will raise error for other source or destination loction for newly created stock operation type like
even functinally also there is no need to fetch
archived warehouse's operation type.
```
quality Control
cross Dock,
Storage type
```
we got this error during upgrade :
```
File "/home/odoo/src/odoo/saas-17.4/odoo/sql_db.py", line 347, in execute
res = self._obj.execute(query, params)
psycopg2.errors.NotNullViolation: null value in column "default_location_src_id" of relation "stock_picking_type" violates not-null constraint
DETAIL: Failing row contains (33, 0, 28, 56, null, null, null, 4, null, null, 1, 1, 1, QC, internal, at_confirm, FBAQC, ask, {"en_US": "Quality Control"}, null, f, f, t, null, f, null, 2024-10-16 05:14:53.18448, 2024-10-16 05:14:53.18448, optional, optional, no, optional, null, null, t, null, null, 2x7xprice, 4x12_lots, pdf, null, null, null, null, null, null, null, null, null, t, null).
```
due to this two fix:
https://github.com/odoo/odoo/pull/151719/commits
https://github.com/odoo/odoo/pull/175838/files
so we need to avoid to fetch archived warehouse's picking type.
ref:
odoo/upgrade#6631
Description of the issue/feature this PR addresses:
Current behavior before PR:
Desired behavior after PR is merged:
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#185244Following the ticket opw-4523417 there is a lack of logging related to printing in hw_drivers module which makes it difficult to analyse the issued on the client's side, especially on Windows IoT This PR adds 1) some logs upon receiving of a printing request via longpolling route 2) some logs when the methods of printing are being called 3) some logs when these methods have finished their job Since for printing the Odoo database isn't notified of a succeful printing this is very much ne
Original PR description
Following the ticket opw-4523417 there is a lack of logging related to printing in hw_drivers module which makes it difficult to analyse the issued on the client's side, especially on Windows IoT This PR adds 1) some logs upon receiving of a printing request via longpolling route 2) some logs when the methods of printing are being called 3) some logs when these methods have finished their job Since for printing the Odoo database isn't notified of a succeful printing this is very much needed Forward-Port-Of: odoo/odoo#197823 Forward-Port-Of: odoo/odoo#197687
Before this commit: =================== - when creating a discount and loyalty program type coupon with rules for minimum quantity and purchase equals 1, along with a specific product reward, `multiple reward order lines` were erroneously generated if the coupon balance exceeded 1. - upon refreshing the page, the reward line quantity would increment incorrectly. After this commit: ================== - with this commit, only one reward order line is created per coupon application, a
Original PR description
Before this commit: =================== - when creating a discount and loyalty program type coupon with rules for minimum quantity and purchase equals 1, along with a specific product reward, `multiple reward order lines` were erroneously generated if the coupon balance exceeded 1. - upon refreshing the page, the reward line quantity would increment incorrectly. After this commit: ================== - with this commit, only one reward order line is created per coupon application, and the coupon now correctly applies only once, resolving the previous inconsistencies. task - 3869549 Forward-Port-Of: odoo/odoo#196109 Forward-Port-Of: odoo/odoo#162359
Issue: ======== In `SplitBillScreenTour2`, navigating back and forth between **FloorScreen** and **ProductScreen** triggered a `SyncAllOrders` call. Immediately after, another `SyncAllOrders` call was sent from `createSplittedOrder`. Since the first request was still in progress, the second request sometimes sent only one order to the backend. This caused the original order to be filtered out from `syncingOrders`, leading to inconsistencies. Fix: ======= Step were added to check tha
Original PR description
Issue: ======== In `SplitBillScreenTour2`, navigating back and forth between **FloorScreen** and **ProductScreen** triggered a `SyncAllOrders` call. Immediately after, another `SyncAllOrders` call was sent from `createSplittedOrder`. Since the first request was still in progress, the second request sometimes sent only one order to the backend. This caused the original order to be filtered out from `syncingOrders`, leading to inconsistencies. Fix: ======= Step were added to check that the request is processed. **Runbot Error**: 114938 Forward-Port-Of: odoo/odoo#199069 Forward-Port-Of: odoo/odoo#198326
Starting from January 6th, 2025, USPS _silently_ migrated to a new developer portal (devloper`s`.usps.com instead of developer.usps.com). See: https://developer.usps.com/getting-started. The new portal also introduces new base URL for their endpoints (See: https://developers.usps.com/sites/default/files/2024-10/USPS%20API%20Cloud%20Enrollment.pdf). Users who registered after this date didn't manage to use Odoo shipping connector for USPS since it used the old endpoints. This commit updat
Original PR description
Starting from January 6th, 2025, USPS _silently_ migrated to a new developer portal (devloper`s`.usps.com instead of developer.usps.com). See: https://developer.usps.com/getting-started. The new portal also introduces new base URL for their endpoints (See: https://developers.usps.com/sites/default/files/2024-10/USPS%20API%20Cloud%20Enrollment.pdf). Users who registered after this date didn't manage to use Odoo shipping connector for USPS since it used the old endpoints. This commit updates the used endpoints so that it's compatible with the new portal. opw-4576028 Forward-Port-Of: odoo/enterprise#80152
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/189710 --- I confirm I have signed
Original PR description
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/189710 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#78636
**To replicate:** 1. Install a localization reports module (e.g. l10n_lu_reports) 2. Create two branches for the company in the localization: one with a different VAT, and another without VAT (it takes the same VAT as the closest parent with VAT) 3. In Accounting > Reporting > Tax Report 4. Select only the company with a different VAT. The button to export an XML is not enabled. 5. Select the parent company and the company without VAT. The button to export an XML is not enabled. **Issue:
Original PR description
**To replicate:** 1. Install a localization reports module (e.g. l10n_lu_reports) 2. Create two branches for the company in the localization: one with a different VAT, and another without VAT (it…
**To replicate:** 1. Install a localization reports module (e.g. l10n_lu_reports) 2. Create two branches for the company in the localization: one with a different VAT, and another without VAT (it takes the same VAT as the closest parent with VAT) 3. In Accounting > Reporting > Tax Report 4. Select only the company with a different VAT. The button to export an XML is not enabled. 5. Select the parent company and the company without VAT. The button to export an XML is not enabled. **Issue:** In some Tax Reports and EC Sales Reports with branch companies, the additional buttons are not enabled properly, even when all companies with the same VAT are selected. **Expected behavior:** If all branches with the same VAT are selected, export buttons should be available. **Cause of the problem:** In the tax report handler and EC sales report handler, `_custom_options_initializer()` calls the function `_enable_export_buttons_for_common_vat_groups_in_branches()`, which should enable the buttons if branches with the same VAT are selected. When extending `_custom_options_initializer()`, the call to super happens before extra buttons are added. These additional buttons are not included in the call to `_enable_export_buttons_for_common_vat_groups_in_branches()`. **Fix:** Instead of calling the function in _custom_options_initializer, add an option key to check and enable export buttons. This check is now done in `get_options()`, using the same logic previously applied in `_enable_export_buttons_for_common_vat_groups_in_branches`. As `get_options()` is called after the custom options initializer, all buttons are enabled if all branches with the same VAT are selected. task-4061157 Forward-Port-Of: odoo/enterprise#79227
[FIX] documents: fix documents creation on documents 1. Fix reply with an attachment on message from existing document How to reproduce: - Go to the chatter of a document - Add yourself as a follower - Send a message from the chatter: you should receive an email - Reply to this email with an attachment You receive a delivery error message ("Address not found") and your reply doesn't appear in the chatter, nor your attachment. With this fix, the message with its attachment appears
Original PR description
[FIX] documents: fix documents creation on documents 1. Fix reply with an attachment on message from existing document How to reproduce: - Go to the chatter of a document - Add yourself as a follower…
[FIX] documents: fix documents creation on documents
1. Fix reply with an attachment on message from existing document
How to reproduce:
- Go to the chatter of a document
- Add yourself as a follower
- Send a message from the chatter: you should receive an email
- Reply to this email with an attachment
You receive a delivery error message ("Address not found") and your reply doesn't appear in the chatter, nor your attachment.
With this fix, the message with its attachment appears in the chatter and there is no delivery error message.
2. Fix sending a message with an attachment on a request
How to reproduce:
- Go to the chatter of a request
- Send a message with an attachment from its chatter
You get the error "The operation cannot be completed: This attachment is already a document." while the message with its attachment should be added in the chatter.
With this fix, the message with its attachment appears in the chatter and the request remains to be fulfilled.
3. Error while uploading a requested document through activity popover
How to reproduce:
- As user A, create a requested document for User B
- As user B, click on the activity of that request and upload a document
You get the error "The operation cannot be completed: This attachment is already a document." while the uploaded file should be linked to the request.
With this fix, the request is fulfilled, and you get no error.
We solve those problems by not creating document by default when messages with attachments are posted on a document and delegate the creation of the documents to the _message_post_after_hook method for the case of a post on a folder alias. We have chosen that default behavior as in all uses case except the alias, we expect the attachment to be added to the chatter and not as a new document.
TestMailGateway already tests that incoming mail with attachment on an alias create the related documents, and we introduce a test for each case described above in other commits.
[IMP] documents: add a test on replying with an attachment on a document post
We add a test that check that when answering a mail posted on a document with an attachment, that the attachment is added to the document and the message is posted on the document.
We also modify slightly an existing test because a parameter given to _message_post_after_hook was incorrect.
[IMP] documents: add a test on document type change when sending a message
We add a test that check that when sending a message on a URL or a request document, it is not turned into a binary document.
[IMP] documents: add a test that upload a document in the activity popover
We add a test that upload requested document through activity popover.
Task-3707821
Forward-Port-Of: odoo/enterprise#79271
Forward-Port-Of: odoo/enterprise#56779Before this commit, the runbot would fail with Script Timeout when executing the `shared_sign_request_tour` tour. The main problem was the title of the modal being changed from "All done!" to "It's signed!" without updating the tour itself. The secondary problem was the limitation added in the tour of clicking a button inside a modal: this one is not allowed anymore. After this commit, we removed the 'Download button' trigger in the tour as it is not allowed anymore and updated the string
Original PR description
Before this commit, the runbot would fail with Script Timeout when executing the `shared_sign_request_tour` tour. The main problem was the title of the modal being changed from "All done!" to "It's signed!" without updating the tour itself. The secondary problem was the limitation added in the tour of clicking a button inside a modal: this one is not allowed anymore. After this commit, we removed the 'Download button' trigger in the tour as it is not allowed anymore and updated the string for the correct modal title in the tour, from "All done!" to "It's signed!". runbot-98514 Forward-Port-Of: odoo/enterprise#80070
Steps to reproduce the bug: - Create a “quality.point”: - Operations: Manufacturing - Add a Work Order Operation - save - Update the operations to Receipt. Problem: The Work Order Operation field becomes invisible, but it is still filled so the quality point will still be applied. opw-4536136 Forward-Port-Of: odoo/enterprise#79998 Forward-Port-Of: odoo/enterprise#79868
Original PR description
Steps to reproduce the bug:
- Create a “quality.point”:
- Operations: Manufacturing
- Add a Work Order Operation
- save
- Update the operations to Receipt.
Problem:
The Work Order Operation field becomes invisible, but it is still filled so the quality point will still be applied.
opw-4536136
Forward-Port-Of: odoo/enterprise#79998
Forward-Port-Of: odoo/enterprise#79868Currently, the error message occurs when failed to fetch the account metrics. ``` Error Message: Failed to fetch the account (2) metrics: '{\n \'title\': \'Unauthorized\',\n \'type\': \'about:.. ``` This error message occurs when fetching social stream posts and refreshing statistics, so replace a logger error message with a logger warning message at [1], [2] to prevent more error logs in a terminal. link [1]: https://github.com/odoo/enterprise/blob/6e581b9dbf0c141e212f1641fc9cb37a05
Original PR description
Currently, the error message occurs when failed to fetch the account metrics.
```
Error Message: Failed to fetch the account (2) metrics: '{\n \'title\':
\'Unauthorized\',\n \'type\': \'about:..
```
This error message occurs when fetching social stream posts and refreshing statistics, so replace a logger error message with a logger warning message at [1], [2] to prevent more error logs in a terminal.
link [1]: https://github.com/odoo/enterprise/blob/6e581b9dbf0c141e212f1641fc9cb37a05140cff/social_twitter/models/social_live_post.py#L48
link [2]: https://github.com/odoo/enterprise/blob/af2db721417794ccda73ab83da388a782c94a911/social_twitter/models/social_stream.py#L91
sentry-4536687715
Forward-Port-Of: odoo/enterprise#64432…emplate context if mail_notification_light is customized Steps to reproduce : ---- - customize mail_notification_light template with a field from record (with Studio or with inherited template) - confirm a Hr Appraisal or send a Hr Appraisal Survey Error before this commit : ---- - RPC error odoo.addons.base.models.ir_qweb.QWebException: Error while render the template KeyError: 'record' Template: mail.mail_notification_light Explanation : ---- We add the record in the template
Original PR description
…emplate context if mail_notification_light is customized Steps to reproduce : ---- - customize mail_notification_light template with a field from record (with Studio or with inherited template) - confirm a Hr Appraisal or send a Hr Appraisal Survey Error before this commit : ---- - RPC error odoo.addons.base.models.ir_qweb.QWebException: Error while render the template KeyError: 'record' Template: mail.mail_notification_light Explanation : ---- We add the record in the template context, therefore any field from the record can be called Forward-Port-Of: odoo/enterprise#74943
The kanban has been reworked with https://github.com/odoo/odoo/pull/167751 and odoo/enterprise@23426182d92198cf977d7eecbfb3d47117d80c59 Before this commit when a field is empty (the record has no value for a field) in the kanban editor -- new version -- that field had no size and was virtually invisible. This was because one little line of code was missing to enable the feature of applying a placeholder in the empty field to make it visible. opw-4526492 Forward-Port-Of: odoo/enterprise
Original PR description
The kanban has been reworked with https://github.com/odoo/odoo/pull/167751 and odoo/enterprise@23426182d92198cf977d7eecbfb3d47117d80c59 Before this commit when a field is empty (the record has no value for a field) in the kanban editor -- new version -- that field had no size and was virtually invisible. This was because one little line of code was missing to enable the feature of applying a placeholder in the empty field to make it visible. opw-4526492 Forward-Port-Of: odoo/enterprise#80127 Forward-Port-Of: odoo/enterprise#79812
Problem Before this commit, if the customer deletes the rental location they would be blocked from creating a rental order as it is necessary for replenishment rules. The issue becomes critical because, once deleted, the rental location cannot be set to the company functionally given the field is not present in the view. Solution To fix this, this commit adds Rental Settings making the rental_loc_id field visible in the res_company view, allowing customers to select their desired rental
Original PR description
Problem Before this commit, if the customer deletes the rental location they would be blocked from creating a rental order as it is necessary for replenishment rules. The issue becomes critical because, once deleted, the rental location cannot be set to the company functionally given the field is not present in the view. Solution To fix this, this commit adds Rental Settings making the rental_loc_id field visible in the res_company view, allowing customers to select their desired rental location and resolve the issue independently. - opw-3973957 - opw-4488182 - opw-4545985 Forward-Port-Of: odoo/enterprise#80071 Forward-Port-Of: odoo/enterprise#79785
### Steps to reproduce: - Create a project with 'Timesheets' option deactivated - Create a task with a planned start date and end date - Check the task in the gantt view, notice the allocated hours - Change the start or end date of the task - Notice allocated hours didn't change ### Current behavior before PR: This is happening because we are supposed to only compute the allocated hours when the task is getting created and after this we don't re-calculate it but the user can edit i
Original PR description
### Steps to reproduce: - Create a project with 'Timesheets' option deactivated - Create a task with a planned start date and end date - Check the task in the gantt view, notice the allocated hours -…
### Steps to reproduce: - Create a project with 'Timesheets' option deactivated - Create a task with a planned start date and end date - Check the task in the gantt view, notice the allocated hours - Change the start or end date of the task - Notice allocated hours didn't change ### Current behavior before PR: This is happening because we are supposed to only compute the allocated hours when the task is getting created and after this we don't re-calculate it but the user can edit it manually but if the 'Timesheets' option is false the allocated hours won't be shown in any form to be edited so only if the 'Timesheets' option is deactivated for the project we should re-compute the allocated hours ### Desired behavior after PR is merged: Add another condition where if the project allows timesheets we don't re-compute the allocated hours field if it doesn't allow timesheets we re-compute it. opw-4192775 Forward-Port-Of: odoo/enterprise#78465 Forward-Port-Of: odoo/enterprise#71681
In scenarios where invoices are in USD and payments in MXN, the SAT requires the 'equivalenciaDR' (exchange rate) to reflect how many units of the invoice currency (USD) equal one unit of the payment currency (MXN). Previously, using the official exchange rate and rounding could produce one- or two-cent differences, causing some PACs (e.g., Quadrum) to reject the payment CFDI (CRP20268 error). This replaces the use of the official rate (and its rounding) with the absolute quotient of the invo
Original PR description
In scenarios where invoices are in USD and payments in MXN, the SAT requires the 'equivalenciaDR' (exchange rate) to reflect how many units of the invoice currency (USD) equal one unit of the payment currency (MXN). Previously, using the official exchange rate and rounding could produce one- or two-cent differences, causing some PACs (e.g., Quadrum) to reject the payment CFDI (CRP20268 error). This replaces the use of the official rate (and its rounding) with the absolute quotient of the invoice and payment amounts (`invoice_amount / payment_amount`). This approach removes rounding discrepancies and ensures consistent values in the XML, preventing these rejections. Forward-Port-Of: odoo/enterprise#79899 Forward-Port-Of: odoo/enterprise#79038
This commit fix the following issues: - When editing a record in list view, it wasn't possible to use the space key nor the enter key. The first one was (un)selecting the current line while the second one entered the folder or preview mode when validating the changes. - Folder was present twice in the list view. - Website and Folder are now editable. Task-4558286 Forward-Port-Of: odoo/enterprise#78841
Original PR description
This commit fix the following issues: - When editing a record in list view, it wasn't possible to use the space key nor the enter key. The first one was (un)selecting the current line while the second one entered the folder or preview mode when validating the changes. - Folder was present twice in the list view. - Website and Folder are now editable. Task-4558286 Forward-Port-Of: odoo/enterprise#78841
Due to input cell overflow, a stopgap solution was to always display demand and replenish cells on 2 lines when actual and forecasted/replenish were both activated. This is considered sub-optimal and this fix was made. When the view is loaded or reloaded due to manual changes, the DOM is updated depending on if overflow is detected in input cells. task 4420441 Forward-Port-Of: odoo/enterprise#73494
Original PR description
Due to input cell overflow, a stopgap solution was to always display demand and replenish cells on 2 lines when actual and forecasted/replenish were both activated. This is considered sub-optimal and this fix was made. When the view is loaded or reloaded due to manual changes, the DOM is updated depending on if overflow is detected in input cells. task 4420441 Forward-Port-Of: odoo/enterprise#73494