Thursday, May 21, 2026
39 changes · saas-19.3
New functionality added to Odoo
This update introduces a new module, 'obox,' designed to connect Odoo to hardware devices similar to the existing Odoo FDM system. The initial step allows the system to recognize and record the IP address and available services of an Obox device, paving the way for future device interaction.
Original PR description
The Obox (same platform as the Odoo FDM for Belgium) will allow interfacing with hardware devices, and is intended to replace the functionality of the IoT box. This commit only adds the ability to pair an Obox to the database, and see its IP and available services. Enterprise https://github.com/odoo/enterprise/pull/110834 Forward-Port-Of: odoo/odoo#254208
This update introduces a new module, 'obox,' designed to connect with Obox devices – similar to the Odoo FDM for Belgium. The initial phase focuses on allowing users to register and view basic information about their Obox, including its IP address and available services, laying the groundwork for future device interaction.
Original PR description
The Obox (same platform as the Odoo FDM for Belgium) will allow interfacing with hardware devices, and is intended to replace the functionality of the IoT box. This commit only adds the ability to pair an Obox to the database, and see its IP and available services. Community: https://github.com/odoo/odoo/pull/254208 Forward-Port-Of: odoo/enterprise#110834
Enhancements to existing features
This update simplifies the calculations for 'Retained Earnings' and 'Result for the Year' on the French Balance Sheet report. This change ensures the financial reporting is more accurate and reliable for French-speaking businesses using Odoo Enterprise. It's a routine improvement to maintain the integrity of financial data.
Original PR description
Simplify the formulas of 'Retained earnings' and 'Result for the year' in the french Balance Sheet. task-6087994 Forward-Port-Of: odoo/enterprise#113988 Forward-Port-Of: odoo/enterprise#112731
Resolved issues and error corrections
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052Code cleanup and technical improvements
This update streamlines the process of checking user access rights within review workflows. By creating helper functions, the system now more efficiently determines if a user has the necessary permissions to modify records based on their review state (supervised, reviewed, etc.), improving reliability and reducing code duplication.
Original PR description
Introduce two small helpers on `AccountMove`: * `_get_review_state_access_groups()` – returns the `(is_user_able_to_review, is_user_able_to_supervise)` booleans so the two `has_group` calls are not repeated across methods. * `_check_review_state_access(review_state)` – raises an `AccessError` with a state-specific message when the current user lacks the required role to modify a record in the given `review_state`: - `'supervised'` → requires `account.group_account_manager` - `'reviewed'` / `'no_review'` /falsy → requires `account.group_account_user` - `'todo'`, `'anomaly'` → unrestricted opw-6128792 Forward-Port-Of: odoo/odoo#262531
This update adjusts the categorization of certain French accounting accounts (110000, 119000, 120000, 129000) to better align with reporting requirements for 'Current Year Earnings'. This change ensures accurate financial reporting in France and improves compliance with local accounting standards.
Original PR description
Change the type of french accounts 110000, 119000, 120000, 129000 for 'Current Year Earnings'. task-6087994 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259374 Forward-Port-Of: odoo/odoo#257094
This update enables users to reset statement lines directly within the Kanban view, mirroring functionality from previous versions. This prevents the need to manually delete multiple reconciliations from a single line, streamlining the accounting process and improving efficiency.
Original PR description
This commit adds the possibility to reset a statement line in kanban view like in the previous versions. Function is still there but no UI button was tied to it. This is a problem if you have many reconciliations on one statement line, we do not want to delete them one by one. opw-6015838 Forward-Port-Of: odoo/enterprise#111107
This update simplifies email notifications in Odoo by making the subject field optional when sending emails from comment mode. Previously, a subject was always included, but this change streamlines the process for simpler notifications. This improves the user experience and reduces unnecessary complexity.
Original PR description
In comment mode we use the regular message post flow rather than the optimized batch email creation of the composer. This notably means a fallback subject will normally be set. The subject is made optional in that context, and only mandatory in batch mode where the emails would otherwise truly not have a subject. task-5944635 Forward-Port-Of: odoo/odoo#261918
This update fixes an error that prevented users from creating new helpdesk teams. The issue occurred when the system attempted to use a default email template after clearing all helpdesk stages. The fix ensures the template exists before attempting to use it, preventing a 'NoneType' error.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update resolves an issue where order synchronization with Lazada was failing due to missing package information. The fix ensures that the system gracefully skips package synchronization when package data is incomplete, preventing errors and maintaining reliable order updates. This improves the stability of the Lazada integration.
Original PR description
orders can omit package data in the API payload if the package id doesn't match. When a picking still had a package_extern_id, filtering order_items by that id produced an empty list, and max() on the resulting timestamps raised ValueError and blocked order sync. Return early when no matching package lines exist so sync can continue. taskId - 6195507 Forward-Port-Of: odoo/enterprise#117194
This update fixes a minor issue in the demo order system for point-of-sale and restaurant POS. Previously, demo orders used a default '/' reference, which is now replaced with sequential order numbers for clarity. This ensures demo orders are more easily identifiable and consistent.
Original PR description
Before this commit: =================== - For demo orders, no proper Order Reference is displayed, by default, it is set to '/'. After this commit: =================== - All default '/' values are replaced with a sequential Order Reference, except for orders in the 'new' state . Task-6004716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264971 Forward-Port-Of: odoo/odoo#253272
This update optimizes how Odoo records information from bank statements, making the process faster and more efficient. By using a batch logging function, the system now handles transactions more quickly, reducing potential delays and improving overall performance. This change was driven by a performance optimization.
Original PR description
There is no need for a full message post to get the details of the transaction. We can use the batched function instead `_message_log_batch`. Forward-Port-Of: odoo/enterprise#117923 Forward-Port-Of: odoo/enterprise#117742
This update resolves a crash issue that occurred when opening dropdown menus on certain pages (like the `/r` page). The fix ensures the menu is fully loaded before attempting to observe it, preventing a technical error that previously caused the dropdown to fail. This improves the overall stability and usability of the system.
Original PR description
Steps to reproduce: - Go to the `/r` page. - Click a dropdown. => traceback Before this commit, `Dropdown.onOpened()` always observed `menuRef.el` as soon as the popover reported it was open. In frontend pages such as `/r`, the menu can still be rendering at that moment. The menu appears just after, but `MutationObserver.observe()` already received `undefined` and raised a `TypeError`. After this commit, `Dropdown.onOpened()` only starts the observer when the menu element exists. The dropdown can finish opening normally, so the menu is shown without traceback. Introduced by [1]. [1]: 7aed5b141f06 Forward-Port-Of: odoo/odoo#265224
This update corrects a formatting issue in the account view, ensuring descriptions are displayed in a dedicated section. Previously, the descriptions were incorrectly adjusted, leading to a less organized view. This change improves the clarity and usability of account information.
Original PR description
Description in account view was incorrectly adjusted in https://github.com/odoo/odoo/commit/d940f3719c09bf1cc21de20f72968e1a34a8a9ac Fixing it to be a dedicated section. task-5376190 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a crash on the payroll dashboard when users attempted to hide in-memory payrun warnings. The issue stemmed from incorrect data being passed to database functions, leading to an error. The fix ensures warnings are handled correctly, preventing the crash and improving dashboard stability.
Original PR description
Closing date payrun warnings are created as in-memory records (.new()), giving them a NewId instead of a real integer DB id. When the user clicked the hide button, this NewId string was passed to action_snooze/action_archive, causing a psycopg2.errors.InvalidTextRepresentation SQL error. Fix by sending False as the id for in-memory warnings in get_payroll_dashboard_warning_cards, and suppressing the hide button on the dashboard when warning.id is falsy. task-6205849
A previous error prevented users from searching for links within email click tracking. This update resolves the issue by correcting how the system handles link searches, ensuring accurate results when searching by short URL. This improves the reliability of our email marketing analytics.
Original PR description
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing…
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing app 2. Create a new mailing (or you can use an existing one that has some clicks) and send it 3. Make a click in the email from the recipient's side 4. Open the link tracker `click` related to that mailing (select the mailing → `Link Trackers` stat button → click on a link → `Clicks` stat button) 5. Make a search based on the Link (short_url) field Expected Behavior ------ Return the list of links that matches the entered search query. Current Behavior ------ Odoo Server Error. Cause & Solution ------ The cause of this error is that the `shor_url` field is a computed, non-stored, field, and hence, we cannot directly make a search on it. So, either we make the `short_url` a stored field, which is not so efficient, or we create our own custom `_search_..` method. Task-6131693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265293 Forward-Port-Of: odoo/odoo#260146
This update resolves an issue where planning tour tests were failing due to a recent change removing a template saving step. The fix also addresses a dependency on the 'planning_field_service' app, which wasn't correctly integrated into the sale planning tour, causing broader test failures. This ensures the planning tours run reliably.
Original PR description
Since fc7b3c2, the "save as template" step of the planning tour was removed, making the test checking for templates in project_forcast fail. The commit also adds a condition checking if planning_field_service is installed before running the planning_test_tour but didn't add it for the sale_planning_test_tour, which extends the planning_test_tour and fails as well if the 3 apps are installed. opw-6176441 runbot-230670 Forward-Port-Of: odoo/enterprise#117882
This update fixes an issue where URLs with mixed or uppercase characters weren't automatically converted to clickable links within the HTML editor. The fix ensures that all URLs, including single-character domains like 'x.com', are correctly recognized and linked. This improves the user experience and allows for more reliable link creation.
Original PR description
### Description of the issue/feature this PR addresses: - URL_REGEX was constructed with the "i" flag, but passing a RegExp object to new RegExp(regex, "g") silently drops the original flags, leaving only "g". This caused uppercase (ODOO.COM) and mixed-case (Odoo.Com) URLs to not be converted to links when pressing space. ### Desired behavior after PR is merged: - URL_REGEX.source with explicit "gi" flags to preserve case-insensitive matching in `prepareConvertToLink`. - Allow automatic URL detection for single-character domains such as `x.com`, `t.co`, and `a.io` by relaxing the minimum domain label length in the URL regex from 2 to 1 characters. task-6199269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265409 Forward-Port-Of: odoo/odoo#263255
This update ensures that the bottom sheet appears consistently on all touch devices, including larger tablets, instead of a less desirable dropdown menu. Previously, the bottom sheet was only displayed on small touch screens. This change provides a more reliable and user-friendly experience for users accessing Odoo through touch interfaces.
Original PR description
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#264973 Forward-Port-Of: odoo/odoo#264705
This update resolves an issue where the Send & Print wizard would fail when proforma PDFs weren't automatically created for invoices. The change ensures the system handles cases where these PDFs aren't generated gracefully, preventing errors and improving the reliability of invoice sending. This primarily affects scenarios involving specific localization modules.
Original PR description
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict. The…
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict.
The `proforma_pdf_attachment` key is only populated in `_generate_invoice_fallback_documents`, which is called exclusively when `allow_fallback_pdf=True`. However, the code at the return step also triggers when `allow_fallback_pdf=False` (normal wizard path), where the key is never set.
Replace the bare dict access `move_data['proforma_pdf_attachment']` with `move_data.get('proforma_pdf_attachment', self.env['ir.attachment'])` so the flow returns an empty attachment recordset instead of raising a `KeyError` when no fallback proforma PDF was generated.
Fixes: KeyError: 'proforma_pdf_attachment' in account.move.send.wizard Steps to reproduce:
1. Use the Send & Print wizard on a posted invoice
2. Trigger a condition where _get_invoice_extra_attachments returns an empty recordset (e.g. via l10n_vn_edi_viettel with sinvoice files not yet fetched) despite no error being raised
Forward-Port-Of: odoo/odoo#264564This update fixes a regression where the color picker in Odoo was not recognizing colors defined using the `color()` function. Following a recent website update, this change restores full functionality, ensuring users can correctly set background colors within the HTML Builder and Editor. This resolves an issue impacting visual customization.
Original PR description
Following the website refactoring (commit 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2) `BuilderColorPicker` no longer recognizes colors defined using `color()`, introducing a regression. This commit restores support for `color()` values. Steps to reproduce: 1. Add the snippet `s_text_image`. 2. Manually, in the DOM, set the style of the first column to "background-color: color(srgb 0.4 0.2 0.8 / 0.4);". 3. In edit mode, click on the column to observe that the colorpicker does not recognize the background color. The same behavior can also be observed in the custom tab. Task: [5453922](https://www.odoo.com/odoo/project/974/tasks/5453922) Forward-Port-Of: odoo/odoo#265443 Forward-Port-Of: odoo/odoo#255331
This update adjusts the styling of numeric values in account reports to align with the column formatting, creating a more consistent and visually appealing presentation. The change ensures that numeric data within reports is displayed with appropriate padding, enhancing readability and user experience. No new functionality was added.
Original PR description
the following commit slightly modified the styling of reports header by alligning the text on the right for numeric values to match the styling of the values in the column. However, the forward port in 19.3 didn't notice that a small padding was now present in the version. https://github.com/odoo/enterprise/commit/196aa04b301499fdb2ea0769f7f07ff504a46b2b In addition, no class is needed for budget columns since no names are provided. **BEFORE** <img width="776" height="252" alt="image" src="https://github.com/user-attachments/assets/02c9dbb2-ab68-4b81-abb4-08db7f663794" /> **AFTER** <img width="518" height="276" alt="image" src="https://github.com/user-attachments/assets/3fb86584-6699-4b49-b2b9-87685bad0c16" />
This update resolves an issue where long URLs in the CopyClipboardURLField widget would overlap with the associated copy icon, creating a confusing user experience. The fix applies text truncation and adjusts spacing to ensure the full URL is visible while maintaining a clean and functional design.
Original PR description
Currently, when using the CopyClipboardURLField widget, long URL text overflows and overlaps with the adjacent copy/link icon. This commit fixes the issue by applying standard text truncation (`text-truncate`) to the `.o_form_uri` element and restricting its width to account for the adjacent icon. We also take advantage of unused white space to display the most of the link text before the ellipsis. task~6159185
This update resolves an issue where the Odoo tour feature was repeatedly rendering, causing performance slowdowns. The fix prevents an infinite loop by carefully managing state updates, ensuring the tour pointer renders efficiently. This results in a smoother and faster user experience.
Original PR description
Before this commit, the tour pointer entered an infinite loop of rendering because one change in its state triggered DOM mutations on which the tour listen to update the pointer, triggering the rendering of the pointer. This was because of a reactive's state being update too early. After this commit, the number of renderings is limited to a reasonable minimum. 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#265498
This update removes clickable elements from account and unit fields on invoices. This change simplifies the invoice view, making it easier for users to read and understand, and improving the overall user experience. It's a small but important enhancement for usability.
Original PR description
This commit changes the account id and unit fields to be unclickable on the invoice lines to avoid having many clickable items on the invoice for better UX. task-6218115 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where French tax reports (2033 A and B) were incorrectly available to all companies in a multi-company setup. Previously, the reports were tied to the French localization, leading to potential reporting errors. This change ensures the correct reports are generated for French businesses.
Original PR description
When installing the French localisation in a multi-company, multi-coa environment, the 2033 A report was available for every company, instead of just the French ones.
This update ensures that PDF attachments sent through the Odoo portal are now correctly displayed in the related chatters. Previously, previews were missing due to a technical issue preventing the necessary data from being sent. This improvement enhances the user experience by allowing users to quickly view attached documents within the portal.
Original PR description
Before this commit, previews of pdf attachments (introduced in [1]) would not be displayed in portal chatters. This happens due to `_portal_message_format` not returning the data necessary to display pdf previews (i.e. `has_thumbnail` and `thumbnail_access_token`). This commit fixes the issue by returning said data. [1] https://github.com/odoo/odoo/pull/221006 task-6204747 Forward-Port-Of: odoo/odoo#263806 Forward-Port-Of: odoo/odoo#263481
This update resolves an issue preventing normal users from canceling approval requests they created. The fix utilizes 'sudo' to allow creators to successfully cancel their own requests, streamlining the approval process and improving user experience. This change ensures consistent functionality for all users.
Original PR description
Issue: - A user who created an approval request could cancel it. But a rights error appeared during the cancellation. Steps to Reproduce: - Create an approval being a normal user. - Try to cancel the approval. - A ValidationError is raised eventhough the approvals can be cancelled by creator of it. Fix: - Changed the cancel action to use the sudo for the user who created the task and can cancel it Impact: - Users can cancel their own approval requests without errors. Task: 6123104 Forward-Port-Of: odoo/enterprise#114189
This update corrects a visual issue where the project sharing notebook was using dark themes, causing conflicts with the standard light mode interface. The team removed a specific style file to ensure consistent and correct display of the notebook within the Odoo Enterprise application.
Original PR description
The project sharing notebook previously used dark-themed styles, which conflicted with the light mode .Removing the notebook.dark.scss file from the imported files in the manifest. task-4922564 Forward-Port-Of: odoo/enterprise#99161
This update allows Invoicing Administrators to delete or modify reconciled lines in the accounting system, resolving a previous restriction. The change ensures consistent access control based on the line's review status, aligning with existing accounting rules and improving administrative flexibility. This update addresses a technical issue related to privilege checks.
Original PR description
Deleting or editing a reconciled line raised "Validated entries can only be changed by your accountant." for Invoicing Administrators because the check only tested `group_account_user`, which is not granted by the Invoicing privilege chain. Delegate to `AccountMove._check_review_state_access()` to apply the same rules as `account.move`: - `'supervised'` → requires `group_account_manager` - `'reviewed'` → requires `group_account_user` or `group_account_manager` - `'todo'` / `'anomaly'` → no restriction opw-6128792 Forward-Port-Of: odoo/enterprise#114833
This update fixes a display issue in Odoo's list views, ensuring group values now correctly reflect the formatting options of the associated field widgets. The fix resolves a discrepancy between the default formatter and widget behavior, resulting in consistent and accurate group values displayed in lists.
Original PR description
Before this commit, the values of groups in list view didn't get the options of the widget. Now, the groups extract the options of the column. The fact that the groups use the formatter of the widget now, show that there was an issue between the widget percentage and his formatter. The formatter, by default, show the trailing zero, but the widget, by default, doesn't. So, formatter has been fixed to be like the widget behavior. TASK-6226377 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265209
This update resolves a problem where category snippets on the website were displaying blank images. The change in how image data is stored within Odoo caused a mismatch, rendering the images unusable. The fix restores the original image URL format to ensure correct display.
Original PR description
Scenario: - install odoo and website_sale with --without-demo=True - go to website and drop a category snippet Result: the images appear dead Cause: the sample image_512 of dynamic category and product snippet were just containing the image URL. But with 41fe2ebdb9cc37341362d7af829c087a5f72f9f1 (march 2026) change of binary fields, they were changed to contain the file binary instead which are not valid URL (without data:image/* prefix). Fix: save the image as URL string as it was the case before. Note: issue found when testing 7f87bbaf16e6093271e767019b3322f1e87580f1 for opw-6118004.
This update fixes a bug that prevented users from validating multiple draft receipts with zero quantity. The issue stemmed from an error in the validation process that assumed a single picking. The fix ensures all picking IDs are passed to the wizard, allowing for successful validation regardless of the number of zero-quantity receipts.
Original PR description
## Steps to Reproduce: - install stock module. - Create 2 draft receipts with 0 quantity of the produce. - From the list view, select both receipts. - Gear icon > click on "Validate". ## Error: `ValueError - Expected singleton: stock.picking(7, 8)` ## Cause: The zero demand confirmation wizard initialized with `default_picking_ids`, which assumes self is a singleton. However, during batch validation, self can contain multiple pickings, causing the singleton error. ## Fix: This commit passes all picking IDs to the wizard instead of a single ID. sentry-7493958052
This update resolves an issue preventing users from adding extra images to product pages within the AI website builder. The fix corrects a technical error related to how image loading was handled, ensuring users can now successfully upload and manage additional media assets. This enhancement improves the visual presentation of products.
Original PR description
Steps to reproduce: =================== 1. Install ai_website_sale 2. Go to a product page and enter edit mode 3. In the right panel => Images => click "Add More" (Extra Media) 4. Select a PNG or JPG image and click Add => TypeError: loadPromiseResolveFunction is not a function Cause: ====== The `ai_website_sale` patch for `ProductAddExtraImageAction.getMediaDialogProps` destructures the argument with key `loadResolveFunction` (renamed to `loadPromiseResolveFunction` locally), but the caller in `load()` passes `loadPromiseResolveFunction` as the key. The key mismatch means the local variable is always `undefined`, and the `save` closure in the parent's `getMediaDialogProps` closes over `undefined` instead of the Promise's `resolve` function. Fix: ==== align the parameter key. It's a backport of this commit https://github.com/odoo/enterprise/commit/e5b89df328601af881af115c6083a648af0cc1a1 opw-6215476
This update fixes a potential issue where the website incorrectly displayed unavailable unit of measure (UOM) information for products. This change ensures that users receive accurate UOM details, preventing confusion and improving the overall sales experience. The fix was implemented as part of the ongoing maintenance and enhancement of our website sales functionality.
Original PR description
In some case, the requested uom might not be available (anymore) depending on the product latest changes. Followup on 4ac31e3545f009d0f96462f6a9098d5163ad521b --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265231
This update fixes an issue where newly created projects weren't automatically inheriting the stage selected in their project templates. The fix ensures that projects created from templates now correctly utilize the specified stage, streamlining project setup and improving consistency. This prevents manual stage adjustments after project creation.
Original PR description
Steps to reproduce: - 1. Enable "Project Stages" in Project settings. 2. Create a project template and move it to a stage other than the first one (e.g., "Stage 2"). 3. Create a project from this template (manually or via a Sales Order). Issue: - The newly created project is always placed in the first stage instead of inheriting the stage defined in the template. Cause: - The `stage_id` field on the `project.project` model is defined with `copy=False` When a project is created from a template, this field is excluded from the copied values, causing the new project to fall back to the default first stage. Fix: - Override `copy_data` to explicitly include `stage_id` from the source project template. task-6019852 Forward-Port-Of: odoo/odoo#265429 Forward-Port-Of: odoo/odoo#253864
This update ensures that canteen costs are accurately calculated for monthly payrolls, even when an employee has multiple workdays with the same canteen code on a single payslip. Previously, the system didn't account for this common scenario, leading to potential inaccuracies in employee compensation. This fix guarantees correct canteen expense reporting.
Original PR description
Before this commit, canteen costs for the monthly pay did not take into account that multiple worked day lines with the same code can be present on the same payslip. no related task
This update fixes an issue where multiple attachments to invoices (like timesheets) sometimes used the same filename, leading to attachment confusion. The change ensures that additional reports use unique filenames, preventing duplicate attachments and improving email reliability. This resolves a previous bug reported in related tickets.
Original PR description
Problem: When adding additional dynamic reports to the “Invoice: Send by Email” template, reports without a configured `print_report_name` incorrectly use the invoice filename. This is an issue because multiple attachments can have the same exact filename. Example from related ticket: the user attached timesheets to their template and both the invoice PDF and timesheet attachment used the same filename. Expected: The additional report should use its own fallback filename (ex: `timesheets_INV_XXX.pdf`) or its configured `print_report_name`. Actual: The additional report uses the invoice filename instead. To fix this, reports without `print_report_name` now fallback to: `<report name>_<invoice name>.pdf` as done in v18.0 Related Ticket: 6207518 and 6175376 Forward-Port-Of: odoo/odoo#264841
This update resolves an issue where UBL invoices were failing to import due to extra spaces in the 'EndpointID' field. The change automatically removes these spaces, ensuring invoices are correctly processed. This improves the reliability of our UBL invoice import functionality.
Original PR description
**PROBLEM** When importing a ubl that, for some reason, have trailing space on the text of the EndpointID node, we refuse it. This PR strips the trailing spaces on the import. **STEP TO REPRODUCE** 1. Import a ubl as a bill, with a trailing space in the EndpointID of the other party. 2. Notice the import fail, with the error: The Peppol endpoint (50238597645 ) is not valid. It should contain only letters and digit. opw-6227395 Forward-Port-Of: odoo/odoo#265266