Daily updates from Odoo
Tuesday, February 3, 2026
57 changes · master
New functionality added to Odoo
This update adds sample data for the Swiss HR Payroll Localization, enabling easier testing and demonstration of the payroll functionality. The data includes a company setup, employee details, and a year's worth of payslips, providing a realistic scenario for evaluation.
Original PR description
This commit adds demo data for the Swiss HR Payroll Localization to facilitate testing and demonstration of Swiss payroll. The demo data includes the company setup, employee with relevant details, and 1 year of payslip history for that employee. Task: 5870506 Forward-Port-Of: odoo/enterprise#105872
This update adds support for Australian BAS (Business Activity Statement) tax returns within Odoo Enterprise. It includes new report templates and sets the most commonly used tax type as active by default, streamlining the process for Australian businesses to file their BAS returns. This ensures compliance with Australian tax regulations.
Original PR description
Add new BAS tax return types for Australia Task-5416381 CE master PR: https://github.com/odoo/odoo/pull/242733 Documentation PR: https://github.com/odoo/documentation/pull/15933
This update extends the EC Sales List and Intrastat reporting capabilities to support key European markets, including Austria, Germany, Italy, Poland, Portugal, and The Netherlands. It adds specific deadlines and reporting periods for these countries, aligning with local regulations and improving compliance for businesses operating within the EU.
Original PR description
Following the implementation of the Tax returns feature in 18.3 which was focused on the general implementation and Belgium, we want to add the specification for other country and in this case Austria, Germany, The Netherlands, Italy, Poland, and Portugal. Adding EC sales list, Intrastat specific deadlines and periodicities. task-4776236 Forward-Port-Of: odoo/enterprise#97615
Enhancements to existing features
This update enhances the 'My Tasks' menu by displaying employee availability – including time off and unavailable periods – regardless of how tasks are grouped. This ensures users always have a clear view of their workload and upcoming absences directly within the 'My Tasks' interface, streamlining task management.
Original PR description
Currently, the unavailabilities (non-working days, time off, public holidays, and periods outside of a work contract) are only displayed if the Gantt view is grouped by users. Of course, we expect someone to know when he/she will be off. They can do it via the "All tasks" menu and filter on their own tasks, but that is the purpose of the "My tasks" menu. In this commit, display the unavailabilities of the current user, even in the case the view is not grouped by users, but only in the context of "My tasks" and not elsewhere. task-5184732
This pull request removes unnecessary functionality related to active tab keynav focus within the VoIP module. The change simplifies the user experience and prevents potential conflicts. It's a minor improvement to the VoIP application.
Original PR description
This is not needed.
This update improves the Helpdesk module by adding an offline searchbar. This change, mirroring a previous development, optimizes the user experience by allowing access to search functionality even without an active internet connection. It’s a minor enhancement focused on usability.
Original PR description
This commit is the enterprise counterpart of https://github.com/odoo/odoo/pull/244531, where we slightly change the kanban controller template (add a `t-elif` after the KanbanRenderer node). This change required an adaptation of the custom kanban controller in helpdesk. Task~244531
This update simplifies how Odoo identifies refund transactions within its accounting modules. Previously, checks for refunds were done with multiple, specific conditions. Now, a new method is added to `account.move` to directly determine if a move represents a refund, improving code clarity and maintainability. This change enhances the accuracy of refund processing across various Odoo localization modules.
Original PR description
Before this commit-
We had methods on `account.move` i.e.
`is_sale_document`, `is_invoice` but
at many instance in the code base,
we did do `self.move_type in ('out_refund', 'in_refund')`
After this commit-
We add new methods on `account.move` to
get and check if the move is refund
task-5850565This update adjusts the inheritance of a template used for displaying sales tax calculations on the website. The change reflects a shift in how the 'o_order_total_taxes' component is managed within the Odoo platform. This ensures accurate and consistent tax display for customers.
Original PR description
"o_order_total_taxes" is now in a different template, so inheritance has been adjusted. See also: - https://github.com/odoo/odoo/pull/229912 task-4805599
This update enhances the system's ability to prevent duplicate Vendor Bills in Colombia by specifically checking for unique CUFE (Electronic Invoice Code) identifiers. Previously, standard partner-based duplicate detection wasn't sufficient for CUFE uniqueness. Now, a warning banner will appear if a duplicate CUFE is found, ensuring accurate record-keeping.
Original PR description
When importing or editing Vendor Bills in Colombia, the CUFE (Electronic Invoice Code) serves as a globally unique identifier. The standard duplicate detection, which relies on the partner, is insufficient for ensuring CUFE uniqueness across the system. This commit overrides the duplicate detection hooks to check for existing bills with the same `l10n_co_edi_cufe_cude_ref`. Functionally, if a duplicate CUFE is detected on a Vendor Bill, the system will populate the `duplicated_ref_ids` field, triggering the standard warning banner on the form view to alert the user. Related Community PR: https://github.com/odoo/odoo/pull/240911 Task-5402480
This update adjusts the maximum NSSF (National Social Security Fund) contribution limits to align with the latest regulations under the NSSF Act 2013. Specifically, the lower and upper earnings limits have been revised, impacting the total combined contribution a business can make. This ensures compliance with Kenyan tax laws.
Original PR description
This commit updates the NSSF Lower and Upper Earnings Limits in accordance with the 4th year of implementation of the NSSF Act 2013. - Set Lower Earnings Limit (Tier 1) to 9,000. - Set Upper Earnings Limit (Tier 2) to 108,000. - Resulting max combined contribution is now 6,480. Task: 5485002 Forward-Port-Of: odoo/enterprise#105019
This update clarifies the Professional Tax deduction on employee contracts by updating the tooltip and renaming the field label. This change improves user understanding and reduces potential confusion when configuring payroll settings.
Original PR description
Purpose: - Improve clarity and understanding of the Professional Tax deduction on the employee contract by providing a more descriptive tooltip and a clearer label. This PR includes: - Updated the Professional Tax tooltip to better understanding. - Renamed the field label from 'Professional Tax Slab' to 'Professional Tax'. task-5890446
This update clarifies the naming of a key field in our subscription tracking system. The 'Subscription State' column has been renamed to 'State Before' to provide a more intuitive understanding of the subscription's status at the time of an event. This change improves readability and reduces potential confusion for users.
Original PR description
The sale.order.log model includes a field named subscription state that records the state of the subscription at the moment an event occurs (i.e., the state before the change). To improve clarity for end users, this PR renames the column from Subscription State to State Before. task-5258195
This update enhances the Odoo POS system by allowing automatic SMS and WhatsApp notifications to customers regarding order status updates – from initial placement to completion. This improves customer communication and provides real-time updates, leading to a better customer experience and potentially increased sales.
Original PR description
… to warn the client about order status This task aims to provide a solution for communicating the status of various customer orders. Now, the POS can send an SMS or a WhatsApp message when an order at the self-service is placed, either through WhatsApp, SMS, or both. When the order is completed, the customer can also be notified. task : 5246552 community pr : https://github.com/odoo/odoo/pull/235389 Forward-Port-Of: odoo/enterprise#99318
This update aligns the TDS XLSX report with the official utility format, ensuring accurate tax documentation. By fetching partner information from AML records, the report now correctly handles miscellaneous entries, resolving a previous issue with formatting. This improves the reliability of tax reporting.
Original PR description
This commit aligns the TDS XLSX report with the official TDS utility format. Additionally, We now fetch the partner from AML record, so even miscellaneous entries generate a correctly formatted XLSX sheet. task-5237518 Forward-Port-Of: odoo/enterprise#106016 Forward-Port-Of: odoo/enterprise#104753
This update enables smaller Odoo users to connect to Shopee, a popular e-commerce platform, by utilizing the IAP service. The changes include a simplified user interface replacing the 'Shopee Account' menu with 'Shopee Shop' and supporting the IAP credential requirement for Shopee API access.
Original PR description
This is a new feature of Shopee Connector. Shopee has a minimum order requirement for sellers to apply for an API key, which small sellers cannot apply for an API key. This commit: - Enables using Shopee Connector with Odoo API credential via IAP service. - Shopee Account menu is replaced by Shopee Shop to improve UX. task id - 5022010
This update enhances the user experience by adding a cursor pointer to the headers of statement summaries in the accounting module. This allows users to easily navigate and explore their financial reports, making the system more intuitive and efficient.
Original PR description
This improves the user experience by indicating that the headers are clickable. No task ID Forward-Port-Of: odoo/enterprise#105078 Forward-Port-Of: odoo/enterprise#105023
This update streamlines the display of IM status and thread icons on avatars across Odoo. By introducing a new component, the team has reduced maintenance and improved UI consistency, ensuring a more reliable and visually appealing user experience for all users.
Original PR description
*: planning_holidays, voip, whatsapp Before this commit, IM status and thread icon were used a lot as bottom-right floating icon on a conversation or user avatar. Each context that wanted this visual…
*: planning_holidays, voip, whatsapp Before this commit, IM status and thread icon were used a lot as bottom-right floating icon on a conversation or user avatar. Each context that wanted this visual of avatar + floating icon had to craft by hand the avatar sizing and icon position, which has many drawbacks: - image and icon sizing and positioning needs manual tweak in each context, requiring lots of effort. - very-prone to inconsistencies due to high maintenance to make each context work. Current state had many inconsistencies. - handling of mask of floating icon is poor, with `.bg-inherit` on parented chainng that is hard to enforce and in some cases, just don't work at all This commit improves by introducing a new component `DiscussAvatar`, that accepts `channel`, `thread`, channel's `member` or `persona` to display avatar and conversation / person icon in the bottom-right corner. This new component has the following benefits: - one component to handle all the cases of conversation / person avatar with floating icon / im status, drastically reducing maintenance effort and increasing significantly UI consistency. - new technique to mask image with floating icon that works all the time thanks to the use of `SVG`'s mask. Part of Task-5867464 https://github.com/odoo/odoo/pull/246182
This update optimizes how report data is stored, reducing memory usage and improving performance, particularly in the web client. By changing the format of column group options from a large string to a list of integers, the system now uses significantly less memory. This results in faster report generation and a smoother user experience.
Original PR description
Each cell of a report references its column group options. Before this commit, it was using `column_group_key`, which was a serialization of the column group options. You could get the column group options, using the `options['column_groups']` dict with this key. In the web client, this takes up a lot of memory. As it is a relatively big string, created for each cell. In the backend, there's no issue as they all are just references to the same objects as in the options. With this commit, in order to save memory, `options['column_groups']` is a list instead of a dict. `column_group_index` replaces `column_group_key`. Using this index on `options['column_groups']` gives the corresponding column group options. As it is a small int, it takes far less place in memory. task-5164369
This update standardizes the wording used for the Live Chat app across Odoo. This change improves the user experience by ensuring a consistent and professional brand image. It's part of a larger effort to streamline and refine key Odoo features.
Original PR description
This commit harmonizes the copywriting of the Live Chat app name. part of task-4461200 part of task-5867464
This update separates the mocked SIP.js library for demo mode, enabling better testing and future improvements. It allows for more robust unit tests and unlocks potential enhancements to the demo experience, paving the way for simulating various call scenarios.
Original PR description
This commit moves the mocked SIP.js library used in VoIP demo mode into a separate asset bundle. Benefits: - it makes the mocked SIP.js library usable in unit tests as well, and to even test the prod…
This commit moves the mocked SIP.js library used in VoIP demo mode into
a separate asset bundle.
Benefits:
- it makes the mocked SIP.js library usable in unit tests as well, and
to even test the prod mode by further extending the mocked features.
- it paves the way for future improvements in VoIP unit tests, by
allowing to have different mocked behaviors depending on the test
needs (e.g. simulating call drops, network issues, etc).
- it even allows the user agent to initialize even in demo mode,
unlocking potential future improvements of this mode.
Notable Changes:
- the bundle loading is now made inside the start of the voip service
instead of the user agent class, which makes more sense as it is the
voip service that knows in which mode it is running.
- the bundle "voip.assets_sip" is now split into three bundles:
- "voip.assets_sip_prod": contains the real SIP.js library
- "voip.assets_sip_demo": contains the mocked SIP.js library
- "voip.assets_sip_tests": contains the mocked SIP.js library plus
additional mocking for unit tests
Future improvements:
- the mocked SIP.js for unit tests is for now a bit naïve and should be
improved along with future VoIP unit tests developments.This update enhances the Odoo Enterprise softphone by adding tooltips to country flags displayed alongside phone numbers. This improves user recognition of the flagged countries, making the call process more intuitive and user-friendly. A new component was created to avoid code repetition and simplify future updates.
Original PR description
In voip.call form/list view, country flags are shown with phone numbers. In this commit, we add alt/tooltip to country flags for users to recognise them. Task-[5404442](https://www.odoo.com/odoo/5778/tasks/5404442)
This update simplifies the setup for desk phone calls by ensuring consistent labels, helpful instructions, and a unified user interface across different settings locations. The changes clarify how to configure calls from another device, improving usability and reducing potential confusion for users.
Original PR description
The `should_call_from_another_device` field is defined both on the user model and the discuss "user settings" model (accessible via Settings > Technical > Discuss > User Settings). This commit makes sure that: - Both fields have the same clear label (also keeping the fact it fits on one line in English). - Both fields have the same clear help text (before this commit, the help text did not appear where it was the most useful: in the user preference dialog). - The UI is the same for all 3 places (user form view, preference form view and discuss user settings form view): the label, the checkbox and then the input field for the phone number; all on the same line. Notice that the `external_device_number` related field was also simplified and the placeholder "No redirect" is replaced with "Phone number" which makes it clearer that once the checkbox is checked, a phone number has to be put over there. task-4947771
Resolved issues and error corrections
This update resolves a bug that prevented automated tours from correctly initializing drag actions on the Gantt chart. The change re-enabled a safety check during pill dragging, ensuring actions work as expected while still allowing users to drag pills outside the chart's grid.
Original PR description
In PR https://github.com/odoo/enterprise/pull/103230, a fail-safe was removed to allow dragging pills outside the grid (for unscheduling). This caused issues in automated tours where actions triggered on off-screen pills (where no cell is hovered) failed to initialize the drag properly. This commit reinstates a validation check within `onWillStartDrag`. This ensures the drag only starts if a valid target is confirmed, fixing the tour failures while preserving the ability to drag pills out of the grid. runbot-error-238521
This update fixes a bug in our VoIP system that prevented users from initiating multiple calls simultaneously and displayed incorrect session status. The change ensures calls are tracked earlier, limiting active sessions to two, and provides clearer notifications to the user. It also simplifies terminology for better clarity.
Original PR description
Previously, SIP sessions were only considered active after the associated call was ready. This led to two issues: incoming invitations that were terminated before call readiness could block the UI with already ended sessions, and users could initiate multiple concurrent calls due to makeCall not being guarded. This change pushes sessions as early as possible and notifies the user when a call cannot be started, ensuring that no more than two sessions can be active at any time. Additionally, the activeSession terminology has been replaced with frontSession and backSession.
This update resolves a test issue related to a recent change in how the select component is implemented. The new component uses a popover instead of the traditional `<select>` tag, requiring adjustments to the tests to account for changes in how the user interface is rendered, particularly on smaller screens.
Original PR description
Following the current introduction of a new select component, we no longer rely on the native `<select>` tag, and instead invoke a popover that displays the select possible values. Since our new component relies on `<div>` and a popover which can be set as invisible if the browser window is too small, the tests needed to be adapted so that the dom helpers (that are sensitive to a node visibility by default) can still work. runbot error - 238438
This update fixes an issue where Swiss payslips were generated with the generic name "new Payslip" instead of the correct name including the employee's details. The fix ensures that payslips now display the employee's name and pay period, improving clarity and accuracy for payroll reports. This resolves a minor user experience problem.
Original PR description
_ ## Short functional explanation of the error When generating a payslip from a payrun for an employee on the swiss localization, the name of the PDF payslip is simply "new payslip" instead of…
_ ## Short functional explanation of the error When generating a payslip from a payrun for an employee on the swiss localization, the name of the PDF payslip is simply "new payslip" instead of "Salary Slip - <name of employee> - <time period of the slip>" ## Reproduction Steps 1. Install the app l10n_ch_hr_payroll. 2. Make sure you use a Swiss company. 3. Go to Payroll and click on the Payslips tab > payslips. 4. Click on Pay Run. Select Switzerland: ELM salaries and click Continue. 5. Select an employee for which you'd like to generate the payslip. 6. Click on the employee row in the list view. 7. Click Compute sheet > Print. ## Expected behavior A PDF with name "Salary Slip - <employee name> - <time period>" is generated. ## Unexpected Behavior A PDF with name "new Payslip" is generated. ## Origin of the issue When printing the slip with this flow, we don't call the method ```_compute_name()``` used to compute the name of the current slip. Therefore, it stays at 'New Slip', which is the default name. Henceforth, we have to call this method manually when printing the slip. _ opw-5253811 Forward-Port-Of: odoo/enterprise#103471
This update corrects a previous issue where the payslip report displayed the company's working schedule instead of the employee's. The report has been updated to accurately reflect the employee's individual working schedule, providing more accurate payroll information.
Original PR description
-The display for working schedule info in the payslip report was referring to the company's working schedule. -The report has been adjusted to include the employee's working schedule.
This update fixes an issue where credit notes didn't properly reverse commissions. The change ensures that a negative commission line is created for credit notes, accurately reflecting refunds and enabling correct commission calculations. This improves financial reporting accuracy.
Original PR description
**Steps to reproduce:** * Install the **Accounting** and **partner_commission** modules. * Create a contact and set a **commission plan (e.g. 50%)** in the *Partner Assignment* tab. * Create and…
**Steps to reproduce:** * Install the **Accounting** and **partner_commission** modules. * Create a contact and set a **commission plan (e.g. 50%)** in the *Partner Assignment* tab. * Create and confirm a customer invoice with multiple lines (e.g. 750, 750). * Then go to **Dashboard → Transactions**, create a new transaction (e.g. 750) and reconcile it with the created invoice. * Create a **credit note** from the invoice and confirm it. * Open the contact and access **Purchase Orders** from the stat button. **Observed behavior:** * Only the commission line from the original invoice appears in the partner purchase order. * No **negative commission line** is created for the credit note. **Cause:** * Credit notes reused the original commission linkage instead of generating a dedicated commission entry. * This prevented commission reversal from being recorded for refunds. **Fix:** * Generate a **separate commission line** with a negative amount for each credit note. * Assign a dedicated `commission_po_line_id` to credit notes. * Copy only the `referrer_id` to credit notes, not the original commission line reference. opw-5357773 Forward-Port-Of: odoo/enterprise#103328
A recent test failure related to restaurant appointment tours has been resolved. The fix ensures the test accurately simulates the Point of Sale system's time, preventing inconsistencies and improving the reliability of our automated testing process. This ensures that the tour behaves predictably during testing.
Original PR description
The `RestaurantAppointmentTour` was failing inconsistently because the browser used the real system clock during the initial Point of Sale load, while the test data was created for a specific mock date (Jan 28). Because the PoS logic filters appointments based on the current time, the test data was being misinterpreted or "normalized" by the application before the tour had a chance to freeze the clock. Moving `Chrome.freezeDateTime` to the absolute first step of the tour ensures the simulated time is applied as early as possible, making the test deterministic. runbot-232601 Forward-Port-Of: odoo/enterprise#106024
This update enhances the performance of account reporting by optimizing the way data is filtered within key tables. The changes address inefficiencies in the account reports module, leading to faster report generation and improved system responsiveness. This ensures smoother operations for financial reporting.
Original PR description
In addition to: - [x] #104936 And other PRs in Odoo core: - [x] odoo/odoo#243833 - [x] odoo/odoo#243967 - [x] odoo/odoo#246440 Forward-Port-Of: odoo/enterprise#106080 Forward-Port-Of: odoo/enterprise#105960
This update resolves an issue preventing Odoo payments using Swedbank's Bankgiro accounts. Swedbank requires a specific 'RfdDocAmt' field in the payment XML, which was missing in Odoo's generated batches. Adding this field ensures successful payment processing and avoids rejection by the bank.
Original PR description
**PROBLEM** Swedbank requires the RfdDocAmt Element for Bankgiro account. [documentation](https://internetbank.swedbank.se/ConditionsEarchive/download?bankid=1111&id=WEBDOC-PRODE211415244). Payment batches generated by Odoo don't contains this fields, meaning they are refused by the bank. **REPRO STEPS** We can't reproduce the error the client have because it would require a valid bankgiro account. To generate the payment batch xml you have to: 1. Install l10n_se. 2. Create a vendor bank account of type bankgiro. 3. Create a vendor payment with this vendor bank account. 4. Create a batch payment and validate it. 5. There should be a xml in the chatter, you can look at it to see there is no RfdDocAmt element. opw-5427505 Forward-Port-Of: odoo/enterprise#104777
This update fixes a potential error in the achievement reports that could cause issues when dealing with large order IDs. By using a bitwise operation instead of multiplication, the system now correctly handles IDs, preventing errors and ensuring accurate report generation. This improves the stability and reliability of the sales commission reporting.
Original PR description
Before this commit, we had issues on odoo.com when the ids of the account move, account move line, sale order or sle order line were too high. We would end up with ids bigger than BIGINT limit. This commit ensure it does not happen anymore by using bitwise operation on ids istead of multiplying the values. task-5423978 Forward-Port-Of: odoo/enterprise#105643 Forward-Port-Of: odoo/enterprise#103264
This update resolves an issue where confirming one upsell within a subscription didn't properly cancel the remaining alternative quotations. Now, confirming any upsell automatically cancels all related upsells, ensuring accurate subscription management and preventing unnecessary charges.
Original PR description
Currently, when creating multiple upsells for a specific subscription, confirming one of them leaves the others in the sent state instead of cancelling them. This fix ensures that all other upsells for the same subscription are cancelled once one upsell is confirmed. task-5270139 Forward-Port-Of: odoo/enterprise#105694 Forward-Port-Of: odoo/enterprise#100058
This update resolves an issue that prevented the subscription preview from displaying correctly when using sections and subsections. The fix ensures that all related invoice lines are properly processed, preventing a technical error that caused the preview to fail. This improves the user experience for subscription management.
Original PR description
Steps to reproduce: ------------------- 1. Install sale_subscription with demo data. 2. Create a new subscription and add a Section and a Subsection. 3. Add a recurring product (Invoice_policy =…
Steps to reproduce:
-------------------
1. Install sale_subscription with demo data.
2. Create a new subscription and add a Section and a Subsection.
3. Add a recurring product (Invoice_policy = 'order') and configure a recurring plan.
4. Confirm the subscription and click Preview.
Issue:
------
```python
Traceback (most recent call last):
The error occurred while rendering the template sale_subscription.subscription_portal_content and evaluating the following expression: <t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>
Error while rendering the template:
AttributeError: 'NoneType' object has no attribute 'collapse_prices'
Template: sale_subscription.subscription_portal_content
Reference: 1713
Path: /t/div[4]/section[1]/div[1]/table/tbody/t[4]/t[11]/t[3]
Element: <t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>
From: (1712, '/t/t', '<t t-call="portal.portal_layout"/>')
(1712, '/t/t/body/div[1]/div/div[2]/div[11]/div/t', '<t t-call="#{sale_order._get_name_portal_content_view()}"/>')
(1713, '/t/div[4]/section[1]/div[1]/table/tbody/t[4]/t[11]/t[3]', '<t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>')
```
Cause:
------
`_get_invoiceable_lines` does not treat subsection lines as children of their parent section.
As a result, `lines_to_report` contains a subsection without its corresponding section,
leaving current_section set to None and causing the traceback when accessing current_section.collapse_prices.
Solution:
---------
Ensure subsection lines are appended together with their parent section
when an invoiceable line is encountered
Related community PR: https://github.com/odoo/odoo/pull/241634
opw-5367739
Forward-Port-Of: odoo/enterprise#103686This update resolves a minor issue with the barcode app's tours related to scrap adjustments. The problem stemmed from a Chrome browser incompatibility with number input fields, leading to incorrect quantity updates. This fix ensures accurate scrap quantity entries, improving data consistency.
Original PR description
This commit fixes tours related to scrap refactor (odoo/odoo#210299) that included setting the quantity field in the scrap form in the barcode app. The issue was caused by <input type="number"> not supporting text selection in Chrome, which made the tour's edit() helper append instead of replace the value (e.g., "0.00" + "15" = "0.0015"). Fixed by using direct DOM value assignment, matching the existing workaround pattern for number inputs. Build Errors: https://runbot.odoo.com/odoo/runbot.build.error/238376 https://runbot.odoo.com/odoo/runbot.build.error/238374 https://runbot.odoo.com/odoo/runbot.build.error/238375
This update removes a redundant 'Follow-Up Report' line from PDF reports sent to customers. This line previously displayed the partner's total balance, which was confusing. Removing it simplifies the report and improves clarity for customers without impacting the report's core information.
Original PR description
When generating the followup report, compute and display the total in a single foreign currency if all invoices shown in the report share that same foreign currency. The total is suppressed (not displayed) if there is at least one invoice in a different currency (mixed currency scenario). task-4554514 --- When sending follow-up reports via the "Send" feature or payment reminders, the printed PDF includes a "Follow-Up Report" line. In this specific context, this line always equals the partner's total balance. This line is redundant and can be confusing for customers. Removing it clarifies the report without losing any necessary information.
This update resolves a test failure related to date restrictions in the dividend fiscal year selection field. The fix ensures the test environment uses the correct 'frozen' dates, preventing errors. While a long-running server scenario is theoretical, this change improves test reliability.
Original PR description
The selection field of the dividend_fiscal_year has a restricted range based on dates, which has implication for the frozen dates in the test. That is why the test will fail today: 2021 is not anymore in the selection. But, suppose however that you have a server running for 3 years, it could be problematic as well. (quite theoretical however) So we can simply make the selection field selection in the wizard a lambda method and that way also in the test, it will take the 'frozen selection'. build error 237681 https://runbot.odoo.com/odoo/runbot.build.error/237681 Forward-Port-Of: odoo/enterprise#106132
This update corrects a bug that prevented the system from correctly creating vendor partners when processing vendor bills in Uruguay. The issue stemmed from an incorrect state search when the 'Departamento' tag was missing from the XML data. This ensures accurate vendor partner creation and avoids disruptions in financial processes.
Original PR description
If the xml file has a tag "Departamento" without a value, the vendor partner creation fails because the state is searched with an empty string and detects a state that is not correct because the xml has no state value. Task Adhoc side: 109004 Forward-Port-Of: odoo/enterprise#105801
This update optimizes the project timesheet report to address performance issues caused by a previous change. By using a more efficient query structure with a CROSS LATERAL JOIN, the report now loads much faster, especially with large datasets. This improves the user experience and ensures the report remains responsive.
Original PR description
After this commit https://github.com/odoo-dev/enterprise/commit/6c33bde74342b634d9f6fbda4ef407ffe9bac54f we introduced a new left join which seems that it slowed down the query a lot. So the report…
After this commit https://github.com/odoo-dev/enterprise/commit/6c33bde74342b634d9f6fbda4ef407ffe9bac54f we introduced a new left join which seems that it slowed down the query a lot. So the report doesn't load at all if we have a lot of records. In this PR we are introducing CROSS LATERAL JOIN as we want to generate only the the relevant dates not all dates between the min starting date and max ending date of all slots. Query plan after modification https://explain.dalibo.com/plan/eh5293ba2354f43c The testing cardinality of the tables: `planning.slot` 7178 rows `hr.employee` 332 rows `resource.resource` 332 rows `resource_calendar_leaves` 4061 rows `account_analytic_line` 267376 rows `generate_series()` will produce 206417 rows | Before | After | |-----------------------------------------|-------| | Query keep being active with no results | ~2s | opw-5089052 Forward-Port-Of: odoo/enterprise#105696 Forward-Port-Of: odoo/enterprise#102283
This update fixes an issue where the 'Next Booking Start' field for rooms was incorrectly empty when bookings existed. The change removes a filter that excluded occupied rooms from availability calculations, ensuring the field accurately reflects upcoming booking times. This improves the user experience when viewing room availability.
Original PR description
Steps to reproduce:
1. Install `room`
2. Create a room.
3. Create a booking for the current time (so the room becomes occupied).
4. Create another booking for tomorrow.
5. Open the list view of rooms.
Current Behavior:
- The `Next Booking Start` field is empty for the created room, despite Having future bookings.
Cause:
- The method `_compute_next_booking_start` filters the rooms using `self.filtered('is_available')`. Since the room is currently occupied (due to the active booking), the room is excluded from the query entirely.
Solution:
- Remove the `is_available` filter from the search domain. The next booking start time is now calculated for all rooms, regardless of whether they are currently available or occupied.
opw-5360101
Forward-Port-Of: odoo/enterprise#102129This update resolves a technical issue preventing the demo data for the Switzerland - HR Payroll module from functioning correctly. A recent change removed a related database model, causing errors. The fix removes outdated references to this model within the demo data, ensuring the demo environment operates as intended.
Original PR description
**Steps to reproduce:** - Install the "Switzerland - HR Payroll" module with demo data. - You get a traceback **Issue:** A recently [merged PR](https://github.com/odoo/enterprise/pull/99418) removed `res.bank` model leaving demo data with references to this model invalid. **Solution:** Remove references to `res.bank` in demo data. Task: 5905983
This update fixes a bug that occurred when users copied and then undid copying planning slots. The issue was triggered when a previously deleted slot was involved in the undo process, resulting in an error. Now, the system verifies that records exist before attempting to delete them, ensuring a smoother user experience.
Original PR description
### Steps to reproduce: - Install Planning - Navigate to the gantt view for planning slots - Copy previous week's slots - Delete one of the newly copied records - Undo the copying action - Notice an Error is raised that a record doesn't exist ### Cause: When undoing the copy process we unlink all the newly created records but if the user has already deleted one of them it will trigger an error that this record doesn't exist and it has already been deleted ### Fix: We check the existence of the records before deleting them. opw-5490327 Forward-Port-Of: odoo/enterprise#105530
This update fixes a translation issue where warnings on payslips didn't correctly display translated field names in French (CH). The change ensures that all missing information fields on payslips are accurately translated, improving the user experience for French-speaking Swiss users. This resolves a reported bug impacting data clarity.
Original PR description
The warnings that appear on a payslip when the employee's form misses information are not fully translated Steps to reproduce: 1. Install module l10n_ch_hr_payroll 2. Switch to "My Swiss Company" and change language to French (CH) 3. Open app "Paie" and create a new employee (only add a name) 4. Click on "Contrats" in the stat button and create a new contract for the employee (only add a name), save it and set it as "En cours" in the status bar 5. Go to "Fiches de paie" > "Toutes les fiches de paie" and create a new payslip 6. Add the newly created employee to the payslip 7. The warnings in the form displaying the missing fields from the employee form do not translate the name of the missing fields Solution: Use `get_description` to get the translated name of the missing fields opw-5403634 Forward-Port-Of: odoo/enterprise#106188 Forward-Port-Of: odoo/enterprise#104499
This update resolves an issue where sending a voice message without text would trigger a WhatsApp API error. The fix ensures the system correctly handles empty HTML composer content, preventing the creation of unnecessary text messages and allowing voice messages to be sent successfully. This improves the reliability of the WhatsApp integration.
Original PR description
Sending a voice message without any text can trigger a WhatsApp API error because the empty HTML body is incorrectly treated as a valid text message. ### Reproduction Steps 1. Open the Discuss app.…
Sending a voice message without any text can trigger a WhatsApp API error because the empty HTML body is incorrectly treated as a valid text message. ### Reproduction Steps 1. Open the Discuss app. 2. Select a WhatsApp channel. 3. Record and send a voice message without typing any text in the composer. 4. Observe the message status. Result: The status changes from "Sent" to "Failed" with the error `(#100) The parameter text['body'] is required`. ### Cause The WhatsApp API does not support captions for audio files. Messages containing both audio and text are split into two separate WhatsApp messages: one for the audio file and one for the text body. Whether the text message is created depends on whether the message body is considered non-empty. Since commit odoo/odoo@f4dcc83adf552466ba7b05f09a4c651fe69f18ff , the composer’s default content is an empty HTML element. Although visually empty, this HTML is still a non-empty string at the data level. As a result, the system incorrectly determines that a text message is required and creates a secondary `whatsapp.message` record. When processed, the empty HTML is converted to a plain text string (`""`). Sending this as a text message fails validation because WhatsApp requires a non-empty body for text messages. ### Fix 1. Update `DiscussChannel.message_post()` to use `tools.is_html_empty(body)` to detect semantically empty HTML. This prevents creating a separate text message for audio attachments when the composer content is effectively empty. 2. Update `WhatsappMessage._send_message()` to check the truthiness of the converted plaintext `body` rather than the raw HTML field before adding a caption. This prevents sending an empty `caption` parameter for attachments when the body is empty. opw-5266805 Forward-Port-Of: odoo/enterprise#103213
This update resolves an issue preventing users from seeing the 'compare' button when browsing rental options. The fix ensures the button is consistently available during the rental selection process, improving usability. It also adds a stability measure to prevent errors when adding products.
Original PR description
This commit fixes the issue where the "compare" button wasn't visible in the view. Now, the compare button is accessible within the process. Additionally, it addresses the indeterminacy by adding a step where the comparison bar is explicitly waited for before adding a product. runbot-error-id~231524 Forward-Port-Of: odoo/enterprise#106182
This update corrects a bug that caused multiple overtime lines to be incorrectly combined, leading to inaccurate time tracking. The fix ensures that each overtime line is allocated separately, accurately reflecting employee overtime hours. This improves the reliability of overtime reporting.
Original PR description
To reproduce: ============= 1. Create an new Overtime Ruleset using these options: - The rule is based on: Timing - With tolerance in favor of the employer of: 00:00 - If the employer works: Outside…
To reproduce: ============= 1. Create an new Overtime Ruleset using these options: - The rule is based on: Timing - With tolerance in favor of the employer of: 00:00 - If the employer works: Outside of a specific schedule - Schedule: 40/hour work week - Pay extra hours: with rate of 100% - Work entry type to use: Overtime Hours - Give back as time off 2. Create an employee or edit an existing employee to use the overtime ruleset in the settings of the form view of the employee. 3. Navigate to attendance and create a new entry for that employee. 4. Make clock in time and clock out time run through a Friday. For example: Clock in: 12/22/2025 12:00:00 AM Clock out: 12/26/2025 6:30:00 AM 5. Then edit the entry to run through the Saturday or Sunday. For example: Clock out: 12/27/2025 6:30:00 AM 6. Navigate to Work Entries and navigate to the month or week that that entry was made at. 7. There should be a traceback error for more than one overtime line related to that specific entry. Problem: ======== When allocating multiple overtime lines to consecutive time periods, the `_set_real_overtime_intervals` method was merging them into single intervals with recordsets of overtime lines (e.g., hr.attendance.overtime.line(102, 106, 103, 104)) instead of keeping each overtime line in its own separate interval. This happened because the allocation logic incorrectly calculated the position within intervals and subtracted the wrong duration from remaining overtime, causing the `|=` merge operator to combine adjacent allocations into recordsets. Solution: ========= Refactored the overtime allocation loop to maintain singletons opw-[5468598](https://www.odoo.com/web#id=5468598&view_type=form&model=project.task) Forward-Port-Of: odoo/enterprise#105555
This update corrects the Odoo Enterprise system to reflect recent changes on the Swiss Federal Tax Administration website. The import of tax rates for payroll has been adjusted to use the new URLs, ensuring accurate calculations and continued functionality of the single-canton import feature.
Original PR description
Due to recent updates on the Federal Tax Administration website, the single-canton import feature was made temporarly unavailable, this PR adjusts the new URLs for downloading the tax rates Forward-Port-Of: odoo/enterprise#106288
This update simplifies the subscription plan view by removing irrelevant order line details like sections and discounts. Previously, the view was cluttered with unnecessary information. Now, it only displays the actual products included in the subscription, making it easier to configure and understand.
Original PR description
The subscription plan view was displaying all order line types, including sections, notes, and discount lines, which added unnecessary clutter. This update filters the order lines to display only actual subscription products, improving clarity and usability in the plan configuration. task-5404614 Forward-Port-Of: odoo/enterprise#106076 Forward-Port-Of: odoo/enterprise#101796
A recent issue with the sign tour process was resolved, preventing it from failing due to a selector timeout. This update ensures the sign tour now correctly opens documents in the signing view, restoring successful test results and improving the overall sign experience.
Original PR description
The sign_tour was failing because the `.o_sign_sign_directly` button was not found in the document view, causing the tour step to timeout and breaking both sign UI tests. This was due to the tour not properly opening the document in the signing view. The tour now relies on a stable selector, restoring successful execution of `test_sign_tour` and `test_sign_tour_without_sign`. Runbot issue: https://runbot.odoo.com/odoo/runbot.build.error/234923 Forward-Port-Of: odoo/enterprise#105844
This update corrects a minor error in the invoice XML format used by the Ecuadorian accounting module. The fix removes an extra closing tag, ensuring the system generates invoices correctly and avoids potential processing issues. This improves the reliability of financial reporting.
Original PR description
Currently, the `account_move_form_invoice_and_withhold_view` contains an invalid closing group tag (`</group>>`) introduced by PR [1], at [2]. The extra `>` results in malformed XML. This commit removes the stray character and restores a properly closed `</group>` tag. [1]: https://github.com/odoo/enterprise/pull/77592 [2]: https://github.com/odoo/enterprise/blob/7c574d758ff5b1404b808cc647d4a2ae40f5f0c0/l10n_ec_edi/views/account_move_views.xml#L79 **No task Id** Forward-Port-Of: odoo/enterprise#106104
This update resolves an issue where outdated account synchronization records could cause problems, preventing new connections. By focusing on fresh, uninitialized links, the system is now more reliable and stable for account online synchronization. This ensures a smoother experience for users.
Original PR description
Prevent reusing stale account.online.link records that have a provider_type set, which can leave an unusable row and block new connections. By adjusting the search domain in action_new_synchronization, we only reuse clean, uninitialized links. opw-5868438 opw-5867799 Forward-Port-Of: odoo/enterprise#106259 Forward-Port-Of: odoo/enterprise#105187
This update resolves a test failure within the Enterprise module related to how exported models are configured. The change prevents unintended behavior during installation that was causing a test to fail. This ensures the full Enterprise test suite runs correctly and reliably.
Original PR description
Updating the fieldsets of `DEFAULT_FIELDS_TO_EXECUTE` in place changes the behaviour of `test_23_export_hardcoded_models_and_fields` if that test runs after `_compute_excluded_fields` has been executed for one reason or an other, which apparently does not occur during post_install but *does* occur during at_install, and so fails in the "full" enterprise test running everything in a single job. https://runbot.odoo.com/odoo/error/238451 https://runbot.odoo.com/odoo/error/238449 https://runbot.odoo.com/odoo/error/238497 Forward-Port-Of: odoo/enterprise#106110
This update ensures the accounting dashboard data is compatible with the latest Odoo 18.5 version. The change addresses a technical issue where data formats were being incorrectly upgraded, and while partially resolved, requires further refinement for full functionality with all filter options.
Original PR description
This commit upgrades the data for the accounting dashboard from the 18.4.x file format to 18.5.x The goal is to avoid having `ODOO.FILTER.VALUE` being upgraded to `ODOO.FILTER.VALUE.V18` because the dashboard was already adapted to work[*] with the new formula see 682d6ec1ddb825674999e0db1fc0cc48c3be67c5 *: it only half-works. It only works for simple values of filters (years, quarter, months), but it doesn't work properly with others (Last 7 days, etc.) Forward-Port-Of: odoo/enterprise#106269
This update corrects an issue where demo bank data was no longer accurate after a recent change to the `res.bank` model. The team has adjusted the demo data to align with the current system, ensuring accurate reporting and demonstration functionality for the l10n_ch_hr_payroll module. This ensures a smooth experience for users.
Original PR description
after this the following commit 712b7bf `res.bank` model was removed, accordingly demo data needs to be adapted in master. task-5907863
This update removes obsolete comments left over from a previous development exploration. These comments were a minor distraction and have now been cleaned up as part of a routine maintenance task. This ensures the codebase remains clear and focused on current functionality.
Original PR description
During the development of #102625, the idea of splitting the conversion date from the order date was explored. However, it was quickly dismissed, and some outdated comments slipped through. Forward-Port-Of: odoo/enterprise#106301
Features or functions removed from Odoo
This update removes the `device_controller` class, which was no longer needed. The team now directly utilizes the `iot_http` service, streamlining the integration. This change improves code efficiency and simplifies maintenance.
Original PR description
We remove the the `device_controller` class, now unused as we use the `iot_http` service directly. This commit removes the last usage of it in `iot_device_hook` and the last usage of `iot_device_hook` in `delivery_iot`. see odoo/upgrade#9383 task: 5885929
Code cleanup and technical improvements
This update enhances our stock testing process by introducing a dedicated company within the tests. This ensures more consistent and reliable test results, ultimately improving the stability and accuracy of the Odoo Enterprise stock module.