Thursday, July 10, 2025
38 changes · saas-18.4
Resolved issues and error corrections
This fixes an intermittent automated test failure in the Mail app by waiting until a message reaction is fully removed before reloading the page. It helps keep the testing pipeline stable and reduces false failures that can slow down releases.
Original PR description
Before this commit, tour "discuss_channel_public_tour" was failing non-deterministically at the following step: ``` .o-mail-Message:not(:has(.o-mail-MessageReaction)) ``` This happens because prio steps added a new reaction and asserted it was shown. It clicks on reaction to remove it and then page reload to see the reaction is gone. Problem is that it can reload page too fast and the RPC to remove the reaction did not have time to occurs. This commit fixes the issue by awaiting message no longer has reaction before page reload. Fixes runbot-error-227769 Forward-Port-Of: odoo/odoo#218132
This fixes an issue where employees with minimal permissions could use the plus/minus button to set negative product quantities in the Point of Sale cart. The change helps ensure sales entries follow permission rules and reduces the risk of incorrect orders or unintended refunds.
Original PR description
Fix issue where minimum rights employee were able to put negative orderline qty in the cart with the `+/-` button task-id: 4922318 enterprise PR: https://github.com/odoo/enterprise/pull/89669 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217774
Website editors can now set and save default values on form fields even when those fields are also linked to contextual data. This prevents values such as contact form subjects or recruitment job positions from being lost or incorrectly reused, improving reliability when managing website forms.
Original PR description
Scenario: - go to the /contactus page - edit the subject field and set a default value then save Result: the default value is not saved. Reason: in 13.0, field default value had priority over…
Scenario: - go to the /contactus page - edit the subject field and set a default value then save Result: the default value is not saved. Reason: in 13.0, field default value had priority over data-for so an issue was solved by b637a5e32f767b62736241042f88fa0cecf9f10b that if you saved a form, the data-for would become the default for all the uses of that form (so eg. a job position would be set for all job positions). In 8d0a63f35519090a74fcefedf482fea5f6eedd97 the priority was changed so data-for has higher priority than the default value, that made the prior fix unnecessary (just a nice to have, to not save the data-for as default that would be overridden by another data-for). The fix was reintroduced by ca433f38dbfe379dc9e0b823c7862eaec1a7ed9d but it removes default value if there is a data-for. Fix: remove the filling and removing of value: the data-for is not shown in the editor (allowing us to set default) but has the priority when rendering the field in non-editable mode. This is mirroring what is already done for data-fill-with. Side note: this commit also remove useless data-fill-with="undefined" attributes that are added when editing field. They shouldn't cause any issue unless someone add a "undefined" field in the prefilled fields. opw-4794903 Forward-Port-Of: odoo/odoo#217200 Forward-Port-Of: odoo/odoo#211083
Purchase orders now choose vendor pricing that matches the intended unit of measure in manual and replenishment flows, avoiding unexpected cheaper prices from a different unit. Make-to-order purchasing now uses the best matching vendor price and sets the purchase line unit accordingly, helping keep costs and quantities consistent.
Original PR description
This commit adjusts setting `product_uom_id` field on the generated purchase order line in the 3 main scenarios: manual purchase order, procurement from MTO, and procurement from replenishment…
This commit adjusts setting `product_uom_id` field on the generated purchase order line in the 3 main scenarios: manual purchase order, procurement from MTO, and procurement from replenishment wizard. The intended behavior is as follows: * Manual PO: The selected pricelist must respect the uom of the PO line. Even if the quantity of the line matches a pricelist with a cheaper price (but different uom), it should not be selected. If there is no pricelist with the unit of the line, the pricelist with the product base unit is chosen. If it doesn't exist too, no pricelist is chosen, and the price is left to the user (default value of 0). * Procurement from MTO: The selected pricelist must be the cheapest pricelist that respects the requested quantity, even if that cheaper pricelist has a different uom than the source of procurement (SO, MO, etc.). However, the generated PO line uses the uom of the pricelist not the source. * Replenishment Wizard: The behavior is similar to manual PO. The selected unit in the wizard must be respected, even if there is a cheaper pricelist that matches the requested quantity (with different uom). Also now, the selected vendor in the wizard doesn't affect the chosen priclist. It's only used to look for pricelists with the same partner. Task-4471379 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218018 Forward-Port-Of: odoo/odoo#205525
Deleting the Replenish on Order route no longer causes the Inventory settings page to fail. This keeps administrators able to access and adjust settings even if that optional route has been removed.
Original PR description
Problem: When MTO route is deleted from routes, an error will be raised in the settings and it will be unaccessible. Solution: Set `raise_if_not_found` to false when accessing the MTO route in the compute/inverse. Steps to reproduce: 1. Enable Multi-Step Routes and Replenish on Order (MTO) from settings 2. Go to Inventory > Configuration > Routes 3. Delete Replenish on Order (MTO) route 4. Go back to settings --> Settings will raise an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Images copied or dragged from the web into the website editor are now stored as proper attachments instead of being embedded as large base64 data. This keeps website content cleaner, easier to manage, and more consistent after saving.
Original PR description
Before this commit copying an image from the web and pasting it into a text snippet in the website editor would cause the image to be saved as base64 instead of being properly converted into an attachment. Steps to reproduce - open editor - add a text snippet - go to Google images, find an image and copy it (copy the image itself, not the link) - paste the image in the text snippet - save and quit the editor => the image is saved as a base64 img After the change images get properly saved as attachments.
This fixes an issue where product pricelist items did not update their company assignment when the related pricelist company changed. It helps keep pricing rules aligned with the correct company and prevents build or validation errors tied to inconsistent company data.
Original PR description
… change Introduced by 73a43eb25f21531a05a69f6cd820a7f1944045cc Runbot build error 227640 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes unstable automated tests for messaging presence status by ensuring the test user starts with a known status. It helps keep the development and release pipeline more reliable without changing customer-facing behavior.
Original PR description
This commit fixes the im_status test suite which fails in a non-deterministic fashion. Initially, those tests wait for the first update of the presence (the one sent when the first connection to the websocket is established). Presence is updated when: - Self persona status is offline. - Bus notification is received for self with different value than the one of this device (e.g. offline while away/online, away while online). - The websocket connection is first established. In those test, another subscription could happen according to the timing of the `/mail/data` RPC which returns the initial status of the user as offline. This commit fixes this issue by setting an initial status on the current user. fixes runbot-229757 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
Updates a mail test to match the current behavior where selecting the same emoji reaction twice removes it. This prevents intermittent test failures and helps keep the messaging feature validation stable.
Original PR description
Before this commit, test "Add the same reaction twice from the emoji picker" may fail non-deterministically in 18.1 on last step: the message reaction is sometimes kept, sometimes removed. The feature in 18.0 was keeping the emoji, whereas in 18.1 it now toggles the add / remove of reaction. This change of behaviour felt best with the addition of QuickReactionMenu, and for consistency this also works that way in emoji picker of message reaction. The test was not adapted but passed because the bus notifications were coming later than the burst of user actions to add emoji, thus there's flicker of showing message reaction at end when it's only temporarily and would be removed a fraction of seconds later. This commit fixes the test with the newer behaviour that it should toggle the reaction. Fixes runbot error 229340 Forward-Port-Of: odoo/odoo#218160
The website editor now protects critical page elements when users remove links, preventing accidental deletion of required website structure. This avoids a serious issue where removing the Contact Us header link could make the website unusable after saving.
Original PR description
Steps to reproduce: - Open website builder - Click on "Contact Us" button in the header - Click on "Remove Link" - Save - Bug: Website is dead
Fixes an issue where changing a website theme or completing website setup could trigger an error after the loading screen. It also ensures the website configurator opens on the correct step when a specific step is requested in the URL, making setup and theme changes smoother for users.
Original PR description
This commit fixes 2 little oversights of [`1b86bd7`][1] that removed `params` from `context`: - We can directly retrieve the configurator initial step from the `router` service. - `with_loader` was introduced by [`ccfca27`][2] to make sure the loader was still visible until the editor is open. Now it's only set by `button_choose_theme` and always to `True`. We can therefore remove it and `keepLoader` will still be set to `true` after we call `button_choose_theme`. [1]: https://github.com/odoo/odoo/commit/1b86bd7ecf4d [2]: https://github.com/odoo/odoo/commit/ccfca271b902
Mobile dialog windows no longer show backend-specific header colors on website pages. This keeps the customer-facing experience visually consistent and aligned with the current Odoo design direction.
Original PR description
Before this PR: header color of `Dialog` on mobile was "community color" or white, depending on the version of Odoo the database is running. This was creating issues in in the front-end, where the user of the website would see back-end specific colors in different `Dialog`s. This PR removes the color customization of `Dialog`'header as it was fitting a design line we had before we introduced MILK. task-4001365 Example of the issue (mobile front-end): <img width="376" alt="Screenshot 2024-06-20 at 10 54 04" src="https://github.com/odoo/odoo/assets/110090660/dad6a4b2-6164-45dd-9e16-0160e2989607"> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170087
Changes to a user's online presence no longer make their user record appear recently edited. This keeps profile update dates accurate and avoids daily background status activity being mistaken for real user changes.
Original PR description
Before this commit, when user presence changes, it was updating the write_date of user. This happens because any change of presence what doing a `Command.create()` on the presence_id field of user model. The presence object is automatically unlinked after 12 hours of inactivity, thus most users had their write_date changed every day because of the presence_ids being updated when logging in at least once a day. This commit fixes the issue by creating the presence rather than write on the user field, so that this is not considered a write on user object and thus it doesn't change the write_date of user. Other than not updating the write_date, the code behavior is functionally unchanged. Forward-Port-Of: odoo/odoo#218182
The E-Waybill report option is now shown only after an E-Waybill has been successfully generated. This prevents users from accidentally printing an unavailable report and avoids the related error during invoice processing.
Original PR description
Currently, an error occurs when users print the E-Waybill without generating it. Steps to replicate: - Install `l10n_in_ewaybill` and switch to IN company. - Change the `Zipcode` on IN company to…
Currently, an error occurs when users print the E-Waybill without generating it. Steps to replicate: - Install `l10n_in_ewaybill` and switch to IN company. - Change the `Zipcode` on IN company to `aa`. - Go to `Invoicing > Customer > Invoices`. - Create an invoice, confirm and click Send E-WayBill. - Click on the Gear icon and Click on the report `Ewaybill`. Error: `ValueError: invalid literal for int() with base 10: ''....` `QWebException: Error while render the template ValueError: invalid literal for int() with base 10: '' Template: ir.ui.view(2614,) Path: /t/t/t/t/div/t[3] Node: <t t-if='doc.state in ewaybill_states'/>` The error occurs because the report printing is available even when the `E-Waybill` is not yet generated. This causes the execution flow to skip all the necessary validations, leading to a `ValueError` at line [1]. [1] - https://github.com/odoo/odoo/blob/aa7dac87a3eebce1b300e1e3d04398d680325b5d/addons/l10n_in_ewaybill/models/l10n_in_ewaybill.py#L640 This commit solves this issue by adding a domain to the report, so that it appears only after the EwayBill is generated. sentry-6695761066 https://github.com/user-attachments/assets/81e5a8eb-4c0c-4dc5-a65b-e22bc11098d2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215515
This change cleans up duplicated helper code used in account-related tests. It reduces maintenance risk for developers without changing how users work with the accounting features.
Original PR description
In 0f3a9dee5cf15 we added helpers to create test taxes in `AccountTestInvoicingCommon`, not realizing that they were already in `TestTaxCommon`. This commit removes them from `TestTaxCommon` to avoid the duplication. task-none Forward-Port-Of: odoo/odoo#217867 Forward-Port-Of: odoo/odoo#217553
This update corrects an automated test for setting up live chat chatbot steps so it waits for the input field to be truly cleared before continuing. It helps prevent false test failures in the live chat module, improving confidence in future releases without changing customer-facing behavior.
Original PR description
This commit fixes the `im_livechat_chatbot_steps_sequence_tour`. When creating the chat bot steps, we wait for the textarea to be cleared between each step. However, the selector is wrong: `value()` matches everything, regardless of the content. This commit fixes the issue by using `:empty` instead. follow-up of https://github.com/odoo/odoo/pull/217760. fixes runbot-229755. 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
Point of Sale now includes archived products when loading missing product details for existing records such as paid orders. This helps keep historical sales data complete and prevents inconsistencies when orders contain products that are no longer active.
Original PR description
Before this commit, the Point of Sale system failed to load archived products when retrieving missing products for loaded records. This caused various issues, for instance, when loading paid orders, any archived products included in those orders would not be loaded, leading to data inconsistencies and operational problems. opw-4904124 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217541
This fix updates the automated login flow checks for two-factor authentication so they only watch for page changes at the correct point in the process. This helps prevent false test failures and supports a more stable sign-in experience for users using two-factor authentication.
Original PR description
In this commit, we change the login page step by a step with isActive property. So this step is only active when the input#login is not on the page and then expectUnloadPage will be only listen when this step is active. 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#217972
This change rolls back a previous calendar update that was causing Google-synced users to see duplicated events and may have triggered repeated synchronization loops. Reverting it helps restore reliable calendar synchronization and prevents confusing duplicate meetings for affected users.
Original PR description
This commit reverts https://github.com/odoo/odoo/commit/b44a1bc7ad1b23cc37a745737cb071f1c5a705b3 which is a part of odoo/odoo#203918 Issues have been found on the synchronization with Google related to the duplication of events for synchronized users. As it is an urgent matter and seems like this commit is most likely causing an infinite loop for te synced events, we are dropping it. task-4873605 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217955
The website editing tools were adjusted so a shared page-building service no longer depends directly on the Website app. This improves modularity and helps prevent issues when the builder is used outside full website editing contexts, with no expected change for end users.
Original PR description
The html_builder's snippet service was still relying on website. This is removed, and the snippet viewer website dependencies are instead patched in website. task-4367641
Multi-currency invoice payments with exchange differences are now reconciled correctly after export and re-import. This prevents exchange difference lines from being left unmatched, avoiding unbalanced accounting entries in journal items.
Original PR description
# How to reproduce the issue - Create an invoice with price 1000 in a non-company currency (e.g., CHF). - Modify the currency rate after the invoice date, then generate the payment for this invoice.…
# How to reproduce the issue - Create an invoice with price 1000 in a non-company currency (e.g., CHF). - Modify the currency rate after the invoice date, then generate the payment for this invoice. - This will generate three journal entries (invoice, payment, and currency exchange difference). - Export those journal entries and include in the export the `matching_number`, `currency`, and `amount_currency` fields. - Import those three entries with the matching number and post them. - In the Journal Items, the line corresponding to the currency exchange difference is not matched with the lines from the invoice and the payment, leading to an unbalanced credit and debit. # Cause In `_prepare_reconciliation_single_partial` within `account_move_line`, the reconciliation is stopped by checking whether the debit/credit is fully matched. However, this check only considers `amount_residual_currency` and not `amount_residual`, which, in the case of an exchange difference, are different. opw-4776188 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217565 Forward-Port-Of: odoo/odoo#216097
When an expense is reinvoiced to a customer through a sales order, its analytic distribution is now copied to the related sales order line. This keeps reporting and cost allocation accurate without requiring users to re-enter analytic details manually.
Original PR description
#### Step to reproduce: - Enable Analytic accounting in Accounting settings - Create a sale order - Show Analytic Distribution - Create an expense and put this sale order in the "Customer to…
#### Step to reproduce: - Enable Analytic accounting in Accounting settings - Create a sale order - Show Analytic Distribution - Create an expense and put this sale order in the "Customer to Reinvoice" field. - Add an Analytic Distribution - Create Report - Submit to Manager - Approve - Post Journal Entries #### Curent behavior: - No analytic_distribution on the sale_order #### Expected behavior: - analytic_distribution form the expense should be copied to the sale_order #### Cause: analytic_distribution was not set at the creation of the sale order from the account_move `_sale_get_invoice_price()` is called only in `_sale_create_reinvoice_sale_line()` which is only called in `_prepare_analytic_lines()`. According to [this note](https://github.com/odoo/odoo/blob/18.0/addons/sale/models/account_move_line.py#L31-L32) `_prepare_analytic_lines()` is called only on `move.line` having an `analytic_distribution`. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4710137) opw-4710137 Forward-Port-Of: odoo/odoo#217725 Forward-Port-Of: odoo/odoo#216291
This fixes a small display issue in the HTML editor where the remove icon for media dialog attachments could be hidden. Users can now clearly see and use the remove action when managing attached media.
Original PR description
Description of the issue this PR addresses: - The remove icon in the media dialog attachment was not visible due to the use of an invalid `z-index-1` class. This commit c5a98c76ea1cce4acb55faf4768388b94255508f removed custom `z-index` utilities. Replaces `z-index-1` with Bootstrap's default `z-1` class. Before this commit: - The icon used `z-index-1`, which is not a valid Bootstrap class. After this commit: - Replaced with `z-1`, the correct Bootstrap 5 utility class for `z-index: 1`. task-4903381 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216261
A mail testing scenario now waits until a new message is fully saved before ending. This prevents false failures in automated checks caused by temporary unsaved form states, improving reliability without changing user-facing behavior.
Original PR description
Before this commit, tour "test_mail_composer_autosave_tour" could fail at end with the following error: ``` Tour finished with a dirty form view being open. Dirty form views are automatically saved when the page is closed, which leads to stray network requests and inconsistencies. ``` This happens because test creates a new record and posts a message in full composer. It checks that message is present in chatter and then leave the form view. When posting the message, the form view is saved, but this can happen with a small delay after message is visible on chatter like after tour has ended. This commit fixes the issue by awaiting form view is saved, so that tour doesn't panic at end there's a form view with unsaved changes, as the form view is properly saved with sending a message. Fixes runbot error 198583 Fixes runbot error 222676 Fixes runbot error 226772 Fixes runbot error 222676 Forward-Port-Of: odoo/odoo#218145
This fixes a timing issue in the Mail discussion channel tests where a message could be acted on before it was fully saved. The change helps prevent false test failures in automated checks, improving confidence in releases without changing user-facing behavior.
Original PR description
Before this commit, tour "test_discuss_channel_public_page_as_guest" would crash in test after posting a message in which we attempt to add a reaction. This happens because the step is a `hover &&…
Before this commit, tour "test_discuss_channel_public_page_as_guest" would crash in test after posting a message in which we attempt to add a reaction. This happens because the step is a `hover && click 'Add a reaction'`, so it hovers on selector `o-mail-Message:contains(cheese)` then clicks on the 'Add a reaction' action. In discuss channels, when sending a message, the message is immediately shown on UI before there's a genuine message that is created in DB. This optimistic behavior gives impression the app is fast, but some actions require a genuine message like 'Add a reaction'. The problem of test is that selector `.o-mail-Message:contains(cheese)` passes with temporary / transient message of optimistic behavior, so the `hover` step would be triggered on the temporary / transient message and 'Add a reaction' action is awaited for click. Problem is that when genuine message data is received, implementation detail deletes the temporary / transient message and then shows the genuine message. Because the genuine message is different, component identity is different (it uses message.localId in `t-key`), thus it awaits `Add a reaction` on UI but it's not visible because we need to hover again, this time on genuine message. This commit fixes the issue by awaiting message is shown on UI is the persistent, i.e. non-temporary and non-transient, so that hover and click on the 'Add a reaction' action works without issue. fixes runbot errors 181660 fixes runbot errors 222093 fixes runbot errors 227756 Forward-Port-Of: odoo/odoo#218053 Forward-Port-Of: odoo/odoo#217982
The donation snippet now handles cases where no custom donation amount is configured. Instead of causing an error page, visitors are prompted to select an amount, keeping the donation flow usable.
Original PR description
Since [1], a crash occurs when the Custom Amount option for the `s_donation` snippet is `None` and you use it. Steps to reproduce: - Drop `s_donation` snippet - Set Custom Amount option as `None` - Save and exit edit mode - Click on `Donate Now` button - A traceback occurs instead of showing an error to select an amount [1]: https://github.com/odoo/odoo/commit/22e777c046521f3f89b62caa5876680beb7f5aba Forward-Port-Of: odoo/odoo#217991
This fix adjusts a Point of Sale configuration test so it only runs where the related accounting setting is available. It prevents avoidable build failures and helps keep releases stable without changing customer-facing behavior.
Original PR description
this commit fixes the test for the account_tax_periodicity_journal_id field in the res.config.settings model, which was failing due to an assertion error cause it is not in the community version of Odoo 18.2. but it is in the saas-18.2 version enterprise version of Odoo 18.2. refer to this [commit](https://github.com/odoo/odoo/commit/8d841025ecb0b62719fa92236696c0e3421ca270) build_error-227602 Forward-Port-Of: odoo/odoo#217003 Forward-Port-Of: odoo/odoo#215611
The point of sale integration now prevents employees with minimal access rights from setting negative quantities through the ticket refund flow. This keeps refund handling aligned with staff permissions and reduces the risk of incorrect order adjustments.
Original PR description
Fix issue where when `pos_urban_piper` was installed, minimal right employee were able to set negative orderline qty with a refund through the ticket screen. task-id: 4922318 community PR: https://github.com/odoo/odoo/pull/217774 Forward-Port-Of: odoo/enterprise#89669
Bank reconciliation now requires an exact reference or move name match before automatically pairing statement lines with accounting entries. This prevents incorrect matches when a shorter reference appears inside a longer label, reducing reconciliation mistakes.
Original PR description
Actually, we are matching to blindly for full matches. We only check if aml.move_name or aml.ref is present in st_line label.
But this cause issues with move names like dates, where you could have :
- move_name = 2025/123
- label contains 2025/1234567
In this case, we don't want to match, as 2025/123 is not perfectly present in the label.
So this commit update the condition so we need now to have a perfect full match between st_line label and aml.ref or aml.move_name.
no-task
Forward-Port-Of: odoo/enterprise#89248This fix prevents bank reconciliation matching from failing when a payment reference ends with a backslash. It improves reliability for accounting workflows by safely handling this special character during matching.
Original PR description
If a payment ref end with '\\', this '\\' will be interpreted as an escape operator in the query, which leads to an error. This commit add the '\\' to the list of char to escape. no-task Forward-Port-Of: odoo/enterprise#89659
This fix updates manufacturing shop floor tests so they no longer depend on an exact record count that can change when demo data is present. It helps keep automated validation stable and reduces false build failures without changing user-facing behavior.
Original PR description
### Issue: Certain shopfloor tests make assert on the number of records present in the shopfloor: - test_shop_floor_my_wo_filter_with_pin_user - test_automatic_backorder_no_redirect These assert can not be reliable due to demo-data's adding unrelated records e.g. https://github.com/odoo/enterprise/blob/5bfadae317ee47ac34703d4cc222677ac677cc7d/purchase_mrp_workorder_quality/data/purchase_mrp_workorder_quality_demo.xml#L79-L84 runbot-build-error-226734 Forward-Port-Of: odoo/enterprise#89556 Forward-Port-Of: odoo/enterprise#88005
The VoIP interface now works better on smaller screens by allowing users to scroll where content previously could be cut off. Spacing, alignment, and transfer button styling were also adjusted for a more consistent and accessible experience.
Original PR description
This commits fixes minor layout issues: - It adapts some views that had no scroll bar when the viewport was small. This prevented access to part of content. - It revises some spacing and alignment on…
This commits fixes minor layout issues: - It adapts some views that had no scroll bar when the viewport was small. This prevented access to part of content. - It revises some spacing and alignment on small screens. - It defines small transfer buttons in "outline" style to maintain consistency with the others tabs. task-4908502 | Before | After | |--------|--------| |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | Forward-Port-Of: odoo/enterprise#89005
Odoo Studio can no longer be opened to customize the Bank Reconciliation view. This prevents users from making unsupported changes to a sensitive accounting workflow, reducing the risk of configuration issues.
Original PR description
- Install `web_studio` and `account_accountant` - Open Accounting -> Bank You can open studio on this view but this should not be possible opw-4859464 Forward-Port-Of: odoo/enterprise#89181 Forward-Port-Of: odoo/enterprise#89146
Amazon sales orders can now correctly recognize UK DPD and Hermes carrier names when they include extra country codes from Sendcloud. Royal Mail matching was also updated, helping prevent shipping confirmations from failing because the carrier name was not accepted.
Original PR description
For DPD and Hermes (not the others), Sendcloud adds an unnecessary ISO code. In order to keep it should it be necessary (e.g. rml_gb), we map them to the Amazon const instead of stripping the code. While testing, it was also found that royal mail seems to have been renamed and was thus not working. Forward-Port-Of: odoo/enterprise#87745
This fix restores a missing Australian payroll reporting field on the employee form. Businesses can again view and manage the WorkCover-related reporting setting needed for accurate payroll administration.
Original PR description
"l10n_au_report_to_w3" was missing from the employee view.
This fixes how Swiss payroll monthly summaries are grouped during ELM transmission preparation. It helps ensure payroll reporting totals are calculated correctly, reducing the risk of inaccurate monthly declarations.
Original PR description
Forward-Port-Of: odoo/enterprise#89839
PDF versions of stock reports now show table headers in bold, matching the intended report layout. This improves report readability and ensures printed documents look consistent with the on-screen template.
Original PR description
Problem: When printing the stock report, table headers are not bold in the generated PDF despite being styled that way in the HTML template. Cause: The bold styling is applied via CSS on the `thead` element, which doesn't render properly in the PDF output. Solution: Use `<strong>` tags inside table headers to apply bold formatting, as done in version 17.0. Also remove `font-weight` rules from CSS for `thead` to avoid conflicts and ensure consistent output. Steps to reproduce: 1. Go to Inventory > Inventory Overview. 2. Select any inventory record. 3. Print the report. → Table headers are not bold as expected, despite formatting. opw-4840380 Forward-Port-Of: odoo/enterprise#89836 Forward-Port-Of: odoo/enterprise#87852
This fix changes the numbering used by manufacturing test records so they no longer overlap with demo manufacturing orders. It helps keep automated checks reliable and prevents false build failures, with no expected impact on day-to-day users.
Original PR description
This commit modifies the MO sequence as defined in the test's setup from "WH/MO/" to "WH/TEST/MO", this way, there won't be any name's conflict with MO created by demo data. Runbot build error: [223328](https://runbot.odoo.com/odoo/error/223328) Forward-Port-Of: odoo/enterprise#89649