Daily updates from Odoo
Navigate
Branch
Monday, December 23, 2024
53 changes
14 changes
Resolved issues and error corrections
This fix prevents an error when users create or select planning resources that do not have a linked employee. Instead of crashing, the system now safely leaves the avatar empty, allowing planning workflows to continue normally.
Original PR description
Steps to reproduce: --- - Install ``planning`` module - Give the demo user as ``administrator`` in planning. - Log in as Demo user > Go to planning - Click on ``New`` > click on the ``Resource`` field Traceback: --- ``IndexError: tuple index out of range`` The error occurs at [1] because we couldn't find an employee in ``avatar_per_employee_id``. This happens when a new resource is created in the first tab, but the ``employee_id`` is not found in the ``resource`` in the second tab. This commit resolves the above error by returning false if an employee is not present. [1]- https://github.com/odoo/odoo/blob/fb4d758ed78211a61ea797759e1fb3b02b51be60/addons/hr/models/resource.py#L34 sentry-5508268100, 6134007941 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Currently, an error occurs when validating stock moves without location. Step to produce: - Install the `mrp_subcontracting` module (make a debugger on). - Create a product, add some quantities, and remove the value of 'Production Location' and 'Inventory Location' from it. - Click on the 'Bills of Materials' button which is in the breadcrumbs of the product form view to create a bom of this product, And set a 'BoM Type' as Subcontracting and add an Administrator as 'Subcontractors'. -
Original PR description
Currently, an error occurs when validating stock moves without location. Step to produce: - Install the `mrp_subcontracting` module (make a debugger on). - Create a product, add some quantities, and…
Currently, an error occurs when validating stock moves without location. Step to produce: - Install the `mrp_subcontracting` module (make a debugger on). - Create a product, add some quantities, and remove the value of 'Production Location' and 'Inventory Location' from it. - Click on the 'Bills of Materials' button which is in the breadcrumbs of the product form view to create a bom of this product, And set a 'BoM Type' as Subcontracting and add an Administrator as 'Subcontractors'. - Go to Inventory / Operations / Transfers / Receipts and create a new 'Receipts', add an Administrator as 'Receive From', and add product in 'Operations' which we created bom. - Open a form view of 'Receive From' (res.partner) and remove value from 'Subcontractor Location' filed which is in the 'Sales & Purchase' tab. - Again come to receipts form view and try to validate it. `ValueError: Expected singleton: stock.location()` This occurs because the system attempts to get 'location_id' from the stock move at [1], but it is not available. Link [1]: https://github.com/odoo/odoo/blob/231952114ae730bb8d4671f4a61f738e8b6dd5b8/addons/stock/models/stock_move.py#L1566 To resolve this issue, add a condition to check if location_id is not available then use the company's subcontracting location as the default value. Sentry-6156032937 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191005
Steps to reproduce the issue: - Go to the settings and enable multi-routes. - Navigate to the warehouse and attempt to duplicate it. Problem: The operation types “Repair,” “Stock After Manufacturing Operation,” “Picking Before Manufacturing,” and “Manufacturing” are copied instead of creating new records. opw-4386529 Forward-Port-Of: odoo/odoo#189965
Original PR description
Steps to reproduce the issue: - Go to the settings and enable multi-routes. - Navigate to the warehouse and attempt to duplicate it. Problem: The operation types “Repair,” “Stock After Manufacturing Operation,” “Picking Before Manufacturing,” and “Manufacturing” are copied instead of creating new records. opw-4386529 Forward-Port-Of: odoo/odoo#189965
This commit introduces improvements to the order synchronization mechanism. The changes ensure better error handling and provide a more reliable and informative synchronization process. Key Changes: 1. Enhance `_flush_orders` Method - The `_flush_orders` method now has additional error handling to detect RPC errors during synchronization of multiple orders. If an RPC error is detected and multiple orders are being synced, the method will attempt to send each order to the server individuall
Original PR description
This commit introduces improvements to the order synchronization mechanism. The changes ensure better error handling and provide a more reliable and informative synchronization process. Key Changes:…
This commit introduces improvements to the order synchronization mechanism. The changes ensure better error handling and provide a more reliable and informative synchronization process. Key Changes: 1. Enhance `_flush_orders` Method - The `_flush_orders` method now has additional error handling to detect RPC errors during synchronization of multiple orders. If an RPC error is detected and multiple orders are being synced, the method will attempt to send each order to the server individually. 2. Introduce `_flush_orders_retry` Method - This method sends orders to the server one by one and keeps track of the synchronization status (successful, RPC error, or other errors). - It sets the synchronization status to `'connected'`, `'error'`, or `'disconnected'` based on the outcome of individual order synchronization attempts. 3. Improve Error Handling - Enhanced error handling mechanisms to differentiate between various types of errors. - Synchronization status reflects the type of error encountered. opw-3389388 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#144177 Forward-Port-Of: odoo/odoo#126662
This fixes the simple, yet very common case where: - You are creating an expense for one of your employee - The partner of said employee has its field `parent_id` set to be your own company - The expense move commercial_partner_id would then always be yourself - You never pay your employees, only yourself - ??? - Jail task-id: 4345465 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I ha
Original PR description
This fixes the simple, yet very common case where: - You are creating an expense for one of your employee - The partner of said employee has its field `parent_id` set to be your own company - The expense move commercial_partner_id would then always be yourself - You never pay your employees, only yourself - ??? - Jail task-id: 4345465 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#191347 Forward-Port-Of: odoo/odoo#187778
## Description Previously, the scale ticks in Odoo charts did not respect localization settings. This PR resolves the issue by leveraging the formatValue method within the scale tick callback function. Task: [4273769](https://www.odoo.com/odoo/project/2328/tasks/4273769) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189562
Original PR description
## Description Previously, the scale ticks in Odoo charts did not respect localization settings. This PR resolves the issue by leveraging the formatValue method within the scale tick callback function. Task: [4273769](https://www.odoo.com/odoo/project/2328/tasks/4273769) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189562
When field widgets were ported to OWL in 48ef812a, a few ARIA attributes were not adapted correctly. For instance, in the statusbar widget, the title was ported as an `aria-label` attribute ("Current state" and "Not active state"), which overrides the actual status name. This commit fixes the above issue by removing the incorrect `aria-label` attributes and fixing logic for other ones like `aria-checked`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/s
Original PR description
When field widgets were ported to OWL in 48ef812a, a few ARIA attributes
were not adapted correctly. For instance, in the statusbar widget, the
title was ported as an `aria-label` attribute ("Current state" and "Not
active state"), which overrides the actual status name.
This commit fixes the above issue by removing the incorrect `aria-label`
attributes and fixing logic for other ones like `aria-checked`.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#184259
Forward-Port-Of: odoo/odoo#183447Users may give gift cards to their customers. Acting like a payment method, gift cards will lower the total amount of a sale order up to 0. Currently, in case of fixed tax applied in the order, the tax amount cannot be covered with the card balance Steps to reproduce - Generate a Gift Card of 100$ - Create a Sale Order with a product having: - price: 90$ - quantity: 1 - A fixed tax of 10$ - Add the gift card to the order Issue: Fixed tax amount will be left uncovered. This
Original PR description
Users may give gift cards to their customers. Acting like a payment method, gift cards will lower the total amount of a sale order up to 0. Currently, in case of fixed tax applied in the order, the tax amount cannot be covered with the card balance Steps to reproduce - Generate a Gift Card of 100$ - Create a Sale Order with a product having: - price: 90$ - quantity: 1 - A fixed tax of 10$ - Add the gift card to the order Issue: Fixed tax amount will be left uncovered. This is an issue because when using the gift card (or anyhow having the total 0), it means the fixed tax cost is supported by the merchant so it should be covered by the gift card opw-4422678 Forward-Port-Of: odoo/odoo#191321
Description of the issue/feature this PR addresses: - In Mexico, failing to assign an appropriate account for cash basis movements can be considered illegal. Therefore, it's essential to set a default one for Mexican companies. Current behavior before PR: - When the 'Cash Basis' (`tax_exigibility`) setting is enabled (via Settings → Accounting → Taxes), no 'Base Tax Received Account' (`account_cash_basis_base_account_id`) is set by default for companies using the 'Mexico' fiscal localizatio
Original PR description
Description of the issue/feature this PR addresses: - In Mexico, failing to assign an appropriate account for cash basis movements can be considered illegal. Therefore, it's essential to set a…
Description of the issue/feature this PR addresses: - In Mexico, failing to assign an appropriate account for cash basis movements can be considered illegal. Therefore, it's essential to set a default one for Mexican companies. Current behavior before PR: - When the 'Cash Basis' (`tax_exigibility`) setting is enabled (via Settings → Accounting → Taxes), no 'Base Tax Received Account' (`account_cash_basis_base_account_id`) is set by default for companies using the 'Mexico' fiscal localization. Desired behavior after PR is merged: - For companies with Mexican fiscal localization, set the default *Base Tax Received Account* to the account with code `899.01.99`. This account, already defined in the [l10n_mx data](https://github.com/odoo/odoo/blob/17.0/addons/l10n_mx/data/template/account.account-mx.csv#L47), is specified by the SAT (_Servicio de Administración Tributaria_, Mexico's primary tax authority) for miscellaneous or generic adjustments (see their [official documentation](http://omawww.sat.gob.mx/fichas_tematicas/buzon_tributario/Documents/codigo_agrupador.pdf#page=22)). opw-[4393526](https://www.odoo.com/odoo/project.task/4393526) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190279
This PR fixes an issues about the terms & conditions overlapping the rest of the content on the `website_sale` payment page. Prior to this PR, the terms & conditions was positioned using a `position-absolute` with a `bottom-0`, resulting in the element extending to the topside if its content is very long. This led to some overlapping issues with the others elements of the view. To prevent this issue to happen, we position the element with a `top-100` and remove the `<div>` that aimed to ha
Original PR description
This PR fixes an issues about the terms & conditions overlapping the rest of the content on the `website_sale` payment page. Prior to this PR, the terms & conditions was positioned using a…
This PR fixes an issues about the terms & conditions overlapping the rest of the content on the `website_sale` payment page. Prior to this PR, the terms & conditions was positioned using a `position-absolute` with a `bottom-0`, resulting in the element extending to the topside if its content is very long. This led to some overlapping issues with the others elements of the view. To prevent this issue to happen, we position the element with a `top-100` and remove the `<div>` that aimed to handle the spacing at the bottom. We now manage this spacing with a utility class. opw-4373853 | 17.0 | This PR | |--------|--------| | <img width="472" alt="image" src="https://github.com/user-attachments/assets/6b4b768f-9764-45aa-84b8-94fcab059f30" /> | <img width="461" alt="image" src="https://github.com/user-attachments/assets/5cd8548e-9b8f-4036-84dd-3f224779af27" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191346
Steps to reproduce - Create a new report with studio - Chose "External Business header/footer" - Try to add a /heading1 below the header - Crash ``` UncaughtPromiseError > TypeError Uncaught Promise > Cannot read properties of null (reading 'parentNode') TypeError: Cannot read properties of null (reading 'parentNode') ``` As `startContainerChild` and `endContainerChild` refers to a dom element that can be changed in the for loop, we can declare both of them after. opw-4368425
Original PR description
Steps to reproduce - Create a new report with studio - Chose "External Business header/footer" - Try to add a /heading1 below the header - Crash ``` UncaughtPromiseError > TypeError Uncaught Promise > Cannot read properties of null (reading 'parentNode') TypeError: Cannot read properties of null (reading 'parentNode') ``` As `startContainerChild` and `endContainerChild` refers to a dom element that can be changed in the for loop, we can declare both of them after. opw-4368425 Forward-Port-Of: odoo/odoo#190191
Currently when we validate a transfer with products tracked by serial number, we may run into a bottleneck when the `quality_mrp` module is installed. That's because there's 1 move_line by Serial Number and inside `_create_assign_production_lot` those move_lines are grouped by `(company_id, product_id, lot_name)`. As we are tracking by Serial Number, each of these group key will be unique. Also, the mls are grouped in key_to_mls using `__union__` which calls `browse` to produce a recordset, effe
Original PR description
Currently when we validate a transfer with products tracked by serial number, we may run into a bottleneck when the `quality_mrp` module is installed. That's because there's 1 move_line by Serial…
Currently when we validate a transfer with products tracked by serial number, we may run into a bottleneck when the `quality_mrp` module is installed. That's because there's 1 move_line by Serial Number and inside `_create_assign_production_lot` those move_lines are grouped by `(company_id, product_id, lot_name)`. As we are tracking by Serial Number, each of these group key will be unique. Also, the mls are grouped in key_to_mls using `__union__` which calls `browse` to produce a recordset, effectively setting the `_prefetch_ids` of the results to `_ids`. Therefore, in the sml `write` override in quality_mrp when there's a condition on `self.sudo().check_ids`, the `_prefetch_ids` of self will only be the id in self, leading to 1 SELECT query by SML, i.e. 1 SELECT query by serial number. This wouldn't be that much of an issue if `quality_check.move_line_id` was properly indexed but that's not the case. So this commit first adds a missing `btree_not_null` index on `quality_check.move_line_id` to change the query plan from Seq Scan to Index Scan. Then we manually set the `_prefetch_ids` in `_create_and_assign_production_lot` to reduce the number of queries. #### speedup In a 17 database with 750 000 quality checks, on hot cache, adding the index makes a single query go from ~50ms to 0.250ms. When doing a transfer of 1000 serial numbers, setting the `_prefetch_ids` reduce the number of queries from 1000 to 1. This query takes around 120ms on hot cache without the index. Both with the index and the `_prefetch_ids`, the total time of the `_create_and_assign_production_lot` method when validating a transer of 1000 serial numbers goes from 50ms * 1000 = 50s -> 2ms * 1 = 2ms. opw-4285293 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190479
**Issue:** When printing a Purchase Order or Quotation in a company using the Indonesian tax chart, a tax code (Indonesian tax description) appears instead of the tax percentage. **Steps to Reproduce:** 1- Ensure the company uses the Indonesian chart of accounts. - Install the l10n_id module. - Go to Settings > Taxes and set the Fiscal Country to Indonesia. 2- Navigate to Purchase and create a Purchase Order. 3- Add a product line and select an Indonesian tax (ex: 11%). 4- Print the
Original PR description
**Issue:** When printing a Purchase Order or Quotation in a company using the Indonesian tax chart, a tax code (Indonesian tax description) appears instead of the tax percentage. **Steps to…
**Issue:** When printing a Purchase Order or Quotation in a company using the Indonesian tax chart, a tax code (Indonesian tax description) appears instead of the tax percentage. **Steps to Reproduce:** 1- Ensure the company uses the Indonesian chart of accounts. - Install the l10n_id module. - Go to Settings > Taxes and set the Fiscal Country to Indonesia. 2- Navigate to Purchase and create a Purchase Order. 3- Add a product line and select an Indonesian tax (ex: 11%). 4- Print the Purchase Order. The printed Purchase Order displays the tax code (description) instead of the tax percentage. The same behavior occurs in the Sales module regarding quotation printing (see screenshots attached) <img src ="https://github.com/user-attachments/assets/08dd6940-e07e-4e44-9f03-85f8ae2e8914" width=300 /> <img src ="https://github.com/user-attachments/assets/a8d16f6c-c6a0-441f-8c3f-3546387fb4e6" width=300 /> opw-4333143 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191367 Forward-Port-Of: odoo/odoo#187703
The domain for inverses is not always correct and may crash for computed fields. Resolve the `get_depends` using the `get_domain_list` whenever possible. task-4380712 odoo/enterprise#75965 *FIX for master* in https://github.com/odoo/odoo/pull/191351 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191319
Original PR description
The domain for inverses is not always correct and may crash for computed fields. Resolve the `get_depends` using the `get_domain_list` whenever possible. task-4380712 odoo/enterprise#75965 *FIX for master* in https://github.com/odoo/odoo/pull/191351 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191319
19 changes
Enhancements to existing features
This update cleans up how notification data is passed through mail-related features, reducing edge-case errors and avoiding unnecessary database lookups. It also refreshes naming, documentation comments, and performance test expectations across related apps as preparation for future email-like recipient improvements.
Original PR description
Consider 'msg_vals' propagated through layers of notification is False by default, not sometimes None or False. Add fallback to avoid trying to access keys of False/None. Correctly update some old writing. Be sure to use a writing that allows to skip message access in simple cases, as it was build to avoid useless queries. Update overrides docstrings: use comments to avoid overriding the base docstring. Rename / remove outdated code. Update some left query counters. Prepares Task-4273479: [mail] Email-like recipients
The Indian payroll payslip report has been reformatted to present employee pay information more clearly. This improves readability and professional presentation for payroll teams and employees using the Indian localization.
Original PR description
Reformating Indian localization payslip report task-4069559
Shop floor workers can now manage component, byproduct, and production registration more directly from the related stock movement instead of individual line links. This simplifies the workflow, reduces behind-the-scenes synchronization issues, and improves barcode scanning for products and lot or serial numbers.
Original PR description
We remove the link between quality.check and stock.move.line for: - component registration checks - byproduct registration checks - register production checks Instead, we link the quality.check directly with the stock.move, and show a table of move lines on the check for the user to manipulate all at once. This change allows us to get rid of a lot of synchronization code related to the continue consumption or synchronization between quality.check and stock.move.line. We also add a bunch of improvements to barcode scanning in the shop floor. task-3976734
Payroll users can now reset payslips to draft directly from the payslip list, making corrections faster without opening each record. The available list actions were also reordered to make common payroll tasks easier to find.
Original PR description
Add set to draft action to payslip list and fiddle with the order of existing actions task-4320181
The sales-related automated tests were simplified to match recent updates in the core Odoo platform. This is an internal quality improvement that helps keep sales, subscriptions, field service, and timesheet features easier to maintain without changing day-to-day user workflows.
Original PR description
`sale` test commons have been cleaned up and simplified a bit. See also odoo/odoo#191482
The update stops sending an unused company identifier in some background request data. This simplifies request handling without changing visible behavior for users.
Original PR description
* = account_accountant, web_studio The current_company_id key is not used on the server, so it does not need to be sent in the context. Note also that, only the web_search_read function sends this key. part-of task-id 4250356
Adds tools to generate EPC codes for RFID tags and make them available for export from stock move lines. This helps businesses prepare product and tracking data for RFID workflows in CSV or Excel without stopping large batches because of one invalid item.
Original PR description
Part 1: Provide an API route to allow generation of EPC Code Part 2: Allow to export SGTIN EPC from move line (xlsx, csv) [Task 4256189](https://www.odoo.com/odoo/project/966/tasks/4256189)
Code cleanup and technical improvements
This change updates several Odoo apps to use the newer controls for editing and deleting records after an older read-only setting was removed. It helps keep screens such as accounting, appointments, documents, field service, knowledge, marketing, barcode, planning views, and Studio working consistently with the latest platform behavior.
Original PR description
This commit replaces usage of kanban record's read_only_mode in the rendering context by widget.editable and widget.deletable since the read_only_mode attribute is removed in https://github.com/odoo/odoo/pull/188613 It also removes usage of mode for the form view because it was replaced by readonly. task-4344188
Miscellaneous changes
**Issue:** When the currency symbol display position is set to `After Amount`, the currency sign of a negative amount (credit) in a bank journal entry overlaps with the amount.  **Expected:** The `Amount` field should consistently display the currency symbol after the amount when configured as such, even for negative values. **Steps to reproduce:** 1. Activate the
Original PR description
**Issue:** When the currency symbol display position is set to `After Amount`, the currency sign of a negative amount (credit) in a bank journal entry overlaps with the amount.  **Expected:** The `Amount` field should consistently display the currency symbol after the amount when configured as such, even for negative values. **Steps to reproduce:** 1. Activate the Accounting app. 2. Go to `Accounting / Configuration / Accounting / Currencies`. 3. Select the company's currency and enable debug mode. 4. Set the `Display` `Symbol Position` to `After Amount` and save.  5. Navigate to `Accounting / Dashboard` and open the `Bank` journal. 6. Locate an entry with a credit (negative) value. **Cause:** The negative sign (`-`) is correctly displayed before the input field, but it is not added to the "ghost field" used for layout alignment, causing the currency symbol to overlap with the amount. **Fix:** Ensure the negative sign is included before the ghost field as well, aligning the visual layout with the actual value.  opw-4348298 Forward-Port-Of: odoo/enterprise#75567
### Before The 'Invalid Statements' filter only considered the case of the Ending Balance not matching the Starting Balance + the sum of its transactions. We were not considering the case of the Starting Balance of the statement not matching the previous statement's Ending Balance. ### Now Fixed the condition of the filter to account for the second case. task-4397412 Forward-Port-Of: odoo/enterprise#75710
Original PR description
### Before The 'Invalid Statements' filter only considered the case of the Ending Balance not matching the Starting Balance + the sum of its transactions. We were not considering the case of the Starting Balance of the statement not matching the previous statement's Ending Balance. ### Now Fixed the condition of the filter to account for the second case. task-4397412 Forward-Port-Of: odoo/enterprise#75710
The aim of this commit is adapting the IMB (Soldes Intermédiaires de Gestion) to the new COA. task-4040854 Forward-Port-Of: odoo/enterprise#76028 Forward-Port-Of: odoo/enterprise#75373
Original PR description
The aim of this commit is adapting the IMB (Soldes Intermédiaires de Gestion) to the new COA. task-4040854 Forward-Port-Of: odoo/enterprise#76028 Forward-Port-Of: odoo/enterprise#75373
Changes from the PR(ENT)https://github.com/odoo/enterprise/pull/73443 break some tours in documents_spreadsheet (create empty sheet, clone xlsx, create template and save multipage). They all fail to find the Test folder's Kanban record in the Kanban view. PR#73443 limits the number of records per page. Tours open 'Documents' on 'Home' and 'Test folder' belongs to 'COMPANY'. When there is a large number of records, 'Test folder' is not displayed in the Kanban view. So one adds a prior ste
Original PR description
Changes from the PR(ENT)https://github.com/odoo/enterprise/pull/73443 break some tours in documents_spreadsheet (create empty sheet, clone xlsx, create template and save multipage). They all fail to find the Test folder's Kanban record in the Kanban view. PR#73443 limits the number of records per page. Tours open 'Documents' on 'Home' and 'Test folder' belongs to 'COMPANY'. When there is a large number of records, 'Test folder' is not displayed in the Kanban view. So one adds a prior step to select COMPANY before checking for the Test folder's Kanban record. task-4394473 see https://github.com/odoo/enterprise/pull/73443 see runbot error 109604 Forward-Port-Of: odoo/enterprise#75410
When fetching the Routing in project->task, the map view shows the error "To get routing on your map, you first need to set up your Mapbox token. -> Set up token" even if they already have the token set up. This happens when, for example: if you have 3 tasks where 2 of them have the customer field filled and one doesn't. The function _fetchRoute tried to filter out the records that don't have the latitude/longitude. But, here, since one of the records doesn't have a partner, when it's tryi
Original PR description
When fetching the Routing in project->task, the map view shows the error "To get routing on your map, you first need to set up your Mapbox token. -> Set up token" even if they already have the token…
When fetching the Routing in project->task, the map view shows the error "To get routing on your map, you first need to set up your Mapbox token. -> Set up token" even if they already have the token set up. This happens when, for example: if you have 3 tasks where 2 of them have the customer field filled and one doesn't. The function _fetchRoute tried to filter out the records that don't have the latitude/longitude. But, here, since one of the records doesn't have a partner, when it's trying to look into partner.partner_latitude, it throws an error. After the error, mapBoxToken is set to '' in _partnerFetching, and called _openStreetMapAPI() resulting in displaying the error, "to get routing on your map, you first need to set up your Mapbox token." So, adding record.partner in the filter will help filter out the records that don't have partner. To Reproduce on Runbot: 1. Set up Mapbox token 2. Go to Project->Task 3. Create 3 Tasks ( 2 with customer and 1 without customer ) 4. Go to the map view and it'll display the error. opw-3682829 Forward-Port-Of: odoo/enterprise#73960 Forward-Port-Of: odoo/enterprise#55580
The error in question was caused by the MX localization MexicanAccountReportCustomHandler DIOT report model neither including tax_periodicity in it's own _custom_options_initializer() which overrides the version inherited from account_generic_tax_report.py, therefore account_reports/static/src/components/account_report/filters/filters.js -> hideTaxPeriodFilter() showed an error when trying to get it. task: 4402723 Forward-Port-Of: odoo/enterprise#75544
Original PR description
The error in question was caused by the MX localization MexicanAccountReportCustomHandler DIOT report model neither including tax_periodicity in it's own _custom_options_initializer() which overrides the version inherited from account_generic_tax_report.py, therefore account_reports/static/src/components/account_report/filters/filters.js -> hideTaxPeriodFilter() showed an error when trying to get it. task: 4402723 Forward-Port-Of: odoo/enterprise#75544
**Issue:** The client gets an error while accessing an employee's payslips if that employee has a contract based on attendances with a null allowed value for its working schedule. **Expected:** The client should be able to access the payslips regardless on the working schedule value, even blank. **Steps to reproduce:** - Activate Payroll app and presence based on attendances in employees' settings; - Open or create a contract through an employee's file; - Set "Work Entry Source" to "A
Original PR description
**Issue:** The client gets an error while accessing an employee's payslips if that employee has a contract based on attendances with a null allowed value for its working schedule. **Expected:** The…
**Issue:** The client gets an error while accessing an employee's payslips if that employee has a contract based on attendances with a null allowed value for its working schedule. **Expected:** The client should be able to access the payslips regardless on the working schedule value, even blank. **Steps to reproduce:** - Activate Payroll app and presence based on attendances in employees' settings; - Open or create a contract through an employee's file; - Set "Work Entry Source" to "Attendances" and leave "Working Schedule" empty; - Try to access the employee's payslips through the action button. **Cause:** No timezone found on a contract's calendar because the calendar is null. [https://github.com/odoo/enterprise/blob/18.0/hr_payroll/models/hr_payslip.py#L1141](https://github.com/odoo/enterprise/blob/18.0/hr_payroll/models/hr_payslip.py#L1141 ) **Fix:** Add a default value on `'UTC'` if no calendar has been found. **Linked:** Community PR : https://github.com/odoo/odoo/pull/186222 opw-4268672 Forward-Port-Of: odoo/enterprise#73274
Versions: ---------- - 17.0 Steps to Reproduce ------------ - Create a product and add the template of the field service project. - Create a sale order. - Open the project updates. - We do not see the SO and SOL buttons. Issue ------------ - SO and SOL smart button was removed on project updates in this commit https://github.com/odoo/enterprise/commit/7a82c52fb007ad0f827dd5d124f80d6195bff919 Fix ---------- - We are adding the SO and SOL buttons back. - So the user can at
Original PR description
Versions: ---------- - 17.0 Steps to Reproduce ------------ - Create a product and add the template of the field service project. - Create a sale order. - Open the project updates. - We do not see the SO and SOL buttons. Issue ------------ - SO and SOL smart button was removed on project updates in this commit https://github.com/odoo/enterprise/commit/7a82c52fb007ad0f827dd5d124f80d6195bff919 Fix ---------- - We are adding the SO and SOL buttons back. - So the user can at least see the linked data. task-3887972 Forward-Port-Of: odoo/enterprise#75946 Forward-Port-Of: odoo/enterprise#67793
When the pos_urban_piper module is installed but not configured in the PoS settings, the orders were being filtered out incorrectly. opw-4423378 Forward-Port-Of: odoo/enterprise#75973
Original PR description
When the pos_urban_piper module is installed but not configured in the PoS settings, the orders were being filtered out incorrectly. opw-4423378 Forward-Port-Of: odoo/enterprise#75973
If Starshipit is configured with TNT service (Australia), the API does not return a pdf field for `orders/manifest` endpoint. This causes the transfer validation process to fail in Odoo. This fix does not resolve the core problem, but it will allow the stock picking to be marked as "Done", with tracking number and link available to the user. The downside is that the manifest PDF will not be available Task: 4195503 Forward-Port-Of: odoo/enterprise#75829 Forward-Port-Of: odoo/enterprise#74190
Original PR description
If Starshipit is configured with TNT service (Australia), the API does not return a pdf field for `orders/manifest` endpoint. This causes the transfer validation process to fail in Odoo. This fix does not resolve the core problem, but it will allow the stock picking to be marked as "Done", with tracking number and link available to the user. The downside is that the manifest PDF will not be available Task: 4195503 Forward-Port-Of: odoo/enterprise#75829 Forward-Port-Of: odoo/enterprise#74190
Some were out of date See community PR for details about email template changes Forward-Port-Of: odoo/enterprise#75887
Original PR description
Some were out of date See community PR for details about email template changes Forward-Port-Of: odoo/enterprise#75887
13 changes
New functionality added to Odoo
Adds Ecuador delivery guide support so businesses can record transport details, generate and submit the required electronic document, and share it with customers. This helps companies comply with local logistics documentation requirements and handle cancellations or XML downloads when needed.
Original PR description
Implement delivery guide functionality for Ecuador. - Added a new "Delivery Guide" group within the "Other Info" tab to record details such as transporter, plate number, transfer reason, and delivery dates. - Enabled the generation and electronic submission of the delivery guide document. - Added functionality to cancel the electronic delivery guide if needed. - Provided the option to download the generated XML in case of any submission issues. - Included the ability to send the delivery guide by email to the partner for their records. 
Resolved issues and error corrections
The Mexican DIOT tax report now correctly provides the date filter information expected by the reporting interface. This prevents users from seeing an error when opening or using the tax return report filters, improving reliability for Mexican localization reporting.
Original PR description
The error in question was caused by the MX localization MexicanAccountReportCustomHandler DIOT report model neither including tax_periodicity in it's own _custom_options_initializer() which overrides the version inherited from account_generic_tax_report.py, therefore account_reports/static/src/components/account_report/filters/filters.js -> hideTaxPeriodFilter() showed an error when trying to get it. task: 4402723
This fix keeps the WhatsApp discussion experience aligned with recent Discuss app changes. The member panel now opens by default as expected, reducing confusion for users who manage or follow conversations.
Original PR description
Member panel is open by default in discuss app https://github.com/odoo/odoo/pull/191293
This fixes an error that prevented users from opening an employee's payslips when their attendance-based contract had no working schedule set. Payroll now safely uses another available timezone, falling back to UTC, so payslip access remains reliable for fully flexible contracts.
Original PR description
**Issue:** The client gets an error while accessing an employee's payslips if that employee has a contract based on attendances with a null allowed value for its working schedule. **Expected:** The…
**Issue:** The client gets an error while accessing an employee's payslips if that employee has a contract based on attendances with a null allowed value for its working schedule. **Expected:** The client should be able to access the payslips regardless on the working schedule value, even blank. **Steps to reproduce:** - Activate Payroll app and presence based on attendances in employees' settings; - Open or create a contract through an employee's file; - Set "Work Entry Source" to "Attendances" and leave "Working Schedule" empty; - Try to access the employee's payslips through the action button. **Cause:** No timezone found on a contract's calendar because the calendar is null. [https://github.com/odoo/enterprise/blob/18.0/hr_payroll/models/hr_payslip.py#L1141](https://github.com/odoo/enterprise/blob/18.0/hr_payroll/models/hr_payslip.py#L1141 ) **Fix:** Add a default value on `'UTC'` if no calendar has been found. **Linked:** Community PR : https://github.com/odoo/odoo/pull/186222 opw-4268672
Miscellaneous changes
Fixing permission access error in the test (user does not have access to crm.lead). task-4380712 odoo/odoo#191319 Forward-Port-Of: odoo/enterprise#75965
Original PR description
Fixing permission access error in the test (user does not have access to crm.lead). task-4380712 odoo/odoo#191319 Forward-Port-Of: odoo/enterprise#75965
**Issue:** When the currency symbol display position is set to `After Amount`, the currency sign of a negative amount (credit) in a bank journal entry overlaps with the amount.  **Expected:** The `Amount` field should consistently display the currency symbol after the amount when configured as such, even for negative values. **Steps to reproduce:** 1. Activate the
Original PR description
**Issue:** When the currency symbol display position is set to `After Amount`, the currency sign of a negative amount (credit) in a bank journal entry overlaps with the amount.  **Expected:** The `Amount` field should consistently display the currency symbol after the amount when configured as such, even for negative values. **Steps to reproduce:** 1. Activate the Accounting app. 2. Go to `Accounting / Configuration / Accounting / Currencies`. 3. Select the company's currency and enable debug mode. 4. Set the `Display` `Symbol Position` to `After Amount` and save.  5. Navigate to `Accounting / Dashboard` and open the `Bank` journal. 6. Locate an entry with a credit (negative) value. **Cause:** The negative sign (`-`) is correctly displayed before the input field, but it is not added to the "ghost field" used for layout alignment, causing the currency symbol to overlap with the amount. **Fix:** Ensure the negative sign is included before the ghost field as well, aligning the visual layout with the actual value.  opw-4348298 Forward-Port-Of: odoo/enterprise#75567
Add missing index on move_line_id to speedup checking the check_ids of a stock_move_line. See community PR for more info https://github.com/odoo/odoo/pull/190479 Forward-Port-Of: odoo/enterprise#75537
Original PR description
Add missing index on move_line_id to speedup checking the check_ids of a stock_move_line. See community PR for more info https://github.com/odoo/odoo/pull/190479 Forward-Port-Of: odoo/enterprise#75537
### Before The 'Invalid Statements' filter only considered the case of the Ending Balance not matching the Starting Balance + the sum of its transactions. We were not considering the case of the Starting Balance of the statement not matching the previous statement's Ending Balance. ### Now Fixed the condition of the filter to account for the second case. task-4397412 Forward-Port-Of: odoo/enterprise#75710
Original PR description
### Before The 'Invalid Statements' filter only considered the case of the Ending Balance not matching the Starting Balance + the sum of its transactions. We were not considering the case of the Starting Balance of the statement not matching the previous statement's Ending Balance. ### Now Fixed the condition of the filter to account for the second case. task-4397412 Forward-Port-Of: odoo/enterprise#75710
If Starshipit is configured with TNT service (Australia), the API does not return a pdf field for `orders/manifest` endpoint. This causes the transfer validation process to fail in Odoo. This fix does not resolve the core problem, but it will allow the stock picking to be marked as "Done", with tracking number and link available to the user. The downside is that the manifest PDF will not be available Task: 4195503 Forward-Port-Of: odoo/enterprise#75829 Forward-Port-Of: odoo/enterprise#74190
Original PR description
If Starshipit is configured with TNT service (Australia), the API does not return a pdf field for `orders/manifest` endpoint. This causes the transfer validation process to fail in Odoo. This fix does not resolve the core problem, but it will allow the stock picking to be marked as "Done", with tracking number and link available to the user. The downside is that the manifest PDF will not be available Task: 4195503 Forward-Port-Of: odoo/enterprise#75829 Forward-Port-Of: odoo/enterprise#74190
When fetching the Routing in project->task, the map view shows the error "To get routing on your map, you first need to set up your Mapbox token. -> Set up token" even if they already have the token set up. This happens when, for example: if you have 3 tasks where 2 of them have the customer field filled and one doesn't. The function _fetchRoute tried to filter out the records that don't have the latitude/longitude. But, here, since one of the records doesn't have a partner, when it's tryi
Original PR description
When fetching the Routing in project->task, the map view shows the error "To get routing on your map, you first need to set up your Mapbox token. -> Set up token" even if they already have the token…
When fetching the Routing in project->task, the map view shows the error "To get routing on your map, you first need to set up your Mapbox token. -> Set up token" even if they already have the token set up. This happens when, for example: if you have 3 tasks where 2 of them have the customer field filled and one doesn't. The function _fetchRoute tried to filter out the records that don't have the latitude/longitude. But, here, since one of the records doesn't have a partner, when it's trying to look into partner.partner_latitude, it throws an error. After the error, mapBoxToken is set to '' in _partnerFetching, and called _openStreetMapAPI() resulting in displaying the error, "to get routing on your map, you first need to set up your Mapbox token." So, adding record.partner in the filter will help filter out the records that don't have partner. To Reproduce on Runbot: 1. Set up Mapbox token 2. Go to Project->Task 3. Create 3 Tasks ( 2 with customer and 1 without customer ) 4. Go to the map view and it'll display the error. opw-3682829 Forward-Port-Of: odoo/enterprise#73238 Forward-Port-Of: odoo/enterprise#55580
Forward-Port-Of: odoo/enterprise#75681
Original PR description
Forward-Port-Of: odoo/enterprise#75681
**Issue:** Some terms don't appear in Spanish in DIAN invoice PDF files.  **Expected:** These terms should be translated in Spanish. **Steps to reproduce:** - Activate Accounting app in a Colombian database; - Configure the DIAN credentials, client, journal and product (https://www.odoo.com/documentation/18.0/applications/finance/fiscal_localizations/colombia.html?highlight=dian); - Create a cust
Original PR description
**Issue:** Some terms don't appear in Spanish in DIAN invoice PDF files.  **Expected:** These terms should be…
**Issue:** Some terms don't appear in Spanish in DIAN invoice PDF files.  **Expected:** These terms should be translated in Spanish. **Steps to reproduce:** - Activate Accounting app in a Colombian database; - Configure the DIAN credentials, client, journal and product (https://www.odoo.com/documentation/18.0/applications/finance/fiscal_localizations/colombia.html?highlight=dian); - Create a customer invoice; - Send and print with (only) DIAN checkbox checked; - Open the PDF for the invoice. **Cause:** No translations (or erroneous ones) have been found for these keys. **Fix:** Add Spanish translations for these terms. <img width="642" alt="Capture d’écran 2024-12-09 à 11 52 44" src="https://github.com/user-attachments/assets/77f548f4-f87e-4823-9fdc-5b54d0db2a1f"> Backport of Odoo 18 fix: https://github.com/odoo/enterprise/commit/99f332e3211cf17eb7bf0a970544dd0e0e07a9f8 **Testing:** Testing needs actual credentials and complete configuration (including setting the client's language to LATAM Spanish)  opw-4343184 Forward-Port-Of: odoo/enterprise#75913
**[FIX] account_consolidation: handle empty totals when formatting account lines** When processing account lines, the totals list might be empty resulting in an IndexError when trying to set auditable to false on the last column, which leads to consolidated balance to crash. This fix just makes sure that modifying the column on this line is only done when the cols actually contains some data. opw-4205722 Forward-Port-Of: odoo/enterprise#74938
Original PR description
**[FIX] account_consolidation: handle empty totals when formatting account lines** When processing account lines, the totals list might be empty resulting in an IndexError when trying to set auditable to false on the last column, which leads to consolidated balance to crash. This fix just makes sure that modifying the column on this line is only done when the cols actually contains some data. opw-4205722 Forward-Port-Of: odoo/enterprise#74938
7 changes
New functionality added to Odoo
This update introduces a new payment method, 'RIBA,' to streamline the process for Italian customers to upload bank receipt data to their banks. It involves exporting data from payment batches to a specific RIBA text format, enabling compatibility with systems like FattureInCloud. This improves the integration with Italian banking systems.
Original PR description
Export from `account_batch_payment` to CBI's RIBA text file format, so that the customer can upload its requests for payment (bank receipts) to the bank. - New field: `l10n_it_sia_code`: Interbancary identifier given by SIA when signing a CBI contract to start doing Ri.Ba.s - New payment method: `RIBA` - Added the methods to read and write the Ri.Ba. text format, i.e. we are able to read an `example` created with FattureInCloud. - Implemented the flow by taking the data from payments and calling the export functions. - Built a test - Made some demo data - Added translation strings - Riba sequence number, it's created on export and persisted on the batch payment at the moment, so if you re-export, it won't change. It's not shown to the user though. Do we want that to be shown? Editable? Task [link](https://www.odoo.com/odoo/project/967/tasks/4254966) task-4254966 Forward-Port-Of: odoo/enterprise#74097
Resolved issues and error corrections
This update resolves a problem where two Datev export files had the same name, causing confusion and inefficiency. The change ensures distinct file names for each export, streamlining the process and improving data organization. This fix ensures accurate and reliable Datev reporting.
Original PR description
The 2 exports have the same name, which is impractical. Let's differentiate them task-4414223 Forward-Port-Of: odoo/enterprise#75907
This update corrects a minor issue where some labels were missing in English for the Mexican reports module. Specifically, the `l10n_mx_nationality` and `l10n_mx_type_of_operation` fields now have accurate English translations. This ensures proper reporting functionality for users in Mexico.
Original PR description
Add missing english labels for the `l10n_mx_nationality` and `l10n_mx_type_of_operation`fields.  task-no Forward-Port-Of: odoo/enterprise#76038
This update fixes a tax calculation issue in Odoo Enterprise related to sales orders using Avatax. The system now uses the sales order's warehouse for tax computation, providing a more accurate estimate. While this is a best-effort approach, it resolves discrepancies in tax rates observed during order validation and invoicing.
Original PR description
…ing taxes Steps to reproduce ================== - Create a company in Canada with the canadian fiscal localization - Configure the avatax sandbox credentials - Create a new fiscal position in the…
…ing taxes Steps to reproduce ================== - Create a company in Canada with the canadian fiscal localization - Configure the avatax sandbox credentials - Create a new fiscal position in the USA that uses the avatax API - Create a USD pricelist - Create a warehouse in Cleveland Ohio - Create a salesorder with an Ohio based customer and the USD pricelist - Select a storable product with an invoicing policy on delivered quantity - Set the avatax category of the product to "Hand tools" - Select the warehouse just created on the sales order - Click on the "Compute taxes" button => The tax is set to 1% - Confirm the sales order => The tax is still set to 1% - Validate the delivery and create + confirm a new invoice => The tax is now 2.25% Cause of the issue ================== When computing the addresses to send to Avatax, the stock move addresse was used, but at this point, they have not yet been created Solution ======== We now use the warehouse from the sales order. This is only a best-effort estimation of where the products will ship from. It's possible products ship from a different warehouse than warehouse_id. For example, you can change the default delivery route to pull from a source location in a different warehouse. However, this is probably not a common configuration. In the end, the only way to know for sure is to run the inventory-related code, which we want to avoid just for tax computation. Finally, it's also possible for users to change the warehouse manually after the order is confirmed. This can also potentially change taxes, and there's no way to anticipate this. The account.move code will continue to pull the warehouse from the stock.move, because we know it will be created before the invoice. Note that even on account.move the shipping address remains an estimation for products with an “invoice on ordered” invoicing policy. opw-4073701
This update corrects a bug where Mexican XML invoices were incorrectly displaying duplicate 8% tax amounts. The issue stemmed from a forward-porting error that was not properly addressed. The fix involves removing the problematic code and refactoring related components to ensure accurate tax calculations for Mexican invoices.
Original PR description
## Issue: - Uploading a Mexican XML file with an 8% tax results in the addition of an extra 8% tax. ## Steps to reproduce: - Create a new invoice and add a line with an 8% tax. - Validate the invoice…
## Issue: - Uploading a Mexican XML file with an 8% tax results in the addition of an extra 8% tax. ## Steps to reproduce: - Create a new invoice and add a line with an 8% tax. - Validate the invoice and export it as XML. - Upload the XML file as a vendor bill. - The vendor bill incorrectly shows two "8% taxes" instead of one. ## Solution: - The issue stems from a forward-port error from `saas-16.4` https://github.com/odoo/enterprise/commit/5681a8d5abee3a8787f3ee8612a8c3b18ed63ee6 to `17.0` https://github.com/odoo/enterprise/commit/56a2b66d84d8398ea870d559cd55cfeae44019d8 - In `17.0` we introduced this Extract method `_l10n_mx_edi_import_cfdi_get_tax_from_node` to refactor the `_l10n_mx_edi_import_cfdi_fill_invoice_line`. - We should have add the Exento checks in the new method however we mistakenly pushed code from `saas-16.4` to `17.0` without adapting it. - I removed the extra code introduced during the forward-porting. - Refactored the related code to ensure compatibility with the new changes in `17.0`. OPW-4198016
This update fixes a bug in the account reconciliation process. Previously, the system only flagged discrepancies when the ending balance didn't match the transaction sum. Now, it also identifies issues when the starting balance doesn't align with the previous statement's ending balance, ensuring more accurate reconciliation reports.
Original PR description
### Before The 'Invalid Statements' filter only considered the case of the Ending Balance not matching the Starting Balance + the sum of its transactions. We were not considering the case of the Starting Balance of the statement not matching the previous statement's Ending Balance. ### Now Fixed the condition of the filter to account for the second case. task-4397412
This update corrects a bug that prevented users from accessing CRM leads during testing. The fix ensures proper permission controls are enforced, preventing unauthorized access. This improves the reliability of our CRM test environment.
Original PR description
Fixing permission access error in the test (user does not have access to crm.lead). task-4380712 odoo/odoo#191319 Forward-Port-Of: odoo/enterprise#75965