Thursday, November 13, 2025
29 changes · saas-18.4
Resolved issues and error corrections
This update fixes an issue where certain payment amounts could be written incorrectly in BACS batch files because of rounding errors. As a result, exported payment files now show the correct penny amount, helping avoid payment discrepancies.
Original PR description
**Issue description:** When creating a BACS batch payment that contains a payment with an amount that can't be represented well in float (like 645.30), the generated BACS batch file will have a wrong amount (due to float precision) as the amount is represented in pence. **Steps to reproduce:** 1. Create a BACS vendor payment with amount = 645.30 2. Add this payment to a BACS batch payment. 3. Confirm the batch to generate the export file. In the file you will notice that the amount in the payment line is 64529 pence instead of 64530. opw-5159413 Forward-Port-Of: odoo/enterprise#99180
This change removes an unnecessary test flag from the self-order mobile online payment tour. It prevents a local debug-mode issue, so developers can run and test the flow without unexpected problems.
Original PR description
In this commit: - Removed the `test: true` flag from the `test_kiosk_cart_restore_and_cancel` tour. - The flag is not required for tours and can cause issues when running in debug mode. - This issue only occurs in local environments when debug mode is enabled. - After this fix, no issue is generated in debug mode. Forward-Port-Of: odoo/odoo#234101
The system now correctly ignores the Pi 5's built-in serial port when listing serial devices. This prevents an internal port from appearing as an available connection, which avoids confusion and reduces the risk of selecting the wrong device.
Original PR description
The serial interface previously included a filter to not include the built-in serial port on the Pi 5, however this filter is now broken in Raspberry Pi OS Trixie. To ensure the filter works in all versions, we now explicitly look for the device `/dev/ttyAMA10` and ignore it. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235074
This change fixes a rare issue in Knowledge where moving an article and then opening another one could occasionally show the wrong content in the editor. It makes article selection more reliable, so users can continue editing the correct page without interruptions.
Original PR description
Before this commit, the `test_knowledge_main_flow` tour sometimes failed. That tour creates articles, then d&d one of them in the sidepanel to re-organize articles, and then clicks on a previously…
Before this commit, the `test_knowledge_main_flow` tour sometimes failed. That tour creates articles, then d&d one of them in the sidepanel to re-organize articles, and then clicks on a previously created article to continue editing it. The tour failed on that step, as the previously created clicked article wasn't properly selected/displayed in the editor. The race condition was that two (non synchronized) calls to the `load` function of the model were done: one after the move because the move could have altered the displayed article (1) and one because we selected another article to open by clicking in the sidebar (2). (1) is done without resId (reload the current article) and (2) is done with the id of the clicked article. Depending on the order these two calls are done, we end up with the clicked article displayed (if (2) is done after (1)), or with the current article still displayed, but reloaded ((1) done after (2)). This commit fixes the race condition by forcing the reload of the current record for (1), instead of blindly reloading the model, which might have changed/been requested something else meanwhile. runbot error~182073 Forward-Port-Of: odoo/enterprise#99174
This change corrects how inventory value is recorded when a subcontracted product is delivered directly from a supplier to the customer. It prevents leftover stock value from being kept on the receipt record, which could otherwise distort product costing, especially for FIFO products.
Original PR description
… correct remaining value when sbc dropship **Problem:** When selling and delivering a subcontracted and dropshipped fifo product, the incoming stock valuation layer has a remaining_qty and a…
… correct remaining value when sbc dropship **Problem:** When selling and delivering a subcontracted and dropshipped fifo product, the incoming stock valuation layer has a remaining_qty and a remaining_value. (This also happens with 'standard price' and 'avco' but it's mostly problematic for fifo products. This being said the fix solves all 3 cases) Some context: When we confirm a SO and validate the delivery of a dropshipped (not sbc) product, two svls are created, - one with a negative quantity and value. - one with positive quantity and value. Both have a zero remaining value and remaining quantity. The outgoing svl does not trigger run_fifo or decrease the remaining_qty and remaining_value on any svl. In other words the fifo logic is not applied. If it was the case, the dropship delivery would impact the fifo valuation and other layers which we don't want as the product never really entered the stock. In the use case of this PR, a subcontracted dropshipped fifo product being delivered, the outgoing svl(s) are linked to the dropship and have the correct values. But the incoming svl is linked to the subcontract order and has a remaining value and remaining quantity which will impact the fifo logic when it shouldn't. **Steps to reproduce:** - enable the subcontracting setting and the dropshipping setting. - create a storable product, with a fifo category and positive cost. - create a subonctracted bom with a consumable component. - in the purchase tab of the product set a vendor which is the same as the subcontractor of the bom. - in the inventory tab select only the dropship route - create and confirm a SO for this product. - on the PO enter a positive unit price and confirm - validate the dropship delivery - click on the valuation smart button **Current behavior:** the stock valuation layer linked to the subcontract picking (the one with a positive quantity) has a positive remaining quantity and remaining value. **Expected behavior:** As the product is dropship remaining quantity and remaining value should be 0 **Cause of the issue:** When action_done is called on the picking: 1) In the super method, action_done is called on the move. There, _create_dropshipped_svl is called. https://github.com/odoo/odoo/blob/3c83171923124c7ea63a4d33262a87cddf004b2b/addons/stock_account/models/stock_move.py#L289 Inside _get_dropshipped_svl_vals only the value for the (first) outgoing svl is returned because the location_id (subcontrating location) is valued. https://github.com/odoo/odoo/blob/3c83171923124c7ea63a4d33262a87cddf004b2b/addons/stock_account/models/stock_move.py#L226 2) In the mrp_subcontracting override, button_mark_done is called on the mrp.production associated with the picking. https://github.com/odoo/odoo/blob/3c83171923124c7ea63a4d33262a87cddf004b2b/addons/mrp_subcontracting/models/stock_picking.py#L90 Therefore action_done is called on the finished products move the mrp.production. https://github.com/odoo/odoo/blob/3c83171923124c7ea63a4d33262a87cddf004b2b/addons/mrp/models/mrp_production.py#L1731 The move is a 'in' move so this lead to the creation of an in svl. https://github.com/odoo/odoo/blob/3c83171923124c7ea63a4d33262a87cddf004b2b/addons/stock_account/models/stock_move.py#L289 The problem is that there is no mechanism to prevent the in svl from having a remaining_value and remaining_qty **fix** The mrp_subcontracting_dropshipping override of _action_done (on stock picking) is where, when needed, the other ougoing layer is created specifically in this subcontracting dropshipping use case. https://github.com/odoo/odoo/blob/3c83171923124c7ea63a4d33262a87cddf004b2b/addons/mrp_subcontracting_dropshipping/models/stock_picking.py#L27-L32 Because the conditions are the same, imo, it's a good place to set the value of remaingin_value and remaining_qty of the incoming svl to 0. opw-5184644 Forward-Port-Of: odoo/odoo#234573 Forward-Port-Of: odoo/odoo#233041
This update fixes and simplifies the translated labels used for Italian electronic document types. It helps ensure the right document type names appear more clearly and consistently for users creating e-invoices and related documents.
Original PR description
Simplified and fixed labels and labels translations. Ref: https://help.fattureincloud.it/help/articolo/544-crea-autofattura-elettronica Ref: https://fex-app.com/FatturaElettronica/FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/TipoDocumento Forward-Port-Of: odoo/odoo#235374 Forward-Port-Of: odoo/odoo#233943
Opening Studio from a calendar view now works even when the calendar uses a field that has access rules or grouping configured. This fixes a crash that previously blocked users from editing such calendars in Studio.
Original PR description
Have a calendar view that has a field A. the field A has a group on it, defined either in python or in the XML. Before this commit, opening studio in the calendar view crashed, because calendar did not support yet those fields that are marked with studio_no_fetch in their attributes. After this commit, there is no crash Forward-Port-Of: odoo/enterprise#99254 Forward-Port-Of: odoo/enterprise#98903
When users selected several lines in the bank reconciliation list and created a statement, the starting balance could be calculated incorrectly. This update restores the correct data needed for that calculation, so the statement starts with the right balance.
Original PR description
When selecting multiple lines and doing a statement in the list view. The balance start was wrong because the computation relies on the active_ids that wasn't correctly filled. The reason is that during the refactoring: https://github.com/odoo/enterprise/commit/2335c953723dce66af8811fdfbfd5b811d42b109 We actually remove a custom widget allowing to pass the active_ids. task-5245426 Forward-Port-Of: odoo/enterprise#99013
This change prevents payroll errors when a flexible working schedule is used in a salary offer. It makes the working-time fields visible so they can be set correctly, avoiding a calculation error that could block payroll processing.
Original PR description
…or flexible working schedules ``` odoo.exceptions.UserError: Código Python erróneo definido para: - Empleado: Donovan Raziel Castillo - Versión: False - Recibo de nómina: Payslip Simulation - Regla…
…or flexible working schedules ``` odoo.exceptions.UserError: Código Python erróneo definido para: - Empleado: Donovan Raziel Castillo - Versión: False - Recibo de nómina: Payslip Simulation - Regla salarial: Holidays On Time to Substruct (HOLIDAY_TO_SUB) - Error: float division by zero ``` Steps to reproduce: 1. Create a new database in saas-18.4 and install: resource, l10n_mx, l10n_mx_hr_payroll, hr_payroll, hr_contract_salary_payroll 2. Go to the Recruitment app → create a Salary Offer. 3. Assign a name, an applicant, and a contract template. 4. In the contract template: - Name: Department - Contract Type: Permanent, employee_mexico - Working Hours: create a new schedule 5. Set Schedule Type = Flexible 6. Fill Hours per Week (`full_time_required_hours`) (e.g., 48) → Notice that Hours per Week and Work Time Rate are not visible. In saas-18.4, when a working schedule is configured as Flexible, the computation of `work_time_rate` results in 0.0 because the field `hours_per_week` remains unset (it is only visible when Flexible Hours is [False](https://github.com/odoo/odoo/blob/saas-18.4/addons/resource/views/resource_calendar_views.xml#L85-L92)). As a result, during migration, when the computation occurs in `hr_contract_salary_offer`, A division by zero error is raised during the salary rule Python computation. Root cause: When the calendar is flexible, and Hours per Week (`full_time_required_hours`) are defined, the computation of `work_time_rate` returns 0.0. As a result, when the salary rule computation (`_compute_rule`) performs a division using this zero value, a ZeroDivisionError occurs. Technical point of view: The error occurs because the Work Time Rate is not being calculated correctly. In both versions [18.4 ](https://github.com/odoo/odoo/blob/saas-18.4/addons/resource/models/resource_calendar.py#L143-L151)and [19.0](https://github.com/odoo/odoo/blob/19.0/addons/resource/models/resource_calendar.py#L250-L258), the compute logic is the same — it depends on the fields `hours_per_week` and `full_time_required_hours`. However, in this case, the computation behaves incorrectly. If the customer provides a value for Equivalent Working Hours, the code enters the `if` [condition](https://github.com/odoo/odoo/blob/saas-18.4/addons/resource/models/resource_calendar.py#L146) to calculate the Work Time Rate. Since the field `hours_per_week` is only visible and its [computation] (https://github.com/odoo/odoo/blob/saas-18.4/addons/resource/models/resource_calendar.py#L136-L141) happens when Flexible Hours is [False](https://github.com/odoo/odoo/blob/saas-18.4/addons/resource/views/resource_calendar_views.xml#L85), its value remains 0, which leads to a Work Time Rate of 0.0 always. On the other hand, in the `else` [condition](https://github.com/odoo/odoo/blob/saas-18.4/addons/resource/models/resource_calendar.py#L148), the Work Time Rate is directly set to 100. This means that when Flexible Hours = True and Equivalent Working Hours is not filled in, the calculation always results in 100. Solution: To fix this issue, we should make both Work Time Rate and Hours per Week visible in the form view for the customer. This fix aligns the behavior with the version 19.0 [In 19.0 the both `hours_per_week` and `work_time_rate` visible for the user from this [IMP](https://github.com/odoo/odoo/commit/5cb102546ea4370b4fe5e4a4f37cccdc90c263fd) fix.] by making both `hours_per_week` and `work_time_rate` visible in the working schedule form view. This allows users to correctly configure these fields when using flexible calendars and prevents incorrect or zero-based calculations. In summary: The issue only occurs when Flexible Hours = True — in that case, the Work Time Rate calculation always results in 0.0. Showing both fields to the user ensures proper configuration and avoids incorrect computation. UPG:- 3269714 OPW:- 5124639 Errro-Pad :- https://pad.odoo.com/p/issue_5124639_labo 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
When a user deletes a rating message in the portal, the rating summary cards on the page now update immediately. This keeps the displayed feedback accurate and avoids showing outdated rating information after a message has been removed.
Original PR description
*: portal, portal_rating, website_slides PR #221050, makes it possible to properly remove a message in the portal and PR #216044 retrieves the rating cards feature. There is an overlap between what these two PRs do. When a user removes a rating message and there is a rating cards feature on the page, it should be updated. Most of the remove method changes are indeed what we did in forward port of #221050 (#222517). task-5106543 Forward-Port-Of: odoo/odoo#235137 Forward-Port-Of: odoo/odoo#224258
When users opened a scoped app link, the system could lose the current navigation state and send them to the main home screen instead of the intended page. This fix preserves the state so links now open the correct destination, improving the experience and preventing unnecessary redirects.
Original PR description
This commit fixes the '/scoped_app' redirection to '/odoo' without loosing the history state. Previously, when opening a route such as '/scoped_app/discuss', the webclient would use an empty state and redirect to the home screen with '/odoo' instead of redirecting to '/odoo/discuss'. Two tests have been added in router to assert the different redirection behavior when using scoped apps from the browser instead of a standalone app. task-5159471 Forward-Port-Of: odoo/odoo#234946
This fix restores the ability to use previously saved payment methods when registering a payment on an invoice. It ensures customers who saved their payment details earlier can be charged as expected, even when the invoice uses a different address than the original sale.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Create a sales order for a company partner; 2. create & copy a payment link; 3. open payment link in new session; 4. using demo provider, make the payment & save payment details; 5. add an invoice address to the company partner; 6. create an invoice for the company partner using the invoice address; 7. confirm invoice; 8. click "Register Payment"; 9. select "Demo" as payment provider. Issue ----- The saved payment token cannot be selected. Cause ----- Before commit 75f4008, the company partner was used to search for tokens in the payment register wizard. After the commit, the the invoice partner is used, making it impossible to select previously accessible payment tokens. Solution -------- Search payment tokens linked to either partner. opw-5193718 Forward-Port-Of: odoo/odoo#235368 Forward-Port-Of: odoo/odoo#234173
The spreadsheet component has been updated to a newer version that includes several bug fixes and small usability improvements. It also improves performance and stability, helping spreadsheets load and respond more smoothly while reducing crashes in specific editing and charting scenarios.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a8ebab8f8 [REL] 18.4.17 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a8ebab8f8 [REL] 18.4.17 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/e053137c8 [FIX] TopbarMenu: specify `isReadonlyAllowed` [Task: 5245432](https://www.odoo.com/odoo/2328/tasks/5245432) https://github.com/odoo/o-spreadsheet/commit/b5c217ff8 [FIX] range: invalid sheet name with special character [Task: 5125762](https://www.odoo.com/odoo/2328/tasks/5125762) https://github.com/odoo/o-spreadsheet/commit/2470a53f2 [FIX] composer: set editionMode to inactive when composer is unmounted [Task: 5149215](https://www.odoo.com/odoo/2328/tasks/5149215) https://github.com/odoo/o-spreadsheet/commit/e9ca3de5c [FIX] filter menu: truncate long filter values [Task: 5219611](https://www.odoo.com/odoo/2328/tasks/5219611) https://github.com/odoo/o-spreadsheet/commit/a4733d2b1 [FIX] chart: add placeholder for axis title input [Task: 5187080](https://www.odoo.com/odoo/2328/tasks/5187080) https://github.com/odoo/o-spreadsheet/commit/15da32f9d [PERF] zones: faster isZoneInside [Task: 5213090](https://www.odoo.com/odoo/2328/tasks/5213090) https://github.com/odoo/o-spreadsheet/commit/19506f3bd [PERF] Renderer: speed-up box generation [Task: 5213090](https://www.odoo.com/odoo/2328/tasks/5213090) https://github.com/odoo/o-spreadsheet/commit/56e9c8288 [FIX] charts: crash when converting empty chart to scorecard/gauge [Task: 5181741](https://www.odoo.com/odoo/2328/tasks/5181741) https://github.com/odoo/o-spreadsheet/commit/cc30312f4 [FIX] Package: update owl to 2.8.1 [](https://www.odoo.com/odoo/2328/tasks/) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Opening the chat icon from an employee’s form view now works again without causing an error. This restores a common HR action so users can quickly start a conversation with an employee from their profile.
Original PR description
Before this commit, when opening a chat with an employee from the form view it would result in a traceback. Steps to reproduce: 1. Open the form view of an employee that has a user associated 2. Click the "chat" icon next to their name -> traceback This happens because the `getChat` method would insert a Persona record in the Store with a displayName field which has been changed to a setter in [1]. This commit fixes the issue by setting the `name` field instead. [1] https://github.com/odoo/odoo/pull/234702
This update prevents an access error that could stop sales orders from being confirmed in branch-company setups with dropshipping. It ensures the system uses a safer way to select related tax records, so users only see records they are allowed to access and the order process continues normally.
Original PR description
Versions -------- - saas-18.4+ Steps ----- 1. Create a branch company B; 2. create a branch C for the branch company B; 3. change to branch C; 4. create a warehouse; 5. enable dropshipping; 6. add a…
Versions -------- - saas-18.4+ Steps ----- 1. Create a branch company B; 2. create a branch C for the branch company B; 3. change to branch C; 4. create a warehouse; 5. enable dropshipping; 6. add a vendor to a stored product with the Dropship route enabled; 7. log in as a sales user with access to branch C only; 8. add product to a sales order & confirm. Issue ----- > Access Error > Uh-oh! Looks like you have stumbled upon some top-secret records. > Sorry, Marc Demo (id=5) doesn't have 'read' access to: > - Companies, YourBranch (res.company: 3) Cause ----- The error gets thrown during the `_prepare_purchase_order_line` method, specifically on the line which filters `supplier_taxes_id` using `lambda x: x.company_id in company_id.parent_ids`. This passes via the field's `convert_to_record` method, which attempts to access the `active` field of the companies to filter out any that are archived[^1]. [^1]: https://github.com/odoo/odoo/blob/5b911a97a3885283d2f21ac30abb96cb10fe39d9/odoo/orm/fields_relational.py#L608-L612 In previous versions, this wasn't an issue, because the `active` field was still present in cache from the `_compute_parent_ids` which is called with `sudo`, but as of saas-18.4, it attempts to refetch these values, leading to the error. Solution -------- Instead of using `filtered`, use `filtered_domain` using the result of `account.tax._get_company_domain`. opw-5112625
Partial credit notes on subscription invoices now update the invoiced quantity correctly instead of resetting it to zero. This keeps subscription quantities accurate after refunds and prevents billing and reporting errors.
Original PR description
**Issue** When creating a partial credit note (i.e., for a quantity less than originally invoiced) for a subscription invoice, the `qty_invoiced` on the corresponding subscription order line is…
**Issue** When creating a partial credit note (i.e., for a quantity less than originally invoiced) for a subscription invoice, the `qty_invoiced` on the corresponding subscription order line is incorrectly set to zero, instead of reflecting the remaining quantity. **Steps to Reproduce** 1. Create a subscription with a quantity of 50. 2. Confirm the subscription and generate an invoice. 3. Create a credit note (reversal) for the invoice. 4. Change the credited quantity to 30. 5. Post the credit note. 6. The subscription order line shows qty_invoiced = 0 instead of the expected 20. **Root Cause** The method `_get_max_invoiced_date()` is used to determine the latest invoiced period for a subscription. In its original implementation, it removes refunded periods from the list of invoice dates regardless of whether the refund is partial or full. This causes the system to consider the period as not invoiced at all, which leads to incorrect recomputation of `qty_invoiced` **Fix** Adjust `_get_max_invoiced_date()` to track the net invoiced quantity per period. A period is only removed from the list of invoice dates if it has been fully refunded (i.e., net quantity is zero). This ensures that partially refunded periods are still considered invoiced, and the `qty_invoiced` is correctly updated to reflect the remaining quantity Opw-4908760 Forward-Port-Of: odoo/enterprise#98892 Forward-Port-Of: odoo/enterprise#91344
This change prevents an error that could occur when duplicating databases and the system processes multiple job posting records at once. It makes the job posting setup more reliable and avoids an unexpected crash during that operation.
Original PR description
These two computes assume a recordset of size 1. When duplicating databases, the recordset for this method might be more than 1, causing a "Expected singleton" traceback. See opw-5226545 (and linked TOTD thread)
The website event page now correctly identifies the event ID in URLs even when the event title contains characters that are encoded in the web address, such as Korean. This prevents the wrong event from being opened or edited in the website editor.
Original PR description
The website event page extracts the event id from urls that are formatted like "/event/[title]-[id]/" by matching the first number not followed by a word character. Languages like Korean however will have their title percent-encoded like "%EC%82%AC%EC", causing the regex to miss the true ID and return the wrong one. Steps to Reproduce: 1. Create an event with a Korean title eg "모든 행사". 2. Go to the website view and click on edit. 3. You'll see that the regex grabs a wrong id. This fix is for adapting this commit https://github.com/odoo/odoo/commit/d16b0a8e303047997a0d4764f55bb7f1c214d47b to the use of plugins over snippets in 18.4 and onwards. opw-5095411
This update adjusts an automated website performance test so it works correctly in both Community and Enterprise editions. It helps avoid false test failures while keeping the performance check useful during development.
Original PR description
The test is primarily intended to determine the number of requests to ir.ui.view. The information on the website is supplementary but less important. It mainly serves to inform performance considerations during development. Issue on runbot for single app test https://runbot.odoo.com/odoo/runbot.build.error/231557
This change fixes an error that could appear when opening the Google Merchant Center feed for published products. It ensures the feed loads correctly again, so merchants can view and use their product feed without running into a traceback error.
Original PR description
Issue: In this issue, google merchant feed traceback raises a traceback error. To reproduce: 1- Install Ecommerce app 2- Enable `Google Merchant Center` in setting 3- Create a consumable product and publish it 4- From `Google Merchant Center` setting, open `Manage feeds` 5- Copy the URL into the browser Cause: - on 30th June 2025: 7b56a6afda919f3c09d08eb1256416e0a2b4b1d9 added a required `uom` parameter to `_get_additionnal_combination_info` method - on 17th October 2025: b3f6541e9b6a1e8c6676cf2cad7418046f63e51b forward-port didn't take this change into account In Odoo 19, this is already fixed. opw-5229777
This update removes leftover unused code from the accounting reconciliation model after a previous redesign. It does not change how users work, but it helps keep the codebase simpler and easier to maintain.
Original PR description
In the PR (odoo/enterprise#80787) the reconciliation model was refactored in order to be easier to use for users. However, some dead code was forgotten and not removed. Forward-Port-Of: odoo/enterprise#98923
This fix ensures returned goods are sent back to the right location when a receipt includes both subcontracted and regular products. Before, all items could incorrectly be routed to the subcontracting location; now only subcontracted items use that location, while the others go back to the supplier as expected.
Original PR description
Steps to reproduce the bug: - Create a storable product "P1" and "P2" with vendor "azure interior" - for P2 subcontracting BoM referencing "azure interior" as subcontractor and component "C1" -…
Steps to reproduce the bug: - Create a storable product "P1" and "P2" with vendor "azure interior" - for P2 subcontracting BoM referencing "azure interior" as subcontractor and component "C1" - Create a receipt for partner "azure interior" including 1 unit of P1 and 1 unit of P2 - Validate the receipt - Create a return for both P1 and P2 Problem: A picking is created with destination location set to the subcontracting location for both products, instead of setting the partner location only for subcontracted products. Solution: Ensure only the move line for subcontracted products uses the subcontracting destination location, while other returned products go back to the supplier location. When the `picking_id.partner_id`` is changed, it triggers a write on the picking, which in turn triggers a write on its moves, but only on the ones that are not scrapped. However, since the `scrapped`` field is a stored computed field, and as it hasn't been accessed before, it needs to be computed. And because its computation depends on `location_dest_id`, that field also needs to be recomputed. as a result, the `location_dest_id`` of the moves that we manually set may be changed unexpectedly. Therefore, in the `_create_return`` function, we check that the picking’s `partner_id` is different from the moves’ partner_id before updating it, to avoid unnecessary writes and the chain of recomputations that could alter our values. Resetting the picking’s partner_id based on the move’s partner_id could actually be removed in master, as it serves no real purpose, the move.partner_id itself is already derived from the picking’s partner_id. We just keep it in stable versions to avoid any unexpected behavior changes. opw-5208289 Forward-Port-Of: odoo/odoo#234521
The fleet-specific tax report test and related query were moved to the enterprise edition where the required vehicle data is available. This prevents community builds from failing while keeping the intended reporting behavior working for enterprise customers.
Original PR description
Community build was failing with: ``` FAIL: TestAccountFleet.test_tax_report_with_vehicle_split_repartition Traceback (most recent call last): File '/data/build/odoo/addons/account_fleet/tests/test_account_fleet.py', line 99, in test_tax_report_with_vehicle_split_repartition self.assertEqual(len(tax_details), 2) AssertionError: 0 != 2 ``` The test and SQL join logic relied on `vehicle_id` propagation that only exists in the enterprise addon `account_accountant_fleet`. Since the community edition cannot populate `vehicle_id` on tax lines, the query always returned zero rows, causing the failure. To fix this, the fleet-specific tax report query and test have been moved to the enterprise module, where the vehicle-aware tax reporting functionality actually resides. This keeps community builds green while retaining the intended behavior in enterprise. runbot error:233462 Forward-Port-Of: odoo/enterprise#99288 Forward-Port-Of: odoo/enterprise#98650
The fleet-specific tax report test and reporting logic were moved to the enterprise edition, where the required vehicle-based accounting data is available. This prevents community builds from failing while keeping the intended fleet tax reporting behavior in enterprise.
Original PR description
Community build was failing with: ``` FAIL: TestAccountFleet.test_tax_report_with_vehicle_split_repartition Traceback (most recent call last): File '/data/build/odoo/addons/account_fleet/tests/test_account_fleet.py', line 99, in test_tax_report_with_vehicle_split_repartition self.assertEqual(len(tax_details), 2) AssertionError: 0 != 2 ``` The test and SQL join logic relied on `vehicle_id` propagation that only exists in the enterprise addon `account_accountant_fleet`. Since the community edition cannot populate `vehicle_id` on tax lines, the query always returned zero rows, causing the failure. To fix this, the fleet-specific tax report query and test have been moved to the enterprise module, where the vehicle-aware tax reporting functionality actually resides. This keeps community builds green while retaining the intended behavior in enterprise. runbot error:233462 Forward-Port-Of: odoo/odoo#235339 Forward-Port-Of: odoo/odoo#234095
This fix avoids a frontend error that could happen if an order was deleted while a pro forma document was still being processed. The system now checks that the order still exists before continuing, which makes the Point of Sale flow more reliable.
Original PR description
Before this commit, when trying to send a pro forma for an order that had been deleted while the pro forma call was in the queue, a JS error would occur because the callback of the call would try to access the order which was no longer existing in the frontend. This is now fixed by checking that the order is still present before accessing it in the callback. Forward-Port-Of: odoo/enterprise#99248
Opening a dropdown menu in some browsers could incorrectly trigger the page link behind it, causing the page to reload before users could make a selection. This fix prevents that unwanted behavior, making blog sidebar navigation more reliable.
Original PR description
In some browsers, opening a `<select>` triggers a click event. Because of this when the blog's sidebar "Archive" dropdown is opened, it might reload the page before the selection is actually made. This commit solves this by detecting a distinct event when PostLink is activated on `<select>` element. Steps to reproduce: - Using Firefox - Install `website_blog` - Edit the blogs page - Activate the sidebar - Save - Open the "Archive" dropdown => The page was reloaded Forward-Port-Of: odoo/odoo#233202
The website now only shows the language selector placeholder when there is more than one language available. This avoids an empty list item in the header, which could leave an unnecessary border or blank space.
Original PR description
This PR calls the language selector placeholder only when multiple languages exist, avoiding an empty header list item that creates an unnecessary border or empty space. task-5150808 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234345 Forward-Port-Of: odoo/odoo#231256
The exchange rate lookup for Colombia has been updated to use the new national bank service. This prevents disruptions now that the previous SOAP-based API has been retired and keeps currency rates flowing correctly.
Original PR description
The previous SOAP API was decommissioned. A new API was provided that doesn't need SOAP anymore and is a bit simpler [1]. [1] https://suameca.banrep.gov.co/estadisticas-economicas/webService opw-4860262 Forward-Port-Of: odoo/enterprise#99152
This change prevents the cursor and selection from jumping to the wrong place when adding elements in a report. Users can now continue typing or interacting with the inserted content immediately, which makes report editing smoother and more reliable.
Original PR description
On a new report, add a X2Many table in a new Report. In many cases there will be some issues with the selection as, when inserting the Element via the command of the report Editor we explicitly focus the editable of the html_editor. We need the document inside the iframe to get the focus, because our flow implied to click on some popover bound to the main window. But focusing the editable element changed the selection. So, instead, we focus the iframe's inner window, and the selection stays at the right place, and the user can immediately interact with it (by continuing typing after the insertion) task-5159482 Forward-Port-Of: odoo/enterprise#97642