Daily updates from Odoo
Thursday, October 9, 2025
38 changes · saas-18.4
Enhancements to existing features
Website editor selections are now kept within the currently focused content area, preventing accidental selection of an entire snippet or page section. This makes editing multi-column snippets more predictable and reduces unwanted changes while using mouse selection or Ctrl+A.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website builder now keeps text selection limited to the currently edited section, preventing accidental selection of an entire snippet when users press Ctrl+A or drag with the mouse. This makes editing multi-column layouts more predictable while preserving existing link handling behavior in edge cases.
Original PR description
Reproduction: 1. drag and drop a column snippet in website 2. click on one of the column and press ctrl+A, everything is selected 3. similarly the selection with mouse also can cross the whole…
Reproduction: 1. drag and drop a column snippet in website 2. click on one of the column and press ctrl+A, everything is selected 3. similarly the selection with mouse also can cross the whole snippet After this commit: Selection is now restricted to the element bound by the current container. This is achieved by setting the target element’s `contenteditable` attribute to `true` and its parent’s to `false`. These changes are reverted whenever `change_current_options_containers_listeners` is dispatched, and also during destory, ensuring that the `contenteditable` manipulation only applies dynamically while editing in the website builder. Special cases: 1. If the bound element is already `contenteditable="false"`, we do not modify the attribute to avoid unwanted changes. 2. If there is only one option container (e.g., the outermost container of a snippet), we do not alter the `contenteditable` attribute. This is because the outer section is naturally set as `contenteditable="false"`. Restriction is only needed when there are multiple option containers and an inner one is selected. Predicate in addition to isContentEditable: We introduce `is_element_editable_predicates` to determine if an element is editable, taking into account possible restrictions. Since the parent of the currently bound option container is set to `contenteditable="false"`, elements outside the bound element cannot be normalized. Using this predicate alongside `isContentEditable` ensures these elements are still considered editable when appropriate. This is a rare edge case, as typically only elements within the bound container are edited. See test change 1 for details. Test changes: 1. Link normalization checks if the link element is not unremovable and stops normalization if it is. In the `website_media_iframe_video` tour, there is a case where the link to be normalized is outside the bound option container. The new predicate is used for proper normalization in this scenario. 2. The PR is designed to minimize test breakage. If tests involve only one option container, the new contenteditable manipulation logic does not affect them. 3. A new test for this contenteditable manipulation is added. task-4901968 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website builder now keeps text selections within the currently edited content block instead of allowing users to accidentally select the whole editing area. This makes editing pages more predictable when using mouse selection, touch selection, or Select All shortcuts.
Original PR description
Before this commit: we can select the whole editing area in website builder by mouse selection or ctrl+a After this commit: when we do selection, the selection is checked that if it's inside the…
Before this commit: we can select the whole editing area in website builder by mouse selection or ctrl+a After this commit: when we do selection, the selection is checked that if it's inside the current element bond to the blue container. if the selection is out of the container, we reset the selection to keep it inside. In this commit, we introduced a new plugin in the html_builder to restrict the selections to the closest div element or p element. We also moved the click listener in builder_options_plugin.js to properly update the blue container to properly align with the restricted selection. We have the restriction function called on event keydown, mouseup and touchend. The listeners are set this way to avoid unnecessary selection restriction during the selection making. The keydown event is to handle ctrl+a to select the whole block and then restrict it. The mouseup and touchend handle the cases where we make the seleciton by mouse or touch. We introduced two concepts SPECIAL_BLOCK_WITH_TEXT_IN_NON_DIV and UNCROSSABLR_ELEMENTS. In general cases, we restrict the selection to the closes div element. However, for special blocks in SPECIAL_BLOCK_WITH_TEXT_IN_NON_DIV, we restrict selection in closest p element. UNCROSSABLR_ELEMENTS can be defined by tag name or classes. They are the elements that the selection should not cross, these elements can appear in a div element and the restricted selection should stop before crossing them. When we do select all, we first check if we should select the whole div element or the p element, then we extend the selection to one direction + correct the selection on UNCROSSABLR_ELEMENTS, then we do the same for the other direction. When we make selection by mouse, we first check if the current selection is beyond the div or p element it should be and we set the selection inside if it is. Then we check inside the div or p element, if there are UNCROSSABLR_ELEMENTS, we correct the selection by stopping the selection ahead of them. task-4901968 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Peppol configuration screen now remains available even if the service status check fails. This allows users to continue important actions such as unregistering instead of being blocked by a temporary service lookup problem.
Original PR description
Handle `api/peppol/2/get_services` errors gracefully, without blocking critical section of peppol functionnal flow (deletion). If the API endpoint for services returns an error (which should not be affecting any users), the whole peppol config wizard is no longer accessible. The users will therefore not be able to unregister. Note that with this change, if we get an API error, all services will be marked as disabled (which is fair, and better than displaying an API request error) no-task Forward-Port-Of: odoo/odoo#228800
This update strengthens quality checks for the self-ordering point-of-sale experience by adding automated test coverage for key screens, data models, and service behavior. It also reorganizes some internal test setup so future changes can be validated more safely and with fewer naming conflicts.
Original PR description
- Isolated `printer` service into a standalone file to avoid naming conflicts with `point_of_sale` during tests. - Introduced `setupSelfPosEnv` to mock and bootstrap the self-order testing environment. - Add Hoot test coverage for core components, models, and service logic Task-4945633 Forward-Port-Of: odoo/odoo#220537
This update improves the internal test tools used for the website editor so tests wait for the sidebar to finish loading and updating before continuing. This helps reduce flaky test results and gives teams more confidence that website builder changes are validated reliably.
Original PR description
We need a helper to wait enough
Resolved issues and error corrections
This fixes a typo in the UAE payroll configuration where a salary rule was incorrectly labeled "Out of version" instead of "Out of Contract". The correction helps payroll users see the intended wording and avoid confusion when reviewing salary rules.
Original PR description
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058
Stripe payments now handle currencies like the Ugandan shilling that use special decimal rules in Stripe. This prevents valid orders from being sent with the wrong amount and rejected at checkout.
Original PR description
Steps: - Activate the 'UGX' currency. - Make a sale order with amount 100 with 'UGX' currency - Try to pay that order (100 USh) using card Issue: - stripe throws the following error - > 'The Checkout Session's total amount must convert to at least 50 cents. 1.00 USh converts to approximately €0.00.' - Hence 100 USh sent was identified as 1 USh by stripe. This confirms issue with decimals and currency mapping. Cause: - 'UGX' is zero-decimal currency but stripe identify it as two-decimal. Fix: - Update mapping for such special currency cases for stripe that don't follow general rules opw-5075707 Forward-Port-Of: odoo/odoo#227688
This change updates the mail module's automated tests so saving email HTML fields waits until the save action is actually available. This helps reduce false failures in Odoo's runbot test system and improves confidence in build results.
Original PR description
This commit tries to solve runbot issues with mail html fields widget. It seems clicking on the save button manually is not generating a call to the backend. This could be due to the fact the button is not enabled due to the data being invalid. Therefore using the clickSave util could be useful in those situation since waiting that the button becomes enabled. This solution is not 100% sure to fix the issue in all cases but manually disabling the button is creating the issue we can observe in those runbots. There is a good chance it might work. fixes-runbot-231582 fixes-runbot-233049 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227484
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Forward-Port-Of: odoo/enterprise#94769
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Forward-Port-Of: odoo/enterprise#94769
The employee form now displays the private address city, state, and ZIP fields in better horizontal alignment. This makes the Swiss payroll employee form easier to read and use, reducing visual confusion when entering address details.
Original PR description
Wrap private address city, state, and zip fields in a flexbox container to ensure proper horizontal alignment on the employee form view. task-5082714 Forward-Port-Of: odoo/enterprise#94779
The employee form layout now keeps the private address city, state, and zip fields aligned on the same row. This improves readability and reduces visual confusion when viewing or editing employee address details.
Original PR description
Wrap private address city, state, and zip fields in a flexbox container to ensure proper horizontal alignment on the employee form view. task-5082714 Forward-Port-Of: odoo/odoo#226935
This fix prevents an error that could occur when an administrator clears browser data in Chrome while Live Chat is installed. It adds a safeguard so the Live Chat storage cleanup handles Chrome's empty storage notification correctly, improving reliability without changing user-facing features.
Original PR description
**Steps to reproduce:** Install 'Live Chat' Open Chrome Log in as 'Admin' Clear browser data **Current behavior before PR:** Clearing data triggers a storage event where the key parameter is null. An event listener attempts to call a method on this null key, leading to a runtime error. **Desired behavior after PR is merged:** A check has been added to ensure the key is not null, preventing the error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230298
This fixes an issue where some nested website product description text could not be translated when using multiple languages. Businesses can now maintain complete localized shop content, improving consistency for international customers.
Original PR description
Scenario: - enable second language on website - go to /shop/1 and try to translate description_ecommerce Result: this is not translatable Cause: Since at least…
Scenario:
- enable second language on website
- go to /shop/1 and try to translate description_ecommerce
Result: this is not translatable
Cause:
Since at least b455ea85853dfc19ed01e33986ad270cf80ee5d6 the
contenteditable attribute in ContentEditablePlugin is not set on an
element if it has a contenteditable ancestor.
TranslationPlugin disable all editable nodes containing editable nodes.
So with this combination, if we had a node for example:
```
<div class="oe_editable" data-oe-model="product.template" data-oe-id="1"
data-oe-field="description_ecommerce" data-oe-type="html">
<div>
<span class="oe_editable" data-oe-model="product.template"
data-oe-id="1" data-oe-field="description_ecommerce">
test
</span>
</div>
</div>
```
the contenteditable was added to the parent div.oe_editable, but was
removed by TranslationPlugin so the "test" text was not translatable.
Fix: move the code that adds data-oe-readonly class in the
after_setup_editor_handlers so it is run before contenteditable
attributes are set.
opw-5128618Vendor credit notes created through purchase order matching now show the correct positive quantity when reversing over-billed purchase items. This prevents confusing negative quantities and helps keep purchase billing corrections accurate.
Original PR description
Steps to reproduce:- - Create a Purchase Order with Product A(invoicing policy: received quantities) and Quantity 3. - Create Vendor Bill with Product A and Quantity 3 and match it with the PO. - Receive only 2 on PO. - Now on PO, Quantity: 3, Received:2, Billed:3 - Create a Vendor Credit Note for that partner, add an empty line and save. - Click on PO Matching at the top. - Select line from Vendor Credit Note and line from PO, click match. Problem: In Vendor Credit Note Quantity: -1 (which should be 1) Before this commit: When credit note values are prepared from purchase order, quantity to invoice on purchase order is set as quantity on credit note. After this commit: When credit note values are prepared from purchase order, inverse(-ve) of quantity to invoice on purchase order is set as quantity on credit note. task-4975200 Forward-Port-Of: odoo/odoo#230487 Forward-Port-Of: odoo/odoo#221203
The vendor on-time rate report now shows purchase delivery data even when ordered products do not have a product category. This restores the graph on vendor records and gives purchasing teams a complete view of supplier delivery performance.
Original PR description
**Steps to reproduce:** 1-Install the purchase_stock module. 2-Create a Purchase Order with a new vendor. 3-In the Purchase Order line, add a product without a category. 4-Confirm the order and…
**Steps to reproduce:** 1-Install the purchase_stock module. 2-Create a Purchase Order with a new vendor. 3-In the Purchase Order line, add a product without a category. 4-Confirm the order and validate the generated receipt. 5-In the vendor form view, click the On-time Rate smart button → no graph is visible. **Issue:** https://github.com/odoo/odoo/blob/77b3956ed5635d79ae8dc19423140dc6a10098f1/addons/purchase_stock/report/vendor_delay_report.py#L46-L50 ``` The On-time Rate graph is not displayed in the Vendor Delay report. ``` **Cause:** - From version 18.2, `categ_id` was removed as a required field. The report query still uses an inner join on `categ_id`, which excludes products without a category and prevents data from being generated. - Commit which make `categ_id` non require - https://github.com/odoo/odoo/pull/166323/commits/b039caecbeb04057fbccb1cc88d03a4946f88e8e **Solution:** - Replace the inner join with a left join so that products without a `categ_id` are also included in the report (with null values when the category is not set). **opw** - 4991367 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230388 Forward-Port-Of: odoo/odoo#225557
This update ensures the right domestic fiscal position is selected for companies in the UAE, Italy, Mexico, and Cambodia. This helps apply the correct domestic taxes and removes a duplicate Italian setup that could cause confusion or incorrect tax behavior.
Original PR description
Since the fiscal position sequence is used to determin the domestic fiscal position, and hence, the domestic taxes - it is important to properly sequence the fiscal positions. This commit fixes the…
Since the fiscal position sequence is used to determin the domestic fiscal position, and hence, the domestic taxes - it is important to properly sequence the fiscal positions. This commit fixes the following localizations: **AE** Sequences are added making Dubai the domestic fiscal position. However this needs to be improved to automatically prioritize the fiscal position based on the company's state. **IT** (l10n_it_edi_doi) An additional domestic fiscal position was mistakenly added. The correct domestic FP is defined in it's dependency module l10n_it. The duplicate FP is removed. **MX** Sequences are added **KH** Sequences are added No Task - l10n's identified by the fiscal position checks in `test_all_l10n` 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#230654
Spreadsheet-related tests now load the full chart library setup they depend on. This prevents later tests from failing unpredictably when they need specialized chart types such as treemap or geographic charts, improving reliability without changing user-facing behavior.
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/web#id=5003595&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The restaurant appointment feature has been updated so its floor screen stays compatible with recent core point-of-sale changes. This helps prevent display or navigation issues for businesses using restaurant tables together with appointments.
Original PR description
This commit adapts an overriding method to reflect changes in the base method done in this pr https://github.com/odoo/odoo/pull/176016. Forward-Port-Of: odoo/enterprise#91334
This fixes several display issues when opening a single bank statement line from a reconciled entry. The reconciliation screen now restores the summary when filters are cleared, avoids expanding unrelated lines, hides an irrelevant Statement button for single-line views, and opens the ledger using the correct journal context.
Original PR description
When you open a statement line from a reconciled move, it opens the bank reconciliation widget with only the selected statement line, which is unfolded by default. However, there are a few issues with this behavior, which are fixed in this commit: 1 - When entering the bank reconciliation widget, the initial line is unfolded. If you remove the filter, all the other lines become unfolded as well. This should not be the case; only the original line should remain unfolded. 2 - By default, the statement summary line is hidden. When the filter is removed, the summary remains hidden. We now ensure the summary is displayed again when the filter is cleared. 3 - The Statement button on the statement line (which is meant to create a new statement) doesn't make any sense when there is only one line. It is now hidden in this case. task-5108118 Forward-Port-Of: odoo/enterprise#95558
Odoo Studio now identifies custom fields using their stored status rather than relying on naming rules. This keeps custom field behavior reliable as older name-based checks are phased out and reduces duplicate configuration work in related apps.
Original PR description
With the fields method `_is_manual_name` being deprecated, checking whether a field is manual can be done through the state instead of the field name. This avoids the need to override the definition of a custom field name in another place in the applications that need to do it. Related https://github.com/odoo/odoo/pull/224524
Test data for Hong Kong payroll accounting now includes required leave allocation records. This prevents validation errors in automated checks, helping keep payroll-related releases stable.
Original PR description
Issue: Unit tests are failing because test data was created without leave allocations, leading to validation errors. Fix: Added leave allocation data for time off types which requiring allocation in some tests. build_error-230409 Forward-Port-Of: odoo/enterprise#96060 Forward-Port-Of: odoo/enterprise#93160
The sales timesheet invoicing wizard now uses a safer format for a setting in its screen definition. This prevents errors for customers with custom tools that read these views outside the browser, while keeping the user experience unchanged.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
This fixes an issue where custom hour or half-day options could be unintentionally cleared when an employee changed the time off type. It helps preserve the user's leave request choices and reduces the need to re-enter information.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
Gantt group headers now keep their sticky behavior even when the timeline has many or wide columns. This improves usability, especially on mobile screens, by preventing headers from stretching beyond the visible page area.
Original PR description
Gantt group headers could stop being sticky because their width was fixed based on the number and size of columns. Even though they were set to position: sticky, oversized headers could no longer remain aligned when scrolling, as they extended beyond the viewport and were constrained by the document width. This was especially noticeable on mobile, where group headers are often wider than the screen. The fix applies a max-width style to these headers, capping their size to the available space so they remain sticky without overflowing the document. task-4970992 Forward-Port-Of: odoo/enterprise#96612 Forward-Port-Of: odoo/enterprise#96015
This fix ensures multiple quote carousels on the same website page each receive a unique identifier. As a result, visitors can use carousel arrows without accidentally controlling a different carousel on the page.
Original PR description
The selector used to target the carousel, to generate unique ID, did not include some carousels (s_quotes[...]). This led to issues with the controllers that would not be linked to the correct carousel. Steps to reproduce the issue: - Go to Edit - Drop two "s_quotes_carousel" - Save - Click on the "next" arrow of the second carousel => The second carousel does not slide, but the first one does.
The appraisal skills list now scrolls properly on mobile devices, so users can access the justification field and add or remove skill entries. This fixes a mobile usability issue that could prevent completing appraisal skill information smoothly.
Original PR description
Horizontal scrolling has been disabled on the appraisal skills list. An unwanted side effect of that is that the justification field along with the add and remove buttons are not visible on mobile. This PR re-enables the scrolling and removes some dead css. task-5001344 Forward-Port-Of: odoo/enterprise#96527 Forward-Port-Of: odoo/enterprise#91882
This fixes a small issue in the HTML editor that could trigger an unexpected JavaScript error when inserting content. The change helps keep editing actions stable and prevents interruptions for users working with rich text fields.
Original PR description
In `dom.insert`, the variable `container` was being redefined to a constant within a `while` loop, making it impossible to use the original variable within the loop. This caused an `Uncaught Javascript Error` ("Cannot access 'container' before initialization") whenever trying to access it within the loop but above the redefinition. This commit renames the constant to a previously unused name.
opw-5053872
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe color picker in the website and HTML editing tools now reopens on the tab that matches the user's last color choice, such as custom colors or gradients. This makes styling pages smoother by avoiding extra clicks and reducing confusion when adjusting colors repeatedly.
Original PR description
*web, website Before this commit, `BuilderColorPicker` had no memory of the last used tab and always opened on the first tab, regardless of whether the user had previously selected a color. After this commit, if the user has done a selection, the color picker opens on the tab of that selection. How to reproduce the problem: 1. Drop a new snippet, e.g. `s_text_block`, 2. Click on the snippet, then open the "Background" color picker 3. Pick a custom color or a gradient 4. If the color picker is stil open, press ESC 5. Open the color picker again 6. PROBLEM: the color picker is opened on the "theme" tab task-4367641
The appraisal skills list now allows horizontal scrolling again on mobile devices. This makes the justification field and add/remove buttons accessible, so employees and managers can complete appraisal skill updates from smaller screens.
Original PR description
Horizontal scrolling has been disabled on the appraisal skills list. An unwanted side effect of that is that the justification field along with the add and remove buttons are not visible on mobile. This PR re-enables the scrolling and removes some dead css. task-5001344 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230310 Forward-Port-Of: odoo/odoo#222161
This fix ensures nested website content, such as product eCommerce descriptions, can be translated correctly when multiple languages are enabled. It prevents editable translation areas from being disabled too late, improving the translation experience for website managers.
Original PR description
Scenario: - enable second language on website - go to /shop/1 and try to translate description_ecommerce Result: this is not translatable Cause: Since at least…
Scenario:
- enable second language on website
- go to /shop/1 and try to translate description_ecommerce
Result: this is not translatable
Cause:
Since at least https://github.com/odoo/odoo/commit/b455ea85853dfc19ed01e33986ad270cf80ee5d6 the
contenteditable attribute in ContentEditablePlugin is not set on an
element if it has a contenteditable ancestor.
TranslationPlugin disable all editable nodes containing editable nodes.
So with this combination, if we had a node for example:
```
<div class="oe_editable" data-oe-model="product.template" data-oe-id="1"
data-oe-field="description_ecommerce" data-oe-type="html">
<div>
<span class="oe_editable" data-oe-model="product.template"
data-oe-id="1" data-oe-field="description_ecommerce">
test
</span>
</div>
</div>
```
the contenteditable was added to the parent div.oe_editable, but was
removed by TranslationPlugin so the "test" text was not translatable.
Fix: move the code that adds data-oe-readonly class in the
after_setup_editor_handlers so it is run before contenteditable
attributes are set.
opw-5128618This fixes an issue where links opened from non-Website apps could be incorrectly changed and send users to the website homepage instead of the intended internal page. The change keeps Website-specific link behavior limited to the Website app, reducing confusion when working in other Odoo apps such as Knowledge.
Original PR description
Before this commit: we have the function in website to prefix a frontend url with `@` when clicking on the url in linkpopover. However, this function is usually used inside website. It also affects places where the url is an internal redirecting url like `/knowledge/article/33` and prefixing will lead to the website homepage. After this commit: we also check if the current url of the browser is also a frontend url, which means the user is inside the website app. Frontend links will not be prefixed in the backend pages, e.g. in all other apps except for website. The website patch doesn't influence public users as they won't have access to the website app anyways. task-5048403 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes an internal website test more dependable by using a standard helper to switch between websites. It reduces unstable automated test failures, helping keep website translation features safer to release.
Original PR description
`snippet_translation_switching_website` was previously using custom steps to switch the website. Though it worked, it was not very deterministic and broke the tour in a few runbot builds. This commit updates the `snippet_translation_switching_website` tour to use the `testSwitchWebsite` helper function instead of custom steps, providing a more reliable and deterministic way to switch websites. runbot-[229696](https://runbot.odoo.com/odoo/error/229696) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an issue where choosing “Remote” as a job location on a website job application could trigger an error. The Remote option is restored in the location dropdown so users can edit job postings without interruption.
Original PR description
Steps to reproduce: 1. Go to Website → Jobs. 2. Open any job application. 3. Change the Job Location to the option "Remote". 4. A traceback occurs. Before this commit: When selecting a job location, initially no Many2One field is selected, that's why no many2oneid is find. which results in a null value being returned. This caused a traceback error After this commit: The "Remote" option is explicitly included in the dropdown, restoring the previous behavior.
This fixes an issue where highlighted, animated text could make mobile website pages scroll sideways. The change keeps the highlight graphic within the available screen width, improving the mobile editing and viewing experience.
Original PR description
Steps to reproduce: ==================== 1. Open Website Builder and switch to mobile screen 2. Select any word of a text 3. Apply highlight and animation Bug: - Page becomes scrollable to the right Cause: ======= SVG elements default to a `300px` `width`, which can overflow on smaller screens (e.g. mobile). This commit sets a `width` to prevent horizontal overflow. This is the link for the same issue but for vertical overflow. https://github.com/odoo/odoo/pull/215826 Reference: https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/width opw-5120678 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The attendance process now checks whether an employee had an active contract before marking them absent for a missed check-in. This prevents employees from being incorrectly flagged as absent before their contract start date, improving payroll and attendance accuracy.
Original PR description
To register absence, the cron looks for all employees that did not check in the previous day. However, it was not checking if the employee was in contract for that day. This commit fixes the issue by adding a check on the contract date start. task-4987428
Fixes receipt printing for Italian point-of-sale setups using fiscal printers when the receipt screen is skipped. This ensures customers still receive the correct fiscal receipt for the completed sale, avoiding missed printouts and printer errors.
Original PR description
This PR fixes two related bugs happening when printing a receipt with the Italian Fiscal printer First, before this PR, if the option to skip the receipt screen was ticked, then the receipt would…
This PR fixes two related bugs happening when printing a receipt with the Italian Fiscal printer First, before this PR, if the option to skip the receipt screen was ticked, then the receipt would never print. This was caused by the printing logic being implemented on the receipt screen instead of on the pos itself. steps to reproduce: 1. install l10n_it_pos 2. configure one pos 3. configure the IT printer 4. select to skip the receipt screen (print automatically) 5. open the pos 6. make a sale => no ticket printed and the chrome console shows a printer error With this new verison the printing logic was moved to the pos so that printing of fiscal receipts with the italian fiscal printer works, even when receipt screen is skipped. This put to light another potential bug related to how the `order` variable was treated. Before this PR, the printReceipt logic in the module would not pass the order to be printed. This can become a problem upon context changes, where `pos.get_order()` does not return the completed order, but a newly created one. This can for example happen when skipping the receipt screen with the option to "print automatically" (iface_print_auto). After this PR, we keep order as an argument, so we always print the last completed order and not a newly created one. opw-4882480 Forward-Port-Of: odoo/enterprise#95985 Forward-Port-Of: odoo/enterprise#91412
This fixes a survey issue where respondents who entered a comment as their answer in certain multiple-choice questions were incorrectly told the question was unanswered. It also strengthens validation so single-choice questions cannot receive multiple answers, improving data quality and reducing confusing survey behavior.
Original PR description
Issue: When answering a question with a comment in multiple choice with roaming activated for the survey, the UI will display a warning message that says the question requires an answer. Cause: The backend creates a skipped record if none of the pre-created answers is chosen. Solution: Don't create a skipped record if a comment counts as an answer and a comment is provided. Added validation of input and unittests Task-5062984 Forward-Port-Of: odoo/odoo#226022