Daily updates from Odoo
Thursday, October 16, 2025
27 changes · 18.0
Enhancements to existing features
Refreshing UrbanPiper webhooks from settings now also disconnects existing products from the POS and sends a fresh menu update to UrbanPiper. This helps keep the external delivery platform aligned with the latest point-of-sale menu data.
Original PR description
Following this commit: - On refreshing webhooks from settings, products will be unlinked from pos. - Fresh menu will be updated to Urbanpiper platform task-5163764
Changing inventory valuation settings on very large product categories is now much faster. This helps businesses avoid long waits or timeouts when updating stock valuation methods for categories with many product variants.
Original PR description
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish…
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish the stock according to the new valuation. This process can be heavy when the number of product.products related to the active product.category is big. This can happen when product.attributes are set to "Creation: Instantly" for instance. This commit aims at improving the overall speed of this change in some cases. A first optimization is to use `product_tmpl_id` to retrieve the `product_variant_ids`. When there are a lot of products, it's faster to explicitely use the delegated field `product_tmpl_id`. This avoids lots of calls to `__getitem`/`__setitem__` in `_compute_related`. The downside of doing this is that subsequent calls to `self.product_variant_ids` are gonna raise a CacheMiss. So we have to explicitely use `product_tmpl_id.product_variant_ids` every time. We argue that it's not really an issue here as retrieving the variant_ids from a product.product itself is not that frequent in the codebase. A second optimization is to avoid calling `product.qty_available` in `_compute_value_svl` in case `avg_cost = 0`. With an avg_cost of 0, the total_value is always going to be 0. So there's no point in calling the heavy compute method `_compute_quantities` to retrieve `qty_available` here. #### speedup In a database with 228 000 product.products linked to the same product.category, the time to switch the category valuation from manual to real-time: +15min (timeout) -> 18s --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor now detects when a browser or device cannot support image filters and disables that option instead of showing an error. This keeps editing stable for users on systems without WebGL support, such as some Linux Chrome setups.
Original PR description
On recent versions of Chrome for Linux (v140+), the old SwiftShader software fallback for WebGL has been removed. As a result, new window.WebGLImageFilter() now throws if no GPU context is available, typically when WebGL is disabled or unsupported. Since the application cannot enable WebGL from JavaScript, this commit improves the user experience by detecting the absence of a WebGL context early and disabling image filters in edit mode. Instead of raising a traceback, the editor now skips the filter feature and can optionally display a friendly message explaining that WebGL is required to use image filters. This avoids runtime errors and ensures a more robust behavior on platforms where WebGL is unavailable. task-5117584 Forward-Port-Of: odoo/odoo#229705
Resolved issues and error corrections
This change restores the previous currency translation behavior for cumulative translation adjustments in accounting reports. It avoids incorrect year-over-year balance sheet revaluations, helping financial statements reflect the intended exchange-rate treatment.
Original PR description
This reverts commit c440bb52d19b8dcec8b708509973c4095a577b34 as it doesn't work as expected in year-over-year re-evaluation in balance sheets. task-5085888 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change restores the previous currency translation behavior for financial reports, using the closing exchange rate instead of the current rate. This helps ensure reported balances match expected accounting treatment and avoids unexpected differences in payables, receivables, ledgers, and trial balances.
Original PR description
This reverts commit 0719c63a646c360a4b090745cd8105128332ef38. task-5085888
Users who do not have access to the company’s internal project can now create a timesheet without encountering an error. If the default internal project is not accessible, the system leaves the project field blank instead, allowing normal timesheet entry to continue.
Original PR description
To reproduce: ============= - make the internal project of the company for invited internal users only - with internal user that doesn't have access to the internal project, and no previous timesheet created, try to create a timesheet - you get a traceback Problem: ======== when not having a previous timesheet, in the default value we set project_id based on the internal project of the company. But if the user doesn't have access to this project, it raises an access error. Solution: ========= check if the user has access to the internal project of the company, if not, use `False` as default value. opw-5119839 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users assigned to tasks in private projects can now print or export their own timesheets without seeing an access error. This removes an inconsistency that blocked reporting when the selected entries came from a single private project.
Original PR description
****Behavior:**** **Current:** When a user with only 'User' access to Projects and Timesheets, is assigned to a task in a Private project by an admin user, they can then log timesheets on the task as…
****Behavior:**** **Current:** When a user with only 'User' access to Projects and Timesheets, is assigned to a task in a Private project by an admin user, they can then log timesheets on the task as it appears under "My Tasks". The user might then want to print or export the timesheets form the list view. - If the selected timesheets come from only a single private project : an Access Error is raised - If the selected timesheets come from multiple private projects, or a mix of public and private ones : no Error is raised The issue comes from the need to access to the project's name (since the project is private to the user the code raises the error) as well as the company's name. And it only happens when single projects are selected, in the other cases, the exported pdf shows the project's name at another location without error. **Expected:** Since the information is already accessible through multiple other places in odoo (and even in the exported pdf), we should allow the access here aswell. So now when printing or exporting a timesheet from a single private project, no Access Error is raised. **Steps to reproduce:** - Create 2 different projects - Create a task in each - Assign it to another user (Make sure the other user only has user access to timesheets and projects) - Set each project's visibility setting to private - Log in with the other user - Go to Timesheets --> List View Single projects: - Select one or multiple timesheet entries from one of the private projects - Select Print -> Timesheets - You should see an Access Error Multiple projects: - Select one or multiple timesheet entries from a combination of both private projects - Select Print -> Timesheets - You should not have any Errors opw-5127526 Forward-Port-Of: odoo/odoo#231188
This fixes an issue where Mexican electronic invoice XML files could be saved with the wrong file type when created by users with limited permissions. The change helps ensure related accounting documents are generated correctly, especially when Documents centralization is enabled.
Original PR description
When creating an XML attachment as a user without Write access on the ir.ui.view model, the Mimetype will be set to plain/text. In particular, this causes issues when Accounting centralization is enabled in Documents, as the corresponding Document will only be generated if the Mimetype is application/xml. Creating the XML as Superuser avoids this issue. Similar to https://github.com/odoo/odoo/pull/124507 opw-5057038 Forward-Port-Of: odoo/enterprise#95197
This update prevents French POS certification checks from treating orders without a secure sequence number as valid previous orders. It avoids incorrect blocking errors during database upgrades or recalculations, helping affected systems complete processing normally.
Original PR description
## Description of the issue/feature this PR addresses: When obtaining the previous order for pos.order records, all orders with l10n_fr_secure_sequence_number == NULL will be recognised as the…
## Description of the issue/feature this PR addresses:
When obtaining the previous order for pos.order records, all orders with l10n_fr_secure_sequence_number == NULL will be recognised as the previous order for those where l10n_fr_secure_sequence_number == 1, as if their sequence value was zero.
## Current behavior before PR:
Since there can be more than one orders without sequence number, this behaviour will trigger an UserError exception, as the ORM will mistakenly deduce that there are multiple previous orders for a single one, which is not necessarily correct.
### Examples:
upg-3170341
```sql
lare_3170341=> SELECT count(id) FROM pos_order WHERE l10n_fr_secure_sequence_number IS NULL;
count
-------
67281
(1 row)
```
```python
# Debugging standard codebase with a Python debugger
...
match = prev_map.get(order.l10n_fr_secure_sequence_number - 1, []) # len(match) == 67281
if len(match) > 1:
raise UserError(_('An error occurred when computing the inalterability...'))
...
```
upg-3170341
```sql
lare_3167621=> SELECT count(id) FROM pos_order WHERE l10n_fr_secure_sequence_number IS NULL;
count
-------
294
(1 row)
```
```python
# Debugging standard codebase with a Python debugger
...
match = prev_map.get(order.l10n_fr_secure_sequence_number - 1, []) # len(match) == 294
if len(match) > 1:
raise UserError(_('An error occurred when computing the inalterability...'))
...
```
---
Traceback group: https://upgrade.odoo.com/odoo/tbg/1869
```
2025-09-30 07:48:30,945 329 INFO db_3167621 odoo.modules.loading: Loading module l10n_fr_pos_cert (110/131)
2025-09-30 07:48:31,375 329 INFO db_3167621 odoo.modules.registry: module l10n_fr_pos_cert: creating or updating database tables
2025-09-30 07:48:31,432 329 INFO db_3167621 odoo.models: Prepare computation of pos.order.previous_order_id
2025-09-30 07:48:31,597 329 WARNING db_3167621 odoo.modules.loading: Transient module states were reset
2025-09-30 07:48:31,597 329 ERROR db_3167621 odoo.modules.registry: Failed to load registry
2025-09-30 07:48:31,597 329 CRITICAL db_3167621 odoo.service.server: Failed to initialize database `db_3167621`.
Traceback (most recent call last):
File "/home/odoo/src/odoo/18.0/odoo/service/server.py", line 1361, in preload_registries
registry = Registry.new(dbname, update_module=update_module)
File "<decorator-gen-13>", line 2, in new
File "/home/odoo/src/odoo/18.0/odoo/tools/func.py", line 97, in locked
return func(inst, *args, **kwargs)
File "/home/odoo/src/odoo/18.0/odoo/modules/registry.py", line 129, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/home/odoo/src/odoo/18.0/odoo/modules/loading.py", line 485, in load_modules
processed_modules += load_marked_modules(env, graph,
File "/home/odoo/src/odoo/18.0/odoo/modules/loading.py", line 365, in load_marked_modules
loaded, processed = load_module_graph(
File "/home/odoo/src/odoo/18.0/odoo/modules/loading.py", line 206, in load_module_graph
registry.init_models(env.cr, model_names, {'module': package.name}, new_install)
File "/home/odoo/src/odoo/18.0/odoo/modules/registry.py", line 618, in init_models
func()
File "/home/odoo/src/odoo/18.0/odoo/addons/base/models/ir_model.py", line 2007, in _reflect_relation
self.env.invalidate_all()
File "/home/odoo/src/odoo/18.0/odoo/api.py", line 839, in invalidate_all
self.flush_all()
File "/home/odoo/src/odoo/18.0/odoo/api.py", line 857, in flush_all
self._recompute_all()
File "/home/odoo/src/odoo/18.0/odoo/api.py", line 850, in _recompute_all
self[field.model_name]._recompute_field(field)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 7359, in _recompute_field
field.recompute(records)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1463, in recompute
apply_except_missing(self.compute_value, recs)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1436, in apply_except_missing
func(records)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1485, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/18.0/addons/mail/models/mail_thread.py", line 427, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5296, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 110, in determine
return needle(*args)
File "/home/odoo/src/odoo/18.0/addons/l10n_fr_pos_cert/models/pos.py", line 79, in _compute_previous_order
raise UserError(_('An error occurred when computing the inalterability. Impossible to get the unique previous posted point of sale order.'))
odoo.exceptions.UserError: Une erreur s'est produite lors de la vérification de l'inaltérabilité. Impossible de récupérer la dernière commande de caisse unique et comptabilisée.
```
## Desired behavior after PR is merged:
The method `pos.order._compute_previous_order` already only checks orders with a sequence number != NULL, so to address this issue, we will use the same condition to retrieve only orders with a valid sequence. This will result in no more exceptions created by incorrect data.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prPayment terminals connected through IoT boxes now record each step of a transaction with clearer identifying details. This makes it easier for support teams to trace payment issues and resolve problems faster.
Original PR description
This PR improves the logging of terminals used with iot box. We will now get a log for every step of a transaction along with some information identifying the transaction
Bills created from IRN can now use a valid purchase journal from any company in the tax unit, instead of only checking the main company. This prevents bill creation failures for multi-company tax units when the main company does not have a purchase journal configured.
Original PR description
Before this PR: - The system searched for a purchase journal only in `company_id`. - In a tax unit with multiple companies, if the main company had no purchase journal configured, record creation failed with a 'NOT NULL constraint violated' error. After this PR: - The journal search now checks all companies in `company_ids` (or falls back to `company_id`), - allowing the system to find a valid purchase journal across the tax unit.
This update corrects how delivery information is included in Turkish Nilvera export e-invoices. It prevents Nilvera from rejecting export e-invoices with discounts, helping ensure affected invoices can be processed successfully.
Original PR description
The Delivery node is only required for Export E-Invoices. Additionally, the position of the Delivery node should not follow the AllowanceCharge node. This inconsistency in node positioning causes a blocking issue on Nilvera’s side, preventing the successful processing of export E-Invoices with discounts. task-5155802 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes the spreadsheet engine and fixes several issues affecting pasted values, data validation across sheets, formula error messages, and chart display. Users should see more reliable spreadsheet behavior, clearer chart tooltips for dates, and better performance when recalculating dependencies.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0216b0643 [REL] 18.0.47 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0216b0643 [REL] 18.0.47 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/41a767864 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/4bf3363b5 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/af36b2666 [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/b796c32c0 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/ff8bba956 [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/a828d6c76 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Payslips now correctly show worked days for employees on fully flexible contracts, even when no fixed working calendar is assigned. This prevents payroll teams from seeing blank worked-day sections when valid attendance or planning entries exist, supporting more accurate payroll preparation.
Original PR description
**Issue:** Payslips show blank worked days for employees with contracts without a `resource_calendar_id` (fully flexible, despite having valid work entries **Cause:** `_get_worked_day_lines()` skips worked day computation if the contract has no calendar https://github.com/odoo/enterprise/blob/1a10e0444fdb71a072262a1f14f0bfc766d109c6/hr_payroll/models/hr_payslip.py#L665-L674 **Steps to Reproduce:** - Assign an employee a fully flexible contract with attendance as work entry source. - Create work entries based on the attendance records of the employee record - Go to employees > contracts > new Payslip Worked Days section is empty, even though attendance shifts are showing up on top. **Fix:** removing the calendar requirement in the main method and adding a fallback calendar in the called utility method **Note:** same issue happens if work entry source of the contract is Planning opw-4931972
Uploaded images can now be processed before they are saved, allowing them to be resized first. This helps reduce database storage growth and can improve upload efficiency for image-heavy use cases such as Studio customizations.
Original PR description
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#226611
Users can now post image comments on Twitter from the Social app without upload errors. Comment text is also preserved when adding files or emojis, preventing accidental loss of drafted content.
Original PR description
Issue 1 ======= Steps to reproduce ----------------------- 1. Go to the Social app. 2. Create or Select any twitter post. 3. Add a comment to that post with an image. 4. Press Enter. ---> An error…
Issue 1
=======
Steps to reproduce
-----------------------
1. Go to the Social app.
2. Create or Select any twitter post.
3. Add a comment to that post with an image.
4. Press Enter.
---> An error notification will be shown.
When adding an image in a post comment to Twitter, the image was not uploaded properly because the MIME type was not set, and it defaulted to `application/octet-stream`.
This caused the following error:
```
{"errors": [{"parameters": {"$.media_type": ["'application/octet-stream'"]},
"message": "$.media_type: does not have a value in the enumeration
[video/mp4, video/webm, video/mp2t, video/quicktime, text/srt, text/vtt,
model/gltf-binary, model/vnd.usdz+zip, image/jpeg, image/gif, image/bmp,
image/png, image/webp, image/pjpeg, image/tiff]"}], "title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"}
```
From the above error, it's clear that Twitter only accepts specific MIME types.
This fix ensures the image has the correct MIME type so it can be uploaded without issues.
-------------------------------------------------------------------------------------------------------------------------------
Issue 2
=======
Steps to Reproduce
------------------------------
1. Select any post from social feed.
2. Add text comment or edit existing comment.
3. Upload file or add emoji.
=> The comment text is cleared/reset to its initial value.
Technical
------------------------------
With commit [1] we added `t-att-value` which sets the value of the textarea
on every re-render of the component.
After this commit
------------------------------
The initial value is only set once when component is mounted.
Removed `remove image` button for attachment while posting comments.
[1] https://github.com/odoo/enterprise/commit/ced5e88f433b7b9a8e1429259cd8bb6594b34852
Task-4845385
Forward-Port-Of: odoo/enterprise#91995Fixes an issue where planned work-from-home days could disappear from future dashboard balances after an unapproved request in the current week. Employees and managers will now see more accurate upcoming leave entitlements for weekly accrual plans.
Original PR description
To reproduce: ============= - create accrual plan to get 1 day of WFH every week on monday, no carry over - create allocation with this plan for an employee - in the actual week you can see on…
To reproduce: ============= - create accrual plan to get 1 day of WFH every week on monday, no carry over - create allocation with this plan for an employee - in the actual week you can see on dashboard that you have 1 day of WFH - let's say we are a Monday, take 1 day of WFH on Wednesday (don't approve it) - before Wednesday dashboard shows 1 day of WFH - after Wednesday in same week dashboard shows 0 day of WFH - in next week dashboard shows 0 day of WFH which is wrong Problem: ======== The computation of virtual accrual leaves was wrong because it took into account the leaves already taken in the current week, while they should be ignored. Solution: ========= as we already check if the allocation we are computing virtual accrual for is in same time range as the current one here : https://github.com/odoo/odoo/blob/4c9eadc3c1b2d5ef6a495b89ab33481d5d545ec4/addons/hr_holidays/models/hr_leave_allocation.py#L625 we don't need to subtract the number of days/hours of the current allocation opw-4712586 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spreadsheet field synchronization in Sales Management now remains stable when users use undo or redo. This prevents interruptions while editing spreadsheet-linked sales data and keeps version history handling reliable.
Original PR description
Fix an issue where field sync would crash when used with UNDO/REDO. Task: 4854879
Cancelled Restaurant POS orders are now removed from the Ticket Screen instead of showing under paid orders. This prevents staff from seeing voided orders as completed sales and keeps order records clearer during service.
Original PR description
pos*: point_of_sale, pos_restaurant Steps to reproduce: - Open the Restaurant POS and place an order. - Send it to the preparation screen by clicking Order. - Reopen the order and cancel it via the Action button. Issue: - The cancelled order still appears under the Paid section on the Ticket Screen. Fix: - Cancelled orders are now excluded from the Ticket Screen display. - Remove canceled orders from local records. Task: 4936636
Spreadsheet pivot tables now support grouping by reference fields, making it possible to count activities linked to specific leads or other records. This helps users build more accurate activity reports, with safeguards requiring model context to avoid mixing records from different business objects.
Original PR description
This is a feedback from a partner at OXP, he wants to know the number of activities (late or not) linked to some Lead -> activities grouped by res_id. But grouping a pivot by a many2one_reference is currently not supported. This commit adds the support. Note that carelessly grouping by a many2one_reference mixes records linked to different models (same id, but different model). To avoid mixin apples and oranges, you have to either groupby model, *then* by res_id, or add the model to the domain. Task: 5102923 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents tax report errors when a vendor bill includes multiple vehicle-related lines using the same split tax. Tax amounts are now matched per vehicle, so reports stay accurate and can be generated without interruption.
Original PR description
**Steps to reproduce:** 1. Install the *Fleet* and `accounting` modules. 2. Create a new purchase tax. 3. Configure the tax with a 50% repartition line for an `600000 expense` account and a 50%…
**Steps to reproduce:** 1. Install the *Fleet* and `accounting` modules. 2. Create a new purchase tax. 3. Configure the tax with a 50% repartition line for an `600000 expense` account and a 50% repartition line for a `101000 current asset` account for both income and refund. 4. Create a vendor bill with two product lines, each having a different vehicle assigned with the newly created tax in both lines. 5. Check the *Tax Report*(account>tax), including the date of this vendor bill. **Observed behavior:** * Tax lines linked to the current asset account are merged. * Tax lines linked to the expense account remain separate (since `vehicle_id` is set on the `account.move.line`). * This mismatch triggers an error in the tax report. **Root cause:** The tax details query does not account for the `vehicle_id` field when matching tax lines with base lines. As a result, tax lines are incorrectly merged across different vehicles. **Solution:** Override `_get_extra_query_base_tax_line_mapping` to include the `vehicle_id` in the matching condition, ensuring tax lines are only paired with base lines having the same `vehicle_id`. This prevents incorrect merging and resolves the report error. opw-5013757
Swedish Bankgiro and Plusgiro accounts are now handled correctly when generating SEPA payment files and Peppol invoices. This prevents missing bank identification details, helping Swedish payments and electronic invoices process successfully.
Original PR description
… number Bankgiro and Plusgiro accounts in Sweden normally do not have a BIC. However, for Peppol BIS 3 invoices, a BIC tag is required in the XML. The existing _skip_CdtrAgt logic prevents _get_CdtrAgt from being called when no BIC is set, causing the clearing_number to be missing in SEPA payment files for Bankgiro and Plusgiro accounts. This commit introduces overrides for SE-specific account types: _get_cleaned_bic_code: Returns 'SE:Bankgiro' or 'SE:Plusgiro' for Swedish Bankgiro and Plusgiro accounts, ensuring a BIC is present for the invoice XML. _skip_CdtrAgt: Returns False for Bankgiro and Plusgiro accounts to ensure _get_CdtrAgt is called, including the clearing number in the payment file. This guarantees that SEPA payment files and Peppol BIS 3 invoices for Sweden are generated correctly while preserving standard behavior for other banks and countries. Backport of https://github.com/odoo/enterprise/commit/0534491bcd7eed7d246bea85d6ac217a80af815b
Fixes an issue where analytic items could disappear when vendor bills were posted under certain accounting settings, such as disabled auto-check on post or active lock dates. This ensures bills with analytic accounts correctly create analytic reporting entries, improving the reliability of cost tracking and financial analysis.
Original PR description
To reproduce: 1. Ensure Analytic Accounting is activated in the accounting settings 2. Uncheck the option Auto-Check on Post in the Vendor Bills journal 3. Create a vendor bill and set analytic…
To reproduce: 1. Ensure Analytic Accounting is activated in the accounting settings 2. Uncheck the option Auto-Check on Post in the Vendor Bills journal 3. Create a vendor bill and set analytic accounts in at least one line 4. Post the vendor bill 5. Go to Accounting > Analytic Items 6. No analytic item was created for the vendor bill In some cases, such as when the vendor bill journal has `Auto-check on Post` disabled or a there is a lock date set, the analytic items are not created when posting the move, even if analytic accounts were set on the move lines. Cause: In #222196, a check is performed when writing an account.move.line, which unlinks analytic lines created for draft moves. However, this condition is too general, and if additional writes happen in between the analytic line creation and changing the move state to `posted`, the analytic lines are deleted. Solution: The unlinking on analytic lines should only be performed if `analytic_line_ids` are in vals. opw-5053179,opw-5154394 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Marketing cards now stop with an error if image generation fails, instead of appearing successfully synced while empty. Campaign changes also correctly flag all related cards for update, so reused or previewed cards are refreshed when mailings are updated.
Original PR description
If wkhtmltoimage fails for any reason we currently keep going as if an image was actually rendered. Instead if the result of the image render is `None`, raise a generic error. This avoids issues with cards being marked "synced" even though they are actually empty. Additionally, when the campaign gets reused: - preview two records - update cards on a mailing - preview a record again - modify one of the fields on the card - update the cards on a mailing again - the card that was previewed is not updated ALL cards must require sync after a change to the campaign not just active ones. Otherwise they will keep their "synced" status and not be synced when they're selected for update later on. task-5048534
This fix prevents German POS session closing from failing when an order is missing its assigned user during required DSFinV-K export generation. The system now uses the order creator as a fallback, helping stores complete closing procedures and keep export data valid.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. Although the exact reproduction steps are not consistently found, this issue is recurrent. This change makes the code more robust by defaulting to the order's create_uid when the user_id is empty or missing, ensuring the transaction export data remains valid. opw-5123890
Fixes an accounting issue where invoices for dropshipped kit products could record the wrong cost of goods sold when purchase prices were manually changed. This ensures invoice accounting reflects the actual purchase order cost, improving margin and financial reporting accuracy.
Original PR description
**Problem:** When confirming the invoice of an order delivered via dropship for some kit bom product with fifo/avco comp, if the price was manually set on the purchase order, the invoice lines…
**Problem:** When confirming the invoice of an order delivered via dropship for some kit bom product with fifo/avco comp, if the price was manually set on the purchase order, the invoice lines generated for the cogs are inaccurate **Steps to reproduce:** - In settings enable dropshipping, automatic account and anglosaxon accounting - Create a kit product with one component. - Set the route as Dropship for the component. - add a vendor in the purchase tab of the component. - set the cost of the component at 2 - Set the product category to AVCO (Automated) for the component and the product. - Create and confirm a sales order with a quantity of 2 for the product. - On the purchase order set the unit price at 20 for the component. - Confirm the purchase order, then validate the delivery and create the customer invoice. - Confirm the invoice **Current behavior:** In the journal items tab of the invoice the lines for the cogs (expenses and stock interim) have a value of 22 **Expected behavior:** The value should be 40, in accordance with the purchase order **Cause of the issue:** In the mrp_account override of _compute_average_price, the stock move has no bom because it was generated from the purchase order, so this condition will be true https://github.com/odoo/odoo/blob/936ab5f3f120413c7af901dd6ecc414d3e3a6d78/addons/mrp_account/models/product.py#L67 This is not a problem, however the problem comes from the fact that move.product_id is already equal to qty_to_invoice \*component_quantity. https://github.com/odoo/odoo/blob/936ab5f3f120413c7af901dd6ecc414d3e3a6d78/addons/mrp_account/models/product.py#L73 Multiplying it a second time by qty_to_invoice is an error. For instance in our steps, qty_to_invoice is 2, compenent_quantity is 1 and move.product_qty is 2. So when calling _compute_average_price for the comp, we call it with a qty_to_invoice parameter of 4 instead of 2. As a result, because the candidates svls only have a quantity of 2, there will be we a missing quantity. https://github.com/odoo/odoo/blob/936ab5f3f120413c7af901dd6ecc414d3e3a6d78/addons/stock_account/models/product.py#L927-L934 So the result will be the average between the quantity on the purchase order (20) and the standard price (2). Which is why the account line has a value of 22 (2*11) opw-4985440
Point of Sale now reads quantity information included in GS1 barcodes when products are scanned. This helps cashiers add the right number of items automatically, reducing manual corrections and checkout errors.
Original PR description
Before this commit, the quantity encoded in a GS1 barcode was ignored when scanning. After this commit, the product will be added with the correct quantity extracted from the GS1 barcode. opw-5126522 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229678