Daily updates from Odoo
Friday, July 3, 2026
189 changes
9 changes
Enhancements to existing features
This update ensures the font style for general customer notes in Point of Sale matches the font used for line customer notes. This improves the visual consistency of sales receipts and enhances the overall user experience for customers.
Original PR description
We updated the general customer note font to match the line customer note's one. task-6294200 Forward-Port-Of: odoo/odoo#271344 Forward-Port-Of: odoo/odoo#270060
Resolved issues and error corrections
This update fixes a technical issue that caused Odoo builds to fail under certain testing conditions. The team moved assertions to their proper location, ensuring consistent build behavior across all testing environments – specifically resolving a discrepancy between 'all apps' and 'single app' modes. This improves the stability and reliability of the Odoo Enterprise platform.
Original PR description
Oversight of: https://github.com/odoo/enterprise/pull/98569 Some assertions were put in the wrong module, making the builds work in "all apps" mode but fail in "single app" mode. This commit moves assertions where they belong. Task-6353709 Forward-Port-Of: odoo/enterprise#122486
A recent update to the SEPA XML processing for Sweden (l10n_se_bban) caused a test failure when combined with the account_iso20022 module. This commit resolves the test issue by temporarily skipping the failing test and adding a replacement, ensuring continued functionality for Swedish payment processing.
Original PR description
Here https://github.com/odoo/enterprise/pull/114662 we changed the way the CdtrAgt node is used in the SEPA XML file for Sweden. But this change broke a test when both account_iso20022 & l10n_se_bban are installed, leading to a Non-expected child error. This commit skip the failling test if l10n_se_bban is installed, and add a new one to replace it. runbot-938366 runbot-938367 Forward-Port-Of: odoo/enterprise#122599 Forward-Port-Of: odoo/enterprise#121485
This update fixes an issue where email attachments with unusual Content-Type headers were being corrupted, leading to data loss. The change ensures attachments are stored correctly by handling these cases gracefully, aligning with industry standards and preventing data corruption. No new functionality was added.
Original PR description
[[REF] mail: consolidate attachment Content-Type normalization](https://github.com/odoo/odoo/pull/273097/changes/ad4e34c5c79450b1e976d9ba7047487218690585) Two separate spots handled malformed…
[[REF] mail: consolidate attachment Content-Type normalization](https://github.com/odoo/odoo/pull/273097/changes/ad4e34c5c79450b1e976d9ba7047487218690585)
Two separate spots handled malformed Content-Type headers. Merge them
into one block, read the raw header once with partition(';') to have
both the type and its parameters available without re-fetching the
header for each case.
No behavior change.
[[FIX] mail: handle attachment Content-Type with no subtype](https://github.com/odoo/odoo/pull/273097/changes/7b410fbe606b7e476f0005485e42783834983b75)
Some mailers send attachments with a bare token as Content-Type instead
of a valid 'type/subtype' pair, e.g.:
Content-Type: base64; name="foo.pdf"
Content-Transfer-Encoding: base64
Python's email library normalises any MIME type without a '/' to
'text/plain'. get_content() then decodes the base64 payload as UTF-8
text, replacing invalid byte sequences with U+FFFD. The subsequent
encode('utf-8') bakes those replacements in, permanently corrupting
the stored file.
Per Postel's law [RFC 761], be liberal in what we accept: detect these
non-standard types via `not all(mimetype.partition('/'))` and fall back
to application/octet-stream, keeping the original parameters (filename,
charset, etc.) so the attachment is stored intact.
opw-6227526
Forward-Port-Of: odoo/odoo#273097This update corrects a minor issue in how overtime hours are calculated and stored, ensuring more accurate payment calculations. Previously, rounding introduced small errors due to the way decimal numbers are handled, which could lead to slight discrepancies in overtime pay. This fix maintains greater precision for financial accuracy.
Original PR description
Overtime duration computed as fractional hours was rounded to 3 decimal places before being stored on the overtime line. Since 1 decimal hour = 3600 seconds, this gives only 3.6 seconds of precision and the rounding can go in the wrong direction due to floating-point representation. The fix consists in replacing the duration rounding to 4 decimals when building overtime work entries so stored durations keep sub-second precision needed for money computation. task-6212231 Forward-Port-Of: odoo/enterprise#120786 Forward-Port-Of: odoo/enterprise#119721
This update resolves a recurring issue in the Odoo presence subscription test, which previously failed due to timing dependencies. By removing a batching delay, the test now reliably logs every subscription call, ensuring consistent and accurate test results. This improves the stability of the Odoo system.
Original PR description
Since [1], the `subscribe to presence channels according to store data` test is sometime failing as it heavily depends on timings. This commit removes the `OUTGOING_BATCH_DELAY` in order to remove batching. This way, we can ensure every call to `subscribe` is actually logged instead of guessing how they will be batched. runbot-941301,941304,941303 [1]: https://github.com/odoo/odoo/pull/272199 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 corrects a small issue where email notifications weren't being properly sent after a call activity was marked as complete. The change ensures that users receive the expected email updates, improving communication around call interactions. This fix was implemented as part of a broader update to how call activities are managed.
Original PR description
In [1], we removed `action_call_done` for call activity, and to use `action_feedback` to mark a call activity done like other activities. However, we forgot to assign `activity_mail_message_id` for later mail message update. Add this in `action_feedback`. [1]: 70ba1812812596e00509415cedcc8f4bdf6c6e37 COMPR: https://github.com/odoo/odoo/pull/267663 Forward-Port-Of: odoo/enterprise#122687 Forward-Port-Of: odoo/enterprise#118396
A technical bug prevented the successful display of a notification after activating Peppol. This update corrects a validation error in the system's code that was triggered by a specific configuration, ensuring that users receive confirmation when Peppol is properly set up.
Original PR description
**Steps to reproduce:** * Install the **account_peppol** and **l10n_be** module. * Switch to BE Company. * Create and confirm a BE customer invoice. * Open the "Send & Print" dialog. * Activate…
**Steps to reproduce:**
* Install the **account_peppol** and **l10n_be** module.
* Switch to BE Company.
* Create and confirm a BE customer invoice.
* Open the "Send & Print" dialog.
* Activate Peppol (register as a Peppol participant) in developer mode and demo mode by clicking on `Why should you use it ?` on the banner in wizard.
**Observed behavior:**
* An Uncaught Promise OwlError trace is thrown on the screen: `TypeError: Cannot use 'in' operator to search for 'toString' in null`.
* The success notification indicating that Peppol was activated fails to appear.
**Cause:**
* Upon successful registration, the `peppol.registration` wizard triggers a client action to display a success notification via `display_notification`.
* The backend Python code explicitly passed `title=None` in the notification parameters, which is serialized to `null` in the JavaScript frontend.
* In previous versions (like 19.2), the `Notification` component's `title` prop validation was defined loosely as `{ type: [String, Boolean, { toString: Function }] }`. OWL did not strictly validate this shape, allowing `null` to pass through without error.
* In 19.3, the prop validation was updated to strictly enforce the object shape: `{ type: [String, Boolean, { type: Object, shape: { toString: Function } }] }`. Because JavaScript evaluates `typeof null` as `"object"`, the OWL validation schema now attempts to verify the shape by evaluating `'toString' in null`. Using the `in` operator on `null` is illegal in JavaScript and immediately crashes the application.
**Fix:**
* Replace `title=None` with `title=False` in the `_action_send_notification` method.
* This translates to `false` in the JavaScript frontend, which seamlessly satisfies the `Boolean` prop type validation for the OWL component and allows the notification to render safely without errors.
opw-6333224
Forward-Port-Of: odoo/odoo#272974Features or functions removed from Odoo
This update removes a QR code that displayed product prices from gift receipts. This change ensures gift receipts maintain their intended purpose of concealing pricing information from the recipient, protecting customer privacy and preventing misuse of pricing details.
Original PR description
Gift receipts are intended to be given to the gift recipient and are designed to hide product prices. The self-service invoicing QR code could expose pricing information through the generated invoice, defeating the purpose of the gift receipt. Therefore, remove the self-invoicing QR code from gift receipts. task-6299597 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269812
7 changes
Enhancements to existing features
This update refines how employees' favorite projects are automatically selected on timesheets. Previously, a project was selected with fewer than 3 linked timesheets. Now, a project is only chosen if at least 3 of the employee's 5 most recent timesheets are associated with it, ensuring more accurate project association.
Original PR description
A favorite project is now selected only when at least 3 of the employee's 5 most recent timesheets are linked to it. task-6290859 Forward-Port-Of: odoo/odoo#273259
Resolved issues and error corrections
This update restores a set of tests related to the Point of Sale (POS) flow within the l10n_fr_pdp module. These tests were temporarily removed during a recent integration of e-reporting and e-invoicing features. Restoring these tests ensures continued quality and reliability of the POS functionality.
Original PR description
During the merge of l10n_fr_pdp e-reporting and e-invoicing, some tests had to be removed. Task-6296356 Forward-Port-Of: odoo/odoo#273329 Forward-Port-Of: odoo/odoo#271294
A recent update to the SEPA XML processing for Sweden (l10n_se_bban) caused a test failure when combined with the account_iso20022 module. This commit resolves the test issue by temporarily skipping the failing test and adding a new test to ensure proper functionality.
Original PR description
Here https://github.com/odoo/enterprise/pull/114662 we changed the way the CdtrAgt node is used in the SEPA XML file for Sweden. But this change broke a test when both account_iso20022 & l10n_se_bban are installed, leading to a Non-expected child error. This commit skip the failling test if l10n_se_bban is installed, and add a new one to replace it. runbot-938366 runbot-938367 Forward-Port-Of: odoo/enterprise#122599 Forward-Port-Of: odoo/enterprise#121485
This update fixes an issue where attachments with unusual Content-Type headers were being corrupted, leading to data loss. The change ensures attachments are stored correctly by handling diverse Content-Type formats, aligning with industry standards and preventing data corruption. No new functionality was added.
Original PR description
[[REF] mail: consolidate attachment Content-Type normalization](https://github.com/odoo/odoo/pull/273097/changes/ad4e34c5c79450b1e976d9ba7047487218690585) Two separate spots handled malformed…
[[REF] mail: consolidate attachment Content-Type normalization](https://github.com/odoo/odoo/pull/273097/changes/ad4e34c5c79450b1e976d9ba7047487218690585)
Two separate spots handled malformed Content-Type headers. Merge them
into one block, read the raw header once with partition(';') to have
both the type and its parameters available without re-fetching the
header for each case.
No behavior change.
[[FIX] mail: handle attachment Content-Type with no subtype](https://github.com/odoo/odoo/pull/273097/changes/7b410fbe606b7e476f0005485e42783834983b75)
Some mailers send attachments with a bare token as Content-Type instead
of a valid 'type/subtype' pair, e.g.:
Content-Type: base64; name="foo.pdf"
Content-Transfer-Encoding: base64
Python's email library normalises any MIME type without a '/' to
'text/plain'. get_content() then decodes the base64 payload as UTF-8
text, replacing invalid byte sequences with U+FFFD. The subsequent
encode('utf-8') bakes those replacements in, permanently corrupting
the stored file.
Per Postel's law [RFC 761], be liberal in what we accept: detect these
non-standard types via `not all(mimetype.partition('/'))` and fall back
to application/octet-stream, keeping the original parameters (filename,
charset, etc.) so the attachment is stored intact.
opw-6227526
Forward-Port-Of: odoo/odoo#273097This update fixes an issue where the 'Apply To' option in pricelist rules wasn't being saved correctly, defaulting to 'Product' instead of 'Category'. The fix ensures that the selected 'Apply To' option is preserved when the pricelist rule is reopened, maintaining accurate product categorization.
Original PR description
Steps to reproduce: ------------------------------------ 1. Install Rental(sale_renting) module and activate Pricelist. 2. Go to Rental > Products > Pricelists. 3. Open an existing pricelist or…
Steps to reproduce:
------------------------------------
1. Install Rental(sale_renting) module and activate Pricelist.
2. Go to Rental > Products > Pricelists.
3. Open an existing pricelist or create a new one.
4. Add a pricelist rule and set:
- Apply To: Category
- Configure the rule (e.g. select a category).
5. Save and close the rule, then save the pricelist.
6. Reopen the pricelist rule.
Observation:
------------------------------------
The "Apply To" option is no longer set to Category. Instead, it default value to Product, and the selected category is not saving correctly.
Issue:
------------------------------------
After [This Commit](https://github.com/odoo/odoo/commit/d2648b1d983927b5df7260a16d6d1d33c213ddeb), 'display_applied_on' is used to control the visibility of uom_id but is not defined in the list view. As a result, field parsing marks it as readonly, so its updated value is not saved.
This causes the "Apply To" option to fall back to its default value ('Product') when the pricelist rule is reopened.
Solution:
------------------------------------
Include the display_applied_on field in the pricelist item list view so the selected "Apply To" option is preserved when saving the pricelist.
opw-6346422This update resolves a technical issue preventing AI Studio fields from functioning correctly in employee appraisal forms. The problem stemmed from the AI system incorrectly storing field data, leading to a type error. This fix ensures the AI system receives the expected list format for field data, resolving the error and restoring functionality.
Original PR description
**STEPS TO REPRODUCE** 1. Add an AI Studio field in the employee appraisal form view (can be a regular text field or other) 2. Add `employee_feedback` to the prompt using '/' 3. Click the AI button to populate the field 4. Error occurs: `TypeError: unsupported operand type(s) for +: 'OrderedSet' and 'list'` **CAUSE** In any model, the read function expects the argument `fields` to be a list. When using AI fields in Studio, the fields argument is stored as an OrderedSet instead of a list, causing errors when performing operations. opw-5954203 Forward-Port-Of: odoo/enterprise#120799
Features or functions removed from Odoo
This update removes a self-invoicing QR code from gift receipts. Gift receipts are designed to conceal product prices from the recipient. Removing this QR code ensures the intended privacy and prevents unintended price disclosure.
Original PR description
Gift receipts are intended to be given to the gift recipient and are designed to hide product prices. The self-service invoicing QR code could expose pricing information through the generated invoice, defeating the purpose of the gift receipt. Therefore, remove the self-invoicing QR code from gift receipts. task-6299597 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269812
39 changes
New functionality added to Odoo
This update adds Russian translations for the Chart of Accounts data within the Odoo localization module for Uzbekistan. Recognizing the widespread use of Russian in local accounting practices, this change expands Odoo's reach and improves adoption among Uzbek users. This supports a key market and enhances the overall user experience.
Original PR description
This change adds Russian translations for the Chart of Accounts data in the l10n_uz module. Standard practice is to enable only a country's official statutory language in localization modules However, the business reality of Central Asia particularly Uzbekistan justifies an exception: Russian is widely used in accounting practice there, and supporting it will significantly improve adoption among local users. task-6229114 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269320
Enhancements to existing features
This update refines how employees select their favorite projects on timesheets. Previously, a project was automatically chosen based on limited criteria. Now, a project is only selected if it's linked to at least 3 of the employee's 5 most recent timesheets, ensuring a more relevant and accurate selection.
Original PR description
A favorite project is now selected only when at least 3 of the employee's 5 most recent timesheets are linked to it. task-6290859
This update improves the timesheet experience by automatically prefilling the timer with the project the employee most frequently uses. This saves time and reduces errors when logging time, as the system anticipates the user's common activity. The timer now prioritizes the project linked to the employee's recent timesheets.
Original PR description
When opening the timesheet systray, the timer is now prefilled with the project to which the employee's three most recent timesheets are all linked, since they are most likely to keep logging time on it. The currently viewed project or task takes precedence over the favorite project, and viewing a project form now prefills the timer as well, just like task views already do. task-6290859
This update adds Russian translations to key Uzbekistan reports (balance sheet and profit & loss) within the Odoo Enterprise system. This change supports the growing Uzbek market by aligning with local business practices and increasing adoption rates.
Original PR description
Uzbekistan's business environment requires Russian in addition to the official Uzbek language to ensure adoption. While localizations typically activate only statutory languages, Central Asian market realities justify this exception. task-6229114 -- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#120250
Resolved issues and error corrections
This update fixes an issue where the website header text appeared too dark on mobile devices with a specific background color setting. The fix ensures proper color contrast is applied, improving readability and the overall user experience. This was a result of a minor adjustment during a recent website update.
This pull request resolves a technical issue related to temporary files used within the Odoo system. The fix ensures more stable operation by addressing a problem with temporary files, improving overall system reliability. This change primarily impacts the resource module.
This pull request addresses a temporary file issue within the Helpdesk module. The fix resolves a problem where temporary files were not being properly cleaned up, potentially impacting performance and storage. This change ensures the Helpdesk system operates more efficiently and reliably.
This update corrects a technical error that occurred when managing employee leave periods with overlapping versions. Specifically, a missing method was preventing the system from correctly updating leave statuses, leading to tracebacks. This fix ensures leave management functions reliably across different employee schedules.
Original PR description
**Steps to reproduce the issue:** - Create a leave for an employee with a period that overlaps with two versions. - Change the employee's working schedule. - You get a traceback. The issue is that the definition of the `_update_leave_state` method is missing from the `hr.version` model. task-6332404 Forward-Port-Of: odoo/odoo#272060
A recent test revealed a glitch where the 'Turn camera on' button wasn't appearing correctly during meeting transitions. This was caused by a timing issue in the test setup, specifically a delay in waiting for the meeting to fully initialize. This update ensures the button displays reliably during multi-channel meeting interactions.
Original PR description
The test starts a meeting, then switches to another channel to join its call, expecting the camera button to read "Turn camera on". Starting a meeting runs startMeeting(), which fires enterFullscreen() as a fire-and-forget tail once the meeting call is joined. The test only waited for the meeting's "Stop camera" button (set mid-join, before that tail) before navigating, so enterFullscreen could still be pending during the channel switch. When it ran late it pointed the fullscreen channel at the newly joined channel and turned isFullscreen on. That channel's in-call view is gated on showCallView (!isFullscreen), so it was torn down and the "Turn camera on" button never rendered within the 3s timeout. Wait for the meeting view to be fully active before navigating away, so the whole startMeeting chain (enterFullscreen included) has settled first. https://runbot.odoo.com/odoo/error/939805 Forward-Port-Of: odoo/odoo#273650
This update fixes an issue where the Thread component wasn't displaying messages properly due to a technical glitch in how it tracked loading status. The fix ensures that messages are correctly rendered when the Thread component is loading, improving the user experience.
Original PR description
The Thread component mirrors `thread.isLoaded` into `state.mountedAndLoaded` with a `useEffect` whose body only re-runs when the component re-renders (in `onPatched`). `reset()` forces…
The Thread component mirrors `thread.isLoaded` into `state.mountedAndLoaded` with a `useEffect` whose body only re-runs when the component re-renders (in `onPatched`). `reset()` forces `mountedAndLoaded` false and bumps `resetCount`, a dependency of that effect, so the mirror is meant to re-sync after a reset. But `resetCount` was a plain instance field. The effect's dependency function reads it, and OWL only re-renders (hence re-runs the effect) when a value the render observed changes; a plain field is not reactive, so reading it observes nothing. Bumping it therefore never scheduled a render, and the mirror only re-ran when some other reactive write happened to schedule one. When a `reset()` lands while `mountedAndLoaded` is already false (a no-op write) with `isLoaded` true, and no such write follows, no render is scheduled: the mirror never re-runs and `mountedAndLoaded` strands at false, so the empty phantom list renders no message. This happens on an out-of-render-cycle `applyScroll` (a late `onImageLoaded` or `ResizeObserver`), and when `showLoadOlder` short-circuits on `loadOlder` false and leaves the render unsubscribed from `isLoaded`. Move `resetCount` into `this.state`. Reading it in the effect's dependency array now subscribes the render to it (OWL subscribes the `useState` proxy's render callback on every read, wherever it happens), so a `reset()` bump re-renders and re-runs the mirror to re-sync `mountedAndLoaded` with `isLoaded`. Bump it only when `isLoaded`: `applyScroll` resets on every patch while `!isLoaded`, so an unconditional bump would spin the render loop during loading; the guard re-arms only in the case that heals. https://runbot.odoo.com/odoo/error/940032 Forward-Port-Of: odoo/odoo#273651
This update resolves an issue where expected working hours were incorrectly displayed for employees with variable or no set schedules. The fix ensures that expected hours are only shown when a standard schedule exists, improving the accuracy of timesheet reporting. This change simplifies timesheet management for all employees.
Original PR description
**Steps to reproduce:** 1. Create an employee without a fixed working schedule. 2. Configure the employee with variable hours per day, per week, or no working hours at all. 3. Open the Timesheet Assistant or the Timesheet systray. 4. Observe that expected hours are displayed (over 0h 00m or over 24h 00m). **Cause:** Expected working hours were always computed and displayed, even for resources without a fixed schedule. **Fix:** Only compute expected working hours when the employee has a fixed or average schedule, and rely on the computed working hours to control the display of expected hours while keeping total hours always visible. task-6321760
This update fixes an issue where clicking links within a reply message didn't open them in a new browser tab. Now, links from parent messages will correctly open in a new tab, improving the user experience when navigating between conversations. This enhancement ensures users can easily access related information without leaving the current message.
Original PR description
Before this commit, clicking on a link in a parent message was not opening it in a new tab. Now, the target and rel attributes of the parent message are passed to the inline body opening the link in a new tab if it was the case in the parent. task-6326242 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a problem where completed documents in the sign module didn't always have consistent access rights. The fix ensures that completed documents accurately reflect the correct permissions, improving data integrity and security. This change primarily impacts the sign module's functionality.
Original PR description
Forward-Port-Of: odoo/enterprise#121576
This update fixes a potential issue where sales from European companies to Northern Ireland (XI) were incorrectly including intra-community taxes. The change adds a check to ensure these transactions are treated as standard third-country sales, aligning with tax regulations. This ensures accurate reporting and compliance.
Original PR description
…stomers The services sales done from a European company to a Northern Ireland (XI) company should not contain intra-community taxes but should be treated as third country (non-EU) transactions. We solve it by adding a check in the EC Sales List return that is only visible when a wrong record occurs. task-6007931 Forward-Port-Of: odoo/enterprise#121487
This update resolves an issue where users were incorrectly suggested as recipients after unfollowing a record in chatter. The fix ensures that the user is no longer added to the recipient list when unfollowing, preventing redundant suggestions and improving the user experience. This ensures a cleaner and more intuitive interaction.
Original PR description
### Steps to reproduce: - Open any mail thread in chatter - Click the "Send To" button once - Click "Unfollow" - You will be a suggested recipient ### Cause of Issue: The suggested recipient generation did not filter out the current user. When the user unfollows, `_message_get_suggested_recipients` is called when storing the thread, and since the user is no longer on the followers list, they get added back as a suggested recipient. https://github.com/odoo/odoo/blob/b4c7247ff218fb850fd91af3e2baa726a82d439c/addons/mail/models/models.py#L467-L468 ### Fix: Since followers are excluded from suggested recipient candidates in the mail thread, and the current user should be excluded when they unfollow, the current user is excluded altogether. This means the current user will not be suggested as a recipient again unless they re-follow the record. opw-6122351 Forward-Port-Of: odoo/odoo#269611
This update resolves a technical issue within the French tax processing module (l10n_fr_pdp) that was preventing accurate reporting. The fix corrects a flawed SQL query triggered when a specific date calculation failed, ensuring reliable data processing for French businesses. This improves the overall accuracy of tax-related reports.
Original PR description
Fixes _force_update_l10n_fr_f10_moves(). It would create a SQL query that compares a date to a bool when _pdp_get_flow_10_start_date() returned None. Forward-Port-Of: odoo/odoo#273006
This update fixes an issue where the number of expenses linked to a sales order was inconsistent, leading to confusion when using the smart button to view related expenses. The change now accurately counts all expenses associated with a sales order, ensuring the smart button displays the correct number of expenses and provides a reliable view.
Original PR description
**Before this commit** Only expenses that generated a sale order line on an SO would be counted in that SO's count of expenses, introducing confusing behavior with the smart button on the SO form view that would take the user to a list of all expenses that have anything to do with the current SO. **After this commit** We return to the behavior that was present in Odoo 18.1 where all expenses that are associated with a SO show up in that SO's "expense_count", making the number in the smart button consistent with the number of expenses that will be fetched when clicking on it. opw-6309575 Forward-Port-Of: odoo/odoo#272287
This update fixes an issue where discount code descriptions weren't consistently translating across all languages in Odoo. Now, changes made to a discount code's description will automatically update the corresponding product name in all supported languages, ensuring accurate and consistent messaging for customers.
Original PR description
### Steps to Reproduce 1. Activate any other language (ex. FR) 2. Create a new Discount code in Discount & Loyalty 3. Change your user language preference to FR, open the newly created loyalty…
### Steps to Reproduce 1. Activate any other language (ex. FR) 2. Create a new Discount code in Discount & Loyalty 3. Change your user language preference to FR, open the newly created loyalty reward, and change the Description on Order to Test Discount for both languages 4. Navigate to the backend Product Variants menu and observe how its name did not translate in English ### Description of the issue/feature this PR addresses: **Issue:** When you edit a translation for a loyalty.reward description in a multi-language setup, the product name (`discount_line_product_id.name`) fails to receive the complete translation in all languages. It only updates the current language. **Solution:** Override the 'update_field_translations' method on the loyalty.reward model. When changes are saved for the 'description' field on the discount code, intercept the payload and mirror directly at the discount product's `name` field. ### Current behavior before PR: Updating the reward description only updates the current language and all other languages do not change. ### Desired behavior after PR is merged: For all languages in which changes are made in a discount code's description, the discount line product name will reflect the same changes. opw-6314760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#271680
This update resolves an issue where self-ordering table references were being lost when a self-order was created. The fix ensures that the original table link is maintained, allowing users to correctly associate and manage their self-ordered items. This improves the reliability of the self-ordering feature within the POS system.
Original PR description
Steps to reproduce: --------------- - Enable QR Menu & Ordering in POS - Enable Service at Table - Create a self-order from a table QR - Validate/pay the order from the POS Cause: ----------- The write override unconditionally `table_id` to `self_ordering_table_id`, even when `table_id` was falsy, clearing the original self-order table link. Fix: ---------- Only update `self_ordering_table_id` when `table_id` is explicitly set and truthy. Task-6272642 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268459
This update fixes an issue where customer addresses were excessively long in form view titles and breadcrumbs, making navigation difficult. The change ensures only the customer's name is displayed, aligning with how other related fields are formatted. This improves the user experience by providing clearer and more concise navigation.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272550 Forward-Port-Of: odoo/odoo#272059
This update ensures that employees taking sick leave without a certificate receive the appropriate commission loss, aligning with Belgian payroll regulations. Previously, this calculation was missing, leading to potential inaccuracies in commission payments. This fix improves payroll accuracy and compliance.
Original PR description
Sick time off without certificate should grant loss on commissions if relevant
This update fixes an issue where the floor plan selector overlapped other elements in the restaurant POS interface. By adding horizontal scrolling, the floor plan is now displayed correctly, regardless of the number of floor plans available, ensuring a better user experience for restaurant staff.
Original PR description
In this commit: ---------------- - Added horizontal scrolling for the floor selector when multiple floor plans are available, preventing it from overlapping other components. Task: 6356983
This update fixes a minor issue where the website quiz completion message wasn't clear or helpful. Now, users will see a positive and informative message confirming their quiz success. This improves the overall user experience for event registration.
Original PR description
opw-6332274 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#272593 Forward-Port-Of: odoo/odoo#272371
This update adjusts how the product list appears on tablets. Previously, it was always displayed in a condensed format. Now, it will display the full product list on tablets with screen sizes between 768px and 991px, improving usability and presentation.
Original PR description
Previously, the product list was rendered in "small display" mode for all screen sizes below the medium breakpoint (< 992px). However, some small tablets are able to fully display the product list at the medium breakpoint (≥ 768px and ≤ 991px). After this fix, "small display" mode is only applied when the screen width is below 768px. Task.6251934 Community: https://github.com/odoo/odoo/pull/266704 Forward-Port-Of: odoo/enterprise#120777 Forward-Port-Of: odoo/enterprise#119534
This update allows users to define default values for specific fields within Odoo, but only for fields they are authorized to access. This ensures data consistency and simplifies workflows by allowing users to pre-populate fields with information that is appropriate for their roles.
Original PR description
Users should be able to set default values only for fields they have access to. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273619 Forward-Port-Of: odoo/odoo#273089
This update restores essential tests related to the flow of transactions within the l10n_fr_pdp_pos module. These tests were temporarily removed during a recent integration of e-reporting and e-invoicing features. Ensuring these tests are back in place improves the reliability and accuracy of the POS system.
Original PR description
During the merge of l10n_fr_pdp e-reporting and e-invoicing, some tests had to be removed. Task-6296356 Forward-Port-Of: odoo/odoo#273329 Forward-Port-Of: odoo/odoo#271294
This update fixes an issue where GS1-compliant product barcodes were incorrectly interpreted, leading to inaccurate quantity updates during scanning. When the 'Default GS1 Nomenclature' setting is enabled, the system now correctly processes these barcodes as product scans, ensuring accurate inventory tracking. This improves the reliability of the barcode scanning functionality.
Original PR description
In certain cases the barcode of a product could be a valid standalone GS1 sequence. In that case it needs to be be correctly interpreted as a product scan. ### Steps to reproduce: - In the settings…
In certain cases the barcode of a product could be a valid standalone GS1 sequence. In that case it needs to be be correctly interpreted as a product scan. ### Steps to reproduce: - In the settings enable "Default GS1 Nomenclature" - Create a storable product P with the barcode 3701762412212 - Create and confirm a delivery for 2 units of P and set the qty to 2 - Go to the barcode app and open your delivery - Scan 3701762412212 > The line of P is now selected with a quantity of 1/2 - Scan 3701762412212 #### > A new line is created for 1762411 units ### Cause of the issue: According to the GS1 nomenclature, the barcode 3701762412212 matches the scan of a quantity of "1762412" units of the lot name "2". As the scan of the of the product match a pattern for the GS1 nomenclature before matching a product, its barcode data is expected to be reset by these lines: https://github.com/odoo/enterprise/blob/7cceddaf086d849b8e2121e1023ef3479397534f/stock_barcode/static/src/models/barcode_model.js#L1320-L1324 In order to bypass the GS1 parser and to add 1 unit of the product. This is what happen on the first scan. However, performing the first scan also selects the associated line and, hence on the second scan the lines just above this check do set the product to match the product of the current line: https://github.com/odoo/enterprise/blob/7cceddaf086d849b8e2121e1023ef3479397534f/stock_barcode/static/src/models/barcode_model.js#L1294-L1320 In particular, we do not bypass the result provided by the GS1 parser and add `1762412` units of the product. opw-6175621 Forward-Port-Of: odoo/enterprise#122256 Forward-Port-Of: odoo/enterprise#120035
This update fixes a caching issue that occasionally caused outdated information in the HR system. By automatically updating a version number with each data change, the system now ensures that the most current information is always displayed, improving data accuracy and reliability for HR users. This prevents future similar errors.
Original PR description
There was yet another issue with the cache but related to the contract_date_start field. To prevent any issues like this to arise again, the version_revision will have the write_date to invalidate cache everytime the model has been written to. task-6326052 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#273516 Forward-Port-Of: odoo/odoo#272855
This update resolves an issue where control panel actions were incorrectly displayed when selecting documents for attachment or linking. The change ensures that these actions are now hidden within the document selection dialog, improving the user experience and streamlining document management workflows. This was a minor bug fix.
Original PR description
When selecting documents for attachment/link, control panel actions were displayed upon selection. The document selection dialog uses the secondary documents view introduced in: https://github.com/odoo/enterprise/pull/89030/changes/f93c159c106d1dde70910ec590f8739e549b19cf Several document management actions were already hidden through the `documents_view_secondary` context, but `DocumentsAction` was still displayed upon selection. Hide `DocumentsAction` in the secondary view. Task-6236888 Forward-Port-Of: odoo/enterprise#119219
This update fixes a visual issue where the 'Unmatched' section of the timesheet grid appeared even when it contained only temporary 'away from keyboard' events. The change ensures the header only displays if there are actually visible entries, resulting in a cleaner and more professional timesheet view for users. This improves the overall user experience.
Original PR description
The Unmatched group's header renders even when its only entries are afk events, since those are filtered out at display time but still counted when checking if the group has content. With this PR, we first check if a group has visible content before displaying the header Task-6348666
This update corrects a restriction in the Italian electronic invoicing system (l10n_it_edi) that prevented multiple pension fund taxes from being applied to a single invoice line. The fix aligns with Italian regulations regarding pension fund taxes, ensuring accurate reporting for IT companies. This change avoids errors during invoice printing and sending.
Original PR description
### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi_withholding 2. Switch to IT company 3. Create 2 taxes with a Pension fund type set (in Advanced Options) 4. Create an invoice…
### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi_withholding 2. Switch to IT company 3. Create 2 taxes with a Pension fund type set (in Advanced Options) 4. Create an invoice and set on the same line the 2 taxes created 5. Click on send and print and see the error: Invoices must have at most one Pension Fund tax set per line. (even if it's not true) ### Cause of the issue: The following function check how many taxes we have per line but this limit is incorrect because it is accepted by the Italian electronic invoicing specifications to have also more than 1 tax. https://github.com/odoo/odoo/blob/bd095fe286930acc54d85bdf7f92af15569f5b82/addons/l10n_it_edi/models/account_move.py#L1268-L1273 ### Reference documentation: 1. [Art. 10 della Legge n. 183_2011, successivamente integrato dal D.L. n. 1_2012 (art. 9-bis)..pdf](https://github.com/user-attachments/files/29056003/Art.10.della.Legge.n.183_2011.successivamente.integrato.dal.D.L.n.1_2012.art.9-bis.pdf) 2. Following image: <img width="823" height="580" alt="estrattoEppi" src="https://github.com/user-attachments/assets/e79be16f-651e-467a-84f4-8400185ceea4" /> opw-6264685 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273040 Forward-Port-Of: odoo/odoo#269456
This update corrects a technical issue that prevented proper log metadata retrieval in Odoo versions 19.0 and later. The fix ensures that the necessary argument is passed to the get_log_metadata function, resolving a problem that could have impacted log data access. This ensures consistent log functionality across all Odoo releases.
Original PR description
During the forwardport, it was missed that get_log_metadata needs an argument starting from 19.0. Forward-Port-Of: odoo/odoo#273694
This update resolves an issue that prevented users from correctly shortening task deadlines within the Gantt chart view. The problem occurred when a task had no successors, leading to an error during deadline calculations. This fix ensures that deadline adjustments, both extending and shrinking, now function reliably.
Original PR description
## Current behavior: In the Project's app, switch to Gantt chart's view, when changing the deadline of a single task by shrinking its right edge, the server throws `ValueError: max() iterable…
## Current behavior: In the Project's app, switch to Gantt chart's view, when changing the deadline of a single task by shrinking its right edge, the server throws `ValueError: max() iterable argument`` is empty when calling end_date = max(candidates.mapped(stop_date_field_name)). ## Steps to reproduce: 1. In version 19.0 and above, install Project app 2. Create a project and only 1 single task 3. Switch to Gantt chart view 4. Try changing the deadline of a task by dragging its right edge 5. Observe that extending the task's deadline by dragging to the right works fine, but shrinking the deadline by dragging to the left will cause server to throw RPC_ERROR: Odoo Server Error and ValueError: max() iterable argument is empty. ## Cause of the issue: - A task with NO successors will cause candidates gathered via dependency_inverted_field_name to be empty. - The empty candidates recordset then get called by max(candidates.mapped(stop_date_field_name)), which is the reason causing error message ValueError: max() iterable argument is empty. opw-6283566 Forward-Port-Of: odoo/enterprise#120375
This update fixes an issue where the Intrastat report was incorrectly cropping the bill name, preventing full visibility of key information like the hyphenated identifier. The fix adjusts a regex pattern to now correctly handle hyphen characters in bill names, ensuring accurate reporting.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update fixes an issue where images inserted into audit reports weren't appearing in the generated PDF documents. The change ensures images are properly rendered within the PDF, improving the quality and usability of reports. This resolves a visual discrepancy impacting report presentation.
Original PR description
Currently, when a user uses the `/file` command to insert an image into an audit report and exports the report to PDF, the image is omitted from the generated PDF. To improve the support of those blocks, we will pre-process the document and replace the embedded files that correspond to images with standard image elements before PDF generation. This will ensure that images are correctly rendered and displayed within the document's text flow in the exported PDF. Task [link](https://www.odoo.com/odoo/project.task/5115280) task-5115280 Forward-Port-Of: odoo/enterprise#121673
This update fixes an issue where replacing website icons removed their styling classes (like rounded or shadow). The fix ensures that icons in the website builder retain their original visual styles, providing a more consistent and predictable user experience. This improves the visual quality of website content.
Original PR description
Issue: Replacing an icon removes style classes applied to the original icon, such as `rounded`, `rounded-circle`, `shadow`, or `img-thumbnail`. This issue was introduced by [commit], which stopped…
Issue: Replacing an icon removes style classes applied to the original icon, such as `rounded`, `rounded-circle`, `shadow`, or `img-thumbnail`. This issue was introduced by [commit], which stopped preserving image-specific classes when replacing an image with an icon. This behavior is appropriate in the backend editor, where icons do not support these styling options. However, the same logic also affected the website builder, where icons support the same styling options as images. As a result, these classes were unnecessarily removed when replacing an icon. Steps to reproduce: 1. Add an icon with style classes such as `rounded`, `rounded-circle`, `shadow`, or `img-thumbnail`. 2. Replace the icon. 3. Notice that the style classes are removed from the new icon. Fix: Preserve these style classes when replacing icons in the website builder, allowing the newly selected icon to retain the existing visual styling. [commit]: https://github.com/odoo/odoo/commit/8638dbc21a7a3ebb3c9cc195d2249b4eb5c264ab task-[6200832](https://www.odoo.com/odoo/project/974/tasks/6200832) Forward-Port-Of: odoo/odoo#265496
This update resolves a bug that prevented barcode scanning of packages containing multiple products when specific delivery settings were enabled. The fix removes a redundant check in the barcode scanning process, allowing packages to be correctly identified as result packages. This ensures accurate picking and inventory management.
Original PR description
### Steps to reproduce: - In the settings Enable: Multi-steps Routes, Packages - Put your warehouse in delivery in 2-steps - On the Pick operation type in the barcode tab disable: "Allow extra…
### Steps to reproduce: - In the settings Enable: Multi-steps Routes, Packages - Put your warehouse in delivery in 2-steps - On the Pick operation type in the barcode tab disable: "Allow extra products" - Create two storable products P1 and P2 - On P2 > On hand > Update Quantity > New - Create a new line in WH/Output with a package POOK for 1 unit - Create a new internal transfer for 1 unit of P1 using the pick operation type so that the picking goes WH/Stock -> WH/Output - Set the quantity of the move to 1 unit and go to the barcode app - Open the Pick > Scan WH-STOCK > Scan P1 > Scan POOK #### > An error is raised: This package contains extra products and extra products are not allowed on this operation. #### Expected behavior: The package should be set as result package. ### Cause of the issue: In the `_processPackage`, a check that is done to ensure that the package scan will not add extraproduct to the picking if this operation is not allowed: https://github.com/odoo/enterprise/blob/5e4c8ecb0c644e21755570ed59cd8f6e9f618c8a/stock_barcode/static/src/models/barcode_picking_model.js#L2024-L2035 Unfortunately, this check is done just before a possible usage of the package as package dest. And, in that case, since we do not try to add any product to the picking the check is irrelevant anyway. opw-6303969 Forward-Port-Of: odoo/enterprise#121789
This update resolves a technical issue where clicking the logout button on the website preview triggered duplicate requests, resulting in a 'CSRF validation failed' error. Additionally, a test was updated to automatically enable the 'Free sign up' setting, eliminating the need for manual configuration and ensuring consistent test results.
Original PR description
### Commit 1: [FIX] website: prevent CSRF error by blocking duplicate form submission Before this commit: Clicking the logout button from the website preview triggered two simultaneous logout…
### Commit 1:
[FIX] website: prevent CSRF error by blocking duplicate form submission
Before this commit: Clicking the logout button from the website
preview triggered two simultaneous logout requests:
1. The browser performed the default form submission with a valid
`csrf_token`, destroying the session afterward.
2. During the same click event, `setupClickListener()` intercepted
the click using `closest('[action]')`, found the parent
`/web/session/logout` form, and triggered a second POST request
using `odoo.csrf_token`.
Since the session was already destroyed by the first request, the
second request resulted in a "CSRF validation failed" error.
This commit prevents the default form submission before triggering
the manual POST request, ensuring that only one request is sent.
Runbot-940403
--------------------------------------------------------------------------------------------------------------------------------
### Commit 2:
[FIX] website: enable free sign up setting in test_auth_forms_warning
Steps to reproduce:
1. Install any website related module (e.g. `website`, `website_event`).
2. Keep the default configuration and do not manually enable
'Free sign up' in Settings.
3. Run `test_auth_forms_warning`.
Before this commit: The test did not programmatically enable the
'Free sign up' setting. As a result, it failed unless a developer
manually navigated to the setting and enabled it beforehand.
After this commit: This commit explicitly enables the "Free sign up"
configuration during test execution, allowing public access to the
`/web/signup` page and ensuring the test passes without any manual
setup.
runbot-940394
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#272020Features or functions removed from Odoo
This update removes an outdated flag from the HR skills module, streamlining how time spent on skills is reported. Previously, this flag incorrectly attributed skill-related time to a separate 'Skills Management' app. This change ensures accurate reporting and simplifies the system.
Original PR description
Since hr_skills was merged with the Employees app, it no longer needs to be flagged as an application. With the changes made in the enterprise PR, this PR ensures we won't mark time spent in the skills features as coming from a "Skills Management" app. Task-6250449
5 changes
Resolved issues and error corrections
This update fixes an issue where the 'Shop' feature wasn't automatically selected when creating an eCommerce website type in the configurator. The change involved renaming a website type internally to align with the database, ensuring the preselection functionality works correctly for new and existing website setups. This improves the user experience for eCommerce website creation.
Original PR description
### Issue: When creating a website through the configurator and selecting the website type 'an eCommerce', the shop feature is not preselected as expected. ### Steps to reproduce: - Ensure that the…
### Issue: When creating a website through the configurator and selecting the website type 'an eCommerce', the shop feature is not preselected as expected. ### Steps to reproduce: - Ensure that the eCommerce module is not installed. - Navigate to Website > Configuration > Settings. - Click on the "New Website" button to create a new website. - Select the "eCommerce" option as the website type and proceed to the next step. - On the "Add Pages and Features" screen, observe that the "Shop" option is not selected by default. ### Reason: 0cb45457 renamed the website type from `online_store` to `eCommerce`, but the related feature was not updated and still references the old name. As a result, the preselection is not triggered. ### Fix: Restore the eCommerce website type's internal name to `online_store` in the configurator. This matches the value already stored in the database for existing installations, allowing the shop feature preselection to work for existing users as well, without requiring a data update. task-[6284263](https://www.odoo.com/odoo/project/974/tasks/6284263) [1]:https://github.com/odoo/odoo/pull/223724 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where GS1-compliant product barcodes were incorrectly interpreted, leading to inaccurate quantity updates during scanning. Enabling 'Default GS1 Nomenclature' now ensures that GS1 barcodes are correctly recognized as product scans, resolving a potential data discrepancy.
Original PR description
In certain cases the barcode of a product could be a valid standalone GS1 sequence. In that case it needs to be be correctly interpreted as a product scan. ### Steps to reproduce: - In the settings…
In certain cases the barcode of a product could be a valid standalone GS1 sequence. In that case it needs to be be correctly interpreted as a product scan. ### Steps to reproduce: - In the settings enable "Default GS1 Nomenclature" - Create a storable product P with the barcode 3701762412212 - Create and confirm a delivery for 2 units of P and set the qty to 2 - Go to the barcode app and open your delivery - Scan 3701762412212 > The line of P is now selected with a quantity of 1/2 - Scan 3701762412212 #### > A new line is created for 1762411 units ### Cause of the issue: According to the GS1 nomenclature, the barcode 3701762412212 matches the scan of a quantity of "1762412" units of the lot name "2". As the scan of the of the product match a pattern for the GS1 nomenclature before matching a product, its barcode data is expected to be reset by these lines: https://github.com/odoo/enterprise/blob/7cceddaf086d849b8e2121e1023ef3479397534f/stock_barcode/static/src/models/barcode_model.js#L1320-L1324 In order to bypass the GS1 parser and to add 1 unit of the product. This is what happen on the first scan. However, performing the first scan also selects the associated line and, hence on the second scan the lines just above this check do set the product to match the product of the current line: https://github.com/odoo/enterprise/blob/7cceddaf086d849b8e2121e1023ef3479397534f/stock_barcode/static/src/models/barcode_model.js#L1294-L1320 In particular, we do not bypass the result provided by the GS1 parser and add `1762412` units of the product. opw-6175621 Forward-Port-Of: odoo/enterprise#122256 Forward-Port-Of: odoo/enterprise#120035
This update resolves an issue where images inserted into audit reports weren't appearing in the generated PDF documents. The fix pre-processes the document to replace embedded files with standard image elements, ensuring images are correctly displayed within the PDF.
Original PR description
Currently, when a user uses the `/file` command to insert an image into an audit report and exports the report to PDF, the image is omitted from the generated PDF. To improve the support of those blocks, we will pre-process the document and replace the embedded files that correspond to images with standard image elements before PDF generation. This will ensure that images are correctly rendered and displayed within the document's text flow in the exported PDF. Task [link](https://www.odoo.com/odoo/project.task/5115280) task-5115280 Forward-Port-Of: odoo/enterprise#121673
This update resolves an issue where users were incorrectly suggested as recipients after unfollowing a record in the chatter interface. The fix ensures that the user is no longer added to the suggested recipient list unless they re-follow the record, improving the user experience and preventing unnecessary notifications. This change was triggered by a bug in how suggested recipients were generated.
Original PR description
### Steps to reproduce: - Open any mail thread in chatter - Click the "Send To" button once - Click "Unfollow" - You will be a suggested recipient ### Cause of Issue: The suggested recipient generation did not filter out the current user. When the user unfollows, `_message_get_suggested_recipients` is called when storing the thread, and since the user is no longer on the followers list, they get added back as a suggested recipient. https://github.com/odoo/odoo/blob/b4c7247ff218fb850fd91af3e2baa726a82d439c/addons/mail/models/models.py#L467-L468 ### Fix: Since followers are excluded from suggested recipient candidates in the mail thread, and the current user should be excluded when they unfollow, the current user is excluded altogether. This means the current user will not be suggested as a recipient again unless they re-follow the record. opw-6122351 Forward-Port-Of: odoo/odoo#269611
This update fixes a minor issue where unnecessary control panel actions were displayed when selecting documents for attachment or linking. The change ensures a cleaner and more focused document selection dialog, improving usability. This resolves a visual inconsistency related to the secondary documents view.
Original PR description
When selecting documents for attachment/link, control panel actions were displayed upon selection. The document selection dialog uses the secondary documents view introduced in: https://github.com/odoo/enterprise/pull/89030/changes/f93c159c106d1dde70910ec590f8739e549b19cf Several document management actions were already hidden through the `documents_view_secondary` context, but `DocumentsAction` was still displayed upon selection. Hide `DocumentsAction` in the secondary view. Task-6236888 Forward-Port-Of: odoo/enterprise#119219
4 changes
Resolved issues and error corrections
This update fixes a usability issue in the invoice outstanding payments widget by sorting payments in descending order by date. This ensures users can easily see the most recent payments and reduces confusion when reviewing outstanding invoices. The change was driven by a user feedback request (opw-6254080).
Original PR description
Before this commit: The invoice outstanding payments widget was not sorted by date globally, which could lead to confusion for users when viewing the widget. After this commit: This commit adds a sorting mechanism to ensure that the payments are displayed in descending order based on their date and ID. opw-6254080
This update resolves an issue where the Sale Renting module wasn't properly connected to the Gantt view functionality. Previously, the module wouldn't display Gantt views correctly. This fix ensures compatibility and proper functionality for users relying on Gantt views within the Sale Renting module, aligning with recent improvements in Odoo 19 and later versions.
Original PR description
Module was introduced without a dependency on the `web_gantt` module despite using `gantt` views. Already fixed in 19+ runbot error 237883 Forward-Port-Of: odoo/enterprise#122136
This update ensures that several Odoo community add-ons (certificate, l10n_hr_edi, etc.) are correctly licensed under LGPL-3. Previously, these modules incorrectly used the enterprise license. This change aligns with the proper licensing for community-supported add-ons, clarifying legal obligations and ensuring compliance.
Original PR description
Before this commit, the license set on manifest of some modules uses the enterprise license instead of `LGPL-3` license since it is a community module. This commit changes the license to set `LGPL-3`. Fixes #205134 Forward-Port-Of: odoo/odoo#273690 Forward-Port-Of: odoo/odoo#273597
This update optimizes how Odoo forms respond to changes. Previously, opening a form triggered onchange methods multiple times for related field updates. This fix reduces redundant calls, leading to faster form loading and a smoother user experience. It's a small but important improvement for overall performance.
Original PR description
When an onchange method depends on several fields that all change at once (for example two fields that both have a default value), opening the form triggers that method once per field, even though a single call would suffice. This adds a per-pass set of already-applied onchange methods so that, within the same batch of changed fields, each method is invoked only once. Note this does not guarantee a method is called exactly once overall: it may still run again in later onchange passes; we only remove the redundant calls within a single pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251813
9 changes
Enhancements to existing features
This update enhances how event names are displayed in the Calendar and Gantt views within the Appointment app. When managing capacity, the display name now includes the number of reserved or attending participants, providing clearer event information. This change improves the user experience by making it easier to understand event details.
Original PR description
- Removed the default_name of the event.
- The following display name will be shown in the Calendar and
Gantt views when an event is opened through the Appointment app.
Case 1: Manage capacity is on: EventTitle - total_capacity_reserved 🪑.
e.g., EventTitle = demo, total_capacity_reserved = 4, then display_name
will be "demo - 4🪑".
Case 2: Manage capacity is off: EventTitle - totalAttendees 👤.
e.g., EventTitle = demo, totalAttendees = 4 then display_name
will be "demo - 4👤".
Task-6194877Resolved issues and error corrections
This update resolves a tour test failure in the Belgian HR contract salary module. The issue stemmed from a configuration that incorrectly expected an identification number or NISS when the core payroll module was not installed. The fix ensures the necessary fields are displayed correctly when the Belgian payroll module is active, improving test reliability.
Original PR description
[FIX] l10n_be_hr_contract_salary: fix NISS runbot error in salary config Bug reproduction: 1 - Get 19.4, only install hr_contract_salary and execute tour test hr_contract_salary_employee_flow_tour 2…
[FIX] l10n_be_hr_contract_salary: fix NISS runbot error in salary config
Bug reproduction:
1 - Get 19.4, only install hr_contract_salary and execute tour test hr_contract_salary_employee_flow_tour
2 - When only single app is installed without installing l10n_be_hr_contract_salary, the tour test fails
Bug cause:
1 - When the employee's company's country is belgium we were showing NISS instead of identification number.
2 - But NISS field is appended in l10n_be_hr_contract_salary and if you do not install, there is no identification number and NISS.
3 - That's why the test fails (it looks for identification number or NISS but none of them is there)
Bug solution:
1 - I moved the code of hiding identification number or hiding NISS to the l10n_be_hr_contract_salary. So, when only hr_contract_salary is installed, identification number field won't get hided.
task - 6333129
runbot error link: https://runbot.odoo.com/odoo/error/941044
Forward-Port-Of: odoo/enterprise#121800This update removes the ability to quickly create new journals from the POS payment method form. The accounting team requested this change to ensure users only create journals within the dedicated accounting application, improving process control and data accuracy. This change applies locally and can be extended where needed.
Original PR description
Currently on the pos payment method form, if you click "Select more" on the journal field, you will see two buttons 'New' & 'Create New'. Steps to reproduce: ------------------- * Open any pos…
Currently on the pos payment method form, if you click "Select more" on the journal field, you will see two buttons 'New' & 'Create New'. Steps to reproduce: ------------------- * Open any pos payment method * Select the journal field * Select "Search more" > See two creation buttons Why the fix: ------------ One button is the standard "On search more" button which can be hidden using options such as no_create, no_create_edit, ... The second button is defined on the list view for journals and since the search more uses the list view it shows the button as well. Currently we can do that with a context key to ensure that on the "real" list view it's still visible. Why do we want to hide those buttons? Asked the R&D accounting team, it should not be allowed to create journals on the fly. You should only be able to create them inside accounting app. This behavior is not limited to this view but will only be applied locally. The fix can however be applied everywhere where needed. Before the fix: ------------------- <img width="700" height="417" alt="image" src="https://github.com/user-attachments/assets/ca11ea13-c38e-40a1-9848-cbc5edc6226e" /> <img width="1507" height="887" alt="image" src="https://github.com/user-attachments/assets/1cde5d3b-3372-4aca-b5d0-2319bd82c1de" /> After the fix: ---------------- <img width="707" height="474" alt="image" src="https://github.com/user-attachments/assets/01dc7b42-43d6-4b18-a12d-54330d51b92b" /> <img width="1457" height="870" alt="image" src="https://github.com/user-attachments/assets/ff387d3f-f59c-47ad-abfe-a2003669db1a" /> opw-6131231 Forward-Port-Of: odoo/enterprise#120379
This update resolves a technical issue that caused build failures in certain testing modes. The team moved assertions to their correct locations, ensuring consistent build behavior across all environments. This improves the reliability of our software development process.
Original PR description
Oversight of: https://github.com/odoo/enterprise/pull/98569 Some assertions were put in the wrong module, making the builds work in "all apps" mode but fail in "single app" mode. This commit moves assertions where they belong. Task-6353709 Forward-Port-Of: odoo/enterprise#122486
This update fixes a vulnerability in the Odoo test for Brazilian Electronic Invoice (BR-EDI) processing. The previous test was overly reliant on a specific message format, making it prone to failure due to minor changes in invoice data. The fix now searches for the key information across all invoice messages, ensuring more reliable test results.
Original PR description
The test was relying on a fixed chatter message position. Another tracking message can be inserted before the informative taxes message, so the assertion may read the wrong body. Search the expected informative taxes content among all invoice messages instead. Broke the runbot of : https://github.com/odoo/odoo/pull/273569
This update resolves a technical problem where web studio's technical names were incorrectly generating `x_studio_<type>_NaN` values. The fix ensures these names are generated correctly, preventing potential errors and improving the stability of the web studio functionality. This change ensures consistent and reliable technical naming conventions.
Original PR description
The PR #119993 introduced a bug leading to technical names being named `x_studio_<type>_NaN`. This commit fixes the issue. A `_NaN` increment is only possible if the increment reach int max size. task-6353814 Forward-Port-Of: odoo/enterprise#122594
This update corrects a warning in the planning module that occurred when trying to modify certain settings. The change ensures data restrictions are applied correctly, preventing potential issues with data integrity. This improves the stability and reliability of the system.
Original PR description
The `@api.constrains` decorator was listening to `company_id`, which is a readonly related field. This triggers an ORM warning ("parameter 'company_id' is not writeable").
Swapped the constraint trigger from `company_id` to `warehouse_id`. Since the company is fully dependent on the warehouse, this safely achieves the exact same trigger logic.
build: [940408](https://runbot.odoo.com/odoo/runbot.build.error/940408)
Forward-Port-Of: odoo/enterprise#121584Code cleanup and technical improvements
This update streamlines the process of setting up test environments for Odoo modules. By separating environment configuration from app creation, it simplifies future updates and makes it easier to remove test environments. This change improves the reliability and maintainability of our automated testing.
Original PR description
* account_reports,documents,documents_spreadsheet,knowledge,obox,room, sign,sign_itsme,spreadsheet_dashboard_edition,spreadsheet_edition, test_spreadsheet_edition,web_studio This commit splits the app/component creation and the env creation at user pov by changing how we populate the env in tests. Now, we have to configure the env before creating the app. This will make the env removal easier in the future.
This update adjusts the Point of Sale (POS) modules and related components to align with the new OWL 3 properties syntax. This change ensures compatibility with evolving standards and improves the system's ability to handle data related to POS transactions.
Original PR description
In this commit: =============== - Update `point_of_sale` and related modules to use the OWL 3 props syntax. Task-6260271 Related Community PR: https://github.com/odoo/odoo/pull/270730
2 changes
Resolved issues and error corrections
This update ensures PDF signatures maintain their original appearance by locking editable fields during the signing process. Previously, a flawed method of flattening fields altered the PDF's look. This change prioritizes a consistent user experience while a future upgrade to pypdf will enable true PDF field flattening.
Original PR description
Currently, we flatten fields in a naive way which does not handle many edge cases and can alter the PDF appearance for users. We could use pypdf to handle production-grade flattening, but Odoo's `pypdf` dependency (5.4.0) does not support native form field flattening (which was introduced in 5.8.0). To resolve this, rather than flattening, we lock the interactive fields so they are no longer editable while signing, which perfectly maintains the original appearance. In the future, when we support higher pypdf versions, we can truly flatten the PDF to provide a better user experience. task-6037759
This update fixes a stability issue in the payroll testing process. By using a separate, dedicated employee version for tests, we've eliminated interference from existing payroll data, ensuring more reliable test results. This improves the overall quality and consistency of our payroll system.
Original PR description
Use a dedicated employee/version for the percentage computation test instead of Rahul, whose existing payroll values affect copied version data. Define the test amounts in common and reuse `employee.version_id` in the test, so percentages are derived from amounts without changing payroll behavior. task-6340923
11 changes
Resolved issues and error corrections
This update resolves an issue where draft and cancelled invoices were incorrectly labeled with 'PROFORMA' when not posted. This change ensures that PDF invoices generated for these states are accurate and consistent, improving the user experience and report generation. The fix was driven by a specific user request (opw-6300163).
Original PR description
**Steps to reproduce:** - Create an invoice - Do not post it - Download PDF through the cog Actions icon - Cancel the invoice - Download PDF through the cog Actions icon **Issue:** The draft and cancelled invoices are prefixed with PROFORMA. PROFORMA on a invoice that is not posted doesn't make sense. opw-6300163 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug by storing the number of replies from Twitter/X posts within Odoo. Now, users can see the total number of comments alongside other engagement metrics for Twitter posts, providing a more complete view of performance. This enhancement ensures accurate reporting on Twitter activity.
Original PR description
Twitter/X tweet metrics returned by the API include the number of replies in the `public_metrics.reply_count` field. This commit stores that value on social stream posts so the comments count can be displayed alongside other engagement metrics. API Documentation: https://docs.x.com/x-api/fundamentals/metrics#post-metrics Task-6251172
This update optimizes how Odoo forms respond to changes. Previously, opening a form triggered onchange methods multiple times for related field updates. This change reduces redundant calls, resulting in faster form loading and a smoother user experience. It's a small but important performance enhancement.
Original PR description
When an onchange method depends on several fields that all change at once (for example two fields that both have a default value), opening the form triggers that method once per field, even though a single call would suffice. This adds a per-pass set of already-applied onchange methods so that, within the same batch of changed fields, each method is invoked only once. Note this does not guarantee a method is called exactly once overall: it may still run again in later onchange passes; we only remove the redundant calls within a single pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251813
This update corrects a formatting issue in Chilean export invoices where data was incorrectly aligned in the customs information table. The fix ensures that all columns remain in the correct position, regardless of whether the 'Origin Port' or 'Destination Port' fields are populated. This prevents data from appearing under the wrong column headings, improving invoice accuracy.
Original PR description
### Issue: On Chilean export invoices, the customs information table may display data in the wrong columns When `Origin Port` or `Destination Port` is not set, the corresponding `td` is omitted by…
### Issue: On Chilean export invoices, the customs information table may display data in the wrong columns When `Origin Port` or `Destination Port` is not set, the corresponding `td` is omitted by QWeb, causing the remaining columns to shift left This results in `Qty of Packages` appearing under `Origin Port` or `Destination Port` in the printed document ### Cause: `l10n_cl_port_origin_id` and `l10n_cl_port_destination_id` have no default value and are optional fields `t-out` on a falsy value omits the `td` entirely in QWeb, breaking the column alignment Adding `or ''` ensures an empty `td` is always rendered, preserving the table structure regardless of whether the fields are set ### Steps to reproduce: - Install `l10n_cl_edi_exports` and switch to CL Company - Create an Invoice (any customer, any line) - In the gear menu, select Print > Invoice PDF copy (Chile) Before the fix, `Qty of Packages` appears under `Origin Port` when neither port field is set opw-6304670
This update optimizes how Odoo tracks email interactions within the Knowledge base. The change adjusts query counts based on a new savepoint mechanism introduced during email sending, leading to more efficient data processing and improved performance. This results in faster response times when accessing knowledge articles.
Original PR description
Related to https://github.com/odoo/odoo/pull/272958
This update ensures the Account EDI Proxy Client is configured for demo environments only, aligning with the existing setup in the account_peppol module. This prevents unintended use with production data and simplifies testing within the demo system. It corrects a configuration issue that was causing the proxy client to incorrectly target production users.
Original PR description
The system parameter is already brought to demo in account_peppol module. But the current users are not for pdp. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent test failure related to holiday accrual calculations in the HR module was caused by a discrepancy in how dates were being handled in future builds. This fix adds a temporary 'freeze time' to the 2026-03-01 date, ensuring accurate accrual calculations moving forward. This prevents incorrect holiday allocation figures.
Original PR description
Problem ------------------------ test_department_accrual_allocation was failing due to the allocation being calculated as 26 days instead of 21 in faketime builds set to 2027. This was because the accrual plan was set to accrue 21 days per year and carry over 5 days from the previous year. Since the allocation was created on Jan 1st 2026, all 2027 builds were calculating the allocation to have 5 extra days. Solution ---------------------- Added freeze_time for 2026-03-01 to ensure the date stays the same. runbot-939344 task-6344033 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 clarifies extra hours reporting by renaming confusing labels like 'Difference' and 'Balance' to 'Worked Extra Hours' and 'Validated Extra Hours'. This change ensures consistent and understandable reporting across all Odoo HR attendance views, improving data clarity for users.
Original PR description
The reporting labels "Difference" and "Balance" are confusing because "Difference" tracks system-qualified overtime while "Balance" represents accepted overtime hours. There is also a lack of consistency across views. This commit renames these fields to "Worked Extra Hours" and "Validated Extra Hours" to harmonize the naming everywhere task-6352142 Description of the issue/feature this PR addresses: Confusing and inconsistent naming for extra hours Current behavior before PR: - Reporting uses "Difference" and "Balance". - Views use inconsistent labels. Desired behavior after PR is merged: Labels are consistently named "Worked Extra Hours" and "Validated Extra Hours" everywhere. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a visual issue in the account module where the dropdown for account types remained in light mode when dark mode was enabled. The change ensures the dropdown background matches the dark mode theme, providing a consistent and professional user experience. This improves visual consistency across Odoo's interface.
Original PR description
Steps to reproduce: - Install `account` module - Enable dark mode - Open `view_account_form` to create a record - On the Accounting page, open type dropdown - The dropdown background remains in light mode This commit applies $dropdown-bg on `o_field_account_type_selection` as in odoo/odoo@0cd148eb389078c896aaa719af5733d05377fd1c Forward-Port-Of: odoo/odoo#271352
This commit addresses a minor issue with a test related to the l10n_it_edi_withholding module. The change ensures the test accurately reflects the functionality of a previously merged PR. This ensures the ongoing stability and reliability of the Italian tax reporting feature.
Original PR description
This commit just want to correct a test of a PR already merged. Original commit: 78ffb5a2e63401123e4506056493e52cf3e69953 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a performance issue in the Point of Sale system. Previously, fetching order data involved multiple, separate requests, which slowed down the system. The change combines these requests into one, resulting in faster order retrieval and a smoother user experience.
Original PR description
Issue: pos_self_order overrode getServerOrders() to add a separate loadServerOrders() call for it's own orders before delegating to super, resulting in up to an additional sequential RPCs on every order fetch. Fix: Extract the base query domain into a new overridable getServerOrdersDomain() method. Each module overrides it to OR in its own domain via Domain.or([super.getServerOrdersDomain(), extraDomain]), so all orders are fetched in a single RPC call instead of three. Task-6284860 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
3 changes
Resolved issues and error corrections
This update corrects a display issue where the shipping address option remained visible on the website even when shipping addresses were disabled in the settings. The fix ensures that the shipping address field is hidden correctly when this setting is toggled, improving the user experience and preventing confusion.
Original PR description
Issue: --- Shipping address option will be still shown if the shipping address is disabled in setting. Steps to reproduce: 1- Disable shipping address in setting. 2- Navigate to shop and checkout using a public user. You can see when filling address, the shipping address option is still shown. Cause and Fix: --- The group is not added to `Ship to the same address` checkbox. Even if we add the group, the whole t-if/t-else block will not be taken, and we need explicitly set use_same when the group is not present. opw-6193161
This update fixes a bug where GIF images weren't visible in the feed comment modal. The system now correctly displays GIFs from Facebook, ensuring users can share richer content within the feed. This improves the user experience and allows for more engaging comments.
Original PR description
Bug === When opening the comments modal of the feed view, the GIF images are not visible. Technical ========= The API does not return the GIF, it only returns the MP4 and the JPG. So we show the fixed image, and when clicking on it, it opens the video on Facebook. Task-6241607 Forward-Port-Of: odoo/enterprise#118619
This update corrects a technical issue that was causing a misleading error message when generating invoices with Co-Contractant tax rates. The fix ensures the note is only added to the invoice when the tax amount is zero, accurately reflecting the Co-Contractant's fiscal position and avoiding unnecessary alerts.
Original PR description
We were raising a UserError because we were putting the note even if the tax amount was different from 0. But in fact, it can be normal to have 0% cocontractant tax and normal rate at the same time on an invoice, which would have the fiscal position Co-Contractant. So remove these UserError, but only apply the note when the tax amount is 0 opw-6302806 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr