Daily updates from Odoo
Navigate
Branch
Thursday, May 22, 2025
25 changes
Enhancements to existing features
Subscription invoice generation now uses Odoo's newer progress tracking approach, replacing an older method scheduled for deprecation. This keeps subscription billing jobs compatible with future platform updates and avoids incorrect auto-commit behavior during installation.
Original PR description
Use `_commit_progress` instead of `_notify_progress` which will be deprecated. odoo/odoo#207082
Users can now download a ready-made template when importing bank statement lines. This makes it easier to prepare import files correctly and reduces errors during bank statement processing.
Original PR description
PURPOSE: Purpose of this pr is to provide bank statement line template to user. SPECIFICATION: After this pr, user can download bank statement line template from import action. Task - 3833713
The Enterprise interface gets brighter brand colors to match the latest visual identity, including updated home menu app shortcuts with a more mobile-inspired look. The navigation bar also gains clearer visual separation from breadcrumbs, making everyday navigation easier to read.
Original PR description
New color for matching the new chart & add shadow to the navbar to help clarify the distinction between the navbar and the breadcrumb. task-4804677 requires: https://github.com/odoo/odoo/pull/210598
Bank reconciliation now shows the foreign currency on liquidity lines when foreign-currency amounts are displayed. This reduces confusion for accountants by aligning the visible currency column with the actual transaction currency.
Original PR description
Currently the bank recon displays the company currency on the liquidity line. This is confusing considering that the amount currency column is only visible when there is a foreign currency. Display the foreign currency on the liquidity line instead. Part of Task-4286245 (consider backport)
This update removes an unsupported icon styling marker from several Odoo modules. The change keeps the interface code cleaner and helps avoid confusion or inconsistent icon behavior, without changing business workflows.
Original PR description
*: account_accountant, accountant_batch_payment, event_social, hr_payroll, stock_barcode, whatsapp_event This commit cleans the code by taking off a useless class in Font Awesome v4 such as `fa-solid`. task-4793826 community : https://github.com/odoo/odoo/pull/210602 --- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)
Resolved issues and error corrections
Helpdesk users can now open the sales order line linked to a ticket without triggering an error. The change ensures the correct sales line form is used while still allowing the ticket flow to open the appropriate sales order form when creating a new order.
Original PR description
Before this commit, when the user would like to go to the form view of SOL linked to a ticket (when he is on ticket form view and click on the arrow right next to the sale_line_id field), a traceback…
Before this commit, when the user would like to go to the form view of SOL linked to a ticket (when he is on ticket form view and click on the arrow right next to the sale_line_id field), a traceback is occurred because a field is undefined in `sale.order.line` model. The reason is because the form view loaded is the one of the SO. This commit changes `form_view_ref` into `so_form_view_ref` because the `so_line_create_button` could need to use another form view of SO than the default one when the user clicks on `fa-plus` button to create a new SO. Steps to reproduce the issue ---------------------------- 0. Install `helpdesk_sale_timesheet` module 1. Create a billable helpdesk team 2. Create a new ticket inside that helpdesk team 3. In the form view of that ticket, clicks on the `+` button displayed next to the SOL field to create a new SO 4. Create the SO with at least one service product in the SO and save 5. In the ticket form view, open the form view of the SOL set on the ticket. Expected behavior ----------------- The SOL form view should be opened without any issue. Current Behavior ---------------- A traceback is occurred because a field does not exist in SOL model, the reason is because we open the form view of SO instead of the SOL one. task-4781247
The Avatax Brazil connection test now shows a clearer warning-style message instead of an “Invalid Operation” error when the test completes. This reduces confusion for users, especially when the connection is successful, and guides them back to continue their accounting configuration.
Original PR description
The previous connection test window showed up as an UserError with the title "Invalid Operation", as seen bellow, which can be confusing to users if the connection ends up as successful similar to what was done for AR.

