Daily updates from Odoo
Wednesday, August 20, 2025
21 changes · 18.0
Resolved issues and error corrections
The Italian accounting localization now includes the missing 0% EU tax for exported services. This ensures invoices can show the correct legal note for these service exports, helping businesses stay compliant with Italian tax requirements.
Original PR description
Description of the issue this commit addresses: The export tax for services is missing in the italian localization. It's required because it has a different legal note than the usual 0% EU tax. --- Desired behavior after this commit is merged: The italian localization has a 0% EU S for exported services in EU with the right legal note. --- task-4715771 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223423 Forward-Port-Of: odoo/odoo#205521
This fix protects a hidden search setting from being accidentally removed while editing website content. It prevents save errors and keeps website search forms working reliably after page edits.
Original PR description
Problem: In Website, the `order_by` hidden input stores the selected sort order for search. This input can currently be deleted via `oDeleteBackward`, which may break the form behavior. Solution: Make `order_by` input unremovable to ensure form integrity. Steps to reproduce: - Add a "Title" text block - Insert a search element before the text - Delete all the text - Use backspace to delete the header block - Save - > A traceback occurs because the `order_by` input was deleted opw-4863089 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220107
Purchase replenishment now reuses an existing purchase order only when its project matches the replenishment need. This prevents items for one project from being incorrectly grouped into a purchase order for another project or into a project-specific order when no project applies.
Original PR description
Steps to reproduce: - Create a storable product: - Vendor: Azure Interior - Routes: MTO + Buy - Click on the replenishment button → a purchase order is created - Open the PO and set a project - Replenish the product again Problem: The first purchase order is reused even though it has a project, while it should not. Solution: When searching for a candidate purchase order, ensure that the `project_id` matches the procurement values: - A PO with a project can only be reused for procurements with the same project. - A PO without a project can only be reused for procurements without a project. opw-4976606
Payment methods set up in a parent company are now visible when working from a child branch. This prevents missing payment details on contact records and helps branch users access the same payment information as the parent company.
Original PR description
In this bug, the payment method is not shown in the child branch. To reproduce: 1- Create a db with account and contact app installed 2- Create a company and a branch 3- Create a payment method in parent company and add it to contact form of a partner 4- Go to child branch. You can see the payment method is not shown in the contact form. opw-4920219
Selling event tickets in Point of Sale no longer loads every registration tied to that event. This avoids unnecessary background work and reduces the chance of errors when processing event sales.
Original PR description
Before this commit, selling an event in PoS would trigger the loading of all event registrations linked to the event. This was unnecessary and caused issues, as it also attempted to load the related PoS order lines, leading to potential errors. opw-4956313 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Attendance overview list now shows only employees who actually have attendance records when grouped by employee. This reduces clutter and helps managers focus on relevant attendance data without changing the Gantt view behavior.
Original PR description
To reproduce: ============= - Activate the "Attendances" app. - Go to Attendances > Overview. - Switch to list view. - Group by Employee. Issue: ====== The current domain fetches all employees…
To reproduce: ============= - Activate the "Attendances" app. - Go to Attendances > Overview. - Switch to list view. - Group by Employee. Issue: ====== The current domain fetches all employees matching the filter, regardless of whether they have attendance entries in the grouped model. https://github.com/odoo/odoo/blob/5b5f0bf795ca538e91f063f2b3185c12b1d0a992/addons/hr_attendance/models/hr_attendance.py#L677 Fix: ==== Restrict the employee list to only those linked to a resource that appears in the grouped data https://github.com/odoo/odoo/blob/5b5f0bf795ca538e91f063f2b3185c12b1d0a992/odoo/models.py#L2360-L2361 The problem is the behavior of gantt view will change it's behavior So we have to applied only to the list. there's something unique when we call it from the gantt which is `gantt_start_date` property that we will use it so we can differentiate between list and gantt view -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes internal spreadsheet test utilities so they can handle sorted data consistently. It helps improve the reliability of spreadsheet-related testing, reducing the chance of regressions reaching users.
Original PR description
Task: 4962837 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures invoice sending options and extra electronic invoicing choices are handled consistently across accounting and localization modules. It reduces the risk of duplicate or incorrectly processed sending methods when generating or sending electronic invoices.
Original PR description
It seems pretty straight forward. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an inconsistent automated test failure in the sales stock area by ensuring the test product has the expected stock behavior and quantity. It helps keep validation reliable when localization modules affect inventory rules.
Original PR description
Steps to reproduce the bug: - Install l10n_ke_edi_oscu_stock -Try to run the test: test_package_with_moves_to_different_location_dest Problem: A user error is raised: “There is nothing eligible to put in a pack. Either there are no quantities to put in a pack or all products are already in a pack.” This happens because when only sale_stock is installed, the product type is Consumable, so the move gets assigned directly. However, with l10n_ke, the product becomes Storable, and when assigning the move, the system checks whether there is enough quantity available in stock. Solution: Force the product to remain Storable in all cases and update its stock quantity accordingly. [runbot-108414](https://runbot.odoo.com/odoo/runbot.build.error/108414) Forward-Port-Of: odoo/odoo#222940
Payroll advice reports now use the selected payslips to determine the payroll period instead of relying on the current date. This prevents incorrect or missing period information when generating advice for past payroll runs.
Original PR description
Generating a payroll advice would use the current date in order to find other payslips that are for the current period and use this to fill in the period on the advice. However, if you do this for a past payslip, it will either not find any or get the incorrect period. Changed the behavior to use the actual payslips and get the period from those payslips to fill in the period on the report. opw-4582990
This update makes an automated test for embedded PDF handling work consistently whether an optional file-detection library is installed or not. It helps keep the Documents and Accounting integration stable across different deployment and testing environments without changing user-facing features.
Original PR description
The test `test_embedded_pdf` fails when the magic lib is installed. modified cherry-pick of 22cbdb477 Adapted to work with or without the lib as the lib is not required in version < 19.0.
Applicants could hit a 404 error when trying to review and sign an offer if the signing setup used certain custom roles. The fix finds the correct signing access using the user's email address instead, so contract review and signing works regardless of role assignment.
Original PR description
### Problem: Previously, clicking the "Review Contract & Sign" button triggered an RPC call that attempted to retrieve an access token by filtering on the employee role. If the contract did not…
### Problem: Previously, clicking the "Review Contract & Sign" button triggered an RPC call that attempted to retrieve an access token by filtering on the employee role. If the contract did not include this role, the search returned no results, causing the redirection to fail with a 404 error due to the missing token. ### Description about the solution: This commit updates the search domain to look for a record that matches the current user's email address instead. This ensures the correct access token is retrieved, regardless of role assignment. https://github.com/user-attachments/assets/6c8cd892-2d85-4da7-b756-8b3cbf987b60 ### Steps to reproduce the issue: 1) In the Sign application, create a PDF template with a new role and an HR responsible role. 2) In the Recruitment application, create a new contract template and select the PDF template created above. 3) In the contract role field, select the employee as the signatory for the line having newly created role. 4) For any job position, generate an offer for an applicant. 5) Select the contract template created in step 2. 6) Click the "Send By Email" button to send the contract. 7) Open the URL and complete the personal application form. 8) Click the "Review Contract & Sign" button. 9) The system attempts to open the sign document but ends up on a 404 error page. https://drive.google.com/file/d/1aIWJvDlFtd40T5istjKhDvnWFae9wxIM/view opw-4886526
Odoo now creates a device record for every detected IoT network device instead of reusing existing records across the database. This prevents printers from becoming unavailable when Windows IoT boxes report duplicate identifiers or when multiple IoT boxes share a network and one is offline.
Original PR description
We used to create network device records only for network devices that didn't exist in the whole database. This allowed us not to duplicate printer records for clients that had two iot boxes on the same network. We remove this logic as it over complicates the IoT flow and understanding of clients/support. On Windows IoT Boxes, we sometimes get the same identifier for two different printers on two different networks, making the second printer unusable from the db. More, if for some reason a client has two Windows IoT boxes on the same network, and one is off, he won't be able to print through the first one. Backport of odoo/enterprise#92360 Forward-Port-Of: odoo/enterprise#92528
Receipt validation now correctly triggers automatic lot or serial number label printing after a quality check is passed. This prevents warehouse users from missing required labels and also improves completion handling when receipts contain items with and without quality checks.
Original PR description
## Issue: When 'auto_print_lot_labels' is activated on Receipts Operation Type, and you received a product, the print action wasn't trigger when you validate before making the Quality Check The…
## Issue: When 'auto_print_lot_labels' is activated on Receipts Operation Type, and you received a product, the print action wasn't trigger when you validate before making the Quality Check The wizard is automatically opened but when you click on the Pass button, the wizard was closed without sending the print action ## Cause: The action wasn't return by the wizard function 'action_generate_next_window()' making the only action to be a 'act_window_close' ## Note: The state wasn't correctly set to done for all products when you validate pickings both with and without QCs in them at the same time, it should now be fix Enabling Delivery Slip for the Receipts will make the SN to not be print even after disabling the option ## Steps to reproduce: - Toggle the Lot/SN Labels option in the Hardware Tab for the Operation Type Receipts - Create a Product tracked by Unique Serial Number - Add a Quality Check for the Receipts operation - Create a New Receipt for the product - Mark as Done and Add the Serial Number - Validate the receipt and Pass the check - Before the fix, no document was downloaded opw-4790427
The French VAT report configuration has been updated to use the 2025 reporting year. This keeps the report aligned with the latest official version and avoids automated server test failures while leaving the VAT export content unchanged.
Original PR description
The version for 2025 is out. As far as we can see, the changes don't concern the export of VAT report. So we just change the value to 2025. (2024 non blocking for prod is still accepted in 2025 but it fails for the server test). task-4617663 Forward-Port-Of: odoo/enterprise#92542
Odoo Studio now ignores automatically added helper fields when displaying and arranging views. This prevents invisible system-added fields from interfering with layout editing, helping users make reliable changes in Studio.
Original PR description
…lly added since commit odoo/odoo@6f06420e4a9443c52dc0cb427f8f55eb4aecabce, fields that are present in expression but not in the arch are automatically added. This caused problems in Studio, where those were considered normal nodes, while they should only be there to tell the model what to fetch. This commit aims at not rendering those nodes in a way that prevent them from parasiting the computation of xpaths. opw-4981741
The Planning app no longer shows the auto-plan action for shifts that do not yet have a start or end date. This prevents users from triggering an error when working with unscheduled shifts from sales planning.
Original PR description
**Step to reproduce:** 1. Install sale_planning module 2. Create a product (Sales -> Products): - Set Product Type to Service - Enable Plan Services - Assign both a Planning Role and resources. 3.…
**Step to reproduce:**
1. Install sale_planning module
2. Create a product (Sales -> Products):
- Set Product Type to Service
- Enable Plan Services
- Assign both a Planning Role and resources.
3. Create a sales order for this product.
4. Confirm the Sales Order.
5. Click the "To Plan" button.
6. Switch to List View.
7. Open the Unscheduled Shifts (None) section.
8. Try to generate an Auto Plan.
**Issue:**
A traceback is raised during auto-planning when the start_datetime or end_datetime on the planning slot is missing.
`AttributeError: 'bool' object has no attribute 'astimezone'`
**Cause:**
The `auto_plan_ids()` method assumes that shifts have valid start_datetime and end_datetime.
However, for unscheduled shifts, these fields can be empty (i.e., False), causing the error.
https://github.com/odoo/enterprise/blob/42d829ea6e6a98f251cfffc8fb67b5320a5ada12/planning/models/planning.py#L1076-L1077
**Solution:**
we hide the auto-plan button, in case we do not have startdate or enddate
opw-4812509
co-authored by: Ajit Singh (aksi@odoo.com)
Forward-Port-Of: odoo/enterprise#89383Opening the list side panel in spreadsheets now works even when a saved sort refers to a field that was later removed or renamed. This lets users access the panel and remove the invalid sorting instead of being blocked by a crash after an upgrade.
Original PR description
If a list is sorted on an invalid field and you try to open the list side panel, it crashes. It should open to allow the user to remove the sorting. A list with an invalid sorting field if the spreadsheet was created in a given version, then upgrades to a version where that field has been removed or renamed. Task: 4962837
This fix prevents outdated map locations from remaining visible for child contacts after a parent company address is changed. It keeps contact addresses and map markers aligned, reducing confusion when users view customers or companies on the map.
Original PR description
**Issue:** When adding contacts with incorrect address data, the Map View could display outdated or incorrect markers **Cause:** The `partner_latitude` and `partner_longitude` fields were not reset…
**Issue:** When adding contacts with incorrect address data, the Map View could display outdated or incorrect markers **Cause:** The `partner_latitude` and `partner_longitude` fields were not reset for child contacts when the parent’s address changed **Fix:** We added a `partner_latitude` and `partner_longitude` reset when changing address in write We added `partner_latitude` and `partner_longitude` in the _address_fields to update the value each time it can be required, like on address change or contact creation The extension in the _address_fields is there to detect the changes on children synchronization, because it only replace the value that where present in vals for the fields in that list In that way, it will detect more address changes and trigger the write for the children with the corresponding parent `partner_latitude` and `partner_longitude` We also make sure that those extra _address_fields will not be displayed in the formatted address by removing them from `_formatting_address_fields` **Limitations:** One issue remains during import: the parent-child address synchronization is disabled on contact creation This means children may be created with addresses different from the parent’s and have mismatch positions on Map This can be corrected by updating or re-importing the parent to trigger synchronization **Steps to reproduce:** With Form: - Add a parent contact company with a valid address - Add a child contact related to company, with a valid address - Open the Map View, both address must appear on Map - Modify the parent address to remove street (make it invalid) - Check that the child address match the parent one - Check the Map View, before the fix the child should remain with a wrong position With import: Create an import file (an example is in on the ticket) - Add a sheet for the Parent contact with an valid address - Add a sheet to add the Child contact with a parent_Id, with a valid address - Add a sheet to break the address on the parent, removing the street - Open the contacts app - Import the valid Parent and Child sheets (you need to select Related Company / External ID) - Add a filter to get your created contacts - Check the Map View (You should see both parent and child) - Import the Break parent sheet - Check that the child address match the parent one in the Form - Check the Map View, before the fix the child should remain with a wrong position A file can be found on the ticket with pre-made data **Technical notes:** The reset logic is duplicated from the `base_geolocalize` module, because this module is optional and may not be installed in all cases Since `base_geolocalize` is not always present, its `write` override will not be triggered consistently On the other hand, `web_map` is automatically installed with the Enterprise version of Odoo Therefore, it is necessary to implement this fix in at least one of the two modules to ensure the behavior is active when Enterprise is used We chose to keep the override in both `base_geolocalize` and `web_map` to cover both Community and Enterprise cases reliably An alternative approach would be to move the reset logic directly into `res.partner` in the `base` module, making it always available regardless of installed addons and avoiding the duplication opw-4842910 Forward-Port-Of: odoo/enterprise#90392
WhatsApp template previews no longer mistake underscores inside links or similar text for italic formatting. This prevents portal links and other URL values from being displayed incorrectly, while normal italic formatting with spaced underscores still works as expected.
Original PR description
Steps to reproduce: 1. Go to a WhatsApp template, for e.g. Sale Order. 2. Update the sample value for the Portal Link variable to include an underscore. 3. Click on Preview Issue: Due to the current…
Steps to reproduce: 1. Go to a WhatsApp template, for e.g. Sale Order. 2. Update the sample value for the Portal Link variable to include an underscore. 3. Click on Preview Issue: Due to the current regex, we will apply italic to any underscore we find which is not ideal, mostly when we work with URLs that can contain underscores like "acces_token" which we will try to apply italic to it too. Solution: Following the most common logic for italic formatting, we will only apply italic formatting when the underscore is surrounded by whitespace. This is the same way it already behaves in Whatsapp. If we write it like_this_for example, it will not apply italic formatting, but if we write it like this _this_ it will apply italic formatting. So this for example: **"If we write it like_this_for example"** Will be like - before the fix: **"If we write it like<i>this</i>for example"** Will be like - after the fix: **"If we write it like_this_for example"** opw-4720017 Forward-Port-Of: odoo/enterprise#91217
Currently an exception is generated due to the variables translated into the `Spanish (Latin America)` language. `KeyError: 'tipo'` This commit fixes the issue by using the original variable name instead of translated terms. sentry-6046430921
Original PR description
Currently an exception is generated due to the variables translated into the `Spanish (Latin America)` language. `KeyError: 'tipo'` This commit fixes the issue by using the original variable name instead of translated terms. sentry-6046430921