Thursday, April 18, 2024
40 changes · 17.0
Resolved issues and error corrections
This update fixes two issues with the comments panel in the Knowledge module. First, it prevents an unnecessary popover from appearing when replying to comments in small windows. Second, it corrects a styling problem that was causing comments to display as empty boxes in the panel on smaller screens. These fixes ensure the comments panel works properly regardless of window size.
Original PR description
# FIX] knowledge: remove useless popover This commit fixes an issue where the popover would open inside the comments panel when replying to a comment with a small enough window, even though in this situation it's not useful at all. Now when the panel is open and we have a small window, the popover will not open when replying to a comment. # [FIX] knowledge: show panel's comments in small windows This commit fixes an issue with the comments panel when using it with a small window. Before, when you opened the panel when in a small enough window, the comments aren't properly displayed meaning that you only have empty boxes inside the panel. This was caused by a styling issue inside of the template that applied a wrong style to the comment boxes inside panel, which is not necessary inside it. Now, we modified the inline style in the template so that it is not applied inside the panel, showing back those comments in all circumstances. task-3786282
The subscription tour feature in Odoo was broken due to recent technical updates. This fix restores the guided tour functionality by updating it to work with the latest system changes, ensuring users can properly navigate the subscription setup process.
Original PR description
Before this commit, subscription tour didn't work due to technical changes. This commit aims to fix the tour, by adapting to the new changes. Task: 3679337
A bug in the subscription invoicing automation was preventing the system from properly batching subscriptions for processing. The fix corrects how batch sizes are calculated, ensuring that subscriptions are now properly grouped together during automated invoice generation. This improves the efficiency and reliability of recurring subscription billing.
Original PR description
Within #45236 the sale subscription batching method was rewritten to allow invoices to be consolidated during the cron. However, batch_size was adjusted that caused the code to never actually batch. Because `batch_size` was reassigned to `batch_size + 1` before the search call, the batch check: `need_cron_trigger = len(all_subscriptions) > batch_size` Will always fail as `all_subscription` will never be a larger recordset than `batch_size`. Solution: Don't re-write batch_size and instead do `batch_size and batch_size + 1` in the search directly. opw-3846540
This fix resolves a technical error that occurred when completing field service projects involving serial-numbered items with multi-step delivery routes. The issue happened when marking a project as done after creating multiple shipments for the same product, and has been corrected to ensure smooth project completion in these scenarios.
Original PR description
Steps to reproduce: In field service, have a project on which you have to sell 3 of item A. Item a is tracked by serial number and the delivery route is in 2 steps. From stock to output and from output to customer. On the sale order make sure you have 3 separate lines of 1 quantity of product A separated or not by sections. Confirm this one. This will create two pickings. One picking linked to a global stock move for 3 units from stock to output. A second picking linked to 3 stock moves each linked to a sale line id. Prioritise the first one by starring it. Now go back to the project and mark is as done. OPW-3792527 Forward-Port-Of: odoo/enterprise#59163
This fix corrects two issues in the Spanish Model 347 tax report. First, customer receipts are now properly included in the report when they exceed the €3,005.06 threshold. Second, the report now correctly counts invoices even after payments have been registered against them, preventing transactions from being incorrectly excluded due to payment cancellations.
Original PR description
Currently, receipts are not accounted for in the model 347 report (issue 1). The same happens for invoices for which a payment has been registered (issue 2). ### Setup * install `l10n_es_reports` *…
Currently, receipts are not accounted for in the model 347 report (issue 1). The same happens for invoices for which a payment has been registered (issue 2). ### Setup * install `l10n_es_reports` * switch to a Spanish company ### Steps to reproduce issue 1 * with a new partner, create and confirm a customer receipt for more than €3005.06 (threshold for appearing in the report) * open the model 347 tax report We would expect the new partner to be listed in the report, but they aren't. ### Steps to reproduce issue 2 * with a new partner, create and confirm an invoice for more than €3005.06 * if you open the model 347 report, you will see the new partner listed there * go back to that invoice and register a payment for it. * open the model 347 report again We expect the new partner to still be listed, but they are not. ### Cause issue 1: receipts are missing in the corresponding domains. issue 2: all account moves are used to calculate the threshold. This means that, for example, invoices and payments can cancel each other out in the calculation. opw-3816370 Forward-Port-Of: odoo/enterprise#60353 Forward-Port-Of: odoo/enterprise#59343
This fix resolves an error that occurred when generating Mexican tax documents (CFDI) for invoices where the delivery address differs from the customer address. The issue was caused by a missing method that was renamed during a previous update. The fix restores the proper handling of delivery address information in external trade invoices.
Original PR description
**Steps to reproduce:** - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create…
**Steps to reproduce:** - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US customer (e.g. Foreign Customer) (*) - In Accounting settings: * activate "Customer Addresses" * use Mexican Bank for automatic currency rates (*) - Configure a product for external trade (e.g. Office Chair) (*) - Create an invoice: (*) * Customer: Foreign Customer * Delivery Address: [different than customer] (e.g. Deco Addict) * Product: Office Chair * Incoterm: EX WORKS * External Trade: Definitive - Confirm the invoice - Generate CFDI via "Send & Print" button (*) https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/mexico.html#external-trade **Issue:** A traceback is raised because an inexisting method (i.e. `_get_customer_cfdi_values`) is called. **Cause:** The missing method has been renamed from "_l10n_mx_edi_get_customer_cfdi_values" to "_get_customer_cfdi_values" during a refactoring, but the original method has been deleted without implementing the new one. **Solution:** "_l10n_mx_edi_get_customer_cfdi_values" method was used to generate the data for the delivery address without altering the existing CFDI values. These data were used to populate the external trade data of the CFDI. "_add_customer_cfdi_values" method is similar to removed "_l10n_mx_edi_get_customer_cfdi_values" method, except that it also updates "receptor" in the CFDI. It is used with a copy of the cfdi values to compute the values for the delivery address. opw-3849153
This fix resolves an issue where users couldn't create website forms in Studio when a route with the same URL already existed (such as /event). The system now properly checks for existing routes before creating new forms, allowing users to successfully add forms to their websites without conflicts.
Original PR description
Currently, it's not possible to create a form on `event.event` because website_studio doesn't check whether `/event` already exists. Steps: - Install `website_studio` and `website_event` - Open `Events` - Open `Studio` - Click on `Website` tab - Try to add a new form by clicking on `New Form` - Studio doesn't create a new form because it points to /event which already exists (created by `website_event`). This commit verifies that the route doesn't exist before creating it. Pages are served as a fallback when Python routing (`@route`) doesn't match and there is no attachment matching that url. For simplicity and performance, we only check that our new page doesn't collide with an `@route` controller, because we assume that attachments url won't collide. see `website/models/ir_http.py` `Http::_serve_fallback` opw-3778543 Forward-Port-Of: odoo/enterprise#60226 Forward-Port-Of: odoo/enterprise#58504
This fix resolves an error that occurred when validating point-of-sale orders in Chile when the associated account document didn't have a barcode. The system now properly handles cases where barcodes are missing, allowing orders to be validated successfully without interruption.
Original PR description
Prior to this commit, an error would occur when validating an order if the account move associated with a journal (where 'l10n_latam_use_documents' is set to false) did not have the 'l10n_cl_sii_barcode'. This commit prevents this error by adding appropriate handling for cases where the barcode is missing. opw-3870174
Fixed a bug where automatic payment reminders were using the wrong email template. When processing automatic follow-ups for overdue invoices, the system was incorrectly selecting the template from a later follow-up level instead of the appropriate one. This fix ensures customers receive the correct reminder message based on their invoice's age.
Original PR description
When sending an automatic followup, the wrong template is set. This is because of a typo when getting the followup line from the options. Steps: - Have 2 followup levels, 15 and 30 days with 2 different templates and automatic reminder - Have a customer with an invoice overdue by +15 days, and go to his followup report - In the action menu, select "Process Automatic Follow-ups" -> The template used is the one from the 2nd followup level instead of the one from the 1st level. opw-3858013
This update improves security and user experience in the Appointment module by hiding buttons that users don't have permission to access. Managers can now see the "Add a Leave" button while other users see a simplified "Share Appointment Link" button instead of the previous dropdown menu. This prevents system crashes and provides a cleaner interface based on user permissions.
Original PR description
- Ensure that only managers can see the "Add a Leave" button to prevent crashes caused by unauthorized user groups attempting to access it. - Replace the "Share Availability" and dropdown button with "Share Appointment Link" which will work the same as the dropdown was working but will not contain the "Select Dates" and "Any time" options for user groups without permission to access the "appointment.type" record. - Now the buttons creating the custom appointment and the any-time appointment are hidden for the user who lacks access so we can clean some access checks and sudo from the controller as "group_appointment_user" already have rights to create the appointment types. Forward-Port-Of: odoo/enterprise#57794
Portal users can now create recurring tasks when confirming subscription orders, just like regular users. Previously, the system incorrectly required portal users to have special permissions they don't have, preventing recurring tasks from being created. Now the system checks if recurring tasks are enabled in settings instead, ensuring consistent task behavior regardless of who confirms the order.
Original PR description
Steps to reproduce: ------------------- - create a product with: - recurring - prepaid - create task on order - in the settings, enable "Recurring Tasks" - add "Use Recurring Tasks" to the current user - create a sale order with a recurring plan and the recurring product - confirm the sale order --> the created task is recurring - duplicate the sale order - validate it with a portal user Issue: ------ The task created is not recurring. The two tasks should be recurrent because the sale order is the same. The user who confirms the sale order must not affect the status of the task. Cause: ------ We check that the user belongs to the `group_project_recurring_tasks` group, which will never be the case for a portal user. Solution: --------- Authorise the creation of the recurring task if the setting is activated. opw-3823250
This fix improves how Web Studio stores references to action buttons in form views. Previously, buttons used database-specific IDs that could change when exporting configurations between systems. Now they use permanent identifiers (xml_id) that remain consistent across different databases, making it safer to share and export form customizations.
Original PR description
In a form view, add a stat button in the button box. Before this commit, the button contained the action's id. It worked on a single DB but when exporting, the id might have changed. After this commit, we put the xml_id of the action instead, which is set when studio=1 is in the context. opw-3824053 Forward-Port-Of: odoo/enterprise#60730 Forward-Port-Of: odoo/enterprise#60298
Users encountered an error when trying to uninstall the IoT feature for Point of Sale. This fix corrects a technical compatibility issue that was introduced during a code update, ensuring the uninstall process now works smoothly without errors.
Original PR description
Currently, an exception is generated when the user tries to uninstall IoT for PoS. Error: `TypeError: uninstall_hook() missing 1 required positional argument: 'registry'` This is because the commit https://github.com/odoo/enterprise/commit/6b10cc80ea2441b5b2ab86aab52abbf7084d4319 added the uninstall hook at 15, and the uninstall hook requires two arguments in 15.0. But from saas-16.3 uninstall hook require only one argument as 'env'; it is not changed with commit [1]'s forwarded port. This commit will fix this issue by providing the argumnet 'env' that is required in the uninstall hook. sentry-5167509820 Forward-Port-Of: odoo/enterprise#60392
This fix resolves a memory issue that occurred when exporting XAF reports for companies with partners having thousands of bank account numbers. The previous query was duplicating data for each bank account, causing excessive memory usage. The update optimizes the database query to prevent this duplication and improve system performance.
Original PR description
…tprint With this [commit](https://github.com/odoo/enterprise/commit/8638ccc9cc26b997caee852e266b7ecc6f7c632a), we introduced a performance issue for databases with partners having lots (several thousands) bank account numbers. Due to the GROUP BY clause, the query was duplicating each move line for each partner's bank account number, which quickly saturated the server's memory. We eliminated the problem by selecting from `res_partner` instead of `account_move_line`. Forward-Port-Of: odoo/enterprise#60875 Forward-Port-Of: odoo/enterprise#60851
This fix resolves a crash that occurred in the Timesheets app when a user's employee link was removed. The app now handles this scenario gracefully by loading the timesheet grid normally and hiding the performance leaderboard when no billable target data is available for the user.
Original PR description
Before this commit, when the user goes to Timesheets app, he could get a traceback because the JS code does manage the case `get_billable_time_target` method could return an empty when no employee is…
Before this commit, when the user goes to Timesheets app, he could get a traceback because the JS code does manage the case `get_billable_time_target` method could return an empty when no employee is linked to the current user. This commit fixes the issue by managing that case and hide the leaderboard as we should expect since the billable target is not found for that current user. Steps to reproduce the issue ============================ 1. Create a new employee 2. Link that employee to a new user 3. Remove the user to the employee (unset Linked user field) 4. Log in as that new user 5. Go to timesheets app Current Behavior ================ A traceback is occured because the rpc called returned an empty list instead of a list containing at least one object to get the billable target for the current user. Expected Behavior ================= The grid view of Timesheets app should be loaded as expected and the leaderboard should not be displayed since no data is found to get the billable target for that current user. opw-3862635 opw-3866805 opw-3864353
Fixed a bug in the Partner Ledger report that caused the application to crash when users clicked "Unfold All" if some partners were archived. The issue occurred when the groupby_prefix feature was enabled. This fix ensures the report correctly handles both active and archived partners, preventing errors and improving the user experience.
Original PR description
When activating the groupby_prefix parameter for the Partner Ledger, a Traceback can happen if clicking on Unfold All and some of the partners are archived. That's because the search on res.partner in `_custom_unfold_all_batch_data_generator` injects the active ir.rule whereas the search in `_query_partners` does not. To fix that, pass `active_test=False` to the context. To reproduce: - Install `account_reports` and `contacts` with demo data - Archive Azure Interior - Set the parameter `account_reports.partner_ledger. groupby_prefix_groups_threshold` to 2 - Go to Partner Ledger - Click on Unfold All - A Traceback is raised Also changes the search domain operator from `ilike` to `=ilike`. Ticket link: [odoo/task#3703069](https://www.odoo.com/web#model=project.task&id=3703069) opw-3703069 Forward-Port-Of: odoo/enterprise#57727
The Sign module was experiencing a crash during asset compilation due to a missing stylesheet dependency. This fix updates the module configuration to properly include the required stylesheet file, resolving the asset computation failure and ensuring the Sign module loads correctly.
Original PR description
This commit addresses a computed asset failure caused by the inclusion of 'web.editor.frontend.scss' in the 'sign' module manifest since [1] (OWL conversion). A scss variable added in 'fontawesome_overriden.scss' by a related community PR is used in 'web.editor.frontend.scss', leading to a crash during asset computation. This file is now added in the manifest. Related community PR: - https://github.com/odoo/odoo/pull/161770 opw-3747848 [1]:https://github.com/odoo/enterprise/commit/5fa63a2f284fe93acc0c4d8dc12ee47646703247 Forward-Port-Of: odoo/enterprise#60894
This fix resolves an issue where canceling a confirmed subscription order would incorrectly set the subscription to a draft state, causing system errors. The update now properly cleans up the subscription state when orders are canceled and correctly restores it if the canceled order is moved back to quotation status.
Original PR description
Before this commit, when a confirmed order was canceled, a draft quote subscription_state was set. It would trigger the constraint `sale_subscription_state_coherence` or _constraint_canceled_subscription depnding the version. THis commits ensure to clean the subscription_state of canceled subscription and it set it back to the correct value if the canceled order is set back to quotation.
This update fixes how notes are formatted in Peru electronic invoicing documents to comply with official UBL standards. Notes are now automatically cleaned to contain only letters, numbers, and spaces, and limited to 200 characters maximum. This ensures Peru invoices are properly validated by tax authorities.
Original PR description
This commit fixes the note handling in the UBL tags for the l10n_pe_edi module by ensuring notes contain only alphanumeric characters and spaces, conforming to UBL specifications. This change: - Removes all non-alphanumeric characters except spaces. - Ensures notes are truncated to a maximum of 200 characters. Legal Reference: https://cpe.sunat.gob.pe/sites/default/files/inline-files/AjustesValidacionesCPEv20240205_.xlsx 
This fix resolves a problem where article blocks in the Knowledge module were being incorrectly marked as modified and triggering unnecessary database saves. The issue was caused by improper encoding of special characters in article properties, which led to mismatches between the displayed content and the stored value. The fix ensures proper encoding of article block properties to prevent false dirty state detection.
Original PR description
# Introduction: `JSON.stringify` was used to serialize the properties for the `/article` command instead of the classical `encodeDataBehaviorProps` which also uses `encodeURIComponent` above the…
# Introduction: `JSON.stringify` was used to serialize the properties for the `/article` command instead of the classical `encodeDataBehaviorProps` which also uses `encodeURIComponent` above the `JSON.stringify`, to avoid having some special characters as an attribute value. # The issue: `html_field.js:getEditingValue` is recovering the current value in the DOM using `innerHTML` which converts some characters from tag attributes to HTML entities, i.e.: `"` for `"`. `mail.py:html_normalize` is using `lxml.html.tostring` is receiving such a string with HTML entities, and is returning a string without HTML entities. The database value (without HTML entities) is later given to the `html_field` as a prop and is used as a comparison reference (`updateValue`) with the current value in edition (that is still being converted to have HTML entities). Since both values are different, the field is considered as dirty and in need of being saved, which will trigger a write, even though the normalized value is the same. # Fix: Using `encodeDataBehaviorProps` to serialize props as the Behavior anchor attribute (like for any other Behavior) will prevent the use of characters that are being converted to HTML entities. In order to update existing `/article` blocks, the behavior will overwrite its `data-behavior-props` attribute when it is mounted in edit mode. task-3853291 Forward-Port-Of: odoo/enterprise#60775 Forward-Port-Of: odoo/enterprise#60177
A bug in the account reports module was causing warning messages to be ignored when processing custom engine reports. The system was always using empty warnings instead of the actual warnings provided. This fix ensures that warning information is properly passed through and displayed to users, improving the accuracy of report feedback.
Original PR description
For the custom engine report, _compute_formula_batch_with_engine_custom always uses None for the warnings in the function custom_engine_function, even if a good warnings argument is sent. Now it correctly use the warnings instead of None Forward-Port-Of: odoo/enterprise#60929
This update fixes an issue where uploaded PDF header and footer files were not being properly saved with their correct file names in the sales settings. The fix allows the header and footer file name fields to be editable, ensuring that when users upload new PDF files for quotes, the system correctly records and uses the updated file names.
Original PR description
Steps: - Install sale apps. - Upload a header file from settings with xyz.pdf for example. Issue: - Header/Footer file is not updated according to uploaded file name. Cause: - Header/Footer file name in setting is related and readonly is should not be readonly in order to update header file name. Fix: - Make settings header/footer file not readonly to set proper updated file names. task-3620555
This fix ensures that packaging information is now properly displayed on delivery slips for products tracked by lot or serial number when the "Display Lots & Serial Numbers on Delivery Slips" feature is enabled. The packaging quantity is also correctly rounded up to reflect the actual number of packages needed (for example, 2.3 packages becomes 3).
Original PR description
Issue ----- The packing is not displayed on the delivery slip when: - the product is tracked by lot/SN - the stock.move state = "Done" - "Display Lots & Serial Numbers on Delivery Slips" is activated According to https://github.com/odoo/odoo/commit/c07258c3f27790eea424cee745b2036a3ef0e8c2, packaging information should always be present. Fix ----- We add packaging information to the delivery slip. Also, packaging quantity needs to be rounded up, for example if we have 2.3 packagings, it will in reality be 3 packagings. opw-3820304
This fix corrects an issue where the wrong time off allocation was displayed when selecting a date in the Time off module. When employees had multiple allocations with different validity periods and selected a date in a later allocation, the system was incorrectly showing the first allocation instead. The fix ensures the correct allocation is displayed by properly preserving date information during the display calculation process.
Original PR description
**Steps to reproduce:** 1- Create an allocation with validity date (e.g. 01-01-2024 -> 30-06-2024) and another one starts after the first one (e.g. 01-07-2024 -> 31-12-2024) 2- Go to Time off module…
**Steps to reproduce:** 1- Create an allocation with validity date (e.g. 01-01-2024 -> 30-06-2024) and another one starts after the first one (e.g. 01-07-2024 -> 31-12-2024) 2- Go to Time off module and select a date in the second allocation's period 3- Click on the Time off type dropdown menu 4- You will see the first allocation displayed not the second one **Current behavior before PR:** The display name of some leaves gets computed in a wrong way. This is happening because after fetching the right allocation we compute the display name but this time we don't have the 'default_date_from' in context so since it became one of the fields that triggers '_compute_leaves' https://github.com/odoo/odoo/blob/17.0/addons/hr_holidays/models/hr_leave_type.py#L218:L219 we compute the leaves once again but the target_date will be none and it will get assigned with today's date in 'get_allocation_data' https://github.com/odoo/odoo/blob/17.0/addons/hr_holidays/models/hr_leave_type.py#L380:L381 **Desired behavior after PR is merged:** This has been solved by saving the date attribute in the context with another name as when computing the display_name we call sudo so clean_context() removes the 'default_' context keys. Now when it gets removed we are going to have the same value but with another name. opw-3797696
The currency exchange rates displayed in the currencies list view were showing inverted values. This fix corrects the display to show the proper "Unit per Company Currency" rate, matching what was shown before version 17.0 and ensuring consistency with the form view.
Original PR description
In the currencies list view, the current rate and inverse rate were swapped. Currency rates were inversed in the currencies list view. The list should display the rate "Unit per <company currency>" by default, and it is displaying the inverse. The currency rate was right before 17.0. task-3856386 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix resolves an issue where users couldn't add color dropdown controls to kanban cards through the Studio customization tool. The problem was that the system wasn't properly recognizing where the color picker was located in the card layout and wasn't applying color changes correctly. Now users can successfully add and use color dropdowns on kanban cards when customizing views in Studio.
Original PR description
## Problem Before this commit, adding a dropdown to a kanban view via `web_studio` didn't work. Steps: - Install `web_studio` - Install a module containing no dropdown on the kanban view (e.g.…
## Problem
Before this commit, adding a dropdown to a kanban view via `web_studio` didn't work.
Steps:
- Install `web_studio`
- Install a module containing no dropdown on the kanban view (e.g. `sale_management`)
- Modify the kanban view of this module on studio
- Click on the 3 small dots on the kanban-card and add the dropdown
- Confirm
- Exit studio
- Try changing the color of one of the kanban-cards via the newly added dropdown
- Traceback
## Explanation
Here's how adding a dropdown to the kanban view normally works in studio:
Python:
- Create a new `x_color` field in the model
- Add this new field to the view in question
- Add a dropdown containing `.oe_kanban_colorpicker` and a `data-field` containing `x_color`.
- Change the attributes of the first element in the kanban-card to add a color="x_color".
Javascript:
If the color is changed, this code is triggered
https://github.com/odoo/odoo/blob/0fcb34dd3ba3bbd7f422c627e27c96089b29b044/addons/web/static/src/views/kanban/kanban_record.js#L302-L306
which dynamically updates the `colorpicker` field with the new value via the value of arch `colorField`.
Except that in our case `colorField` is `color` and not `x_color`.
Then, as the `web_studio` python code adds a `color="x_color"` attribute, instead of `colorField` it's `cardColorField`.
https://github.com/odoo/odoo/blob/3c356a40f7d6da5aff8a8e7f6ebb9ea8cc9b3861/addons/web/static/src/views/kanban/kanban_record.js#L266-L269
This code is obsolete because it adds `oe_kanban_color_X` to `o_kanban_record ` instead of adding it to its first child `oe_kanban_card`.
So we have several problems:
- Use of `cardColorField` instead of `colorField`.
- Color style added to wrong HTML element
- KanbanArchParser searches for the colorpicker's `data-field` only in `kanban-box`, whereas it is often (including in studio) put in `kanban-menu`.
## Commits
### Commit 1: [[FIX] web: Use kanban-menu template in arch kanban_arch_parser](https://github.com/odoo/odoo/pull/160483/commits/bb0cf9ef09ac29233b99b64077c9b31bcd4a04a0)
This commit modifies the way kanban_arch_parser retrieves `colorField`.
Previously, the parser tried to retrieve only `colorField`
(the `data-field` attribute of `.oe_kanban_colorpicker`) from `kanban-box`.
Except that in most cases `.oe_kanban_colorpicker` is defined in
`kanban-menu` and not `kanban-box`.
for example:
https://github.com/odoo/odoo/blob/31107fb4cc9cf5dc2da21cbfef58dae722c73922/addons/crm/views/crm_lead_views.xml#L554-L559
https://github.com/odoo/odoo/blob/c6978c3fc4f828d970d45ebdaa4a35b44f3d09ce/addons/project/views/project_task_views.xml#L544-L550
https://github.com/odoo/odoo/blob/c6978c3fc4f828d970d45ebdaa4a35b44f3d09ce/addons/project_todo/views/project_task_views.xml#L28-L31
etc.
As a result, this code was always ignored and we always fallback on `||"color"`.
```js
const colorField = (colorEl && colorEl.getAttribute("data-field")) || "color";
```
Now `KanbanArchParser` checks both `kanban-box` and `kanban-menu` and
finally fallbacks to `color`.
### Commit 2: [Put kanban color classes in the right place](https://github.com/odoo/odoo/pull/160483/commits/73844cd42a389020bd4a7bd47ed48c4652fa7e4d)
After this commit, `colorField` is used instead of `cardColorField` to
handle color change from the dropdown of cards in the kanban view.
The value of `colorField` is observed in order to adapt the HTML classes
of `oe_kanban_card` (first `DIV` of `o_kanban_record`) by
adding/removing `oe_kanban_color_X` (where X is an index representing a color).
A commit has also been made in the enterprise section to remove unnecessary code from the `web_studio` controller, which before this pull request was used to add a color="x_color" attribute that we no longer use.
https://github.com/odoo/enterprise/pull/60072
opw-3823860
Forward-Port-Of: odoo/odoo#160483This update fixes issues with the SEPA Direct Debit payment method in Stripe and Buckaroo integrations. The system now correctly validates payment currencies based on what each payment method supports (for example, SEPA only works with EUR), and properly identifies payment methods using provider-specific codes instead of generic ones. These fixes ensure smoother payment processing for businesses using these payment methods.
Original PR description
**[FIX] payment(_stripe): adapt validation currency to payment method** When payment details are tokenized through a validation operation, the currency to use was usually (except overrides) chosen as…
**[FIX] payment(_stripe): adapt validation currency to payment method** When payment details are tokenized through a validation operation, the currency to use was usually (except overrides) chosen as that of the payment provider's company. This sometimes caused compatibility issues if the selected payment method did not support the company's main currency. For example, the SEPA Direct Debit payment method only supports the EUR currency. This commit allows passing a payment method when getting the validation currency so that only supported currencies can be returned. --- **[FIX] payment_(buckaroo, stripe): updated the PM based on provider codes** When processing a transaction, the payment method was searched based on the received code (e.g., 'sepa_debit') that was compared with the `payment` module's generic codes (e.g., 'sepa_direct_debit'). This commit ensures that we now compare with provider-specific codes for Buckaroo and Stripe. In practice, this mistake had little to no impact as most provider codes match the generic ones, and we fall back onto the payment method selected by the user if we can not find a more accurate one based on the code.
This update reverts a previous change to how the Sales Management module handles temporary records in sales order options. The revert restores the original behavior to fix an issue that was causing problems with order processing.
Original PR description
This PR reverts the commit https://github.com/odoo/odoo/commit/c6842f1 opw-3754297
This update converts inline templates containing text into standard templates across the web and website modules. This change enables proper translation of user-facing text strings that were previously not translatable. The fix ensures that all customer-visible content can be accurately translated into different languages.
Original PR description
Strings within inline templates are not translatable, so we convert these templates into standard templates so that they can be. Task-3761551 Forward-Port-Of: odoo/odoo#161986 Forward-Port-Of: odoo/odoo#160238
This fix corrects an issue where creating a new time off request from the calendar would default to the wrong date when users are in certain time zones (like America/Los_Angeles). The problem occurred because the system was incorrectly converting date values, causing the selected date to shift backward by a day. The fix ensures dates are properly handled regardless of the user's time zone.
Original PR description
Versions -------- - saas-16.3+ Steps ----- 1. Set timezone of User and browser to America/Los_Angeles; 2. go to Time Off; 3. click on calendar to create a new leave. Issue ----- Date defaults to the…
Versions
--------
- saas-16.3+
Steps
-----
1. Set timezone of User and browser to America/Los_Angeles;
2. go to Time Off;
3. click on calendar to create a new leave.
Issue
-----
Date defaults to the day before the selected date.
Cause
-----
Commit 0a0c6917b5e21e829e14ad271de6e2117e4a7126 added a TZ conversion in JS to add default start & end times for leaves. The issue is that it assumes the context values are always datetime strings, therefore always using `deserializeDateTime`, which does a timezone conversion from UTC to local time, which is incorrect when the context values are date strings.
For a UTC-7 zone like America/Los_Angeles, it deserializes a date string like `'2024-01-01'` to `'2023-12-12 17:00:00'` (7 hours before midnight). It then sets the start hour to 7, and serializes it back to UTC, adding 7 hours, resulting in `'2023-12-12 14:00:00'`. Instead, Jan 1, 7 AM in America/Los_Angeles should convert to `'2024-01-01 14:00:00'` UTC.
Solution
--------
Use `deserializeDate` instead of `deserializeDateTime` when the `default_date_{from,to}` in the context is a date rather than a datetime. This way, `'2024-01-01'` gets deserialized into `'2024-01-01 00:00:00'` local time. When this value gets used for the default hours, `'2024-01-01 07:00:00'` local time will get serialized to `'2024-01-01 14:00:00'` UTC as expected.
opw-3757712
Forward-Port-Of: odoo/odoo#161838This update fixes a bug where carousel image galleries were not navigating correctly when using right-to-left languages like Arabic. Previously, clicking the left arrow would show the wrong image. The fix also ensures that directional icons display properly in right-to-left mode on mobile devices. This improves the user experience for customers in regions that use right-to-left languages.
Original PR description
Given the changes in [1] and subsequently in [2], which in some way counteract the RTL adjustment, it is necessary to eliminate the rtlcss directive from the carousel CSS to ensure the correct…
Given the changes in [1] and subsequently in [2], which in some way counteract the RTL adjustment, it is necessary to eliminate the rtlcss directive from the carousel CSS to ensure the correct behavior. Steps to reproduce: - Enter in edit mode. - Drag and drop an image gallery and a carousel snippet. - Navigate to the theme tab. - Add an RTL language (Arabic, for instance). Bug : - The images slide in incorrectly during transitions. In RTL mode, when clicking on the left chevron, the next image should appear, not the previous one. If we have three slides numbered 1, 2, and 3 - In RTL mode: Clicking left should navigate from 1 to 2 to 3 and then back to 1. - In non-RTL mode: Clicking left should navigate from 1 to 3 to 2 and then back to 1. The directional Font Awesome icons (classes starting with `fa-` and ending with `-right` or `-left`) are not flipped in the mobile viewport as a result of [3]. Necessary adjustments have been implemented to prevent this behavior. Upon investigation, a more significant bug was discovered regarding the 'oi-...-[right/left]' icons. These icons were not flipped appropriately in the frontend when the webpage context was set to an RTL language. A pull request has been created and merged to address this issue [4]. More info on rtlcss [here] [1]: https://github.com/odoo/odoo/commit/ebb61753bf3d3dd8d3f53db088112b9e4beb813d [2]: https://github.com/odoo/odoo/commit/c48f57ea2538ad51e00ac27d58f8e191781444f3 [3]: https://github.com/odoo/odoo/commit/be375bb2a886edd002f042355455a71fcac4daf5 [4]: https://github.com/odoo/odoo/pull/157214 [here]: https://rtlcss.com/learn/usage-guide/value-directives/#tip opw-3747848 Forward-Port-Of: odoo/odoo#161770 Forward-Port-Of: odoo/odoo#154734
This fix removes an unnecessary permission requirement that was preventing non-accounting users (such as MRP managers) from creating and managing Bills of Materials. The system now properly handles cost distribution calculations without requiring full accounting module access, making the MRP module more accessible to its intended users.
Original PR description
Currently, recalculating `analytic_distribution` requires access to `account.analytic.distribution.model`. This breaks BoM creation for non-accounting users (e.g. MRP managers). This commit fixes the issue by using `sudo()._get_distribution`. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162107
This update fixes an issue where Odoo's email server was not properly sending client certificates during secure email connections. When using certificate-based authentication with SSL/TLS encryption, the client certificate wasn't being transmitted during the security handshake, causing connection failures. This fix ensures the certificate is properly sent, allowing secure email servers that require client certificate authentication to work correctly.
Original PR description
Start a SMTPS server with client certificate authentication. In Odoo configure an outgoing mail server with encryption="ssl/tls" and authentication="certicifate". Load a valid client certificate and…
Start a SMTPS server with client certificate authentication. In Odoo configure an outgoing mail server with encryption="ssl/tls" and authentication="certicifate". Load a valid client certificate and key to use with the SMTPS server then test the connection.
The connection fails because the client certificate wasn't sent during the TLS handshake.
If you're having trouble running a SMTPS server, I made a script here: https://gist.github.com/Julien00859/5090d1cff6c02197e5854aabb67bf5ac It uses aiosmtpd, a light pure python smtp server, install it with pip. You'll need to copy your snakeoil ssl key + cert inside your /tmp directory and to expose them to your current user:
# public cert
cp /etc/ssl/certs/ssl-cert-snakeoil.pem /tmp
# private key
sudo cp /etc/ssl/private/ssl-cert-snakeoil.key /tmp
sudo chmod 400 /tmp/ssl-cert-snakeoil.key
sudo chown $USER /tmp/ssl-cert-snakeoil.key
[task-3703209](https://www.odoo.com/web#id=3703209&cids=1&menu_id=4720&action=333&active_id=10888&model=project.task&view_type=form)
Forward-Port-Of: odoo/odoo#162259This fix resolves an issue where JavaScript files failed to load properly on certain Windows installations because the server was incorrectly identifying them as plain text files instead of JavaScript. The fix ensures JavaScript files are always recognized with the correct file type, preventing loading failures caused by misconfigured Windows system settings.
Original PR description
Previously, when the odoo server was running on some Windows installations, it was possible for javascript files loaded directly from the static folder of an addon to fail to run because the Content-Type header was set to text/plain instead of text/javascript. This is because the mimetypes module from the standard library honors the mimetypes from the OS, in the case of Windows it reads a key in the registry, which can be misconfigured to text/plain for .js files. This commit forces the mimetype of .js files to text/javascript to solve this issue. Forward-Port-Of: odoo/odoo#162277 Forward-Port-Of: odoo/odoo#162210
This fix resolves an issue where products with multiple attributes were displaying each attribute multiple times in the order line. Now each attribute displays only once, providing a cleaner and more accurate order view for staff and customers.
Original PR description
Prior to this commit, if a product had multiple attributes, each attribute would be displayed multiple times in the order line. This commit resolves this issue by ensuring that each attribute line is displayed only once.  opw-3849701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an inconsistency in how translated text attributes are exported from templates. Previously, some attributes like "data-tooltip" were missing from exports while others like "label" were included. The fix ensures all translated attributes are handled consistently across the system, improving the reliability of text translations in user interfaces.
Original PR description
Prior to this commit, some attributes such as "data-tooltip" were not exported in /static/src/ templates, while "label" was only exported in them. This commit adjusts the code to use the same list of translated attributes everywhere, fixing the problem and making it less likely to happen again. Task-3872895 Forward-Port-Of: odoo/odoo#162079
This update removes deprecated Peppol electronic address formats that are no longer compliant with current Peppol Authority requirements, particularly for Finnish users. As of April 1, 2024, only the ISO 6523 OVT-format is allowed for Finnish Peppol addresses. This change ensures the system remains compliant with official Peppol standards and prevents users from using outdated address formats.
Original PR description
As of April 1, 2024, the migration period set by the Peppol Authority of Finland for the requirement specified in the Peppol Authority Specific Requirements document has ended. According to this…
As of April 1, 2024, the migration period set by the Peppol Authority of Finland for the requirement specified in the Peppol Authority Specific Requirements document has ended. According to this requirement, Finnish end users’ Peppol addresses (participant identifiers) must adhere to the ISO 6523 code list 0216 OVT-format. Other address types are not allowed for Finnish end users. See also: [Finland Peppol Authority requirements](https://peppol.org/wp-content/uploads/2023/08/Finland-Peppol-Authority-Specific-Requirements.pdf) [Finland Peppol Authority website](https://www.valtiokonttori.fi/en/service/the-state-treasury-is-the-finnish-peppol-authority/#for-service-providers_authority-specific-requirements-in-finland) It turned out that we have a few others that are no longer used on Peppol. We will remove those in master as well. See: [Peppol codelists](https://docs.peppol.eu/edelivery/codelists/) no task, reported by the Finnish Peppol Authoirty Team --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162188 Forward-Port-Of: odoo/odoo#161898
This fix resolves a problem where expenses couldn't be properly linked to sales orders due to rounding errors in price calculations. When resetting an expense report to draft, the related sales order quantities weren't being reset to zero as expected. The fix improves the reliability of matching expenses to sales orders by using rounded price values consistently.
Original PR description
No rounding in the query used to map sale.order.line to the hr.expense, models leads to some records not being able to be linked together, because of floating point errors. Adding a rounding to the…
No rounding in the query used to map sale.order.line to the hr.expense, models leads to some records not being able to be linked together, because of floating point errors. Adding a rounding to the key price_unit, and not filtering on price_unit. Then, using the rounded string versions of the price_unit in the comparisons adds a more reliable approach. task-3705179 Step to reproduce: - Change the **[TRANS & ACC] ...** product, setting a cusomer AND a vendor tax of 15% - Create an expense using that product with a total amount of 316 - Report -> post the expense (report) - Reset to draft the expense report - **The SOL quantities aren't reset to 0** Reason: A price_unit used as a float, even rounded can have a floating point error that wasn't taken into consideration so 14.00001 != 14.00 in the WHERE clause of the query would search for. Hence not matching properly --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162175 Forward-Port-Of: odoo/odoo#154002
This fix ensures that the IoT Windows service properly restarts after all components are installed, allowing devices to be detected correctly. Previously, the service was not restarting at the end of installation, which prevented connected devices from being recognized by the system.
Original PR description
Currently restarts of the odoo server do not happen at the end of the installation of all components. The devices are therefore not detected. With this commit we restart the server when all the components have been installed 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
This update brings the spreadsheet application to the latest version with several important bug fixes. Users will experience improved performance and stability when working with spreadsheets, including fixes for filter menus, frozen rows navigation, link editing, and dashboard interactions. These changes ensure the spreadsheet tool works more reliably across various common tasks.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/9f3317a18 [REL] 17.0.19 https://github.com/odoo/o-spreadsheet/commit/2be837072 [FIX] dashboard: limit clickable cell recomputation https://github.com/odoo/o-spreadsheet/commit/309c33b1d [FIX] data menu: Auto-select adjacent cells on filter menu Task: 3839869 https://github.com/odoo/o-spreadsheet/commit/0e76c8e2a [FIX] filter: recompute header position Task: 3858512 https://github.com/odoo/o-spreadsheet/commit/4af08d9a7 [FIX] FigureContainer: no selection of a figure content Task: 3752290 https://github.com/odoo/o-spreadsheet/commit/d93b6bcfe [FIX] Composer: pressing enter in the link editor https://github.com/odoo/o-spreadsheet/commit/da28a4b94 [FIX] sheetview: pageUp/Down with frozen rows Task: 3847414