Replace the UserError with a RedirectWarning that has a better title message ("Odoo Warning"). As it needs to redirect to somewhere, we redirect back to the current accounting page in settings, and show the button "Continue Configurations".
task-4772548Bank statement reconciliation rules now search across the label, transaction details, and narration together, so users no longer need to choose where the rule should look. This makes automatic matching more reliable and simplifies setup by removing an unnecessary option.
Original PR description
We don't want the user to differentiate the places where to apply the regex search (reco model) on statement lines. We thus apply it on the label, the transaction details and the narration altogether, returning on the first match. We don't need the "from_transaction_details" selection option anymore. task-4749338
Code cleanup and technical improvements
Enterprise website-related apps were updated to work with the latest website builder architecture from the community edition. This keeps appointment, helpdesk, knowledge, studio, and enterprise website features aligned so users can continue editing website content reliably after the platform change.
Original PR description
This commit adapts the enterprise code to the new website builder architecture introduced in the community repository.
Miscellaneous changes
The redesign of the spreadsheet layout did not account for the small screen mode. Mor specifically, the breadcrumbs can be reduded to a "previous arrow" to spare some space to display the spreadsheet name. task-4774806 Forward-Port-Of: odoo/enterprise#84732
Original PR description
The redesign of the spreadsheet layout did not account for the small screen mode. Mor specifically, the breadcrumbs can be reduded to a "previous arrow" to spare some space to display the spreadsheet name. task-4774806 Forward-Port-Of: odoo/enterprise#84732
- avoid duplicated ids in achievement report - avoid filtering too much in details - add some tests taskid: 4776256 Forward-Port-Of: odoo/enterprise#85806 Forward-Port-Of: odoo/enterprise#85109
Original PR description
- avoid duplicated ids in achievement report - avoid filtering too much in details - add some tests taskid: 4776256 Forward-Port-Of: odoo/enterprise#85806 Forward-Port-Of: odoo/enterprise#85109
Steps to reproduce: (thanks to TBS for investigating + writing the test) 1. Have a MX company with Quadrum or SwSapien 2. Create a USD bank transaction with `13220.00 USD` and `305147.51 MXN` 3. Create a USD invoice for `13220.00 USD` and send CFDI 4. Reconcile transaction and invoice 5. Click "Update payments" on the invoice => CRP20211 Looks like it comes from this rounding difference Rate is computed by odoo using `305147.51 MXN / 13220.0 USD = 23.082262481 ≃ 23.082262 MXN/USD`
Original PR description
Steps to reproduce: (thanks to TBS for investigating + writing the test) 1. Have a MX company with Quadrum or SwSapien 2. Create a USD bank transaction with `13220.00 USD` and `305147.51 MXN` 3.…
Steps to reproduce: (thanks to TBS for investigating + writing the test) 1. Have a MX company with Quadrum or SwSapien 2. Create a USD bank transaction with `13220.00 USD` and `305147.51 MXN` 3. Create a USD invoice for `13220.00 USD` and send CFDI 4. Reconcile transaction and invoice 5. Click "Update payments" on the invoice => CRP20211 Looks like it comes from this rounding difference Rate is computed by odoo using `305147.51 MXN / 13220.0 USD = 23.082262481 ≃ 23.082262 MXN/USD` PAC verify the amount paid using `13220.0 USD * 23.082262 MXN/USD = 305147.50 MXN` which is not `305147.51 MXN` Solution: There is no solution by adapting the rate: - quadrum restricts the rate to 6 decimals; - rounding the rate differently (e.g. to `23.082263`) would not help because `13220.0 USD * 23.082263 MXN/USD = 305147.52 MXN` which again is not `305147.51 MXN`. So, the only solution that I can think of is to adapt the amount in company currency so that it is exactly `round(amount_in_payment_curr / rate_rounded_to_6_decimals)`, i.e. in the example, change it to `305147.50 MXN`. In tests, both Quadrum and SwSapien seem to accept this. We don't perform the modification for Solucion Factible (the other PAC). opw-4222310 Forward-Port-Of: odoo/enterprise#85794 Forward-Port-Of: odoo/enterprise#83499
- Turn on Inter-company transactions. Select to sync invoices and bills in two companies. - Create an invoice in company A for an individual contact belonging to company B, then send and print the invoice. - In the corresponding bill in Company B, the draft bill is created without any attachment_ids. In the method _process_send_and_print from account_inter_company_rule the moves_with_attachements does not check if a partner belong to a synced company. opw-4675654 Forward-Port-Of: odoo/e
Original PR description
- Turn on Inter-company transactions. Select to sync invoices and bills in two companies. - Create an invoice in company A for an individual contact belonging to company B, then send and print the invoice. - In the corresponding bill in Company B, the draft bill is created without any attachment_ids. In the method _process_send_and_print from account_inter_company_rule the moves_with_attachements does not check if a partner belong to a synced company. opw-4675654 Forward-Port-Of: odoo/enterprise#85210 Forward-Port-Of: odoo/enterprise#83431
**Before this PR:** Pinning a message would throw an error if the associated thread was not present on the message. **After this PR:** This commit ensures that pinning a message works properly. **Task**-4805076 Forward-Port-Of: odoo/enterprise#85862
Original PR description
**Before this PR:** Pinning a message would throw an error if the associated thread was not present on the message. **After this PR:** This commit ensures that pinning a message works properly. **Task**-4805076 Forward-Port-Of: odoo/enterprise#85862
…ve and reload sources In the reportEditor edit the xml, modify a view's arch and save. Before this commit, the cursor position in the XMLEditor was reset to [0,0]. After this commit, we restore the position of the cursor according to the start position of the last edition. opw-4745895 Forward-Port-Of: odoo/enterprise#86031 Forward-Port-Of: odoo/enterprise#84877
Original PR description
…ve and reload sources In the reportEditor edit the xml, modify a view's arch and save. Before this commit, the cursor position in the XMLEditor was reset to [0,0]. After this commit, we restore the position of the cursor according to the start position of the last edition. opw-4745895 Forward-Port-Of: odoo/enterprise#86031 Forward-Port-Of: odoo/enterprise#84877
### Steps to reproduce: 1. Create a portal user. 2. Create an automation rule to send an email as a message. Example: https://drive.google.com/file/d/1mIa4R7a2Z2fnkngOMD7zN2t9Z2XHhGY7/view 3. Now, add the portal user as a follower on a task. 4. Change the state of a task to execute an automation rule. 5. Email will be received by a portal user but it will not be visible on the messaging history on the portal. ### Cause: This is happening because when running an automation rule that
Original PR description
### Steps to reproduce: 1. Create a portal user. 2. Create an automation rule to send an email as a message. Example: https://drive.google.com/file/d/1mIa4R7a2Z2fnkngOMD7zN2t9Z2XHhGY7/view 3. Now,…
### Steps to reproduce: 1. Create a portal user. 2. Create an automation rule to send an email as a message. Example: https://drive.google.com/file/d/1mIa4R7a2Z2fnkngOMD7zN2t9Z2XHhGY7/view 3. Now, add the portal user as a follower on a task. 4. Change the state of a task to execute an automation rule. 5. Email will be received by a portal user but it will not be visible on the messaging history on the portal. ### Cause: This is happening because when running an automation rule that will send an email we set the 'mail.message' state as System notification by default which leads that this mail will be sent normally to every follower of the record but will be only shown in the chat history for internal users not portal as we are just showing 'comment', 'incoming_email' and 'outgoing_email' messages. ### Fix: Checking if the server action that is being run is sending an email we will set the state of the 'mail.message' as 'auto_comment' and add 'auto_comment' to the domain of the field website_message_id which is for the messages shown to the portal user in his view opw-4459754 Forward-Port-Of: odoo/enterprise#85969 Forward-Port-Of: odoo/enterprise#82352
…vailability ### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock and add a `Security Time` of 24 hours. - Create a rental order for 10 units of that product planed for the period : [today + 2 days, today + 3 days] and confirm it. - Create a rental order for 10 units of that product planed for the period : [today + 1 days, today + 2 days] and confirm it. - Look at the forecast rentable quantity. ####
Original PR description
…vailability ### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock and add a `Security Time` of 24 hours. - Create…
…vailability ### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock and add a `Security Time` of 24 hours. - Create a rental order for 10 units of that product planed for the period : [today + 2 days, today + 3 days] and confirm it. - Create a rental order for 10 units of that product planed for the period : [today + 1 days, today + 2 days] and confirm it. - Look at the forecast rentable quantity. #### > It should be 90 but it is 100. ### Cause of the issue: The `preparation_time` (`Security Time`) field is used at the sale order line creation to modify the `reservation_begin` value: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L447-L453 In particular, the `preparation_time` of the product creates a difference between the `order_id.rental_start_date` and the `reservation_begin`. This is porblematic since the `rental_start_date` is used to generate the dates of the deliveries taken into account by the forecast: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L354-L362 but the quantity considered as rented does not and is purely based on the `reservation_begin` of the line: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/product_product.py#L113-L117 In particular, the qunaities are not yet accounted ithe stock forecast by the `virtual_available` value of the product: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L129-L132 But will incorrectly be found and read by the rental forecast: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L133-L140 opw-4552760 Forward-Port-Of: odoo/enterprise#85949
The touchend event must be preventDefault-ed to prevent zooming on double-tab on mobile. However, the touchend handler was incorrectly set to this.props.onClickKey, which doesn't exist. This commit updates the code to trigger a click event on touchend so that the same handler is used whether the button is tapped or clicked, preventing similar situations where the click handler is updated but not the touchend handler, leaving the latter broken. Forward-Port-Of: odoo/enterprise#84656
Original PR description
The touchend event must be preventDefault-ed to prevent zooming on double-tab on mobile. However, the touchend handler was incorrectly set to this.props.onClickKey, which doesn't exist. This commit updates the code to trigger a click event on touchend so that the same handler is used whether the button is tapped or clicked, preventing similar situations where the click handler is updated but not the touchend handler, leaving the latter broken. Forward-Port-Of: odoo/enterprise#84656
Before this commit, if you paired an IoT box with no Points of Sale configured, you would still get the popup prompting you to autoconfigure your IoT box with a PoS. However, since you have no PoS you cannot fill in the required field and have to dismiss the popup. After this commit, we only open the autoconfigure popup if there is at least one active PoS available. task-4797331 Forward-Port-Of: odoo/enterprise#85976
Original PR description
Before this commit, if you paired an IoT box with no Points of Sale configured, you would still get the popup prompting you to autoconfigure your IoT box with a PoS. However, since you have no PoS you cannot fill in the required field and have to dismiss the popup. After this commit, we only open the autoconfigure popup if there is at least one active PoS available. task-4797331 Forward-Port-Of: odoo/enterprise#85976
The xsd changed. Now the rounding needs to be to 2 decimals everywhere. The official xsd does not mention it, but the field submit_more must appear on the xml. Also, while it's not blocking directly, the declaration will be rejected if the special deduction is filled without specifying the special %age. So we add a banner warning the user of it. opw-4789154 Forward-Port-Of: odoo/enterprise#85805 Forward-Port-Of: odoo/enterprise#85464
Original PR description
The xsd changed. Now the rounding needs to be to 2 decimals everywhere. The official xsd does not mention it, but the field submit_more must appear on the xml. Also, while it's not blocking directly, the declaration will be rejected if the special deduction is filled without specifying the special %age. So we add a banner warning the user of it. opw-4789154 Forward-Port-Of: odoo/enterprise#85805 Forward-Port-Of: odoo/enterprise#85464
Follow the changes made in community commit. When a Shipping Address is displayed inside the `information_block` there is no spacing to differentiate it from the Invoicing Address, making it harder to read. This is the master forwardport therefore we removed the leftovers `:` characters. task-4730464 Community PR: https://github.com/odoo/odoo/pull/207725 Forward-Port-Of: odoo/enterprise#84281
Original PR description
Follow the changes made in community commit. When a Shipping Address is displayed inside the `information_block` there is no spacing to differentiate it from the Invoicing Address, making it harder to read. This is the master forwardport therefore we removed the leftovers `:` characters. task-4730464 Community PR: https://github.com/odoo/odoo/pull/207725 Forward-Port-Of: odoo/enterprise#84281
This commit adds a new method to dynamically adjust the input font size based on the length of the input value in the softphone keypad. Forward-Port-Of: odoo/enterprise#85625
Original PR description
This commit adds a new method to dynamically adjust the input font size based on the length of the input value in the softphone keypad. Forward-Port-Of: odoo/enterprise#85625
**[FIX] l10_ke_edi_oscu: Handle None name of fresh unposted credit notes.** To reproduce the issue: - Create an invoice with some lines - Create the first credit note and change the product set on one of the lines or its quantity to trigger the fix piece of the code (do not confirm the credit note) - Create another credit note and try to post it -> Traceback The issue is caused by the fact that newly created moves generally have `None` in the `name` field, which is only populated after
Original PR description
**[FIX] l10_ke_edi_oscu: Handle None name of fresh unposted credit notes.** To reproduce the issue: - Create an invoice with some lines - Create the first credit note and change the product set on one of the lines or its quantity to trigger the fix piece of the code (do not confirm the credit note) - Create another credit note and try to post it -> Traceback The issue is caused by the fact that newly created moves generally have `None` in the `name` field, which is only populated after posting. This fix resolve this by replacing the string shown when the name field is None. opw-4779976 Forward-Port-Of: odoo/enterprise#85345
NSSF report columns "NSSF Amount Employee" and "NSSF Amount Employer" display pre-computation values which is the amount of payslip lines instead of total amount after the computation of 6% rate. task-4724292 Forward-Port-Of: odoo/enterprise#83613
Original PR description
NSSF report columns "NSSF Amount Employee" and "NSSF Amount Employer" display pre-computation values which is the amount of payslip lines instead of total amount after the computation of 6% rate. task-4724292 Forward-Port-Of: odoo/enterprise#83613
Prior to this change, if the demo data were loaded for account but couldn't be for account_loans, its installation would simply crash trying to reference an unknown xml_id 'account_loans_loan_demo1'. opw-4790398 upg-2793930 Forward-Port-Of: odoo/enterprise#85853
Original PR description
Prior to this change, if the demo data were loaded for account but couldn't be for account_loans, its installation would simply crash trying to reference an unknown xml_id 'account_loans_loan_demo1'. opw-4790398 upg-2793930 Forward-Port-Of: odoo/enterprise#85853