Daily updates from Odoo
Wednesday, December 3, 2025
56 changes · 19.0
Enhancements to existing features
This update ensures that invoices for B2G transactions in Germany comply with local regulations. It adds a mandatory 'Leitweg-ID' to the UBL invoice format, correctly directing invoices to the appropriate government entity. This improves compliance and accuracy for German accounting processes.
Original PR description
*= l10n_account_edi_ubl_cii_tests For B2G transactions in Germany, the Leitweg-ID is a mandatory routing identifier to direct the invoice to the correct public entity. Adding this Leitweg-ID for the UBL syntax. task-5194484 Description of the issue/feature this PR addresses: For electronic invoicing in Germany, for B2G transactions, the Leitweg-ID is a mandatory routing identifier to direct the invoice to the correct public entity. We want to add this identifier for the XRechnung format. Current behavior before PR: The Leitweg-ID is not present in the UBL xml format. Desired behavior after PR is merged: The Leitweg-ID is added in the header of the invoice in the cbc:BuyerReference tag. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238255 Forward-Port-Of: odoo/odoo#236333
This update replaces the specific "Uruware" name in the Odoo settings with a generic "UCFE Provider" label for the electronic invoicing provider. This ensures customers contact Odoo support for assistance and maintains a consistent configuration for Uruguayan users. The core functionality remains unchanged.
Original PR description
Before: -In the Settings > Uruguay Localization section, electronic invoicing provider was shown as "Uruware". -This could lead customers to contact Uruware directly instead of Odoo support. After: -Replaced all mentions of `Uruware` with generic name, `UCFE Provider`. -Updated labels and descriptions in both testing and production sections. -The overall configuration and functionality remain unchanged. Impact: -Removes direct provider references from the interface. -Ensures customers contact Odoo support for any assistance. -Keeps the configuration clear and consistent for Uruguayan users. task-5244539 Forward-Port-Of: odoo/enterprise#101053 Forward-Port-Of: odoo/enterprise#99065
This update enhances the Odoo call menu by adding mute and deafen controls, improving the user experience for calls. The visual design of the call menu has also been updated for a cleaner and more modern look. This change provides a more intuitive and effective way to manage calls within Odoo.
Original PR description
Currently, there is no way that we can deafen or mute in call menu directly. This commit adds mute and deafen button in call menu for better user experience. Also, adjust the call menu UI for better visual effect. task-5262772 before: <img width="260" height="51" alt="image" src="https://github.com/user-attachments/assets/206b3b3d-cafa-492f-95ed-db8075f16298" /> after:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the user experience by providing clearer placeholders for Peppol identifiers and automatically verifying this information when key partner data changes. A new feature has been added specifically for Belgium, leveraging the VAT number to automatically populate the Peppol identifier through the company registry endpoint, streamlining data entry and validation.
Original PR description
This commit improves the UX by displaying more intuitive placeholders for the peppol identifier. The peppol information is also automatically verified when important data changes. It also adds a special case for Belgium in which we try to use the vat number as the peppol identifier with the company registry endpoint. task: 5172378 Forward-Port-Of: odoo/odoo#238251 Forward-Port-Of: odoo/odoo#233160
This update enhances Odoo's email testing process. Previously, developers could only inspect emails through a mock system. Now, the system retains the actual email output, allowing for more comprehensive and accurate testing of email functionality. This improves the reliability of email-related features.
Original PR description
When using MockEmail, you can inspect sent emails through self.mails. However, in some cases we need to test the actual email output instead of only the provided values.
Resolved issues and error corrections
This update resolves an issue where the partner filter in the Partner Ledger report incorrectly removed reconciliation entries. The fix ensures that both invoices and related operations (like misc operations) are visible when using the filter, providing a more complete view of partner transactions. This improves reporting accuracy and usability.
Original PR description
To reproduce: - create an invoice for partner Bernard Gagnant (very important) - reconcile that invoice with a misc operation ; make sure not to set any partner on the receivable line of that entry - Open the Partner Ledger: both the invoice and misc operation appear under "Bernard Gagnant". This is due to a hack in that report and is the intended behavior - Use the partner filter, on top of the report, to only display partner "Bernard Gagnant" ====> The misc operation does not appear anymore. After this fix, if the filter is applied, we will be able to see both the invoice and the misc operation under the partner. task-5150419
This update resolves an issue where duplicate account IDs were causing data overwrites. The changes now correctly segregate accounts for CPF, SHG, and SDL tax calculations according to Singapore's latest tax regulations. The fix also simplifies account code formatting to prevent excessively long account numbers.
Original PR description
Two accounts were using the same XML ID `account_account_864`, causing second definition to overwrite the first. This commit resolves the duplication and updates/segregates accounts for CPF and SHG according to new specifications.
Changes:
- Update `account_account_864` (Employee Expense) to `account_account_866`.
- Update in accounts:
* 862 → CPF Withheld (Employee)
* 863 → CPF Accrued (Employer)
* 864 → SHG Withheld (Employee)
* Add new 865 → SDL Accrued (Employer)
* 859 → CPF Employer Expense
* 860 → SDL Employer Expense
* Removed 861
- Fix `transfer_account_code_prefix` in the template:
* Change from `101100` to `10110` to avoid generating 7-digit account codes.
task-5360160
Forward-Port-Of: odoo/odoo#238264
Forward-Port-Of: odoo/odoo#237506A minor typo in the SEPA Direct Debit payment provider configuration message has been corrected. This ensures consistent and accurate communication with the payment provider, improving data integrity. The change updates a grammatical error regarding the use of 'an' versus 'a'.
Original PR description
Currently, a typo appears in the `Pending Message` shown in the SEPA Direct Debit payment provider configuration. **Steps to reproduce:** - Install the `payment_sepa_direct_debit` module. - Navigate…
Currently, a typo appears in the `Pending Message` shown in the SEPA Direct Debit payment provider configuration. **Steps to reproduce:** - Install the `payment_sepa_direct_debit` module. - Navigate to Invoicing > Configuration > Payment Providers > SEPA Direct Debit. - Open the `Messages` tab and observe the `Pending Message`. **Observation:** The message uses "an unique" instead of the grammatically correct "a unique". **Fix:** This commit corrects the message by replacing "an" with "a" at [1]. Before: <img width="1903" height="606" alt="typo_before" src="https://github.com/user-attachments/assets/df4f658b-9f4c-4e68-b8cb-a1bdc2253fc3" /> After: <img width="1900" height="609" alt="typo_after" src="https://github.com/user-attachments/assets/e9192d70-b343-4e4e-9e21-281a93d4d71e" /> [1]: https://github.com/odoo/enterprise/blob/6c3692d85bf1ef7b14d930d9a1ed244cf8aa851b/payment_sepa_direct_debit/data/payment_provider_data.xml#L13 opw-5373274 Forward-Port-Of: odoo/enterprise#100983
This update enhances the reliability of our point-of-sale (POS) certification process by automatically retrying failed payments due to server unavailability. Specifically, it addresses errors from the FISKAL system (TSS) and ensures tills remain operational even when the system is temporarily unreachable, improving transaction success rates.
Original PR description
In this task: --------------- - Moved the status code handling logic at proper place for all transactions API responses. - Removed the mixed usage of async/await and .then() by async/await totally in all transaction calls to simplify flow and improve readability. - For 5xx errors (e.g., 503), retry once as they occur when the server is unreachable. Print "TSS not reachable" if even after retries followed by exponential backoff logic. - Guarantee tills remain operational and not blocked even if the TSS is unreachable. task:5051693 Forward-Port-Of: odoo/enterprise#100911 Forward-Port-Of: odoo/enterprise#93694
This update fixes an issue where Odoo incorrectly processed attachment file types, leading to potential errors. The changes ensure attachments are handled correctly, particularly with binary files, and streamline the attachment creation process for better efficiency.
This update resolves an issue where unnecessary data was being passed to the AI agent's data processing. The system now correctly handles data encoding and checksum calculations, ensuring more reliable AI agent functionality. This change improves the stability and performance of the AI features.
Original PR description
The cron is encoding the `content` to compute its checksum already. Also don't set `index_content`, as far as I can tell it's unconditionally computed by `ir.attachment` on both create and write (via `_set_attachment_data` in the latter case).
This update fixes an issue where Argentinian invoices weren't correctly displaying taxes in the company's local currency, even when the setting was enabled. The previous code was unintentionally removing the tax section. This change ensures invoices accurately reflect tax amounts in the appropriate currency, improving financial reporting for Argentinian businesses.
Original PR description
**Steps to reproduce:** - Install l10n_ar - Switch to a Argentinian company (e.g. (AR) Responsable Inscripto) - In Accounting settings, enable "Taxes in company currency" option - Activate another currency (e.g. USD) - Create an invoice in USD - Confirm the invoice - Print the invoice **Issue:** The section showing the taxes in the company currency doesn't appear on the invoice despite the enabled option. Cause: An override of "report_invoice_document" from l10n_are is removing the section no matter what the configuration. **Solution:** Do not remove the section. It was done originally in 17.0 where "Taxes in company currency" option didn't exist. opw-5351010 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238204
This update resolves an issue preventing portal users (subcontractors) from accessing picking details within subcontracted manufacturing orders. The fix uses `sudo()` to grant necessary read access to the required models, ensuring a smooth user experience. This improves the functionality for portal users managing subcontracted inventory.
Original PR description
Issue Before This Commit: ======================= When a subcontractor (portal user) tries to open a picking from the Manufacturing orders section in the portal view, the page appears blank with no…
Issue Before This Commit: ======================= When a subcontractor (portal user) tries to open a picking from the Manufacturing orders section in the portal view, the page appears blank with no data loaded on the frontend, while in the the backend logs show read Access Error is raised on the `product.supplierinfo` and on `product.template.attribute.value` models. Steps to Reproduce: ======================= -Install `MRP` and `Purchase` modules, and enable Subcontracting. -Create a product attribute with values and `variant creation` set to `Never`. -Create a product and Assign the created attribute to the product’s attributes. -Create a portal user and grant portal access. -Create a BOM for the product, set it for subcontracting, and assign the portal user as a subcontractor. -Create a Purchase Order for a subcontracted product linked to that vendor. -Log in to the portal view as the portal user and open Manufacturing Orders. -Try to open the related picking and the page fails to load and appears blank. Cause of the issue: ======================= In this [PR](https://github.com/odoo/odoo/pull/177390), The `_compute_description_picking` method was extended to include vendor product code and product name using the `selected_seller_id` field, and the product attribute values using the `product_no_variant_attribute_value_ids` field. Since `selected_seller_id` points to `product.supplierinfo` model and `product_no_variant_attribute_value_ids` points to `product.template.attribute.value` model, `group_portal` do not have read access to these models causing access errors when the picking description is computed, so the page appears blank while opening the picking. After This Commit: ======================= The `_compute_description_picking` method now uses `sudo()` to safely access `selected_seller_id` and `product_no_variant_attribute_value_ids` fields, allowing portal users to compute stock move descriptions without encountering access errors. This prevents the page from appearing blank when opening picking in the portal without granting direct model access. Task-4958070 Forward-Port-Of: odoo/odoo#225519
This update resolves an issue where clicking 'Details' on completed signed documents caused errors. The fix ensures the correct sign request record is retrieved, allowing users to now properly view and access the details of signed documents, improving workflow efficiency.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Open a template that has at least one completed signed request. - Click the Signed Document state button. - See all documents - Click on the detail button Before: - Clicking the Details button on a completed signed document caused a traceback. - This happened because the view was using the record ID from this.props.record.context, which referred to the sign template instead of the sign request, causing incorrect data to be fetched. After: - Use this.props.record.evalContext to retrieve the correct sign request record ID, with this.props.record.context as a fallback. Impact: - Users can now view signed document details without errors, improving workflow continuity and overall usability. task-5253632 Forward-Port-Of: odoo/enterprise#99221
This update fixes an error that prevented payroll officers from accessing salary offer details. The issue stemmed from the module attempting to access candidate records, which required recruitment rights. The fix ensures payroll officers can now open and manage offers without needing these additional permissions.
Original PR description
steps to reproduce: - Install l10n_be_hr_contract_salary - Log in as a payroll officer (without recruitment rights) - Go to Payroll > Contracts > Offers - Open any offer - Notice an 'Access Error' appears: You are not allowed to access 'Candidate' (hr.candidate) records. cause: The module tries to read `employee_id.candidate_id.partner_id` in offer computations. Since payroll officers lack recruitment rights accessing `hr.candidate` triggers an access error. fix: Wrap candidate access in try/except to handle missing permissions. - If accessible, candidate partner data is used as before. - If not accessible, skip without raising an error. This allows payroll officers to open and generate salary offers without requiring recruitment rights. task - 5039712 Forward-Port-Of: odoo/enterprise#100980 Forward-Port-Of: odoo/enterprise#95869
A technical error causing a traceback during salary package offer generation has been resolved. This issue occurred when a specific benefit type (Always Selected) was configured, leading to a data processing error. This update ensures the offer generation process functions correctly for all benefit configurations.
Original PR description
Steps to reproduce: 1. Install 'hr_contract_salary_payroll' 2. Create three benefits from Payroll > Configuration > Benefits - Basic: Salary Structure Type: US Employee Contract Related Field: Health…
Steps to reproduce:
1. Install 'hr_contract_salary_payroll'
2. Create three benefits from Payroll > Configuration > Benefits
- Basic:
Salary Structure Type: US Employee
Contract Related Field: Health Benefits Dental
Display Type: Slider (1500, 6000)
- Housing:
Salary Structure Type: US Employee
Contract Related Field: Health Benefits Vision
Display Type: Always Selected
- Transport:
Salary Structure Type: US Employee
Contract Related Field: Health Benefits Vision
Display Type: Manual
Mandatory Benefits: Basic, Housing
3. Go to Employees > Contracts
4. Create a new contract:
Set an employee
Salary Structure Type = US Employee
HR Responsible = Mitchell Admin
5. Click the Generate Offer smart button.
6. Open the link
7. Adjust the sliders
Issue: it gives a traceback
`TypeError: Cannot read properties of undefined (reading 'type')`
Cause:
https://github.com/odoo/enterprise/blob/cc3fe89528a143cff3ab03e1654755c34eaac112/hr_contract_salary/static/src/js/hr_contract_salary.js#L480-L482
In checkInputSelected, the target array is empty when an Always Selected benefit is present, causing an attempt to read target[0].type.
Solution:
Add a guard to check that target is not empty before accessing its elements.
opw-5058994
Forward-Port-Of: odoo/enterprise#94881This update removes a confusing step in the Finance actions process, streamlining how documents are created and linked. Previously, actions first moved documents to the Taxes folder before creating records, leading to unnecessary complexity. This change improves the user experience and clarifies the action workflow.
Original PR description
Issue: The embedded actions of the Finance folder are multi-step actions that first do a move to the Taxes folder, before creating relevant records linked to the action. The move to the Taxes folder is unnecessary and confusing. It adds to the confusion that when synchronisation is activated for a journal, the record will immediately be moved to the synced folder after triggering the action. The result is that the document ends up in the right place, but the action definition is confusing. When there is no synchronisation activated for a journal, the document will be moved to the Taxes folder. But this does not make any functional sense. Cause: Multi-action step moves it towards the Taxes folder before creating the relevant record. Solution: Remove the move step of the multi-action. In a later commit an IMP will be made to clean up the actions. Task-5380590
This update resolves a bug preventing the 'Reviewed' button from appearing correctly in certain accounting scenarios. Additionally, a security enhancement has been added to disable secondary buttons during statement reconciliation, improving data accuracy. This ensures the 'Reviewed' button is always visible when appropriate.
Original PR description
Before this commit, we called the wrong variable to know whether the "Reviewed" button is available or not. It leads to have a no show of this button even when it was needed. This commit also adds a small security check to remove the secondary buttons when the statement is reconciled. no task id
This update relaxes a constraint on stock pickings, enabling users to schedule pickings with dates that fall outside the company's fiscal year lock date. Previously, this restriction caused issues with certain pickings. This change improves flexibility without impacting core accounting functionality.
Original PR description
### Issue: The `_check_backdate_allowed` constraint on `scheduled_date` and `date_done` of pickings: https://github.com/odoo/odoo/blob/5375b865570efb714720096c34aeec2e833dd1f9/addons/stock_account/models/stock_picking.py#L13-L19 is suppose to check if these dates happen prior to the `fiscal_year` lock date and (of course) before the hard lock date. However, the `_get_lock_date_violations` set all its parameters to `True` by default: https://github.com/odoo/odoo/blob/5375b865570efb714720096c34aeec2e833dd1f9/addons/account/models/company.py#L664-L673 and only the fiscalyear variable is set in the constraint calls: https://github.com/odoo/odoo/blob/5375b865570efb714720096c34aeec2e833dd1f9/addons/stock_account/models/stock_picking.py#L27-L32 opw-5329858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where attendance was incorrectly flagged as overtime when employees worked on the same day as a company holiday. The change ensures that only holidays specific to the current company are considered when calculating overtime, preventing inaccurate calculations and improving payroll accuracy.
Original PR description
A bug was found that set attendances as overtime when done in the same day another company had a public holiday with no working schedule set. This fix adds the current company to the filter of _get_unusal_days to get only public holidays of the current company. task-5347555 ## To do - [x] Add tests
This update resolves an issue where printing receipts with reward lines and multiple order lines would cause the printer to block. The fix reorders the lines to correctly apply discounts, preventing the error related to the last line's discount amount. This ensures receipts print reliably with reward items.
Original PR description
This PR fixes the case of printer blocked using reward lines and multiple order lines. To reproduce the issue: - Add a product with reward (for example 10% reward on 50€ , that is 5€) - Add a second product without reward that costs less than 5€ - Print the receipt on fiscal printer The lines are orderer before the non reward lines, than reward lines. The printer is blocking because the adjustmentType discounts last line of less than 5€. It is wrong. Another way to reproduce the issue: - Add a product with reward - Add a second product with reward - The reward line with the sum of both rewards is created The same error appear because it discounts both lines. It is better to discount the entire department instead of the last sale Forward-Port-Of: odoo/enterprise#98699
This update fixes a minor visual issue in the event creation modal by increasing its width. Previously, a scrollbar would appear when focusing on the editable area. This change ensures a smoother user experience and prevents unnecessary scrollbars.
Original PR description
**Current behavior before PR:** - The new event modal was reduced in width, causing the placeholder to have insufficient space. When focusing the editable area, this resulted in an unnecessary scrollbar. **Desired behavior after PR is merged:** - The width of the event creation modal has been increased, preventing the scrollbar from appearing when the cursor is inside the editable area. task-5207448
This update enhances the HTML editor's powerbox functionality by adding the 'title' keyword. Now, users can easily create and display headings (H1-H3) within the powerbox using the '/title' command. This improves content formatting and organization.
Original PR description
#### Desired behavior after PR is merged: - `title` is added to the list of keywords in `powerbox_items`, allowing `/title` to display the `heading (H1–H3)` commands in the powerbox. task-5367576 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue preventing completion notifications in the MRP Work Order module from being translated into different languages. The previous code placement blocked the translation process. This ensures that users receive notifications in their preferred language, improving the overall user experience.
Original PR description
The `_t()` was put around the wrong thing, making the strings never translatable. Followup to: 4403621 Forward-Port-Of: odoo/enterprise#101119
This update fixes a bug that caused payment transactions to remain in an 'error' state after processing with Razorpay. The fix prevents the system from skipping necessary updates during error handling, ensuring transactions complete correctly. This improves payment processing reliability.
Original PR description
Steps: - Install razorpay provider. - Set up provider and try to make payment with UPI PM. - Cancel processing payment in Razorpay form while processing keep form open. - Now complete that same tx in same Razorpay form. Issue: - Transaction stays in `error` state. Cause: - _process method skips calling _apply_changes for `error` stage transactions even though it should allowed. Fix: - Improve condition to only skip `_apply_changes` only if `_validate_amount` fails. issued PR: https://github.com/odoo/odoo/pull/224627 Note: This is just temporary fix for the stable in master we will make `_validate_amount` method return boolean value depending on that we will decide whether to apply changes or not.
This update resolves an issue where PayPal payments were failing when required shipping address fields were left blank. The fix adds a default value to these fields, ensuring PayPal transactions can proceed smoothly. This improves the reliability of our payment processing.
Original PR description
Paypal was failing when the address fields were `False` **Solution:** Add a fallback to missing fields in the shipping address Fixes: https://github.com/odoo/odoo/issues/237360 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238340
This update fixes a bug where reverse charge tax amounts were incorrectly recorded as debits on invoices created with down payments from sales orders. The change ensures that reverse charge tax amounts are correctly reflected as credits, aligning with accounting regulations and improving invoice accuracy. This resolves an issue reported in opw-5172402.
Original PR description
When creating an invoice with down payment from a sales order, the reverse charge tax amount goes into the debit side. Make sure the reverse charge tax amount goes into the credit side. opw-5172402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237557
This update fixes a visual issue where buttons within the image field were not vertically centered. The change uses SCSS flexbox to reliably center the buttons, ensuring a consistent and professional appearance. This improvement simplifies maintenance and accommodates potential future customizations to the image field.
Original PR description
The buttons in image_field are not centered vertically. Since it's a custom sized button, using flex is reliable (it's now centered on both flex axis). Note: Done in SCSS instead of utilities because the flex is there to compensate the custom size set in SCSS (easier to maintain) + there could be injected buttons in the component. task-5258887 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235964
This update corrects a bug where pressing arrow keys while the table picker was open caused incorrect navigation within tables. Now, arrow keys only control the table picker itself, preventing unintended cell selection. This improves the user experience when working with tables in the Odoo interface.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: When the table picker was open inside a table, pressing the up/down arrow keys incorrectly moved the selection to the cell above or below. Desired behavior after PR is merged: While the table picker is open, arrow up/down no longer navigate between table cells. task-5349547 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236886
This update fixes a broken link on the Odoo.com website's support page. The previous link pointed to an incorrect email address, preventing users from easily contacting support. This change ensures users can now correctly access support resources, improving the overall user experience.
Original PR description
Changing wrong email into the support /help page. Task: odoo.com/odoo/project.task/5100049?menu_id=4720
This update refines the HTML editor toolbar to only appear when a user has clearly selected content. Previously, the toolbar would open even with minimal selections like line breaks. This change enhances the user experience by reducing unnecessary distractions and improving editor responsiveness.
Original PR description
Prevent the toolbar to open if the selection is not clearly visible to the user. for example, line break only selection. task-4945676 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the Odoo application remained listed after uninstalling on Windows. The fix ensures the uninstaller correctly removes registry keys, preventing persistent installations and improving the user experience. This improves the reliability of the uninstallation process.
Original PR description
Since d0d0fa2b8e the Windows installer only supports 64 bit version of the OS. It was recently noticed that when uninstalling the app with the provided uninstaller that the app remains listed in the installed software. Although the directories and third party apps were correctly cleaned and removed. The reason is that the Odoo app registry key is still present after the uninstall process. When a 32 bit process tries to write a registry key in `HKLM\SOFTWARE` it's redirected by the OS to `HKLM\SOFTWARE\WOW6432Node`. By using the `SetRegView 64` NSIS directive, the installer writes the registry key at the right place ... but the uninstaller is lacking that directive and thus tries to remove a non existing key in `HKLM\SOFTWARE\WOW6432Node`. With this commit, the uninstaller is fixed by using the directive too. Forward-Port-Of: odoo/odoo#238476
This update resolves an issue where negative commission targets couldn't be set in sales plans. Now, users can accurately reflect scenarios where commissions might be reduced or refunded, improving the accuracy of sales forecasting and reporting. This change ensures the system handles all commission scenarios correctly.
Original PR description
Before this commit, it was not possible to define negative completion target on the plan. task-5362854
This update ensures that the agent's transcription summaries are generated in the user's preferred language, improving the clarity and usability of the AI-powered features. The system now dynamically adjusts the language of the summary based on the selected language of the underlying transcription, providing a more natural and accurate experience.
Original PR description
This commit introduces a change that makes the agent produce a summary in the selected language from the transcription tab. It injects a specific prompt using the `currentLanguage` of the transcription the component. Instructing the LLM to generate in the proper language.
This update resolves an issue where users couldn't access subchannels within group chats without being explicitly invited. The fix automatically adds users to subchannels when they have write access to the parent group chat, improving usability and preventing access errors. This ensures all users can participate in relevant conversations.
Original PR description
Before this commit, typing in a subchannel of a group DM of which you are not member of would result in an access error. Steps to reproduce: 1. Log in as user A 2. Create group chat with user B 3. Create a subchannel in said group 4. Log in as user B 5. Open the subchannel in the group chat 6. Write in the composer -> access error This is caused by incomplete access rules for the `discuss.channel.member` model. Specifically the issue stems from the fact that a subchannel of a group channel is considered a group, and as such it's only possible to join it via invitation. Since typing in a channel attempts to join it, an access error is raised. This commit fixes the issue by executing the creation of a channel member for subchannels as superuser, on the condition of having write access to the parent channel. task-5357621 Forward-Port-Of: odoo/odoo#237611
This update fixes an issue where the leave icon was hidden behind the work location icon when an employee was on leave. The change ensures the leave icon is always displayed prominently in the presence widget, providing clearer visibility for employees. A temporary workaround was implemented to resolve the module priority conflict.
Original PR description
Issue is that when a person is in leave and has a work location set, the work location icon in the presence widget takes presedence before the leave icon. The widget uses a get icon() function to return which icon to display. This function is then patched to add new icons. The plane icon for time off is in the hr_holidays module while the house and building icons in the hr_homeworking module. The issue is that hr_homeworking overrides the patch from hr_holidays giving it more priority. The fix is a "revert" where if the presence value is holiday the work location will not be set, making the label and icon not be set. task-5223178 Forward-Port-Of: odoo/odoo#234166
This update restores the automatic copying of followers from parent sales orders to renewal and upsell orders within subscriptions. Previously, this feature was removed for all order types. This change ensures that sales teams can easily maintain consistent customer relationships when managing subscription renewals and upgrades, improving sales efficiency.
Original PR description
[FIX] sale-subscription: Restore automatic follower copying from parent SO In Odoo 18.2 (Task 4655022), automatic follower addition was removed for all users and limited to internal users. However, for subscriptions, it is logical to automatically copy followers from the parent sale order to renewal and upsell orders. This commit restores that behavior for subscription renewals and upsells while keeping the restriction for other record types. task - 5002181 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
This update allows users to modify the subject line of sign requests before they are sent. Previously, the subject was fixed, which could lead to confusion and errors. This change improves the user experience and ensures sign requests are clearly communicated.
Original PR description
Previously, users could not modify the subject of a sign request. This PR enables the subject to be edited before the request is sent. task-5348690
This update resolves a crash that occurred when submitting account returns in older Spanish localization databases. The fix ensures the system handles databases without the latest module installation, preventing the application from failing. This improves stability and reliability for users in Spain.
Original PR description
For databases created with spanish localization before the `l10n_es_reports_2025` was backported in stable (see odoo/enterprise#90615), updating the code won't auto install the `l10n_es_reports_2025` module but make every submit of account.return crash with: `AttributeError: 'account.return' object has no attribute '_l10n_es_get_report_modelo_number'` This commit ensure we handle that case without crashing.
This update resolves an issue where Sale Orders with lot-tracked products were incorrectly duplicated when imported into POS. The fix prevents unnecessary line splits during import, ensuring accurate order processing and avoiding data inconsistencies. This improves the reliability of the POS system when handling lot-based inventory.
Original PR description
## Issue: After confirming a Sale Order for a lot-tracked product (in grams for example) and having available quantities, importing the SO in POS duplicates the order lines ## Cause: In the…
## Issue: After confirming a Sale Order for a lot-tracked product (in grams for example) and having available quantities, importing the SO in POS duplicates the order lines ## Cause: In the `settleSO` function, the line is first split because the UoM differs and is not `pos_groupable` Among the default UoMs, only Units, Pack of 6, and Dozen have `is_pos_groupable` = True, meaning most other UoMs will trigger a line split After duplicating the line due to the UoM split, an additional line is then added for each lot to link, causing duplicate entries in the POS order ## Steps to reproduce: - In Settings, enable Lots & Serial Numbers and Units of Measure & Packagings - Create a Product (Tracking: Lot, Sale Unit: g) - Update the Quantity On Hand (Lot: "LOT", Quantity: 5) - Create and confirm a Sale Order for the product (Quantity: 2) - Open POS and import the SO - Before the fix, there is 3 lines (2x no lots, 1x with lot + qty 2 ## Other issues: - The discount was not imported on the lot lines - Some lines were missing when importing lines where part of the quantity had no available lot - (This fix was already made in PR: https://github.com/odoo/odoo/pull/229075/files but was not forward-ported) opw-5018295 Forward-Port-Of: odoo/odoo#238237 Forward-Port-Of: odoo/odoo#234165
This update fixes a visual glitch in the website header animation. Previously, the header would unexpectedly disappear after scrolling, creating a jarring user experience. This change ensures a smoother, more reliable animation when scrolling, improving overall website usability.
Original PR description
Steps to reproduce the issue: - Go to Edit mode - Click on the Header - In the "Scroll Effect" dropdown, select "Fade Out" - Drop some snippets to allow scrolling on the page - Scroll down then scroll to top QUICKLY The timeout to hide the header after the fade animation end is not cleared. Therefore, after 400ms, the header is shifted upward and disappears, even if the user scrolled up and made the header reappear. task-5357217 Forward-Port-Of: odoo/odoo#237515
The POS digest email now accurately reflects all POS orders, regardless of invoicing status. Previously, the ‘Open Report’ link within the digest would only display invoiced orders, resulting in a blank page when all orders were uninvoiced. This update ensures the digest provides a complete and accurate report.
Original PR description
The POS digest email shows metrics based on *uninvoiced* POS orders, but the “Open Report” link in the digest opens a report filtered to *invoiced* orders only. As a result, when all POS orders are uninvoiced, the link leads to an empty view. ### Steps to reproduce 1. Ensure that all existing POS orders are **uninvoiced**. 2. Enable Developer Mode, then navigate to **Settings → Technical → Email → Digest Email**. 3. Open any digest and click **"Send Now"** to generate a new digest email. 4. Open the generated digest and click the **POS report** link. This results in a blank page. ### Cause There is a mismatch between: * the digest computation (showing only uninvoiced orders), and * the report view called by the digest link (showing only invoiced orders). ### Fix Ensure the POS report shows unvoiced orders. opw-5087701 Forward-Port-Of: odoo/odoo#236727
This update fixes an issue where attendance work entries weren't accurately calculating remaining duration after leave deductions. The change ensures leave is correctly split and applied, resulting in more precise tracking of employee work hours. This improves the reliability of attendance data.
Original PR description
In this commit, we modified _get_work_entries_values calls to use full day boundaries. This regenerates attendance work entries with the proper remaining duration after leave deduction. Old entries are archived and replaced with correctly split ones. task-5360919 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
This update resolves a bug where a global discount applied during a restaurant order couldn't be correctly split across multiple orders. The fix ensures the discount is consistently applied at each product addition and recalculated accurately after splitting, excluding transfers.
Original PR description
Steps to reproduce: - Order some products in a pos restaurant - Add a global discount - Split the order Issue: The global discount can be chosen to be splitted. Fix: The first fix is to apply the global discount each time we add a product. The second fix is to hide the discount when splitting, and recalculate the discount on each splitted order afterwards execpt when tranferring an order. task-5189067
This update significantly speeds up the 'Products Design' preview feature on the `/shop` page. Previously, editing product variants caused significant lag, but this fix optimizes the process, reducing preview times from 700ms+ to around 120ms. Further improvements are planned to reduce the duration by an additional 30-40ms.
Original PR description
Description ======= This commit aims to reduce performance issues related to the `ProductVariantPreview` interaction. Editing the `/shop` page with the **"Products Design"** option caused severe…
Description ======= This commit aims to reduce performance issues related to the `ProductVariantPreview` interaction. Editing the `/shop` page with the **"Products Design"** option caused severe slowdowns and noticeable lag. 🧩 Problem ======= `ProductVariantPreview` uses `offsetWidth` to calculate the container size for variants and the size of the circles representing them. This is needed to determine how many variants can be displayed based on available space. Every call to `offsetWidth` after a DOM change (for example, adding a class) triggers a layout recalculation, which is expensive (around **6–7 ms** per call). The cost grows quickly since each `ProductVariantPreview` instance performs this for every circle, resulting in dozens or hundreds of layout recalculations. 💡 Solution ======= 1. The variant previewer was changed to target the entirety product grid instead of each single variant previewer, reducing the number of interactions per page to only 1. 2. Batch layout recalculations using `requestAnimationFrame`, given that now all container sizes are computed at the same time. This reduces the total to just **two layout recalculations**. 🔁 How to reproduce ======= 1. Go to `/shop` with several visible products with many variants. 2. Switch to **edit mode**. 3. Preview the **"Products Design"** option (hover over elements). Before this commit: ======= - The UI was extremely slow and laggy. - A single preview took **700 ms+**. - Performance degraded with more products and variants. After this commit: ======= - The interface is **much faster**. - Worst-case preview time is around **120 ms**. - The number of variants no longer impacts performance. Additional PRs related to `html_editor` and `html_builder` are in progress and should further reduce the duration by **30–40 ms**.
This update resolves a problem where global discounts weren't correctly applied when splitting a POS order. The fix ensures discounts are consistently calculated and applied, even after splitting, except during order transfers. This improves the accuracy of pricing and reduces potential errors for restaurant staff.
Original PR description
Steps to reproduce: - Order some products in a pos restaurant - Add a global discount - Split the order Issue: The global discount can be chosen to be splitted. Fix: The first fix is to apply the global discount each time we add a product. The second fix is to hide the discount when splitting, and recalculate the discount on each splitted order afterwards execpt when tranferring an order. task-5189067 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
This update improves the speed of updating overtime on employee attendance records. The previous system was slow due to a lack of database indexing, causing delays when removing overtime lines. Adding an index significantly reduces processing time for this common task.
Original PR description
Updating the overtime on attendance may take huge time. The issue comes from the lack of index on work entries so it takes a lot of time to unlink an existing overtime line. So we add an index on the work entries (which is mainly null)
This update resolves a crash that occurred when users selected multiple boxes in the bank statement attachment previewer. The issue stemmed from an attempt to access a date field that wasn't present on certain preview pages. This fix ensures the application remains stable and reliable for all users.
Original PR description
If a group of boxes is selected on the attachment previewer on a page that doesn't contain any date, a crash would occur as `this.boxes['date'][pageNumber]` was undefined. task-none
This update resolves an issue where errors related to Saudi VAT (ZATCA) or network problems during order validation in the Point of Sale system were not being displayed. The change adapts an existing error handling process to the new order validation flow, ensuring that users receive timely notifications about potential problems.
Original PR description
In 18.5 order validation was moved from the payment screen to `OrderPaymentValidation`. The override of the `_finalizeValidation()` in `l10n_sa_edi_pos` was not adapted to the new flow in the forwardport #223759 and as a result the error was not being shown anymore This commit adapts the old override to the new order validation flow. task-5085213 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent update caused the margin calculation on sale orders to incorrectly display a 94% margin instead of the expected 66%. This was triggered by confirming the sale order line, which introduced a calculation within a specific override function. The fix addresses this by ensuring the unit of measure (UoM) is considered during margin calculation, restoring the correct 66% margin.
Original PR description
**Problem:** Sale order margin not computed correctly after confirm **Steps to reproduce:** - enable the margins setting - create a new storable product with avco category - set Sale Price to 3 and cost to 1 (remove taxes) - In the Sales Tab, in packagings add pack of 6 - create a sale order for 1 pack of 6 - unhide the margin% column - see how it is rightly computed (66%) - confirm the sale order **Current behavior:** The margin is now 94% **Expected behavior:** It should not have changed when confirming **Cause of the issue:** Because we confirmed the sale order line, it now has valued move, so the pruchase_price will be computed inside the sale_stock_margin override of _compute_purchase_price(). https://github.com/odoo/odoo/blob/38cffd1d1580693c56f0d897b8c8e60b938a8e85/addons/sale_stock_margin/models/sale_order_line.py#L15 There is currently no mechanism to take the UoM into account inside this override. opw-5344915
This update corrects an issue where commas in payment memos for EFT files were causing errors and rejection of the files. The change removes commas from generated files, ensuring correct formatting and preventing payment processing problems. This ensures accurate EFT file submissions to the BNZ bank.
Original PR description
The EFT file format BNZ is exported as a text file. As such, any commas in the field contents will be treated as a new field, resulting in incorrect formatting and a rejected batch file. This…
The EFT file format BNZ is exported as a text file. As such, any commas in the field contents will be treated as a new field, resulting in incorrect formatting and a rejected batch file. This behavior is due to the Odoo community commit [3082d3b](https://github.com/odoo/odoo/commit/3082d3bd0d7a8b45e647c441ba48adcb84a7a070), which partially reversed an improvement to the group payment memo field. - The original behavior was to concatenate the included invoices with spaces (e.g. 'INV/123 INV/124'). - The improvement replaced this with the batch payment reference (e.g. 'BATCH/IN/002'). - The behavior after 3082d3b is to concatenate the included invoices with a space and a comma (e.g. 'INV/123, INV/124' This commit strips the commas from all generated EFT files, instead of further altering the group payment memo field. It also alters existing unit tests to check that commas are removed from payment memo fields. While a fix that changes the memo generation would resolve some issues, this commit ensures that manually added commas will not cause rejected payments. [Ticket link](https://www.odoo.com/odoo/unassigned-tasks/5099220) opw-5099220 Forward-Port-Of: odoo/enterprise#100670 Forward-Port-Of: odoo/enterprise#98613
This update improves the user experience by allowing the chat window title to break long words, preventing horizontal scrolling and making it easier to read. This change ensures a cleaner and more user-friendly interface for chat conversations. It's a small but important enhancement to the overall usability of the Odoo platform.
Original PR description
This PR introduces a fix that allows the chat window title to break long words, avoiding horizontal scrolling. The fix applies a new class to the title when displayed within a chat window. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A bug in the payment state test has been fixed. The test now correctly reflects the payment state of invoices based on whether the ‘accountant’ module is installed or not. This ensures consistent invoice tracking within the accounting system.
Original PR description
The `test_bill_state_change_on_payment_state` is throwing an exception. ``` self.assertEqual(payment.invoice_ids.payment_state, 'not_paid') AssertionError: 'paid' != 'not_paid' - paid + not_paid ```…
The `test_bill_state_change_on_payment_state` is throwing an exception. ``` self.assertEqual(payment.invoice_ids.payment_state, 'not_paid') AssertionError: 'paid' != 'not_paid' - paid + not_paid ``` The test was incorrectly expecting invoice `payment_state` to always be `not_paid` when payment is reset to draft, but behavior differs based on whether `accountant` module is installed or not. - With `accountant`: Payment has no move_id (no journal entry created by default), so when drafted, `invoice.matched_payment_ids` filters exclude it, resulting in 'not_paid' state. - Without `accountant`: Payment has move_id (journal entry auto-created) so filter conditions fail (`not p.move_id` is `False`), and invoice stays `paid` due to existing reconciliations in `draft` state. Test was introduced here: https://github.com/odoo/enterprise/pull/100834/commits/402bd85af79fa68fa2cb957d40307edf62f7525c Commits that introduced the behavior change: https://github.com/odoo/odoo/pull/182390/commits/b572fcd78289013f28f11157b1bfbb75c9ea7344 https://github.com/odoo/odoo/blob/57f1053b031f293c6cd8dc8f590dccda4fb3e665/addons/account/models/account_move.py#L1308-L1314 Runbot [link](https://runbot.odoo.com/odoo/error/234573) runbot error: 234573 Forward-Port-Of: odoo/enterprise#101089
This update corrects a bug where discounts from purchase orders were incorrectly being imported into sale orders. The change ensures that sale order discounts always default to zero, aligning with business expectations. A recent update in version 18.0 addressed this issue, preventing future errors.
Original PR description
Discounts are always sent by `_retrieve_line_vals` in `account_edi_ubl_cii` In Sale orders, discounts aren't expected to be automatically imported from the purchase order, it should always be 0. `test_so_import_product_from_po` didn't use to fail because discount wasn't checked until the recent refactor https://github.com/odoo/odoo/pull/190310 Check was added in 18.0 to avoid this error in the future. Steps to reproduce: - Disable discount in sale app - Create a PO with a discount on any POL - Enable discounts - Import SO from PO Issue: Discount is added to the Sale order lines. Runbot: 232724 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238413 Forward-Port-Of: odoo/odoo#237743
This update resolves an issue where changing the 'I agree' button's font size in the cookie bar would prevent it from working. The fix corrects a technical error in how the button's click event was handled, ensuring the cookie consent process continues to function correctly regardless of font size adjustments.
Original PR description
The "I agree" button in the cookie bar would stop working if its font size was changed. Steps to reproduce: =================== - Enable the cookie bar in website settings. - Go to the website and…
The "I agree" button in the cookie bar would stop working if its font size was changed.
Steps to reproduce:
===================
- Enable the cookie bar in website settings.
- Go to the website and enter Edit mode.
- Click on the cookie bar.
- Select the "I agree" button's text and change its font size.
- Save and visit the page as a guest (e.g., in a private window).
- Click on the "I agree" button text.
-> The maps doesn't show and the Cookie bar disappear.
Cause:
======
Applying a font size to the button's text wraps that text within a `<span>` element.
The event listener for accepting cookies is attached to the elements with IDs `#cookies-consent-essential` and `#cookies-consent-all`. in that case it ID `cookies-consent-essential` exist in the parent element. However, the code was checking the ID of `event.target`. When a user clicks directly on the newly created
`<span>`, `event.target` refers to the `<span>` itself, not the element who owns the event.
Since the `<span>` does not have the required ID ('cookies-consent-all'), the condition to accept the cookies was false.
Solution:
=========
Use `event.currentTarget` instead of `event.target`.
Unlike `event.target`, `event.currentTarget` always refers to the element to which the event handler was attached—in.
check:
https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget
opw-5004645
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238238
Forward-Port-Of: odoo/odoo#237786This update corrects a previous issue where default Incoterms were incorrectly applied to bills. Bills represent invoices from third-party vendors, so using our company's default Incoterms would be inaccurate. This change ensures bills accurately reflect the terms of the vendor's sale.
Original PR description
Incoterms are usefull to indicates the rules and terms in sale contracts. It makes sense to add the company default on invoices, but not on bills, as those originate from another vendor than us, who can use different rules. opw-5169146 Forward-Port-Of: odoo/odoo#236709