Friday, July 4, 2025
6 changes · saas-18.3
Resolved issues and error corrections
This fix prevents online appointment requests from linking new CRM opportunities to a customer record belonging to a company the appointment staff cannot access. It avoids validation errors in multi-company setups, so anonymous website bookings can be submitted reliably when customer emails already exist elsewhere.
Original PR description
**Steps to reproduce:** - Set up CRM / Appointment / Website apps - Create new company (2) - Create partner contact with specific email and the new company - Create appointment type linked to a staff…
**Steps to reproduce:**
- Set up CRM / Appointment / Website apps
- Create new company (2)
- Create partner contact with specific email and the new company
- Create appointment type linked to a staff user of another company (1) who has no access to the new one
- Enable `Create Opportunities` on the new appointment type
- Go to the website as an anonymous user
- Submit an appointment request using the partner's email
- `Incompatible companies on records:` error
**Issue:**
Previous solution (17.0) was trying to use existing partner if the email was provided and existed in the database
`customer = request.env['res.partner'].sudo().search([('email_normalized', '=', email_normalized)], limit=1`
This means that, in a multi-company environment, the lead created by the new appointment for the appointment user of company 1 can be linked to the partner contact of company 2 and throw an error on validation.
**Fix:**
Restricted partner search domain using current allowed companies using the `staff_user` or the user which created the `appointement_type`.
opw-4713060
Forward-Port-Of: odoo/enterprise#87620
Forward-Port-Of: odoo/enterprise#84006The Winbooks import now handles multiple journals whose original codes become identical after Odoo's five-character limit is applied. This prevents journals from being skipped during Belgian accounting imports and assigns clear temporary codes that users can adjust later if needed.
Original PR description
**Steps to reproduce:** - Install accountant, l10n_be and account_winbooks_import - Switch to a Belgian company (e.g. BE Company CoA) - Go to "Accounting / Configuration / Settings" - Click on…
**Steps to reproduce:** - Install accountant, l10n_be and account_winbooks_import - Switch to a Belgian company (e.g. BE Company CoA) - Go to "Accounting / Configuration / Settings" - Click on "Import (for full history)" in "Accounting Import" section - Click on "Import WBK" in "Winbooks" section - Upload a Winbooks file containing several journals having their "DBKID" value longer than 5 characters with the 5 first characters being identical (e.g. "SALES001", "SALES002",...) - Import **Issue:** Some journals are not imported. **Cause:** The code of a journal is limited to 5 characters and is unique per company. When a code is longer than 5 characters, only the 5 first characters are kept. In this case, several journals to create have the same 5 first characters. Therefore, only one of them is created. **Solution:** If the code of a journal to create has the same first 5 characters of a journal that has already been created (and the same last 5 characters), we use a generic code formatted with a starting "*" char followed by a number that is incremented. This format allows to quickly find it if we want to change its value once imported. This solution is limited to 9999 journals that have a code that can starts with the same 5 characters than another journal, but it should be more than enough. opw-4812655 Forward-Port-Of: odoo/enterprise#86068
Fixed an issue where copied planning shifts could overstate allocated time when an employee was on leave, because lunch time was incorrectly included in the open shift. This helps keep staffing schedules and reported hours accurate when weekly shifts are duplicated.
Original PR description
**Issue:**
When a resource is on leave for a particular day, and an open shift is created for that day, the open shift includes lunch time, which causes the total allocated hours to be incorrect.
**Example:**
- Shift duration: 1 week (27th to 31st January)
- Resource on leave on 30th January
- Move to the next week and copy the previous week's shift
- New shift created:
- Monday to Wednesday and Friday assigned
- Open shift on Thursday (9 hours allocated)
However, 1 extra hour is added in the open shift.
**Steps to Reproduce:**
-Install the planning_holidays module.
- Create a shift for the week (27th to 31st January).
- Add leave for 6th February.
- Copy the previous week's shift.
- Check the allocated hours for 6th February.
task-4224781
Forward-Port-Of: odoo/enterprise#89370
Forward-Port-Of: odoo/enterprise#73478The Work Entries Analysis report now only shows payroll data for the companies selected by the user. This prevents users in multi-company environments from seeing irrelevant company data and makes the report match the active company filter.
Original PR description
BUG - In multi-companies env the report shows all the companies no matter what is selected in the company selection menu Expected behavior: - Only selected company data is presented in the view FIX - add a domain to the report action to show only allowed companies data Task: 4781100 Forward-Port-Of: odoo/enterprise#89367 Forward-Port-Of: odoo/enterprise#85690
This fix ensures the Mexican e-invoice sending timestamp is saved before Odoo contacts the certification provider. If a connection drops during sending, retries now reuse the same timestamp, reducing duplicate CFDIs with slightly different issue times.
Original PR description
### Background In https://github.com/odoo/enterprise/pull/85026 we changed the behaviour of `l10n_mx_edi_post_time` so that it gets set during the CFDI sending process, rather than when the invoice…
### Background In https://github.com/odoo/enterprise/pull/85026 we changed the behaviour of `l10n_mx_edi_post_time` so that it gets set during the CFDI sending process, rather than when the invoice is posted. This was needed to ensure that the post time both reflects the sending time and is re-used if the invoice needs to be re-sent. ### Bug description Since then, several Mexican customers have reported that some CFDIs are sent duplicated, with a difference of a few seconds in the CFDI's Fecha. ### Analysis A disconnection might occur during sending of the CFDI. In that case, the PAC will process the CFDI, but in Odoo the transaction will be rolled back, and the `l10n_mx_edi_post_time` will be lost. When Odoo re-sends the CFDI, it will take a new `l10n_mx_edi_post_time`. ### Solution Commit before performing the API call so that the `l10n_mx_edi_post_time` gets committed to DB. opw-4780096 Forward-Port-Of: odoo/enterprise#89263 Forward-Port-Of: odoo/enterprise#89117
The UAE payroll rules now calculate end-of-service compensation using the full 30-day entitlement only after an employee completes the sixth year, matching the UAE government calculator. This helps businesses produce more accurate final settlement amounts and stay aligned with local guidance.
Original PR description
- to algin with UAE goverment eos calculator, salary rule is update to concider full 30 compensation after completing the 6th year not the 5th. Task: 4756963 Forward-Port-Of: odoo/enterprise#89306 Forward-Port-Of: odoo/enterprise#84752