Daily updates from Odoo
Monday, March 16, 2026
24 changes · saas-19.2
Resolved issues and error corrections
This update resolves an issue where non-admin users accessing the Accounting Dashboard from a child company with a currency-set journal would encounter an access error. The fix bypasses specific record rules when a currency is present, allowing the dashboard to function correctly for all users and journal types.
Original PR description
Issue before this commit: Opening the Accounting Dashboard from a child company as a non-admin user raises an Access Error when the journal has a currency_id set. The error occurs with journal items which currency id is set Steps to Reproduce ([video](https://drive.google.com/file/d/1Spt5zruNAVAvSdQYk-RuifzynyIfBOLK/view?usp=drive_link )): - Install the account module. - Create child company - Create journal journal with a currency set - Log in as a non-admin user. - Select only the child company - Open Accounting (Dashboard) Cause of the Issue: When the journal does not have currency_id, the system reads company data using sudo(), so no access issue occurs. When the journal has currency_id, sudo() is not used, and reading the company name triggers an Access Error. With This Commit: Bypass record rules when reading the company name if the journal has a currency_id. opw-6017296 Forward-Port-Of: odoo/odoo#253844
This update fixes a technical issue within the Odoo Studio's form editor that previously caused crashes when interacting with certain fields. The change ensures the sidebar correctly displays information, preventing errors and improving the user experience. This resolves a bug impacting form editing functionality.
Original PR description
In studio, form editor: click on a field and check the sidebr is correct Click on another field, one that has the widget many2many_tags. Before this commit, there was a crash because the internals of the sidebar were computed with the wrong props (the old ones instead of the new ones) After this commit, there is no crash opw-6004776 Forward-Port-Of: odoo/enterprise#110391 Forward-Port-Of: odoo/enterprise#110284
This update addresses a critical issue where switching tabs in the mass mailing editor would lose user changes due to delays in updating the email HTML. The fix introduces a new strategy to ensure changes are saved promptly, preventing data loss and improving the editor's responsiveness. Additionally, the code was optimized to eliminate flickering during HTML conversion and improve the overall stability of the mass mailing workflow.
Original PR description
Main issue: Prior to this commit, updateValue would guarantee that `body_arch` and `body_html` were always updated in sync (to avoid an inconsistent state where the user thinks they updated the…
Main issue:
Prior to this commit, updateValue would guarantee that `body_arch` and
`body_html` were always updated in sync (to avoid an inconsistent state where
the user thinks they updated the mailing, and they see the new html in the
editor, but the email html is obsolete and would be sent as is).
However this caused another issue, that the user would lose their work when
switching tab in the Notebook, because computing the `body_html` may be slower
than the view patch to switch tab (`updateValue` is interrupted). In such a
case, neither `body_arch` nor `body_html` was updated on the record, and when
the user comes back to edit them, they see that all changes were lost.
To prevent this, a new strategy is adopted:
- `body_arch` is now updated as soon as possible to save the latest user
changes
- `body_html` is set to an empty string to avoid inconsistencies, and in order
to trigger `convert_inline` automatically the next time the
`mass_mailing_html_field` is instanced without any user action.
- after `convert_inline`, if `updateValue` was not aborted, the record is
updated again with the new value for `body_html`
Minor issues:
1) Prior to this commit, the iframe would flicker during `convert_inline`
because it was done inside that very iframe, and the `convert_inline` needs a
specific width (1320px) for it to work properly, meaning that if the iframe was
not at that specific dimension, it was resized temporarily for that process.
This commit introduces hooks to execute the `convert_inline` process in a
separate iframe, outside of the user view, which removes this flickering.
2) Prior to this commit, assets for readonly/basic editor/builder were all
loaded inside the iframe, and then toggled on/off depending on which were
needed. Since the `convert_inline` process is moved in another iframe, it's as
good time as any to deprecate this toggling (as it could be a bit unreliable and
could cause some flickering when unloading/reloading the style). There is now a
separate asset bundle for the 3 use case, and only one of them is loaded per
iframe depending on the needs.
3) Prior to this commit, `body_html` was hard-coded as a dependency of the
`mass_mailing_html_field`, and that dependency lacked the `required` attribute,
which should depend on the value of `body_arch`. The dependency is now added in
the related views, and the field is now generic. This also prevents the user
from leaving the view if `convert_inline` could not be completed successfully.
4) Prior to this commit, switching to another view through `doAction` could
throw an error if the field was dirty, as the `form view` would be destroyed
before `commitChanges` had the time to be completed. Now, `commitChanges`
promise is properly awaited by the `action_service` if the field is dirty before
`doAction` (unless `forceLeave` is true).
5) Prior to this commit, the record was updated through a `blur` event on the
iframe window. However, it means that every time the iframe looses focus when
the users interacts with the builder, a popover or the form status indicator,
that blur event would fire, triggering the `convert_inline` process. This commit
reduces the amount of such updates by only triggering the update outside of
these elements, as we don't need to update the record value while the user is
still actively editing the mailing.
Blur handlers/props are deprecated with this commit and will be removed further
down the line.
6) Ensure that in the rare case where a `html_field` value is exactly the same
on different records, the `html_field` state key is updated (triggers a
wysiwyg/mass_mailing_iframe reset).
7) Remove an erroneous part in `onWillUpdateProps` of `mass_mailing_html_field`
which could display the theme selector again on the same record just after
selecting a theme if props were updated.
8) Ensure `withBuilder` getter of `mass_mailing_html_field` properly reads the
state activeTheme every time it is used (if it does not, it could cause issues
with the reactivity, since reading on the state is required for a property
subscription).
9) Remove a useless `onWillUpdateProps` of `mass_mailing_iframe` which was never
used because when `props.showCodeView` changes, the iframe is always destroyed,
so there is no need to update its state.
10) Deprecate usage of `<meta http-equiv="X-UA-Compatible" content="IE=edge"/>`,
to be removed further down the line, as it is useless in the modern web.
11) Ignore errors during a builder "Operation" that was not finished before the
editor was destroyed. In `mass_mailing`, the editor is expected to be
destroyable synchronously to work inside an Odoo view, unlike in `website`.
What's already in the DOM just before destruction will be updated on the
`record`, and the rest of the operation will be lost. However, an attempt is
made to wait for ongoing operations at the start of the
`HtmlField.commitChanges`.
12) Ensure correct visibility option state
Prior to this commit, the `dataAttributeChangeAction` selected item depended on
the domain value computed during the last template rendering, compared to the
current edited element value. The issue is that when an edited element receives
a new `data-filter-domain`, the selected options are evaluated before the
component can register the new domain in its state, so the wrong values are
compared. In this particular case, since we only need 2 values (on/off), an
acceptable trade-off is to choose the selected item ("always visible" vs
"conditionally") based on the Boolean value of the attribute.
13) Remove deprecated assets toggle test
The toggle assets feature was deprecated in a prior [commit1].
The test is removed as its outcome is non-deterministic, because it depends on
the `target` property of `event` returned as a promise resolution value by
`loadBundle`, however the browser can set that target to `null` after the event
was dispatched, so relying on the target value to keep track of the inserted
link is not reliable.
Since that `toggle` feature is not used anymore, it is not needed to run a test
for it. The feature will be removed in the latest `dev` branch.
[commit1]: https://github.com/odoo/odoo/commit/a0aa581636e257894c6c7e87c3793edebecad303
14) Prevent crash on commitChanges if editor is not ready
Prior to this commit, various checks in `commitChanges` did not take into
account that the editor could be instanced but not ready yet (meaning that
plugins are not available, and it is not possible to extract the editable
content).
This commit ensures that `commitChanges` can not crash if called when the editor
is not ready.
15) Properly keep track of dirtiness
mass_mailing changes related to [commit2], which added a way to keep track of a
specific change handled during one `commitChanges` call. The field should stay
dirty if it received changes during a `commitChanges` execution.
In mass_mailing specifically, there were 2 other situations with invalid
tracking of dirtiness:
a) A new record with no change could not be discarded as it was incorrectly
marked as dirty since the `inlineField` value is "".
After this commit, the field is marked as dirty only if the edited field value
is not "" while the `inlineField` value is "", which is the problematic
situation where both values are desynchronized. A new record with both values at
"" is not marked as dirty anymore.
b) Setting a new theme in mass_mailing did not communicate properly with the
relational model about dirtiness.
After this commit, using `setThemeHTML` triggers `onChange`, and the record
update properly tracks that change to communicate with the
`FormStatusIndicator`. The field `isDirty` property stays at `true` though,
because it still needs to execute `convertToEmailHtml` to compute the
`inlineField` value, and it needs the `editor` for that. A `commitChanges`
occurs `onEditorReady` to execute this computation, at the end of which the
field is finally set as not dirty.
[commit2]: https://github.com/odoo/odoo/commit/378580735c785bdcf8b184342834d2b3ddaaaedd
16) Prevent crash with null selection
`document.getSelection()` returns `null` when the selection is not in the
document. However the selection plugin `isSelectionInEditable` function only
support a selection object or `undefined` as an argument, and will crash with
`null`.
This commit ensures that a valid value is provided to the plugin function to
prevent crashes where the selection is moved outside of the `mass_mailing`
iframe before `normalize_handlers` execution.
task-5976348
Forward-Port-Of: odoo/odoo#252571
Forward-Port-Of: odoo/odoo#250883This update fixes a technical issue related to email field requirements in the marketing automation module. The system now correctly determines if an email body is required based on its content, ensuring data integrity. Additionally, a minor adjustment was made to tours to ensure form views are properly cleared during automated testing.
Original PR description
Prior to this commit, `body_html` was hard-coded as a dependency of the `mass_mailing_html_field`, and that dependency lacked the `required` attribute, which should depend on the value of `body_arch`. The dependency is now added in the related views, and the field is now generic. As HtmlField now mark the record `dirty` `onChange`, some tours should ensure that the form view is properly discarded before finishing. task-5976348 Forward-Port-Of: odoo/enterprise#109874 Forward-Port-Of: odoo/enterprise#109091
This update resolves a bug where icons within the HTML editor weren't correctly padded with special characters (feffs). This ensured icons displayed properly after content was added or the page was reloaded. The fix improves the visual consistency of the editor.
Original PR description
Problem: When content is added to the editor, icons are not surrounded by `feff`s. Cause: The selector used to pad elements with `feff`s relies on `o-paragraph`, which is added during normalization.…
Problem: When content is added to the editor, icons are not surrounded by `feff`s. Cause: The selector used to pad elements with `feff`s relies on `o-paragraph`, which is added during normalization. However, `BaseContainerPlugin.normalize_handlers` runs last, so when `FeffPlugin.normalize_handlers` executes, it cannot find icons through `selectors_for_feff_providers` because the expected paragraph-related parent is not yet in place. Solution: Execute `FeffPlugin.normalize_handlers` immediately after `BaseContainerPlugin.normalize_handlers`, ensuring the DOM structure is ready before attempting to add surrounding `feff`s. Steps to reproduce: - Add an icon. - Reload the page. - Do not make any changes (so normalization is not triggered again). - Inspect the icon and observe that it does not have surrounding `feff`s. task-5960097 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252278 Forward-Port-Of: odoo/odoo#250855
This update resolves a problem preventing Odoo from correctly handling signed invoices submitted by Italian Public Administration (IAP). The issue stemmed from incorrect data types being used when updating invoice attachments, leading to errors and duplicate submission attempts. This ensures proper invoice processing for IAP clients.
Original PR description
Currently, if we try to update the existing `l10n_it_edi_attachment_file` with the signed data received during the submission of an invoice (Invoices for Italian Public Administration businesses must…
Currently, if we try to update the existing `l10n_it_edi_attachment_file` with the signed data received during the submission of an invoice (Invoices for Italian Public Administration businesses must be signed, handled on the IAP side), it fails. The problem is that in this specific flow, the 'attachment' variable contains a binary rather than attachment_data. Unfortunately, I could not find a complete flow to reproduce the issue, as there is no flow that sends an invoice to SdI while the l10n_it_edi_attachment_file variable is already set in the move, except maybe via manual import of an attachment into the invoice. Expected flow: - User creates a move with `l10n_it_edi_attachment_file` (unspecified how) - User sends the move to SdI for a Public Administration partner - IAP signs the attachment and sends it back to Odoo - Odoo raises an error because it tries to use dictionary features on a binary field - Odoo does not save the transaction ID, and if the user tries to resend the move, a Duplicate Error occurs from the SdI side. Ticket [link](https://www.odoo.com/odoo/project.task/5954645) opw-5954645 Forward-Port-Of: odoo/odoo#253459 Forward-Port-Of: odoo/odoo#252966
This update fixes a problem where temporary files used during report generation weren't being properly deleted after tests, leading to potential disk space issues. The fix ensures these files are cleaned up immediately, preventing accumulation and improving system stability. This resolves a minor technical issue with no direct impact on users.
Original PR description
Investigated after finding `/tmp/report.*` left over after running tests. #186547 left some temporal holes in the cleanup which are apparently sufficient to not correctly clean the files in some cases? Since `mkstemp` already creates the files, don't wait to have written stuff inside to record the file for deletion, do it immediately *then* write content to the file. An even better solution would be to use `NamedTemporaryFile(delete_on_close=False)`, however that's only available from 3.12, and it does not log deletion errors (although I'm not convinced that's useful in the first place). Forward-Port-Of: odoo/odoo#253816 Forward-Port-Of: odoo/odoo#253053
This update fixes an inconsistency in the website editor's parallax preview animation across different browsers (Firefox and Chrome). The change ensures a more reliable and predictable preview experience by using a standard root height measurement instead of a browser-specific one.
Original PR description
Steps to reproduce: - Open the website editor. - Open the snippet dialog. - Scroll through a parallax snippet preview in Firefox and Chrome. => The preview animation does not move the same way. Before this commit, the parallax preview used `body.clientHeight` inside the scaled snippet preview iframe. Firefox and Chrome can return different values there, so the preview animation was inconsistent. After this commit, the preview reads `document.documentElement.clientHeight` instead, which gives a stable iframe viewport height across browsers. Forward-Port-Of: odoo/odoo#253541
This update fixes a display issue where the mega menu in mobile view was taking up too much space when the menu size was set to 'Narrow'. The change ensures the mega menu's width is correctly controlled, preventing it from overflowing the mobile navigation bar. This improves the user experience on smaller screens.
Original PR description
The property "max-width" of the mega menu in mobile view was set with the class o_mega_menu_is_offcanvas of its ancestor. However, when the user set the mega menu template size to "Narrow", new CSS rules were added to change the mega menu size based on the screen size. The first rule was overridden, resulting in the mega menu being larger than the mobile navbar width. This commit sets the property "max-width" as "important" to prevent this issue from occurring. task-5972284 Forward-Port-Of: odoo/odoo#250690
This update fixes a bug that prevented dropdown menus from properly activating elements on screen. The change allows dropdowns to function as expected, resolving an issue impacting the VoIP (enterprise) counter and also improving the mobile 'bottom sheet' functionality. This ensures consistent and reliable user interaction.
Original PR description
`Popover` instances have an option for them to be active element once opened: `setActiveElement`. `Dropdown` is a specialized `Popover` class but was forced to use `setActiveElement: false`. This commit allows the option for `Dropdown`, allowing to fix a bug in the voip (enterprise) counter-part of this commit. It also allows the same the mobile specific "dropdown": "bottom sheet". task-5999452
This update fixes a bug where users could successfully cancel subscriptions that already had invoices generated. The change adds a check to ensure subscriptions with active invoices cannot be cancelled after they've been closed, preventing potential revenue discrepancies. This improves data accuracy and subscription management.
Original PR description
Steps to reproduce: -------------------------------- 1. Install Subscription module 2. Create a new subscription quotation and confirm it 3. Generate an invoice for the subscription 4. Attempt to…
Steps to reproduce: -------------------------------- 1. Install Subscription module 2. Create a new subscription quotation and confirm it 3. Generate an invoice for the subscription 4. Attempt to cancel the subscription * A ValidationError is correctly raised 5. Close the subscription by selecting any close (churn) reason 6. Attempt to cancel the same closed subscription again Observation: -------------------------------- The subscription is successfully cancelled even though it already has invoices Issue: -------------------------------- In the following code: https://github.com/odoo/enterprise/blob/9e39b4b85fcb9f6ed5b21b942796b76b8a6eefdb/sale_subscription/models/sale_order.py#L741-L742 The cancellation logic does not check whether a subscription is already churned and still has active invoices Solution: -------------------------------- Added an additional condition to prevent cancelling churned subscriptions that still have active invoices opw-5479719 Forward-Port-Of: odoo/enterprise#109755 Forward-Port-Of: odoo/enterprise#106596
This update fixes a critical issue where image uploads would fail and cause a poor user experience. Now, uploads can be safely aborted, preventing unexpected behavior and ensuring a cleaner, more reliable image upload process for users. The fix ensures files are no longer uploaded after the 'Discard' button is clicked.
Original PR description
Steps to Reproduce: 1. Open the website module. 2. Open the media upload dialog to upload an image by either double-clicking the logo or replacing the existing image. 3. Upload a large file. 4. Abort…
Steps to Reproduce: 1. Open the website module. 2. Open the media upload dialog to upload an image by either double-clicking the logo or replacing the existing image. 3. Upload a large file. 4. Abort the upload before it finishes by clicking the 'Discard' button in the media dialog box. After performing these steps, a traceback is observed. Before this commit: - Image upload failures would throw uncaught exceptions. - These exceptions would interrupt the flow and result in a poor user experience with no clear feedback. - Even after clicking the discard button the image was still getting uploaded. After this commit: - Uploads can be safely aborted when the media dialog is discarded. - Ongoing XHR requests and RPC calls are properly cancelled. - The upload loop stops immediately when an abort is triggered with no traceback. - Users get a predictable and clean exit instead of a broken state. - Files are no longer uploaded after clicking Discard. ### task-4752497 Forward-Port-Of: odoo/odoo#250065 Forward-Port-Of: odoo/odoo#219081
This update resolves an issue where changing the 'Kitchen Note' on a food item after a quantity update would cause an error. The fix ensures that the note field can be updated successfully without triggering a technical problem, improving the reliability of the POS system for restaurant operations.
Original PR description
**Steps to Reproduce:** - Install `pos_restaurant_preparation_display`. - Open Register for POS "**Restaurant**" Shop. - Choose table > select food-item > send the order. - Update food-item quantity > send the updated order. - Update food-item '**Kitchen Note**' > send the note. **Error:** `TypeError - 'NoneType' object is not subscriptable` **Cause:** When the food quantity is updated, a new preparation entry is created for the increased quantity. During the first iteration, the display and order quantities are already merged correctly. However, in a subsequent iteration, the original key no longer exists in `quantity_data`. As a result, accessing a None value leads to a traceback. **Fix:** This commit skips the merge step when the original quantity entry has already been merged. sentry-7197024946 Forward-Port-Of: odoo/enterprise#110184 Forward-Port-Of: odoo/enterprise#104889
This update ensures that the employee assigned to a Point of Sale (PoS) configuration is correctly linked to the PoS company. Previously, users without HR access could encounter access errors if the assigned employee was from a different company. The fix automatically filters employees to match the PoS company or defaults to a user in the 'pos_manager' group.
Original PR description
When writing to a PoS config, it will automatically set an `advanced_employee_ids` if none is set. But it will take any employee that is part of `point_of_sale.group_pos_manager`. If the employee…
When writing to a PoS config, it will automatically set an `advanced_employee_ids` if none is set. But it will take any employee that is part of `point_of_sale.group_pos_manager`. If the employee selected is not part of the same company as the PoS config, and the current user doesn't have HR employee access it will trigger an ir.rule that block the user from opening the settings. Steps to reproduce: ------------------- * Create a new company * Create a new user that only have access to this company and no HR access * Create a PoS in the new company * Login as the new user * Try to open the settings > Observation: You will get an access error because the employee set in `advanced_employee_ids` is from the other company Why the fix: ------------ We make sure that when automatically setting the advanced_employee_ids we filter out the ones that are not from the correct company. If no employee exist that satisfies the requirements, we take a user from the `group_pos_manager` and create an employee for him. opw-5885417 Forward-Port-Of: odoo/odoo#253687 Forward-Port-Of: odoo/odoo#252402
This update resolves an issue where a specific cash move type in the German Point of Sale (POS) module was incorrectly formatted, leading to an error with the Fiskaly accounting system. The fix ensures the correct type casing is used, preventing the error and allowing proper cash move processing.
Original PR description
When creating a cash move of type "Cash Supplement", the type sent was "Zuschussecht" instead of "ZuschussEcht", which caused is not an allowed type. Steps to reproduce: ------------------- * Setup a PoS with a TSS for a German localization * Start a session and open the cash control popup * Create a cash move of type "Cash Supplement" * Close the session > Observation: You get an error from Fiskaly that the type is not allowed Why the fix: ------------ When doing `.capitalize()` on a string it would make the first letter uppercase and the rest lowercase. In this case "ZuschussEcht" would become "Zuschussecht", which is not the correct type expected by Fiskaly We now keep the original casing for all the type. opw-5462364 Forward-Port-Of: odoo/enterprise#110270 Forward-Port-Of: odoo/enterprise#109235
This update resolves several issues related to integrating Field Service with planning, particularly in the portal interface. Key changes include improved access to intervention portals, enhanced reporting capabilities, and streamlined workflows for scheduling and communication.
Original PR description
[FIX] planning_field_service: fix follow-up (round 4) This commit continues to fix the various issues found due to the refactoring of Field Service feature to integrate it into planning instead of…
[FIX] planning_field_service: fix follow-up (round 4) This commit continues to fix the various issues found due to the refactoring of Field Service feature to integrate it into planning instead of being an extension of project. This commit will: - fix 'Print' action and ticket to intervention portal access - always display in range mode for planned dates in planning.slot view - update billable and non-billable filters to take into account `under_warranty` field - review search view of planning.slot, some filters have been renamed and moved. - use employees instead of resources in portal list (no need to display the material resource in the portal views in other words) - add "Send mail", "Send SMS", "Send Report" and "Add/Remove followers" buttons in cog menu of list and kanban views of planning.slot model. - remove helper in ticket button since it does not bring useful information. - add ticket description on related shift, when the user plans an intervention from a helpdesk ticket, the new shift created from that action, will have the description of the related ticket inside Note field (name field) - fix display_name, to avoid displaying the field used in the group by in the display name since it is a bit redundant - take into account worksheet set in product as default - fix some labels, visibility conditions, dates format, group_expand - add default company of the slot when the user creates a resource from the form view of planning.slot model - show customer preview stat button once the intervention is completed and a report is available for that intervention - update tooltip for employee product to bring more context to explain how that new field works. - make sure the SOL for timesheet is not generated when we complete an intervention if the project linked is non billable - add icon on stat button of timesheet - make sure the user can only create service product in product field in employee - show "X Products" button to non sale user in the form view of planning.slot - make project billable and timesheetable by default when the user wants to create a new project from the project_id field inside the form view of planning.slot model - hide schedule stat button in the form view of project.task if the task is a template or linked to a project template - update visibility condition of sign in in calendar, to make visible for planning manager when the slot is published even if the shift is not assigned to that user and the slot is in the past. task-6009593
This update resolves an issue where users without HR officer permissions would encounter an error when trying to open user forms. The team removed unnecessary PIN information from the main user view, streamlining the process for authorized users to manage user accounts. This ensures a smoother experience for all users with appropriate access.
Original PR description
If a person having rights to edit users is not HR officer, he gets a traceback when he tries to open the user form. As the information of PIN is not really related to the user, we left it on the employee and the "Preference" view, but remove it from the main user view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251787
This update fixes an issue preventing Point of Sale orders from correctly displaying product names on invoices. The team partially reverted a previous change that was causing a conflict, ensuring product names are now accurately shown. This improves the clarity and accuracy of sales invoices.
Original PR description
Steps to reproduce: ------------------- * Go to point of sale * Open list of orders * Select any order > Traceback Why the fix: ------------ Partially reverting https://github.com/odoo/odoo/commit/937363e5786eeab02b06c2dc63e1d9e743fc1874 as it broke a widget. Pos order are using this widget but the dependency on the field `translated_product_name` makes it impossible to open any order in the backend as this field does not exist on pos order line model. We're only partially reverting the fix to keep the computed fields. This will allow to properly fix the original issue without requiring an exception later. opw-6040334 Forward-Port-Of: odoo/odoo#254158
This update fixes an issue where the website tour failed after menu updates. The fix ensures the tour waits for new menu items to fully load before proceeding, preventing the builder sidebar from not opening. This improves the user experience for website builders.
Original PR description
__Before commit__ Since the delay between tour steps was removed [1], this tour fails frequently. After saving menus, the page reloads, but the tour attempts to click the edit button before the reload completes, preventing the builder sidebar from opening. __Fix__ Wait for the five new menu items to appear to ensure they have been saved and the page has successfully reloaded before proceeding. [1]: https://github.com/odoo/odoo/commit/769b193 runbot-237842
A test was failing due to a mismatch between the user's language setting (French) and the content of a tour designed for English. This commit resolves the issue, ensuring the test now passes correctly and preventing potential display problems in the web studio.
Original PR description
Before this commit, a test set the language of the user to French and then opened the browser with that user and that language. The tour in question, written for English failed. After this commit, the tour doesn't fail runbot-error-241983
This update fixes a minor issue within the Point of Sale course preparation tour. By adding specific steps, the tour now reliably triggers the necessary courses, ensuring users are properly guided through the setup process. This improves the onboarding experience and reduces potential confusion.
Original PR description
In this commit: --- - Add steps in the tour to ensure courses are correctly triggered. runbot-241931 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a confusing issue where draft payslip PDFs remained in the foreground after payrun validation. The change ensures payslips are correctly marked for PDF generation, and updates the default attachment to resolve the display problem. This improves clarity for users receiving payslip reports.
Original PR description
When creating a payrun and using the Test Print button, the pdfs with the yellow banner saying that the payslip is still draft are generated correctly. When validating the payrun a cron runs to generate the real pdfs. In 19.2 there is a preliminary problem (fixed here) where the payslips are not marked for pdf creation and therefore are not taken by the cron (in master they are correctly marked for it). After that, the pdfs are correctly computed but the pdf in the foreground remains the draft one, generating confusion. With this PR we also change the default attachment when we generate de final pdf, solving the problem. Task: 6023186
This update resolves a technical limitation in the Odoo Report Editor, preventing users from applying properties to fields selected within the /field command. Previously, this functionality was inconsistent, leading to issues with report customization. This change ensures proper field selection and improves report editing capabilities.
Original PR description
Properties are not supported in ir.qweb but only as t-out, while t-field doesn't support them. For this reason and the fact that properties have a path the model field selector barely handles we do not allow those field to be selected in the /field command task-5999790 Forward-Port-Of: odoo/enterprise#110409 Forward-Port-Of: odoo/enterprise#109486
This update fixes an issue where the default account used for landed costs on invoices was incorrect, leading to inaccurate financial reporting. The fix ensures the correct stock valuation and expense accounts are used, aligning with how landed costs are handled for standard purchases. This improves the accuracy of financial statements.
Original PR description
**Problem:** the default account suggested for landed cost (with real time category) are not the good ones. **Steps to reproduce:** - create a storable product with perpetual average category -…
**Problem:** the default account suggested for landed cost (with real time category) are not the good ones. **Steps to reproduce:** - create a storable product with perpetual average category - create a landed cost (a service product with 'is a landed cost' checked in the purchase tab) - create a category for the landed cost with perpetual valuation - confirm a purchase order for 10 quantity of the product with a unit price of 10 - validate the receipt - confirm quotation for 3 of the product, validate the delivery and confirm the invoice - create a bill for the purchase order - on the invoice lines, unhide the product column - add an invoice line with the landed cost product, for a quantity of 1 and a price of 10 - confirm the bill - click on create landed cost - select the receipt in the transfers field - validate - click on the journal entry on the landed cost form **Current behavior:** On the bill, for the landed cost : - stock valuation is debited of 10 - account payable is credited of 10 (which makes the total credit 110 for account payable) On the journal entry linked to the landed cost: - stock valuation is debited of 7 - stock valuation is credited of 7 So in total there is a debit of 10 in stock valuation and a credit of 10 in account payable. Which does not reflect that part of the products are out of stock. **Expected behavior:** If the expense account was used, both on the bill and on the landed cost, (which is already the case for landed cost with periodic category) the account move lines would be: On the bill : - Expense is debited of 10 - account payable is credited of 10 (which makes the total credit 110 for account payable) On the journal entry linked to the landed cost: - stock valuation is debited of 7 - Expense is credited of 7 So in the total there is : - a credit of 10 in account payable - a debit of 7 in stock valuation - a debit of 3 in expense This is what we want, because the debit of 7 in stock valuation reflect that we only increase the valuation by 7 because only 7 products are still in stock. The debit of 3 in expenses compensate for the cogs. Indeed when we invoiced the SO, the cogs where of 30 but, after the landed cost, valuation wise, the products actually exited the stock with a value of 33 total (11 each). **Cause of the issue:** For the bill: when you create the new account move line and enter the product, _compute_account_id is called to compute the default account for the line. In the stock override, _eligible_for_stock_account is called on the line https://github.com/odoo/odoo/blob/3542c542eac5b204e69a8dd6ae1907cfcef60af3/addons/stock_account/models/account_move_line.py#L18-L19 Because of the stock_landed_costs override, the return value is true https://github.com/odoo/odoo/blob/3542c542eac5b204e69a8dd6ae1907cfcef60af3/addons/stock_landed_costs/models/account_move.py#L78-L82 So the account is changed to stock valuation https://github.com/odoo/odoo/blob/3542c542eac5b204e69a8dd6ae1907cfcef60af3/addons/stock_account/models/account_move_line.py#L23-L24 For the landed cost: - if we create it by selecting 'create landed cost' on the bill : the account id is set in button_create_landed_cost https://github.com/odoo/odoo/blob/3542c542eac5b204e69a8dd6ae1907cfcef60af3/addons/stock_landed_costs/models/account_move.py#L34 -if we create the landed cost, from adjustment/landed cost and selecting new : the expense account is already selected **fix:** In both cases, the client can already manually set the accounts they want, the fix is about having the right default accounts. opw-5941753 Forward-Port-Of: odoo/odoo#253430 Forward-Port-Of: odoo/odoo#251766