Daily updates from Odoo
Navigate
Branch
Thursday, May 21, 2026
287 changes
30 changes
Enhancements to existing features
This update simplifies the calculations for 'Retained Earnings' and 'Result for the Year' on the French Balance Sheet report. This change ensures the financial reporting is more accurate and reliable for French-speaking businesses using Odoo Enterprise. It's a routine improvement to maintain the integrity of financial data.
Original PR description
Simplify the formulas of 'Retained earnings' and 'Result for the year' in the french Balance Sheet. task-6087994 Forward-Port-Of: odoo/enterprise#113988 Forward-Port-Of: odoo/enterprise#112731
This update adjusts the categorization of certain French accounting accounts (110000, 119000, 120000, 129000) to better align with reporting requirements for 'Current Year Earnings'. This change ensures accurate financial reporting in France and improves compliance with local accounting standards.
Original PR description
Change the type of french accounts 110000, 119000, 120000, 129000 for 'Current Year Earnings'. task-6087994 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259374 Forward-Port-Of: odoo/odoo#257094
This update enables users to reset statement lines directly within the Kanban view, mirroring functionality from previous versions. This prevents the need to manually delete multiple reconciliations from a single line, streamlining the accounting process and improving efficiency.
Original PR description
This commit adds the possibility to reset a statement line in kanban view like in the previous versions. Function is still there but no UI button was tied to it. This is a problem if you have many reconciliations on one statement line, we do not want to delete them one by one. opw-6015838 Forward-Port-Of: odoo/enterprise#111107
This update simplifies email notifications in Odoo by making the subject field optional when sending emails from comment mode. Previously, a subject was always included, but this change streamlines the process for simpler notifications. This improves the user experience and reduces unnecessary complexity.
Original PR description
In comment mode we use the regular message post flow rather than the optimized batch email creation of the composer. This notably means a fallback subject will normally be set. The subject is made optional in that context, and only mandatory in batch mode where the emails would otherwise truly not have a subject. task-5944635 Forward-Port-Of: odoo/odoo#261918
Resolved issues and error corrections
This update corrects a problem where the ABA file generated for Australian payroll wasn't being created correctly. The fix ensures the payslip batch is assigned before payment validation, guaranteeing the ABA file contains accurate payment information. This resolves a previous issue and improves the reliability of payroll reporting.
Original PR description
Payslip batch needs to be assgned before the payment batch is validated, otherwise the ABA file will be blank. This commit ensures that flow and the test ensure both aba flows generate the same file content. task-6123029 Forward-Port-Of: odoo/enterprise#116907 Forward-Port-Of: odoo/enterprise#114970
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052This update corrects a bug where attendance records were disappearing after a public holiday was added. The issue stemmed from a mismatch between how attendance dates were stored (in UTC) and how they were compared against local timezones. The fix ensures attendance dates are correctly converted to the employee's timezone for accurate reporting.
Original PR description
**Steps to reproduce in runbot:** 1. Install hr_holidays_attendance. 2. Create an employee with a contract start date (e.g., April 1st). 3. Set the timezone(for both user and emp working schedule) to…
**Steps to reproduce in runbot:** 1. Install hr_holidays_attendance. 2. Create an employee with a contract start date (e.g., April 1st). 3. Set the timezone(for both user and emp working schedule) to Europe/Brussels. 4. Create an attendance record (e.g., April 15th). 5. Go to Reporting > Time Off Ledger and remove all filters. -> Attendance is correctly shown for all dates from April 1st 6. Create a public holiday on April 16th starting at 00:00. 7. Check the Time Off Ledger again. **Issue:** The attendance entry for April 15th disappears after adding the public holiday. **Cause:** Calendar leave datetime fields (date_from/date_to) are stored in UTC but compared against attendance dates without converting to the employee's resource calendar timezone, causing date boundaries to shift and records to be incorrectly excluded. https://github.com/odoo/odoo/blob/b293ce50e0fc9355ffd233557f079916b514eac7/addons/hr_holidays_attendance/report/hr_leave_attendance_report.py#L133-L144 **Solution:** Convert calendar leave datetimes to the employee timezone before casting to date, ensuring comparisons reflect the correct local boundaries. **NOTE:** This issue is mainly reproducible on runbot since its server timezone is GMT. On local machines configured with UTC, the stored datetime values already align with the expected conversions, so the date shift does not occur. opw-6118043 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265129 Forward-Port-Of: odoo/odoo#262179
This update fixes an error that prevented users from creating new helpdesk teams. The issue occurred when the system attempted to use a default email template after clearing all helpdesk stages. The fix ensures the template exists before attempting to use it, preventing a 'NoneType' error.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update resolves an issue where order synchronization with Lazada was failing due to missing package information. The fix ensures that the system gracefully skips package synchronization when package data is incomplete, preventing errors and maintaining reliable order updates. This improves the stability of the Lazada integration.
Original PR description
orders can omit package data in the API payload if the package id doesn't match. When a picking still had a package_extern_id, filtering order_items by that id produced an empty list, and max() on the resulting timestamps raised ValueError and blocked order sync. Return early when no matching package lines exist so sync can continue. taskId - 6195507 Forward-Port-Of: odoo/enterprise#117194
This update resolves a problem where the Brazilian localization module (`l10n_br`) was incorrectly referencing a field that had moved in a recent upgrade. The change ensures the module correctly pulls data from the updated address form fields, maintaining accurate address information for Brazilian users. This update is a critical fix to prevent potential data inconsistencies.
Original PR description
Issue: ------ `l10n_br.address_form_fields` inherits from `portal.address_form_fields` but targets a `<select>` element that was moved to `portal_address_extended.address_extended_form_fields` in…
Issue: ------ `l10n_br.address_form_fields` inherits from `portal.address_form_fields` but targets a `<select>` element that was moved to `portal_address_extended.address_extended_form_fields` in [saas~19.2]. Traceback: ---------- ```py Error while parsing or validating view: Element '<xpath expr="//select[@name='city_id']/option[not(@value='')]">' cannot be located in parent view ``` Steps to reproduce: ------------------- 1. Install `l10n_br` in v19 2. Upgrade to v19.2 3. Upgrade the `l10n_br` module → Traceback Root cause: ----------- The view is adapting an element owned by a sibling view, making the inheritance hierarchy conceptually wrong and fragile. Solution: --------- Update the `inherit_id` of `l10n_br.address_form_fields` to `portal_address_extended.address_extended_form_fields` so it correctly inherits from the view that owns the targeted element. opw: [6125901] [saas~19.2]: https://github.com/odoo/odoo/commit/026c6f9f2a388ee509a135c53e38f5bb3d08ff73 [6125901]: https://www.odoo.com/odoo/70/tasks/6125901?debug=1 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#264045
This update fixes a minor issue in the demo order system for point-of-sale and restaurant POS. Previously, demo orders used a default '/' reference, which is now replaced with sequential order numbers for clarity. This ensures demo orders are more easily identifiable and consistent.
Original PR description
Before this commit: =================== - For demo orders, no proper Order Reference is displayed, by default, it is set to '/'. After this commit: =================== - All default '/' values are replaced with a sequential Order Reference, except for orders in the 'new' state . Task-6004716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264971 Forward-Port-Of: odoo/odoo#253272
This update resolves an issue where users couldn't edit dates within the blog section due to a missing plugin configuration. The fix ensures the `DateTimeFieldPlugin` is correctly included in the necessary Odoo lists, allowing for proper date field editing and preventing potential save errors. This improves the user experience for blog content management.
Original PR description
The plugin `DateTimeFieldPlugin` was only added in registry `builder-plugins`. But it should also be included in the lists `CORE_PLUGINS` of `html_builder` and `TRANSLATION_PLUGINS` of `website` (the same as `MonetaryFieldPlugin` and similar plugins) Steps to reproduce: - Open `/blog` in translate mode - Click on a date - Bug: you can edit the text (and it will likely cause an error on save) task-6226376 Forward-Port-Of: odoo/odoo#265400 Forward-Port-Of: odoo/odoo#264943
This update optimizes how Odoo records information from bank statements, making the process faster and more efficient. By using a batch logging function, the system now handles transactions more quickly, reducing potential delays and improving overall performance. This change was driven by a performance optimization.
Original PR description
There is no need for a full message post to get the details of the transaction. We can use the batched function instead `_message_log_batch`. Forward-Port-Of: odoo/enterprise#117923 Forward-Port-Of: odoo/enterprise#117742
This update resolves a crash issue that occurred when opening dropdown menus on certain pages (like the `/r` page). The fix ensures the menu is fully loaded before attempting to observe it, preventing a technical error that previously caused the dropdown to fail. This improves the overall stability and usability of the system.
Original PR description
Steps to reproduce: - Go to the `/r` page. - Click a dropdown. => traceback Before this commit, `Dropdown.onOpened()` always observed `menuRef.el` as soon as the popover reported it was open. In frontend pages such as `/r`, the menu can still be rendering at that moment. The menu appears just after, but `MutationObserver.observe()` already received `undefined` and raised a `TypeError`. After this commit, `Dropdown.onOpened()` only starts the observer when the menu element exists. The dropdown can finish opening normally, so the menu is shown without traceback. Introduced by [1]. [1]: 7aed5b141f06 Forward-Port-Of: odoo/odoo#265224
This update fixes an error in the WPS payroll report generation process. Specifically, it ensures the report accurately reflects payment dates and values, preventing potential discrepancies when generating the WPS file. This improves the reliability of payroll reporting for Saudi Arabia.
Original PR description
In this commit, we: - corrected the tooltip description of `l10n_sa_wps_value_date`; - added back the Debit Date to the WPS file and assigned it the value of the `effective_date`; - added back the user error in case the Payment Date is greater than or equal to the Value Date. TaskID-6130969 Forward-Port-Of: odoo/enterprise#115762
This update resolves an issue where the skill addition form in Odoo 19.3 would freeze when using 'Save & New'. The fix ensures the form correctly retrieves and updates data, preventing this freezing behavior and guaranteeing the badges many2one field functions reliably.
Original PR description
Issue: - Since 19.3, using "Save & New" while adding skills could freeze the subsection in forms using the badges many2one field. - The component was relying on `record` and `field` values captured during setup, which became stale after the form state was recreated. Fix: - Updated the special data hook to read `record`, `name`, and related field values directly from hook props instead of setup-scoped values. - Updated `useSelectCreate` to dynamically retrieve the relation from current props. Impact: - Prevents the skill subsection from freezing after using "Save & New". - Ensures the badges many2one field always works with the latest record state. Task: 6147646 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a formatting issue in the account view, ensuring descriptions are displayed in a dedicated section. Previously, the descriptions were incorrectly adjusted, leading to a less organized view. This change improves the clarity and usability of account information.
Original PR description
Description in account view was incorrectly adjusted in https://github.com/odoo/odoo/commit/d940f3719c09bf1cc21de20f72968e1a34a8a9ac Fixing it to be a dedicated section. task-5376190 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a crash on the payroll dashboard when users attempted to hide in-memory payrun warnings. The issue stemmed from incorrect data being passed to database functions, leading to an error. The fix ensures warnings are handled correctly, preventing the crash and improving dashboard stability.
Original PR description
Closing date payrun warnings are created as in-memory records (.new()), giving them a NewId instead of a real integer DB id. When the user clicked the hide button, this NewId string was passed to action_snooze/action_archive, causing a psycopg2.errors.InvalidTextRepresentation SQL error. Fix by sending False as the id for in-memory warnings in get_payroll_dashboard_warning_cards, and suppressing the hide button on the dashboard when warning.id is falsy. task-6205849
A previous error prevented users from searching for links within email click tracking. This update resolves the issue by correcting how the system handles link searches, ensuring accurate results when searching by short URL. This improves the reliability of our email marketing analytics.
Original PR description
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing…
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing app 2. Create a new mailing (or you can use an existing one that has some clicks) and send it 3. Make a click in the email from the recipient's side 4. Open the link tracker `click` related to that mailing (select the mailing → `Link Trackers` stat button → click on a link → `Clicks` stat button) 5. Make a search based on the Link (short_url) field Expected Behavior ------ Return the list of links that matches the entered search query. Current Behavior ------ Odoo Server Error. Cause & Solution ------ The cause of this error is that the `shor_url` field is a computed, non-stored, field, and hence, we cannot directly make a search on it. So, either we make the `short_url` a stored field, which is not so efficient, or we create our own custom `_search_..` method. Task-6131693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265293 Forward-Port-Of: odoo/odoo#260146
This update fixes an issue where certain Italian taxes (INPS and Pension Fund) weren't properly imported from CSV files. The fix ensures these taxes are correctly configured within Odoo, allowing for accurate processing of vendor bills and compliance with Italian tax regulations. This improves the reliability of tax calculations and reporting.
Original PR description
### Issue before this commit: In the previous implementation, several Italian taxes, specifically the 4% INPS and the 4% Pension Fund (F.Pens), were not correctly initialized. Although the relevant…
### Issue before this commit: In the previous implementation, several Italian taxes, specifically the 4% INPS and the 4% Pension Fund (F.Pens), were not correctly initialized. Although the relevant EDI data was present in the source CSV templates, it was missing from the actual tax records in the database. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi 2. Go to Accounting -> Taxes 3. Open 4% INPS tax and 4% F.Pens and go to Advanced Options tab and see that no Pension Fund Type is associated by default ### Cause of the issue: While moving the witholding data from l10n_it_edi to l10n_it in this commit https://github.com/odoo/odoo/commit/40e09ca01242 the templates were not correcly rendered and set up. ### Reason to introduce the fix: For a tax to be correctly recognized from the XML, it is essential that we have the corresponding tax already configured in Odoo, including the specific type. We should have at least these two taxes fully configured so the system can elaborate them correctly when imported from vendor bills. opw-6093221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258947
This update ensures that the customer reference field from invoices is correctly included in the fa3 XML files sent to the Polish tax authority (KSEF). Previously, this information was missing, which could cause processing delays. This fix improves invoice accuracy and compliance with Polish tax regulations.
Original PR description
**STEP TO REPRODUCE** 1. Create an invoice and fill the customer reference field (other info tab). 2. send the invoice to ksef. 3. Open the generated fa3 file, and notice there is no mention of the customer reference. Ticket [link](https://www.odoo.com/odoo/project.task/6150812) opw-6150812 Forward-Port-Of: odoo/odoo#263797
This update resolves an issue where planning tour tests were failing due to a recent change removing a template saving step. The fix also addresses a dependency on the 'planning_field_service' app, which wasn't correctly integrated into the sale planning tour, causing broader test failures. This ensures the planning tours run reliably.
Original PR description
Since fc7b3c2, the "save as template" step of the planning tour was removed, making the test checking for templates in project_forcast fail. The commit also adds a condition checking if planning_field_service is installed before running the planning_test_tour but didn't add it for the sale_planning_test_tour, which extends the planning_test_tour and fails as well if the 3 apps are installed. opw-6176441 runbot-230670 Forward-Port-Of: odoo/enterprise#117882
This update fixes an issue where URLs with mixed or uppercase characters weren't automatically converted to clickable links within the HTML editor. The fix ensures that all URLs, including single-character domains like 'x.com', are correctly recognized and linked. This improves the user experience and allows for more reliable link creation.
Original PR description
### Description of the issue/feature this PR addresses: - URL_REGEX was constructed with the "i" flag, but passing a RegExp object to new RegExp(regex, "g") silently drops the original flags, leaving only "g". This caused uppercase (ODOO.COM) and mixed-case (Odoo.Com) URLs to not be converted to links when pressing space. ### Desired behavior after PR is merged: - URL_REGEX.source with explicit "gi" flags to preserve case-insensitive matching in `prepareConvertToLink`. - Allow automatic URL detection for single-character domains such as `x.com`, `t.co`, and `a.io` by relaxing the minimum domain label length in the URL regex from 2 to 1 characters. task-6199269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265409 Forward-Port-Of: odoo/odoo#263255
This update ensures that the bottom sheet appears consistently on all touch devices, including larger tablets, instead of a less desirable dropdown menu. Previously, the bottom sheet was only displayed on small touch screens. This change provides a more reliable and user-friendly experience for users accessing Odoo through touch interfaces.
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#264973 Forward-Port-Of: odoo/odoo#264705
This update resolves an issue where the Send & Print wizard would fail when proforma PDFs weren't automatically created for invoices. The change ensures the system handles cases where these PDFs aren't generated gracefully, preventing errors and improving the reliability of invoice sending. This primarily affects scenarios involving specific localization modules.
Original PR description
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict. The…
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict.
The `proforma_pdf_attachment` key is only populated in `_generate_invoice_fallback_documents`, which is called exclusively when `allow_fallback_pdf=True`. However, the code at the return step also triggers when `allow_fallback_pdf=False` (normal wizard path), where the key is never set.
Replace the bare dict access `move_data['proforma_pdf_attachment']` with `move_data.get('proforma_pdf_attachment', self.env['ir.attachment'])` so the flow returns an empty attachment recordset instead of raising a `KeyError` when no fallback proforma PDF was generated.
Fixes: KeyError: 'proforma_pdf_attachment' in account.move.send.wizard Steps to reproduce:
1. Use the Send & Print wizard on a posted invoice
2. Trigger a condition where _get_invoice_extra_attachments returns an empty recordset (e.g. via l10n_vn_edi_viettel with sinvoice files not yet fetched) despite no error being raised
Forward-Port-Of: odoo/odoo#264564This update fixes an issue where updating a manufacturing order (MO) with a multi-level BOM would only create MOs for the immediate child components, missing the next level. The fix ensures that all necessary MOs are created during the BOM update process, preventing incomplete manufacturing operations. This improves the reliability of production planning.
Original PR description
When updating a mo, if the new component has a multilvl bom, it will only create a mo for the direct child and not the next Steps to reproduce: ------------------- * Create a products "Main",…
When updating a mo, if the new component has a multilvl bom, it will only create a mo for the direct child and not the next Steps to reproduce: ------------------- * Create a products "Main", "Final", "Semi", "Raw" * Create a Bom for "Final" with "Semi" as component * Create a Bom for "Semi" with "Raw as component * Add MTO on Final and Semi * Create a MO for Main with no components and confirm it * Add "Final" to the mo as component as save. -> The MO for "Final" is correctly created with "Semi" as component but there is no MO for "Semi" with "Raw" as component. Observation: ------------- When updating de MO, it will write the new SM (Final) to the production, and we will call ```_autoconfirm_production``` with ```no_procurement```: https://github.com/odoo/odoo/blob/6fb69b5640743d3bc7bb52c73cb27da428f2451c/addons/mrp/models/mrp_production.py#L1051 Where we will directly confirm the sm (```_action_confirm```). From the SM ```_action_confirm``` we will create and run a procurement (manufacture in our case). From the manufacture we will create the new move line for Semi and go through ```action_confirm``` on the manufacturing order: https://github.com/odoo/odoo/blob/9ef76a4d6010191ab7ab1a0d1085972901280dda/addons/mrp/models/stock_rule.py#L116-L118 In the MO ```action_confirm```, we will confirm the move and should create new procurement for the moves that need them, but, since in our case we have ```no_procurement``` in the context, we will set ```create_proc``` to false: https://github.com/odoo/odoo/blob/9ef76a4d6010191ab7ab1a0d1085972901280dda/addons/mrp/models/mrp_production.py#L1635 Since ```create_proc``` is false we will not create a procurement for those move lines: https://github.com/odoo/odoo/blob/6fb69b5640743d3bc7bb52c73cb27da428f2451c/addons/stock/models/stock_move.py#L1557-L1558 https://github.com/odoo/odoo/blob/6fb69b5640743d3bc7bb52c73cb27da428f2451c/addons/stock/models/stock_move.py#L1571-L1580 opw-6005675 Forward-Port-Of: odoo/odoo#258153
This update fixes a regression where the color picker in Odoo was not recognizing colors defined using the `color()` function. Following a recent website update, this change restores full functionality, ensuring users can correctly set background colors within the HTML Builder and Editor. This resolves an issue impacting visual customization.
Original PR description
Following the website refactoring (commit 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2) `BuilderColorPicker` no longer recognizes colors defined using `color()`, introducing a regression. This commit restores support for `color()` values. Steps to reproduce: 1. Add the snippet `s_text_image`. 2. Manually, in the DOM, set the style of the first column to "background-color: color(srgb 0.4 0.2 0.8 / 0.4);". 3. In edit mode, click on the column to observe that the colorpicker does not recognize the background color. The same behavior can also be observed in the custom tab. Task: [5453922](https://www.odoo.com/odoo/project/974/tasks/5453922) Forward-Port-Of: odoo/odoo#265443 Forward-Port-Of: odoo/odoo#255331
This update fixes an issue where service products didn't consistently apply user-defined default units of measure. Previously, the default unit was overridden when a product was marked as a service. Now, the system correctly applies the user's preferred unit of measure for all products, including services, ensuring accurate time tracking and invoicing.
Original PR description
A user-defined default on `product.template` Unit is not applied when the product is of type Service 1. Install Sales and Sales Timesheet 2. Go to Settings > Sales > Product Catalog and enable Units of Measure & Packagings 3. Enable debug mode 4. Go to Sales > Products, open a new product form and set unit to Days 5. In the debug menu (bug icon in the top right), select Set Default Values for Unit = Days and save 6. Reload the page 7. Set the type to Service 8. Unit changes from Days to Hours Same issue happens for `product.product` Issue: User default values are overwritten when certain conditions are met by https://github.com/odoo/odoo/blob/6955370fd2d62c83f0ea24247abf7a9e4b4ebed3/addons/sale_timesheet/models/product_template.py#L55-L57 Solution: Use the user defined default on `uom_id` except for service products that are invoiced with timesheets as they need a time unit of measure opw-6139603 Forward-Port-Of: odoo/odoo#262597
This update fixes an issue where Fedex labels were missing a crucial 'REF' field, which is required by the shipping carrier. The fix ensures that all Fedex labels now correctly include this reference, preventing potential delivery delays or errors. This improves the accuracy and reliability of our shipping process.
Original PR description
Issue ----- `REF` field of Fedex labels is missing. Steps to reproduce ----- - Setup Fedex - Create a product (set weight) - Create a delivery for the product - Set carrier as Fedex - Validate…
Issue
-----
`REF` field of Fedex labels is missing.
Steps to reproduce
-----
- Setup Fedex
- Create a product (set weight)
- Create a delivery for the product
- Set carrier as Fedex
- Validate delivery
- Opend the label
> REF field is empty
Cause
-----
When filling the `CustomerReferences`, we only specify the SO
https://github.com/odoo/enterprise/blob/aae680f5b86fa87193ba6616e8431eed985b2ee7/delivery_fedex_rest/models/fedex_request.py#L309-L313
The `REF` field is populated using `CUSTOMER_REFERENCE` references, which is not present in this case.
Excerpt of the API DOC
-----
```
"CustomerReference": {
"type": "object",
"properties": {
"customerReferenceType": {
"type": "string",
"description": [...],
"example": "DEPARTMENT_NUMBER",
"enum": [
"CUSTOMER_REFERENCE",
"DEPARTMENT_NUMBER",
"INVOICE_NUMBER",
"P_O_NUMBER",
"INTRACOUNTRY_REGULATORY_REFERENCE",
"RMA_ASSOCIATION"
]
},
"value": {
"type": "string",
"description": [...],
"example": "3686"
}
}
},
```
[...] replaces long description strings, refer to API for full documentation.
Result after fix
-----
<img width="477" height="738" alt="image" src="https://github.com/user-attachments/assets/0d3a0786-5b7d-41cc-8548-2dc7b0f379ab" />
-----
Ticket:
opw-6101620
Forward-Port-Of: odoo/enterprise#116870This update significantly speeds up the process of finding BOMs for product records, particularly when dealing with large numbers of products. The change optimizes how the system identifies relevant BOMs, reducing processing time and improving overall MRP performance. This results in faster product configuration and order fulfillment.
Original PR description
Before this commit, finding a bom for a recordset of `products` involved looping over all the boms and it will loop over all the `product_variant_ids` of `bom.product_tmpl_id` if the bom's…
Before this commit, finding a bom for a recordset of `products` involved looping over all the boms and it will loop over all the `product_variant_ids` of `bom.product_tmpl_id` if the bom's `product_id` is NULL. This approach might loop over variants which we are not trying to find a bom for. In additon to that, due to the fact that multiple boms might have the same `product_tmpl_id`, this approach might consider the same variants in the inner loop redundantly even though we matched the variant with a bom in a previous itration.
Worst case, this might result in a time complexity of $O(N * M)$ where N is the number of boms and M is the number of variants.
To improve the performance, I only considered the variants given in the paramater `products` and in addition to that, I created a new dictionary mapping a `product_tmpl_id` to its bom if the bom doesn't have a variant set. By doing this, I can loop over the `products` given and if it doesn't have a bom set then it will be set to the one its template had taken from the previos loop.
In a method call with the following constraints
- **2** products the method was finding a bom for
- The 2 products had the same template and the template contained **550** active variants
- The boms were only related to the template rather than the variants themselves.
| Input Size | Before | After |
| :--- | :--- | :--- |
| 100 | 0.78s | 0.03s |
| 1000 | 8.53s | 0.11s |
| 10000 | 80.99s | 0.73s |
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#2474659 changes
Enhancements to existing features
This update improves the softphone's call history by allowing users to initiate calls without needing to first select a contact. This simplifies the call logging process and enhances user convenience. The change is a minor improvement to the softphone functionality.
Original PR description
Make it possible to log on calls without contscts on softphone. Task-[6204798](https://www.odoo.com/odoo/5778/tasks/6204798)
Resolved issues and error corrections
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052A bug was causing errors when creating new Helpdesk teams. This update ensures that a necessary email template exists before attempting to use it, preventing a system crash. This improves the stability of the Helpdesk module.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update fixes a bug that prevented order synchronization with Lazada when package information was incomplete. The system now gracefully handles missing package data, avoiding errors and ensuring orders are synced correctly. This improves the overall reliability of the Lazada integration.
Original PR description
orders can omit package data in the API payload if the package id doesn't match. When a picking still had a package_extern_id, filtering order_items by that id produced an empty list, and max() on the resulting timestamps raised ValueError and blocked order sync. Return early when no matching package lines exist so sync can continue. taskId - 6195507 Forward-Port-Of: odoo/enterprise#117194
This update fixes an issue where URLs with mixed or uppercase characters weren't automatically converted to clickable links within the HTML editor. The fix ensures that all URLs, including those with single-character domains like 'x.com', are correctly recognized and linked. This enhancement improves the user experience by making it easier to share and navigate to online resources.
Original PR description
### Description of the issue/feature this PR addresses: - URL_REGEX was constructed with the "i" flag, but passing a RegExp object to new RegExp(regex, "g") silently drops the original flags, leaving only "g". This caused uppercase (ODOO.COM) and mixed-case (Odoo.Com) URLs to not be converted to links when pressing space. ### Desired behavior after PR is merged: - URL_REGEX.source with explicit "gi" flags to preserve case-insensitive matching in `prepareConvertToLink`. - Allow automatic URL detection for single-character domains such as `x.com`, `t.co`, and `a.io` by relaxing the minimum domain label length in the URL regex from 2 to 1 characters. task-6199269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265409 Forward-Port-Of: odoo/odoo#263255
This update fixes an error in the WPS payroll report generation process. Specifically, it ensures the report correctly uses the value date and prevents issues when the payment date is too close to or equal to the value date, leading to more accurate and reliable reports for Saudi Arabian payroll.
Original PR description
In this commit, we: - corrected the tooltip description of `l10n_sa_wps_value_date`; - added back the Debit Date to the WPS file and assigned it the value of the `effective_date`; - added back the user error in case the Payment Date is greater than or equal to the Value Date. TaskID-6130969 Forward-Port-Of: odoo/enterprise#115762
This update fixes a minor issue in the demo order system for point-of-sale and restaurant POS. Previously, demo orders used a default forward slash ('/') as an order reference. Now, all demo orders have sequential order references, except those in the 'new' state. This ensures demo orders are more accurately represented and easier to understand.
Original PR description
Before this commit: =================== - For demo orders, no proper Order Reference is displayed, by default, it is set to '/'. After this commit: =================== - All default '/' values are replaced with a sequential Order Reference, except for orders in the 'new' state . Task-6004716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264971 Forward-Port-Of: odoo/odoo#253272
This update corrects a bug where users couldn't edit dates within the blog translate mode. The fix ensures the `DateTimeFieldPlugin` is correctly included in the necessary Odoo modules, allowing for proper date field editing and preventing potential save errors. This improves the user experience for blog content management.
Original PR description
The plugin `DateTimeFieldPlugin` was only added in registry `builder-plugins`. But it should also be included in the lists `CORE_PLUGINS` of `html_builder` and `TRANSLATION_PLUGINS` of `website` (the same as `MonetaryFieldPlugin` and similar plugins) Steps to reproduce: - Open `/blog` in translate mode - Click on a date - Bug: you can edit the text (and it will likely cause an error on save) task-6226376 Forward-Port-Of: odoo/odoo#265400 Forward-Port-Of: odoo/odoo#264943
This update corrects a bug in the Odoo holiday scheduling module. Previously, a key field was missing from a system update trigger, preventing proper validation of dates. Now, any changes to the popover form in validated state will trigger a correct validation error, ensuring accurate holiday calculations.
Original PR description
Related-https://github.com/odoo/enterprise/pull/114445 The `work_entry_type_request_unit` field was missing from the @api.depends decorator of `_compute_date_from_to()`. This prevented the method from recomputing `date_from` and `date_to` when related fields changed, which meant the `_check_date_state` constraint was never triggered. After this change, whenever any field changes on popover form in validated state it will raise proper validation error task-[6117310](https://www.odoo.com/odoo/project/1251/tasks/6117310) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
23 changes
Enhancements to existing features
This update enables users to reset statement lines directly within the Kanban view, mirroring functionality from previous versions. This prevents the need to manually delete numerous reconciliations associated with a single statement line, streamlining the accounting process.
Original PR description
This commit adds the possibility to reset a statement line in kanban view like in the previous versions. Function is still there but no UI button was tied to it. This is a problem if you have many reconciliations on one statement line, we do not want to delete them one by one. opw-6015838 Forward-Port-Of: odoo/enterprise#111107
Resolved issues and error corrections
This update resolves an issue that prevented users from initiating replenishment orders when no routes were associated with a product and the company's routes were not active. The fix ensures the system handles empty route lists gracefully, preventing a technical error and ensuring replenishment functionality works correctly for all products.
Original PR description
## Steps to Reproduce: 1. Install the stock module. 2. Activate "Multi-Step Routes" from settings. 3. Activate the "My Company (Chicago)" company. 4. Create a route for the Chicago company. 5. Create a new product and enable the created route on it. 6. Click on the "Replenish" button. ## Error: `IndexError - tuple index out of range` ## Cause: At [1], when none of the product routes belong to the current company or are shared routes, the filtering returns an empty recordset. As a result, trying to access the first route from the empty result raises an index error. ## Fix: This commit only assigns `route_id` when a route matches the given condition. Otherwise, it keeps the value as `False`. [1] - https://github.com/odoo/odoo/blob/13c0e082c260381a332fe1425fe2ba83a1c0c579/addons/stock/wizard/product_replenish.py#L78 sentry-7488075413 Forward-Port-Of: odoo/odoo#265179
This update corrects a bug where users could cause an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity. This improves the user experience and prevents potential data issues.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052This update fixes a bug that prevented users from creating new helpdesk teams. The issue occurred when the system attempted to use a default email template after deleting all helpdesk stages. The fix ensures the template exists before attempting to use it, preventing an error and allowing team creation to proceed smoothly.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update fixes a bug that prevented order synchronization with Lazada when package information was incomplete. The system now gracefully handles missing package data, preventing errors and ensuring orders are synced correctly. This improves the overall reliability of the Lazada integration.
Original PR description
orders can omit package data in the API payload if the package id doesn't match. When a picking still had a package_extern_id, filtering order_items by that id produced an empty list, and max() on the resulting timestamps raised ValueError and blocked order sync. Return early when no matching package lines exist so sync can continue. taskId - 6195507 Forward-Port-Of: odoo/enterprise#117194
This update fixes a bug that prevented the HTML editor from correctly converting URLs with mixed or uppercase characters into clickable links. The fix now ensures all URLs, including short domains like 'x.com', are automatically recognized and linked. This improves the user experience by making it easier to share and navigate to online resources within Odoo.
Original PR description
### Description of the issue/feature this PR addresses: - URL_REGEX was constructed with the "i" flag, but passing a RegExp object to new RegExp(regex, "g") silently drops the original flags, leaving only "g". This caused uppercase (ODOO.COM) and mixed-case (Odoo.Com) URLs to not be converted to links when pressing space. ### Desired behavior after PR is merged: - URL_REGEX.source with explicit "gi" flags to preserve case-insensitive matching in `prepareConvertToLink`. - Allow automatic URL detection for single-character domains such as `x.com`, `t.co`, and `a.io` by relaxing the minimum domain label length in the URL regex from 2 to 1 characters. task-6199269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265409 Forward-Port-Of: odoo/odoo#263255
This update resolves a performance issue in the ES VAT Books report where excessive journal entries caused browser crashes. By implementing a 'load more' limit of 4000, the report now handles larger datasets more efficiently, improving user experience and stability.
Original PR description
The ES VAT Books report currently does not limit the number of lines loaded in the browser. This becomes more and more problematic as the volume of journal items listed in the report increases, ultimately leading to the browser being unable to render that many elements without crashing. Inspired by how this situation is handled in other reports and localizations, we now make use of the `load_more_limit` parameter and set a new default value of 4000 for it. Ticket: opw-5962456 Forward-Port-Of: odoo/enterprise#113830
This update fixes a bug where users could still attempt to book rental services even when resources were unavailable during their chosen time periods. The change ensures that the system now correctly blocks users from adding unavailable resources to their cart, preventing booking errors and improving the user experience. This enhancement is part of a broader effort to ensure accurate rental service availability.
Original PR description
Before this commit, when the user goes to the webshop to take a rental service with rental service unavailable at a certain period, the system does not block the user when the resource is not available during 2 hours in the period chosen by the user. The reason is because the hours are not checked when website_sale_renting_stock is not installed. This commit moves the code checking the time of the rental period made in website_sale_renting_stock in website_sale_renting to be able to have that verification for rental service used with planning to make sure the system will prevent the user to add the product in his cart when the resource is unavailable. task-5123239
This update fixes an issue where the bank account currency wasn't correctly reflected in the XML files generated for Polish e-invoices (Ksef). The change ensures that the 'OpisRachunku' field in the XML accurately displays the bank account currency, resolving a potential reporting discrepancy. This improves the accuracy of e-invoice data transmission.
Original PR description
**STEP TO REPRODUCE** 1. Create a partner with a bank account and setup its currency. 2. Create an invoice using a different currency. 3. Send the invoice to Ksef. 4. Notice the generated xml contains the invoice currency in the field OpisRachunku, but it should be the bank account currency instead. opw-6150563 Forward-Port-Of: odoo/odoo#263842
This update resolves an issue where clicking a dropdown on the `/r` page would cause a system crash. The fix ensures the dropdown observer only starts when the menu element is fully rendered, preventing a 'TypeError' and allowing the dropdown to function correctly. This improves the user experience on this specific page.
Original PR description
Steps to reproduce: - Go to the `/r` page. - Click a dropdown. => traceback Before this commit, `Dropdown.onOpened()` always observed `menuRef.el` as soon as the popover reported it was open. In frontend pages such as `/r`, the menu can still be rendering at that moment. The menu appears just after, but `MutationObserver.observe()` already received `undefined` and raised a `TypeError`. After this commit, `Dropdown.onOpened()` only starts the observer when the menu element exists. The dropdown can finish opening normally, so the menu is shown without traceback. Introduced by [1]. [1]: 7aed5b141f06 Forward-Port-Of: odoo/odoo#265224
This update corrects a bug where changing the standard price of a lot-valued product didn't correctly update the product's cost. The fix ensures that the product's cost is accurately recalculated when the standard price is modified, maintaining correct inventory valuation. This resolves a discrepancy in how lot-valued products are tracked.
Original PR description
**Problem:** change of standard price on a product valued by lot and with standard price category does not work **Steps to reproduce:** - create a storable product tracked and valued by lot - set…
**Problem:** change of standard price on a product valued by lot and with standard price category does not work **Steps to reproduce:** - create a storable product tracked and valued by lot - set category as standard price - set a cost of 10 and save - click on the quantity smart button and then "update quantity" - add a quantity of 1 in a new lot - on the product form, change the cost to 12 and save - reload the page **Current behavior:** the cost is back to 10 **Expected behavior:** it should stay 12 **Cause of the issue:** when we change the standard_price of the product, _change_standard_price() is called from the write method https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/product.py#L293 Inside _change_standard_price(): step 1: a new product.value is created step 2 : we set the standard_price of the lots to be the same as the one of the product https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/product.py#L319-L323 In the create method for product.value (step 1), we call _set_value() on the moves with a remaining quantity https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/product_value.py#L95 At the end of set_value we call _update_standard_price() on our product https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/stock_move.py#L337 Because the product is lot_valuated we update the standard_price based on the avg_cost of the product (this is needed because for instance if the prod is avco we can not simply use _run_average_batch as it is the case for non lot valuated avco product, because then the result won't be a weighted average of each lot, whereas avg_cost does take this into account) https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/product.py#L633-L634 To compute the avg_cost, inside _compute_value(), we use the total value of each lot https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/product.py#L226 The lots total value is computed inside the _compute_value() method of stock.lot. In this method, because the product is valued by standard_price we use the standard price of the lot https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/stock_lot.py#L40 But this value hasn't been updated yet (it will be at the time of step 2) so it's still the old value (10 in our case). So the avg_cost of the product will also be the old value and the standard price will be udpated back the old value Then, at the end of _change_standard_price() (at the time of step 2) the standard price of the lots are set based on the standard price of the product (so it stays the old value) **fix:** Inside _update_standard_price(), if the product is valued by standard price we do nothing https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock_account/models/product.py#L639-L640 We apply the same logic for the lot_valued product, if it's standard_price there is nothing to update opw-5949146 Forward-Port-Of: odoo/odoo#264991
This update resolves an issue where time off requests with dual approval ('both') weren't sending notifications to the designated responsible parties. The fix ensures that notifications are properly sent to the 'Notified Time Off Officer' when this approval type is selected, improving the accuracy of time off request workflows.
Original PR description
…cer') no fallback for responsible_ids
Issue:
When ('both','By Employee's Approver and Time Off Officer') is selected on a new HR Leave Type it does not fall back to the responsible_ids or “Notify HR”.
Steps:
1) Setup a neutralized outgoing mail server
2) install hr_holidays
3) make a new hr.leave.Type (Approval) with ('both','By Employee's Approver and Time Off Officer') and select a 'Notified Time Off Officer'(responsible_ids) 4) select an emplyee with a reelated user and remove the coach, manager, and responsible 'Time Off'. 5) save
6) Sign in as the employee, make a time off request under the new Type 7) No email
Fix:
Add a conditional with the lowest priority to fall back to responsible_ids
opw-6101637
Forward-Port-Of: odoo/odoo#264332
Forward-Port-Of: odoo/odoo#261853This update fixes an issue where Italian tax data (specifically INPS and Pension Fund) wasn't being properly imported into Odoo. The fix ensures these taxes are correctly configured, allowing the system to accurately process vendor bills and comply with Italian tax regulations. This improves the reliability of tax calculations and reporting.
Original PR description
### Issue before this commit: In the previous implementation, several Italian taxes, specifically the 4% INPS and the 4% Pension Fund (F.Pens), were not correctly initialized. Although the relevant…
### Issue before this commit: In the previous implementation, several Italian taxes, specifically the 4% INPS and the 4% Pension Fund (F.Pens), were not correctly initialized. Although the relevant EDI data was present in the source CSV templates, it was missing from the actual tax records in the database. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi 2. Go to Accounting -> Taxes 3. Open 4% INPS tax and 4% F.Pens and go to Advanced Options tab and see that no Pension Fund Type is associated by default ### Cause of the issue: While moving the witholding data from l10n_it_edi to l10n_it in this commit https://github.com/odoo/odoo/commit/40e09ca01242 the templates were not correcly rendered and set up. ### Reason to introduce the fix: For a tax to be correctly recognized from the XML, it is essential that we have the corresponding tax already configured in Odoo, including the specific type. We should have at least these two taxes fully configured so the system can elaborate them correctly when imported from vendor bills. opw-6093221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258947
This update ensures that the customer reference field from invoices is correctly included in the fa3 XML file generated for transmission to the Polish KSEF (tax office). Previously, this information was missing, which could cause processing delays. This fix ensures compliance with Polish tax regulations.
Original PR description
**STEP TO REPRODUCE** 1. Create an invoice and fill the customer reference field (other info tab). 2. send the invoice to ksef. 3. Open the generated fa3 file, and notice there is no mention of the customer reference. Ticket [link](https://www.odoo.com/odoo/project.task/6150812) opw-6150812 Forward-Port-Of: odoo/odoo#263797
This update fixes a bug where selecting a table cell would sometimes incorrectly select the entire table. Previously, selection started in a cell and ended outside the cell wasn't properly handled. This change ensures that table selections work consistently, regardless of how the user initiates the selection process.
Original PR description
The previous commit fixes a behavior that is expected when the user makes a selection that starts in any element and ends in a table cell (the whole table gets selected), but the reverse case was never handled, namely when the selection starts in a table cell and ends outside of it. backport-https://github.com/odoo/odoo/pull/239270/changes/68e71fad5bbb0445bb1850bf694235f3235b602f task-5420366 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265464 Forward-Port-Of: odoo/odoo#264722
This update ensures that WhatsApp channel avatars in the sidebar accurately reflect the member who added the channel, rather than defaulting to a generic avatar. Previously, adding a member caused the incorrect avatar to be shown. This fix improves the user experience and visual consistency within the WhatsApp channel interface.
Original PR description
WhatsApp sidebar avatars should be resolved from the channel's whatsapp member, not from an arbitrary non-self member. Before this fix, adding a member to a WhatsApp channel caused the default Discuss avatar to be displayed instead of the actual WhatsApp member's avatar. This happened because the correspondent was not correctly computed for channels of type whatsapp. task-[5879840](https://www.odoo.com/odoo/project/1519/tasks/5879840) Forward-Port-Of: odoo/enterprise#117633 Forward-Port-Of: odoo/enterprise#115745
This update resolves an issue where the Send & Print wizard would fail when proforma PDFs weren't generated for invoices. The change ensures the system handles cases where these PDFs aren't available gracefully, preventing errors and improving the reliability of invoice sending. This primarily affects invoices processed with specific localization modules.
Original PR description
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict. The…
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict.
The `proforma_pdf_attachment` key is only populated in `_generate_invoice_fallback_documents`, which is called exclusively when `allow_fallback_pdf=True`. However, the code at the return step also triggers when `allow_fallback_pdf=False` (normal wizard path), where the key is never set.
Replace the bare dict access `move_data['proforma_pdf_attachment']` with `move_data.get('proforma_pdf_attachment', self.env['ir.attachment'])` so the flow returns an empty attachment recordset instead of raising a `KeyError` when no fallback proforma PDF was generated.
Fixes: KeyError: 'proforma_pdf_attachment' in account.move.send.wizard Steps to reproduce:
1. Use the Send & Print wizard on a posted invoice
2. Trigger a condition where _get_invoice_extra_attachments returns an empty recordset (e.g. via l10n_vn_edi_viettel with sinvoice files not yet fetched) despite no error being raised
Forward-Port-Of: odoo/odoo#264564This update resolves an issue preventing normal users from canceling approval requests they created. The fix uses 'sudo' to grant the necessary permissions, ensuring users can now successfully cancel their own approvals without errors. This improves user experience and streamlines the approval process.
Original PR description
Issue: - A user who created an approval request could cancel it. But a rights error appeared during the cancellation. Steps to Reproduce: - Create an approval being a normal user. - Try to cancel the approval. - A ValidationError is raised eventhough the approvals can be cancelled by creator of it. Fix: - Changed the cancel action to use the sudo for the user who created the task and can cancel it Impact: - Users can cancel their own approval requests without errors. Task: 6123104 Forward-Port-Of: odoo/enterprise#114189
This update fixes a minor visual issue on the Odoo website's shop page. Specifically, it prevents the 'clear' button from shrinking, ensuring a consistent and professional look for customers. This improves the overall user experience and brand image.
Original PR description
task-6145581 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262183
This update resolves an issue where updating a manufacturing order (MO) with a multi-level BOM would only create MOs for the immediate child components, missing the next level. The fix ensures that all necessary MOs are generated during the update process, preventing incomplete manufacturing workflows. This improves the reliability of production planning.
Original PR description
When updating a mo, if the new component has a multilvl bom, it will only create a mo for the direct child and not the next Steps to reproduce: ------------------- * Create a products "Main",…
When updating a mo, if the new component has a multilvl bom, it will only create a mo for the direct child and not the next Steps to reproduce: ------------------- * Create a products "Main", "Final", "Semi", "Raw" * Create a Bom for "Final" with "Semi" as component * Create a Bom for "Semi" with "Raw as component * Add MTO on Final and Semi * Create a MO for Main with no components and confirm it * Add "Final" to the mo as component as save. -> The MO for "Final" is correctly created with "Semi" as component but there is no MO for "Semi" with "Raw" as component. Observation: ------------- When updating de MO, it will write the new SM (Final) to the production, and we will call ```_autoconfirm_production``` with ```no_procurement```: https://github.com/odoo/odoo/blob/6fb69b5640743d3bc7bb52c73cb27da428f2451c/addons/mrp/models/mrp_production.py#L1051 Where we will directly confirm the sm (```_action_confirm```). From the SM ```_action_confirm``` we will create and run a procurement (manufacture in our case). From the manufacture we will create the new move line for Semi and go through ```action_confirm``` on the manufacturing order: https://github.com/odoo/odoo/blob/9ef76a4d6010191ab7ab1a0d1085972901280dda/addons/mrp/models/stock_rule.py#L116-L118 In the MO ```action_confirm```, we will confirm the move and should create new procurement for the moves that need them, but, since in our case we have ```no_procurement``` in the context, we will set ```create_proc``` to false: https://github.com/odoo/odoo/blob/9ef76a4d6010191ab7ab1a0d1085972901280dda/addons/mrp/models/mrp_production.py#L1635 Since ```create_proc``` is false we will not create a procurement for those move lines: https://github.com/odoo/odoo/blob/6fb69b5640743d3bc7bb52c73cb27da428f2451c/addons/stock/models/stock_move.py#L1557-L1558 https://github.com/odoo/odoo/blob/6fb69b5640743d3bc7bb52c73cb27da428f2451c/addons/stock/models/stock_move.py#L1571-L1580 opw-6005675 Forward-Port-Of: odoo/odoo#258153
This update fixes an issue where service products weren't correctly applying user-defined default units of measure. Previously, the system would override these settings when a product was marked as a service. Now, default units are applied unless a service product is being invoiced with timesheets, ensuring accurate unit tracking for all product types.
Original PR description
A user-defined default on `product.template` Unit is not applied when the product is of type Service 1. Install Sales and Sales Timesheet 2. Go to Settings > Sales > Product Catalog and enable Units of Measure & Packagings 3. Enable debug mode 4. Go to Sales > Products, open a new product form and set unit to Days 5. In the debug menu (bug icon in the top right), select Set Default Values for Unit = Days and save 6. Reload the page 7. Set the type to Service 8. Unit changes from Days to Hours Same issue happens for `product.product` Issue: User default values are overwritten when certain conditions are met by https://github.com/odoo/odoo/blob/6955370fd2d62c83f0ea24247abf7a9e4b4ebed3/addons/sale_timesheet/models/product_template.py#L55-L57 Solution: Use the user defined default on `uom_id` except for service products that are invoiced with timesheets as they need a time unit of measure opw-6139603 Forward-Port-Of: odoo/odoo#262597
This update fixes an issue where Fedex delivery labels were missing a crucial 'REF' field, which is required by the shipping carrier. The fix ensures that all labels now correctly include this reference, preventing potential delivery delays or errors. This improves the accuracy and reliability of our shipping process.
Original PR description
Issue ----- `REF` field of Fedex labels is missing. Steps to reproduce ----- - Setup Fedex - Create a product (set weight) - Create a delivery for the product - Set carrier as Fedex - Validate…
Issue
-----
`REF` field of Fedex labels is missing.
Steps to reproduce
-----
- Setup Fedex
- Create a product (set weight)
- Create a delivery for the product
- Set carrier as Fedex
- Validate delivery
- Opend the label
> REF field is empty
Cause
-----
When filling the `CustomerReferences`, we only specify the SO
https://github.com/odoo/enterprise/blob/aae680f5b86fa87193ba6616e8431eed985b2ee7/delivery_fedex_rest/models/fedex_request.py#L309-L313
The `REF` field is populated using `CUSTOMER_REFERENCE` references, which is not present in this case.
Excerpt of the API DOC
-----
```
"CustomerReference": {
"type": "object",
"properties": {
"customerReferenceType": {
"type": "string",
"description": [...],
"example": "DEPARTMENT_NUMBER",
"enum": [
"CUSTOMER_REFERENCE",
"DEPARTMENT_NUMBER",
"INVOICE_NUMBER",
"P_O_NUMBER",
"INTRACOUNTRY_REGULATORY_REFERENCE",
"RMA_ASSOCIATION"
]
},
"value": {
"type": "string",
"description": [...],
"example": "3686"
}
}
},
```
[...] replaces long description strings, refer to API for full documentation.
Result after fix
-----
<img width="477" height="738" alt="image" src="https://github.com/user-attachments/assets/0d3a0786-5b7d-41cc-8548-2dc7b0f379ab" />
-----
Ticket:
opw-6101620
Forward-Port-Of: odoo/enterprise#116870This update resolves a memory issue that previously prevented users from importing large PDF files into the Documents App. The fix disables a resource-intensive part of the PDF processing library, ensuring smoother and more reliable PDF imports for all users. This improves the overall user experience and prevents data import failures.
Original PR description
### Description: When trying to import a large PDF file into the Documents App, it can sometimes fail because of an Out-of-Memory error (OOM). This is caused by the library `pdfminer.six` and the function `group_textboxes` that helps order the result of the indexing. This function is memory heavy and is not useful for our use case. To avoid it, we can just disable the "advanced layout analysis" by disabling `boxes_flow`. ### Reference: opw-6164752 Forward-Port-Of: odoo/odoo#264301
3 changes
Resolved issues and error corrections
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity. This improves the user experience when updating these critical planning figures.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052This update fixes an error that occurred when creating new Helpdesk teams. Specifically, the system would fail if the default 'Helpdesk: Ticket Received' email template was missing. The change ensures the template exists before attempting to use it, preventing the error and allowing team creation to proceed smoothly.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update corrects a bug where certain quality control test types were incorrectly displayed during work order creation. The change ensures these test types are only available for manufacturing operations, improving data accuracy and preventing users from selecting inappropriate options. This resolves an issue identified through testing.
Original PR description
### Issue: The `Print Label`, `Register Production`, `Register By-products`and `Register Consumed Materials` are all available in the test types at control point creation. ### Expected behavior:…
### Issue:
The `Print Label`, `Register Production`, `Register By-products`and `Register Consumed Materials` are all available in the test types at control point creation.
### Expected behavior:
These test types are only meant for manufacturing operations and are supposed to be hidden by the field domain:
https://github.com/odoo/enterprise/blob/f56aa85b4ad32c5d9ad5593df1366d72e88da0e4/mrp_workorder/models/quality.py#L102-L104 https://github.com/odoo/enterprise/blob/00d6cccd75c402378698a6fd11ee2692f2361c7f/mrp_workorder/models/quality.py#L20-L24
### Cause of the issue:
Since saas-18.1: 5ef007a2116e528b796ebe80fb291ba5f1a94c8f domains are optimised into equivalents SQL clause with better sql performances. This optimization results in the following match for boolean fields:
`('field', '=', True)` -> `('field', 'in', OrderedSet([True]))`
`('field', '=', False)` -> `('field', ' not in', OrderedSet([True]))`
Because of these:
https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L1058-L1079 https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L1215-L1236
Now the issue is that the specific `search_method` of the `allow_registration` field is then called with this optimized domain: https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L860-L866 https://github.com/odoo/enterprise/blob/00d6cccd75c402378698a6fd11ee2692f2361c7f/mrp_workorder/models/quality.py#L20-L24
And since `value` is defined as a non empty ordered set in both cases it the search method returns a True leaf as search domain.
opw-5915197
Forward-Port-Of: odoo/enterprise#1170685 changes
Resolved issues and error corrections
This update resolves an issue where signed PDF documents lost their original bookmarks and links. The fix ensures that signed documents remain fully navigable and consistent with the original PDF, preserving document structure and integrity for users.
Original PR description
Version - 18.0 Steps to reproduce: 1. Upload a PDF document containing bookmarks and internal/external links. 2. Sign the document and download the signed PDF. 3. Open the downloaded file and check the bookmarks and links. Issue: When a signed document was downloaded, the original PDF bookmarks And the links were not working. This broke structured navigation and affected document integrity. Fix: The PDF signing process has been updated to preserve the original bookmarks and ensure internal and external links remain functional after signing. Impact: - Signed documents remain navigable and consistent with the original PDF. - Preserves document structure and integrity. Task- 4915124 Forward-Port-Of: odoo/enterprise#117741 Forward-Port-Of: odoo/enterprise#108684
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity. This improves the user experience and prevents potential data inconsistencies.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052This update fixes an error that occurred when users tried to create new Helpdesk teams. The issue stemmed from attempting to access a missing email template, causing a system crash. The fix ensures the template exists before attempting to use it, preventing the error and allowing team creation to proceed smoothly.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update fixes an error that occurred when selecting shift templates for planning slots, specifically when dealing with long time differences in resource schedules. The change ensures the system gracefully falls back to a previously calculated end date if a valid working interval cannot be found, preventing the error and allowing users to correctly set up their planning.
Original PR description
Currently, an error occurs when a user selects a shift template on a planning slot. **Steps to Reproduce:** - Install the `Planning` module with demo data. - Create a `Resource Time Off` record with…
Currently, an error occurs when a user selects a shift template on a planning slot. **Steps to Reproduce:** - Install the `Planning` module with demo data. - Create a `Resource Time Off` record with `start` and `end date` separated by more than `1400 days (around 3.9 years)`, and Set the Working Hours field to Standard 40 hours/week. - Go to `Planning` > `Configuration` > `Shift Templates`, open an `existing record` or create a `new one`, and set the `Working Days` to more than 1 day. - Create a new `planning slot`, Assign the resource `Abigail Peterson`, and select the above `shift template`. `AttributeError: 'bool' object has no attribute 'replace'` This error occurs because when the user sets the shift template, the compute method runs to calculate the start and end datetimes [1]. It computes the end datetime by adding the template duration in working days from the given start datetime using the resource working calendar within a searchable range of around 1400 days [2]. During this computation, leaves and non-working days are skipped [3]. If no valid working interval is found within the searchable range, then it returns False [4], which raises the error [5]. This commit ensures that if plan_days returns False, the computation falls back to the previously calculated end date. [1]: https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/planning/models/planning.py#L662-L671 [2]: https://github.com/odoo/odoo/blob/a439bd305112f6efc752ce900f7782e7faaf7312/addons/resource/models/resource_calendar.py#L826-L835 [3]: https://github.com/odoo/odoo/blob/a439bd305112f6efc752ce900f7782e7faaf7312/addons/resource/models/resource_calendar.py#L533-L537 [4]: https://github.com/odoo/odoo/blob/a439bd305112f6efc752ce900f7782e7faaf7312/addons/resource/models/resource_calendar.py#L835 [5]- https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/planning/models/planning.py#L653-L654 sentry-7472958590 Forward-Port-Of: odoo/enterprise#117073
This update corrects a previous change that allowed branch companies to be incorrectly designated as payment providers. This restriction is necessary due to limitations in account journals and prevents potential accounting errors. The fix ensures that payment providers are only linked to their parent companies.
Original PR description
Issue: --- Branch companies can be selected as payment provider company, which should be restricted due to the limitation on account jounral. Steps to reproduce: 1- Create a branch company. 2- Add a website to the branch company. 3- Enable a payment provider in the parent company. 4- Duplicate the provider for the branch company and set branch as the company. 5- Navigate to the shop and add a product to cart. 6- Checkout and pay. In the SO, you can check that the payment provider from parent is used. Cause: --- This is introduced after https://github.com/odoo/odoo/commit/b093786714e9e8567cf75abf78ac3d954a3d89b2. That fix ensures providers from parent company to be returned as the branch compatible provider. However, that fix didn't restrict the branch companies to be selected as provider company which we shouldn't allow. #263869 opw-6013978 Forward-Port-Of: odoo/odoo#257622
3 changes
Resolved issues and error corrections
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052A previous issue prevented users from creating new helpdesk teams due to an error when the system attempted to use a missing email template. This update ensures the template exists before attempting to use it, resolving the error and allowing teams to be created successfully. This improves the usability of the Helpdesk module.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
A recent update caused errors when downloading signed documents through the Sign app. This fix corrects a problem related to how Odoo handles PDF compression, specifically with newer versions of the pypdf library. By moving the compression step, the download process is now stable and reliable.
Original PR description
This [related PR] introduced a compression pass after calls to mergePage(). However in newer versions of pypdf (>=3.5.2), compress_content_streams() can only be called on pages of PdfWriter. An error would be raised when called on pages of a PdfReader. Steps to reproduce ----- 1. Run Odoo with pypdf>=3.5.2 2. Sign and download a document in the Sign app 3. Traceback occurs Fix ---- This commit moves the compression to the writer object, after the merged page has been added. Related pr: https://github.com/odoo/odoo/pull/261879 runbot-937761 Forward-Port-Of: odoo/enterprise#117931 Forward-Port-Of: odoo/enterprise#117756
10 changes
Enhancements to existing features
This update adds a direct 'Import' option to the spreadsheet file menu, eliminating the need to first upload to Documents. Users can now quickly import .osheet.json, .csv, and .xlsx files directly into their spreadsheets, with files automatically saved to 'MY' (My Drive) for easy access.
Original PR description
Current behavior before PR: - Importing a spreadsheet required uploading the file to Documents first and Then, open it in the spreadsheet view. - This flow was inconvenient for users who simply want to import a file directly while working in a spreadsheet. Desired behavior after PR is merged: - Adds an 'Import' option in the File top bar menu. It opens the OS file picker and allows importing supported files such as .osheet.json, .csv, and .xlsx directly into the spreadsheet. - Imported files are uploaded to the 'MY' (My Drive) folder, so they remain accessible later from the Documents app as well. Task: [6000071](https://www.odoo.com/odoo/project/2328/tasks/6000071)
This update adds convenient buttons to the payslip and attendance forms, streamlining access to related information. Users can now quickly view their total leave days taken and link to the corresponding leave requests, as well as directly access the linked payslip from their attendance records. This enhances usability and reduces the time spent navigating between modules.
Original PR description
On the payslip form view, added a smart button that shows the total number of leave days taken, and when clicked, it redirects to the list of leave requests. On the attendance form view, added a smart button that shows the linked payslip. And when clicked, it redirects to that payslip. task-6089721
Resolved issues and error corrections
This update fixes an issue where project update descriptions incorrectly showed inflated budget totals after budget revisions. The fix ensures that only the active, confirmed budget revision is used, providing accurate budget information for project updates. This improves the reliability of project cost tracking.
Original PR description
**Problem:** When a project analytic budget is revised, the project update description shows an inflated total budget — the sum of both the original and the revised amounts — instead of reflecting…
**Problem:** When a project analytic budget is revised, the project update description shows an inflated total budget — the sum of both the original and the revised amounts — instead of reflecting only the active (confirmed) revision. **Steps to reproduce:** 1. Create a project with an analytic account 2. Create an analytic budget of $10,000 and confirm it 3. Create a revision of that budget for $15,000 and confirm it 4. Create a new project update 5. The update shows "$25,000" as the total budget instead of "$15,000" **Current behavior:** The project update displays the sum of all budget revisions ($25,000), regardless of their state. **Expected behavior:** Only the active confirmed budget ($15,000) should be used. **Cause of the issue:** `_compute_budget` queries all `budget.line` records matching the project's analytic account without filtering by the parent `budget.analytic` state. When a budget is revised, the original transitions to state `revised` while the new one becomes `confirmed`. Because `_compute_budget` has no state filter, it sums both, producing an inflated `total_budget_amount`. This field is then used in the project update template to compute the displayed budget total and percentage. By contrast, `_get_budget_items` — used for the detail rows — already applies `state in ['confirmed', 'done']`, so the two methods were inconsistent. **Fix:** Applying the same state filter to `_compute_budget` as already present in `_get_budget_items` ensures both methods draw from the same set of active budgets, keeping the project update totals consistent with the budget detail rows. opw-6128855 Forward-Port-Of: odoo/enterprise#117490 Forward-Port-Of: odoo/enterprise#115285
This update fixes an issue where the Point of Sale (PoS) displayed incorrect order totals due to delays in price calculations. By manually triggering the price calculation process during order validation, the system now accurately displays the total amount on the feedback screen. This ensures accurate pricing and a better user experience for PoS transactions.
Original PR description
We now call manually `setOrderPrices` on order validation to ensure `amount_total` is set on the order before displaying the feedback screen which depends on it. The issue is that requests to the FdM delay the call to this method, making the PoS display `0` as the amount is `undefined` in the meantime. We also ensure the PoS doesn't finalize the validation if an error occurs. see odoo/odoo#244298 Forward-Port-Of: odoo/enterprise#117767 Forward-Port-Of: odoo/enterprise#104468
This update ensures consistent and accurate MPF contribution eligibility for employees in Hong Kong. The changes align the age criteria for mandatory contributions and reporting, resolving a previous inconsistency that impacted contribution calculations and reporting accuracy for employees under 18. This improves payroll compliance and reporting.
Original PR description
### Before: - Mandatory MPF rules only checked the upper age bound (< 65 from period start). - Employees under 18 could still be considered eligible for EEMC/ERMC contributions. - eMPF reporting had a separate 16-year age check. - Employees younger than 16 were excluded from the eMPF report, even when they had voluntary contributions. ### After: - Mandatory MPF rules now apply a full age gate (18 to under 65) across the payslip period. - EEMC and ERMC use the same eligibility condition for consistent contribution behavior. - The eMPF reporting age check is now aligned to 18. - Employees under 18 remain excluded from eMPF reporting unless they have actual MPF contributions. - Under-18 employees with voluntary contributions are now included in the eMPF report, matching the existing over-65 voluntary contribution behavior. --- Task-6141664 Forward-Port-Of: odoo/enterprise#117205
This update prevents Odoo from wasting time attempting to create API keys for unreachable databases. Previously, errors would clutter the synchronization results and delay the process by up to 15 seconds. Now, the system simply skips these databases, improving synchronization speed and user experience.
Original PR description
#### The aim of this commit is to: - avoid cluttering the user UI with "obvious" error. - avoid wasting up to 15s trying to create the key if we don't get any response. #### Context: When a db is unreachable, trying to create an api-key on it will result in an error. #### Before this commit: - The wizard showing the result of the synchronization would show the error for every single databases in which it encounters that error. If there are a lot, it would bloat the result. - An unresponsive db would waste 15s of our sync time in a synchronized process. If that happens multiple times, we could end up a lot of time waiting for no reason. #### After this commit: We don't try to create an api key for unreachable databases. task-id: [5945269](https://www.odoo.com/odoo/project.task/5945269) - follow up Forward-Port-Of: odoo/enterprise#117832 Forward-Port-Of: odoo/enterprise#117053
This update enhances the accuracy of VAT and PND tax reports for Thai businesses by integrating branch code information. Previously, the system relied on a different identifier; now, it correctly reads the branch code from the `additional_identifiers` field, ensuring more precise tax reporting. This change is part of a broader migration to improve data consistency.
Original PR description
Following up to the branch code migration to additional identifier in l10n_th. We update VAT and PND tax reports along with the test to read the branch code from `additional_identifiers` instead of `company_registry`. Community PR: https://github.com/odoo/odoo/pull/263746 Upgrade PR: https://github.com/odoo/upgrade/pull/10185 task-6166583
This update fixes an issue where salary adjustments weren't being properly calculated after a pay run was temporarily set to 'draft' and then rerun. The fix automatically recomputes input lines and now displays a warning message on the payslip to indicate a salary attachment has been created, ensuring accurate payroll calculations.
Original PR description
**Steps to Reproduce**: 1. Run the pay run for a specific month 2. Validate the payslip 3. Create a salary adjustment starting within this month. 4. Set the pay run to draft 5. Rerun the pay run for this month The salary adjustment is not computed. **Fix**: Recompute input lines when payrun is set to draft. Show Warning message on payslip that salary attachment is created. **task**-6148499
Features or functions removed from Odoo
This update simplifies the tax reporting process for Odoo Enterprise users in Egypt. Redundant return types and associated reports have been removed to reduce complexity and improve clarity. This change focuses on streamlining the reporting experience and ensuring accurate tax compliance.
Original PR description
The Schedule Tax and Other Tax return types and their related reports were removed to reduce redundancy and avoid confusion. task-4967527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
This update simplifies the management of point-of-sale (POS) functionality by separating it from a previous utility. Additionally, the team addressed critical issues related to the 18.0 certification process for the EU IoT scale feature, ensuring compliance. This improves code organization and stability.
Original PR description
In order to simplify reuse of `IotScale` utility, we extract pos logic from it (move it to `ScaleScreen`). We also fix some `l10n_eu_iot_scale_cert` issues by updating the previously frozen code (for 18.0 certification).
8 changes
Enhancements to existing features
This update improves the configuration for GT Electronic Data Interchange (EDI) branches. Specifically, VAT information is no longer inherited, while key credentials for the EDI connection are now consistently managed. Additionally, configuration settings are now properly displayed for these branches, ensuring accurate setup and operation.
Original PR description
While creating branches for GT country, VAT shouldn't be inherited, while Infile credentials (l10n_gt_edi_ws_prefix, l10n_gt_edi_infile_token, l10n_gt_edi_infile_key) should. At the same time, config keys should also appear for branches on settings task-[6087168](https://www.odoo.com/odoo/project/967/tasks/6087168)
This update enables users to reset statement lines directly within the Kanban view, mirroring functionality from previous versions. Previously, resetting required deleting individual reconciliations, which was inefficient for users with many transactions on a single line. This change streamlines the process and improves usability.
Original PR description
This commit adds the possibility to reset a statement line in kanban view like in the previous versions. Function is still there but no UI button was tied to it. This is a problem if you have many reconciliations on one statement line, we do not want to delete them one by one. opw-6015838 Forward-Port-Of: odoo/enterprise#111107
Resolved issues and error corrections
This update corrects a visual issue where the project sharing notebook was using dark styles, causing a conflict with the light mode theme. The team removed a specific style file to ensure consistent appearance across all Odoo Enterprise environments.
Original PR description
The project sharing notebook previously used dark-themed styles, which conflicted with the light mode .Removing the notebook.dark.scss file from the imported files in the manifest. task-4922564
This update fixes a visual issue where the bottom rows of the Profit & Loss report were clipped when the screen was resized. The fix adjusts the report's wrapper height to ensure all data is visible, regardless of screen size. This improves the user experience for all users accessing this report.
Original PR description
Steps to reproduce: ------------------- 1. Go to Accounting > Reporting > Profit and Loss. 2. Resize the window so the report doesn't fit vertically. 3. Scroll to the bottom Observation: the last…
Steps to reproduce: ------------------- 1. Go to Accounting > Reporting > Profit and Loss. 2. Resize the window so the report doesn't fit vertically. 3. Scroll to the bottom Observation: the last rows are not reachable!! Why this happens: ----------------- The report content is inside a wrapper that has `height: 100%`, so the wrapper takes the full height of its parent. But the wrapper is placed below the action bar, so we end up with a wrapper taller than the space it actually has. Example: the parent is 700px and the action bar is 100px. The wrapper still get 700px which is the parent height, but it starts below the action bar, so its bottom 100px is below the visible area. The rows in this 100px are not reachable. The fix: -------- Set `min-height: 0` on the wrapper. This way it can shrink and take only the available space, not the full parent height (In our example, the wrapper height will now be 600px, so with the action bar, it adds up to 700px, the height of the parent). Before (at full scroll): "Net Income" clipped <img width="1309" height="990" alt="image" src="https://github.com/user-attachments/assets/e1b6bfd6-a6dd-4b73-8a27-a49c8dca03de" /> After (at full scroll): <img width="1310" height="991" alt="image" src="https://github.com/user-attachments/assets/e17fc283-e3c8-455d-85cd-dacdd1fc9537" /> opw-6173522
This update corrects a bug where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' fields within the MRP planning module. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity. This improves the user experience and prevents potential data issues.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052This update corrects a bug in the German Point of Sale (POS) module that was caused by recent accounting changes. Specifically, a calculation error related to change amounts was fixed to ensure accurate payment processing, particularly when the change is negative. This ensures correct cash payment type handling for remaining order amounts.
Original PR description
Since the refactoring of the accounting in the pos, the change getter on the pos is returning a value different from 0 if the change is bigger than 0. If it is smaller, it returns 0 and remainingDue should be used to know the remaining due of an order. In l10n_de_pos_cert, the change was checked in _createAmountPerPaymentTypeArray to enter an if. In javascript, a negative value in an if statement is truthy so when the change was negative, the code entered the if statement which is not the case anymore. We add an if with the remainingDue to add the remaining due as a cash payment type if there is still an amount due runbot-error: 241251
This update fixes an error that previously prevented users from creating new helpdesk teams. The issue occurred when the system attempted to use a default email template after clearing all helpdesk stages. The fix ensures the template exists before attempting to use it, preventing a 'NoneType' error and ensuring team creation functionality.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update corrects a bug where certain test types were incorrectly visible during quality control setup. The change addresses an optimization in Odoo's database queries that inadvertently allowed these test types to be displayed. This ensures that only relevant manufacturing control types are available, improving data accuracy.
Original PR description
### Issue: The `Print Label`, `Register Production`, `Register By-products`and `Register Consumed Materials` are all available in the test types at control point creation. ### Expected behavior:…
### Issue:
The `Print Label`, `Register Production`, `Register By-products`and `Register Consumed Materials` are all available in the test types at control point creation.
### Expected behavior:
These test types are only meant for manufacturing operations and are supposed to be hidden by the field domain:
https://github.com/odoo/enterprise/blob/f56aa85b4ad32c5d9ad5593df1366d72e88da0e4/mrp_workorder/models/quality.py#L102-L104 https://github.com/odoo/enterprise/blob/00d6cccd75c402378698a6fd11ee2692f2361c7f/mrp_workorder/models/quality.py#L20-L24
### Cause of the issue:
Since saas-18.1: 5ef007a2116e528b796ebe80fb291ba5f1a94c8f domains are optimised into equivalents SQL clause with better sql performances. This optimization results in the following match for boolean fields:
`('field', '=', True)` -> `('field', 'in', OrderedSet([True]))`
`('field', '=', False)` -> `('field', ' not in', OrderedSet([True]))`
Because of these:
https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L1058-L1079 https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L1215-L1236
Now the issue is that the specific `search_method` of the `allow_registration` field is then called with this optimized domain: https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L860-L866 https://github.com/odoo/enterprise/blob/00d6cccd75c402378698a6fd11ee2692f2361c7f/mrp_workorder/models/quality.py#L20-L24
And since `value` is defined as a non empty ordered set in both cases it the search method returns a True leaf as search domain.
opw-5915197
Forward-Port-Of: odoo/enterprise#1170688 changes
Resolved issues and error corrections
This update resolves a visual issue where the Timesheet Kanban header and dropdown menus were overlapping. The problem stemmed from a styling element (position-sticky) that created a stacking context conflict. Removing this element allows the header to be properly positioned, improving the user experience.
Original PR description
Steps to reproduce: - Open Timesheets. - Switch to kanban view. - Groupby any field. - Start timer and click on task/project field. Issue: - Kanban Header and Dropdown menu of selection overlap. Reason: - It is due to the usage of `postion-sticky` on the header thus creating it's own stacking context, so header and Kanban Renderer body work in different stacking context, thus overlapping each other where they shouldn't have. For more info refer: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position#sticky Fix: - Remove `postion-sticky` as it doesnt serve any purpose as header can now work being a static postioned node. task-4714235 Forward-Port-Of: odoo/enterprise#103142
A test was failing due to a mismatch in how dates were interpreted across different timezones. This update ensures that leave allocation calculations use a consistent UTC date, preventing incorrect leave limits from being reported. This fix improves the reliability of our leave management system.
Original PR description
Issue: ----------------------------------- At certain times of the day (e.g., around midnight UTC), the test would fail deterministically ``` test_allocation_stats_with_duplicate_leave_type_names…
Issue:
-----------------------------------
At certain times of the day (e.g., around midnight UTC), the test would fail deterministically
```
test_allocation_stats_with_duplicate_leave_type_names
self.assertEqual(leave_type_no_comp.with_context(employee_id=employee_id).max_leaves, 10)
AssertionError: 0.0 != 10
```
Cause:
-----------------------------------
This occurred due to a timezone mismatch during the test execution. When creating the `hr.leave.allocation`, `date_from` implicitly defaults to `fields.Date.context_today(self)` (which evaluates the date based on the test user's timezone, e.g., Europe/Brussels). However, the `max_leaves` computation in `hr.leave.type` evaluates valid allocations using `fields.Date.today()` as the target date (which strictly evaluates to the UTC date)
At certain times of day, this caused the allocation's `date_from` to evaluate to 'tomorrow' relative to the UTC `target_date`. Because the allocation was technically in the future relative to UTC, it was skipped during the computation causing `max_leaves` to return 0.0 instead of 10.
Solution:
-----------------------------------
Explicitly define `'date_from': date.today()` when creating the allocation in the test case. This perfectly aligns the allocation's starting date with the strict UTC evaluation used by the `max_leaves` computation under the hood.
Runbot Error: [937759](https://runbot.odoo.com/odoo/runbot.build.error/937759)
Related PR: https://github.com/odoo/odoo/pull/261680This update fixes an issue where Swiss payroll tax calculations were incorrect. The change removes a technical setting that was incorrectly treating taxes as 'excluded' for Swiss payslips, ensuring accurate tax reporting in accordance with Swiss regulations. This improves the reliability of payroll processing for Swiss companies.
Original PR description
Steps to reproduce: ---------------------------------------- - Install the l10N_ch localization. - Create an 8.1% purchase tax (tax included). - Add the tax created in step 2 to the credit account in…
Steps to reproduce: ---------------------------------------- - Install the l10N_ch localization. - Create an 8.1% purchase tax (tax included). - Add the tax created in step 2 to the credit account in wage type 1910. - Create an employee in the Swiss company and create a certificate type in the wage statement tabulation of the employee record. - Create a contract for the employee created in step 4. - Ensure that wage type 1910 is present in the contract created in step 5 and set the contract's status to 'Running'. - Generate a new payslip for the employee created in step 4. - Compute the sheet and create the draft entry. - The tax amount is not calculated correctly. Cause: ---------------------------------------- In Swiss payslips taxes are always computed as excluded because of [`_prepare_product_base_line_for_taxes_computation()`](https://github.com/odoo/odoo/blob/30b525062fee48a453162e4f8087000b3c7dcd24/addons/account/models/account_move.py#L1510). Solution: ---------------------------------------- Override `_prepare_product_base_line_for_taxes_computation` and remove the special mode. opw-4997536
This fix ensures that website customers correctly inherit the intended pricelist when created. Previously, the system incorrectly reverted to the global default pricelist. The update adjusts how the system determines the pricelist based on website context, resolving this issue and improving price accuracy for website users.
Original PR description
Steps to reproduce: =================== 1. Create 2 pricelists, pricelist 1 is backend-only (no website_id, not selectable), pricelists 2 have website_id set 2. Create a website form creating a…
Steps to reproduce: =================== 1. Create 2 pricelists, pricelist 1 is backend-only (no website_id, not selectable), pricelists 2 have website_id set 2. Create a website form creating a customer with a pricelist field 3. Submit the form selecting pricelist 2 (first website-available one) => Pricelist reverts to pricelist 1 (the global default) Cause: ====== When creating a partner via a website form with a specific pricelist, the inverse of `property_product_pricelist` calls `_get_country_pricelist_multi` to determine the "default" pricelist and decide whether to store the value explicitly or store False (meaning "use the default"). With `website_sale` installed, the search domain hook adds website-availability filtering during website requests. This causes the inverse to compute a different "default" pricelist than what the compute uses outside the website context. The inverse sees pricelist 2 as the "website default" (first by sequence matching the website domain) and stores False. The compute later runs without website context, finds pricelist 1 as the global default, and returns the wrong value. Solution: ========= The fix bypasses website filtering in the search domain hook when called from the inverse, ensuring the stored value is based on the context-independent default. opw-6092161 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where unit prices displayed on invoices and quotations were showing excessive decimal places when using fiscal position remapping (e.g., EU intra B2B). The fix ensures prices are rounded to the correct currency precision, maintaining accurate fiscal calculations and improving data consistency. This impacts sales pricing and reporting accuracy.
Original PR description
**problem:** When taxes are configured as tax-included and a fiscal position remaps them (for example from NL 21% ST to EU intra B2B 0% EX EU G), the computed unit price is stored with excessive…
**problem:** When taxes are configured as tax-included and a fiscal position remaps them (for example from NL 21% ST to EU intra B2B 0% EX EU G), the computed unit price is stored with excessive decimal digits (e.g 82.644628099...) **steps to reproduce:** 1. Install `l10n_nl` 2. Switch to the Dutch company/ NL company 3. Ensure fiscal position `EU intra B2B` maps `21% ST` to `0% EX EU G` 4. Set tax `21% ST` as tax included 5. Create a product with sales tax `21% ST` 6. Create a quotation/invoice, apply fiscal position `EU intra B2B` 7. Add the product line (or change fiscal position on an existing line and update taxes) 8. You will see `price_unit` displays too many decimals **cause:** In both `sale.order.line._reset_price_unit` and `account.move.line._compute_price_unit` unit prices coming from tax-included remapping are written directly to price_unit. https://github.com/odoo/odoo/blob/7302b504fc03583944f4dff947cf9725fec9a75b/addons/sale/models/sale_order_line.py#L598-L602 https://github.com/odoo/odoo/blob/7302b504fc03583944f4dff947cf9725fec9a75b/addons/account/models/account_move_line.py#L871-L878 The tax remapping path uses tax detail computations with 'global' rounding to preserve fiscal accuracy during conversion, but the resulting `price_unit` was written back without currency rounding. https://github.com/odoo/odoo/blob/7302b504fc03583944f4dff947cf9725fec9a75b/addons/account/models/account_tax.py#L1303-L1310 **fix:** - Round computed `price_unit` with document currency precision before storing in both sale_order_line, account_move_line. - In `account.move.action_update_fpos_values`, recompute from untaxed base when tax include mode changes, then round with currency precision. (We do this change to ensure behavior is consistent, when changing fiscal position and clicking "update taxes" on already existent quotations/invoices" opw-6081856 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a limitation in the accounting settings where the 'Deferred Expense' field only showed current asset accounts. Now, it correctly includes prepayment accounts, ensuring users can accurately categorize deferred expenses. This improves the accuracy of financial reporting and simplifies expense tracking.
Original PR description
Problem: The deferred expense account field only allowed to select from current asset accounts, but it should also allow prepayment accounts. Steps to reproduce: 1. Install Accounting app 2. Go to Accounting > Configuration > Settings 3. In the "Deferred expense" section, try to select an account in the "Deferred expense" field and see that only current asset accounts are available. Cause: The domain on the deferred expense account field only included current asset accounts. opw-6134576
This update resolves a technical issue where a test was incorrectly marked as commented instead of updated in the recent code changes. The fix ensures that the test is properly updated, maintaining the integrity of the Belgian Coda integration for financial reporting. This prevents potential disruptions to the accounting process.
Original PR description
Test was commented instead of updated in this commit https://github.com/odoo/enterprise/commit/f1fafe0060c221e4a268c897af30455cc3d029ef task-none
This update prevents branch companies from being incorrectly designated as payment providers. Previously, a configuration issue allowed branch companies to use payment providers set up in the parent company, which could cause accounting discrepancies. This fix ensures proper account journal management and prevents potential errors during payment processing.
Original PR description
Issue: --- Branch companies can be selected as payment provider company, which should be restricted due to the limitation on account jounral. Steps to reproduce: 1- Create a branch company. 2- Add a website to the branch company. 3- Enable a payment provider in the parent company. 4- Duplicate the provider for the branch company and set branch as the company. 5- Navigate to the shop and add a product to cart. 6- Checkout and pay. In the SO, you can check that the payment provider from parent is used. Cause: --- This is introduced after https://github.com/odoo/odoo/commit/b093786714e9e8567cf75abf78ac3d954a3d89b2. That fix ensures providers from parent company to be returned as the branch compatible provider. However, that fix didn't restrict the branch companies to be selected as provider company which we shouldn't allow. #263869 opw-6013978 Forward-Port-Of: odoo/odoo#257622
1 change
Resolved issues and error corrections
This update resolves a potential error that occurred when importing bank statements with multiple journals using different currencies. The fix prevents a 'singleton error' by optimizing the process to only retrieve necessary data, improving the reliability of the bank statement import functionality. This ensures accurate financial data processing.
Original PR description
When having multiple journals with the same IBAN, but different currencies, we could have a singleton error if they are not all configured the same (besides the currency). This happens in the cron that fetches new CODAs as we first fetch all CODAs. Then, for each, we have to dispatch it in the right journal. To do so, we rely on `_parse_bank_statement_file` which is called on `self`, which itself calls `_get_coda_final_statements` that triggers the singleton error. However, at this point, we don't care about calling `_get_coda_final_statements` since we only want to retrieve the IBAN and the currency of the CODA, we don't care about the other details. Thus, the solution here is to ignore this call if we don't need it while just retrieveing the necessary info to match a journal before even creating the statements. This commit also backports 324b01de9cbe73f997423de4a02cb78a55c7f339 opw-6106509