Daily updates from Odoo
Wednesday, December 11, 2024
66 changes
12 changes
Resolved issues and error corrections
This fix adjusts how online store stock-related product option code is loaded so that the right behavior is applied consistently. It helps prevent custom product variant logic from being skipped due to file loading order, reducing the risk of incorrect storefront behavior.
Original PR description
### Current behavior before PR: While working on this https://github.com/odoo/enterprise/pull/74813/commits/337ea18baebdf4c896bc3e503448207fd9095991 we were overriding a method in VariantMixin but it was shadowed and not executed this was happening because of the order JS is loading the files when importing website_sale. ### Desired behavior after PR is merged: After discussing with XBO, we are removing the import of website_sale from variant_mixin.js and moving the overridden method to website_sale.js to avoid having this problem in the future.
Miscellaneous changes
Currently a ``ParseError`` is arising when the user installs the ``website_sale`` module after deleting the one shipping method from the ``sale`` module. Steps to reproduce: --- - Install ``sale`` and ``delivery`` modules - Open ``Shipping Methods`` and delete one shipping method - Now try to install the ``website_sale`` module. - The error appears in the log. Traceback: --- ``` ParseError while parsing /home/odoo/src/odoo/18.0/addons/website_sale/data/data.xml:62, somewhere insi
Original PR description
Currently a ``ParseError`` is arising when the user installs the ``website_sale`` module after deleting the one shipping method from the ``sale`` module.
Steps to reproduce:
---
- Install ``sale`` and ``delivery`` modules
- Open ``Shipping Methods`` and delete one shipping method
- Now try to install the ``website_sale`` module.
- The error appears in the log.
Traceback:
---
```
ParseError
while parsing /home/odoo/src/odoo/18.0/addons/website_sale/data/data.xml:62, somewhere inside <record id="delivery.free_delivery_carrier" model="delivery.carrier">
<field name="is_published" eval="True"/>
</record>
```
This commit solves the above issue by using ``forcecreate="False"`` to bypass record creation if it violates checks.
sentry-5731062091
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#189674Steps to reproduce: - Go to a form view with a one2many with a handle widget - Move a line in the one2many that make Odoo crash with the onchange To generate a faulty view, create a form view with a one2many and add an automation "On UI change" to make the resequence crash. Current behaviour ----------------- After the error being thrown, the user will not be able to resequence this line again. Expected Behaviour ------------------ After the error, the user will still be able to r
Original PR description
Steps to reproduce: - Go to a form view with a one2many with a handle widget - Move a line in the one2many that make Odoo crash with the onchange To generate a faulty view, create a form view with a one2many and add an automation "On UI change" to make the resequence crash. Current behaviour ----------------- After the error being thrown, the user will not be able to resequence this line again. Expected Behaviour ------------------ After the error, the user will still be able to resequence this line Forward-Port-Of: odoo/odoo#159678 Forward-Port-Of: odoo/odoo#157539
### Steps to reproduce: - Install "l10n_hu_edi" and switch to a Hungarian company - Create an invoice - Click "Send & Print", uncheck "NAV 3.0" and send it - Repeat step 3 - Error ### Cause: With l10n_hu_edi, Odoo is supposed to regenerate the invoices at each Send&Print. The way it was done is by overriding `_need_invoice_document` to not check anymore if `invoice.invoice_pdf_report_id` is empty. As the function `_prepare_invoice_pdf_report` from `account` is called when `_need_invoice
Original PR description
### Steps to reproduce: - Install "l10n_hu_edi" and switch to a Hungarian company - Create an invoice - Click "Send & Print", uncheck "NAV 3.0" and send it - Repeat step 3 - Error ### Cause: With…
### Steps to reproduce:
- Install "l10n_hu_edi" and switch to a Hungarian company
- Create an invoice
- Click "Send & Print", uncheck "NAV 3.0" and send it
- Repeat step 3
- Error
### Cause:
With l10n_hu_edi, Odoo is supposed to regenerate the invoices at each Send&Print. The way it was done is by overriding `_need_invoice_document` to not check anymore if `invoice.invoice_pdf_report_id` is empty. As the function `_prepare_invoice_pdf_report` from `account` is called when `_need_invoice_document` returns True, it is always called. But this function checks again if `invoice.invoice_pdf_report_id` is empty (https://github.com/odoo/odoo/blob/17.0/addons/account/wizard/account_move_send.py#L394-L395). So `invoice_data` doesn't have the key 'pdf_attachment_values' and it crashes at this line:
`pdf_values = invoice_data.get('pdf_attachment_values') or invoice_data['proforma_pdf_attachment_values']`
because it tries reading 'proforma_pdf_attachment_values' but the key is not there either.
### Solution:
Extend `_prepare_invoice_pdf_report` to remove `invoice.invoice_pdf_report_id`.
opw-4363559
Forward-Port-Of: odoo/odoo#189442**Current behavior:** Setting a global lead time may result in this time being counted twice in the breakdown of the replenishment for some orderpoint. **Expected behavior:** The global lead time should be counted one time. **Steps to reproduce:** 1. Create a product with a subcontracted BoM 2. Set the system parameter stock.visiblity_days = 365 3. Create a supplierinfo (vendor) on the subcontracted product with 0 delay (lead time) 4. Create a sale order for the subcontracted p
Original PR description
**Current behavior:** Setting a global lead time may result in this time being counted twice in the breakdown of the replenishment for some orderpoint. **Expected behavior:** The global lead time should be counted one time. **Steps to reproduce:** 1. Create a product with a subcontracted BoM 2. Set the system parameter stock.visiblity_days = 365 3. Create a supplierinfo (vendor) on the subcontracted product with 0 delay (lead time) 4. Create a sale order for the subcontracted product 5. In the replenishment report, create an orderpoint for the product and click the (i) on the tree view line 6. See that global visibility days are double-counted **Cause of the issue:** `_get_lead_days()` is called twice here, the second time it ignores vendor lead time but re-counts global visibility days. **Fix:** Ignore the global visibility in a similar manner via context the second time. opw-4370201 Forward-Port-Of: odoo/odoo#189857
Trapping the focus in modal dialogs and refocusing the last focused element when closing the dialog are requirements from the WCAG. It was not done up to now for popup snippets in the website. As popups without backdrop aren't dialogs (they don't prevent interacting with the rest of the page), we don't trap the focus in these. Steps to reproduce (Chrome/Firefox): - Drop a popup and save - Wait for the popup to appear - Use tab / shift + tab to navigate around the page => Without the fix,
Original PR description
Trapping the focus in modal dialogs and refocusing the last focused element when closing the dialog are requirements from the WCAG. It was not done up to now for popup snippets in the website. As popups without backdrop aren't dialogs (they don't prevent interacting with the rest of the page), we don't trap the focus in these. Steps to reproduce (Chrome/Firefox): - Drop a popup and save - Wait for the popup to appear - Use tab / shift + tab to navigate around the page => Without the fix, you're able to focus elements outside of the popup. task-4256274 Forward-Port-Of: odoo/odoo#190183 Forward-Port-Of: odoo/odoo#183558
Before this commit, if the orderline quantity was zero, it would cause a division by zero error when calculating the anglo-saxon price unit. opw-4370055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189357
Original PR description
Before this commit, if the orderline quantity was zero, it would cause a division by zero error when calculating the anglo-saxon price unit. opw-4370055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189357
Steps to reproduce: 1. Add a stored computed field on `res.users` that depends on `groups_id` 2. Add a constraint on `res.users` that depends on `groups_id` 3. Give the user a group 4. Modify the given group and add an implied group Result: - The computed field is not recomputed - The constraint is not checked The reason for this is that the users groups are updated with a raw SQL query, and the ORM is not aware of the changes. This is a regression since 5f12e244. This issue w
Original PR description
Steps to reproduce: 1. Add a stored computed field on `res.users` that depends on `groups_id` 2. Add a constraint on `res.users` that depends on `groups_id` 3. Give the user a group 4. Modify the given group and add an implied group Result: - The computed field is not recomputed - The constraint is not checked The reason for this is that the users groups are updated with a raw SQL query, and the ORM is not aware of the changes. This is a regression since 5f12e244. This issue was partially detected and fixed in 459e6dc1, but only for a single constraint. This commit makes sure that the ORM properly propagates the changes to computed fields and all constraints, not just the one that was explicitly checked. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#177301
### Context: In its current form, the HTTP route using `/rate/<string:token>/<int:rate>`, that is used in URL links generated by emails asking for customer feedback, will have a "one-click write" behavior that commits the rating encoded in `<int:rate>`. So the record is already updated with the new value. Only then renders the feedback submit Form, where the user can change their preselected rating and leave a commentary before submitting it via a POST request. Over the last years email prov
Original PR description
### Context: In its current form, the HTTP route using `/rate/<string:token>/<int:rate>`, that is used in URL links generated by emails asking for customer feedback, will have a "one-click write"…
### Context: In its current form, the HTTP route using `/rate/<string:token>/<int:rate>`, that is used in URL links generated by emails asking for customer feedback, will have a "one-click write" behavior that commits the rating encoded in `<int:rate>`. So the record is already updated with the new value. Only then renders the feedback submit Form, where the user can change their preselected rating and leave a commentary before submitting it via a POST request. Over the last years email providers and third party services will preemptively crawl URL in emails to verify if they are "dangerous" (e.g. Microsoft's Safe link and Defender fatures). By doing so, the rating for the records will be set to the last clicked URL using the above HTTP route, without any input from a human user. It will be creating a number of false positive or negative ratings that do not represent the real satisfaction of the surveyed customer. ### Proposed solution: We are removing the implicit "one-click write" behavior of the route and favoring the Form submission expecting human input. This will increase the likelihood a given rating was the result of the customer clicking on the link and taking the time to leave a feedback, versus random inputs from URL bots. ### Future outlook: With the ever-changing landscape of URL crawler bots, trying to develop counter measures to identify and flag bot behavior is possible, but would add immense overhead and maintenance cost of the code for an arguably minor feature, i.e. the customer can rate the ticket by just clicking the picture in the email. Other methods to make these routes more resilient to URL crawlers might be revisited in the future, but for the short-term this seems like a sufficient solution to the unwanted behavior. OPW-3411799 OPW-4292166 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189146 Forward-Port-Of: odoo/odoo#187373
### Steps to reproduce: - Enable Multi-Steps Routes in the settings - Inventory > Configuration > Warehouse Management > Locations - Pick any location - With studio add the one2Many field `Store to sublocation` (`location_out_id` of `stock.putaway.rule`) > Close studio - Try to add a line on the associated list #### > Traceback ### Cause of the issue: Adding a line will trigger an onchange of the`stock.putaway.rule` model in order to compute the default data of the new subrecord. H
Original PR description
### Steps to reproduce: - Enable Multi-Steps Routes in the settings - Inventory > Configuration > Warehouse Management > Locations - Pick any location - With studio add the one2Many field `Store to…
### Steps to reproduce: - Enable Multi-Steps Routes in the settings - Inventory > Configuration > Warehouse Management > Locations - Pick any location - With studio add the one2Many field `Store to sublocation` (`location_out_id` of `stock.putaway.rule`) > Close studio - Try to add a line on the associated list #### > Traceback ### Cause of the issue: Adding a line will trigger an onchange of the`stock.putaway.rule` model in order to compute the default data of the new subrecord. However, the code will crash during the `_search_count` of the `_onchange_location_in` because of an invalid domain: https://github.com/odoo/odoo/blob/29939aa5fb1455af89a37293d2f76541ff1645ef/addons/stock/models/product_strategy.py#L80-L88 THis crashed since in our case the `location_out_id` will be a new record created during the onchange to represent the 'stock.location' and from which we are looking at the form. As such, a NewId will be given and treated as an integer in the domain leading to a traceback when the db is served. ### Fix: Onchange method should be robust with respect to the usage of New records and hence the records used here should be replace by their origin if it even exists. opw-4126731 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189469 Forward-Port-Of: odoo/odoo#188053
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in their email. This bug only occurs if the quotation is set to "online signature" only. The bug is not reproducible when the quotation is set to both "online signature" and "online payment" or if website_sale_loyalty is not installed. Purpose: It is expected that customers should receive their reward
Original PR description
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in…
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in their email. This bug only occurs if the quotation is set to "online signature" only. The bug is not reproducible when the quotation is set to both "online signature" and "online payment" or if website_sale_loyalty is not installed. Purpose: It is expected that customers should receive their reward points for their order without needing to sign in because they accessed the link to sign the quotation from their email. It should be consistent with the behavior exhibited from having "online payment" set for the quotation or without website_sale_loyalty installed. Steps to Reproduce on Runbot: 1. Install Sales app, website_sale_loyalty, loyalty, sale_loyalty 2. Create a loyalty program that reward points based on orders 3. Create a quotation for a partner, set "online signature" in Other info, and click "Send by email" 4. Access the email in Settings > Technical > Emails 5. Copy the "Accept & sign" link and paste into incognito window 6. Sign the quote as a public user 7. Observe that the loyalty card for the partner did not update the points opw-4205826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#182545
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys should be able to generate the certification PDF. **Steps to reproduce:** - Activate Survey app and ensure there are, at least, 2 companies; - Create a survey with certification and ensure `Require Login` is unchecked; - Share the survey (copy the `Survey Link`); - Navigate to Settings /
Original PR description
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys…
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys should be able to generate the certification PDF. **Steps to reproduce:** - Activate Survey app and ensure there are, at least, 2 companies; - Create a survey with certification and ensure `Require Login` is unchecked; - Share the survey (copy the `Survey Link`); - Navigate to Settings / Users & Companies / Users; - Filter on `Inactive Users` and select `Public user`; - Setup the user's `Default Company` on Company A; - Setup an active user's `Default Company` on Company B and ensure its `Allowed Companies` don't contain Company A; - In a private navigator (to ensure no login data are saved), answer the survey (using the copied link above); - Log in as the active user and go to Surveys / Participations; - Look for the record of your test (`Contact` field should be empty); - Click the `Certifications` action button; **Cause:** The user is not allowed to retrieve the other company's data to fill needed texts to display on the certificate. **Fix:** Allow any user to retrieve the logo and name of the restricted company using a `sudo` on these fields. opw-4266445 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189368
23 changes
Enhancements to existing features
This update makes Odoo app model definitions available from each app's main entry point, so other apps can reference them without depending on internal folder layouts. It is an internal maintainability improvement that supports future typing work and should not change day-to-day user workflows.
Original PR description
[IMP] *: Import models at the addon root level Odoo model classes whose name matches their model are exposed at the root level of the addon. This is so that other addons do not have to take into account the structure which is an implementation detail. These classes can be easily used for typing. This use will be present later. see: https://github.com/odoo/odoo/commit/5733d252b8f760b87bdd43ec6ac9ed22c4f1d07e
Approval activity items now use the shared persona display, making requester or assignee information more consistent with the rest of Odoo. This improves readability and provides a more uniform experience when reviewing approval tasks.
Original PR description
PR community: https://github.com/odoo/odoo/pull/190161
The IoT quality configuration screen now places the more commonly used Printer Reports tab before Quality Control Points. This makes frequently accessed printer report settings easier for users to find and reduces navigation friction.
Original PR description
As it's "Printer Reports" tab is more widely used than "Quality Control Points" one, we moved it in first posistion. Task: 4146883
Map views now show 0 instead of None when records are grouped by an integer field with no value. This makes grouped data clearer and avoids confusing empty labels for business users.
Original PR description
SPECIFICATION: When grouping by an integer field, ensure that if the field's value is empty, display the 0 instead of None in the all views. Related Community PR-https://github.com/odoo/odoo/pull/187567 Task-4327850
After a WhatsApp chat is forwarded to a human operator, the chatbot is now removed from the conversation. This keeps the channel focused on the customer and operator, reducing confusion during live support handoffs.
Original PR description
Until now, the chat bot stayed as a member of the channel after the "forward_operator" step. It makes more sense to remove it from the channel. task-4354075 community: https://github.com/odoo/odoo/pull/189456
Resolved issues and error corrections
The Moroccan reports module now lets users manually edit the Payment Channel value even though it is calculated automatically. This fixes cases where the automatically suggested payment channel needs correction, improving reporting accuracy without workarounds.
Original PR description
Upgrade PR: https://github.com/odoo/upgrade/pull/6842 task-4226448
The appointment website test now creates the data it needs during the test instead of relying on preloaded demo data. This helps keep automated checks stable across environments and reduces the risk of false failures during releases.
Original PR description
With this PR [1](https://github.com/odoo/enterprise/pull/72612), without demo data tour(test_searchbar_within_appointments) was failing, so required data created on the fly. runbot: 109512
This update restores expected behavior in Documents and Marketing Automation after a shared technical change affected kanban views. Users should see more reliable document selection and proper confirmation prompts when deleting parent marketing activities.
Original PR description
The documents and marketing_automation apps previously used some information in the "list" prop that was removed in favor of a optional field "groupByField" for simplification purposes. See changes introduced by https://github.com/odoo/odoo/pull/189109 and https://github.com/odoo/enterprise/pull/74863 Now we only use the "selection" prop of the list for documents and the code to display the confirmation message when deleting parent activities is moved in the HierarchyKanbanRenderer with the help of the deleteRecord function. task-4377706
Code cleanup and technical improvements
WhatsApp conversations now better separate the name shown for a discussion from the underlying channel name. This internal cleanup supports clearer behavior and helps maintain consistent access checks without changing the day-to-day user experience.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/190243
Miscellaneous changes
Before this commit, when opening a table with an order, the draft order would not be shown. This was because, when there was no order to sync, the sync function was not called to retrieve the orders from the server. This is needed in the restaurant module. opw-4370055 Forward-Port-Of: odoo/enterprise#75105 Forward-Port-Of: odoo/enterprise#74909
Original PR description
Before this commit, when opening a table with an order, the draft order would not be shown. This was because, when there was no order to sync, the sync function was not called to retrieve the orders from the server. This is needed in the restaurant module. opw-4370055 Forward-Port-Of: odoo/enterprise#75105 Forward-Port-Of: odoo/enterprise#74909
Currently, the timesheet header is not working correctly in the list view. There are a bunch of issue that this commit aims to fix: An empty header is displayed when the start button is pressed, and trying to either stop it or discard it will triggers an error The grouped by function triggers a similar issue as the one above when trying to start & stop the timer When there are no timesheetable project inside the database, an error is triggered too when starting the timer. Source of t
Original PR description
Currently, the timesheet header is not working correctly in the list view. There are a bunch of issue that this commit aims to fix: An empty header is displayed when the start button is pressed, and…
Currently, the timesheet header is not working correctly in the list view. There are a bunch of issue that this commit aims to fix: An empty header is displayed when the start button is pressed, and trying to either stop it or discard it will triggers an error The grouped by function triggers a similar issue as the one above when trying to start & stop the timer When there are no timesheetable project inside the database, an error is triggered too when starting the timer. Source of the issues : - when trying to start a timer in the list view, the function 'cleartimesheetname' is triggered. The problem is that function triggers an update on the listview. This update then triggers a second execution of the 'onWillUpdateProps' of the timesheet_timer_hook class. This second execution is not expected in the flow and set the value of the timesheet of the header to 'false'. - when the view is grouped, the record are not loaded inside the the folded section. This means that when we search for the record inside the 'popRecord' function of the timesheet_timer_hook class, we find nothing. In this use case though, the record is supposed to be found and set. - when there are no timesheetable project, the method 'popRecord' will set the timesheet of the header back to 'undefined'. Solution : - Removed the 'cleartimesheetname' method, as it is no longer usefull. A check up in the write/create of the model will prevent the required field 'description' from being null. The 'enterEditMode' has also been restricted to the kanban view, since doing this in the list view was also triggering an extra call to 'onWillupdateprops' - Checked the view to get a dynamicRecordList we can use to correctly set the data. More information inside the comment in the code. - added a condition inside the 'popRecord' method so that in no longer set the timesheet to undefined when we dont need it to task - 4268687 affected version 18.0-master Forward-Port-Of: odoo/enterprise#74264
The condition previously added leads to an error when exporting mod 347 in l10n_es as generating the export file for this report always requires period comparison. Previous pr: https://github.com/odoo/enterprise/commit/045fd08c11d5f1407e971da52ea29654ac28aa93#diff-5fc5051f5c0211c0eec96b892e7d29e01b68d804417443502d17bccd8333d7ecR659 Forward-Port-Of: odoo/enterprise#75401
Original PR description
The condition previously added leads to an error when exporting mod 347 in l10n_es as generating the export file for this report always requires period comparison. Previous pr: https://github.com/odoo/enterprise/commit/045fd08c11d5f1407e971da52ea29654ac28aa93#diff-5fc5051f5c0211c0eec96b892e7d29e01b68d804417443502d17bccd8333d7ecR659 Forward-Port-Of: odoo/enterprise#75401
- make the start_notice_period take the wizard departure_date instead of next monday in case of having `mutual agreement` the departure reason Task: 4373961 Forward-Port-Of: odoo/enterprise#75041
Original PR description
- make the start_notice_period take the wizard departure_date instead of next monday in case of having `mutual agreement` the departure reason Task: 4373961 Forward-Port-Of: odoo/enterprise#75041
Forward-Port-Of: odoo/enterprise#75262
Original PR description
Forward-Port-Of: odoo/enterprise#75262
**[FIX] stock_barcode: move entire package button** > Before this commit, the buttons to add quantity on a barcode line were also displayed for package lines. It shouldn't be the case and it doesn't work (traceback when clicked.) This commit fixes that. **[FIX] stock_barcode_*: views priority** > *: stock_barcode_mrp, stock_barcode_picking_batch > > This commit adds missing priority on primary `stock.move.line` form inherited views: > - `stock_barcode_mrp.stock_move_line_product_selecto
Original PR description
**[FIX] stock_barcode: move entire package button** > Before this commit, the buttons to add quantity on a barcode line were also displayed for package lines. It shouldn't be the case and it doesn't work (traceback when clicked.) This commit fixes that. **[FIX] stock_barcode_*: views priority** > *: stock_barcode_mrp, stock_barcode_picking_batch > > This commit adds missing priority on primary `stock.move.line` form inherited views: > - `stock_barcode_mrp.stock_move_line_product_selector` > - `stock_barcode_picking_batch.stock_move_line_product_selector_inherit` > > Without this field, those views will have the default priority and will sometime be displayed instead of the default move line form view (`stock.view_move_line_form`) which causes a traceback because those views were explicitly created for the Barcode app and use specific widget which is no usable in other contexts. task-4329041 Forward-Port-Of: odoo/enterprise#73682
The multipage computation of xslx files was a bit overkill as it would convert the xlsx file to an o-spreadsheet json friendly form where it could simply explore the zip files. Furthermore, that convertion would create attachments for each media file present in the xlsx file. This is bad in 2 ways: - the created attachment would never be used again - we were creating attachment while calling a computed field (read/write mix is bad) Task-4213183 Forward-Port-Of: odoo/enterprise#75332 Forwar
Original PR description
The multipage computation of xslx files was a bit overkill as it would convert the xlsx file to an o-spreadsheet json friendly form where it could simply explore the zip files. Furthermore, that convertion would create attachments for each media file present in the xlsx file. This is bad in 2 ways: - the created attachment would never be used again - we were creating attachment while calling a computed field (read/write mix is bad) Task-4213183 Forward-Port-Of: odoo/enterprise#75332 Forward-Port-Of: odoo/enterprise#70722
Current behaviour: --- When trying to duplicate a resource booking containing a resource, you get a Validation Error for a missing field. Expected behaviour: --- Ability to duplicate a resource booking Steps to reproduce: --- 1. Go to Appointments 2. Select a resource appointments (ie. Tennis Court) 3. Click on new (To make a new resource booking) 4. Set a name, attendee, AND resource (ie. Court 1) 5. Go to list view, and open newly made booking 6. Click on the cog > Duplicate
Original PR description
Current behaviour: --- When trying to duplicate a resource booking containing a resource, you get a Validation Error for a missing field. Expected behaviour: --- Ability to duplicate a resource…
Current behaviour: --- When trying to duplicate a resource booking containing a resource, you get a Validation Error for a missing field. Expected behaviour: --- Ability to duplicate a resource booking Steps to reproduce: --- 1. Go to Appointments 2. Select a resource appointments (ie. Tennis Court) 3. Click on new (To make a new resource booking) 4. Set a name, attendee, AND resource (ie. Court 1) 5. Go to list view, and open newly made booking 6. Click on the cog > Duplicate 7. Validation Error Cause of the issue: --- Caused by: https://github.com/odoo/enterprise/commit/064e0da976edd7ef501e4fb33d4d579eaab85a3d When duplicating a calendar.event, at the field appointment_resource_ids, the relation table appointment_booking_line is used on the fields calendar_event_id and appointment_resource_id. However, the model appointment_booking_line has another required field capacity_reserved. So when inserting into the table: https://github.com/odoo/odoo/blob/b64a507697381fd7bb205f4a2b2217322d31811a/odoo/fields.py#L4945 Only the two specified columns/fields are set, but not the third required field capacity_reserved. Which causes a SQL error "violates not-null constraint" opw-4187159 Forward-Port-Of: odoo/enterprise#75014 Forward-Port-Of: odoo/enterprise#71489
[IMP] documents improve search panel and home kanban view This commits brings changes to the search panel that should improve UX: - When coming from another app (e.g. Projects), the COMPANY folder stays folded... -... and the name of the folder containing the targeted document is displayed below the breadcrumbs, right before the cogwheel. - "Home" background changes when you hover or select it, the same way as for the folders. - Deselect 'Home'* (if selected) when adding a search item.
Original PR description
[IMP] documents improve search panel and home kanban view This commits brings changes to the search panel that should improve UX: - When coming from another app (e.g. Projects), the COMPANY folder…
[IMP] documents improve search panel and home kanban view This commits brings changes to the search panel that should improve UX: - When coming from another app (e.g. Projects), the COMPANY folder stays folded... -... and the name of the folder containing the targeted document is displayed below the breadcrumbs, right before the cogwheel. - "Home" background changes when you hover or select it, the same way as for the folders. - Deselect 'Home'* (if selected) when adding a search item. - Clear search and order by `last_accessed_date` when clicking on 'Home'. - When users navigate through COMPANY folders via the Kanban or the List view, and COMPANY is folded, the search panel does not expand the visited folders. - Clicking on the caret before the folder name, fold/unfold the folder without selecting it (setting it as the active folder). - Clicking on a folder name in the search panel just select it (no folding/unfolding). - Main folders like 'COMPANY', that name is preceded by an icon, also have a caret for folding/unfolding. - Kanban view: limit pager size to 40 records. * actually, it's just a visual trick: removing the active class from the 'Home' header element. task-4293935 Forward-Port-Of: odoo/enterprise#73443
This PR hides the “Update DGI Status” button on the account.move form view when the CFE Status is either “CFE Accepted by DGI” or “CFE Rejected by DGI”. This change is necessary because both “Accepted” and “Rejected” are final states that cannot transition to another status. Once a CFE reaches either of these states, there is no status update possible, making the button irrelevant in these scenarios. Task Adhoc side: 43467 Task Latam side: 1295 Forward-Port-Of: odoo/enterprise#75144
Original PR description
This PR hides the “Update DGI Status” button on the account.move form view when the CFE Status is either “CFE Accepted by DGI” or “CFE Rejected by DGI”. This change is necessary because both “Accepted” and “Rejected” are final states that cannot transition to another status. Once a CFE reaches either of these states, there is no status update possible, making the button irrelevant in these scenarios. Task Adhoc side: 43467 Task Latam side: 1295 Forward-Port-Of: odoo/enterprise#75144
**Steps to reproduce:** - Make sure that PyPDF2 is in version 1.26.0 - Install l10n_mx_edi - Switch to a Mexican company - Create an invoice: * Customer: [a Mexican customer] * Payment Way: [Effectivo] * An invoice line with a product having a UNSPSC Category - Confirm the invoice - Generate CFDI via "Send & Print" button - Register a payment with "Efectivo" Payment Way - Update Payments on the invoice - Go to the payment - Force CFDI - Make sure the CFDI status of the paymen
Original PR description
**Steps to reproduce:** - Make sure that PyPDF2 is in version 1.26.0 - Install l10n_mx_edi - Switch to a Mexican company - Create an invoice: * Customer: [a Mexican customer] * Payment Way:…
**Steps to reproduce:**
- Make sure that PyPDF2 is in version 1.26.0
- Install l10n_mx_edi
- Switch to a Mexican company
- Create an invoice:
* Customer: [a Mexican customer]
* Payment Way: [Effectivo]
* An invoice line with a product having a UNSPSC Category
- Confirm the invoice
- Generate CFDI via "Send & Print" button
- Register a payment with "Efectivo" Payment Way
- Update Payments on the invoice
- Go to the payment
- Force CFDI
- Make sure the CFDI status of the payment is "Signed"
- Print "Payment Receipt"
**Issue:**
PyPDF2 raises a traceback:
"IndexError: list index out of range".
**Cause:**
PyPDF2 is executing this code to format a warning: file = filename.replace("/", "\\").rsplit("\\", 1)[1] where filename is something liked "<xxx>" (coming from the qweb compilation). Therefore, there is no index 1.
The warning is coming from lxml and is due to the fact that we are evaluating a xml value as it is in a qweb template:
"FutureWarning: Use specific 'len(elem)' or 'elem is not None' test instead." And since this commit:
https://github.com/odoo/odoo/commit/fd67b56fc695526d09706d2b6218519ea255fc30 Python's "warning.py" is overridden in PyPDF2.
**Solution:**
Use "len(cfdi['cfdi_node'])" as advised to check if the xml node has children in the payment receipt template.
opw-4359466
opw-4366016
Forward-Port-Of: odoo/enterprise#75227To reproduce: ============= - assign a user U without any group access to Appraisal app as manager of an appraisal - login as this user U and ask for feedback on the appraisal - fill the feedback, and change it's deadline to the past - try to consult the answers as user U -> redirected to survey expired error page Problem: ======== the access to appraisal feedback is checked based on the user's group access, but the user can be the manager of the appraisal without any group access to t
Original PR description
To reproduce: ============= - assign a user U without any group access to Appraisal app as manager of an appraisal - login as this user U and ask for feedback on the appraisal - fill the feedback, and change it's deadline to the past - try to consult the answers as user U -> redirected to survey expired error page Problem: ======== the access to appraisal feedback is checked based on the user's group access, but the user can be the manager of the appraisal without any group access to the appraisal app Solution: ========= in addition to the group access, check if the user is the manager of the appraisal opw-4354685 Forward-Port-Of: odoo/enterprise#75360
Steps to reproduce: - Install the l10n_cl_edi module - Create an invoice - Some terms are not translated : - Where it says: .. should say: .. - Donce dice: .. deberia decir: .. Issue: Some translation were missing making it incorect for the Chile localization. This comes from the [changes](https://github.com/odoo/enterprise/commit/33b6cafdf3985df255ef44) Fix: Updated the .pot and the .po accordingly to include the terms so the translation is correct. opw-4350114 For
Original PR description
Steps to reproduce: - Install the l10n_cl_edi module - Create an invoice - Some terms are not translated : - Where it says: .. should say: .. - Donce dice: .. deberia decir: .. Issue: Some translation were missing making it incorect for the Chile localization. This comes from the [changes](https://github.com/odoo/enterprise/commit/33b6cafdf3985df255ef44) Fix: Updated the .pot and the .po accordingly to include the terms so the translation is correct. opw-4350114 Forward-Port-Of: odoo/enterprise#74447
## Description Most read `ir.rule` on documents are based around the searchable field `user_permission`. Both `documents.document` and `documents.access` rely on it, and its' implementation creates a recursive application of the ir.rule, as `documents.document` calls `_search_user_permission`, which reads on `documents.access`, whos `ir.rule` rely on `document_id.user_permission`, re-applying the same domain from `_search_user_permission`. This recursive-like behaviour creates excessively larg
Original PR description
## Description Most read `ir.rule` on documents are based around the searchable field `user_permission`. Both `documents.document` and `documents.access` rely on it, and its' implementation creates a…
## Description Most read `ir.rule` on documents are based around the searchable field `user_permission`. Both `documents.document` and `documents.access` rely on it, and its' implementation creates a recursive application of the ir.rule, as `documents.document` calls `_search_user_permission`, which reads on `documents.access`, whos `ir.rule` rely on `document_id.user_permission`, re-applying the same domain from `_search_user_permission`. This recursive-like behaviour creates excessively large queries with a lot of subquery, exploding the costs of it above the `jit_above_cost` threshold (500k by default), leading to slow execution, due to the JIT optimizer, which normally should be reserved for long analytical queries. ## Patch Adding `auto_join=True` on `documents.access.document_id` will transform some of the subqueries in joins, and is done in `sudo` context, avoiding re-application of the `ir.rule` while resolving itself. The simplification of the query leads to lower query cost that is bellow the `jit_above_cost` threshold, removing the slow optimisation step, leading to faster execution, as it was the main bottleneck. ## Benchmark On a db with a moderately sized `documents_document` table: | Timings | Before | After | Speed up | |-------------------------------|--------|-------|----------| | `action_update_access_rights` | 7s | 550ms | 12.7x | ## Reference task-4381572 Forward-Port-Of: odoo/enterprise#75280
31 changes
Enhancements to existing features
Odoo will stop automatically adding its own signature when an external customer replies by email. This avoids duplicate or cluttered signatures because customers often already include one from their email app.
Original PR description
When an external user responds to an email sent via Odoo, Odoo may send a mail notification with the user's message and automatically add a signature on their behalf. Since most external users may have already configured an email signature in their mail client, the added signature can be redundant. To avoid this, we will no longer add a signature on behalf of external users. task-4273520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Call participants in Discuss are now sorted using the correct available name information. This prevents ordering issues in the call sidebar, making participant lists more reliable during conversations.
Original PR description
Before this commit, and since [1], the call participants in the side bar were sorted by `nameOrDisplayName` which is not available and should be using `name`. [1]: https://github.com/odoo/odoo/pull/174965
This fixes a visual issue in the Discuss sidebar where the last public channel icon could appear cropped. The icon sizing was adjusted so channels display cleanly, improving the user experience without changing functionality.
Original PR description
**Current behavior before PR:** In the discuss sidebar, the last public channel icon appears cropped due to insufficient width and height. **Desired behavior after PR is merged:** The issue is resolved by little adjusted height and width of the icons, this ensures the last public channel icon displays correctly without cropping. Before / after   task-4354447 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Badges now avoid showing an unintended grey background by default, making labels look cleaner and more consistent. An unsupported styling class was also replaced with a supported one to keep the interface aligned with the current design framework.
Original PR description
Before this commit: - Previously, the badge displayed a default background color of grey. After this commit: - The badge should not display a default background color. - The `text-bg-muted` class, which is not supported in Bootstrap 5, has been replaced with `text-bg-secondary`. task-4247109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue in the HTML editor where selecting a single empty table cell with the mouse did not show the editing toolbar. Users can now access formatting options consistently when working with table cells, reducing friction during content editing.
Original PR description
**Before this PR:** When trying to select single empty cell using mouse, toolbar is not getting opened. The reason is that `updateToolbar` gets called from mouseup event in `toolbar_plugin` but it fails to open toolbar because `shouldBeVisible` method returns false if selection is collapsed. **Behaviour after PR:** Now toolbar gets opened when selecting single empty cell. task-4316754 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Products linked to purchase order lines can no longer be deleted while still in use. This prevents errors when users open the forecast report for purchase orders that reference those products.
Original PR description
This error occurs when a product is used in a purchase order, but the product is subsequently removed or deleted from the product list, and then an attempt is made to access it in the forecast report. Steps to reproduce: --- - Install ``purchase_stock`` module - Create a new purchase order and create a new product in the purchase order line(eg: Test) - Now go to products and delete the product(eg: Test) - Now in the purchase order line click on the ``Forecast Report`` button Traceback: --- ``ValueError: Expected singleton: product.product()`` This commit resolves the error by adding the ``ondelete`` constraint to the ``product_id`` field. This ensures that a product in use cannot be deleted. sentry-6121903860 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The stop-timer timesheet dialog now displays the trash button at the same height as the other action buttons. This provides a cleaner, more consistent experience when users stop a running task timer.
Original PR description
Before this commit, the trash button displayed in the wizard used when the user clicks on stop button in a task (when a timer is running on that task for that current user) has not the same height than the other buttons displayed in that wizard. This commit makes sure the button has the same height than the other buttons. task-4382070
Employee departures by mutual agreement now use the departure date entered in the wizard to start the notice period, instead of automatically moving it to the next Monday. This helps Belgian payroll users calculate departure-related dates more accurately and consistently with the agreed leaving date.
Original PR description
- make the start_notice_period take the wizard departure_date instead of next monday in case of having `mutual agreement` the departure reason Task: 4373961
Miscellaneous changes
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys should be able to generate the certification PDF. **Steps to reproduce:** - Activate Survey app and ensure there are, at least, 2 companies; - Create a survey with certification and ensure `Require Login` is unchecked; - Share the survey (copy the `Survey Link`); - Navigate to Settings /
Original PR description
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys…
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys should be able to generate the certification PDF. **Steps to reproduce:** - Activate Survey app and ensure there are, at least, 2 companies; - Create a survey with certification and ensure `Require Login` is unchecked; - Share the survey (copy the `Survey Link`); - Navigate to Settings / Users & Companies / Users; - Filter on `Inactive Users` and select `Public user`; - Setup the user's `Default Company` on Company A; - Setup an active user's `Default Company` on Company B and ensure its `Allowed Companies` don't contain Company A; - In a private navigator (to ensure no login data are saved), answer the survey (using the copied link above); - Log in as the active user and go to Surveys / Participations; - Look for the record of your test (`Contact` field should be empty); - Click the `Certifications` action button; **Cause:** The user is not allowed to retrieve the other company's data to fill needed texts to display on the certificate. **Fix:** Allow any user to retrieve the logo and name of the restricted company using a `sudo` on these fields. opw-4266445 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189368
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in their email. This bug only occurs if the quotation is set to "online signature" only. The bug is not reproducible when the quotation is set to both "online signature" and "online payment" or if website_sale_loyalty is not installed. Purpose: It is expected that customers should receive their reward
Original PR description
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in…
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in their email. This bug only occurs if the quotation is set to "online signature" only. The bug is not reproducible when the quotation is set to both "online signature" and "online payment" or if website_sale_loyalty is not installed. Purpose: It is expected that customers should receive their reward points for their order without needing to sign in because they accessed the link to sign the quotation from their email. It should be consistent with the behavior exhibited from having "online payment" set for the quotation or without website_sale_loyalty installed. Steps to Reproduce on Runbot: 1. Install Sales app, website_sale_loyalty, loyalty, sale_loyalty 2. Create a loyalty program that reward points based on orders 3. Create a quotation for a partner, set "online signature" in Other info, and click "Send by email" 4. Access the email in Settings > Technical > Emails 5. Copy the "Accept & sign" link and paste into incognito window 6. Sign the quote as a public user 7. Observe that the loyalty card for the partner did not update the points opw-4205826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#182545
Steps to reproduce: 1. Add a stored computed field on `res.users` that depends on `groups_id` 2. Add a constraint on `res.users` that depends on `groups_id` 3. Give the user a group 4. Modify the given group and add an implied group Result: - The computed field is not recomputed - The constraint is not checked The reason for this is that the users groups are updated with a raw SQL query, and the ORM is not aware of the changes. This is a regression since 5f12e244. This issue w
Original PR description
Steps to reproduce: 1. Add a stored computed field on `res.users` that depends on `groups_id` 2. Add a constraint on `res.users` that depends on `groups_id` 3. Give the user a group 4. Modify the given group and add an implied group Result: - The computed field is not recomputed - The constraint is not checked The reason for this is that the users groups are updated with a raw SQL query, and the ORM is not aware of the changes. This is a regression since 5f12e244. This issue was partially detected and fixed in 459e6dc1, but only for a single constraint. This commit makes sure that the ORM properly propagates the changes to computed fields and all constraints, not just the one that was explicitly checked. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190259 Forward-Port-Of: odoo/odoo#177301
Versions -------- - saas-17.4+ Steps ----- 1. Start a fresh database with only `website_sale` installed; 2. configure Website to show strikethrough price; 3. configure Website to let user decide on "Add to Cart"; 4. create a pricelist with a discount based on another pricelist; 5. have discount apply to all product categories; 6. make pricelist selectable; 7. go to /shop; 8. add a product to cart. Issue ----- > ``` > AssertionError: > Invalid value res.currency(1,) in domain
Original PR description
Versions -------- - saas-17.4+ Steps ----- 1. Start a fresh database with only `website_sale` installed; 2. configure Website to show strikethrough price; 3. configure Website to let user decide on…
Versions
--------
- saas-17.4+
Steps
-----
1. Start a fresh database with only `website_sale` installed;
2. configure Website to show strikethrough price;
3. configure Website to let user decide on "Add to Cart";
4. create a pricelist with a discount based on another pricelist;
5. have discount apply to all product categories;
6. make pricelist selectable;
7. go to /shop;
8. add a product to cart.
Issue
-----
> ```
> AssertionError:
> Invalid value res.currency(1,) in domain term ('date_end', '>=', res.currency(1,))
>```
Cause
-----
PR https://github.com/odoo/odoo/pull/181014 changed how versions 17.4+ display strikethrough prices for discount rules.
In doing so, it added a call to `_compute_price_before_discount`, passing the parameters positionally.
The problem is that not all helper functions used in the process accept these arguments in the same order, specifically:
https://github.com/odoo/odoo/blob/4c68ce24eaf4e1b431485a3bdcd55ca0064c0ae0/addons/product/models/product_pricelist_item.py#L521
https://github.com/odoo/odoo/blob/4c68ce24eaf4e1b431485a3bdcd55ca0064c0ae0/addons/product/models/product_pricelist.py#L161-L164
Solution
--------
Name the arguments, so that they get passed as `**kwargs` instead of `*args`.
opw-4366956
Forward-Port-Of: odoo/odoo#189925Before this commit, if you had many records and sold many products in a day, the PoS would become slow when adding products to the cart. This commit improves performance with 5000 loaded products, 1000 existing pos order lines, and 2000 pricelist items, reducing the time from about 5 seconds to 200 ms. This commit prevents unnecessary deletions on IndexedDB, retrieves the display discount policy in O(1) time complexity compared to O(n), and filters products to display on sliced products inste
Original PR description
Before this commit, if you had many records and sold many products in a day, the PoS would become slow when adding products to the cart. This commit improves performance with 5000 loaded products, 1000 existing pos order lines, and 2000 pricelist items, reducing the time from about 5 seconds to 200 ms. This commit prevents unnecessary deletions on IndexedDB, retrieves the display discount policy in O(1) time complexity compared to O(n), and filters products to display on sliced products instead of all products. opw-4381390 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189574
Before this commit, updating the quantity in localizations with disallowLineQuantityChange, such as Germany, would result in an error. opw-4367694 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189129
Original PR description
Before this commit, updating the quantity in localizations with disallowLineQuantityChange, such as Germany, would result in an error. opw-4367694 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189129
When in preview mode and a modal is open in the preview, pressing escape hides both the modal and the top menu bar. We want to prevent that. Steps to reproduce: 1. Connect as Admin and go on the website homepage 2. Edit the page, add a popup and save 3. Make sure to be in preview mode 4. Wait for the popup to show. 5. Click on it (just to be sure it's focused) 6. Press escape task-4351982 Forward-Port-Of: odoo/odoo#190066 Forward-Port-Of: odoo/odoo#188085
Original PR description
When in preview mode and a modal is open in the preview, pressing escape hides both the modal and the top menu bar. We want to prevent that. Steps to reproduce: 1. Connect as Admin and go on the website homepage 2. Edit the page, add a popup and save 3. Make sure to be in preview mode 4. Wait for the popup to show. 5. Click on it (just to be sure it's focused) 6. Press escape task-4351982 Forward-Port-Of: odoo/odoo#190066 Forward-Port-Of: odoo/odoo#188085
Before this commit, if the orderline quantity was zero, it would cause a division by zero error when calculating the anglo-saxon price unit. opw-4370055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189357
Original PR description
Before this commit, if the orderline quantity was zero, it would cause a division by zero error when calculating the anglo-saxon price unit. opw-4370055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189357
Before this commit, the following unit test may crash non-deterministically: "Attachment view / chatter popout across multiple records test" With the following error: ``` Cannot read properties of null (reading 'write') ``` This happens because `iframe.contentDocument` could be `null`, which happens when the iframe of popout is closed before it had time to load content. The `reset()` function of popout service assumes that the document has been loaded, which is not necessarily true
Original PR description
Before this commit, the following unit test may crash non-deterministically: "Attachment view / chatter popout across multiple records test" With the following error: ``` Cannot read properties of null (reading 'write') ``` This happens because `iframe.contentDocument` could be `null`, which happens when the iframe of popout is closed before it had time to load content. The `reset()` function of popout service assumes that the document has been loaded, which is not necessarily true. runbot-106785 Forward-Port-Of: odoo/odoo#190194
`*` = [hr_expense, pos_loyalty, product, sale_loyalty , website_sale_loyalty] Before this commit: In the mobile and form view, when a checkbox field had a long label, the checkbox would appear on top, with the label text displayed below. Also, Long labels extend beyond the boundaries of the form view, appearing outside of it. After this commit: Checkbox fields with long labels are now properly aligned in the mobile and form views. The checkbox and its label text are displayed corr
Original PR description
`*` = [hr_expense, pos_loyalty, product, sale_loyalty , website_sale_loyalty] Before this commit: In the mobile and form view, when a checkbox field had a long label, the checkbox would appear on top, with the label text displayed below. Also, Long labels extend beyond the boundaries of the form view, appearing outside of it. After this commit: Checkbox fields with long labels are now properly aligned in the mobile and form views. The checkbox and its label text are displayed correctly, Task-4269578 Forward-Port-Of: odoo/odoo#187980
### Steps to reproduce: - Install "l10n_hu_edi" and switch to a Hungarian company - Create an invoice - Click "Send & Print", uncheck "NAV 3.0" and send it - Repeat step 3 - Error ### Cause: With l10n_hu_edi, Odoo is supposed to regenerate the invoices at each Send&Print. The way it was done is by overriding `_need_invoice_document` to not check anymore if `invoice.invoice_pdf_report_id` is empty. As the function `_prepare_invoice_pdf_report` from `account` is called when `_need_invoice
Original PR description
### Steps to reproduce: - Install "l10n_hu_edi" and switch to a Hungarian company - Create an invoice - Click "Send & Print", uncheck "NAV 3.0" and send it - Repeat step 3 - Error ### Cause: With…
### Steps to reproduce:
- Install "l10n_hu_edi" and switch to a Hungarian company
- Create an invoice
- Click "Send & Print", uncheck "NAV 3.0" and send it
- Repeat step 3
- Error
### Cause:
With l10n_hu_edi, Odoo is supposed to regenerate the invoices at each Send&Print. The way it was done is by overriding `_need_invoice_document` to not check anymore if `invoice.invoice_pdf_report_id` is empty. As the function `_prepare_invoice_pdf_report` from `account` is called when `_need_invoice_document` returns True, it is always called. But this function checks again if `invoice.invoice_pdf_report_id` is empty (https://github.com/odoo/odoo/blob/17.0/addons/account/wizard/account_move_send.py#L394-L395). So `invoice_data` doesn't have the key 'pdf_attachment_values' and it crashes at this line:
`pdf_values = invoice_data.get('pdf_attachment_values') or invoice_data['proforma_pdf_attachment_values']`
because it tries reading 'proforma_pdf_attachment_values' but the key is not there either.
### Solution:
Extend `_prepare_invoice_pdf_report` to remove `invoice.invoice_pdf_report_id`.
opw-4363559
Forward-Port-Of: odoo/odoo#189442The superuser menu is only visible to admins. Task - 4260306 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190058 Forward-Port-Of: odoo/odoo#186584
Original PR description
The superuser menu is only visible to admins. Task - 4260306 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190058 Forward-Port-Of: odoo/odoo#186584
Currently a ``ParseError`` is arising when the user installs the ``website_sale`` module after deleting the one shipping method from the ``sale`` module. Steps to reproduce: --- - Install ``sale`` and ``delivery`` modules - Open ``Shipping Methods`` and delete one shipping method - Now try to install the ``website_sale`` module. - The error appears in the log. Traceback: --- ``` ParseError while parsing /home/odoo/src/odoo/18.0/addons/website_sale/data/data.xml:62, somewhere insi
Original PR description
Currently a ``ParseError`` is arising when the user installs the ``website_sale`` module after deleting the one shipping method from the ``sale`` module.
Steps to reproduce:
---
- Install ``sale`` and ``delivery`` modules
- Open ``Shipping Methods`` and delete one shipping method
- Now try to install the ``website_sale`` module.
- The error appears in the log.
Traceback:
---
```
ParseError
while parsing /home/odoo/src/odoo/18.0/addons/website_sale/data/data.xml:62, somewhere inside <record id="delivery.free_delivery_carrier" model="delivery.carrier">
<field name="is_published" eval="True"/>
</record>
```
This commit solves the above issue by using ``forcecreate="False"`` to bypass record creation if it violates checks.
sentry-5731062091
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#189674**Steps:** - Install the hr module - Open the employee profile ----- **Description of the issue/feature this PR addresses:** In the employee profile, when entering letters with accents (é è à ë ...) in the badge ID, the barcode fails to print correctly, displaying the badge number as plain text instead. ----- **Cause:** The issue is due to barcode scanner limitations. ----- **Fix:** This PR resolves the issue by restricting the badge ID to alphanumeric characters without
Original PR description
**Steps:** - Install the hr module - Open the employee profile ----- **Description of the issue/feature this PR addresses:** In the employee profile, when entering letters with accents (é è à ë ...) in the badge ID, the barcode fails to print correctly, displaying the badge number as plain text instead. ----- **Cause:** The issue is due to barcode scanner limitations. ----- **Fix:** This PR resolves the issue by restricting the badge ID to alphanumeric characters without accents. task-4316576 Forward-Port-Of: odoo/odoo#186867
Before this commit, since the addition of the dual stream feature in v17, starting the screen sharing while the blur was active or swapping from blur to unblur and back would cause a black camera screen. This commit fixes this issue by: 1) Not closing streams when removing them from a RTC session when those streams originate from the device (and not a remote session). 2) Removing the condition on the state, which was always false when attempting to recover an old stream. Forward-Port-Of
Original PR description
Before this commit, since the addition of the dual stream feature in v17, starting the screen sharing while the blur was active or swapping from blur to unblur and back would cause a black camera screen. This commit fixes this issue by: 1) Not closing streams when removing them from a RTC session when those streams originate from the device (and not a remote session). 2) Removing the condition on the state, which was always false when attempting to recover an old stream. Forward-Port-Of: odoo/odoo#190008 Forward-Port-Of: odoo/odoo#189799
Versions -------- - 17.0 - saas-17.2 - saas-17.4 - 18.0 Steps ----- 1. Install appointment pre efd76940c999; 2. install website post efd76940c999. Issue ----- Template rendering issue. Cause ----- The commit added a xpath to website_appointment relying on an updated appointment module, which isn't always the case in stable. Solution -------- Make the xpath in website_appointment not rely on the appointment change. opw-4394557 Forward-Port-Of: odoo/enterprise#75459 F
Original PR description
Versions -------- - 17.0 - saas-17.2 - saas-17.4 - 18.0 Steps ----- 1. Install appointment pre efd76940c999; 2. install website post efd76940c999. Issue ----- Template rendering issue. Cause ----- The commit added a xpath to website_appointment relying on an updated appointment module, which isn't always the case in stable. Solution -------- Make the xpath in website_appointment not rely on the appointment change. opw-4394557 Forward-Port-Of: odoo/enterprise#75459 Forward-Port-Of: odoo/enterprise#75417
Versions -------- - 15.0+ Steps ----- 1. Have a task assigned to you; 2. ensure planned hours are empty; 3. plan the task partially outside working hours (e.g. 16:00 -> 21:00); 4. save. Issue ----- Planned hours are overwritten. Cause ----- Commit 52536bf8bb5 added logic to provide schedule-based start dates for tasks created in Gantt view, as well as other tasks, by overwriting the provided (default) date values. Solution -------- Check whether the provided date values
Original PR description
Versions -------- - 15.0+ Steps ----- 1. Have a task assigned to you; 2. ensure planned hours are empty; 3. plan the task partially outside working hours (e.g. 16:00 -> 21:00); 4. save. Issue ----- Planned hours are overwritten. Cause ----- Commit 52536bf8bb5 added logic to provide schedule-based start dates for tasks created in Gantt view, as well as other tasks, by overwriting the provided (default) date values. Solution -------- Check whether the provided date values are indeed defaults rather than hand-picked values. This can be done by seeing whether the time span between them is exactly 23:59:59, as the default is 00:00:00 -> 23:59:59 This way, tasks scheduled in batch or Gantt can still use schedule-based hours, while user-selected values from a daterange picker don't have to be written twice to select time slot that falls outside the assignee's schedule. opw-3947876 Forward-Port-Of: odoo/enterprise#75391 Forward-Port-Of: odoo/enterprise#65404
`*` = [sale_subscription] Before this commit: In the mobile and form view, when a checkbox field had a long label, the checkbox would appear on top, with the label text displayed below. After this commit: In the mobile and form view, checkbox fields with long labels are now properly aligned, with the checkbox and label text displayed. Task-4269578 Forward-Port-Of: odoo/enterprise#74561
Original PR description
`*` = [sale_subscription] Before this commit: In the mobile and form view, when a checkbox field had a long label, the checkbox would appear on top, with the label text displayed below. After this commit: In the mobile and form view, checkbox fields with long labels are now properly aligned, with the checkbox and label text displayed. Task-4269578 Forward-Port-Of: odoo/enterprise#74561
**Steps to reproduce:** - Make sure that PyPDF2 is in version 1.26.0 - Install l10n_mx_edi - Switch to a Mexican company - Create an invoice: * Customer: [a Mexican customer] * Payment Way: [Effectivo] * An invoice line with a product having a UNSPSC Category - Confirm the invoice - Generate CFDI via "Send & Print" button - Register a payment with "Efectivo" Payment Way - Update Payments on the invoice - Go to the payment - Force CFDI - Make sure the CFDI status of the paymen
Original PR description
**Steps to reproduce:** - Make sure that PyPDF2 is in version 1.26.0 - Install l10n_mx_edi - Switch to a Mexican company - Create an invoice: * Customer: [a Mexican customer] * Payment Way:…
**Steps to reproduce:**
- Make sure that PyPDF2 is in version 1.26.0
- Install l10n_mx_edi
- Switch to a Mexican company
- Create an invoice:
* Customer: [a Mexican customer]
* Payment Way: [Effectivo]
* An invoice line with a product having a UNSPSC Category
- Confirm the invoice
- Generate CFDI via "Send & Print" button
- Register a payment with "Efectivo" Payment Way
- Update Payments on the invoice
- Go to the payment
- Force CFDI
- Make sure the CFDI status of the payment is "Signed"
- Print "Payment Receipt"
**Issue:**
PyPDF2 raises a traceback:
"IndexError: list index out of range".
**Cause:**
PyPDF2 is executing this code to format a warning: file = filename.replace("/", "\\").rsplit("\\", 1)[1] where filename is something liked "<xxx>" (coming from the qweb compilation). Therefore, there is no index 1.
The warning is coming from lxml and is due to the fact that we are evaluating a xml value as it is in a qweb template:
"FutureWarning: Use specific 'len(elem)' or 'elem is not None' test instead." And since this commit:
https://github.com/odoo/odoo/commit/fd67b56fc695526d09706d2b6218519ea255fc30 Python's "warning.py" is overridden in PyPDF2.
**Solution:**
Use "len(cfdi['cfdi_node'])" as advised to check if the xml node has children in the payment receipt template.
opw-4359466
opw-4366016
Forward-Port-Of: odoo/enterprise#75227The multipage computation of xslx files was a bit overkill as it would convert the xlsx file to an o-spreadsheet json friendly form where it could simply explore the zip files. Furthermore, that convertion would create attachments for each media file present in the xlsx file. This is bad in 2 ways: - the created attachment would never be used again - we were creating attachment while calling a computed field (read/write mix is bad) Task-4213183 Forward-Port-Of: odoo/enterprise#70722
Original PR description
The multipage computation of xslx files was a bit overkill as it would convert the xlsx file to an o-spreadsheet json friendly form where it could simply explore the zip files. Furthermore, that convertion would create attachments for each media file present in the xlsx file. This is bad in 2 ways: - the created attachment would never be used again - we were creating attachment while calling a computed field (read/write mix is bad) Task-4213183 Forward-Port-Of: odoo/enterprise#70722
To reproduce: ============= - assign a user U without any group access to Appraisal app as manager of an appraisal - login as this user U and ask for feedback on the appraisal - fill the feedback, and change it's deadline to the past - try to consult the answers as user U -> redirected to survey expired error page Problem: ======== the access to appraisal feedback is checked based on the user's group access, but the user can be the manager of the appraisal without any group access to t
Original PR description
To reproduce: ============= - assign a user U without any group access to Appraisal app as manager of an appraisal - login as this user U and ask for feedback on the appraisal - fill the feedback, and change it's deadline to the past - try to consult the answers as user U -> redirected to survey expired error page Problem: ======== the access to appraisal feedback is checked based on the user's group access, but the user can be the manager of the appraisal without any group access to the appraisal app Solution: ========= in addition to the group access, check if the user is the manager of the appraisal opw-4354685 Forward-Port-Of: odoo/enterprise#75360
Steps to reproduce: - Install the l10n_cl_edi module - Create an invoice - Some terms are not translated : - Where it says: .. should say: .. - Donce dice: .. deberia decir: .. Issue: Some translation were missing making it incorect for the Chile localization. This comes from the [changes](https://github.com/odoo/enterprise/commit/33b6cafdf3985df255ef44) Fix: Updated the .pot and the .po accordingly to include the terms so the translation is correct. opw-4350114 For
Original PR description
Steps to reproduce: - Install the l10n_cl_edi module - Create an invoice - Some terms are not translated : - Where it says: .. should say: .. - Donce dice: .. deberia decir: .. Issue: Some translation were missing making it incorect for the Chile localization. This comes from the [changes](https://github.com/odoo/enterprise/commit/33b6cafdf3985df255ef44) Fix: Updated the .pot and the .po accordingly to include the terms so the translation is correct. opw-4350114 Forward-Port-Of: odoo/enterprise#74447
### Steps to reproduce: - Create two storable product: Final Product (FP) and Component (COMP) - Create and confirm an MO for FP with a raw move: 1 x COMP > The move should be: "not available" since 0 unit of COMP are in Stock - Go to the barcode module > Operations > Manufacturing - Remove the MO Ready filter > Click on your MO and then exit barcode - Go back to the MO in the back end (mrp module) #### > The raw move has been reserved and is hence marked as available. ### Cause of the
Original PR description
### Steps to reproduce: - Create two storable product: Final Product (FP) and Component (COMP) - Create and confirm an MO for FP with a raw move: 1 x COMP > The move should be: "not available" since…
### Steps to reproduce: - Create two storable product: Final Product (FP) and Component (COMP) - Create and confirm an MO for FP with a raw move: 1 x COMP > The move should be: "not available" since 0 unit of COMP are in Stock - Go to the barcode module > Operations > Manufacturing - Remove the MO Ready filter > Click on your MO and then exit barcode - Go back to the MO in the back end (mrp module) #### > The raw move has been reserved and is hence marked as available. ### Cause of the issue: Exiting the barcode will launch an rpc call of the `split_uncompleted_moves` in order to split uncomplete moves in 2 if necessary (for the records to be appropriately set the next time you enter the barcode): https://github.com/odoo/enterprise/blob/71f979d5bdf88207cb94c83bd6a69633da649d1e/stock_barcode/static/src/models/barcode_picking_model.js#L1327-L1329 https://github.com/odoo/enterprise/blob/71f979d5bdf88207cb94c83bd6a69633da649d1e/stock_barcode/models/stock_move.py#L9-L11 Furthermore, since c29f61fdded2e80d0bb3c06199c6a196feac8076 in case of a production the component move are rather splitted on the move lines to avoid odd split of the component moves on the MO. However, in that case if a unassigned move is splitted, a move line will be generated and associated to that move, which makes it reserved and hence available. opw-4338827 --- Forward-Port-Of: odoo/enterprise#74244