Thursday, December 18, 2025
56 changes · 19.0
New functionality added to Odoo
This update introduces new testing to ensure accurate calculation of maternity leave payments in the Belgian HR payroll module. The addition of PFA (Pay For All) test cases improves the reliability and compliance of the system when processing maternity leave benefits. This ensures accurate payroll reporting for employees on maternity leave.
Enhancements to existing features
The security policy now lists Odoo 19.0 as a supported version. This helps customers and partners understand that the latest release is covered by Odoo's security support process.
Original PR description
Adding version 19.0 in the supported versions of the SECURITY.md file.
The Malaysian e-invoicing screens now show MyInvois information more clearly on partner records. The MyInvois tab is also hidden when it is not relevant, reducing clutter on journal entries outside sales and purchases.
Resolved issues and error corrections
This update fixes inconsistent live chat test results caused by demo data changing user permissions. It removes an unintended demo-data permission link so live chat behavior stays predictable across test and demo environments.
Original PR description
The `test_channel_get_livechat_visitor_info` tests what is sent alongside the created live chat when calling `get_session`. When the route is called with an authentified user, it returns whether the user is a live chat manager. This information changes when demo data is installed (live chat manager is added as an implied id of the user group). As a result, this information cannot be hardcoded. The demo data shouldn't add implied ids to the user group. This commit removes it. fixes runbot-234138,234697,234080
Original PR description
This commit: - Fixes alignment of the `MYINVOIS INFORMATION` section on the partner form. - Hides the `MyInvois` tab on journal entries where journal type is neither `sale` nor `purchase`. task-5356808 Forward-Port-Of: odoo/odoo#240333 Forward-Port-Of: odoo/odoo#239837
A new automated test checks that the connection between a purchase order and its related repair order remains available after the purchase order is confirmed. This helps prevent regressions that could make it harder for users to navigate between purchasing and repair workflows.
Original PR description
Add a test to verify that the smart link PO <-> RO does not break after the PO is confirmed. opw-5121816
This update enhances the delivery of Guatemalan electronic invoices to customers by automatically attaching the XML file alongside the PDF. Previously, only the PDF was sent, but now customers receive both files directly in their email, improving transparency and convenience. The XML file naming convention has also been standardized.
Original PR description
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and…
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and sent to the SAT through Infile, is not attached to that email. Even though the SAT and Infile deliver the XML to the customer, it is more convenient and transparent if Odoo includes it directly in the outgoing invoice template email, so the customer receives both files in one place. Before this commit:- - Only PDF version is attached by default in customer email for e-invoices. - Name of edi document is prefixed with `Demo` if company is in demo environment (check parent company's environment in case of child company) (e.g. DEMO_certificate_INV_2025_00001.xml) and prefixed with `SAT` if company is in testing or production environment(e.g. SAT_certificate_INV_2025_00001.xml). After this commit:- - XML version is also attached by default along with PDF in customer email for e-invoices. - Name of edi document is always prefixed with `SAT`. task-5224521 Forward-Port-Of: odoo/enterprise#98978
This fix corrects the spacing of toggle list content when used inside banners, so text appears properly aligned. It also improves right-to-left behavior for toggle blocks, ensuring placeholders and newly created items follow the selected direction.
Original PR description
**Steps to reproduce:** - Create a banner. - Create a toggle list inside the banner. - Notice that the content inside the toggle list is not properly aligned. **Description of the issue:** - This happens because a margin-bottom is applied to all last `o-paragraph` elements inside the `o_editor_banner class`. Since the toggle list also contains `o-paragraph` elements that are the last child within it, the margin-bottom style is incorrectly applied to those as well. **Solution:** - Apply the margin-bottom only to the last direct child of `.o_editor_banner_content`. task-5213985 Forward-Port-Of: odoo/odoo#237929 Forward-Port-Of: odoo/odoo#233709
Fixes an issue where website editor buttons could vanish when users edited their label after applying an animation. This keeps animated buttons editable and prevents accidental content loss during page design.
Original PR description
Problem: When adding an animation to a button and then trying to edit its label, the button disappears. Cause: Because of the animation effect, while editing, the button is in its initial `invisible` animation state. In that state, `innerText` always returns an empty string because it checks only the visible content of the element. Solution: Use `textContent` instead, which does not depend on element visibility. Steps to reproduce: - Open Website. - Drop any text snippet. - Add a button. - Add an animation to the button. - Edit the button label. - The button disappears. opw-5391115 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239065
This update fixes an unstable automated test around websocket reconnection after a user logs out. It helps keep the development and release validation process reliable without changing the user experience.
Original PR description
Before this commit, the `websocket disconnects when user logs out` was sometimes failing. This test ensures that the websocket reconnects when the user logs out. When the environment is initially…
Before this commit, the `websocket disconnects when user logs out` was sometimes failing. This test ensures that the websocket reconnects when the user logs out. When the environment is initially created, a lot of places call the `bus_service@start` method. The worker starts the websocket when receiving the first event, and discard the others. However, in this case, the call to `_start` can happen before the closing handshake is completed. As a result, the websocket is still in closing mode and the handshake is aborted. Since the disconnection wasn't clean, the `reconnect` event is triggered instead of the `connect` one. This is not a big deal and shouldn't impact the test. What matters is that a new connection is established. This commit fixes the issue by checking that a reconnection is done, either via the `connect` or the `reconnect` event. fixes runbot-234056 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#240247
Invoice PDFs now keep product names and descriptions on separate lines when sales use quotation templates. This prevents cramped or confusing invoice descriptions and keeps invoice formatting consistent with regular sale orders.
Original PR description
### Issue: In this issue, when a quotation template is used in sale order, the end line is missing between name and description in the invoice pdf. #### Steps to reproduce: 1- Install a db with sale…
### Issue: In this issue, when a quotation template is used in sale order, the end line is missing between name and description in the invoice pdf. #### Steps to reproduce: 1- Install a db with sale and invoicing installed 2- Create a quotation template, and add a description in the line. 3- Create a quotation with the created template. 4- Confirm the order and create an invoice for the sale order. 5- Print the pdf, as seen the name and description are shown in the same line, while if the sale order was created without a template, we would have seen the description from product in the next line. `_get_journal_items_full_name` is used to enforce the product name in the description. However, in cases where product name doesn't exist in the description, e.g. our case here, the name and description will be shown in the same line in the invoice pdf. This can be fixed by adding a new line between the name and the description. read: #235122 opw-5130171 Forward-Port-Of: odoo/odoo#240177 Forward-Port-Of: odoo/odoo#237110
The homeworking calendar month view now orders events without a work location by their start time instead of alphabetically. This keeps the calendar easier to read and ensures users see events in the expected chronological order.
Original PR description
Purpose ======= Fix the events ordering in the calendar month view. Specification ============= When comparing 2 events, if none of them has a work location the events are ordered following their title, in alphabetical order. This is wrong, the events should be ordered following their start time to keep a chronological order in the month view. Task-5407656 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234583
This pull request appears to adjust accounting and sales loyalty coverage related to coupon tax handling. It helps ensure coupon-related tax behavior is validated correctly, reducing the risk of incorrect totals in sales flows.
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
Odoo can now start normally in optimized deployments where Stripe payment support is not installed. In those cases, Stripe country support is treated as unavailable instead of causing a startup failure.
Original PR description
Description of the issue/feature this PR addresses: The `payment` module does not declare a dependency on the `payment_stripe` module but the code implicitly depends on it. This makes a problem in optimized deployments where the `payment_stripe` module is not included. Current behavior before PR: Optimized Odoo deployments without `payment_stripe` fail to start because of a `ModuleNotFoundError`. Desired behavior after PR is merged: If the module is not available, the import error is silently ignored and the `is_stripe_supported_country` calculation returns `False`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240131 Forward-Port-Of: odoo/odoo#239562
After duplicating a website page, the page list now refreshes automatically so the new copy is visible right away. This removes the need for users to manually reload the page and makes page management smoother.
Original PR description
Steps to reproduce: - Go in website page list - Select a page - Click on actions -> duplicate - Select a name - New page doesn't appear in the list, you need to reload to be able to see it task-5412167 https://github.com/odoo/odoo/issues/225299 Forward-Port-Of: odoo/odoo#240041 Forward-Port-Of: odoo/odoo#239702
The eLearning course review editor now opens the current user's own review instead of accidentally showing another user's recently edited review. This prevents confusion for administrators and ensures review updates are applied to the intended feedback.
Original PR description
How to reproduce: - Log as Mitchell Admin - Edit Marc Demo review using the contextual edit button - Click on save to update the review - Click on the button "Edit Review" on the top The review modals opens with the message of Marc Demo instead of the message of Mitchell Admin. The fix ensures you always edit your review message when clicking on "Edit review" button. Note: this is only possible with admin user as other users cannot edit messages of other users. So unfortunately, we had to create a new tours as we can't add steps to test_course_reviews_elearning_officer (not running as admin). An alternative would have been to extend test_fullscreen_slide_text_highlights and rename it. Task-5170310 Forward-Port-Of: odoo/odoo#239876 Forward-Port-Of: odoo/odoo#232696
This fix preserves the standard layout styling used by expense list views. As a result, column widths are calculated correctly, helping expense tables display consistently and remain easier to read.
Original PR description
Before this commit, some classnames set on the list renderer were lost in the expense override. As a consequence, the column width logic couldn't be applied correctly. The widths were computed with a wrong available width (the width of table's parent element, which is the renderer itself). 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#240270
Product images in the online shop now scale within their grid space without being stretched or blurred. This improves product presentation for customers, especially when images have unusually wide dimensions.
Original PR description
Steps to reproduce: =================== 1- Add a product with a very large image width & publish product. 2. Go to the Shop page & type product name. -> The product image is blurred. Cause: ====== The product images have `h-100 w-100` classes which force them to fill the container dimensions exactly, ignoring their intrinsic aspect ratio. Solution: ========= Add the `object-fit-contain` class to the image. This ensures the image scales to fit within the container while preserving its aspect ratio. Side note: `object-fit-contain` class will be added only in version 17.0 In the next versions the class already exists. opw-5258658 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239506 Forward-Port-Of: odoo/odoo#238108
Odoo now handles missing WebRTC support on IoT boxes more gracefully. Instead of preventing the system from starting when a related package is absent, it disables the WebRTC client and lets the rest of the IoT services continue running.
Original PR description
Before this commit, if an IoT box built in master where WebRTC has been removed checkout out 19.0, Odoo would fail to start due to the missing `aiortc` package. After this commit, we guard the import and simply disable the WebRTC client if the package is not available. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update helps connected printers keep working when the underlying printer software reports additional types of errors. By handling these cases more gracefully, it reduces the chance of print jobs failing unexpectedly in IoT setups.
Original PR description
With python escpos library we are currently not catching some exceptions. This PR adds more exceptions to catch to keep the printer working
Selecting certain calculated measures in stock pivot reports no longer causes an error. These measures may remain blank because they cannot be reliably calculated in this report view, but users can continue using the report without interruption.
Original PR description
Prevent a SQL traceback when selecting non-stored computed measures in pivot views. Steps to reproduce: - Open Inventory > Reporting > Stock - Enable developer mode and open the developer tools > Action - Create a pivot view (on action action_product_stock_view) - Open the new pivot view - Select a computed measure, for example “Normal Cost” A SQL syntax error was raised during aggregation because non-stored computed fields return an empty SQL expression in _read_group_select. This fix prevents the traceback from occurring. The report will not display a value for these fields, but it remains usable. Due to the complexity of computed fields, reproducing their logic directly in SQL don't seem feasible. opw-5411631
This fixes an editor issue where copying text together with an empty numbered list item could create pasted content that did not respond properly to Backspace. Empty copied list items are now filled in a way that keeps editing behavior normal, reducing frustration when users paste formatted content.
Original PR description
**Current behavior before PR:** Steps to reproduce: - Create a new paragraph, type some text. - Create a numbered list below paragraph, type some text. - Keep the cursor at the start of list text and select the above text - Copy the selection and paste in a new paragraph. - Backspace in pasted list is not working. This happens because pasted list item is empty. **Desired behavior after PR is merged:** Now, copied empty list item is filled with `<br>`, as result backspace works properly. task-5226511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234869
This fix prevents checklist content from being accidentally selected when a user clicks repeatedly on a checkbox in the HTML editor. It makes checklist interactions more predictable and avoids disrupting editing flow.
Original PR description
**Current behavior before PR:** Currently, triple clicking on a checkbox in a checklist item ends up selecting the list content. This happens because in `selection_plugin` `onTripleClick` handler selects the whole list item. **Desired behavior after PR is merged:** This PR ensures that `onTripleClick` in `selection_plugin` does nothing if tripleclick is triggered when checking a box. task-5361579 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239552 Forward-Port-Of: odoo/odoo#237690
A website shop editor test was adjusted so it works reliably when demo products are present. This helps keep automated checks stable and reduces false failures during quality validation.
Original PR description
### Issue: The tour introduced in #237117 is failing when demo data is available. This is due to `product_with_alternative` not being in the first page in shop when demo data is available. runbot-234699 Forward-Port-Of: odoo/odoo#240195
This fixes a display issue in the Website editor where the blue selection outline could appear in the wrong place when using mobile view with zoom enabled. Users can now select and edit page snippets more reliably at different zoom levels.
Original PR description
Steps to reproduce: =================== 1- Go to the Website editor. 2- Go to mobile view 3- Zoom in (e.g., set it to 120%). 4- Click on any snippet inside the website iframe. -> The highlight…
Steps to reproduce: =================== 1- Go to the Website editor. 2- Go to mobile view 3- Zoom in (e.g., set it to 120%). 4- Click on any snippet inside the website iframe. -> The highlight overlay is in the wrong position. When the website builder iframe is zoomed (scaled), the overlay elements (blue selection borders) become misaligned and incorrectly sized. Cause: ====== This occurs because `targetRect` returns coordinates in the iframe's internal coordinate system (unscaled), while `iframeRect` is in the window's coordinate system (scaled). So when we try to draw the Overlay (in Main Window) using targetRect (from Iframe), we must scale the `targetRect` values to match the Main Window's reality. See [1] for more informations on how `getBoundingClientRect` works Solution ========= Scale targetRect to match the main windows's reality. [1]: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect opw-5345154 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238020
Stock receipt source document references are now kept unique when multiple product moves come from the same origin. This keeps receipt records cleaner and avoids confusing repeated references for warehouse users.
Original PR description
### Behavior: #### Current: During the assignment of a picking, if several of its moves have the same origin, it will repeat that origin in its own origin. #### Expected: Only have one time each…
### Behavior: #### Current: During the assignment of a picking, if several of its moves have the same origin, it will repeat that origin in its own origin. #### Expected: Only have one time each origin. ### Steps to reproduce: * Create Product A and Product B From Barcode * create and validate new receipts with "Product A" * create and validate a second new receipts with "Product A" and "Product B" From Inventory/Operations/Transfers/Receipts * Open the corresponding receipts * In "source Document" (Field: origin, Model : stock.picking) we can see that the reference from second receipts is repeated. ### Observation: In the case of already existing origins it will not duplicate them but it's missing if several item comes from the same origin. https://github.com/odoo/odoo/commit/0caa44ca97d9d197811a03ad2ff227df68d4437a#diff-55c6314416a6a400da6acd5018d161a55eeeb0e3008fec8828121e3dd12be0ebR1410 opw-4970159 Forward-Port-Of: odoo/odoo#230460 Forward-Port-Of: odoo/odoo#223251
The mobile catalog display now hides the “Add to Cart” button text on small screens, preventing long translations from overflowing. This keeps product carousel buttons clean and usable for customers browsing in languages such as Italian.
Original PR description
Versions -------- - 19.0+ Steps ----- 1. Activate Italian; 2. open website editor on homepage; 3. add a catalog block; 4. select the dynamic "latest content" carousel; 5. open webpage in mobile view in Italian. Issue ----- The translated "Add to Cart" text doesn't fit in the buttons. Cause ----- Elsewhere, media breakpoints are used to hide the label display for small viewports, but this isn't happening for the catalog. Solution -------- Add a media breakpoint to hide the label display for small viewports. opw-5418675
This fixes an issue in the HTML editor where pressing Enter near star ratings or icon elements could duplicate one of those elements into the previous paragraph. It also makes line breaks work correctly beside non-editable content, improving editing reliability for website and content users.
Original PR description
**Current behavior before PR:** - When pressing Enter twice before a star rating (3-star or 5-star), the previous paragraph incorrectly ended up containing a single star. - When performing a line break next to a contenteditable false element, `deepEditableSelection` returned a selection whose anchor was inside that non-editable element. Since the selection was inside a contenteditable false element, the `insertLineBreakElement` method returned early without doing anything. **Desired behavior after PR is merged:** - Pressing Enter before the star rating no longer duplicates a star in the previous paragraph. - When `deepEditableSelection` returns a selection whose anchor lies inside a contenteditable false element, we now use an editable selection instead. This prevents the anchor from ending up inside a non-editable element and allows the line break to work correctly. task-5079270 Forward-Port-Of: odoo/odoo#239519 Forward-Port-Of: odoo/odoo#226433
Portal users will no longer see task templates mixed in with their actual project tasks. This keeps customer-facing task lists and shared project views clearer and prevents confusion when users review or edit shared work.
Original PR description
Steps to Reproduce
- Log in as a portal user.
- Go to My Tasks and notice that task templates are visible with tasks.
- Share it with the portal user, giving edit access.
- Open the project sharing view and observe that task templates are visible there.
Cause
- The domains used to filter tasks in both the portal view and the project sharing view did not exclude task templates and it's sub-tasks. As a result, task templates were incorrectly shown alongside real tasks.
Solution
- Added `('has_template_ancestor', '=', False)` to the domain in the `_prepare_tasks_values` method to hide templates in the portal.
- Added `('has_template_ancestor', '=', False)` to the domain in the project sharing action to hide templates when listing tasks.
task-5079337
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#226602This fix cleans up temporary editing overlays when the website editor is closed or saved. It prevents hidden editor elements from accumulating in the page, helping keep editing sessions cleaner and more reliable over repeated use.
Original PR description
This commit ensures that local overlays are correctly removed when the Editor and `LocalOverlayPlugin` are destroyed. Steps to reproduce (observable after 18.4): - Go on website - Enter edit mode - Save - Repeat entering edit mode and saving - Inspect the DOM: oe-local-overlay elements keep accumulating, only one is non-empty The bug is only observable after 18.4, after the website refactoring, but the root cause has been present since 18.0, so we fix it there in case there are other use cases. task-5380409 Forward-Port-Of: odoo/odoo#239644
Group allocation now only shows time off types that actually require an allocation. This prevents HR users from selecting an invalid time off type and keeps group allocation behavior consistent with single allocations.
Original PR description
To reproduce: ============= - Create time off tyoe that does not require allocation - Go to timeoff > Allocation > Group allocation -> you can select the created time off type Problem: ======== we didn't have a domain on `holiday_status_id` field, so all time off types were available for selection. Solution: ========= Add a domain on `holiday_status_id` field to only show time off types that require allocations the same way as when creating a single allocation. opw-5113959 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238634 Forward-Port-Of: odoo/odoo#228617
This fix prevents the website editor from showing a text cursor between card elements, an area that users cannot actually edit. It makes card grid editing feel clearer and avoids misleading cursor placement when navigating with the keyboard.
Original PR description
Since [1] when the selection placeholder plugin was introduced, a horizontal cursor is displayed between cards in website, while that area is not supposed to be editable. This commit adapts card-related (not-)enabled selectors and providers and introduces a resource named `selection_blocker_row_enablers` in the layout column option plugin to make it possible to counter the default behavior that forces any `.row` to never be a selection blocker, making it possible for the horizontal cursor to be used between e.g. a table and the cards. Steps to reproduce: - Drop an `s_cards_grid` block - Put the cursor in a card - Move the cursor with the arrow keys until you leave the card => The cursor was displayed between cards. [1]: https://github.com/odoo/odoo/commit/edf7f7bb0c62978640c181eccb4934855d5d872d task-5383957
Replacing an image with a video in the website picture block now keeps the media at the expected full width. This prevents videos from appearing unexpectedly small and helps pages maintain their intended layout.
Original PR description
Steps to reproduce: - Drop "s_picture" snippet. - Replace the image with a video. - Video is clearly small than the original image. This commit fixes the issue by adding a "w-100" class to the figure element wrapping the image. task-5136212
This update corrects how Odoo detects whether the PDF generation tool includes the required Qt patch. It helps prevent incorrect error messages when generating reports, improving reliability for users who rely on PDF output.
Original PR description
When getting a wkhtmltopdf version, we only get version number, not the part where it mentions whether or not we have QT patch. This commit fixes this issue. Before: version = '0.12.6.1' When checking if '(with patched qt)' not in wk_version, it breaks and we get an error. Now: we check '(with patched qt)' beforehand and save it in is_patched_qt property. we use this value instead of version when checking for qt later on. opw-5263921 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now validates Thai VAT numbers for contacts set in Thailand, requiring them to contain exactly 13 numeric digits. This helps prevent incorrect tax IDs from being saved and improves data accuracy for Thai business records.
Original PR description
This PR adds a validation method check_vat_th() to verify Thai VAT numbers. In Thailand, a VAT number must consist of exactly 13 numeric digits. For partners with country set to Thailand, the system will only allow VAT numbers that are exactly 13 digits long. Total credits go to: [Saran440](https://github.com/Saran440) `<saranl@ecosoft.co.th>` (See PR: https://github.com/odoo/odoo/pull/239164) Enterprise PR: odoo/enterprise#101905 Forward-Port-Of: odoo/odoo#240493 Forward-Port-Of: odoo/odoo#239616
The chat bubble now shows unread messages more clearly, matching the improved visibility already added to the Discuss sidebar. This helps users notice pending conversations faster and reduces the chance of missing messages.
Original PR description
Unread indicator in discuss sidebar have been adapted [1] but chat bubble didn't had the visual improvement, which this commit fixes. [1]: https://github.com/odoo/odoo/pull/224553 Before / After <img width="80" height="72" alt="Screenshot 2025-12-18 at 19 56 45" src="https://github.com/user-attachments/assets/9413ca16-0476-4547-82ad-1460366edf52" /> <img width="84" height="68" alt="Screenshot 2025-12-18 at 19 57 04" src="https://github.com/user-attachments/assets/4dcfc283-88b6-4e96-b8c7-5342d615fd2c" />
This update fixes an issue where custom report groupings with complex filters were incorrectly indented, causing formatting problems. The change improves the way Odoo calculates grouping levels, ensuring reports display correctly regardless of the complexity of the filters used. This ensures consistent and accurate report presentation.
Original PR description
When a custom groupby defined a domain with more than one element in it (typically, conditions on multiple fields, possibly with '|' or '&' operations), if groupby lines needed to be generated for subsequent groupby, the generated groupby lines had a too high level, and ended up being over-indented.
This was because the groupby expansion computed the number of higher-level groupby lines as the length of the domain needed to restrict their content. This was too naïve, and won't work well with custom groupbys, which can define longer (or even empty) domains.
This was spotted in master (19.1), with the refactored EC Sales list, which now uses a custom engine and a specific custom groupby map.This update allows accountants to archive reports, resolving an access issue that prevented them from doing so. The original problem stemmed from limited user permissions, specifically lacking the ability to update menu items. This change ensures accountants can properly manage and retain reports.
Original PR description
As a simple accountant without sysadmin rights, archive a report. A user access is raised because the user doesn't have access to update menuitems.
This update corrects a technical issue within the Enterprise edition's spreadsheet functionality. Specifically, a missing configuration setting was preventing proper sheet handling, which could have caused data inconsistencies. This fix ensures the spreadsheet feature operates reliably and accurately.
Original PR description
…SHEET command
This update adjusts the default demo data for the Belgian Intervat localization to disable Intervat calculations. This prevents Intervat from automatically being enabled during testing with Runbots, ensuring consistent and accurate demo results. This change improves the reliability of demo environments.
Original PR description
This commit set the `l10n_be_intervat_mode` to `disabled` in the l10n_be demo company. The reason why we are doing this it to avoid having intervat set by default on runbots. task-5404719
This update resolves a formatting problem in invoices generated when using quotation templates in sales orders. Previously, the invoice PDF displayed product names and descriptions on the same line, creating an unreadable format. This fix ensures descriptions are correctly separated from product names in the invoice, improving clarity and professionalism.
Original PR description
### Issue: In this issue, when a quotation template is used in sale order, the end line is missing between name and description in the invoice pdf. #### Steps to reproduce: 1- Install a db with sale…
### Issue: In this issue, when a quotation template is used in sale order, the end line is missing between name and description in the invoice pdf. #### Steps to reproduce: 1- Install a db with sale and invoicing installed 2- Create a quotation template, and add a description in the line. 3- Create a quotation with the created template. 4- Confirm the order and create an invoice for the sale order. 5- Print the pdf, as seen the name and description are shown in the same line, while if the sale order was created without a template, we would have seen the description from product in the next line. `_get_journal_items_full_name` is used to enforce the product name in the description. However, in cases where product name doesn't exist in the description, e.g. our case here, the name and description will be shown in the same line in the invoice pdf. This can be fixed by adding a new line between the name and the description. opw-5130171 Forward-Port-Of: odoo/enterprise#102208 Forward-Port-Of: odoo/enterprise#100417
This update ensures that rental orders created from leads automatically include the tags associated with the original lead. Previously, rental orders lacked this functionality due to a minor difference in how context information was passed. This change streamlines the process of tagging rental orders, improving organization and reporting.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have a lead with tags; 2. convert lead to rental order. Issue ----- The new rental order has no tags. Cause ----- Tags are added to regular sales orders via the `_prepare_opportunity_quotation_context` method, but rental orders use `_get_action_rental_context` instead, which is virtually identical, but adds the `in_rental_app` context value, and doesn't include `default_tag_ids`. Solution -------- Rather than having duplicate code, make `_get_action_rental_context` retrieve the base context from `_prepare_opportunity_quotation_context`, then adding `in_rental_app=True`. opw-4549941 Forward-Port-Of: odoo/enterprise#102220
This update fixes an issue where invoice reports for KE companies were not displaying prices with commas. The fix removes a duplicate XPath and correctly formats the total and taxable amounts, ensuring accurate financial reporting. This improves clarity and compliance for KE invoices.
Original PR description
Steps to reproduce: 1. install `l10n_ke` 2. Switch to KE Company 3. Create a product with all KRA eTIMS details set on the Accounting page. 4. Create an invoice to KE Company with that product and set unitprice > 10000 5. Confirm the invoice and send it. Now, see the invoice report Issue: 1. xpath for `td_subtotal` was duplicated 2. The total amount and taxable amount were not formatted as prices (no commas). Before: <img width="771" height="397" alt="image" src="https://github.com/user-attachments/assets/492fe911-18d6-4e01-a16d-d7450c17373f" /> After: <img width="766" height="389" alt="image" src="https://github.com/user-attachments/assets/bbe5d4e2-b337-445c-833a-06492a8c827d" /> Solution: Updated the invoice report to: - Remove the duplicated `td_subtotal` xpath. - Properly format the total and taxable amounts with `t-options`. opw-5341578 Forward-Port-Of: odoo/enterprise#101794 Forward-Port-Of: odoo/enterprise#100279
This update resolves an issue where archived employees were still appearing in timesheet entries. The fix ensures that timesheets only display entries for currently active employees, improving data accuracy and preventing confusion.
Original PR description
**Steps to Reproduce:** - Install hekpdesk_timesheet. - Go to settings, enable timesheets - Archive an employee. - In a ticket, try to add a timesheet entry. **Isuue:** Archived employees are also appearing under timesheets tab. **Fix:** Passed a context so that only active employees appear in the selection. task-5078763 Forward-Port-Of: odoo/enterprise#95137
This update fixes an issue where product documents stopped appearing on product pages after a document version was updated. The fix ensures that the product document record is correctly linked to the latest version of the document, maintaining accurate product information. This improves data consistency and prevents users from seeing outdated document associations.
Original PR description
**Steps to reproduce:** 1. Install `sale_management` and `documents`. 2. Go to settings > check `product` under Files Centralization. 3. Create a product and add a document to it using the smart button. 4. Update the version of that document from the *Manage Versions* action on the document page. **Issue:** - After updating the document version, the linked document no longer appears on the product page. **Cause:** - The product page displays records from the `product.document` model, but its `ir_attachment_id` was not updated when the document’s version changed. **Solution:** - Update the `ir_attachment_id` on the corresponding `product.document` record when the document version is updated. opw-5144041 Forward-Port-Of: odoo/enterprise#99226
This update fixes a bug where HR users were receiving unnecessary reminder emails. The system now filters out time-off and holiday entries, ensuring reminders are only sent for actual timesheets requiring user input. This improves efficiency and reduces email clutter for our users.
Original PR description
**Steps to reproduce:** - Install timesheet_grid_holidays - Create a user with no timesheet access - Create a leave and approve it as a manager - Set up employee reminders in timesheet settings - Run the timesheet reminder scheduled action **Issue:** HR users without timesheet app access or who haven’t submitted timesheets in the past 3 months were still receiving reminder emails. **Cause:** When a time-off is approved or a public holiday is recorded, it generates timesheet entries, which causes reminder emails to be sent incorrectly. **Fix:** Filter out time-off and public holiday entries when sending reminders. Now, reminders are only sent for actual timesheets that require user input. task-5085790 Forward-Port-Of: odoo/enterprise#102061 Forward-Port-Of: odoo/enterprise#95450
This update fixes an issue where unnecessary slashes were being added to reports' XML formatting when there was no comment provided. The change ensures that the XML is correctly formatted, preventing potential errors in report generation and data processing. This improves the reliability of financial reports.
Original PR description
Since 17.0, we added a / when there was no comment in the comment section of the xml. This is wrong and should be left empty. opw-5242381 Forward-Port-Of: odoo/enterprise#101339 Forward-Port-Of: odoo/enterprise#100033
This update corrects a display issue in the Field Service 'All Tasks' view. Previously, task templates were incorrectly shown alongside real tasks. The fix ensures that only actual tasks are listed, improving the clarity and usability of this key reporting tool.
Original PR description
Steps to Reproduce
- Navigate to Field Service > All Tasks.
- Observe that task templates are visible with tasks.
Issue
- Task templates are visible in the Field Service > All Tasks view, which is incorrect. Only real tasks should be listed.
Cause
- The domain in the view definition only filtered tasks by `is_fsm = True` and ` project_id != False`, but it did not exclude template tasks and sub-tasks of task templates.
Solution
- Added `('has_template_ancestor', '=', False)` to the domain so that only actual tasks are displayed in the Field Service > All Tasks view.
task-5079337
Forward-Port-Of: odoo/enterprise#94472This update resolves an issue where employees designated as their own approvers couldn't modify their attendance records. The fix allows employees to directly update their attendance information, streamlining the process and improving accuracy. This change ensures employees have the necessary control over their attendance data.
Original PR description
Employees set as themselves as approvers couldn't modify their attendances due to permission issues with other models. task-5427553
This update corrects a bug in the PDF Quote report editor within web_studio. Previously, minor changes could trigger an error, resulting in an empty report. The fix initializes the Studio view to `<data/>>` to prevent unnecessary and irrelevant edits by the HTML editor, ensuring reports save correctly.
Original PR description
Example of steps: - Install sale_management and web_studio - Try to edit PDF Quote report - add /4 columns somewhere above the table - try to save - Error: Document is empty In this case, for some reason `html_editor` edits the external_report by changing the order of attributes on a node, which causes a diff, but not relevant for studio and won't produce any xpath operations. This commit handles this case by initializing the Studio view to `<data/>`. opw-5351588
This update resolves a potential crash in the mail fetch process caused by an error when checking for unread messages on IMAP servers. Specifically, the system now gracefully handles cases where the IMAP server doesn't return any unread messages, preventing a system error and ensuring reliable mail retrieval.
Original PR description
When checking for unread messages on an IMAP server, the search() method can return None for data[0] if there are no unseen messages or in certain server response conditions. Attempting to call…
When checking for unread messages on an IMAP server, the search() method can return None for data[0] if there are no unseen messages or in certain server response conditions. Attempting to call .split() on None causes an AttributeError. This fix adds a null check to handle the None case gracefully by returning an empty list of unread messages, allowing the mail fetch process to continue without errors. Fixes #236771 Description of the issue/feature this PR addresses: The IMAP server's search() method can return None for data[0] in certain conditions, particularly when there are no unseen messages. Attempting to call .split() on None causes an AttributeError, preventing the mail fetch process from continuing. Current behavior before PR: When checking for unread messages on certain IMAP servers with no unseen messages, the system crashes with: `AttributeError: 'NoneType' object has no attribute 'split'` Desired behavior after PR is merged: The mail fetch process should gracefully handle the None case by returning an empty list of unread messages, allowing the process to continue without errors. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a test related to exporting accounting data for Sweden. The accounts have been reorganized to better reflect goods and services for fiscal reporting, ensuring accurate export functionality. This resolves a technical issue impacting the Swedish accounting export process.
Original PR description
The accounts have been separated between goods and services for the fiscal positions to work. Fix the test of an export of Sweden accounting task-5365658
This update fixes an issue where newly added buttons in the Odoo form editor weren't correctly focused or displayed in the sidebar. The fix ensures that the editor automatically focuses on the new button after creation, streamlining the design process and improving usability. This resolves a previous workflow disruption.
Original PR description
Have an arch with many conditional button in the header Click on Add a button in the form editor. Before this commit, the new button was not correctly focused and the sidebar did not display the properties of the new button. This was because we gave the wrong xpath coordinates to focus to the editor. After this commit, this flow works as expected task-5364798 Forward-Port-Of: odoo/enterprise#102286 Forward-Port-Of: odoo/enterprise#101059
This update fixes a technical issue where the AI action feature would generate a traceback when the prompt field was empty. The change ensures the AI system continues to function correctly even with an empty prompt, improving stability and reliability of the AI-powered actions. It also clarifies instructions to the AI model to avoid requesting additional user input.
Original PR description
Prior to this commit, when the AI action prompt was left empty, we would get a traceback when that AI action was executed. The traceback would occurs because the prompt is an HTML field with the…
Prior to this commit, when the AI action prompt was left empty, we would get a traceback when that AI action was executed. The traceback would occurs because the prompt is an HTML field with the field selector plugin, which means that it requires parsing before it's sent to the LLM. There was no check during parsing whether the field is empty or not and thus a traceback would occur during processing. In this commit we added a check for whether the prompt field is empty or not and if it is, we skip parsing altogether. We still call the LLM but without the final-prompt. The pre-prompt with contextual information is still sent thus the LLM can still perform the action if it's simple enough. Also, if the AI server action prompt is ambiguous and the LLM "feels" like it needs additional input to complete its task, it might respond with an additional query to the user instead of calling one of its available tools. Thus, in this commit, we add an explicit instruction to the AI Server action pre-prompt which should convey to the LLM that it will not be able to get any additional input from the user and it should assume that any important information for performing its task will be hardcoded in its available tools. Task-5379758
This update resolves an issue where the web_studio report editor was generating invalid field nodes, leading to errors when creating reports. The fix prevents the creation of these invalid nodes, ensuring reports can be generated correctly. This improves the stability and usability of the report editor.
Original PR description
cf commit Forward-Port-Of: odoo/enterprise#102215 Forward-Port-Of: odoo/enterprise#99385
This update resolves an issue where ISO20022 reports incorrectly included two decimal places for currency amounts, particularly for currencies like JPY. The fix dynamically sets the decimal places based on the currency's configuration, ensuring accurate reporting and preventing potential errors.
Original PR description
Issue: Generating the xml file for iso20022 always generates the amount with two decimals which is hard coded and can cause error for currencies without decimals for example JPY. Fix: The fix is to have the currency decimal number dynamically set through the currency decimal places field. task: 5242204
This update corrects a test failure related to VAT number validation for Thailand. After implementing stricter VAT number checks, a test case failed due to an incorrect VAT number being used. This fix ensures the test accurately reflects the new validation rules and maintains the integrity of the Thailand VAT reporting functionality.
Original PR description
Following the implementation of proper validation for VAT numbers for Thailand, this now fails as the one set in the test doesn't follow the proper format. Community PR: odoo/odoo#239616 Total credits to @vin-odoo Forward-Port-Of: odoo/enterprise#102404 Forward-Port-Of: odoo/enterprise#101905