Tuesday, April 1, 2025
43 changes · 18.0
Enhancements to existing features
The Documents upload menu now has cleaner spacing between icons and text. This small visual adjustment makes the menu easier to scan and gives the interface a more polished, consistent appearance.
Original PR description
**before:**  **after:** 
Resolved issues and error corrections
This update corrects how translated text is prepared in the Spanish TicketBAI electronic invoicing module. It prevents build or runtime errors related to language selection, helping localized reports and messages work reliably.
Original PR description
LazyTranslate objects cannot be used directly in the `Markup.format()` function as it won't be able to find the lang to use. We have to explicitly use `self.env._()`. Runbot build error: https://runbot.odoo.com/odoo/runbot.build.error/98431 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
Miscellaneous changes
Versions -------- - 16.0+ Steps ----- 1. Create a promotion program; 2. add a reward that offers a discount on a specific product; 3. specify a specific product; 4. archive the specified specific product; 5. create a sales order with a random product; 6. apply applicable rewards. Issue ----- The reward's specific discount has become applicable to all products. Cause ----- After archiving a product, the reward's `discount_product_ids` becomes empty unless `active_test=False`
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Create a promotion program; 2. add a reward that offers a discount on a specific product; 3. specify a specific product; 4. archive the specified specific product; 5. create a sales order with a random product; 6. apply applicable rewards. Issue ----- The reward's specific discount has become applicable to all products. Cause ----- After archiving a product, the reward's `discount_product_ids` becomes empty unless `active_test=False` is added to the context. With this field empty, and no otherwise specified product domain, the discount can be applied to any product. Solution -------- Prevent archiving products that have an active program applying a specific discount to them. opw-4246768 Forward-Port-Of: odoo/odoo#204175 Forward-Port-Of: odoo/odoo#203241
This fixes how recruitment candidate phone numbers are identified so the system uses the existing candidate phone field. It prevents errors in phone-related processing for recruitment records without changing the user workflow.
Original PR description
The default [`_phone_get_number_fields`](https://github.com/odoo/odoo/blob/e8bbb6e9d99bdf6a31290e0d41cc9abff376938a/addons/phone_validation/models/models.py#L16-L21) returns `mobile` and `phone` fields if they exist on the model, but they do not exist for `hr.candidate`, leading to [errors](https://github.com/odoo/odoo/blob/ddbc09607f23b0e9dd9e721bceeaee250e6339bd/addons/phone_validation/models/mail_thread_phone.py#L217) when asserting phone fields in the `mail.thread.phone` mixin. The only field that holds a phone number for this model is `partner_phone`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an installation error that could occur when the Work Entries for Time Off module was installed after all Time Off Types had been removed. This helps administrators complete module setup without being blocked by missing optional configuration records.
Original PR description
Currently a `ParseError` arises when the user installs the `hr_work_entry_holidays` module after deleting all `Time Off Types` in the `Time Off` Configuration. Steps to reproduce: --- - Install…
Currently a `ParseError` arises when the user installs the `hr_work_entry_holidays` module after deleting all `Time Off Types` in the `Time Off` Configuration.
Steps to reproduce:
---
- Install `hr_holidays` module (without demo data)
- Time Off > Configuration > `Time Off Types` > Delete all
- Now install `hr_work_entry_holidays` module
Traceback:
---
```
Exception: Cannot update missing record 'hr_holidays.holiday_status_comp'
ParseError: while parsing /home/odoo/src/odoo/saas-18.1/addons/hr_work_entry_holidays/data/hr_payroll_holidays_data.xml:5, somewhere inside <record id="hr_holidays.holiday_status_comp" model="hr.leave.type">
<field name="work_entry_type_id" ref="hr_work_entry_contract.work_entry_type_compensatory"/>
</record>
```
The error occurs because the user deleted all `Time Off Types` and then installed the `hr_work_entry_holidays` module. which requires particular records.
This commit solves the above issue by using `noupdate="1"` and `forcecreate="False"` to bypass record creation if it violates checks.
https://github.com/odoo/odoo/blob/b794f0f332f473deb2c04eba60baf4761db3b508/odoo/tools/convert.py#L364-L366
sentry-5731062091
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix ensures translated text is correctly handled when inserted into formatted interface messages. It prevents translation-related errors in core functionality, improving reliability for multilingual users without changing visible features.
Original PR description
When formatting Markup object with LazyTranslate objects, we need to rewind a few frames back to find the lang to use. Runbot build error: https://runbot.odoo.com/odoo/runbot.build.error/98431 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
Point of Sale product cards are now consistently displayed in alphabetical order by their display names. This makes products easier to find for cashiers and creates a more predictable browsing experience.
Original PR description
In this commit: ------------------- - Changed the list with a sorted list without any conditioning of the search word based on display names. So, now all the time the products will be displayed alphabetically. Task - 4672224
This fixes a small visual issue in the calendar event popover where the selected Yes, No, or Maybe button could lose a border when hovering over the neighboring button. The change keeps the button state clear and consistent, reducing confusion for users responding to calendar invitations.
Original PR description
In the calendar application, when clicking on an event, a window opens. In this window, we can select “yes,” “no,” or “maybe.” When one of the buttons is selected and the mouse hovers over the button…
In the calendar application, when clicking on an event, a window opens. In this window, we can select “yes,” “no,” or “maybe.” When one of the buttons is selected and the mouse hovers over the button to its right, the border of the selected button disappears. This commit fixes this display issue to ensure that all four borders remain visible when hovering over the button adjacent to the selected one. Current behavior before PR: <img width="430" alt="Screenshot 2025-03-31 at 18 14 31" src="https://github.com/user-attachments/assets/803358b7-139d-44d3-a5b2-d381bd2fc998" /> <img width="434" alt="Screenshot 2025-03-31 at 18 14 35" src="https://github.com/user-attachments/assets/4a2ce979-1da5-4c19-8e82-0bfe651e9c27" /> Desired behavior after PR is merged: <img width="430" alt="Screenshot 2025-03-31 at 18 13 11" src="https://github.com/user-attachments/assets/c9faf40d-e913-481a-ac57-fc341091d56b" /> <img width="436" alt="Screenshot 2025-03-31 at 18 13 06" src="https://github.com/user-attachments/assets/12c0745f-a02a-4e59-99f3-4d6a2c791162" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents two editing popups from appearing on top of each other when a user clicks a dynamic field. It makes the HTML editor easier to use by showing the QWeb overlay only when it will not conflict with the toolbar.
Original PR description
**Current behavior before PR:** - When clicking on a dynamic field, both the qweb overlay and the toolbar would appear simultaneously, causing an overlap. **Desired behavior after PR is merged:** - The qweb overlay will now only be shown when the selection is collapsed, ensuring that it does not overlap with the toolbar when it is visible. task:4243987
This fixes an editor navigation issue where the cursor could get stuck when moving up or down around a file banner. Users can now move through content more naturally with the keyboard, improving editing flow and reducing frustration.
Original PR description
Before this commit: - when a user placed the caret above or below a file banner and pressed the down or up arrow key, respectively, The caret would not move past the banner. - This unexpected behavior disrupted smooth navigation in the editor. After this commit: - We ensure that both the up and down arrow keys move correctly the caret across the banner, allowing seamless text navigation. task-4671755
The Discuss notification settings no longer show the unnecessary “Select duration” placeholder when muting all conversations. This makes the mute duration menu clearer by showing only real choices, reducing minor confusion for users.
Original PR description
Before this commit, when muting all conversations in the menu Configuration > Notification settings of Discuss app, the turn back until item had the option "Select duration". This item was intended as the default option, to let user know this is a widget to select an item. However, the option is pre-selected to "Until I turn it back on", and the widget is visually very obvious it can be changed to another option. Therefore the "Select duration" has no reason to exist, thus this is simply removed in this commit, Task-4208113 Before <img width="654" alt="Screenshot 2025-03-31 at 15 49 10" src="https://github.com/user-attachments/assets/0f642940-d42f-43e2-a48e-ac50bde3528e" /> After <img width="654" alt="Screenshot 2025-03-31 at 15 48 48" src="https://github.com/user-attachments/assets/1fcbbd4d-ae19-445c-afee-b18f894943b2" />
Portal users will no longer see the “Load templates” button in Knowledge when they cannot access any templates. This avoids confusion by only showing actions that are actually available to the user.
Original PR description
The `load templates` button was shown for portal users even though no template was accessible to them. This commit hides the button for portal users. Explanation: In the `knowledge.WysiwygArticleHelper` xml template, `isPortalUser` is used without having being instantiated in its related Component. Commit where `knowledge_article_html_field.js` was removed (previous scope for `isPortalUser` property for this feature): https://github.com/odoo/enterprise/commit/1e0f2950d613d6cd82d8889fb07bc04d6c91c466 Commit where `wysiwyg_article_helper.js` was introduced without the `isPortalUser` property (oversight): https://github.com/odoo/enterprise/commit/e001efc750d25d5dfcc681e42adf7a46edc7f37b task-4687833
This fix updates the field service sales walkthrough so its on-screen help uses the correct tooltip setting. It helps keep guided steps displayed properly for users following the tour, with no expected change to business workflows.
Original PR description
In this commit, `position` has been replaced with `tooltipPosition`, as explained in the commit message. https://github.com/odoo/enterprise/commit/b7fc47fec39885ed1f9f99040ceaabefa539bc7b
LITRE is used instead of LITER in the uom definition, it causes a NAV validation error and the invoice cannot be submitted. task-4661729 Forward-Port-Of: odoo/odoo#203950
Original PR description
LITRE is used instead of LITER in the uom definition, it causes a NAV validation error and the invoice cannot be submitted. task-4661729 Forward-Port-Of: odoo/odoo#203950
When submitting the new address, the `post` method from the `http` service is called. This method expects a response in JSON. The problem arises when a redirection occurs during that call, then the returned content might be of another type which triggers an error. For example, it is possible to be redirected to the `/shop/cart` page if the cart is not valid. Steps to reproduce: - Add a product to your cart - Then head over to the address form during checkout. - Before confirming your addre
Original PR description
When submitting the new address, the `post` method from the `http` service is called. This method expects a response in JSON. The problem arises when a redirection occurs during that call, then the…
When submitting the new address, the `post` method from the `http` service is called. This method expects a response in JSON. The problem arises when a redirection occurs during that call, then the returned content might be of another type which triggers an error. For example, it is possible to be redirected to the `/shop/cart` page if the cart is not valid.
Steps to reproduce:
- Add a product to your cart
- Then head over to the address form during checkout.
- Before confirming your address, in another tab, open the backend and remove every order line in your cart.
- Then back on the previous tab, confirm your address.
- You can observe an error in the console:
```
SyntaxError: Unexpected token '<', ..."
<!DOCTYPE "... is not valid JSON
```
This commit fixes this issue by sending the redirection URL in the result of `shop_address_submit` and lets the client handle the redirection.
This commit also renames the `successUrl` value to `redirectUrl` to make it more clear that it is not necessarily a success URL any more, but the next location URL for the user, ie. redirect.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#201755Steps to reproduce ================== - Install account_accountant - Enable the debug mode - Copy a very long text in the "Terms and Conditions" section - Click on debug > Set Defaults - Click on the Default selection => Chrome crashes Depending on the window manager/OS, a weird Chrome window can appear spanning across multiple displays. Or Chrome can simply crash. Cause of the issue ================== The text value inside the select option is too long for Chrome to handle.
Original PR description
Steps to reproduce ================== - Install account_accountant - Enable the debug mode - Copy a very long text in the "Terms and Conditions" section - Click on debug > Set Defaults - Click on the Default selection => Chrome crashes Depending on the window manager/OS, a weird Chrome window can appear spanning across multiple displays. Or Chrome can simply crash. Cause of the issue ================== The text value inside the select option is too long for Chrome to handle. Solution ======== We can truncate the displayed text. opw-4572496 Forward-Port-Of: odoo/odoo#204012 Forward-Port-Of: odoo/odoo#202324
Steps to reproduce: 1. Create a new storable product 2. In the product's description, insert a base64 image - Pasting a (big) image from the clipboard insert it as base64 in <16.3 - Or do it manually by modifying the HTML 3. Create a Sale Order with the product 4. Validate the sale order ### Before this commit: During the Stock Picking creation, the picking's description is taken from the product's description and converted into plaintext. It replaces the images by some tex
Original PR description
Steps to reproduce:
1. Create a new storable product
2. In the product's description, insert a base64 image
- Pasting a (big) image from the clipboard insert it as base64 in <16.3
- Or do it manually by modifying the HTML
3. Create a Sale Order with the product
4. Validate the sale order
### Before this commit:
During the Stock Picking creation, the picking's description is taken from the product's description and converted into plaintext. It replaces the images by some text, but the Regex searching for a name in the src attribute, has a terrible backtracking (due to the lookahead).
### After this commit:
Searching for the filename does not make sense when dealing with base64; therefore, this commit skips this feature to prevent intensive CPU usage.
opw-4674295
Forward-Port-Of: odoo/odoo#203848
Forward-Port-Of: odoo/odoo#203738In the xml we sent, we have to specify the unit code, there is mapping for that on the documentation: https://developer.nilvera.com/en/code-lists#birim-kodlari This commit will extend what has been done in the base edi module with the UOM_TO_UNECE_CODE dictionary. We added some new unit of measure and each unit of measure will be linked to a code. The default value is C62. task-4457115 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forw
Original PR description
In the xml we sent, we have to specify the unit code, there is mapping for that on the documentation: https://developer.nilvera.com/en/code-lists#birim-kodlari This commit will extend what has been done in the base edi module with the UOM_TO_UNECE_CODE dictionary. We added some new unit of measure and each unit of measure will be linked to a code. The default value is C62. task-4457115 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193030
This commit targets to add the necessary demo data for testing Mexican payroll localization target: saas-17.4 -> master task-4486643 Linked PR: [odoo/enterprise#80451](https://github.com/odoo/enterprise/pull/80451) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199888
Original PR description
This commit targets to add the necessary demo data for testing Mexican payroll localization target: saas-17.4 -> master task-4486643 Linked PR: [odoo/enterprise#80451](https://github.com/odoo/enterprise/pull/80451) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199888
If prevent zero sale is active, prices should be hidden from the page opw-4650460 See also: https://github.com/odoo/enterprise/pull/82082 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203451 Forward-Port-Of: odoo/odoo#202867
Original PR description
If prevent zero sale is active, prices should be hidden from the page opw-4650460 See also: https://github.com/odoo/enterprise/pull/82082 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203451 Forward-Port-Of: odoo/odoo#202867
Description of the issue/feature this PR addresses: This commit addresses translations not being exposed to the frontend for the survey module. Current behavior before PR: For surveys, no translatable terms existing in JavaScript are being translated. This mainly concerns `survey_form.js`. Lack of translations there easily results in a mix of languages being shown to a user answering a survey. Desired behavior after PR is merged: Translatable terms defined in JavaScript are trans
Original PR description
Description of the issue/feature this PR addresses: This commit addresses translations not being exposed to the frontend for the survey module. Current behavior before PR: For surveys, no translatable terms existing in JavaScript are being translated. This mainly concerns `survey_form.js`. Lack of translations there easily results in a mix of languages being shown to a user answering a survey. Desired behavior after PR is merged: Translatable terms defined in JavaScript are translated to the user's language. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204077
Before this commit, the IM status icon shown when the user is homeworking won't always be precise. This happens because of the IM status refactoring (https://github.com/odoo/odoo/pull/174814). Steps to reproduce: 1. Setup user Marc Demo as homeworking in the current day 2. As Marc Demo open Discuss 3. As Mitchell Admin open the conversation with Marc Demo -> the correct home online icon is shown 4. As Marc Demo close all Odoo tabs -> user goes offline and Mitchell Admin sees the correct o
Original PR description
Before this commit, the IM status icon shown when the user is homeworking won't always be precise. This happens because of the IM status refactoring (https://github.com/odoo/odoo/pull/174814). Steps…
Before this commit, the IM status icon shown when the user is homeworking won't always be precise. This happens because of the IM status refactoring (https://github.com/odoo/odoo/pull/174814). Steps to reproduce: 1. Setup user Marc Demo as homeworking in the current day 2. As Marc Demo open Discuss 3. As Mitchell Admin open the conversation with Marc Demo -> the correct home online icon is shown 4. As Marc Demo close all Odoo tabs -> user goes offline and Mitchell Admin sees the correct offline icon 5. As Marc Demo reopen Discuss -> Mitchell Admin sees the circle icon instead of the home icon This commit fixes the issue by sending the user im_status information directly from its indentity model (`res.partner` or `mail.guest`) in the `bus.bus/im_status_updated` notification payload. This ensures that any overrides on the `im_status` field will be taken into consideration without having to re-establish the override client side. `presence_status` now represents the status value of the presence model, while `im_status` represents the status value of the identity model. Forward-Port-Of: odoo/odoo#202776 Forward-Port-Of: odoo/odoo#199936
Before this commit: The product snippet with filter "Latest Viewed Product" selected showed products in a random order. This was caused by a `search([('id', 'in', ids)])` which does not enforce the order of `ids` in the returned set. After this commit: The order returned follows the intended "Last Viewed Product" order. task-3916458 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203982 Forward-Port-Of: odoo/odoo#2
Original PR description
Before this commit:
The product snippet with filter "Latest Viewed Product" selected showed products in a random order. This was caused by a
`search([('id', 'in', ids)])` which does not enforce the order of `ids` in the returned set.
After this commit:
The order returned follows the intended "Last Viewed Product" order.
task-3916458
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#203982
Forward-Port-Of: odoo/odoo#200196The cron logic in the malaysian edi is very wrong; and will lead to a large amount of calls to be done to our API constantly as it can never really finish if you have quite a few valid invoices in the last 72h. We update the logic to better delay the api calls and retrigger, as well as logic avoiding to re-check valid invoices if they have been checked less than one hour ago. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/od
Original PR description
The cron logic in the malaysian edi is very wrong; and will lead to a large amount of calls to be done to our API constantly as it can never really finish if you have quite a few valid invoices in the last 72h. We update the logic to better delay the api calls and retrigger, as well as logic avoiding to re-check valid invoices if they have been checked less than one hour ago. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204203 Forward-Port-Of: odoo/odoo#202817
**Problem**: Sometimes, due to fast image changes and reloads, the attachment is saved, but the `o_modified_image_to_save` class is not removed. **Solution**: Before saving an image, check if it has already been saved. If so, simply remove the `o_modified_image_to_save` class. **opw-4406195** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204150 Forward-Port-Of: odoo/odoo#203283
Original PR description
**Problem**: Sometimes, due to fast image changes and reloads, the attachment is saved, but the `o_modified_image_to_save` class is not removed. **Solution**: Before saving an image, check if it has already been saved. If so, simply remove the `o_modified_image_to_save` class. **opw-4406195** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204150 Forward-Port-Of: odoo/odoo#203283
When there are none or more than 1 partner that have the same subcontracting location setup, then any procurement made to this subcontracting location will be removed, even if another configuration is applicable. ## How to reproduce: https://drive.google.com/file/d/1jvT1pmCqY0JNAinvqmbonX0CDYYysoJz/view?usp=sharing - Activate Routes, Subcontracting, Dropshipping - Create custom subcontracting location - Create partners "Partner 1" & "Partner 2", with custom sub loc setup - Create cus
Original PR description
When there are none or more than 1 partner that have the same subcontracting location setup, then any procurement made to this subcontracting location will be removed, even if another configuration…
When there are none or more than 1 partner that have the same subcontracting location setup, then any procurement made to this subcontracting location will be removed, even if another configuration is applicable. ## How to reproduce: https://drive.google.com/file/d/1jvT1pmCqY0JNAinvqmbonX0CDYYysoJz/view?usp=sharing - Activate Routes, Subcontracting, Dropshipping - Create custom subcontracting location - Create partners "Partner 1" & "Partner 2", with custom sub loc setup - Create custom route 'Resupply Subcontractor', with rule: - action: Pull From - operation: delivery - source: Stock - dest: custom sub loc - method: take from stock - Partner Address: Partner 1 - Create product with reordering rule: - manual, min 0, max 0, custom sub loc, custom route - In Replenishment -> Find custom reordering rule -> set Order Qty to 1 -> Order Once - Created Transfer does not have any partner address - Cancel created transfer - Remove subcontracting loc for "Partner 2" - In Replenishment -> Find custom reordering rule -> set Order Qty to 1 -> Order Once - Created Transfer has the partner address OPW-4576260 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203961 Forward-Port-Of: odoo/odoo#200169
ImmutableOrderedMultiDict was deprecated in Werkzeug 3.1.0. As the upcoming Debian Trixie provides Werkzeug 3.1.3 we need to fix that in Odoo supoprted versions. See: - https://packages.debian.org/trixie/python3-werkzeug - pallets/werkzeug#2968 - pallets/werkzeug#2975 A less intrusive way would be to ignore the deprecation warning 🤔 Forward-Port-Of: odoo/odoo#203537 Forward-Port-Of: odoo/odoo#203461
Original PR description
ImmutableOrderedMultiDict was deprecated in Werkzeug 3.1.0. As the upcoming Debian Trixie provides Werkzeug 3.1.3 we need to fix that in Odoo supoprted versions. See: - https://packages.debian.org/trixie/python3-werkzeug - pallets/werkzeug#2968 - pallets/werkzeug#2975 A less intrusive way would be to ignore the deprecation warning 🤔 Forward-Port-Of: odoo/odoo#203537 Forward-Port-Of: odoo/odoo#203461
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the bu
Original PR description
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a…
* stock{,_barcode, _barcode_quality_control}, quality_control
### Issue:
Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the button validate. As a result, we will not create the quality checks related to these additional moves.
The above issue can be triggered in many situations. Here are the two major ones:
### Use case I:
Creating a delivery or an internal transfer on the fly from the barcode app.
### Steps to reproduce:
- Create a storable product P with a barcode: XXX
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product: Control per: "Operation" Operations: "Delivery"
- Go to the barcode app > Operations > Delivery > New
- Scan your product
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
The `save_barcode_data` will launch the creation of the move line related to the barcode line you edited from the barcode app. During the create of this 'stock.move.line', an associated move will be created and its initial "state" will be the current state of the picking: https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L354-L356 https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L942 At this point the picking state is "draft" and the move will be correctly created in draft. However, just a few lines after its creation, we will check if a reservation should be done with that move and if its state should be recomputed:
https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L379-L396 the discrepancy is caused by the fact that `move._should_bypass_reservation` will be true if the picking is a receipt and false for the other types because you should bypass reservation for moves whose source is not an internal location but you should not for others. This will leave the moves and picking in draft state if its a receipt and update it for other types. However, only draft pickings are confirmed at the beginning of the button validate: https://github.com/odoo/odoo/blob/b0cfeecacfc6b95659778dfe4d62435556aaa92c/addons/stock/models/stock_picking.py#L1131-L1133
### Use case II:
Create and confirm a picking of any type so that it ends up being assigned. Add manually a move line via the detailled operations.
### Steps to reproduce:
- Create two storable product P1 and P2 put 10 units of both in stock
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product P2: Control per: "Operation" Operations: "Delivery"
- Create and confirm a Delivery for 1 unit P1
- Go to Detailed Operations > create a new line for 1 unit of P2
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
For the same reasons as above, the newly created move is assigned as it mimics the state of the current picking which is assigned since we have already reserved the already existing move.
### Fix:
We ensure the creation of quality checks for moves that end up being created but will never be confirmed.
### Technical limitation:
Unfortunately, it is not possible to manage the use case of quality checks related the component of a kit product without disrupting the barcode flows. Indeed, in barcode flows, the move line as well as its related move is created by a `save_barcode_data`. If we were to confirm the newly created moves rather than just trying to create the QC, it would indeed first explode the bom and then create the related QC for each component. However, the barcode data would not coincide anymore with the back end data since the line we just saved would have been exploded at backend creation. For that reason we do not yet support the above use cases for kit products.
Enterprise: https://github.com/odoo/enterprise/pull/81850
opw-4480104
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#202859
Forward-Port-Of: odoo/odoo#202725Step to reproduce: - Open the Sales application on a small screen such as a mobile phone. - Remove "My Quotations" to show all quotations. - Scroll down to hide the control panel. - Scroll up to show the control panel => Bug The control panel is shown but immediately "hidden" when we stop scrolling and the user has to scroll up to the top screen to see it. task-4466063 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odo
Original PR description
Step to reproduce: - Open the Sales application on a small screen such as a mobile phone. - Remove "My Quotations" to show all quotations. - Scroll down to hide the control panel. - Scroll up to show the control panel => Bug The control panel is shown but immediately "hidden" when we stop scrolling and the user has to scroll up to the top screen to see it. task-4466063 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203897
**Problem**: When destroying the link tool, if an `<a>` tag with `btn` classes has no `href`, it gets unwrapped. This visually removes the button, leaving only its text content. While this has no effect on normal links, it makes buttons appear to disappear when closing the tool. **Solution**: Prevent unwrapping buttons (`<a>` with `btn` classes) when the link tool is destroyed. **Steps to Reproduce**: 1. Open the website editor. 2. Add "Blocks" > "Features" > "Items". 3. Click inside
Original PR description
**Problem**: When destroying the link tool, if an `<a>` tag with `btn` classes has no `href`, it gets unwrapped. This visually removes the button, leaving only its text content. While this has no effect on normal links, it makes buttons appear to disappear when closing the tool. **Solution**: Prevent unwrapping buttons (`<a>` with `btn` classes) when the link tool is destroyed. **Steps to Reproduce**: 1. Open the website editor. 2. Add "Blocks" > "Features" > "Items". 3. Click inside a button to show the link tool. 4. Click outside the editable area. 5. Click inside the button again. - **Issue**: The button disappears, leaving only text. **opw-4574401** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202453
To improve readability and performance, partners with a zero initial balance are now excluded from the partner ledger reports. task-4578612 Forward-Port-Of: odoo/enterprise#82593 Forward-Port-Of: odoo/enterprise#81642
Original PR description
To improve readability and performance, partners with a zero initial balance are now excluded from the partner ledger reports. task-4578612 Forward-Port-Of: odoo/enterprise#82593 Forward-Port-Of: odoo/enterprise#81642
In some cases, Amazon can confirm the delivery of a FBM order before the user confirm the picking. In these cases, 2 problems arise: - The synchronization of the picking will fail because Amazon will return an error, since the picking was already delivered. - If the user doesn't fill the Amazon required fields, there will be a user error, even if the carrier reference and tracking numbers are already available in Amazon's backend. To solve this, as we know when an order was successfully deliv
Original PR description
In some cases, Amazon can confirm the delivery of a FBM order before the user confirm the picking. In these cases, 2 problems arise: - The synchronization of the picking will fail because Amazon will return an error, since the picking was already delivered. - If the user doesn't fill the Amazon required fields, there will be a user error, even if the carrier reference and tracking numbers are already available in Amazon's backend. To solve this, as we know when an order was successfully delivered, we won't consider these pickings as being needed for Amazon any more. task-4524195 Forward-Port-Of: odoo/enterprise#78188
### Issue When using the `Send HR Documents Access Link` action, Odoo always assumes that the company has set a `documents_hr_folder` already. However, this can easily not be the case if the customer has never activated `documents_hr_setting` and chosen a Workspace. If this is the case, we'll encounter an error when creating the `document.share` record, since `folder_id` is required. ### Solution Display an error directing the customer to activate an HR Workspace folder so they can properly
Original PR description
### Issue When using the `Send HR Documents Access Link` action, Odoo always assumes that the company has set a `documents_hr_folder` already. However, this can easily not be the case if the customer has never activated `documents_hr_setting` and chosen a Workspace. If this is the case, we'll encounter an error when creating the `document.share` record, since `folder_id` is required. ### Solution Display an error directing the customer to activate an HR Workspace folder so they can properly use the feature. opw-4559772 Forward-Port-Of: odoo/enterprise#81523
This commit modifies Elvera and Roque demo data for hr mexican localization target: 17.0 -> master task-4486643 Forward-Port-Of: odoo/enterprise#80451 Forward-Port-Of: odoo/enterprise#78048
Original PR description
This commit modifies Elvera and Roque demo data for hr mexican localization target: 17.0 -> master task-4486643 Forward-Port-Of: odoo/enterprise#80451 Forward-Port-Of: odoo/enterprise#78048
`prevent_zero_price_sale` was not set according to the right prices for `website_sale_renting` and `website_sale_subscription` opw-4650460 See also: https://github.com/odoo/odoo/pull/202867 Forward-Port-Of: odoo/enterprise#82183 Forward-Port-Of: odoo/enterprise#82082
Original PR description
`prevent_zero_price_sale` was not set according to the right prices for `website_sale_renting` and `website_sale_subscription` opw-4650460 See also: https://github.com/odoo/odoo/pull/202867 Forward-Port-Of: odoo/enterprise#82183 Forward-Port-Of: odoo/enterprise#82082
An error is encountered in the `Modify Asset` wizard when resuming `Asset Depreciation` after manually increasing `Non Depreciable Amount`. The system attempts to record the change as a gain, requiring a `Depreciation Account`. However, this field is hidden, preventing users from fixing the problem, so they are blocked. Steps to reproduce: - Create a running asset - Click `Modify Depreciation` > `Pause` - Click `Resume Depreciation` and open the `asset.modify` wizard. - Increase `Not Depr
Original PR description
An error is encountered in the `Modify Asset` wizard when resuming `Asset Depreciation` after manually increasing `Non Depreciable Amount`. The system attempts to record the change as a gain, requiring a `Depreciation Account`. However, this field is hidden, preventing users from fixing the problem, so they are blocked. Steps to reproduce: - Create a running asset - Click `Modify Depreciation` > `Pause` - Click `Resume Depreciation` and open the `asset.modify` wizard. - Increase `Not Depreciable Amount`, realizing a gain - Press the `Resume` button Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4472309) opw-4472309 Forward-Port-Of: odoo/enterprise#82512 Forward-Port-Of: odoo/enterprise#79181
**Issue** When mergring two records with a chatter (e.g. Tasks), no log note appears in the chatter of the destination or source records. **Cause** The template changed modules when `data_cleaning` and `data_merge` were merged in 4fc497861fbefee7f4761c3341a3c2bd289edb31 opw-4513322 Forward-Port-Of: odoo/enterprise#81136
Original PR description
**Issue** When mergring two records with a chatter (e.g. Tasks), no log note appears in the chatter of the destination or source records. **Cause** The template changed modules when `data_cleaning` and `data_merge` were merged in 4fc497861fbefee7f4761c3341a3c2bd289edb31 opw-4513322 Forward-Port-Of: odoo/enterprise#81136
Steps to reproduce the bug: - Create a quality point: - Operations: Receipt - Control per: Product - Control frequency: All - Type: Worksheet - Template: Select any one - Success conditions: Match all the following rules - Created by: Is set - Create a receipt order: - Product: Select any product - Confirm the receipt → A quality check is created - Click on the "Quality Check" smart button - Open the Worksheet" - Complete the worksheet Pro
Original PR description
Steps to reproduce the bug: - Create a quality point: - Operations: Receipt - Control per: Product - Control frequency: All - Type: Worksheet - Template: Select any one - Success conditions: Match…
Steps to reproduce the bug:
- Create a quality point:
- Operations: Receipt
- Control per: Product
- Control frequency: All
- Type: Worksheet
- Template: Select any one
- Success conditions: Match all the following rules
- Created by: Is set
- Create a receipt order:
- Product: Select any product
- Confirm the receipt → A quality check is created
- Click on the "Quality Check" smart button
- Open the Worksheet"
- Complete the worksheet
Problem:
The quality check is not being automatically marked as passed or failed.
When accessing the worksheet through the quality check view, the
function “action_quality_worksheet” is called instead of
“action_open_quality_check_wizard” , which means that the key
“quality_wizard_id” is not added to the context:
https://github.com/odoo/enterprise/blob/d7cb885c93876259e9e72d7254f4a2e614abbe0d/quality_control_worksheet/models/quality.py#L64
However, when clicking on save, the function “action_worksheet_check”
is triggered:
https://github.com/odoo/enterprise/blob/b51da60213232ccbc537c399e1c007d6051e40ae/quality_control_worksheet/static/src/views/quality_worksheet_fromview.js#L19
At this point, the system checks whether “quality_wizard_id” is present
in the context to proceed with the quality check; otherwise, it simply
closes the wizard:
https://github.com/odoo/enterprise/blob/d7cb885c93876259e9e72d7254f4a2e614abbe0d/quality_control_worksheet/models/quality.py#L95-L97
https://github.com/odoo/enterprise/blob/d7cb885c93876259e9e72d7254f4a2e614abbe0d/quality_control_worksheet/models/quality.py#L98-L100
Opw-4652268
Forward-Port-Of: odoo/enterprise#82225https://www.awesomescreenshot.com/image/53270541?key=2bf6f954c641f8dcfc8d0a524bb6e0e0 How to reproduce: - Make comment on any of the post under any social media. Just one condition, make sure to include any of the following characters (&, <, >, ', , `). - Post the comment. - Now try to edit the comment. - You will see that the special characters which I have mentioned above have been replaced with their HTML entities. Issue: - When we click on edit, we first `escape()` the conte
Original PR description
https://www.awesomescreenshot.com/image/53270541?key=2bf6f954c641f8dcfc8d0a524bb6e0e0 How to reproduce: - Make comment on any of the post under any social media. Just one condition, make sure to include any of the following characters (&, <, >, ', , `). - Post the comment. - Now try to edit the comment. - You will see that the special characters which I have mentioned above have been replaced with their HTML entities. Issue: - When we click on edit, we first `escape()` the contents of the message and then display it in the `textarea`. Fix: - We now display the comment through the value attribute of the `textarea` element, which by default displays the contents as plaintext. Hence, eliminating the need to escape it. Task-4184968 Forward-Port-Of: odoo/enterprise#82414
When importing an ofx bank statement, we try to parse the raw attachment value, in case of UnicodeDecodeError, we try to get an encoding declaration in the file, and fallback on 'utf-8'. But we can still face a file that is not well encoded and we end up with a traceback. With this commit, we display a UserError instead of the ugly traceback. opw-4526766 Forward-Port-Of: odoo/enterprise#82482 Forward-Port-Of: odoo/enterprise#81561
Original PR description
When importing an ofx bank statement, we try to parse the raw attachment value, in case of UnicodeDecodeError, we try to get an encoding declaration in the file, and fallback on 'utf-8'. But we can still face a file that is not well encoded and we end up with a traceback. With this commit, we display a UserError instead of the ugly traceback. opw-4526766 Forward-Port-Of: odoo/enterprise#82482 Forward-Port-Of: odoo/enterprise#81561
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the bu
Original PR description
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a…
* stock{,_barcode, _barcode_quality_control}, quality_control
### Issue:
Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the button validate. As a result, we will not create the quality checks related to these additional moves.
The above issue can be triggered in many situations. Here are the two major ones:
### Use case I:
Creating a delivery or an internal transfer on the fly from the barcode app.
### Steps to reproduce:
- Create a storable product P with a barcode: XXX
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product: Control per: "Operation" Operations: "Delivery"
- Go to the barcode app > Operations > Delivery > New
- Scan your product
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
The `save_barcode_data` will launch the creation of the move line related to the barcode line you edited from the barcode app. During the create of this 'stock.move.line', an associated move will be created and its initial "state" will be the current state of the picking: https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L354-L356 https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L942 At this point the picking state is "draft" and the move will be correctly created in draft. However, just a few lines after its creation, we will check if a reservation should be done with that move and if its state should be recomputed:
https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L379-L396 the discrepancy is caused by the fact that `move._should_bypass_reservation` will be true if the picking is a receipt and false for the other types because you should bypass reservation for moves whose source is not an internal location but you should not for others. This will leave the moves and picking in draft state if its a receipt and update it for other types. However, only draft pickings are confirmed at the beginning of the button validate: https://github.com/odoo/odoo/blob/b0cfeecacfc6b95659778dfe4d62435556aaa92c/addons/stock/models/stock_picking.py#L1131-L1133
### Use case II:
Create and confirm a picking of any type so that it ends up being assigned. Add manually a move line via the detailed operations.
### Steps to reproduce:
- Create two storable product P1 and P2 put 10 units of both in stock
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product P2: Control per: "Operation" Operations: "Delivery"
- Create and confirm a Delivery for 1 unit P1
- Go to Detailed Operations > create a new line for 1 unit of P2
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
For the same reasons as above, the newly created move is assigned as it mimics the state of the current picking which is assigned since we have already reserved the already existing move.
### Fix:
We ensure the creation of quality checks for moves that end up being created but will never be confirmed.
### Technical limitation:
Unfortunately, it is not possible to manage the use case of quality checks related the component of a kit product without disrupting the barcode flows. Indeed, in barcode flows, the move line as well as its related move is created by a `save_barcode_data`. If we were to confirm the newly created moves rather than just trying to create the QC, it would indeed first explode the bom and then create the related QC for each component. However, the barcode data would not coincide anymore with the back end data since the line we just saved would have been exploded at backend creation. For that reason we do not yet support the above use cases for kit products.
Community: https://github.com/odoo/odoo/pull/202725
opw-4480104
Forward-Port-Of: odoo/enterprise#81903
Forward-Port-Of: odoo/enterprise#81850The tests for assets are lacking a freeze_time, and so, fail beginning 31st of March runbot-162150 Forward-Port-Of: odoo/enterprise#82520
Original PR description
The tests for assets are lacking a freeze_time, and so, fail beginning 31st of March runbot-162150 Forward-Port-Of: odoo/enterprise#82520
Fix an issue with the formula of the Other gain (loss) line. It was "-57 + -59" which in theory is a correct formula, but in practice it is not handled well by the report engine and the + will match many other accounts that we don't want. It is corrected to be "-57 - 59". Forward-Port-Of: odoo/enterprise#82387
Original PR description
Fix an issue with the formula of the Other gain (loss) line. It was "-57 + -59" which in theory is a correct formula, but in practice it is not handled well by the report engine and the + will match many other accounts that we don't want. It is corrected to be "-57 - 59". Forward-Port-Of: odoo/enterprise#82387