Daily updates from Odoo
Thursday, July 17, 2025
32 changes · saas-18.4
Resolved issues and error corrections
Factur-X electronic invoices now use the deferred start and end dates from invoice lines when those dates are available. This ensures the billing period shown in the XML matches the actual service period, improving accuracy for customers using deferred revenue dates.
Original PR description
### Issue: The FacturX XML has a field `BillingSpecifiedPeriod`, it should depend on `deferred_start/end_date` if they are there. Currently, it only outputs the invoice date as start date and the due…
### Issue: The FacturX XML has a field `BillingSpecifiedPeriod`, it should depend on `deferred_start/end_date` if they are there. Currently, it only outputs the invoice date as start date and the due date as end date. ### Steps to reproduce: - Install "l10n_de" and switch to a German company - Go to a contact, in the page Accounting > Electronic Invoicing change the format to "Factur-X (CII)" - Create an invoice for this contact - Add a start date and end date on the line of this invoice (`deferred_start/end_date`) - Confirm and send to Factur-X - In the generated XML the dates used are the invoice date and the due date ### Cause: As the `deferred_start/end_date` fields are defined in enterprise and the XML generation is in community, this [commit](https://github.com/odoo/odoo/commit/f0c5d5b46444a289bf55ad5846623d48ac3a3b71) set dates defined in community instead of the deferred ones. ### Solution: Mimicking [the way it's done for UBL20](https://github.com/odoo/odoo/blob/638268a81ed5a292a02d7fc353c4954159de54e1/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py#L846) we check if `deferred_start/end_date` are defined (i.e. account_accountant is installed). If it's the case, we use the min/max of the `deferred_start/end_date` as start/end date of the `BillingSpecifiedPeriod` in the XML. To include as much info as we can this commit also adds the `deferred_start_date` and `deferred_end_date` on lines. opw-4874370 Forward-Port-Of: odoo/odoo#218888 Forward-Port-Of: odoo/odoo#215595
This fixes an issue in the HTML editor where selecting text around a linked image could accidentally make the surrounding text part of the same link. Users can now select content near linked images without unintentionally changing links, improving editing reliability.
Original PR description
Reproduction: 1. In Todo, add some text, insert an image right after the text, insert some text after the image 2. add a link to the image, select text around the image (before and after it) 3. after the selection, the selected text is part of the link **Before this Commit:** For non-collapsed selections, the link popover opens when an image is included in the selection. However, the `openLinkTools` method may unintentionally extend the link, causing the link to spread on text outside of the link element. **After this Commit:** Stricter conditions are applied to ensure `openLinkTools` is only called when the non-collapsed selection includes an image, the parent element is a link, and the selection is entirely contained within the parent link element. task-4903904 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218149
This fix prevents the Point of Sale from crashing when an employee logs in, loses internet connection, and reloads the page. It ensures employee login data is prepared earlier so offline POS sessions can recover more reliably.
Original PR description
Steps to reproduce: =================== - Enable Login with Employee in POS settings - Open POS and log in with employee - Turn off the internet connection - Reload the POS page Issue: ====== - POS crashes with the following error: `TypeError: Cannot read properties of undefined (reading 'push')` - At that point, employeeBuffer is still undefined Cause: ====== - The method `set_cashier()` is triggered during the parent `setup()` - `employeeBuffer` was only initialized after `super.setup()` - In offline mode, this sequence still executes, leading to an exception when trying to .push() into an undefined buffer Fix: ==== - Moved the initialization of `employeeBuffer` to the beginning of the setup() method Task: 4850543 Runbot Error: 227777 Forward-Port-Of: odoo/odoo#219341 Forward-Port-Of: odoo/odoo#216843
Receipts created with a specified invoice date now keep that date instead of being automatically set to today. This helps ensure accounting records reflect the intended transaction date and avoids manual corrections.
Original PR description
* When invoice_date is set with create method for receipts, the date is not set correctly to invoice_date, but it's wrongly set to today. * Missing dependency 'move_type' to compute method. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218775
This change prevents sales project screens from breaking when the PDF quote builder app is removed and reinstalled. It makes the quote builder area hide safely when unavailable, improving reliability during app maintenance.
Original PR description
* Steps to reproduce: 1. Install sale_project in a new database 2. Uninstall and reinstall sale_pdf_quote_builder (using test_module_operations) * Traceback: Element '<page name="pdf_quote_builder">' cannot be located in parent view * Issue: sale_project looks for pdf_quote_builder in the view_order_form. That element is introduced by pdf_quote_builder in sale_order_form_inherit_sale_pdf_quote_builder but there is no dependency between the two (sale_pdf_quote_builder is just auto_install on sale_management which is a dependency of sale_project). So if sale_pdf_quote_builder is uninstalled sale_project is not touched, and the view is broken. * Fix: We replace the use of the xpath in the form view of our widget (sale_project) by a context key to hide the pdf quote builder conditionally. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where returning an intercompany dropship order could incorrectly increase the delivered quantity on the original sales order. The change ensures returned dropshipped items reduce delivered quantities as expected, improving accuracy for sales and inventory records.
Original PR description
**Current behavior:** Returning an intercompany dropship (product vendor is another `res.company`) increases the original sale order line's delivered qty. **Expected behavior:** The delivered qty…
**Current behavior:** Returning an intercompany dropship (product vendor is another `res.company`) increases the original sale order line's delivered qty. **Expected behavior:** The delivered qty should decrease once the return is completed. **Steps to reproduce:** 1. Create two companies, enable all the inter-company synchronization rules 2. Create a product with the dropship route and set the other company as the vendor 3. Create a sale order for the dropship product, confirm 4. Confirm the corresponding purchase order -> validate the dropship picking 5. Return the dropship picking 6. See the sale order line's delievered qty is wrong **Cause of the issue:** The dropship return move(s) are incorrectly flagged as outgoing. **Fix:** Use the `_is_dropshipped_returned()` method to filter these moves from being considered outgoing. Also added on to an existing dropshipping test so that there is now coverage for this use-case when the vendor is not another company, as this was previously not covered. opw-4526750 Forward-Port-Of: odoo/odoo#200133
The website translation editor now hides toolbar actions that cannot be used in translation mode, reducing confusion for users. It also restores the ability to add or remove text animations while translating, and fixes an error that could appear when editing translated lists.
Original PR description
> [LOCO] in translate mode, hide the options in the toolbar that does not work
The self-order cart page now correctly displays the custom background image configured for the customer experience. This restores visual consistency across the self-order flow and helps businesses maintain their intended branding.
Original PR description
Before this commit, the custom background image was not displayed on the cart page because an outdated method was used. This commit resolves the issue by applying the correct method. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix updates website editor tests to reduce intermittent failures when closing a popup with the X button. It helps keep automated checks stable, lowering the risk of delayed releases caused by false test crashes.
Original PR description
This is an attempt to fix the "closing s_popup with the X button updates the invisible elements panel" non-deterministic crash. runbot-229683
Invoices automatically sent after online payments now use the invoice email template configured in Sales settings. This ensures customers receive the intended communication and keeps post-payment invoicing consistent with business preferences.
Original PR description
When a sales order with online payment is paid, the automatically generated invoice was not consistently using the email template defined by the 'sale.default_invoice_email_template' system…
When a sales order with online payment is paid, the automatically generated invoice was not consistently using the email template defined by the 'sale.default_invoice_email_template' system parameter. This was due to the `_send_invoice` method in `payment_transaction` calling `_generate_and_send_invoices` without passing the configured template. This commit modifies the `_send_invoice` method to retrieve the 'sale.default_invoice_email_template' system parameter. If found and valid, the corresponding mail template record is passed in the context to `_generate_and_send_invoices`, ensuring the correct email template is used for auto-sent invoices after online payments. Added unit tests for the different scenarios. FW-18.4: Seems like cls.partner in the unit test does not have an email address set. This causes issues and the invoice email is not sent because it gets filtered out for not having an email set (see https://github.com/odoo/odoo/blob/aca52bc9135083050aa09cd1598638dce5438399/addons/account/models/account_move_send.py#L203-L204). For simplicity, an explicit assignment for email on the partner was added to the unit tests. ## Reproduction Steps: 1. **Enable Auto-invoicing:** Go to Sales > Configuration > Settings. Under "Invoicing," enable "Automatic Invoicing." Set a specific email template in "Invoice Email Template" (e.g., "Customer Invoice"). Save. 2. **Configure Payment Acquirer:** Go to Invoicing > Configuration > Payment Acquirers. Activate and configure any payment acquirer (e.g., Bank Transfer). Ensure it's published. 3. **Create Sales Order:** Go to Sales > Orders > Quotations. Create a new SO, add a product, and Confirm it. 4. **Simulate Online Payment:** As a customer, navigate to the SO's public portal link. Click "Pay Now," select the configured acquirer, and complete payment. 5. **Observe the Issue:** Check the communication history on the generated invoice. The email will have been sent using Odoo's default invoice template, ignoring the configured setting. opw-4865475 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219177 Forward-Port-Of: odoo/odoo#217878
Public website pages will now load the text translations needed by the HTML editor. This prevents untranslated labels or messages from appearing to visitors or unauthenticated users, improving the experience for multilingual sites.
Original PR description
On the frontend (i.e., a public page accessible to unauthenticated users), only translations of "frontend modules" are fetched. This commit adds html_editor to the list of frontend modules so that its translations are properly loaded on public pages.
This fix improves how Odoo handles message notification details when some values are missing or empty. It helps ensure users receive accurate notification information in Accounting, Discuss, and Mail, including correct message names and scheduling details.
Original PR description
Beware values may be Falsy, in that case we have to fallback on message itself. account: correctly check values or messages values in notification discuss: fix values usage in discuss methods mail: fix values / msg non coherency for scheduledDatetime, should always be Falsy if not given in values or message Task-4845982 Forward-Port-Of: odoo/odoo#219153 Forward-Port-Of: odoo/odoo#219055
This fixes two website issues: the setup translation check now works with the updated Website Builder, and rapidly saving after entering edit mode no longer causes an error. It improves reliability for website configuration and editing without changing business workflows.
Original PR description
**Commit 1:** Commit re-enables the test_01_configurator_translation test, which was broken and skipped due to the DOM changes introduced by the new Website Builder. It also adapts the tour selectors…
**Commit 1:**
Commit re-enables the test_01_configurator_translation test, which was broken and skipped due to the DOM changes introduced by the new Website Builder. It also adapts the tour selectors accordingly.
In the configuration screen, after clicking the "Build My Website" button, the website was taking unexpected time to load. To address this, we added `expectPageUnload` to wait for fill page load. After that, we wait for the configurator to finish.
**Commit 2:**
Steps to reproduce:
Go to edit mode and quickly click "Save" within 200ms.
It will throw the error:
Cannot read properties of null (reading 'classList')
Reason:
In the useEffect of WebsiteBuilderClientAction
1. User enters edit mode → isEditing = true.
2. This adds "o_builder_open" class to <body>.
3. A setTimeout is started to run builder-related DOM updates.
4. Before the timeout runs, user clicks "Save" → isEditing = false.
5. The "o_builder_open" class is removed from <body>.
6. When the timeout executes, it tries to access:
document.querySelector(".o_builder_open .o_main_navbar")
7. This returns null because ".o_builder_open" no longer exists.
8. Calling .classList.add() on null throws a TypeError.
Fix:
Added a cleanup function to the useEffect hook to ensure that any pending timeouts are cleared when the dependency (`isEditing`) changes. This prevents unexpected DOM updates and ensures consistent behavior when toggling edit mode rapidly.
runbot-226533Point of Sale data loading now records access errors instead of failing silently. This improves traceability and helps support teams investigate and resolve loading issues faster.
Original PR description
Previously, an access error during PoS data loading would silently fail, leading to unresolved issues and poor traceability. This commit introduces logging for access errors that occur when a model's data is loaded in the PoS. This provides better insight and simplifies investigation of such issues. opw-4801774 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215251
The website/page builder now displays conditional visibility sub-options more clearly. Related fields are grouped visually as intended, reducing confusion when editors configure options such as campaign or medium targeting.
Original PR description
The sub-options for the conditional visiblity were not displayed properly which could make it hard to understand them. There was gap between inputs that were linked ("visibile for" and "choose a record") and no gap between inputs that were not. The line of the left of the options was also misguiding the user who would associate the inputs to the wrong category (UTM Campaign, UTM Medium, ...).
This commit remove the gaps between the options but make the display more readable by having the line on the left of the sub-categories continuous.Fixed an issue where creating a car or bike with a future driver could incorrectly mark all active vehicles as planned for driver change. This keeps fleet records accurate and prevents misleading change indicators for users managing vehicles.
Original PR description
Issue ----- - create a new car (or a new bike) with a futur_driver_id - So either car_domain or bike_domain remains with the value Empty domain - expression.OR with and empty domain '[]' give True…
Issue
-----
- create a new car (or a new bike) with a futur_driver_id
- So either car_domain or bike_domain remains with the value Empty domain
- expression.OR with and empty domain '[]' give True leaf
(Pdb) expression.OR([car_domain, []])
[(1, '=', 1)]
- the read_group find all active record and set plan to change = True on them
Solution
---------
- default value of car_domain and bike_domain should be expression.FALSY_DOMAIN, so a "domain or False" give just the domain
(Pdb) expression.OR([car_domain, expression.FALSE_DOMAIN]) ['&', ('driver_id', 'in', {25465}), ('vehicle_type', '=', 'car')]
But the group by seems a premature optimisation, two search would make the code much more readable, shorter and not much slower
- following up with https://github.com/odoo/odoo/pull/197812/files since plan_to_change_car and plan_to_change_bike are not related anymore the sudo write of this field is not needed anymore.
_clean_vals_internal_user can be remove
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#213989This update fixes an automated check for the Live Chat reporting pivot view so it opens the report in the expected way for this version. It also makes the test setup and click targets clearer, helping prevent false failures in quality checks without changing user-facing Live Chat behavior.
Original PR description
This commit fixes the `im_livechat_report_pivot_redirect_tour` that fails in 18.3. In later version, the pivot is directly accessed with the tour URL. In this version, the pivot is accessed from the command palette. Command palette steps makes the tour more complex than it should, remove them. The opportunity is taken to clean the test as well: - Do not hardcode live chat channel id in the test setup. - Better selectors to see what line we are clicking on at a glance (selector now includes record name). fixes runbot-229637 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#219264
This change reverts an unnecessary filter related to active employee records. It helps ensure HR data is handled correctly without excluding records that should remain available.
Mercado Pago payments that return a processing status are now treated as still in progress instead of failed. This prevents confusing error messages at checkout and lets the normal retry flow continue until the payment result is confirmed.
Original PR description
The Mercado Pago 'PROCESSING' payment status was not handled. As a result, when receiving this status, the payment was treated as failed and the user saw an 'Unknown payment status' message. This fix treats 'PROCESSING' as an in-progress state, just like 'OPEN' and 'ON_TERMINAL'. It triggers the same retry mechanism. opw-4918455 Forward-Port-Of: odoo/odoo#219056 Forward-Port-Of: odoo/odoo#218990
This fixes how Vietnamese credit notes are sent to Viettel SInvoice so that totals and tax amounts keep the correct negative sign. It helps ensure credit notes display accurately in Viettel's portal for accounts where Viettel automatically adjusts submitted values, though accounts without that validation flow may be affected differently.
Original PR description
Description of the issue/feature this PR addresses: - Viettel SInvoice will automatically change the signs of the amount values (except for unit price) we sent for credit notes (on accounts with data…
Description of the issue/feature this PR addresses: - Viettel SInvoice will automatically change the signs of the amount values (except for unit price) we sent for credit notes (on accounts with data validation step). So the "right" values will appear in the portal. Currently (before the commit) the values have the wrong sign in the portal (because they are changed but we sent the right ones already). - We need to retain the original signs of those values when submitting them to SInvoice. Current behavior before PR: - All the amount values, including `itemTotalAmountWithoutTax`, `taxAmount`, `itemTotalAmountAfterDiscount` and `itemTotalAmountWithTax` are sent to Viettel SInvoice in negative values for credit note. Viettel SInvoice changes the sign of these values to positive (which is not correct for credit note). Desired behavior after PR is merged: - Only the sign of `unitPrice` is changed when we send the credit note to SInvoice. **Note:** - The signs will not automatically be changed for accounts with data validation step removed. So this commit will break credit notes for them (since the signs are not automatically adjusted but our values have the wrong signs). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201993
This update ensures Odoo respects the setting that prevents missing standard tax groups from being recreated during accounting data loading. It helps avoid upgrade failures and incomplete accounting records when tax group data is intentionally absent.
Original PR description
**Description** - The `force_create` attribute was added to `try_loading` in odoo/odoo@a3c57b4f0198236b04486d336d56b25de74677b8 allowing control over whether missing standard records should be…
**Description** - The `force_create` attribute was added to `try_loading` in odoo/odoo@a3c57b4f0198236b04486d336d56b25de74677b8 allowing control over whether missing standard records should be created. However, this wasn't respected for `account.tax.group`. As a result, tax groups could still be created even when `force_create=False`, leading to null values in accounts fields like `tax_payable_account_id` and `tax_receivable_account_id`. **The issue which prompted this patch:** - A recent patch in upgrade: odoo/upgrade@d2d16a2321abb525fe3fe2c403f89009f51c1394 This patch was made to update the `reconcile` and `non_trade` flags on standard accounts due to recent changes across localizations. During the upgrade, we overrode the `write` method of `account.tax.group` to conditionally update these flags. However, in a client’s database, `account.tax.group` records were missing for the `l10n_pk` module, while the standard account records were present. When `try_loading` was triggered at the end, it attempted to `create` the missing tax groups. But since the create method is called during creation and does not include the conditional update logic for `reconcile` and `non_trade` the upgrade failed with the same error that the original patch aimed to resolve. - To avoid such errors and prevent tax groups from being created with null account fields when `force_create=False`, this patch ensures `force_create` is respected for `account.tax.group`. **Steps to reproduce:** - Create a `v17` DB and install `l10n_pk` - Delete the standard tax groups - Upgrade to `v18` OPW-4915394 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219211
Changing a live chat chatbot step from a question selection to another step type now removes the old answer options when saved. This prevents outdated answers from remaining in the setup and causing confusion for operators or website visitors.
Original PR description
**Current behavior before PR**: When the step type was changed from "question selection" to another type and the step was saved, answers were not cleared. **Desired behavior after PR is merged**: Now, when the step type is changed from "question selection" to any other type and the step is saved, the answers are cleared. **task**-[4510555](https://odoo.com/odoo/all-tasks/4510555) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219218 Forward-Port-Of: odoo/odoo#195698
This update corrects rounding differences when Mexican electronic payment documents are generated for invoices paid in a foreign currency. It helps prevent valid USD payments from being rejected by the tax authority due to small peso conversion mismatches.
Original PR description
Steps to reproduce: - With an MX Company setup - Set USD rate to 20.4277 - Create an invoice as follows: - line 1: price_unit 93.76, quantity 172, tax 16% - line 2: price_unit 74.18, quantity 161,…
Steps to reproduce:
- With an MX Company setup
- Set USD rate to 20.4277
- Create an invoice as follows:
- line 1: price_unit 93.76, quantity 172, tax 16%
- line 2: price_unit 74.18, quantity 161, tax 16%
- line 3: price_unit 74.18, quantity 162, tax 16%
- line 4: price_unit 93.76, quantity 384, tax 16%
- line 5: price_unit 111.28, quantity 178, tax 16%
- Confirm and send CFDI
- Register full payment in USD
- Send Payment CFDI
Issue: Payment validation will fail with error
> Code : 301
> Message : Error en complemento Recepción de Pagos. [Error #CRP20204] El
> Valor del campo TotalTrasladosBaseIVA16 no es igual al redondeo de la
> Suma del resultado de multiplicar cada uno de los importes de los
> Atributos BaseP de los impuestos trasladados registrados en el elemento
> TrasladoP donde los atributos contengan en ImpuestoP el valor IVA, en
> TipoFactorP el valor Tasa y en TasaOCuotaP el valor 0.160000, por el
> Valor registrado en el atributo TipoCambioP de cada nodo Pago. Folio: 2.
> Serie: PBNK1/2025/. El atributo "Totales:TotalTrasladosBaseIVA16"
> Contiene el valor "95898.54" sin embargo se calculó que la sumatoria
> Debe contener el valor "95898.45".
opw-4750981
Forward-Port-Of: odoo/enterprise#90003
Forward-Port-Of: odoo/enterprise#88952This fix updates an automated Knowledge test so it can reliably find the clipboard copy button during validation. It helps prevent false failures in runbot testing, supporting smoother release checks without changing user-facing behavior.
Original PR description
This commit fixes an issue with the embedded clipboard steps in the commands tour. The selector for the problematic steps was too specific as the copy button isn't always the 1st button. runbot-114522 task-4748626 Forward-Port-Of: odoo/enterprise#80845
Deferred revenue or expense entries are now created even when the covered period is shorter than one month. This helps ensure invoices for short date ranges are allocated accurately instead of being skipped.
Original PR description
Previously, `_get_deferred_periods` would return an empty list when the deferral period was contained within a single month and matched the invoice date's month, even if the period spanned multiple days. This caused deferred entries to be skipped for valid short deferral spans (e.g. June 25 to June 30). This fix removes the condition that filters out single-month deferral periods, ensuring that deferred entries are always generated when a valid start and end date are present. This change supports accurate pro-rata allocation even for invoice periods shorter than one month, aligning the accounting behavior with expected financial standards. task-4910854 Forward-Port-Of: odoo/enterprise#89114
This fix prevents an error in Knowledge when optional information is missing and treated like a filled-in record. It helps keep Knowledge article interactions stable in edge cases without changing user-facing workflows.
Original PR description
Just be sure when using an argument that can be False instead of a dict. Task-4845982 Forward-Port-Of: odoo/enterprise#90285 Forward-Port-Of: odoo/enterprise#90254
Field service tasks now correctly validate deliveries for kit products added through related sales orders. This ensures delivered quantities update as expected when the task is marked done, avoiding manual delivery follow-up and billing delays.
Original PR description
**Problem:** when the product in the sale order linked to a field service task is a kit and the task is marked as done, the delivery is not validate (as it would for a non kit product) **Steps to…
**Problem:** when the product in the sale order linked to a field service task is a kit and the task is marked as done, the delivery is not validate (as it would for a non kit product) **Steps to reproduce:** - Create a product and set up a Kit-type Bill of Materials for it (with at least two components) - Create a service-type product. - Set the Invoicing Policy to Prepaid/Fixed - set the "create on order" field to Task - assign the Project to Field Service. - Create a Sales Order using the service product. - Confirm the Sales Order. - In the linked task, click on the Products smart button - add the kit-type product from step 1. - Mark the task as done. **Current behavior:** On the sale order, the delivered quantity for the kit product is 0. If you click on the delivery smart button, you'll see that the picking is not validated yet **Expected behavior:** the picking should be validated **Cause of the issue:** https://github.com/odoo/enterprise/blob/d8dc0cabd83a29d0522cb5fd25c6956968d4408b/industry_fsm_stock/models/project_task.py#L23 the orer_line is considered as an exception because the order_line product_uom_qty is smaller than total_qty (the sum of the move_ids' product_uom_qty) But this is normal in the case of a kit opw-4848444 Forward-Port-Of: odoo/enterprise#89616 Forward-Port-Of: odoo/enterprise#88363
Renaming an employee will no longer fail when the system also tries to update that employee's document folder but the user lacks folder access. This prevents an unrelated document permission issue from blocking routine HR updates.
Original PR description
When an employee is renamed, it tries to rename the folder but if you don't have the rights on the folder, it raises an error and prevent you from renaming. Forward-Port-Of: odoo/enterprise#90269
Restaurant reservations made through appointment booking now display the number of guests entered by the customer instead of showing zero or defaulting to table capacity. This helps staff see accurate party sizes and manage seating more reliably.
Original PR description
Currently when making an appointment for x amount of people, inside the restaurant it will show 0 as the number of people who booked. Steps to reproduce: ------------------- * Activate booking on the restaurant * Open the booking preview * Place a reservation for 5 people * In the restaurant and remove default filter > Observation: It shows 0p on the reservation Why the fix: ------------ By having a default value on the field is would not trigger the compute unless a change was made on `resource_ids` after the create was over. After fixing this bug we also aboserve that if we make a reservation for 1 person but all the tables in the restaurant are 4 person seatings, the reservation will show 4p. The reservation should in priority depend on the number entered while booking otherwise we can compute it regarding the resources. opw-4882681 Forward-Port-Of: odoo/enterprise#88777
Fixes issues in the salary configurator and offer-signing flow so employee contract versions are created and updated correctly. This helps avoid incorrect current salary versions and ensures personal details are saved in the right place, including Belgian payroll-specific data.
This update fixes an issue that caused automated payroll accounting tests for Australia to fail after a fiscal year change. It helps keep validation reliable for payroll compliance workflows without changing day-to-day user functionality.
Original PR description
Tests failed on runbot: https://runbot.odoo.com/odoo/runbot.build.error/228503 Forward-Port-Of: odoo/enterprise#89923
This fix ensures DHL and USPS shipping each use their own package detail logic. It prevents one carrier from accidentally using the other's package information, reducing the risk of incorrect shipping data when both connectors are installed.
Original PR description
Forward-Port-Of: odoo/enterprise#89771