Daily updates from Odoo
Friday, September 12, 2025
11 changes · master
Resolved issues and error corrections
This fix prevents the Chilean electronic invoicing factoring flow from crashing when the tax authority returns invalid or unexpected responses. It also resets problematic tokens and adds tests, improving reliability during intermittent external service issues.
Original PR description
There were some typos in this method. We add test coverage and we reset the token in situations where we receive invalid responses. It's apparently common for the SII to have some random errors that could result in invalid tokens being generated. Based on the work in https://github.com/odoo/enterprise/pull/92035. Forward-Port-Of: odoo/enterprise#94342 Forward-Port-Of: odoo/enterprise#94134
The bank reconciliation screen’s statement button was broken after a recent bank statement view change. This fix restores the previous statement view for that button so users can open statements correctly again during reconciliation.
Original PR description
This commit: https://github.com/odoo/enterprise/commit/935b25fdb9238e9d249e913922804d5b673a09a9 change the view of the bank statement but by doing so they broke the use of the statement button on the bank rec widget. This commit will add the old view back and change the view used in the action of the statement button. no task id
This fix stops improvement suggestions on extra manufacturing work orders from creating quality checks that the system cannot handle. It prevents an error when manufacturing orders are duplicated and keeps PLM/quality workflows limited to existing bill-of-material operations as intended.
Original PR description
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the…
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the method `add_check_in_chain()`, the `point.sequence` cause issue because the check can have multiple points https://github.com/odoo/enterprise/blob/e85d11f9b3bf07a55e5365adac7370955a149566/mrp_workorder_plm/models/mrp_workorder.py#L58-L66 That the case because multiple quality checks sequences are created when the operation_id is False That's unexpected because PLM isn't made to suggest WorkOrder additions and Suggestions to New WO, but only Suggestions to existing operations So we avoid to create `quality.point` when there is no operation_id ## Information: To get the Traceback, you need to install Quality_control because this module will copy the QC to the MO including the one with operation_id set to False ## Steps to reproduce: Quality_control and plm need to be installed - Enable Work Orders in Settings - Create a Product with a BoM - Create a MO for the Product - Add an extra WO - In the Shop Floor, Mark as Done the BoM's WO - On the Extra WO, click Gear Icon > Update Instructions > Improvement Suggestion > Add a Step - Insert a Title and Propose Change - Duplicate the MO and redo the Shop Floor steps to get the Traceback opw-4874108 Forward-Port-Of: odoo/enterprise#92384
Batch payments for bills with multiple installments now ignore payment term lines that have already been reconciled. This prevents users from seeing an incorrect reconciliation error when processing later installments, allowing vendor payments to be matched smoothly.
Original PR description
**Steps to reproduce:** - Install accountant - Go to "Accounting / Configuration / Invoicing / Payment Terms" - Create a payment term having at least 2 installments (e.g. 20%-80%) - Create a bill: *…
**Steps to reproduce:** - Install accountant - Go to "Accounting / Configuration / Invoicing / Payment Terms" - Create a payment term having at least 2 installments (e.g. 20%-80%) - Create a bill: * Vendor: [any] * Payment terms: [the created payment term] * Amount: 1000 - Confirm the bill - Pay the first installment from the bill (i.e. 200) - Go to "Accounting / Vendors / Payments" - Select the payment and create a batch - Validate the batch payment - From Accounting dashboard, go to Bank journal - Create a statement: * Partner: [None] * Amount: -200 - Reconcile the statement with the batch payment - From the bill, pay the second installment (i.e. 800) - Go to "Accounting / Vendors / Payments" - Select the payment and create a batch - Validate the batch payment - From Accounting dashboard, go to Bank journal - Create a statement: * Partner: [None] * Amount: -800 - Reconcile the statement with the batch payment **Issue:** The following UserError is raised: "You are trying to reconcile some entries that are already reconciled." **Cause:** When reconciling a batch payment, all the payment term lines from the invoices/bills linked to the payment are used. However, in this case, when the first batch payment has been reconciled, the first payment term line of the bill (linked to the first installment) has been reconciled. It should not be reused when reconciling the second batch payment. **Solution:** Exclude reconciled payment term lines when reconciling a batch payment. opw-4830185 Forward-Port-Of: odoo/enterprise#92524 Forward-Port-Of: odoo/enterprise#91367
The Swiss financial reports now show previous-year unallocated earnings using the correct period. The balance sheet also separates current-year earnings into retained and allocated lines, helping businesses review profit allocation more accurately.
Original PR description
Before this commit, `Previous Year unallocated profit and loss` was showing wrong amount. With this commit, we adapt this line (change period of one of its expression) and we add two new lines to reflect the actual year earnings, retained and allocated. Steps, with fresh db: - 1 invoice confirmed in the past year for 1000 - Create the carryforward move (1000 debit for 999 account, and 1000 credit for 2979 account) - Go to balance sheet, set date as 'End of last fiscal year' -> See 'Previous Years Unallocated Earnings` showing -1000 opw-4054341 Forward-Port-Of: odoo/enterprise#94243 Forward-Port-Of: odoo/enterprise#91281
Aged Receivable and Aged Payable reports now correctly expand all lines when users apply custom grouping. This prevents report navigation from breaking and helps finance teams review outstanding receivables and payables more reliably.
Original PR description
We previously checked if the groupby is not changed to use the _common_custom_unfold_all_batch_data_generator. However, the user cannot change this field and is instead editing the user_groupby, so _common_custom_unfold_all_batch_data_generator was always used. Forward-Port-Of: odoo/enterprise#93594
This update fixes access errors that blocked non-administrator users from opening certain appraisal, planning, and manufacturing shop floor screens. Employees can now use the affected workflows without needing administrator permissions, reducing interruptions in daily operations.
Mexican electronic payment documents now use consistent rounding when converting foreign-currency invoice values to MXN. This prevents valid payments from being rejected by tax authority validation due to tiny rounding differences.
Original PR description
Steps to reproduce: - With an MX Company setup - Set USD rate to: - 0.049216958195 for day 1 - 0.053418803419 for day 2 - Create an invoice in USD as follows: - line 1: price_unit 91, quantity 64,…
Steps to reproduce:
- With an MX Company setup
- Set USD rate to:
- 0.049216958195 for day 1
- 0.053418803419 for day 2
- Create an invoice in USD as follows:
- line 1: price_unit 91, quantity 64, tax 16%
- Confirm and send CFDI
- Register full payment in MXN
- Send Payment CFDI
Issue: Payment validation will fail with error
Code : CRP20268
Message : El campo BaseP que corresponde a Traslado, no es igual a la suma de
los importes de las bases registrados en los documentos relacionados donde el
impuesto del documento relacionado sea igual al campo ImpuestoP de este elemento
y la TasaOCuotaDR del documento relacionado sea igual al campo TasaOCuotaP de
este elemento.
Message : Valor esperado: 109025.275956 valor reportado: 109025.275862
This occurs because the precision set in https://github.com/odoo/enterprise/commit/e642e4d6d35c79d02c799d12451f3e2d92ab96e9 is high and can lead to failed
verification due to rounding on our side, because we compute BaseP using
the full digits of EquivalenciaDR, but, according to the specs, we
send it rounded to 10 digits.
opw-4750981
Forward-Port-Of: odoo/enterprise#94465
Forward-Port-Of: odoo/enterprise#92768The Ask AI button now reliably opens the AI chat window even when the original button disappears during loading. This prevents users from clicking the button and seeing nothing happen, making the AI drafting experience smoother and more dependable.
Original PR description
The issue is caused by the use of orm service wrapped in "useService". When the button is clicked, it will be unmounted but an orm query is still pending. The pending query is blocked by the useService because the component is already unmounted. The remedy is to use the raw orm service. Forward-Port-Of: odoo/enterprise#94417
Fixes an issue where manufacturing shop floor quality checks could crash or stay in the wrong status after users reverted and repeated a pass/fail or measurement step. This helps operators continue production workflows without being blocked and keeps quality check results accurately highlighted.
Original PR description
To reproduce: - Create a BoM for a product with an operation and a quality point for this operation - Create and confirm a MO for this BoM - Process it in Shop Floor, pass or fail the QC, revert it then pass/fail it again Current behaviour: traceback Expected behaviour: mark the quality check with primary highlight Introduced in: https://github.com/odoo/enterprise/pull/91986 Forward-Port-Of: odoo/enterprise#92604
Resource-based appointment bookings no longer incorrectly reduce availability for a responsible staff member. This prevents customers from being blocked when booking user-based appointments in the same time slot after a resource appointment was already scheduled.
Original PR description
In [1], we introduced capacity for users. Therefore, capacity is handled by using booking lines, with capacity reserved / used set on them. However, unlike the resources, the user is not stored and…
In [1], we introduced capacity for users. Therefore, capacity is handled by using booking lines, with capacity reserved / used set on them. However, unlike the resources, the user is not stored and is related as the responsible (user_id) of the meeting instead. This has a side effect: if there are resource booking lines on a meeting, and a responsible is set (manually or the appointment type creator as a default responsible, as done in appointment module), then those booking lines may end up counting as booked capacity for the responsible as well! Therefore, we now make sure that the appointment type linked to the meeting is scheduled based on users when searching for booking lines in the remaining capacity computation. STEPS TO REPRODUCE ================== 0. Create a new db and install website_appointment 1. Log in as mitchell Admin 2. Create an appointment_type R based on resources, with a resource R1 and an appointment_type U based on users, with only Mitchell Admin set as staff user 3. Log out and book R on a given slot S 4. Once done, go to appointment U and try to book the same slot S 5. Once you submit the form, you are brought back to the calendar selection screen with an error message (code 'failed-staff-user') TEST ==== A test is added covering most cases, both when getting slots and when directly measuring the user's remaining capacity. 1: https://github.com/odoo/enterprise/commit/bce7e94650c337a9046958a7689c81db5b2a4c73 Task-5080374 Forward-Port-Of: odoo/enterprise#94339