Daily updates from Odoo
Tuesday, April 14, 2026
223 changes
31 changes
Resolved issues and error corrections
This update resolves an issue where the 'Details' button was causing errors when users initiated the signing process. The fix ensures the button is hidden during signing mode, preventing runtime errors and improving the user experience. This change enhances stability and reliability for internal users.
Original PR description
Version: - saas-19.2 Steps to reproduce: - Create sign request for internal user. - Open document. - Start Signing and click on 'Details' button in contoll panel. Issue: - Clicking this button during signing causes a traceback error. Cause - The button is defined in `sign.SignRequestControlPanel` and is always rendered. In signing mode, the template is reused via XML inheritance (sign.SignSignableRequestControlPanel), but the corresponding JS component (SignableRequestControlPanel) does not implement the openFormView method. As a result, clicking the button leads to a runtime error. Solution - Control the visibility of the "Details" button using a getter. The getter returns true in SignRequestControlPanel (normal mode) and false in SignableRequestControlPanel (signing mode), ensuring the button is hidden when the required method is not available. task-6074593
This update resolves a test failure related to currency differences in DIAN move detection. The system now ensures that all test moves use the same currency, aligning with updated duplicate move detection logic. This ensures accurate testing and reliable functionality for DIAN tax compliance.
Original PR description
Following [PR](https://github.com/odoo/odoo/pull/248421), duplicate move detection now also checks the currency of both moves. Consequently, the `test_validate_duplicate_cufe` test case is failing because the moves in the test use different currencies. This commit ensures both moves use the same currency to fix the test. task-5916255
This update fixes an issue where subscription discounts were incorrectly calculated due to how the base plan price was being used. The fix ensures discounts are accurately applied by dividing the base plan price by its unit (e.g., month or year), resulting in more precise pricing on the website. This improves the accuracy of subscription offers for customers.
Original PR description
### Steps to reproduce: - Install Subscriptions and eCommerce modules - Create 3 recurring plans (3 months, 6 months, Yearly) - Create a service subscription product with the created recurring plans - Check the product's page on website - Notice each pricing has a discount tag and with incorrect numbers ### Cause: When calculating the discount we normally use the fixed price of the base plan as the price to compare with. This sometimes introduce inconsistencies if the base plan is not just one unit from the period (>1 week/month/year) ### Fix: We divide the base_plan_price by the unit of the plan so we can get the price of just one plan unit. opw-6048278 Forward-Port-Of: odoo/enterprise#112305
This update corrects a problem where overridden group names within the accounting module weren't being properly translated into the Odoo localization files. The fix adds specific identifiers to the accounting module, ensuring that translated names are exported and used correctly, preventing inconsistencies between the English source strings and the translated versions.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently. Forward-Port-Of: odoo/enterprise#113470 Forward-Port-Of: odoo/enterprise#112898
This update ensures that when a section with 'Hide Composition' is enabled, the corresponding products are also hidden in the portal's preview view, matching the behavior in the PDF report. Previously, subscription products within hidden sections were still visible, creating a discrepancy in how orders were presented.
Original PR description
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still…
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still visible in the portal's 'preview' view, whereas they are correctly hidden in the PDF report. **Expected behavior:** As observed in pdf format, in preview, the hidden section should hide the components and only view the name of the section. **Steps to reproduce:** - Create quotation with One Goods type product - Add section with Hide composition - Add service type product in the section - Preview it and section products will be hidden - Confirm the quotation and now preview the sales order - Now the hidden section products will be visible **Solution:** - We need to separate the logic of displaying lines and invoiceable lines (since _get_invoiceable_lines doesn't necessarily return the sections/subsections) - The filtering in sale subscription module wasn't considering the `collapse_composition` boolean field, which why hidden sections content were displayed. - We need to hide any product with a parent (section or subsection) collapsed, hide any subsection with a parent section collapsed. opw-5868148 Forward-Port-Of: odoo/enterprise#106287
This update fixes an issue where vendor bills created in the Documents module incorrectly defaulted to the company's currency instead of the vendor's. Now, when a vendor is selected in Documents, the bill automatically uses the vendor's currency, ensuring accurate financial reporting. This improves data consistency and simplifies reconciliation.
Original PR description
**Issue:** When creating a vendor bill or vendor refund through the Documents module after selecting a supplier, the currency defaults to the company's currency instead of the vendor's. However, if the supplier is selected later in the Accounting module, the correct supplier currency is applied. **Steps to reproduce:** - In Documents, upload a bill. - Click on the bill and assign a vendor (whose supplier currency is different from the company's currency). - Click on "Create Vendor Bill". The used currency isn't that of the supplier. opw-4406074 Forward-Port-Of: odoo/enterprise#100846 Forward-Port-Of: odoo/enterprise#78380
This update resolves a problem where portal users were receiving an error message when viewing invoice payment information. The issue stemmed from the system attempting to access payment details, which portal users didn't have permission to view. This change prevents the error and ensures accurate payment information is displayed in the portal.
Original PR description
Steps to produce: --- - Install `Accounting` module. - Create a new customer. - From the gear icon, `grant Portal Access` to the customer. - Create an invoice for this customer. - Log in using the…
Steps to produce: --- - Install `Accounting` module. - Create a new customer. - From the gear icon, `grant Portal Access` to the customer. - Create an invoice for this customer. - Log in using the customer’s portal account. - Navigate to `My Invoices`. Issue: --- ``` You are not allowed to access 'Payment' (account.payment) records. ``` Root cause: --- - After the [commit], the system attempts to compute the next payment values for display in the portal. - This computation is triggered via `_get_invoice_portal_extra_values()`, which calls `_get_invoice_next_payment_values()`. - During this process, the method iterates over `reconciled_payment_ids`. Accessing this field triggers its computation (`_compute_reconciled_payment_ids`), which depends on `matched_payment_ids`. - Both `reconciled_payment_ids` and `matched_payment_ids` are relational fields pointing to `account.payment` records. - Since portal users do not have read access to the `account.payment` model, attempting to access these fields results in an AccessError [commit]: https://github.com/odoo/odoo/commit/b76836680540eb7687021f48b3532e8a495e771a opw-6042693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where sale orders were incorrectly using the analytic account from Company A instead of Company B when multiple companies were involved. The change ensures that the correct company's project and analytic distribution account are used, resolving potential discrepancies in financial reporting across different company environments. This improves the accuracy of sales data analysis.
Original PR description
Pre-requisites: ------------------------------------------ 1. Install `sale_project` and `project_account_budget` modules 2. Have two companies configured in the system 3. Enable Timesheets from the…
Pre-requisites:
------------------------------------------
1. Install `sale_project` and `project_account_budget` modules
2. Have two companies configured in the system
3. Enable Timesheets from the Settings app
4. Create two projects (one for each company)
5. Ensure the following settings are enabled on both projects:
* Timesheets
* Billable
Steps to Reproduce:
------------------------------------------
1. Switched to Company A
2. Create a product with:
* Type: Service
* Create on Order: Task
* No company restriction
3. Set the product's `project_id` to Company A's project
4. Switch to the newly created company (Company B)
5. Set the product's `project_id` to Company B's project
6. Enable Analytic Distribution from SOL Optional
7. Create a sale order with the configured product, and delete the auto-fetched
Analytic Distribution account for the sale order (Company B's project)
8. Now confirm the sale order
Observation:
----------------------------------------
The SOL's analytic distribution uses the analytic account from Company A's project instead of Company B
Issue:
----------------------------------------
The `project_id` field on `product.template` is `company_dependent=True`, meaning it stores different values per company. However, in `_compute_analytic_distribution()`, the code accesses `line.product_id.project_id` without calling `with_company`, so it resolves the field using the wrong company context
Solution:
----------------------------------------
using `with_company()`, the correct company context is applied when accessing
`project_id`, preventing inconsistencies in multi-company environments and
ensuring the appropriate project is used for the corresponding company.
opw-5864452
Forward-Port-Of: odoo/odoo#257776This update resolves a memory issue that caused server crashes when calculating cumulated balances for large accounting systems. By optimizing the query to process only relevant move lines, the fix dramatically reduces memory usage and processing time, leading to a more stable and efficient system. This improves performance for users with extensive transaction data.
Original PR description
The _compute_cumulated_balance() method performs a query over every existing move lines to get a dict associating the record id with the cumulated sum at this point. When there is a lot of move…
The _compute_cumulated_balance() method performs a query over every existing move lines to get a dict associating the record id with the cumulated sum at this point. When there is a lot of move lines, the result returned by fetchall() hits the memory limit and the server crashes. We propose to encapsulate the original query to only return the result for the account move lines present in self. Benchmarks --------------- The following benchmarks were generated with a customization of the account.move.line list view to display the cumulated_balance field. Memory usage during the self.env.cr.execute and the dictionary population: | Operation | Before the fix | After the fix | |---------------|----------------|---------------| | populate dict | 1.5 GB | 17.1 MB | | execute query | 430 MB | 8.3 MB | 100 000 lines were displayed at the same time to get a significant size. So the number of records in self is more than 7 000 000 without the fix and 100 000 with the fix. Time spent in the _compute_cumulated_balance method: | No of AML | Before the fix | After the fix | |-----------|----------------|---------------| | 7 000 000 | 10.4 s | 6.8 s | opw-6053720 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258207 Forward-Port-Of: odoo/odoo#255780
This update fixes an issue where users received access errors when clicking on notifications for records they couldn't view. Now, users are automatically redirected to their inbox instead, providing a smoother user experience. This enhancement ensures notifications are always accessible, even for records with restricted permissions.
Original PR description
Currently, when a user clicks on a notification in the messaging menu relating to a record they don't have access to, an access error occurs. This PR changes this behavior so that the user is redirected to the inbox instead. task-5374528 Forward-Port-Of: odoo/odoo#258745 Forward-Port-Of: odoo/odoo#258126
This update fixes a technical error in the HR reporting module that prevented certain financial constraints from being properly enforced. The issue stemmed from a missed correction during a recent update, impacting how financial moves were processed. This change ensures accurate reporting and compliance.
Original PR description
In 18.0, the `_check_move_constraints()` method contained a typo - `_check_move_constrains()` - and the module was developed with this in mind. The typo was fixed in 19.0, but this was missed during the forward port of this module, leading to additional constraints not triggering properly. ticket-6036500 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257492
This update resolves an issue where COGS calculations were incorrect when products were partially delivered or held as consignment stock. The fix ensures that consigned quantities are properly accounted for, leading to accurate COGS values for sales invoices. This improves inventory valuation and reporting.
Original PR description
This forward port merges [PR1](https://github.com/odoo/odoo/pull/255043) (original PR from this forward port) and forward port of [PR2](https://github.com/odoo/odoo/pull/256383) which is improving…
This forward port merges [PR1](https://github.com/odoo/odoo/pull/255043) (original PR from this forward port) and forward port of [PR2](https://github.com/odoo/odoo/pull/256383) which is improving the fix. **Problems:** 1) cogs don't adapt to partially consigned quantities 2) no cogs at all if product partially delivered **Steps to reproduce:** Problem 1) - enable 'consignment' setting - create a tracked product with perpetual category (bug happens with avco, fifo and standard price category) - set a cost of 10 - add a quantity of 1 without owner and a quantity of 1 with an owner - create a sale order for a quantity of 2 of your produce - confirm, validate picking and confirm invoice -> the cogs is 20 -> the cogs should be 10 because the consigned quantity shouldn't be taken into account in the cogs Problem 2) - set the warehouse as 2 steps delivery - create a tracked product avco perpetual - set a cost of 10$ and a positive quantity - create and confirm a SO for 1 quantity - validate only the first picking - create and confirm the invoice -> there is no cogs lines in the invoice -> there should be cogs line for a cost of 10$ **Cause of the issue:** Problem 1) to compute the cogs line amount, we multiply the quantity of the line (2 in our case) by the price unit of the cogs. To compute the price_unit we call _get_cogs_value() https://github.com/odoo/odoo/blob/0dbc1c01c6b48d0a765391d5b6ab03b555440aef/addons/stock_account/models/account_move.py#L122-L123 In our case the price_unit (so the 'price per cogs unit') should be 5 because we have 2 units, 1 valued at 10 and 1 valued at 0 (the consigned one). But the value returned by _get_cogs_value() is 10. The reason for this is that _get_cogs_value uses the return value of _get_cogs_price_unit() because the delivery is validated. https://github.com/odoo/odoo/blob/0dbc1c01c6b48d0a765391d5b6ab03b555440aef/addons/stock_account/models/account_move_line.py#L67-L68 Inside get_cogs_price_unit, we use _get_valued_qty() to sum the valued quantity of each move. https://github.com/odoo/odoo/blob/0dbc1c01c6b48d0a765391d5b6ab03b555440aef/addons/stock_account/models/stock_move.py#L251 But inside get_valued_qty() for our second move, when calling get_out_move_lines(), no lines will be returned because should_exclude_for_valuation() will return True as the owner of the line is not the user. So total qty will be 1. https://github.com/odoo/odoo/blob/0dbc1c01c6b48d0a765391d5b6ab03b555440aef/addons/stock_account/models/stock_move.py#L529 If the product is fifo, we return the total value of the moves (10 + 0) divided by total quantity (1). If the product is standard or avco we return the standard price. In both cases the return value is 10. But in both cases it should be 5. https://github.com/odoo/odoo/blob/0dbc1c01c6b48d0a765391d5b6ab03b555440aef/addons/stock_account/models/stock_move.py#L251-L255 Problem 2) Inside _get_cogs_value(), because there is done moves, we use _get_cogs_price_unit() https://github.com/odoo/odoo/blob/5fd80a1fb8ef33cfa9261967cf14f6f0c421d45a/addons/stock_account/models/account_move_line.py#L67-L68 But because there is no valued quantity (because the done moves are internal), the return value will be 0. https://github.com/odoo/odoo/blob/5fd80a1fb8ef33cfa9261967cf14f6f0c421d45a/addons/stock_account/models/stock_move.py#L251-L253 So the cogs will have an amount of 0 and no line will be created https://github.com/odoo/odoo/blob/5fd80a1fb8ef33cfa9261967cf14f6f0c421d45a/addons/stock_account/models/account_move.py#L125-L126 **fix** Prob 1) The first thing to change is to not use the standard price when some quantities are consigned. The other thing is to add the quantities that would have been used if they weren't consigned because in this case we need them in the computation. Indeed these quantities are included in the invoice line quantity. At the end we are multiplying the unit price by the invoice line quantity which includes consigned quantity, so we need to take them into account also when computing the price per cogs quantity. Prob 2) If there is no quantity to value (consigned + not consigned) we fallback on the standard price (just as if there is no move). This solves the issue of partially delivered order because no moves are valued moves in this use case. If there is a quantity to value (and we're in a case where we want the average move value), we use the average move value (which will be 0 if all the moves are consigned, so the consigned use case is also ok) opw-6030161 opw-6001694 Forward-Port-Of: odoo/odoo#256231 Forward-Port-Of: odoo/odoo#255043
This update fixes a bug where countdown snippets weren't visible in the website builder's preview dialog. The change ensures the necessary interaction is loaded within the preview environment, allowing countdown timers to function correctly when creating custom website snippets. This improves the user experience for website builders.
Original PR description
The content of the countdown snippet did not appear in snippets preview dialog, because the interaction that fills it was not loaded for preview. This commit adds the interaction in the registry for loading it inside the iframe of the snippets preview dialog. Steps to reproduce: - Open website builder - Drop a `s_text_image` snippet - Drop a `s_countdown` snippet inside - Save the first one as a custom snippet - Click on "Custom" snippets category - Bug: the countdown does not appear task-6088029 Forward-Port-Of: odoo/odoo#258916 Forward-Port-Of: odoo/odoo#257480
This update resolves an issue where clicking on records within the 'Forecasted' report in the product catalog didn't function correctly. The fix allows users to open and view the detailed records associated with forecasted products, improving the report's usability and providing access to critical sales data.
Original PR description
Steps to reproduce ================== - Install sale_stock - Go to Products - Open the "Acoustic Bloc Screens" record - Click on the Forecasted smart button - Click on "three quotations" - Click on a record => Nothing happens opw-6095229 Forward-Port-Of: odoo/odoo#258157
This update resolves an issue where multiple attachments were incorrectly included in vendor bills when posting expenses with multiple employees. The fix ensures that each bill accurately reflects the attachments associated with the specific expense, preventing data duplication and improving accuracy in financial reporting. This improves the reliability of expense tracking.
Original PR description
Steps to reproduce: 1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2). 2. Upload different attachments to each (e.g., 2 files for A, 3 files…
Steps to reproduce:
1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2).
2. Upload different attachments to each (e.g., 2 files for A, 3 files for B).
3. Select both expenses and use the 'Post' action to open the posting wizard.
4. Click 'Post' in the wizard.
5. Check the generated journal entries (vendor bills).
Result: Both vendor bills contain all 5 attachments (copies of A's files and copies of B's files).
Issue:
In `_prepare_bills_vals`, `self.attachment_ids` is collected before the
`grouped('employee_id')` loop (see: https://github.com/odoo/odoo/blob/6b7fff433335edf7459f7a6eb5c274c0f4d5d1df/addons/hr_expense/models/hr_expense.py#L1572-L1578).
Since `self` refers to the full expense recordset, `self.attachment_ids` returns
the union of all attachments across every expense. This combined list is then
assigned to every bill created inside the loop, causing attachments from one
employee's expenses to leak into another employee's journal entry.
opw-6056590
Forward-Port-Of: odoo/odoo#258784
Forward-Port-Of: odoo/odoo#256031This update resolves an issue where printing surveys designed without answer capture (scoring_without_answers) would leave out participant responses. Now, all survey data is consistently included when printing, ensuring complete and accurate reports for participant inputs. This improves the reliability of survey data collection and reporting.
Original PR description
Previously, printing surveys of type scoring_without_answers omitted participants' answers, resulting in incomplete and inconsistent reports. This commit ensures answers are always included, regardless of survey type. Task-5407701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258616
This update resolves an issue where users could encounter access rights errors when creating email campaigns with dynamic fields. The fix prevents a style attribute from being incorrectly applied to 't' nodes during the email conversion process, ensuring proper access controls and campaign functionality.
Original PR description
This commit fixes an unexpected access rights error when users try to add simple dynamic fields allowed by mail_allowed_qweb_expressions to mass_mailing emails. During the convert_inline process, the…
This commit fixes an unexpected access rights error when users
try to add simple dynamic fields allowed by mail_allowed_qweb_expressions
to mass_mailing emails.
During the convert_inline process, the <t t-out=""/> placeholder element
has its style inlined, and attributed to its style attribute.
This style attribute was not filtered out during the safety
check process, resulting in the templating engine believing a disallowed
directive was used.
Steps to reproduce:
- On a fresh 18.0+ install with demo data, login as Marc Demo
- Access the Email Marketing app
- Create a new mailing campaign
- Set sending to Newsletter or Mailing Contact
- Type /field to add a dynamic value
- Set it to Name
- Save the mailing
- An access rights error is raised due to the user not having
group_mail_template_editor permissions and the dynamic placeholder
node having a style attribute
Fix:
T nodes are no longer granted a style attribute during style inlining.
Forward-Port-Of: odoo/odoo#257992
Forward-Port-Of: odoo/odoo#226111This update fixes an issue where portal users couldn't edit messages within the project chatter. The fix prevents a technical error that occurred when attempting to edit a message, ensuring portal users have the full functionality to manage project communications. This improves usability for all users.
Original PR description
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a…
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a Task T 3. In the Setting of Project P, click *Share Project* and select a portal user 4. Logged as a portal user, open Task T, send a message in the chatter, then try to edit it by clicking the *Edit* (pencil) button. 5. **Nothing happens, but a traceback appears in the console: _Caused by: TypeError: Cannot read properties of null (reading 'id')_** ## Cause The condition causing this error is the following: https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L9-L13 where `this.thread` is not defined yet. Other conditions in this patch check for `this.thread` before trying to read its `id` [[1](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L25), [2](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L32)], which leads to believe that the check was simply forgotten in this condition. opw-6072570 Forward-Port-Of: odoo/odoo#258234
This update resolves an issue where searching for tags on tasks within the portal caused a system crash. The fix ensures that the search functionality correctly applies the necessary domain logic, preventing errors related to missing data fields in the task tag model. This improves the stability and usability of the task management feature for portal users.
Original PR description
Steps to reproduce: -------------------------- 1. Install Project and create a portal user. 2. Create a project and a task with tags added to it. 3. Share the project with the portal user (Edit…
Steps to reproduce:
--------------------------
1. Install Project and create a portal user.
2. Create a project and a task with tags added to it.
3. Share the project with the portal user (Edit access).
4. Log in as the portal user and open the task.
5. Click on the 'Tags' field and select 'Search More'
Issue:
----------
A traceback occurs:
```ValueError: Invalid field project.tags.display_in_project in condition ('display_in_project', '=', True)```
Cause:
----------
The [ProjectTaskRelationalModel](https://github.com/odoo/odoo/blob/75fd7b05766c6789bf311f6a8257b89ecf4f86de/addons/project/static/src/views/project_task_relational_model.js#L4-L7) calls `_processSearchDomain.`
This method automatically appends a domain when 'showSubtasks' is not enabled.
https://github.com/odoo/odoo/blob/75fd7b05766c6789bf311f6a8257b89ecf4f86de/addons/project/static/src/views/project_task_model_mixin.js#L5-L12
When clicking 'Search More' on the 'Tags' field, the same domain is
applied to the **project.tags** model. However, since **project.tags**
does not have the `display_in_project` field, the ORM raises a ValueError.
In portal, only `project.webclient` assets are loaded, causing
ProjectTaskRelationalModel to be used for all relational fields.
In contrast, internal users use the standard RelationalModel, so the
issue does not occur.
Solution:
-------------
Restrict the domain modification in _processSearchDomain to apply only
when the current model is `project.task` and `report.project.task.user`.
opw-5930427
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#258656
Forward-Port-Of: odoo/odoo#249282This update resolves an issue where Point of Sale users were unable to refresh their Viva.com payment tokens, leading to payment processing failures. The fix allows the system to automatically refresh the token, ensuring Viva.com payments continue to function correctly for POS users without requiring administrative privileges.
Original PR description
Point of Sale users only have read access on pos.payment.method. When the stored Viva.com bearer token expires or the API returns invalid credentials, _bearer_token() fetches a new token . That write ran as the POS user and raised an AccessError, although the user was only paying—not editing configuration. Steps to reproduce: ------------------- * Configure Viva.com as payment method. * Open the POS as a user with only Point of Sale / User (not Administrator). * Pay with Viva until the OAuth token must be refreshed (e.g. after expiry or after Viva rejects the current token). > Observation: AccessError: You are not allowed to modify 'Point of Sale Payment Methods' (pos.payment.method) records. Why the fix: ------------ Persist the refreshed viva_com_bearer_token with sudo().write() so the ORM does not require write ACL on pos.payment.method for that internal side effect of an already authorized Viva RPC. opw-6078131 Forward-Port-Of: odoo/odoo#257842
This update fixes an issue where duration calculations were incorrectly rounding minutes and seconds, sometimes resulting in durations being displayed as '60 minutes' instead of '1 hour'. The change ensures durations are accurately formatted for display, improving the user experience.
Original PR description
Before this commit, when the minutes of a duration go through Math.round, it can return 60 minutes in the duration instead of 1h. The same issue go for the seconds too. Now, the formatDuration check if this cases happen and and ajust the result of the rounding if necessary. TASK-6107266 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent update to the MRP module introduced a test failure in our builds. This change was caused by a new field (`backorder_ids`) added in the `stock_barcode_mrp` module. This fix ensures the test runs correctly without requiring the enterprise module, maintaining stability and preventing potential disruptions.
Original PR description
The test `test_basic_flow_with_minimal_access_rigths` fails in builds without `stock_barcode_mrp` since the `backorder_ids` mrp.production field is introduced in that module: https://github.com/odoo/enterprise/blob/92c584cc1426ac70f6f77aa8216c17004fa42d35/stock_barcode_mrp/models/mrp_production.py#L10 runbot-242465 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258837
This update resolves an issue where kit products were incorrectly rounding purchase order values due to how the cost share was calculated. The fix ensures that kit product costs are distributed accurately, preventing valuation discrepancies and improving the reliability of purchase order calculations. This impacts how kit products are valued during the ordering process.
Original PR description
### Steps to reproduce: - Create a kit product with 6 bom lines (with a `cost_share` of `0.0%`) - Create + confirm a purchase order for 1 unit of the kit product at 60 - Validate the delivery #### >…
### Steps to reproduce: - Create a kit product with 6 bom lines (with a `cost_share` of `0.0%`) - Create + confirm a purchase order for 1 unit of the kit product at 60 - Validate the delivery #### > 6 layers were created with values 9.99, 10, 10, 10, 10 and 10 There are two issues with purchased kit valuation addressed in this PR: ### Issue 1: Since 8c199f7783527735b35c9fbda334cbdcd55a004f, the product price unit is not supposed to be rounded anymore. However, kit products rely on the rounded `cost_share` field of the `mrp.bom.line` to determine which part of the price of the kit product is handled by which component: https://github.com/odoo/odoo/blob/591102ff37fef1f0b9a946fee3f9d85789653e65/addons/mrp/models/stock_move.py#L245-L246 https://github.com/odoo/odoo/blob/591102ff37fef1f0b9a946fee3f9d85789653e65/addons/purchase_mrp/models/stock_move.py#L28 https://github.com/odoo/odoo/blob/591102ff37fef1f0b9a946fee3f9d85789653e65/addons/purchase_mrp/models/stock_move.py#L38 This leads to inevitable rounding issues where `60/6` does not match `10`: https://github.com/odoo/odoo/blob/591102ff37fef1f0b9a946fee3f9d85789653e65/addons/purchase_mrp/tests/test_purchase_mrp_flow.py#L1273-L1275 simply because 1/6 is represented as `16.67%` and not by `16.66666666666666%`. However, values such as 1/6 can be obtained if you do not set any `cost_share`, since the kit explosion will equidistribute its cost share: https://github.com/odoo/odoo/blob/591102ff37fef1f0b9a946fee3f9d85789653e65/addons/purchase_mrp/models/mrp_bom.py#L42-L48 ### Fix of this issue: We set the digits to `False` for stability reason as the columns have been initiallised as "numeric" values and needs to stay numeric: https://github.com/odoo/odoo/blob/b007b0a4f7e56f6dc44df3154e13745c9981eae3/odoo/fields.py#L1627-L1650 Note that when the digit is Falsy on the field, the field value is formatted to the second digit by the front end: https://github.com/odoo/odoo/blob/3542c542eac5b204e69a8dd6ae1907cfcef60af3/addons/web/static/src/views/fields/float/float_field.js#L58-L76 https://github.com/odoo/odoo/blob/12e453302a950df4d9ee45954f54bdf610888eda/addons/web/static/src/core/utils/numbers.js#L214-L227 In particular, when we create the bom and set the `cost_share`, all possible values will be rounded to the second decimal just as before. This change will therefore only alter the rounding behavior in the DB for equidistributed values such as `16.66666666666666%`. ### Issue 2: While the value of the kit product is exploded and distributed among components, the values of each individual `stock.valuation.layer` are themselves rounded before creation based on the company currency: https://github.com/odoo/odoo/blob/4188436a9e800b062bf9f3b0055cad86acc47e19/addons/stock_account/models/product.py#L240-L255 https://github.com/odoo/odoo/blob/4188436a9e800b062bf9f3b0055cad86acc47e19/addons/stock_account/models/stock_valuation_layer.py#L30 Now, this is problematic since the sum of the values of the layers is expected to match the total value of the purchase order line (that is, the non-rounded value of the components of the purchased kit). ### Fix of this issue: We compute and distribute the rounding error among layers corresponding to the purchased kit product before creation (since layer values are not expected to be modified afterwards), based on the non-rounded computation, since this value should now be exact (as the unit cost is not rounded anymore). opw-5085457 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257411 Forward-Port-Of: odoo/odoo#252034
This update fixes an issue where stock lot generation incorrectly used the standard product UoM (Unit) instead of the sales packaging UoM (Pack of 6). The change ensures that lots are created with the correct quantity based on the product's sales packaging, improving inventory accuracy. This resolves a discrepancy in lot quantities.
Original PR description
Steps to reproduce the issue:
- Enable "Units of Measure" and "Lots & Serial Numbers" in the inventory settings
- Create a storable product "P1":
- Tracking: Lot
- UoM: Unit
- Sales tab: Packagings > Pack of 6
- Create a receipt with 3 packs of 6 of P1
- Mark it as "To Do"
- Open the detailed operations and click on the "Generate Serials/Lots" button:
- First lot: Lot 1
- Quantity per Lot: 3 packs of 6
- Quantity received: 3 packs of 6
- Click on "Generate"
Problem:
A stock move line is created with 3 units instead of 3 packs of 6, because the UoM is not passed from the JavaScript side to the Python side. As a result, the default product UoM (Unit) is used.
opw-5933277
Forward-Port-Of: odoo/odoo#258392This update corrects a technical issue preventing proper import of Nilvera electronic invoices. The team renamed a method in the core Odoo system to align with a recent change. This fix ensures that Nilvera invoices are now correctly processed and imported into Odoo.
Original PR description
# Description of the issue/feature this PR addresses The parent class `account.edi.xml.ubl_20` renamed `_import_fill_invoice_form` to `_import_fill_invoice`. The override in `l10n_tr_nilvera_einvoice` was not updated to match, causing the override to be silently ignored. # Current behavior before PR The `_import_fill_invoice_form` override in `l10n_tr_nilvera_einvoice` is never called because the parent method no longer exists under that name. # Desired behavior after PR is merged The override is renamed to `_import_fill_invoice` to match the parent class, restoring correct behaviour for Nilvera invoice imports. task-id: None --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258752 Forward-Port-Of: odoo/odoo#258097
This update resolves an issue where spreadsheet list views were showing technical field names instead of user-friendly labels. The change ensures that all fields, including list headers, are correctly fetched and displayed in the spreadsheet. This improves the overall user experience and data clarity.
Original PR description
The `ODOO.LIST.HEADER` formula will display the technical name of the field instead of its albels if there are no `ODOO.LIST` formulas for that same field. Since the introduction of chaining fields in list formulas, the fields we want to fetch should be added to `fieldPathsToFetch` in the data source. But this was only done for the `ODOO.LIST` formula, not for `ODOO.LIST.HEADER`. Task: [5900769](https://www.odoo.com/web#id=5900769&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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 Forward-Port-Of: odoo/odoo#258400 Forward-Port-Of: odoo/odoo#257087
This update ensures that receipt images, such as the logo and QR codes, are always correctly printed. Previously, images were sometimes missing due to a timing issue where the receipt was generated before the images had fully loaded. This change uses a utility to wait for images to load, guaranteeing a complete and accurate receipt.
Original PR description
The receipt logo (and other images like QR codes) was sometimes missing from the printed ticket. This happened intermittently because the receipt image was being generated (captured from an iframe) before the browser had finished decoding and rendering the logo image within that iframe. This commit updates PosTicketPrinterService to use the waitImages utility, ensuring that all images in the receipt's iframe are fully loaded and rendered before returning the iframe for further processing (printing or canvas capture). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a previous restriction in how the system identifies Spanish freelancers. Specifically, it now recognizes 'Comunidades de Bienes' (CBs) – entities taxed as freelancers – which were previously excluded due to a limited regex. This ensures accurate fiscal categorization and reporting for these businesses.
Original PR description
In Spain, "Comunidades de Bienes" (VAT starting with 'E') are entities without legal personality that tax via income attribution to their members. For accounting and tax reporting purposes, they must be treated as individuals/freelancers rather than corporations. The current _l10n_es_freelancer logic was too restrictive, only matching standard DNI (8 digits + letter) or NIE (starting with X, Y, Z). This caused CBs to be excluded from freelancer-specific logic, leading to incorrect fiscal categorization in reports and tax modules. The regex has been updated to optionally allow the 'E' prefix while ensuring the rest of the string maintains a valid format, effectively broadening the scope of what the system considers a Spanish freelancer. task-6014192 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258474 Forward-Port-Of: odoo/odoo#253087
This update resolves an issue preventing the creation of product feeds when only one website is enabled in the database. The fix ensures a default website ID is assigned, allowing the system to correctly link product feeds with the appropriate language. This ensures all merchants can utilize product feeds, regardless of their website setup.
Original PR description
Issue: --- Due to this issue, we cannot create a `product.feed` record in single website db. Steps to reproduce: 1- Create a fresh db with single website. 2- Enable Google Merchant Center. 3- Try to create a `website.feed` record. It's not possible to create the record due to language field. Cause: --- `website_id` is only shown in `group_multi_website`. When there is only one website set, there is no default value for the website. `lang_id`'s domain is also `website_id.language_ids`, as a result record creation will fail. opw-6110843 Forward-Port-Of: odoo/odoo#258653
This change removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, a warning forced users to enable the feature, which wasn't always necessary. Now, users can access all tax returns regardless of the GST e-filing setting.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests…
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Ent PR: https://github.com/odoo/enterprise/pull/105983 Task-5486586 Forward-Port-Of: odoo/odoo#259029 Forward-Port-Of: odoo/odoo#247216
This update resolves an issue where hidden fields within form blocks added to Masonry blocks were still visible. The fix involves applying a higher priority CSS rule to ensure the 'display: none' style is consistently applied, preventing it from being overridden. This ensures that hidden fields truly disappear as intended.
Original PR description
# How to reproduce - Go to the website editor - Add a Masonry block - Add a Form inner block in the Masonry block - Select any fields of the form - Set it's visibility to Hidden - Save # The problem…
# How to reproduce - Go to the website editor - Add a Masonry block - Add a Form inner block in the Masonry block - Select any fields of the form - Set it's visibility to Hidden - Save # The problem The field is still visible. # Cause When a field has its visibility set to hidden, it is applied the `.s_website_form_field_hidden` CSS class which applies `display: none`. https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/snippets/s_website_form/001.scss#L26-L28 But that CSS rule is overriden by the masonry's `.s_masonry_block[data-vcss='001'] .row > div` CSS class. https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/snippets/s_masonry_block/001.scss#L1-L3 https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/scss/website.scss#L3246 # Proposed solution We set `display: none` with `!important` to prevent it from being overidden. We also need to add `!important` to its edit mode counter-part so that the field is still visible in that mode. opw-6038955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256100
24 changes
Resolved issues and error corrections
This update fixes an issue where vendor bills created in the Documents module defaulted to the company's currency instead of the vendor's. Now, when a vendor is selected in the Documents module, the bill automatically uses the vendor's currency, ensuring accurate financial reporting. This improves the consistency and reliability of our invoicing process.
Original PR description
**Issue:** When creating a vendor bill or vendor refund through the Documents module after selecting a supplier, the currency defaults to the company's currency instead of the vendor's. However, if the supplier is selected later in the Accounting module, the correct supplier currency is applied. **Steps to reproduce:** - In Documents, upload a bill. - Click on the bill and assign a vendor (whose supplier currency is different from the company's currency). - Click on "Create Vendor Bill". The used currency isn't that of the supplier. opw-4406074 Forward-Port-Of: odoo/enterprise#100846 Forward-Port-Of: odoo/enterprise#78380
This update fixes an issue where subscription discounts were incorrectly calculated due to how recurring plan prices were being used. The fix ensures discounts are accurately applied by dividing the base plan price by its unit, leading to more consistent and reliable pricing on the website. This improves the accuracy of subscription offers.
Original PR description
### Steps to reproduce: - Install Subscriptions and eCommerce modules - Create 3 recurring plans (3 months, 6 months, Yearly) - Create a service subscription product with the created recurring plans - Check the product's page on website - Notice each pricing has a discount tag and with incorrect numbers ### Cause: When calculating the discount we normally use the fixed price of the base plan as the price to compare with. This sometimes introduce inconsistencies if the base plan is not just one unit from the period (>1 week/month/year) ### Fix: We divide the base_plan_price by the unit of the plan so we can get the price of just one plan unit. opw-6048278 Forward-Port-Of: odoo/enterprise#112305
This update corrects a problem where overridden group names within the accounting module weren't being properly translated into the Odoo localization files (POT). Previously, the system used the standard 'account' translations, leading to inconsistencies. This fix ensures that accounting group names are now translated correctly, maintaining accurate localization across the system.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently. Forward-Port-Of: odoo/enterprise#113470 Forward-Port-Of: odoo/enterprise#112898
This update resolves a technical issue in the Lu reporting module that caused incorrect debit and credit calculations in exported financial reports (FAIA). The fix ensures that invoice line amounts are accurately represented, preventing validation errors and improving report accuracy. This ensures financial data is reported correctly.
Original PR description
This is one of several commits fixing the FAIA xml export: - #113452 - #113455 - #113846 When an invoice line has a negative `price_unit`, the `Invoice/Line/InvoiceLineAmount/Amount` element has a negative value. This causes validation errors when comparing the total debit or credit values (such as `SalesInvoices/TotalDebit`) to the individual amounts, as the sum of individual "debit" lines will include some credit amounts and vice versa. Solution: record if the line is actually a debit or a credit, then use the absolute value of the balance in the Amount element. opw-5427296 [Link](https://www.odoo.com/odoo/unassigned-tasks/5427296) Forward-Port-Of: odoo/enterprise#113316
This update ensures that when 'Hide Composition' is enabled on a section, the preview view accurately reflects the hidden products, aligning with the PDF report's behavior. The issue was resolved by updating the filtering logic to account for collapsed sections, preventing recurring subscription lines from being displayed.
Original PR description
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still…
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still visible in the portal's 'preview' view, whereas they are correctly hidden in the PDF report. **Expected behavior:** As observed in pdf format, in preview, the hidden section should hide the components and only view the name of the section. **Steps to reproduce:** - Create quotation with One Goods type product - Add section with Hide composition - Add service type product in the section - Preview it and section products will be hidden - Confirm the quotation and now preview the sales order - Now the hidden section products will be visible **Solution:** - We need to separate the logic of displaying lines and invoiceable lines (since _get_invoiceable_lines doesn't necessarily return the sections/subsections) - The filtering in sale subscription module wasn't considering the `collapse_composition` boolean field, which why hidden sections content were displayed. - We need to hide any product with a parent (section or subsection) collapsed, hide any subsection with a parent section collapsed. opw-5868148 Forward-Port-Of: odoo/enterprise#106287
This update fixes an issue where sales orders were incorrectly using the analytic distribution account from Company A instead of Company B when products were assigned to both. The change ensures that the correct company's project and analytic account are used, resolving potential discrepancies in financial reporting across multiple companies.
Original PR description
Pre-requisites: ------------------------------------------ 1. Install `sale_project` and `project_account_budget` modules 2. Have two companies configured in the system 3. Enable Timesheets from the…
Pre-requisites:
------------------------------------------
1. Install `sale_project` and `project_account_budget` modules
2. Have two companies configured in the system
3. Enable Timesheets from the Settings app
4. Create two projects (one for each company)
5. Ensure the following settings are enabled on both projects:
* Timesheets
* Billable
Steps to Reproduce:
------------------------------------------
1. Switched to Company A
2. Create a product with:
* Type: Service
* Create on Order: Task
* No company restriction
3. Set the product's `project_id` to Company A's project
4. Switch to the newly created company (Company B)
5. Set the product's `project_id` to Company B's project
6. Enable Analytic Distribution from SOL Optional
7. Create a sale order with the configured product, and delete the auto-fetched
Analytic Distribution account for the sale order (Company B's project)
8. Now confirm the sale order
Observation:
----------------------------------------
The SOL's analytic distribution uses the analytic account from Company A's project instead of Company B
Issue:
----------------------------------------
The `project_id` field on `product.template` is `company_dependent=True`, meaning it stores different values per company. However, in `_compute_analytic_distribution()`, the code accesses `line.product_id.project_id` without calling `with_company`, so it resolves the field using the wrong company context
Solution:
----------------------------------------
using `with_company()`, the correct company context is applied when accessing
`project_id`, preventing inconsistencies in multi-company environments and
ensuring the appropriate project is used for the corresponding company.
opw-5864452
Forward-Port-Of: odoo/odoo#257776This update resolves an issue preventing the creation of product feeds when only one website is enabled in Odoo. The fix sets a default website ID, addressing a technical limitation related to language settings that was blocking feed creation in single-website configurations. This ensures all users can utilize product feeds effectively.
Original PR description
Issue: --- Due to this issue, we cannot create a `product.feed` record in single website db. Steps to reproduce: 1- Create a fresh db with single website. 2- Enable Google Merchant Center. 3- Try to create a `website.feed` record. It's not possible to create the record due to language field. Cause: --- `website_id` is only shown in `group_multi_website`. When there is only one website set, there is no default value for the website. `lang_id`'s domain is also `website_id.language_ids`, as a result record creation will fail. opw-6110843
This update resolves an issue where spreadsheet pivots were crashing due to incorrect field type support. The team corrected a reliance on a single field property (`field.groupable`) and now properly handles all field types, preventing unexpected errors. This ensures greater stability and reliability for spreadsheet reporting.
Original PR description
Spreadsheet pivots only do not support all field types. But we were relying only on `field.groupable` to determine if a field could be grouped, which is wrong (eg. JSON fields can be groupable but are not supported). It leads to crashes for fields that were groupable, but didn't have an entry in `pivotNormalizationValueRegistry`. Added a test for all of the field types to ensure we have a correct behavior. Task: 6036075 Task: [6036075](https://www.odoo.com/odoo/2328/tasks/6036075) 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 Forward-Port-Of: odoo/odoo#258448 Forward-Port-Of: odoo/odoo#255571
This update fixes a technical error in the l10n_hr_edi module that prevented certain invoice sending constraints from being properly enforced. The issue stemmed from a previous typo that was missed during the update process. This ensures invoices are sent correctly and aligns with accounting regulations.
Original PR description
In 18.0, the `_check_move_constraints()` method contained a typo - `_check_move_constrains()` - and the module was developed with this in mind. The typo was fixed in 19.0, but this was missed during the forward port of this module, leading to additional constraints not triggering properly. ticket-6036500 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257492
A recent update to the MRP module has resolved a test failure that was occurring in automated builds. This change ensures that a key test – `test_basic_flow_with_minimal_access_rigths` – consistently passes, preventing potential disruptions to the system. This fix primarily addresses an internal build issue and doesn't directly impact users.
Original PR description
The test `test_basic_flow_with_minimal_access_rigths` fails in builds without `stock_barcode_mrp` since the `backorder_ids` mrp.production field is introduced in that module: https://github.com/odoo/enterprise/blob/92c584cc1426ac70f6f77aa8216c17004fa42d35/stock_barcode_mrp/models/mrp_production.py#L10 runbot-242465 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258837
This update removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, users were redirected to enable the feature, which wasn't suitable for all tax returns. Now, users can access all tax returns regardless of the GST e-filing setting, streamlining the process.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Ent PR: https://github.com/odoo/enterprise/pull/105983 Task-5486586 Forward-Port-Of: odoo/odoo#247216
This update fixes a bug where countdown snippets weren't visible in the website builder's preview dialog. The change ensures that the necessary interaction code is loaded within the preview environment, allowing countdown timers to display correctly. This improves the user experience when creating website content.
Original PR description
The content of the countdown snippet did not appear in snippets preview dialog, because the interaction that fills it was not loaded for preview. This commit adds the interaction in the registry for loading it inside the iframe of the snippets preview dialog. Steps to reproduce: - Open website builder - Drop a `s_text_image` snippet - Drop a `s_countdown` snippet inside - Save the first one as a custom snippet - Click on "Custom" snippets category - Bug: the countdown does not appear task-6088029 Forward-Port-Of: odoo/odoo#258916 Forward-Port-Of: odoo/odoo#257480
This update fixes an issue where 'View Quotation' buttons in email notifications were not consistently translated for recipients in different languages. The change dynamically adjusts the language context during email creation, ensuring accurate translation of all action buttons. This improves the user experience for international customers.
Original PR description
When sending a quotation or sales order via email to a follower, the action button in the notification (e.g., "View Quotation") was appearing partially translated in the recipient's language. The issue came from the document description being explicitly evaluated using the sender's language context usually English) during the email composition phase, so it could not be correctly re-translated by the mail engine when rendering the final layout for a recipient using a different language. This commit allows the language context to be dynamic when preparing the document description for the email composer, ensuring the action button is fully and accurately translated. --- opw-5976084 Forward-Port-Of: odoo/odoo#257349 Forward-Port-Of: odoo/odoo#256077
This update resolves an issue where clicking on records within the 'Forecasted' report in the product catalog didn't function correctly. The fix allows users to open and view the full details of stock records accessed through this report, improving usability and data access.
Original PR description
Steps to reproduce ================== - Install sale_stock - Go to Products - Open the "Acoustic Bloc Screens" record - Click on the Forecasted smart button - Click on "three quotations" - Click on a record => Nothing happens opw-6095229 Forward-Port-Of: odoo/odoo#258157
This update resolves an issue where multiple employee expenses were incorrectly sharing attachments. The fix ensures that each vendor bill accurately reflects the attachments associated with the specific expense it's linked to, preventing duplicate files in journal entries. This improves data accuracy and simplifies expense reporting.
Original PR description
Steps to reproduce: 1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2). 2. Upload different attachments to each (e.g., 2 files for A, 3 files…
Steps to reproduce:
1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2).
2. Upload different attachments to each (e.g., 2 files for A, 3 files for B).
3. Select both expenses and use the 'Post' action to open the posting wizard.
4. Click 'Post' in the wizard.
5. Check the generated journal entries (vendor bills).
Result: Both vendor bills contain all 5 attachments (copies of A's files and copies of B's files).
Issue:
In `_prepare_bills_vals`, `self.attachment_ids` is collected before the
`grouped('employee_id')` loop (see: https://github.com/odoo/odoo/blob/6b7fff433335edf7459f7a6eb5c274c0f4d5d1df/addons/hr_expense/models/hr_expense.py#L1572-L1578).
Since `self` refers to the full expense recordset, `self.attachment_ids` returns
the union of all attachments across every expense. This combined list is then
assigned to every bill created inside the loop, causing attachments from one
employee's expenses to leak into another employee's journal entry.
opw-6056590
Forward-Port-Of: odoo/odoo#258784
Forward-Port-Of: odoo/odoo#256031This update streamlines the loading of data for the self-ordering point-of-sale system. By only retrieving the necessary information, the system now runs more efficiently, particularly during self-ordering transactions. This change improves the overall responsiveness and performance of the self-ordering feature.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257865
This update fixes an issue where the invoice report header overlapped with data on multi-page PDFs. By conditionally applying a responsive class only to HTML views, the system now correctly repeats the header row across pages, ensuring readability on mobile devices. This improves the user experience for invoices with many lines.
Original PR description
This commit: https://github.com/odoo/odoo/commit/ad6351c Wrapped the invoice line table in a `<div class="table-responsive-sm">` to enable horizontal scrolling on mobile. However, Bootstrap's…
This commit: https://github.com/odoo/odoo/commit/ad6351c Wrapped the invoice line table in a `<div class="table-responsive-sm">` to enable horizontal scrolling on mobile. However, Bootstrap's `table-responsive-sm` sets `overflow-x:auto` on the container, which prevents wkhtmltopdf from repeating the `<thead>` across page breaks. On pages 2+, the header row (Description, Quantity, Unit Price, Amount) renders on top of the first data row instead of appearing as a separate repeated header. Made the `table-responsive-sm` class conditional on `report_type == 'html'` so it only applies in HTML views where mobile scrolling is needed, and is omitted for PDF rendering. This follows the same pattern already used throughout the invoice template for other responsive classes. Steps to reproduce: 1. Create an invoice with enough lines to span multiple pages 2. Print the invoice as PDF => On page 2+, the table header overlaps with the first data row, making both unreadable. Ticket [link](https://www.odoo.com/odoo/action-4043/5867972) opw-5867972 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that all participant answers are consistently included when printing surveys, regardless of the survey type. Previously, certain survey types would omit answers, leading to inaccurate and incomplete reports. This change improves the reliability and usefulness of survey data for analysis and reporting.
Original PR description
Previously, printing surveys of type scoring_without_answers omitted participants' answers, resulting in incomplete and inconsistent reports. This commit ensures answers are always included, regardless of survey type. Task-5407701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258616
This update ensures that stock lot generation accurately reflects the product's packaging (e.g., 'Pack of 6') instead of defaulting to the base unit of measure. Previously, the system incorrectly calculated quantities, leading to inaccurate lot creation. This fix improves inventory accuracy and order fulfillment.
Original PR description
Steps to reproduce the issue:
- Enable "Units of Measure" and "Lots & Serial Numbers" in the inventory settings
- Create a storable product "P1":
- Tracking: Lot
- UoM: Unit
- Sales tab: Packagings > Pack of 6
- Create a receipt with 3 packs of 6 of P1
- Mark it as "To Do"
- Open the detailed operations and click on the "Generate Serials/Lots" button:
- First lot: Lot 1
- Quantity per Lot: 3 packs of 6
- Quantity received: 3 packs of 6
- Click on "Generate"
Problem:
A stock move line is created with 3 units instead of 3 packs of 6, because the UoM is not passed from the JavaScript side to the Python side. As a result, the default product UoM (Unit) is used.
opw-5933277
Forward-Port-Of: odoo/odoo#258392This update corrects a technical issue preventing proper import of Nilvera electronic invoices. The team renamed a method in the core Odoo system to align with a recent change, and this PR ensures the Nilvera module's override reflects that update. This ensures Nilvera invoices are imported correctly.
Original PR description
# Description of the issue/feature this PR addresses The parent class `account.edi.xml.ubl_20` renamed `_import_fill_invoice_form` to `_import_fill_invoice`. The override in `l10n_tr_nilvera_einvoice` was not updated to match, causing the override to be silently ignored. # Current behavior before PR The `_import_fill_invoice_form` override in `l10n_tr_nilvera_einvoice` is never called because the parent method no longer exists under that name. # Desired behavior after PR is merged The override is renamed to `_import_fill_invoice` to match the parent class, restoring correct behaviour for Nilvera invoice imports. task-id: None --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258752 Forward-Port-Of: odoo/odoo#258097
This update resolves an unexpected access rights error that occurred when users created email campaigns with dynamic fields. The issue stemmed from a technical detail in how the system inlined styling within email templates, leading to a false security alert. This change ensures smoother email campaign creation for all users.
Original PR description
This commit fixes an unexpected access rights error when users try to add simple dynamic fields allowed by mail_allowed_qweb_expressions to mass_mailing emails. During the convert_inline process, the…
This commit fixes an unexpected access rights error when users
try to add simple dynamic fields allowed by mail_allowed_qweb_expressions
to mass_mailing emails.
During the convert_inline process, the <t t-out=""/> placeholder element
has its style inlined, and attributed to its style attribute.
This style attribute was not filtered out during the safety
check process, resulting in the templating engine believing a disallowed
directive was used.
Steps to reproduce:
- On a fresh 18.0+ install with demo data, login as Marc Demo
- Access the Email Marketing app
- Create a new mailing campaign
- Set sending to Newsletter or Mailing Contact
- Type /field to add a dynamic value
- Set it to Name
- Save the mailing
- An access rights error is raised due to the user not having
group_mail_template_editor permissions and the dynamic placeholder
node having a style attribute
Fix:
T nodes are no longer granted a style attribute during style inlining.
Forward-Port-Of: odoo/odoo#257992
Forward-Port-Of: odoo/odoo#226111This update fixes an issue where portal users couldn't edit messages within the project chatter. The fix prevents a technical error (a 'null' value issue) that occurred when attempting to edit a message, ensuring portal users have the full functionality to manage their project communications.
Original PR description
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a…
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a Task T 3. In the Setting of Project P, click *Share Project* and select a portal user 4. Logged as a portal user, open Task T, send a message in the chatter, then try to edit it by clicking the *Edit* (pencil) button. 5. **Nothing happens, but a traceback appears in the console: _Caused by: TypeError: Cannot read properties of null (reading 'id')_** ## Cause The condition causing this error is the following: https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L9-L13 where `this.thread` is not defined yet. Other conditions in this patch check for `this.thread` before trying to read its `id` [[1](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L25), [2](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L32)], which leads to believe that the check was simply forgotten in this condition. opw-6072570 Forward-Port-Of: odoo/odoo#258234
This update resolves an issue where searching for tags on tasks in the portal caused a system crash. The fix restricts how domain modifications are applied, ensuring the system correctly handles tag searches within task relational fields. This improves the stability and usability of the task management feature for portal users.
Original PR description
Steps to reproduce: -------------------------- 1. Install Project and create a portal user. 2. Create a project and a task with tags added to it. 3. Share the project with the portal user (Edit…
Steps to reproduce:
--------------------------
1. Install Project and create a portal user.
2. Create a project and a task with tags added to it.
3. Share the project with the portal user (Edit access).
4. Log in as the portal user and open the task.
5. Click on the 'Tags' field and select 'Search More'
Issue:
----------
A traceback occurs:
```ValueError: Invalid field project.tags.display_in_project in condition ('display_in_project', '=', True)```
Cause:
----------
The [ProjectTaskRelationalModel](https://github.com/odoo/odoo/blob/75fd7b05766c6789bf311f6a8257b89ecf4f86de/addons/project/static/src/views/project_task_relational_model.js#L4-L7) calls `_processSearchDomain.`
This method automatically appends a domain when 'showSubtasks' is not enabled.
https://github.com/odoo/odoo/blob/75fd7b05766c6789bf311f6a8257b89ecf4f86de/addons/project/static/src/views/project_task_model_mixin.js#L5-L12
When clicking 'Search More' on the 'Tags' field, the same domain is
applied to the **project.tags** model. However, since **project.tags**
does not have the `display_in_project` field, the ORM raises a ValueError.
In portal, only `project.webclient` assets are loaded, causing
ProjectTaskRelationalModel to be used for all relational fields.
In contrast, internal users use the standard RelationalModel, so the
issue does not occur.
Solution:
-------------
Restrict the domain modification in _processSearchDomain to apply only
when the current model is `project.task` and `report.project.task.user`.
opw-5930427
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#258656
Forward-Port-Of: odoo/odoo#249282This update resolves an issue where Point of Sale users couldn't successfully refresh their Viva.com payment tokens, leading to errors when making payments. The fix ensures that the refreshed token is persistently stored, allowing Viva payments to continue working smoothly even after the initial token expires or is invalidated.
Original PR description
Point of Sale users only have read access on pos.payment.method. When the stored Viva.com bearer token expires or the API returns invalid credentials, _bearer_token() fetches a new token . That write ran as the POS user and raised an AccessError, although the user was only paying—not editing configuration. Steps to reproduce: ------------------- * Configure Viva.com as payment method. * Open the POS as a user with only Point of Sale / User (not Administrator). * Pay with Viva until the OAuth token must be refreshed (e.g. after expiry or after Viva rejects the current token). > Observation: AccessError: You are not allowed to modify 'Point of Sale Payment Methods' (pos.payment.method) records. Why the fix: ------------ Persist the refreshed viva_com_bearer_token with sudo().write() so the ORM does not require write ACL on pos.payment.method for that internal side effect of an already authorized Viva RPC. opw-6078131 Forward-Port-Of: odoo/odoo#257842
3 changes
Resolved issues and error corrections
This update prevents subscriptions from being automatically reopened after manual closure by a salesperson. Previously, approvals or payments could trigger reopening, leading to inconsistencies. This change ensures subscriptions remain closed as intended, streamlining the subscription management process.
Original PR description
Before this commit, when a subscription was closed manually by the salesperson, it could be reopened when a transaction was approved or an invoice paid. It could cause issue. In this case, we should not reopen automatically. task-5900481 Forward-Port-Of: odoo/enterprise#106487
This update fixes an issue where overridden group names within the accounting module weren't being properly translated into the Odoo localization files (POT). The fix ensures that translated names are exported correctly, preventing inconsistencies between the English source strings and the translated versions. This maintains accurate translations across the system.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently. Forward-Port-Of: odoo/enterprise#113470 Forward-Port-Of: odoo/enterprise#112898
This update fixes a previous issue where quick checkout was disabled for event and appointment sales. We've refined the process to automatically enable quick checkout for these events, recognizing that billing addresses are typically tied to the event location rather than the customer. A system parameter allows businesses to retain full billing address details if needed.
Original PR description
Forward-Port-Of: odoo/enterprise#113575
6 changes
Resolved issues and error corrections
A previous error caused a blank page when users clicked the 'Check the sample button' in the sales module. This was due to a change in the link to the sample quotation PDF. This update provides a valid link, resolving the issue and ensuring users can access the sample.
Original PR description
Currently, a 404 error is occurring when the user clicks on the Check the sample button. **Steps to produce:** - Install sales module without demo data. - Click on the check a sample. its clean! button. **Issue:** - A 404 error occurs with a blank page. **Cause:** - This issue is occurring because the link to open the sample quotation pdf was changed in the Odoo documentation. **Solution:** - Give a valid link to open the sample quotation pdf. - similar fix already did [here1] & [here2]. [here1]: https://github.com/odoo/odoo/commit/38431f3aef57c5b91644b4c5241f226beb917b12 [here2]: https://github.com/odoo/odoo/commit/610cea89c37454a4ddb68939333b4b363f2f81a2 opw-6099641 opw-6074953 Forward-Port-Of: odoo/odoo#258984 Forward-Port-Of: odoo/odoo#258003
This update resolves an issue where hidden fields within masonry blocks in the website editor were still visible. The fix involves adding '!important' to the CSS rule that hides these fields, ensuring they are truly hidden as intended. This improves the consistency and usability of the website editor.
Original PR description
# How to reproduce - Go to the website editor - Add a Masonry block - Add a Form inner block in the Masonry block - Select any fields of the form - Set it's visibility to Hidden - Save # The problem…
# How to reproduce - Go to the website editor - Add a Masonry block - Add a Form inner block in the Masonry block - Select any fields of the form - Set it's visibility to Hidden - Save # The problem The field is still visible. # Cause When a field has its visibility set to hidden, it is applied the `.s_website_form_field_hidden` CSS class which applies `display: none`. https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/snippets/s_website_form/001.scss#L26-L28 But that CSS rule is overriden by the masonry's `.s_masonry_block[data-vcss='001'] .row > div` CSS class. https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/snippets/s_masonry_block/001.scss#L1-L3 https://github.com/odoo/odoo/blob/995629db3231de944710751c3184bf1b8b1355c7/addons/website/static/src/scss/website.scss#L3246 # Proposed solution We set `display: none` with `!important` to prevent it from being overidden. We also need to add `!important` to its edit mode counter-part so that the field is still visible in that mode. opw-6038955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256100
This update resolves an issue where the chat composer on mobile devices would become unresponsive when the navigation menu was open. The fix prevents the navigation menu from stealing focus from the composer, ensuring users can consistently access and use the chat feature. This improves the mobile user experience.
Original PR description
**Description of the issue this PR addresses:** On mobile devices, the chat composer becomes unresponsive when the navigation menu `navbar-toggler` is open.…
**Description of the issue this PR addresses:** On mobile devices, the chat composer becomes unresponsive when the navigation menu `navbar-toggler` is open. https://github.com/user-attachments/assets/8ef01ec6-4a44-41d3-8b86-74f68caf47ef Steps to reproduce: 1. Open the website in a mobile view. 2. Tap the navbar toggler to open the mobile menu. 3. Without closing the menu, open the chat window. 4. Tap on the message composer text area. → The composer is not accessible. This happens because the bootstrap `Offcanvas` (used by the `navbar-toggler`) traps focus by listening for `focusin` events bubbling up to the document. When the composer is tapped, the Offcanvas intercepts the event and immediately steals focus back to itself, dismissing the virtual keyboard. This commit stops propagation of the composer `focusin` event so the Offcanvas focus trap does not steal focus from the composer. Thread focus state can also depend on `focusin` bubbling from the composer to the thread component. Since that bubbling is now stopped, the shared thread focus state is tracked through the JS models instead: - composer focus updates the related thread through `composer.thread` - thread component focus updates the thread model directly. This keeps the composer accessible while preserving thread focus behavior. Related: https://github.com/odoo/enterprise/pull/113763 Task-5954657 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258713 Forward-Port-Of: odoo/odoo#250294
This update resolves a technical bug in the AI composer that was causing crashes. The fix ensures that focus events are correctly passed to the base handler, maintaining stability and functionality. This change was necessary due to an update in how the mail composer handles focus events.
Original PR description
**Purpose of this PR:** The AI composer patch overrides `Composer.onFocusin()` but did not forward the focus event to the base handler. This used to be harmless while the base mail composer focus handler did not use the event. Since odoo/odoo#258974, the mail composer now uses the event to stop `focusin` propagation, so dropping it makes the base handler crash when AI composer focus is triggered. This commit fixes the AI composer patch by forwarding the focus event to the base handler, preserving the expected handler contract. Related: odoo/odoo#258974 Task-5954657
A recent test was unreliable due to inconsistent results, impacting the accuracy of partner data. This fix ensures the test is deterministic, guaranteeing consistent results regardless of changes to Belgium company IDs. This improves the overall stability and reliability of the partner autocomplete feature.
Original PR description
The newly added test `test_enrich_by_duns_with_incorrect_vat` was not deterministic https://github.com/odoo/odoo/commit/9c89391848ed00de91f3caa8ba6876ec0002d064 This commit ensure the consistency if the id of belgium change opw-6030164
This update resolves a bug in the HTML editor's color picker that was causing tests to fail. The issue stemmed from different color tab behavior between the community and enterprise versions of Odoo. This change ensures consistent test results across all Odoo environments.
Original PR description
Purpose of this PR: Color picker opens different tabs by default because inline code uses a custom color `-900`. In community it opens the custom tab, while in enterprise it opens the solid tab. This caused the test to fail in community when selecting a color from the solid tab. runbot-242556 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
2 changes
Resolved issues and error corrections
This update fixes an issue where website date defaults were using the wrong timezone. The change ensures dates are correctly converted back to the website's timezone before displaying them to users, improving the accuracy of rental and sales information. This ensures consistent and reliable date presentation.
Original PR description
should be converted from website tz as they're going to be converted back by the front-end to that specific timezone. Runbot issue: 234756 Forward-Port-Of: odoo/enterprise#102153
A bug was preventing users from deleting timesheets when a confirmation dialog was open. This was caused by the timer incorrectly responding to the Enter key. This update ensures the delete confirmation dialog functions as expected, allowing users to properly remove timesheet entries.
Original PR description
When a delete confirmation dialog is open in the timesheet list view, pressing Enter starts/stops the timer instead of confirming the dialog. This happens because the timer's window keydown handler does not check for active modals before intercepting the Enter key. Add a `.modal` check consistent with the grid renderer's onKeyDown. Steps to reproduce: 1) Open timesheet list view 2) Select a record and delete it 3) When the confirmation dialog opens, hit ENTER key Current behavior: The Timer starts recording timesheet Expected behavior: The record should be deleted For ref: https://youtu.be/tzm_3RNe1ig Forward-Port-Of: odoo/enterprise#112583
5 changes
Resolved issues and error corrections
This update resolves a test failure related to inventory management rules for inter-company transactions. The issue stemmed from a dependency on demo data that was not present in standard environments. The fix ensures the test runs correctly when using a clean database, improving the reliability of our inventory processes.
Original PR description
*: sale_purchase_stock_inter_company_rules ### Steps to reproduce: - Create a DB without demo data - Install stock_dropshipping, sale_purchase_stock_inter_company_rules - Run the test `test_08_dropship_inter_company_vendor_to_customer` ### Issue: The test `test_08_dropship_inter_company_vendor_to_customer` fails here: https://github.com/odoo/enterprise/blob/fd3c9d894d8821ed1d1a110cdffb5e16fb54590a/sale_purchase_stock_inter_company_rules/tests/test_inter_company_po_to_so.py#L497-L501 since the `lot_ids` are only visible for users with the `stock.group_production_lot` group: https://github.com/odoo/odoo/blob/544961c1c6db254c4292d88096bdf9363e35f0bc/addons/stock/views/stock_picking_views.xml#L310-L318 And this group is only implied with demo data: https://github.com/odoo/odoo/blob/544961c1c6db254c4292d88096bdf9363e35f0bc/addons/stock/data/stock_demo.xml#L190-L193 opw-6085811
This update fixes an issue where appointment booking descriptions were displayed in the user's language instead of the website's language (French). The fix ensures that appointment details are shown in the correct website language, regardless of the user's language settings, improving the user experience for international customers.
Original PR description
When booking an appointment, the cart shows the date/time in the partner's language instead of the website's language. `_prepare_order_line_values` uses `self.partner_id.lang`, ignoring the website language and using the user's language instead. Steps to reproduce: 1. Have a website language different than the user's language 2. Go to the website appointment page 3. Book an appointment 4. Check the booking For this case: - Website language: French - User language: English => You will find, "xxx at xx:xx to yyy at yy:yy" instead of "xxx à xx:xx au yyy à yy:yy" Ticket [link](https://www.odoo.com/odoo/action-4043/5931610) opw-5931610 Forward-Port-Of: odoo/enterprise#113208 Forward-Port-Of: odoo/enterprise#107698
This update ensures that overridden group names within the accounting module are correctly translated and exported to the Odoo POT file. Previously, translations were inconsistent due to a missing configuration, leading to mismatched strings. This fix guarantees accurate translations across the entire system.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently. Forward-Port-Of: odoo/enterprise#113470 Forward-Port-Of: odoo/enterprise#112898
This update prevents the creation of unnecessary document folders when working with archived projects, such as template projects used for service products. Previously, attempting to access these archived projects would trigger an error and halt the system. Now, folders are only created for active projects, streamlining the process and avoiding potential issues with duplicate folder creation.
Original PR description
## Purpose When `_create_missing_folders()` runs on an archived project (e.g. a template project referenced by a service product's `project_template_id`), it creates a document folder that serves no…
## Purpose
When `_create_missing_folders()` runs on an archived project (e.g. a template project referenced by a service product's `project_template_id`), it creates a document folder that serves no purpose — archived/template projects are never accessed directly.
If that folder later gets trashed (manually or otherwise), SO confirmation fails with:
> UserError: You cannot duplicate document(s) in the Trash.
This happens because `documents_project`'s `copy()` override tries to duplicate the template's `documents_folder_id`, and `documents.document.copy()` rejects trashed documents. The entire SO confirmation transaction rolls back — no project is created.
## Specification
Filter out archived projects in `_create_missing_folders()` so folders are only created for active projects that will actually use them.
New projects created from a template still get their own folder: after `copy()` returns, the project gets written to (name, analytic account, etc.), and `write()` calls `_create_missing_folders()` on the **new active project**, creating a fresh folder under the company's default project folder.
## Technical
One-line change: `for project in self:` → `for project in self.filtered('active'):`
The fix is in `_create_missing_folders()` rather than `copy()` because:
- `copy()` already has a guard (`if old_project.documents_folder_id`) — it's `_create_missing_folders()` that keeps recreating the folder on archived templates
- Even if the folder is cleared or unarchived via migration, `_create_missing_folders()` recreates it on the next `write()` to the template project, restarting the cycle
opw-6071771This update resolves an issue where the 'Share' function in the Documents app only processed the currently displayed files. The fix ensures that all selected documents are included when sharing, preventing rights modifications from being applied inconsistently. This improves the reliability of the sharing process.
Original PR description
**Steps to reproduce:** - Install Documents app - Upload more than 80+ files (max page size is 80) - Use the checkbox to select all files on the page - Click the 'Select All' button in the control panel to select allfiles - Use Share action button - Pop-up only takes the current page into account - Rights modifications will not be applied on remaining records **Issue:** `onShare()` only takes current records into account even if the full selection was applied. **Fix:** Fetch all document ids (if needed) before opening the dialog. opw-5957777
17 changes
Resolved issues and error corrections
This update corrects a flaw in how Odoo calculates available booking slots when integrating with Google Reserve. The previous system incorrectly reserved the full party size for each resource, leading to inaccurate capacity displays. The fix ensures that Odoo accurately determines and reserves the appropriate number of slots for each booking, improving the scheduling process.
Original PR description
The current logic inside the appointment google reserve controller to compute reserved and used capacity per resource was incorrect. It was reserving the full party size for each resource instead of properly computing how much spots we are reserving for each. The code was fixed and a test was adapted for proper coverage. Task-6120016
This update corrects a display issue in the Batch Payment reports. Previously, the report would include default placeholder text ('ABC Holder Name' and 'Demo Ref') when the Account Holder Name field was left blank. This change ensures that the report is clean and accurate when the Account Holder Name is not specified, improving the professional appearance of generated invoices.
Original PR description
**Steps to reproduce:**
- Install the `account_batch_payment` module.
- Navigate to Invoicing > Customers > Payments.
- Create a new payment with `Payment Type: Send` and
select a customer without setting an `Account Holder Name`.
- Create a batch payment including this payment.
- From the gear icon, click `Print Batch Payment`.
**Observation:**
In the generated report:
- `Account Holder Name` shows `ABC Holder Name`.
- `Memo` shows `Demo Ref`.
**Root Cause:**
At [1], the default demo values ("ABC Holder Name", "Demo Ref") are rendered
when the fields are empty, instead of being left blank.
**Fix:**
This commit ensures that the `Account Holder Name` and `Memo` are `blank`
in the printed Batch Payment report when their values are not set.
[1]:
https://github.com/odoo/enterprise/blob/327d4478128f33fb2e0c477533bd4983178abf17/account_batch_payment/report/account_batch_payment_report_templates.xml#L36-L38
opw-6092595This update resolves an issue where the checkout process became unresponsive when using the Brazilian Avatax tax calculation. The previous implementation unnecessarily called external tax APIs, leading to errors that prevented users from completing their purchases. This fix removes the unnecessary API call, restoring the checkout functionality.
Original PR description
Issue: --- The extra external_tax call introduced in odoo/enterprise#101579 is causing multiple issues: 1- It doesn't catch errors while `_get_and_set_external_taxes_on_eligible_records` easily raises errors, causing uncatch errors in `website_sale`. 2- Extra unnecessary external api call in non-express checkout methods which is not desirable. Steps to reproduce: --- 1- Install l10n_br_avatax_sale, website_sale 2- Using a public user, add a product to cart and got to checkout. 3- In the address form, use CPF identification type. Outcome: The confirm button is unresponsive. Cause: --- This is due to uncatch error raised by external tax call, while it was not necessary at this step of this flow to call external tax api. opw-6005767 Forward-Port-Of: odoo/enterprise#112515
This update resolves an issue preventing Point of Sale (PoS) users from accessing the sinvoice symbol within the Odoo system. The change adds the necessary access rights, allowing PoS staff to utilize this important feature. This ensures PoS operations can fully leverage the edi functionality.
Original PR description
Add access right for sinvoice symbol so that PoS user can access to it.
This update corrects a visual issue in the product expiry module where all products without removal dates were incorrectly highlighted in red. Now, only products with expired lots/serials or quantities below zero will be flagged as expired, ensuring accurate product tracking and inventory management. This change improves the usability of the product expiry feature.
Original PR description
**Description of the issue/feature this PR addresses:** Install product_expiry and have products in stock with a quantity greater than 0 and not having any serial or lot configuration. **Current behavior before PR:** All lines which have no valid removal_date set (normally just those which are to be subject to be expired) will be marked red. **Desired behavior after PR is merged:** The tree view is showing as intended only if a product lot/serial is expired or a quantity less than zero will be marked red. Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258980
This update resolves a technical issue where the 'Back to edit mode' link in the land portal invoice section of the Invoicing app was incorrectly directing users to the wrong application. By switching to the correct action, the system now reliably directs users to the Invoicing app, ensuring a smoother user experience.
Original PR description
The "Back to edit mode" link used action_move_out_invoice_type, which isn't bound to any menu, so the backend fell back to whichever app happened to match (e.g. Website when installed) instead of Invoicing. Switch to action_move_out_invoice (the one referenced by the Invoicing menu) so the webclient resolves the correct app automatically. task-5882256
This update ensures that the system only generates supported documents for Odoo partners who are correctly identified as participating in Nemhandel. Previously, the process would incorrectly attempt to generate documents for invalid partners, leading to test failures. This change improves data accuracy and stability.
Original PR description
The method to fill the supported documents of a partner was called even if it was not a valid Nemhandel participant. This would cause some test to fail as the call was unexpectedly done on tests without any setup for it.
This update fixes an issue where payments weren't automatically updating to 'paid' status after bills were fully reconciled, particularly when early payment discounts were involved. The change ensures payments accurately reflect the status of associated bills, preventing delays in financial reporting and improving payment tracking accuracy.
Original PR description
Currently, payments may remain in the 'in_process' state even when the associated vendor bills are fully paid. This occurs primarily when using early payment discounts (EPD) and journals without…
Currently, payments may remain in the 'in_process' state even when the associated vendor bills are fully paid. This occurs primarily when using early payment discounts (EPD) and journals without outstanding accounts. Steps to reproduce: - Create an early payment term. - Create a Vendor Bill with EPD and post it. - Register a payment for this bill (no outstanding account set on journal => no move created). - Create a bank transaction fully paying the bill. - Reconcile the transaction with the bill. Issue: Access the payment of the bill. The payment state remains 'in_process' instead of 'paid'. Analysis: The issue occurs because the reconciliation process misses the trigger to set the payment state to 'paid'. Specifically: - The payment amount does not match the bill total due to the EPD. - The payment compute method does not monitor 'reconciled_bill_ids', causing it to ignore the status of linked vendor bills. This change adds 'reconciled_bill_ids' to the compute dependencies and ensures that if a payment is reconciled with any moves (invoices or bills), their payment_state is considered to determine the final state of the payment. opw-5881976 Backport of https://github.com/odoo/odoo/commit/4d84b961cdabd283e1acef6b487b2648bc543a5a
This update resolves an issue where printing surveys without answer scoring would leave out participant responses, leading to inaccurate reports. The change ensures all survey answers are consistently included when printing, providing complete and reliable data. This improves the quality and trustworthiness of survey results.
Original PR description
Previously, printing surveys of type scoring_without_answers omitted participants' answers, resulting in incomplete and inconsistent reports. This commit ensures answers are always included, regardless of survey type. Task-5407701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258616
This update fixes a technical issue where multiple emails with the same identifier could be created, leading to data duplication. The change ensures that Odoo correctly handles concurrent email processing by checking for existing records before creating new ones, preventing these duplicates. This improves data accuracy and efficiency.
Original PR description
Concurrent processing of emails with the same `Message-Id` can create duplicate records. ### Steps to reproduce 1. Configure multiple mail aliases (e.g., two helpdesk teams). 2. Send one email with…
Concurrent processing of emails with the same `Message-Id` can create duplicate records. ### Steps to reproduce 1. Configure multiple mail aliases (e.g., two helpdesk teams). 2. Send one email with both aliases as recipient. The Mail Transfer Agent may invoke `odoo-mailgate.py` once per recipient, resulting in concurrent processing of the same email in separate transactions. We expect one record per alias/team, but duplicates may be created. ### Cause This is a race condition in the `Message-Id` deduplication logic, caused by concurrent transactions and PostgreSQL snapshot isolation. Odoo uses the `REPEATABLE READ` isolation level. This means that each transaction takes a snapshot of the database at its first query and cannot see changes committed by other concurrent transactions. When two concurrent transactions process the same email: 1. Both enter `message_process` and take their snapshot. 2. Both search for the `Message-Id`. Because their snapshots don't include each other's work, both find nothing. 3. Both create records. Even if one transaction commits before the other performs the check, the second transaction still uses its original stale snapshot and create duplicates. ### Fix After the initial duplicate check, attempt to acquire a transactional advisory lock on a hash of the `Message-Id` using `pg_try_advisory_xact_lock`. If another transaction is already processing the same email and holds the lock, the call returns false and the email is treated as a duplicate. If the lock is acquired, processing continues as normal. opw-5116492 Forward-Port-Of: odoo/odoo#250027
This update fixes a discrepancy in the 'To Pay' dashboard metrics by including receipts alongside invoices and refunds. Previously, the dashboard didn't accurately reflect the total amount to pay due to missing receipt data. This ensures the dashboard numbers align with the detailed records available in the action view.
Original PR description
- The "To Pay" section in the purchase/sales dashboard was only considering invoices(`in_invoice` and out_invoice) and refunds(`in_refund` and `out_refund`) when computing the number and amounts to pay. - However, the corresponding action view includes receipts (`in_receipt` and `out_receipt`), leading to an inconsistency where the dashboard count and amount did not match the records shown after clicking. - This commit updates the dashboard query to also include receipts, ensuring consistency between the displayed metrics of the coreesponding purchase/sales dashboard and the action view. Related PR: https://github.com/odoo/enterprise/pull/111142 taskID-6040828
This update fixes an issue preventing Odoo from correctly processing German hybrid-style invoices through the Peppol exchange. The change ensures the 'zugferd' format is handled correctly, aligning it with the 'facturx' format and resolving a potential processing failure. This improves the accuracy of invoice data exchange.
Original PR description
The 'zugferd' key was missing from the `_get_customization_ids` mapping, causing potential failures when attempting to identify the correct CustomizationID for German hybrid-style invoices being processed through the Peppol exchange. This is because the 'zugferd' format was wrongly considered as peppol edi format, whereas it should behave like the 'facturx' format and be excluded from the peppol edi formats. opw-6009214 Forward-Port-Of: odoo/odoo#256696
This update ensures that tax amounts are accurately calculated when users group lines on an invoice. Previously, discrepancies in tax could occur. The changes also streamline the process by removing a redundant context key and updating a key test case to reflect Belgian tax regulations.
Original PR description
[FIX] account_edi_ubl_cii: correct tax amount when grouping lines When the user group lines of a move, the tax amount is now corrected if there's a difference in the tax amount before and after grouping This commit also removes the `ungroup_lines` context key, as the flow was changed in odoo/odoo#252458 Reword the `test_import_and_group_lines_by_tax` test: use belgian company and belgian taxes task-5993555 Forward-Port-Of: odoo/odoo#252719
This update fixes a technical issue preventing the correct calculation of the REAGYP deductible amount for Spanish farmers filing their SII tax returns. The update ensures that the compensation amount (ImporteCompensacionREAGYP) is now included in the total deductible quota, ensuring accurate reporting to the Spanish tax authority (AEAT).
Original PR description
Currently, the deducible amount for REAGYP is not passing through to the AEAT. This happens because the REAGYP compensation amount (ImporteCompensacionREAGYP) was missing from the total deductible quota calculation in the SII JSON payload. To fix this, we add 'sujeto_agricultura' to the list that cheks if the tax value for l10n_es is in the list task-6072773 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256586
This update resolves an issue where Odoo prevented the posting of vendor bills with numbers that didn't follow a strict, sequential order. This was due to the system's hashing logic, which requires continuous numbering. Now, vendor bills from third parties with varying document numbers can be processed correctly.
Original PR description
**Steps to reproduce** Install modules l10n_ar and l10n_latam_invoice_document. Go to Accounting > Configuration > Journals and enable \"Lock Posted Entries with Hash\" on a Purchase journal that…
**Steps to reproduce** Install modules l10n_ar and l10n_latam_invoice_document. Go to Accounting > Configuration > Journals and enable \"Lock Posted Entries with Hash\" on a Purchase journal that uses LATAM documents. Create and post a vendor bill with a high document number (e.g., '00001-00009999'). Create another vendor bill with a lower document number (e.g., '00001-00000100') and try to post it. **Issue** Posting the second vendor bill fails with a UserError: \"This move could not be locked either because some move with the same sequence prefix has a higher number. You may need to resequence it.\" This happens because core Odoo hashing logic enforces a strict, continuous sequential numbering per journal and prefix. The _get_chain_info method identifies moves to be secured by searching for entries with a sequence number strictly greater than the last hashed move in that chain: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4091-L4145 When a vendor bill is entered with a lower number than an already hashed one, it is excluded from the search, triggering the no_document warning: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4140 And the subsequent UserError in _get_chains_to_hash: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4180-L4184 Similarly, jumps in vendor numbering trigger a gap warning: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4130 Causing the error at: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4185-L4188 Since vendor bills are issued by third parties, we do not control their sequence, and forcing them into a single continuous chain is functionally incorrect. opw-6076673
This update resolves an issue preventing the posting of vendor bills with non-sequential document numbers. The system previously enforced strict sequential numbering, causing errors when bills didn't follow this pattern. This change allows for more flexible vendor bill numbering, aligning with typical business practices.
Original PR description
**Steps to reproduce** Install modules l10n_ar and l10n_latam_invoice_document. Go to Accounting > Configuration > Journals and enable \"Lock Posted Entries with Hash\" on a Purchase journal that…
**Steps to reproduce** Install modules l10n_ar and l10n_latam_invoice_document. Go to Accounting > Configuration > Journals and enable \"Lock Posted Entries with Hash\" on a Purchase journal that uses LATAM documents. Create and post a vendor bill with a high document number (e.g., '00001-00009999'). Create another vendor bill with a lower document number (e.g., '00001-00000100') and try to post it. **Issue** Posting the second vendor bill fails with a UserError: \"This move could not be locked either because some move with the same sequence prefix has a higher number. You may need to resequence it.\" This happens because core Odoo hashing logic enforces a strict, continuous sequential numbering per journal and prefix. The _get_chain_info method identifies moves to be secured by searching for entries with a sequence number strictly greater than the last hashed move in that chain: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4091-L4145 When a vendor bill is entered with a lower number than an already hashed one, it is excluded from the search, triggering the no_document warning: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4140 And the subsequent UserError in _get_chains_to_hash: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4180-L4184 Similarly, jumps in vendor numbering trigger a gap warning: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4130 Causing the error at: https://github.com/odoo/odoo/blob/976c9778c038e821176fc3b273bf4ad58bdc4810/addons/account/models/account_move.py#L4185-L4188 Since vendor bills are issued by third parties, we do not control their sequence, and forcing them into a single continuous chain is functionally incorrect. opw-6076673
This update resolves a critical issue where upgrading Odoo servers caused instability and crashes for IoT integrations. The previous process failed to correctly update IoT images, leading to outdated versions. This fix ensures IoT devices always receive the latest Odoo image, improving stability and performance.
Original PR description
**Description of the issue/feature this PR addresses:** As soon as new Odoo versions are released, deploy iotbox-latest.zip could be unreliable and lead to crash the IoT integration. And right now,…
**Description of the issue/feature this PR addresses:**
As soon as new Odoo versions are released, deploy iotbox-latest.zip could be unreliable and lead to crash the IoT integration. And right now, the upgrade wasn't even working as the new image name convention doesn't match the 'iotboxv' string.
**Current behavior before PR:**
- When we upgrade the Odoo server to which the IoTs are connected, they automatically get the new code for that server, so drivers are aligned to that version but the image is still the former one.
- If we hit update in the IoT to have a proper image up to date with the current server version:
<img width="584" height="172" alt="image" src="https://github.com/user-attachments/assets/0881a8cc-e69c-4fc1-be31-71de42abcae9" />
```
2026-03-31 06:55:33,007 892 ERROR ? odoo.http: Exception during request handling.
Traceback (most recent call last):
File "/home/pi/odoo/odoo/http.py", line 2592, in __call__
response = request._serve_nodb()
^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/odoo/odoo/http.py", line 2064, in _serve_nodb
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/odoo/odoo/http.py", line 2297, in dispatch
return endpoint(**self.request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/odoo/odoo/http.py", line 754, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/odoo/addons/hw_posbox_homepage/controllers/homepage.py", line 208, in get_version_info
'imageIsUpToDate': not bool(helpers.check_image()),
^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/odoo/addons/hw_drivers/tools/helpers.py", line 242, in check_image
return {'major': version[0], 'minor': version[1]}
~~~~~~~^^^
IndexError: list index out of range
```
This code here can't simply match with the new naming convention, but we don't to break the compatibility anyway:
https://github.com/odoo/odoo/blob/38734e4bc7d841a30524a2bc17fc94c9a83b5aa0/addons/hw_drivers/tools/helpers.py#L225-L242
<img width="546" height="150" alt="image" src="https://github.com/user-attachments/assets/cb2c59f9-46ce-48c7-ad5a-cf5f1cbee062" />
**Desired behavior after PR is merged:**
We can update at least to last supported version for the connected server
(I've been conservative about the image version as the IoT code is so binded to the connected server code... Maybe a higher one is safe?)
cc @moduon MT-11428
opw-6084090
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr12 changes
Resolved issues and error corrections
This update corrects a recent issue with accounting dates used in payroll journal entries. It reverts a previous change that was causing inaccuracies in financial reporting. This ensures payroll accounting aligns correctly with company financial records.
Original PR description
This reverts commit 01717c6fdb6bbbc3149048f6284807c7fc36f540. Task: 6116315
This update fixes a security issue where unauthorized users could access asset information within invoices. The change restricts access to the `account.asset` model to users within specific accounting groups, preventing accidental or malicious data access. This ensures data integrity and protects financial records.
Original PR description
Only groups `account.group_account_readonly`, `account.group_account_invoice` or higher have access to model `account.asset`, therefore if an user goes to see an invoice with assets and they are not on either group, they will receive an error and won't be able to access said invoice. How to reproduce: - Create a vendor bill - Create an account.asset and link it to said account.move - Go to the form view with an user that it's on group "Purchase: User" for example --> They get a traceback --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#112890
This update resolves an issue preventing correct invoice report naming in the Mexican tax module (l10n_mx_edi). It aligns with a recent community update, ensuring compatibility and preventing errors during invoice sending. This improves the reliability of invoice processing.
Original PR description
Update _get_invoice_report_filename override to accept the optional report parameter and forward it to super(). This is a compatibility fix linked to the community PR, which extends the base helper to support dynamic report naming. Without this update, the enterprise override still uses the old signature and causes errors in invoice send flows. This change ensures compatibility with the updated helper in account and prevents errors in invoice send flows when a report is provided. Related Community PR: https://github.com/odoo/odoo/pull/256204 Related Ticket: opw-6058716
This change removes a confusing tooltip from the calendar popover for boolean fields. The tooltip was displaying unnecessary HTML content, creating a poor user experience. This improvement simplifies the calendar interface and enhances usability.
Original PR description
Before this commit, the tooltip of a boolean field in calendar popover shows html content when the user hovers the boolean field. This commit removes the tooltip of boolean field in calendar popover since the information inside that tooltip is not really useful for the user. Issue found during the development of task-5994205
This update corrects a visual issue in the product expiry module where all products without removal dates were incorrectly highlighted in red. Now, only products with expired lots/serials or quantities below zero will be flagged as expired, ensuring accurate product tracking and inventory management. This resolves a misleading display that could have impacted decision-making.
Original PR description
**Description of the issue/feature this PR addresses:** Install product_expiry and have products in stock with a quantity greater than 0 and not having any serial or lot configuration. **Current behavior before PR:** All lines which have no valid removal_date set (normally just those which are to be subject to be expired) will be marked red. **Desired behavior after PR is merged:** The tree view is showing as intended only if a product lot/serial is expired or a quantity less than zero will be marked red. Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where printing surveys didn't display participant answers, leading to incomplete reports. The change ensures all survey responses are always included when printing, providing more accurate and reliable data. This improves the quality and consistency of survey results.
Original PR description
Previously, printing surveys of type scoring_without_answers omitted participants' answers, resulting in incomplete and inconsistent reports. This commit ensures answers are always included, regardless of survey type. Task-5407701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258616
This update resolves an issue where tax wasn't correctly applied to sales orders when using fixed amount discounts. Previously, users had to manually set tax on discount products. Now, the system automatically considers tax from the discount product, ensuring accurate tax calculations for all discount scenarios.
Original PR description
Steps to reproduce: - Apply fixed amount discount on sales order. - Go to the discount product which got created and set tax for it. - Again apply fixed amount discount on sales order. Issue: If tax is set for fixed amount discount product, tax is not applied when discount is applied on sales order. Cause: User have to manually set the tax even if he has set tax for fixed amount discount. Fix: Consider the tax from discount product if there is any. opw-3935350 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where German hybrid invoices processed through Peppol were failing to correctly identify invoice customizations. The change clarifies how the 'zugferd' format is handled, ensuring it's treated as a distinct format from Peppol EDI, leading to accurate invoice processing.
Original PR description
The 'zugferd' key was missing from the `_get_customization_ids` mapping, causing potential failures when attempting to identify the correct CustomizationID for German hybrid-style invoices being processed through the Peppol exchange. This is because the 'zugferd' format was wrongly considered as peppol edi format, whereas it should behave like the 'facturx' format and be excluded from the peppol edi formats. opw-6009214
This update resolves an issue where a previous manager would continue to receive department messages after a new manager was assigned. Now, when a manager is reassigned, they are automatically unsubscribed from all department communications, ensuring a cleaner and more accurate notification system. This improves the user experience for both managers and department members.
Original PR description
…ager is assigned 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 corrects a technical issue where an old manager would continue to receive department messages after a new manager was assigned. The change ensures that users are only notified about relevant department communications, improving email efficiency and reducing potential confusion. This is a minor fix impacting the HR module.
Original PR description
…ager is assigned 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 an issue where a previous manager remained listed as a follower after a new manager was assigned. The change ensures that the old manager is automatically unsubscribed from the department, maintaining accurate follower lists and streamlining organizational updates. This improves data accuracy and reduces potential confusion.
Original PR description
Description of the issue/feature this PR addresses: old manager is still in followers after changing Current behavior before PR: old manager is still in followers after changing Desired behavior after PR is merged: old manager gets unsubscribed to the department --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where stock quantities were incorrectly displayed for a company when a purchase order was processed through another company in a multi-company environment. The change ensures stock quantities are restricted to the product's assigned company, preventing errors and improving data accuracy. This resolves a reporting discrepancy.
Original PR description
**Purpose:** Since a stock.quant is a combination of the stock move lines of a product and a location, it should be restricted by the product's company. **Before this commit:** In a multi-company…
**Purpose:** Since a stock.quant is a combination of the stock move lines of a product and a location, it should be restricted by the product's company. **Before this commit:** In a multi-company environment. If a purchase order with product from company 1 is being confirmed, received, and validated when company 2 is being selected as the primary active company while company 1 is also checked. It will create a stock.quant that is searchable for company 2. However, it will raise an error when company 2 is trying to access it. **After this commit:** Even if the stock.quant is created when company 2 is the primary active company, it will not be searchable for company 2 since the product's company is company 1. **Steps to Reproduce on Runbot:** - Create a storable product exclusive to Company A - Create & validate a receipt for that product in Company A. - Switch to Company B -> Reporting > Locations > Remove all filters: The negative quant for the product in Partners/Vendors is visible. opw-6082330 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr