Thursday, June 12, 2025
36 changes · saas-18.3
Enhancements to existing features
This update adds an optional way for authorized users or developers to run reports through Paper Muncher using a special debug setting in the URL. It can help test or adjust generated documents without changing normal day-to-day behavior.
Original PR description
THIS PR IS FOR NEXT DO NOT R+ THANKS --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This fixes how live chat participants are classified when a logged-in user interacts with a chatbot instead of a human operator. Accurate visitor classification helps ensure chat flows, reporting, and follow-up behavior work as expected.
Original PR description
Even if there is no user_operator (which is the case when using chatbot), the livechat_member_type should be set to "visitor".
Miscellaneous changes
Currently, when archiving products, they will still appear in the pos session. Steps to reproduce: ------------------- * Open a shop and close it (to store products in cache) * Archive any product from the previous shop * Open the shop again > Observation: The product is still visible in the product screen. Why the fix: ------------ Compared to previous versions, we are now caching products for performance issue. Currently, when opening a shop, all products that we modified after th
Original PR description
Currently, when archiving products, they will still appear in the pos session. Steps to reproduce: ------------------- * Open a shop and close it (to store products in cache) * Archive any product from the previous shop * Open the shop again > Observation: The product is still visible in the product screen. Why the fix: ------------ Compared to previous versions, we are now caching products for performance issue. Currently, when opening a shop, all products that we modified after the last modification date of the config parameters are loaded to the pos. This is done to reflect any change like the product price, and more. However, only active product were loaded. This meant that every product that was archived were not loaded and the information was not sent to the backend. opw-4657471 Forward-Port-Of: odoo/odoo#213806 Forward-Port-Of: odoo/odoo#205108
This fixes an issue in the HTML editor where entering a link label and then clearing the URL could leave the label inserted as plain paragraph text. Clicking outside the link popover now discards the incomplete link, preventing unintended text from appearing in documents or website content.
Original PR description
**Current behavior before PR:** Steps to reproduce: - Open link popover. - Type something in label input. - Type URL. - Make URL input empty. - Click outside the link popover. - Label is inserted as plain text in paragraph. **Desired behavior after PR is merged:** Label should not be inserted to the paragraph if URL is empty. Now, Clicking outside link popover is same as clicking on the "Discard" button in case of empty URL. task-4831650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The VoIP keypad search now handles contacts whose names are blank or otherwise missing without causing an error. This prevents interruptions when users search for phone contacts and improves reliability for edge-case contact data.
Original PR description
This commit fixes a bug that happens when the partner name is a falsy value like a `" "`. This made the `t9_name` to be `false` and then to give an error when trying to access the `trim()` function. A solution for this was to guard it with a condition to check if the t9_name is falsy or not.
A stability issue in the Belgian Codabox connection setup was fixed so new setup records no longer trigger an error when company VAT details are missing. This helps keep automated checks and setup flows reliable, especially for companies that have not yet filled in all registration information.
Original PR description
The test `test_computed_fields_without_dependencies` triggers all compute methods on new records (model.new()).
In `_compute_company_vat`, we had:
`re.sub(r'[^0-9]', '', wizard.company_id.vat or wizard.company_id.company_registry)`
When running on a new record, both `vat` and `company_registry` are `False`, so:
`re.sub(..., False)`
This causes `TypeError: expected string or bytes-like object, got 'bool'`.
We fix this by explicitly passing a string fallback.
[runbot-164199](https://runbot.odoo.com/odoo/error/164199)This update corrects migrated Luxembourg and Canada financial report definitions that could fail to open after a syntax change. It removes outdated internal settings that were no longer needed, helping affected reports load reliably in version 18.3.
Original PR description
Some aggregation expressions used to have 'cross_report' as subformula. Though, it was useless (since the aggregation only uses terms from the same report), and the subformula was removed from the data file without explicitly resetting it to False. This became a problem in 18.3, because the cross_report syntax changes. Because of that, a migrated report failed to open, since it still was using the old syntax on that expression. We fix that by explicitly emptying the subformula. This was done in https://github.com/odoo/odoo/commit/bbba54a08c56e0a4d040fc8035996d9d7cafedad for the monthly Luxembourgish tax report ; but some other occurrences needed to be fixed.
This PR addresses multiple issues related to flexible working hours across several Odoo modules, including attendance, overtime calculation, time off (leave) management, and work entry generation. The primary change modifies the _attendance_intervals_batch method in the `resource` module to create daily attendance blocks for flexible calendars, using the average daily hours and the required weekly hours. Attendance Intervals for Flexible Hours: Old Behavior: For flexible employees, a singl
Original PR description
This PR addresses multiple issues related to flexible working hours across several Odoo modules, including attendance, overtime calculation, time off (leave) management, and work entry generation.…
This PR addresses multiple issues related to flexible working hours across several Odoo modules, including attendance, overtime calculation, time off (leave) management, and work entry generation. The primary change modifies the _attendance_intervals_batch method in the `resource` module to create daily attendance blocks for flexible calendars, using the average daily hours and the required weekly hours. Attendance Intervals for Flexible Hours: Old Behavior: For flexible employees, a single interval spanned the entire requested period, leading to inaccurate calculations. New Behavior: For flexible calendars (not fully flexible), daily attendance blocks are created, centered around 12:00 PM, with each block’s duration equal to the average daily hours (hours_per_day). Fully flexible employees (no calendar) retain a single interval covering the full period. A flexible employee’s attendance was one continuous block over the entire period. +---------------------------+ | Attendance | | (e.g., Mon to Fri) | +---------------------------+ New Behavior (Daily Blocks): For a flexible calendar with 8 hours/day, attendance is split into daily blocks centered at 12:00 PM (e.g., 8:00 AM - 4:00 PM). +-----+ +-----+ +-----+ | 8h | | 8h | | 8h | | Mon | | Tue | | Wed | +-----+ +-----+ +-----+ Overtime Calculation: Updated hr_attendance.py to skip overtime computation for fully flexible employees (is_fully_flexible). For flexible calendars, overtime is now based on the new daily attendance blocks. Time Off: In hr_leave.py, flexible calendars now center leave intervals around 12:00 PM for each day, matching the attendance blocks. For half-day leaves, the duration is halved. Single-day leaves use specified hours, while multi-day leaves align with the virtual schedule. Work Entry Generation: In hr_contract.py, work entries for flexible calendars distinguish between one-day and multi-day leaves. Multi-day leaves align with the daily attendance blocks, while one-day leaves use exact hours. Updated hr_work_entry.py to skip marking leaves outside the schedule for flexible hours, as their virtual schedule is dynamically generated. Timesheet: In hr_holidays.py, timesheet generation for flexible employees uses the new attendance intervals or exact hours for hourly/half-day leaves. task-4771288 Forward-Port-Of: odoo/odoo#212803 Forward-Port-Of: odoo/odoo#209570
This commit fixes a test involving a boolean property field in list view that randomly fails. The problem was that we clicked twice to toggle the boolean value: once on the cell (I assume that it was done to switch the row in edition), and one on the checkbox to toggle it. However, boolean fields in list views don't require the row to be in edition to be toggled. So the first click already toggled the value, and the second click toggled it again, **sometimes** (I guess that's the non determinist
Original PR description
This commit fixes a test involving a boolean property field in list view that randomly fails. The problem was that we clicked twice to toggle the boolean value: once on the cell (I assume that it was done to switch the row in edition), and one on the checkbox to toggle it. However, boolean fields in list views don't require the row to be in edition to be toggled. So the first click already toggled the value, and the second click toggled it again, **sometimes** (I guess that's the non deterministic part, it was a question of timing there). So this commit fixes the issue by removing one of the 2 clicks. runbot error~224053 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#213389
Also replace an unnecessary listcomp by a gencomp as the list is not necessary. Though all the callsites seem to go through the entire sequence so likely doesn't do much. Forward-Port-Of: odoo/odoo#213884 Forward-Port-Of: odoo/odoo#213729
Original PR description
Also replace an unnecessary listcomp by a gencomp as the list is not necessary. Though all the callsites seem to go through the entire sequence so likely doesn't do much. Forward-Port-Of: odoo/odoo#213884 Forward-Port-Of: odoo/odoo#213729
This new module adds necessary features to support JoFotara properly with the following features: 1. Support for different invoice types and payment methods 2. Demo mode These features were added in a new module in stable, but will be merged with the main module in master. The commit also adds support for reporting invoices in their currency. task-4534862 task-4656902 Forward-Port-Of: odoo/odoo#213783 Forward-Port-Of: odoo/odoo#205890
Original PR description
This new module adds necessary features to support JoFotara properly with the following features: 1. Support for different invoice types and payment methods 2. Demo mode These features were added in a new module in stable, but will be merged with the main module in master. The commit also adds support for reporting invoices in their currency. task-4534862 task-4656902 Forward-Port-Of: odoo/odoo#213783 Forward-Port-Of: odoo/odoo#205890
### Steps to reproduce: - Create a storable product P with 10 units in stock. - Inventory > Configuration > Warehouse Management > Operation Types - Change the reservation Method of Delivery orders to Manual - Create confirm and manually assign a delivery order for 3 units of P - Process the DO in the barcode app, scan 1 unit of P > The line should be 1/3 - Leave and come back #### > The line is now at 1/1 Cause of the issue: Leaving the barcode app launch a call of the `split_un
Original PR description
### Steps to reproduce: - Create a storable product P with 10 units in stock. - Inventory > Configuration > Warehouse Management > Operation Types - Change the reservation Method of Delivery orders…
### Steps to reproduce: - Create a storable product P with 10 units in stock. - Inventory > Configuration > Warehouse Management > Operation Types - Change the reservation Method of Delivery orders to Manual - Create confirm and manually assign a delivery order for 3 units of P - Process the DO in the barcode app, scan 1 unit of P > The line should be 1/3 - Leave and come back #### > The line is now at 1/1 Cause of the issue: Leaving the barcode app launch a call of the `split_uncompleted_moves` in order to keep track of the initial reservation in the barcode app: https://github.com/odoo/enterprise/blob/577cb4b74a614d2dd472375b325706525ae591d7/stock_barcode/models/stock_move.py#L9-L11 However, one of the issue of the current system is that these new moves are expected to be assigned by the `_action_confirm`: https://github.com/odoo/enterprise/blob/577cb4b74a614d2dd472375b325706525ae591d7/stock_barcode/models/stock_move.py#L37 But they are not in certain cases and we should therefore force re-assignation in that case: https://github.com/odoo/odoo/blob/bf0461552effe806fdaa8f85f088be3c3f3be09d/addons/stock/models/stock_move.py#L1427-L1432 Enterprise: https://github.com/odoo/enterprise/pull/86394 opw-4798349 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213041 Forward-Port-Of: odoo/odoo#211616
Steps to reproduce: =================== - Create and save a Sales Order for a product tracked by quantity and without stock. > The forecast icon remains blue. - Click again on the product line. > The icon becomes red, indicating insufficient stock. Cause: ====== These RPC calls that delays the calculation of forecasted_issue: https://github.com/odoo/odoo/blob/saas-18.1/addons/sale_stock/static/src/widgets/qty_at_date_widget.js#L52C1-L62C10 Fix: ==== Since forecasted_issue
Original PR description
Steps to reproduce: =================== - Create and save a Sales Order for a product tracked by quantity and without stock. > The forecast icon remains blue. - Click again on the product line. > The icon becomes red, indicating insufficient stock. Cause: ====== These RPC calls that delays the calculation of forecasted_issue: https://github.com/odoo/odoo/blob/saas-18.1/addons/sale_stock/static/src/widgets/qty_at_date_widget.js#L52C1-L62C10 Fix: ==== Since forecasted_issue does not depend on these calls, we decided to execute them earlier to avoid the delay. opw-4776752 Forward-Port-Of: odoo/odoo#209450
Contributor License Agreement for Matias Gibbons I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213504
Original PR description
Contributor License Agreement for Matias Gibbons I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213504
Steps to reproduce: 1. install website, add a link into an editing area in Todo app 2. at the url input, we don't have the internal link suggestion (fuzzy search) when typing The PR target to 18.0 because fuzzy page search is considered as a basic function when website is installed. It's a functional fix for the html_editor In this PR, we've updated the linkpopover component of the html_editor to add a fuzzy page search feature to the URL input. Before 18.0, we created another OWL ap
Original PR description
Steps to reproduce: 1. install website, add a link into an editing area in Todo app 2. at the url input, we don't have the internal link suggestion (fuzzy search) when typing The PR target to 18.0…
Steps to reproduce: 1. install website, add a link into an editing area in Todo app 2. at the url input, we don't have the internal link suggestion (fuzzy search) when typing The PR target to 18.0 because fuzzy page search is considered as a basic function when website is installed. It's a functional fix for the html_editor In this PR, we've updated the linkpopover component of the html_editor to add a fuzzy page search feature to the URL input. Before 18.0, we created another OWL app to load the page anchors. Here we do it by using autocomplete component, users can now see and select from a dropdown of relevant Odoo page anchors as they type in the URL input field. To achieve this, we modified the popover template to include an autocomplete field specifically designed for the link popover. In the AutoCompleteInLinkpopover component, two new props were introduced: 1. inputClass: Allows customization of the input field's styling. 2. updateValue: Enables updating of the link popover's URL state when an option is selected from the autocomplete dropdown. We also remove the redundant linkpreview reload when clicking on apply, cause the loadAsyncLinkPreview is already called at onMounted. A unit test using hoot is added for testing the fuzzy page search in the linkpopover. task-4222657 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213057 Forward-Port-Of: odoo/odoo#187091
The commits in this PR address two points: 1. An account move created from a Purchase Order or Sales Order with an Analytic Distribution only has the analytical distribution from the PO/SO. The invoice/vendor bill does not add the Analytic Accounts expected from matching Analytic Distribution Models. 2. When confirming a SO with a product that creates a project, the Analytic Distribution of the line is filled with the Analytic Account of the project. But this does not happen if there is alre
Original PR description
The commits in this PR address two points: 1. An account move created from a Purchase Order or Sales Order with an Analytic Distribution only has the analytical distribution from the PO/SO. The invoice/vendor bill does not add the Analytic Accounts expected from matching Analytic Distribution Models. 2. When confirming a SO with a product that creates a project, the Analytic Distribution of the line is filled with the Analytic Account of the project. But this does not happen if there is already another AA in the line before confirming the SO. Another AA may be there because it was added manually or because of an existing distribution model set on the partner or the product. More information on each can be found in the commit messages. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213065 Forward-Port-Of: odoo/odoo#199763
**Issue** The "Terms and Conditions" section in the invoice report only takes up half of the page, leaving unnecessary blank space on the other half. **Steps to Reproduce:** 1. Install the Accounting app. 2. Navigate to Accounting > Customers > Invoices. 3. Create or open an invoice. 4. Add a multiline text in the "Terms and Conditions" field. 5. Confirm and print the invoice report. 6. Observe that the content only fills half the available width. **Expected Behavior:** The "Terms
Original PR description
**Issue** The "Terms and Conditions" section in the invoice report only takes up half of the page, leaving unnecessary blank space on the other half. **Steps to Reproduce:** 1. Install the Accounting…
**Issue** The "Terms and Conditions" section in the invoice report only takes up half of the page, leaving unnecessary blank space on the other half. **Steps to Reproduce:** 1. Install the Accounting app. 2. Navigate to Accounting > Customers > Invoices. 3. Create or open an invoice. 4. Add a multiline text in the "Terms and Conditions" field. 5. Confirm and print the invoice report. 6. Observe that the content only fills half the available width. **Expected Behavior:** The "Terms and Conditions" text should utilize the full width of the report layout if needed, especially for multiline entries. **Actual Behavior:** The text is constrained to half the page, reducing readability and leaving unused space. **Root Cause** The issue was introduced by PR #193399, which added the `overflow-auto` class to address a display bug from ticket 4416845. However, this class was applied too broadly, affecting the layout of the "Terms and Conditions" block. **Fix** To address this issue, a class is added specifically to the terms and conditions div to control its display. opw-4698250 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204801
Prior to this commit, headings indentation was inconsistent in some edge cases. Example: ``` <h3> <h2> <h3> <h2> <h3> ``` would appear instead of: ``` <h3> <h2> <h3> <h2> <h3> ``` Desired algorithm: - Indent heading by 1 unit to the right of the previous strictly lower heading, or no indent task-4836337 Forward-Port-Of: odoo/odoo#212380
Original PR description
Prior to this commit, headings indentation was inconsistent in some edge cases.
Example:
```
<h3>
<h2>
<h3>
<h2>
<h3>
```
would appear instead of:
```
<h3>
<h2>
<h3>
<h2>
<h3>
```
Desired algorithm:
- Indent heading by 1 unit to the right of the previous strictly lower heading, or no indent
task-4836337
Forward-Port-Of: odoo/odoo#212380This reverts commit 0b9859f693d4f23d17b0644e8e0b0ad0bb08c843. Scenario: insert the Parallax snippet, open the page in iPhone (tested on safari 14.0 up to 18.5). Result: the image is zoomed highly and doesn't respect background-size:cover property. Issue: having "background-attachment:fixed" in iOS breaks background-size property, and the image is not resized to fit. Fix: restoring 412117c2a789a24191cda040614d01fe290e77cc by reverting 0b9859f693d4f23d17b0644e8e0b0ad0bb08c843 since
Original PR description
This reverts commit 0b9859f693d4f23d17b0644e8e0b0ad0bb08c843. Scenario: insert the Parallax snippet, open the page in iPhone (tested on safari 14.0 up to 18.5). Result: the image is zoomed highly and doesn't respect background-size:cover property. Issue: having "background-attachment:fixed" in iOS breaks background-size property, and the image is not resized to fit. Fix: restoring 412117c2a789a24191cda040614d01fe290e77cc by reverting 0b9859f693d4f23d17b0644e8e0b0ad0bb08c843 since the fix was still necessary. This has the drawback that parallax that were working on non-iOS device will now scroll, but this will be consistent. opw-4848881 __pr note:__ I rebased on 18.1 since it was the revert original version. Forward-Port-Of: odoo/odoo#213835
Current behavior before PR: - Clicking an image inside `<div class="o-paragraph">` opened the text toolbar. This is because the selection traversed a whitespace text node that was not filtered out. Desired behavior after PR is merged: - This fix filters out such nodes to show the correct (image) toolbar. task-4844821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212879
Original PR description
Current behavior before PR: - Clicking an image inside `<div class="o-paragraph">` opened the text toolbar. This is because the selection traversed a whitespace text node that was not filtered out. Desired behavior after PR is merged: - This fix filters out such nodes to show the correct (image) toolbar. task-4844821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212879
**Current behaviour before PR:** Steps to reproduce: - Have a long content so that editable content becomes scrollable. - Scroll to the bottom of content. - Select the last line of text. - Try extending selection by scrolling through mouse. - Selection is not extending and it flickers. The issue happens because `scrollToSelection` function is invoked on selectionchange and forcefully scrolls to the selected content. As result, selection is not extending when scrolling. **Desired
Original PR description
**Current behaviour before PR:** Steps to reproduce: - Have a long content so that editable content becomes scrollable. - Scroll to the bottom of content. - Select the last line of text. - Try extending selection by scrolling through mouse. - Selection is not extending and it flickers. The issue happens because `scrollToSelection` function is invoked on selectionchange and forcefully scrolls to the selected content. As result, selection is not extending when scrolling. **Desired behaviour after PR is merged:** Now, `scrollToSelection` doesn't scroll to the selection if selection range is is within visible viewport area. As result, selection can be extended by scrolling. task-4756869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209650
- Before this commit: The tax with ID `attn_VAT-OUT-00-S`, which represents a `0% Service Tax`, had an incorrect description `6% VAT (Services)` instead of `0% VAT (Service)`. - After this commit: The typo has been corrected by updating the description to accurately reflect the tax rate as `0% VAT (Service)`. Task-4855172 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213752
Original PR description
- Before this commit: The tax with ID `attn_VAT-OUT-00-S`, which represents a `0% Service Tax`, had an incorrect description `6% VAT (Services)` instead of `0% VAT (Service)`. - After this commit: The typo has been corrected by updating the description to accurately reflect the tax rate as `0% VAT (Service)`. Task-4855172 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213752
Description of the issue/feature this PR addresses: When fetching videos from vimeo, if the video is deleted, an error is shown to the user which also block test `test_snippet_background_video`. Current behavior before PR: 1. Install website 2. Start `website_snippet_background_video` tour 3. You'll get an error if a video is missing Desired behavior after PR is merged: Now, with the error handling, a warning will be simply outputed for the missing video instead of a blocking mess
Original PR description
Description of the issue/feature this PR addresses: When fetching videos from vimeo, if the video is deleted, an error is shown to the user which also block test `test_snippet_background_video`. Current behavior before PR: 1. Install website 2. Start `website_snippet_background_video` tour 3. You'll get an error if a video is missing Desired behavior after PR is merged: Now, with the error handling, a warning will be simply outputed for the missing video instead of a blocking message --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213631 Forward-Port-Of: odoo/odoo#210307
The E-way Bill date was previously displayed in the `YYYY-MM-DD` format. ---- **In this commit** - This change updates the date formatting logic to display dates in the `DD/MM/YYYY` format for better readability and consistency in ewaybill report. --- task-4807690 Forward-Port-Of: odoo/odoo#213709 Forward-Port-Of: odoo/odoo#210583
Original PR description
The E-way Bill date was previously displayed in the `YYYY-MM-DD` format. ---- **In this commit** - This change updates the date formatting logic to display dates in the `DD/MM/YYYY` format for better readability and consistency in ewaybill report. --- task-4807690 Forward-Port-Of: odoo/odoo#213709 Forward-Port-Of: odoo/odoo#210583
When creating an invoice with a german customer, the domestic fiscal position is not applied. Instead, it's the european one which cause the invoice to have 0% taxes by default. opw-4448821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212649 Forward-Port-Of: odoo/odoo#192512
Original PR description
When creating an invoice with a german customer, the domestic fiscal position is not applied. Instead, it's the european one which cause the invoice to have 0% taxes by default. opw-4448821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212649 Forward-Port-Of: odoo/odoo#192512
Steps to Reproduce : 1. Activate the developer mode 2. Create a menu from the Site ---> Menu Editor option 3. Go to Configurations ---> Redirects 3.1. Select Action as : '301 Moved Permanently' 3.2. URL From : '/<url_added_at_time_Menu_creation' 3.3. URL To : '#' 4. Go to the Home page 5. Click on the Menu created 6. Traceback Occurs Expected Behavior: The page should not crash even when the paths of 'url_from' and 'url_to' are the same. Reason: When the paths of
Original PR description
Steps to Reproduce : 1. Activate the developer mode 2. Create a menu from the Site ---> Menu Editor option 3. Go to Configurations ---> Redirects 3.1. Select Action as : '301 Moved Permanently' …
Steps to Reproduce : 1. Activate the developer mode 2. Create a menu from the Site ---> Menu Editor option 3. Go to Configurations ---> Redirects 3.1. Select Action as : '301 Moved Permanently' 3.2. URL From : '/<url_added_at_time_Menu_creation' 3.3. URL To : '#' 4. Go to the Home page 5. Click on the Menu created 6. Traceback Occurs Expected Behavior: The page should not crash even when the paths of 'url_from' and 'url_to' are the same. Reason: When the paths of 'url_to' and 'url_from' are the same and the value of 'url_to' starts with '?' or '#' , the redirection loop is created and the page is crashed. This commit is resolving page crash issue by checking the path of 'url_to' and 'url_from' in '_serve_fallback' method, where redirection is happening. If path is same, then we will not redirect; instead, we will return from this method. If 'url_to' starts with '#' or '?', In this case, we are showing validation error to the user. task-3984211 Forward-Port-Of: odoo/odoo#175992
Problem: Given that the fields for the salary rules has already been generated for the current country set on the salary structure, an error occurs when accessing the payroll reporting records after the user changes the country because the payroll reporting records will reference a different field name. The outdated fields will not properly unlink, new fields won't be generated based on the new country set, but the payroll report will reference the new field name. Purpose: When changing the c
Original PR description
Problem: Given that the fields for the salary rules has already been generated for the current country set on the salary structure, an error occurs when accessing the payroll reporting records after…
Problem: Given that the fields for the salary rules has already been generated for the current country set on the salary structure, an error occurs when accessing the payroll reporting records after the user changes the country because the payroll reporting records will reference a different field name. The outdated fields will not properly unlink, new fields won't be generated based on the new country set, but the payroll report will reference the new field name. Purpose: When changing the country on a salary structure, the rules that appears on the payroll reporting needs to unlink outdated fields and regenerate the fields based on the new country value. The salary rule fields are dependent on the country due to its naming convention. Steps to Reproduce on Runbot: 1. Install Payroll 2. Create a new salary structure with no country 3. Create a new salary rule and enable "View in Payroll reporting" 4. Check fields and observe that a field prefixed by 'x_l10n_xx' was created 5. Change the country set on the salary structure 6. Try to access a payroll report record and a traceback is thrown opw-4649030 Forward-Port-Of: odoo/enterprise#87464 Forward-Port-Of: odoo/enterprise#83749
Currently, the VAT is split into two columns only if the VAT code consists solely of numeric values. However, in practice, VAT code may contain a combination of letters and numbers. **Steps to reproduce :** 1) Install `l10n_de_reports` and switch to the `DE` company 2) Create a partner with VAT as `NL000099998B57` from contacts 3) Now create a confirmed invoice for the above created partner 4) Go to "Accounting / Reporting / Audit Reports / General Ledger" 5) Download "DATEV DATA (Z
Original PR description
Currently, the VAT is split into two columns only if the VAT code consists solely of numeric values. However, in practice, VAT code may contain a combination of letters and numbers. **Steps to…
Currently, the VAT is split into two columns only if the VAT code consists solely of numeric values. However, in practice, VAT code may contain a combination of letters and numbers. **Steps to reproduce :** 1) Install `l10n_de_reports` and switch to the `DE` company 2) Create a partner with VAT as `NL000099998B57` from contacts 3) Now create a confirmed invoice for the above created partner 4) Go to "Accounting / Reporting / Audit Reports / General Ledger" 5) Download "DATEV DATA (ZIP)" and check "EXTF_customer_account.csv" **Issue:** Notice that the VAT was not split into country and VAT code for the above created partner. **Cause:** Previously, the code only split the VAT into country code and VAT code if the first two characters were alphabetic and the remainder was numeric. https://github.com/odoo/enterprise/blob/35944a38d306ea881e08e1d51ca77a3eab3a6e36/l10n_de_reports/models/datev_export_csv.py#L220-L227 This approach is insufficient because many countries have VAT codes that include both letters and numbers. For example vat formats for `NL` and `AT` https://business.gov.nl/finance-and-taxes/vat/numbers-for-vat/ https://ec.europa.eu/taxation_customs/vies/#/faq So by only checking whether the VAT code is numberic is not a valid thing. **Solution:** The code now uses the partner’s `_split_vat` method to separate the country code and VAT code whenever a VAT is provided and has more than two characters. It then validates the split VAT using the `simple_vat_check` helper method. If the VAT is valid, the country code (in uppercase) and the VAT code are output in separate columns; otherwise, the original VAT value is kept. This change ensures that VAT numbers with alphanumeric codes are correctly handled and split into their respective columns. opw-4820929 Forward-Port-Of: odoo/enterprise#87167 Forward-Port-Of: odoo/enterprise#86992
In this PR, we : - Readapt the Gantt progress calculation for attendance Related Community PR : https://github.com/odoo/odoo/pull/209570 task-4771288 Forward-Port-Of: odoo/enterprise#86934 Forward-Port-Of: odoo/enterprise#85368
Original PR description
In this PR, we : - Readapt the Gantt progress calculation for attendance Related Community PR : https://github.com/odoo/odoo/pull/209570 task-4771288 Forward-Port-Of: odoo/enterprise#86934 Forward-Port-Of: odoo/enterprise#85368
In this commit: = - Closed the session of POS to settle the journal balance. runbot-error-181911 Forward-Port-Of: odoo/enterprise#86880
Original PR description
In this commit: = - Closed the session of POS to settle the journal balance. runbot-error-181911 Forward-Port-Of: odoo/enterprise#86880
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911 Forward-Port-Of: odoo/enterprise#87317 Forward-Port-Of: odoo/enterprise#76356
Original PR description
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911 Forward-Port-Of: odoo/enterprise#87317 Forward-Port-Of: odoo/enterprise#76356
### Steps to reproduce: - Create a storable product P with 10 units in stock. - Inventory > Configuration > Warehouse Management > Operation Types - Change the reservation Method of Delivery orders to Manual - Create confirm and manually assign a delivery order for 3 units of P - Process the DO in the barcode app, scan 1 unit of P > The line should be 1/3 - Leave and come back #### > The line is now at 1/1 ### Cause of the issue: Leaving the barcode app launch a call of the `spli
Original PR description
### Steps to reproduce: - Create a storable product P with 10 units in stock. - Inventory > Configuration > Warehouse Management > Operation Types - Change the reservation Method of Delivery orders…
### Steps to reproduce: - Create a storable product P with 10 units in stock. - Inventory > Configuration > Warehouse Management > Operation Types - Change the reservation Method of Delivery orders to Manual - Create confirm and manually assign a delivery order for 3 units of P - Process the DO in the barcode app, scan 1 unit of P > The line should be 1/3 - Leave and come back #### > The line is now at 1/1 ### Cause of the issue: Leaving the barcode app launch a call of the `split_uncompleted_moves` in order to keep track of the initial reservation in the barcode app: https://github.com/odoo/enterprise/blob/577cb4b74a614d2dd472375b325706525ae591d7/stock_barcode/models/stock_move.py#L9-L11 However, one of the issue of the current system is that these new moves are expected to be assigned by the `_action_confirm`: https://github.com/odoo/enterprise/blob/577cb4b74a614d2dd472375b325706525ae591d7/stock_barcode/models/stock_move.py#L37 But they are not in certain cases and we should therefore force re-assignation in that case: https://github.com/odoo/odoo/blob/bf0461552effe806fdaa8f85f088be3c3f3be09d/addons/stock/models/stock_move.py#L1427-L1432 Community: https://github.com/odoo/odoo/pull/211616 opw-4798349 Forward-Port-Of: odoo/enterprise#87242 Forward-Port-Of: odoo/enterprise#86394
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive all sales team - With COMP A create a sales team with a set company_id: COMP A - With COMP A create and confirm a PO with COMP B as customer #### > Invalid operation: while generating the SO, the sales team belongs to COMP A and the SO to COMP B. ### Cause of the issue: The `team_i
Original PR description
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive…
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive all sales team - With COMP A create a sales team with a set company_id: COMP A - With COMP A create and confirm a PO with COMP B as customer #### > Invalid operation: while generating the SO, the sales team belongs to COMP A and the SO to COMP B. ### Cause of the issue: The `team_id` field of the `sale.order` model is a stored pre-computed and company checked field. As such, when the SO is created and even if no sales team is provided to the create vals: https://github.com/odoo/enterprise/blob/c61ce5a8e46e706bfb2025d4c9c79a39598e8827/sale_purchase_inter_company_rules/models/purchase_order.py#L70 a default sales team will be computed and set on the SO based on the "allowed_company_ids" (including both COMP A and COMP B): https://github.com/odoo/odoo/blob/1fa8678a33ab35195005d1b65b5eecb1d089fe56/addons/sale/models/sale_order.py#L453-L460 https://github.com/odoo/odoo/blob/1fa8678a33ab35195005d1b65b5eecb1d089fe56/addons/sales_team/models/crm_team.py#L81-L88 While the domain checks that the sales team is either not tight to a company or belong to comp B, since no such teams were found, we fallback the invalid sales team of COMP A. The invalid operation is then raised during the `_check_company` of the created record. opw-4627851 Forward-Port-Of: odoo/enterprise#86528 Forward-Port-Of: odoo/enterprise#83487
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger **Steps to Reproduce** 1. Install the Accounting module 2. Go to Accounting > Accounting > Journal Entries 3. Create a new Journal Entry 4. Set one line to account 121000 (Accounts Receivable), assign partner "Administrator", and debit $100 5. Set the other line to account 101401 (Bank), and
Original PR description
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger…
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger **Steps to Reproduce** 1. Install the Accounting module 2. Go to Accounting > Accounting > Journal Entries 3. Create a new Journal Entry 4. Set one line to account 121000 (Accounts Receivable), assign partner "Administrator", and debit $100 5. Set the other line to account 101401 (Bank), and credit $100 6. Post the journal entry 7. Navigate to Accounting > Customers > Customers 8. Open the "Administrator" customer record 9. Notice that the Customer Statement smart button is not displayed **Root Cause** The visibility of the smart button is incorrectly tied to the presence of posted invoices (account.move), instead of the existence of any outstanding balance on the customer account **Fix** Adjust the visibility logic to show the Customer Statement button if the customer has any ledger balance, even without invoices. This restores the behavior present in 17.0 Opw-4787174 Forward-Port-Of: odoo/enterprise#87134 Forward-Port-Of: odoo/enterprise#86446
### Before this PR If the backorder is "always", on the shopfloor when clicking "close production" on the "production overview", it redirects to the backend ### After this PR Clicking on close production it does not redirect to backend Forward-Port-Of: odoo/enterprise#85422 Forward-Port-Of: odoo/enterprise#79918
Original PR description
### Before this PR If the backorder is "always", on the shopfloor when clicking "close production" on the "production overview", it redirects to the backend ### After this PR Clicking on close production it does not redirect to backend Forward-Port-Of: odoo/enterprise#85422 Forward-Port-Of: odoo/enterprise#79918
**Before this commit:** - Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary caused a schema validation error from the portal: {"error_msg": "Error in Json structure validation.", "error_cd": "RET191106"} - This occurred because the generated JSON included the `hsn` key with an empty dictionary, which is invalid as per government schema requirements. - The portal expects the `hsn` field to be absent if no data is available, or to contain valid nested keys an
Original PR description
**Before this commit:** - Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary caused a schema validation error from the portal: {"error_msg": "Error in Json structure…
**Before this commit:**
- Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary
caused a schema validation error from the portal:
{"error_msg": "Error in Json structure validation.", "error_cd": "RET191106"}
- This occurred because the generated JSON included the `hsn` key with an
empty dictionary, which is invalid as per government schema requirements.
- The portal expects the `hsn` field to be absent if no data is available, or to
contain valid nested keys and values.
**After this commit:**
- A `ValidationError` is raised when attempting to send a GSTR-1 return with no
HSN data, preventing the generation and submission of an invalid JSON payload.
- This ensures that the `hsn` field is only added to the payload when it contains
at least one section with data.
- Helps avoid unnecessary submission failures and improves user feedback at the
point of action.
task - 4807628
Forward-Port-Of: odoo/enterprise#87326
Forward-Port-Of: odoo/enterprise#86655