Daily updates from Odoo
Tuesday, December 16, 2025
22 changes
2 changes
Enhancements to existing features
This update enhances the way Odoo calculates order amounts by allowing custom addons to modify the list of order lines used. Previously, this process was fixed, now it's more flexible, enabling developers to tailor order amount calculations to specific business needs. This improves the adaptability of the sales order system.
Original PR description
This allows to change the record set of order lines which are used by `sale.order` `_compute_amounts` by custom addons Forward-Port-Of: odoo/odoo#239928 Forward-Port-Of: odoo/odoo#233239
This update optimizes how translations are imported into Odoo, addressing a previous issue that caused large memory usage and potential errors. By focusing only on updated translations and simplifying the import query, the system now handles frequent updates more efficiently and reliably.
Original PR description
Before this commit, when importing the translations with the TranslationImporter object, the save method was building one big query per model, with each JSON object containing all the languages. On our server, where 36 languages are installed, this leads to big JSON objects, especially for some large mail templates. Recently, we even got MemoryErrors because of the soft memory limit being hit. The query was about 250MB long. In the function, we already have the current values, so it's easy to compare them to the new values, and only consider these in the query. Furthermore, there is no need to add the languages that aren't being updated. With this commit, we are building a slightly more complicated query, but it will receive much less data when the translations are updated frequently, as unchanged values will be ignored. Task-id: none Forward-Port-Of: odoo/odoo#239678
2 changes
Enhancements to existing features
This update enhances how Odoo calculates order amounts by allowing custom addons to modify the selection of order lines used in the calculation process. This change provides greater flexibility for businesses to tailor order amount calculations based on specific needs, improving accuracy and reporting. It’s a refinement of existing functionality.
Original PR description
This allows to change the record set of order lines which are used by `sale.order` `_compute_amounts` by custom addons Forward-Port-Of: odoo/odoo#239928 Forward-Port-Of: odoo/odoo#233239
This update optimizes how translations are imported into Odoo, reducing the size of the data processed and preventing potential memory issues. By focusing only on updated translations, the import process is now more efficient, especially with frequent updates to large mail templates.
Original PR description
Before this commit, when importing the translations with the TranslationImporter object, the save method was building one big query per model, with each JSON object containing all the languages. On our server, where 36 languages are installed, this leads to big JSON objects, especially for some large mail templates. Recently, we even got MemoryErrors because of the soft memory limit being hit. The query was about 250MB long. In the function, we already have the current values, so it's easy to compare them to the new values, and only consider these in the query. Furthermore, there is no need to add the languages that aren't being updated. With this commit, we are building a slightly more complicated query, but it will receive much less data when the translations are updated frequently, as unchanged values will be ignored. Task-id: none Forward-Port-Of: odoo/odoo#239678
1 change
Enhancements to existing features
This update automatically marks Odoo orders as paid when an UrbanPiper order is marked as 'dispatched'. This prevents order cancellations due to cashier oversight and ensures accurate order status tracking. It also integrates UrbanPiper orders into the blackbox reporting system.
Original PR description
*= urban_piper, black_box_be In this commit: =============== - When UrbanPiper updates an order to `dispatched`, we now automatically mark the order as paid in Odoo. - This prevents the order from being cancelled during the POS session closing if the cashier forgot to mark it as ready. - Also, we are adding this urban piper order to the blackbox, if it was not recorded in it. Task: 5261892
13 changes
Enhancements to existing features
This update prevents unnecessary data loading in the Point of Sale calendar view, specifically addressing potential performance issues and data security concerns. By simplifying the display and removing unused components, we've optimized the user experience and reduced the risk of accessing sensitive partner information. This change focuses on improving the PoS functionality.
Original PR description
Purpose ======= Prevent using the attendee popover in the calendar view popover in point of sale. Specification ============= The attendee popover is not necessary/relevant in point of sale where discuss is not available and access to further partner personnal information could be a problem. Changing the field to use the web "many2many_tags_avatar" widget. Also preventing the assets from loading the "Many2ManyAttendee" and the "Many2ManyAttendeeExpandable" components as they're inheriting from a mail field component which can't easily be loaded in PoS as it's using discuss and ImStatus features. Task-5153118
This update ensures that tax payments made by companies are accurately reflected in reports submitted to the government. Previously, the reports didn't include these tax payments, leading to potential discrepancies. This change adds the total tax value to the invoice total for GSTR reporting, aligning with government requirements.
Original PR description
Here we are not collecting tax from the customer but the company has pay taxes to the goverment and after that the company can claim refund for the taxes. So when we are sending report data to goverment then we need to include tax part into the invoice total task-5369117 Forward-Port-Of: odoo/enterprise#101538 Forward-Port-Of: odoo/enterprise#101308
This update simplifies a key query used in the sale commission reporting process. By adding an alias to a temporary table (CTE), the underlying code is now easier to modify and maintain. This improves the efficiency and flexibility of generating accurate sales commission reports.
Original PR description
Add an alias to the CTE used for sale order log selection. This is done to simplify modifications to the query. Forward-Port-Of: odoo/enterprise#102145
This update adjusts how the system sends email notifications using the Odoo mail template API. The API now returns a recordset of emails sent, rather than just an ID. This change ensures the system continues to function correctly with the latest Odoo updates and maintains reliable email delivery.
Original PR description
Purpose ======= Now, the `send_mail` method of `mail.template` returns a recordset, and not just an id, adapt the code to that change. Task-3084943
This update adds detailed logging for communication with the Odoo blackbox. Combined with a related feature for saving and downloading logs, this will significantly simplify troubleshooting client issues and improve support efficiency. It's a key step in proactively addressing potential problems.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/236927 This commit adds several log messages for the communication with the blackbox. In combination with the associated Community PR to save and download these logs, this should enable easier debugging when clients experience problems. Forward-Port-Of: odoo/enterprise#102141 Forward-Port-Of: odoo/enterprise#100183
This update enhances the formatting of tax reports for the Dominican Republic (l10n_co_dian) by standardizing float number formats. This ensures accurate and consistent reporting, aligning with local tax regulations and improving the reliability of financial data. The change was driven by a previous related enhancement.
Original PR description
Forward-Port-Of: odoo/enterprise#102085 Forward-Port-Of: odoo/enterprise#101288
This update simplifies the demo setup process for the HR Expense Stripe module by skipping the Stripe KYC settings and pre-filling information. This reduces the time needed to configure the demo, making it more efficient for presentations and testing. Note that a refresh is still required after setup to fully verify the account.
Original PR description
When clicking on Connect, we are now skipping Stripe KYC Settings and prefilling every informations to make the demonstrations quicker to set up. It's still required to wait a bit before refreshing to have the account as verified in the Odoo settings page. task-5246475
This update enhances the usability of the appointment calendar by streamlining the sharing process and preventing duplicate unavailability alerts. Specifically, the calendar view now provides a more intuitive sharing experience and correctly manages appointment availability, ensuring accurate scheduling.
Original PR description
1) Make sure the Share dropdown allowing to share an appointment type from the calendar view is correctly focusing the different items on mouse hover. The dropdown items are just simple buttons, improving them by using the DropdownItem component. 2) As a new unavailability alert has been set for the partners on the calendar quick create form, making sure the unavailability alert from the appointment template is correctly replacing it to prevent duplicates. 3) In PoS appointment, making sure the simplified calendar event form is the one opened instead of the full form when accessing it from the PoS calendar view. Task-5407656
This update enhances document access by synchronizing members to the destination when moving documents, ensuring consistent behavior. It also maintains access logs when removing membership, preserving access through other means and preventing data loss in the 'Recent' view. This improves document management and user experience.
Original PR description
1. Sync members with destination on moves so behavior is more consistent, predictable 2. Keep access logs when removing membership as user can still have access through other means and shouldn't lose the document in "Recent". See details in individual commits Task-5139786
This update simplifies the campaign kanban view by hiding irrelevant metrics (those with zero values) and renaming the 'Send/Add' label to 'New'. This improves the user experience and makes it easier to focus on key campaign data.
Original PR description
Hide zero-value metrics in the kanban view of the campaign. Rename the confusing 'Send/Add' label to 'New'. Task-5182993
This update removes a performance-hindering feature from the account report engine. The previous method, using 'safe_eval', was only needed for a specific calculation and caused slowdowns with large datasets. This change improves overall report generation speed and prepares the system for future updates like the partner ledger refactoring.
Original PR description
The safe_eval used in account report was only useful for domain engine to handle "-sum()". This however has huge performance impacts when handling a lot of lines, for example in the future partner ledger refactoring. task-5116827
This update streamlines the bank reconciliation process by ensuring the chatter used within the bank reconciliation widget now pulls information from the statement line instead of the general move. This reduces unnecessary noise and improves the clarity of reconciliation reports, making the process more efficient for users.
Original PR description
Before this commit, the chatter of bank reconciliation widget was using the move's chatter and not the statement line one. This commit changes that to have less noise when we do the reconciliation. task-5385187
This update integrates AI-powered SEO directly into the Odoo website. It automatically generates titles, descriptions, and keywords for web pages based on their content, improving search engine visibility. A new feature allows for structured data output control, ensuring optimal website performance.
Original PR description
This PR introduces an AI-based SEO to the website app. It does so by overriding the `TitleDescription.autoFill` method, using the default agent to generate title, description, and keyword based on the page content. This PR also adds a new parameter to the `_generate_response` of the `ai.agent` to allow one to pass a JSON schema for getting structured outputs. Doing so, it adds a restriction on the controller endpoint to forbid the use of structured outputs if the `enable_html_response` flag is set to true. task-5385183 Community PR: https://github.com/odoo/odoo/pull/238889
1 change
Enhancements to existing features
This update optimizes how Odoo imports translations, addressing a previous issue where large JSON objects caused memory problems. By focusing only on updated translations and simplifying the import query, the system now handles frequent updates more efficiently, preventing potential errors and improving overall performance.
Original PR description
Before this commit, when importing the translations with the TranslationImporter object, the save method was building one big query per model, with each JSON object containing all the languages. On our server, where 36 languages are installed, this leads to big JSON objects, especially for some large mail templates. Recently, we even got MemoryErrors because of the soft memory limit being hit. The query was about 250MB long. In the function, we already have the current values, so it's easy to compare them to the new values, and only consider these in the query. Furthermore, there is no need to add the languages that aren't being updated. With this commit, we are building a slightly more complicated query, but it will receive much less data when the translations are updated frequently, as unchanged values will be ignored. Task-id: none Forward-Port-Of: odoo/odoo#239678
3 changes
Enhancements to existing features
This update enhances the Guatemalan localization by automatically including the XML file alongside the PDF invoice when e-invoices are emailed to customers. Previously, only the PDF was sent, but now customers receive both files for greater transparency and convenience. The XML file naming convention has also been standardized.
Original PR description
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and…
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and sent to the SAT through Infile, is not attached to that email. Even though the SAT and Infile deliver the XML to the customer, it is more convenient and transparent if Odoo includes it directly in the outgoing invoice template email, so the customer receives both files in one place. Before this commit:- - Only PDF version is attached by default in customer email for e-invoices. - Name of edi document is prefixed with `Demo` if company is in demo environment (check parent company's environment in case of child company) (e.g. DEMO_certificate_INV_2025_00001.xml) and prefixed with `SAT` if company is in testing or production environment(e.g. SAT_certificate_INV_2025_00001.xml). After this commit:- - XML version is also attached by default along with PDF in customer email for e-invoices. - Name of edi document is always prefixed with `SAT`. task-5224521
This update optimizes how Odoo imports translations, reducing the size of the data processed and preventing potential memory issues. By focusing only on updated translations, the import process is now more efficient, especially when updates are frequent.
Original PR description
Before this commit, when importing the translations with the TranslationImporter object, the save method was building one big query per model, with each JSON object containing all the languages. On our server, where 36 languages are installed, this leads to big JSON objects, especially for some large mail templates. Recently, we even got MemoryErrors because of the soft memory limit being hit. The query was about 250MB long. In the function, we already have the current values, so it's easy to compare them to the new values, and only consider these in the query. Furthermore, there is no need to add the languages that aren't being updated. With this commit, we are building a slightly more complicated query, but it will receive much less data when the translations are updated frequently, as unchanged values will be ignored. Task-id: none Forward-Port-Of: odoo/odoo#239678
This update ensures the IoT boxes automatically update their code to match the latest database version, running nightly at midnight. This prevents discrepancies and maintains data consistency between the database and the IoT devices. Existing IoT boxes require a restart to implement this new synchronization process.
Original PR description
This PR adds the code which checks every midnight to see if the version of the database has changed. If so, it will update the iot box's code to align it to the database version Note: 1) the existing iot boxes will need to restart to get this cron job 2) Outside of database upgrade the code won't be upgraded with the cron Forward-Port-Of: odoo/odoo#239049