Daily updates from Odoo
Navigate
Branch
Wednesday, March 12, 2025
56 changes
37 changes
New functionality added to Odoo
Spreadsheet users can now add a global filter for yes/no fields, such as whether records are active. This makes it easier to narrow spreadsheet data using True, False, both, or no selected boolean value.
Original PR description
This commit adds the boolean global filter to the spreadsheet data sources. The boolean global filter is a multi-select filter that allows the user to select multiple boolean values (True/False) to filter the data. (can be empty, true, false, or both). It will be useful to filter the data based on boolean values, for example to filter the data based on the field `active`. On a technical level, this commit adds a new component `BooleanMultiSelector` This component is a TagList with only two values that can be selected: True and False. Task: 4361196
The VoIP softphone is being updated with a new Do Not Disturb mode so users can prevent incoming calls from ringing when they are unavailable. The call invitation experience and softphone interface are also being reworked, improving the foundation for a clearer calling workflow.
Customers booking paid appointments can now go straight to payment using the contact details they already entered. The confirmation experience is also visually aligned with related event pages, reducing friction and making the process feel more consistent.
Original PR description
This commit includes the following changes to streamline the checkout experience: - Create a partner using the name, email, and phone number provided during the appointment booking process. This will allow users to skip several steps and proceed directly to payment, resulting in a seamless checkout experience. When an appointment is booked, a partner is automatically created with the provided details, and the user is redirected straight to the payment page, bypassing any unnecessary steps. - Improved the overall user interface of the appointment confirmation card to align with the event confirmation layout. - Modified a string in the test case to reflect the changes made on the actual payment success page. task-4307281
VoIP now includes a Do Not Disturb mode so users can prevent incoming calls from ringing when they need focused time. This gives employees more control over availability and reduces interruptions without changing the calling workflow for others.
Original PR description
Add Do Not Disturb mode to VoIp. When user in DND mode, incoming calls won't ring. Task-4398564
Enhancements to existing features
Sign template editors can now select several signature fields at once and move, copy, paste, or delete them together. This speeds up preparing documents with many fields and reduces repetitive manual edits, with related fixes improving resizing and multi-page placement behavior.
Original PR description
## This PR aims to: - Add a functionality to select multiple sign items in sign templates simultaneously. - Enable moving multiple selected sign items together. - Enable multi-selected items delete, copy, and paste. __________________________________________________________________________________________________________ I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) task-id: 4510243
The Knowledge comments feature has been adjusted to work with the updated editor toolbar. This keeps comment-related actions available and properly described as the toolbar moves to a compact, expandable layout.
Original PR description
The following changes have been made in the toolbar in html_editor: - the `namespace` parameter in the toolbar item definition has been changed to `namespaces`, supporting multiple namespaces for a toolbar group or item. - the toolbar opens in a compact mode, with a small subset of buttons, and can be expanded to display a larger set of buttons (namely those in the "expanded" namespace). - the `title` parameter has been replaced with `description`, which is used to define the content of the tooltip displayed when hovering over the item. This commit adapts the Comments plugin to these changes. Community: https://github.com/odoo/odoo/pull/201037 task-4535289
Budget report queries were adjusted to skip unnecessary checks on fields that are always empty in the temporary budget data. This helps the reporting system avoid redundant work and supports more efficient budget report generation without changing what users see.
Original PR description
To allow to ORM to remove SQL checks for null values. When querying the temporary budget table, some required fields are set to NULL. We should ignore the conditions on these fields as they are constant anyways. task-4415011 https://github.com/odoo/odoo/pull/191236
The schedule interview email template is now included by default instead of only in demo data. This helps Recruitment users follow the documentation and find the expected template in their own databases without extra setup.
Original PR description
The schedule interview mail template was part of the demo data only. Odoo clients following the Recruitment app docs were not able to find the template in their DBs. So, this commit makes it part of the default data, to stay consistent with the documentation. task-4637146
The Knowledge app no longer carries an old internal export that has moved to the shared HTML editor. This keeps the codebase cleaner and aligns naming with standard Odoo migration practices, with no expected change for end users.
Original PR description
`HtmlUpgradeManager` was exported from the `knowledge` module for historical reason. This commit removes that file (`HtmlUpgradeManager` is now in `html_editor` module). `upgrade` functions are renamed `migrate` to be more consistent with the `migrate` function of the classic Odoo `upgrade` repository.
Resolved issues and error corrections
The timesheet list view no longer shows an empty timer status column. This removes confusing, non-useful information from the screen and keeps the timesheet view cleaner for users.
Original PR description
Before this commit, the `is_timer_running` field defined timesheet model is displayed in the list but the column is always empty. This commit makes sure the column is also hidden in the list view since no data is displayed. The field is in fact just a technical field and not really useful for the user.
This change moves a Belgian payroll accounting test into the appropriate Belgian localization test module. It helps keep automated checks reliable by avoiding dependency errors, with no expected impact on day-to-day product use.
Original PR description
Move the test to the l10n_be test module to avoid dependencies error
This update aligns the Enterprise appointment app with a related core fix so frontend appointment pages can use the shared formatting and HTML utilities they expect. It helps prevent display or interaction issues in appointment scheduling without changing the user workflow.
Original PR description
Enterprise counter-part. runbot-134831 https://github.com/odoo/odoo/pull/201247
This update fixes an issue that could prevent online bank synchronization records from being created after a recent platform change. It helps keep account connections working reliably without changing user workflows.
Original PR description
`create` only accepts a list or a tuple now, not dict_values
A typo was corrected in the appraisal campaign wizard. This helps keep the employee appraisal experience clear and professional without changing how the feature works.
Features or functions removed from Odoo
An empty leftover module directory was removed after its functionality had already been merged into the main US payroll module. This keeps the system cleaner and avoids confusion from unused payroll components.
Original PR description
A file was missed when merging the module to l10n_us_hr_payroll in this PR (https://github.com/odoo/enterprise/pull/70310). The whole module directory should be removed.
Miscellaneous changes
Steps to reproduce: 1. Upload a link and Video type documents 2. Create a shortcut 3. Go to My drive 4. Kanban card not displayed correctly Technical Reason: When creating a shortcut via 'action_create_shortcut', missing 'mimetype' and 'url' fields caused improper rendering of link/video shortcuts. After this commit: will display the proper format of the link/video. Task-4477679 Forward-Port-Of: odoo/enterprise#80887 Forward-Port-Of: odoo/enterprise#78677
Original PR description
Steps to reproduce: 1. Upload a link and Video type documents 2. Create a shortcut 3. Go to My drive 4. Kanban card not displayed correctly Technical Reason: When creating a shortcut via 'action_create_shortcut', missing 'mimetype' and 'url' fields caused improper rendering of link/video shortcuts. After this commit: will display the proper format of the link/video. Task-4477679 Forward-Port-Of: odoo/enterprise#80887 Forward-Port-Of: odoo/enterprise#78677
Forward-Port-Of: odoo/enterprise#81196 Forward-Port-Of: odoo/enterprise#81017
Original PR description
Forward-Port-Of: odoo/enterprise#81196 Forward-Port-Of: odoo/enterprise#81017
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the com
Original PR description
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the company_id.check_account_audit_trail, but also we should consider move.posted_before and if not, it should be deleted not reversed. Fix: - Replace the company_id.check_account_audit_trail check with _is_protected_by_audit_trail() which includes checking if the move is posted before or not. opw - 4562732 Forward-Port-Of: odoo/enterprise#81061
[FIX] l10n_ar: price unit precision digits on invoice report. This pr was created to adapt l10n_ar_reports/tests/IVA_Ventas.txt and l10n_ar_reports/tests/Ventas.txt files to the changes of https://github.com/odoo/odoo/pull/171131/commits/95bd2d3677f6b534e9eb660e9757e87cf778d7b5 Ticket Adhoc side: 77471 Task latam: 1226 Forward-Port-Of: odoo/enterprise#80650 Forward-Port-Of: odoo/enterprise#77800
Original PR description
[FIX] l10n_ar: price unit precision digits on invoice report. This pr was created to adapt l10n_ar_reports/tests/IVA_Ventas.txt and l10n_ar_reports/tests/Ventas.txt files to the changes of https://github.com/odoo/odoo/pull/171131/commits/95bd2d3677f6b534e9eb660e9757e87cf778d7b5 Ticket Adhoc side: 77471 Task latam: 1226 Forward-Port-Of: odoo/enterprise#80650 Forward-Port-Of: odoo/enterprise#77800
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/189710 --- I confirm I have signed
Original PR description
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/189710 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#80292 Forward-Port-Of: odoo/enterprise#78636
Issue: When we export a report to xlsx containing some amounts in foreign currency, those amounts are exported as values in the file, and loose any kind of currency symbols. It then becomes impossible to know what currency they were expressed in. Solution: When a column has an expression label with the 'currency' word inside, adds a new column right next to it, with the currency 3 letters code as value. This is done in the accounting reports framework and so is used on all reports using a c
Original PR description
Issue: When we export a report to xlsx containing some amounts in foreign currency, those amounts are exported as values in the file, and loose any kind of currency symbols. It then becomes impossible to know what currency they were expressed in. Solution: When a column has an expression label with the 'currency' word inside, adds a new column right next to it, with the currency 3 letters code as value. This is done in the accounting reports framework and so is used on all reports using a custom engine. task-4011008 Forward-Port-Of: odoo/enterprise#80638 Forward-Port-Of: odoo/enterprise#76441
*l10n_nl_intrastat,l10n_nl_reports,l10n_nl_reports_sbr, l10n_nl_reports_sbr_icp,l10n_nl_reports_sbr_ob_nummer, l10n_nl_reports_sbr_status_info [task-4421055](https://www.odoo.com/odoo/project.task/4421055) Forward-Port-Of: odoo/enterprise#81032 Forward-Port-Of: odoo/enterprise#78111
Original PR description
*l10n_nl_intrastat,l10n_nl_reports,l10n_nl_reports_sbr, l10n_nl_reports_sbr_icp,l10n_nl_reports_sbr_ob_nummer, l10n_nl_reports_sbr_status_info [task-4421055](https://www.odoo.com/odoo/project.task/4421055) Forward-Port-Of: odoo/enterprise#81032 Forward-Port-Of: odoo/enterprise#78111
Steps to reproduce ================== - Install documents,project - Go to documents - Open any document - Click on share - Click on "Copy link" - Go to a project task - Click on a log note - Open the full composer - Type some text and select it - Paste the copied url - Post the log note - Click on the link => Missing Action: the action "..." does not exist Cause of the issue ================== Documents [redirects] `/odoo/documents/<access-token>` to either the backend o
Original PR description
Steps to reproduce ================== - Install documents,project - Go to documents - Open any document - Click on share - Click on "Copy link" - Go to a project task - Click on a log note - Open the full composer - Type some text and select it - Paste the copied url - Post the log note - Click on the link => Missing Action: the action "..." does not exist Cause of the issue ================== Documents [redirects] `/odoo/documents/<access-token>` to either the backend or the portal. There is a global click handler in the router that intercepts click on links to update and push the router state. Solution ======== We should not handle those links, the http redirection will take care of it. --- [redirects]: https://github.com/odoo/enterprise/blob/882e4453c8eadae8e39ea02314377c617d3b9e0f/documents/controllers/home.py#L24 opw-4611260 Forward-Port-Of: odoo/enterprise#81016
No need to fetch available embedded actions on inaccessible folders. FU of d391313e. Task-4525850 Forward-Port-Of: odoo/enterprise#81049
Original PR description
No need to fetch available embedded actions on inaccessible folders. FU of d391313e. Task-4525850 Forward-Port-Of: odoo/enterprise#81049
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An image placeholder appears when no image is set for a product. This behavior is inconsistent with the product catalog page in the Sales app. Solution: - Removed the XPath that adds the image placeholder in the product catalog. task-4302221 Forward-Port-Of: odoo/enterprise#78937
Original PR description
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An image placeholder appears when no image is set for a product. This behavior is inconsistent with the product catalog page in the Sales app. Solution: - Removed the XPath that adds the image placeholder in the product catalog. task-4302221 Forward-Port-Of: odoo/enterprise#78937
Since the change of res.users from view (UI for groups), the sequence is used, but the data has not been updated. related: https://github.com/odoo/odoo/commit/2258fe4071f15ae72ab3384de6bbe43ff0db5848 Forward-Port-Of: odoo/enterprise#80212
Original PR description
Since the change of res.users from view (UI for groups), the sequence is used, but the data has not been updated. related: https://github.com/odoo/odoo/commit/2258fe4071f15ae72ab3384de6bbe43ff0db5848 Forward-Port-Of: odoo/enterprise#80212
Problem ---------- wrong behaviour with the number_of_days_display / number_of_hours_display / number_of_days : Objective ---------- Fix the TestHR.test_flow : in the creation of leave allocation. Only number_of_days_display can have a value. But with a leave_type.request_unit = 'hour', number_of_hours_display should be used Solution ---------- Depends on the visibility of number_of_days_display and number_of_hours_display, put the value in the good field task-4521658 Forward-Po
Original PR description
Problem ---------- wrong behaviour with the number_of_days_display / number_of_hours_display / number_of_days : Objective ---------- Fix the TestHR.test_flow : in the creation of leave allocation. Only number_of_days_display can have a value. But with a leave_type.request_unit = 'hour', number_of_hours_display should be used Solution ---------- Depends on the visibility of number_of_days_display and number_of_hours_display, put the value in the good field task-4521658 Forward-Port-Of: odoo/enterprise#80400
Handle the case where goal.deadline is False when the goal is duplicated. Forward-Port-Of: odoo/enterprise#81158
Original PR description
Handle the case where goal.deadline is False when the goal is duplicated. Forward-Port-Of: odoo/enterprise#81158
### Steps to reproduce: - Create a manufacturing order - Navigate to the Miscellaneous tab and add an Analytic Distribution - Add a component to the manufacturing order with the quantity set to 10000, for example - Produce the manufacturing order - Navigate to the analytic account line associated with the stock move with 10000 units - Update the analytic account line’s date to be in the previous week - Navigate to Timesheets > Timesheets > All Timesheets and then navigate to the pr
Original PR description
### Steps to reproduce: - Create a manufacturing order - Navigate to the Miscellaneous tab and add an Analytic Distribution - Add a component to the manufacturing order with the quantity set to…
### Steps to reproduce: - Create a manufacturing order - Navigate to the Miscellaneous tab and add an Analytic Distribution - Add a component to the manufacturing order with the quantity set to 10000, for example - Produce the manufacturing order - Navigate to the analytic account line associated with the stock move with 10000 units - Update the analytic account line’s date to be in the previous week - Navigate to Timesheets > Timesheets > All Timesheets and then navigate to the previous week - Observe that your user has worked a very large amount of overtime ### Cause: This is happening because for MO when creating an analytic line in some cases we store the unit_amount as the quantity of the materials used. https://github.com/odoo/odoo/blob/ee7fbcb759fd8257ed2f52d1d5acfc6921d42870/addons/stock_account/models/stock_move.py#L437-L438 And when fetching the worked hours for the overtime indication we don't check if the analytic line is a timesheet or not https://github.com/odoo/enterprise/blob/ca935872fd70b9fc5b2d13359424916b3afa01eb/timesheet_grid/models/hr_employee.py#L120-L126 https://github.com/odoo/enterprise/blob/ca935872fd70b9fc5b2d13359424916b3afa01eb/timesheet_grid_holidays/models/hr_employee.py#L10-L16 ### Fix: Since we are only fetching timesheets so we will check if the project is set or not as if it is set it means that the record is a timesheet opw-4179137 Forward-Port-Of: odoo/enterprise#81109 Forward-Port-Of: odoo/enterprise#81026
…versing Steps to reproduce: - In settings, set a default "Default invoice transaction code" and "Default refund transaction code" - Create an invoice with an invoice line and post it - Reverse it Issue: - The intrastat code will be the one from the invoice (and not the default refund one) Cause: When copying the lines we keep the one from the invoice Solution: Delete the default values when copying the data so the compute is triggered correctly which will set the correct value
Original PR description
…versing Steps to reproduce: - In settings, set a default "Default invoice transaction code" and "Default refund transaction code" - Create an invoice with an invoice line and post it - Reverse it Issue: - The intrastat code will be the one from the invoice (and not the default refund one) Cause: When copying the lines we keep the one from the invoice Solution: Delete the default values when copying the data so the compute is triggered correctly which will set the correct value opw-4417566 Forward-Port-Of: odoo/enterprise#79267
When users attempt to send a template with 10 body variables, the sample values for `Free Text 1` and `Free Text 10` are swapped. Steps to Produce: - Create a template with 10 body variables - Give sample value for `Body - {{1}}` as 1 and `Body - {{10}}` as 10 - Open the WhatsApp composer using the created template - `Free text 1` will have a value of 10 instead of 1 - `Free text 10` will have a value of 1 instead of 10 Problem: The variables are sorted by name, causing `{{10}}`
Original PR description
When users attempt to send a template with 10 body variables, the sample values for `Free Text 1` and `Free Text 10` are swapped.
Steps to Produce:
- Create a template with 10 body variables
- Give sample value for `Body - {{1}}` as 1 and `Body - {{10}}` as 10
- Open the WhatsApp composer using the created template
- `Free text 1` will have a value of 10 instead of 1
- `Free text 10` will have a value of 1 instead of 10
Problem:
The variables are sorted by name, causing `{{10}}` to appear before `{{1}}`, which leads to the values being swapped.
Solution:
Sort the variables by extracting the index from the variable name, so they are ordered numerically rather than alphabetically.
Task-4212923
Forward-Port-Of: odoo/enterprise#80534
Forward-Port-Of: odoo/enterprise#71307This commit add a new xml export (DES) for intrastat report. Regarding the legal specifications at: https://www.douane.gouv.fr/sites/default/files/uploads/files/2020-10/ManuelDesXML.pdf task-4402569 Forward-Port-Of: odoo/enterprise#77866
Original PR description
This commit add a new xml export (DES) for intrastat report. Regarding the legal specifications at: https://www.douane.gouv.fr/sites/default/files/uploads/files/2020-10/ManuelDesXML.pdf task-4402569 Forward-Port-Of: odoo/enterprise#77866
Adding a condition for Avatax not being enabled on the taxes column in portal view of sales orders. task: 4423974 Forward-Port-Of: odoo/enterprise#80616 Forward-Port-Of: odoo/enterprise#77683
Original PR description
Adding a condition for Avatax not being enabled on the taxes column in portal view of sales orders. task: 4423974 Forward-Port-Of: odoo/enterprise#80616 Forward-Port-Of: odoo/enterprise#77683
Currently, when `marketing_automation_whatsapp` is installed, marketing automation campaign statistics are not computed correctly. ### Steps to Reproduce 1. Install `marketing_automation_whatsapp`. 2. Create a marketing automation campaign with an email activity. 3. Ensure one or more traces are rejected (e.g., by using invalid email addresses). 4. View the activity statistics. Expected Result: The rejected count on the right correctly displays the number of rejected traces. Actu
Original PR description
Currently, when `marketing_automation_whatsapp` is installed, marketing automation campaign statistics are not computed correctly. ### Steps to Reproduce 1. Install `marketing_automation_whatsapp`.…
Currently, when `marketing_automation_whatsapp` is installed, marketing automation campaign statistics are not computed correctly. ### Steps to Reproduce 1. Install `marketing_automation_whatsapp`. 2. Create a marketing automation campaign with an email activity. 3. Ensure one or more traces are rejected (e.g., by using invalid email addresses). 4. View the activity statistics. Expected Result: The rejected count on the right correctly displays the number of rejected traces. Actual Result: The rejected count on the right always displays `0`, even when rejected traces exist. ### Cause The `marketing_automation_whatsapp` module overrides `_get_full_statistics` to include WhatsApp-related statistics in addition to the marketing data. However, the override currently concatenates the results from the base `_get_full_statistics` and the WhatsApp-specific statistics. And because `MarketingActivity._compute_statistics` doesn't expect `_get_full_statistics` to return multiple entries for a given `activity_id`, the values from the WhatsApp-specific results end up overwriting the base values. opw-4292488 opw-4523885 opw-4585705 opw-4585779 Forward-Port-Of: odoo/enterprise#79348
Since 3.13, leading whitespace is automatically stripped in a docstring (python/cpython#81283). The `info` field of an ir.model is a copy of the docstring, so running :TestStudioExports.test_export_customizations on 3.13 fails because the documents are different (the content of the info field is indented and has a leading space matching `Model`'s docstring). Instead of duplicating the info field, just inject it in the document we're creating from the record, that way it doesn't break if so
Original PR description
Since 3.13, leading whitespace is automatically stripped in a docstring (python/cpython#81283). The `info` field of an ir.model is a copy of the docstring, so running :TestStudioExports.test_export_customizations on 3.13 fails because the documents are different (the content of the info field is indented and has a leading space matching `Model`'s docstring). Instead of duplicating the info field, just inject it in the document we're creating from the record, that way it doesn't break if someone decides to improve the docstring either. Forward-Port-Of: odoo/enterprise#81087 Forward-Port-Of: odoo/enterprise#81045
- Sign > Documents > Click on any of the Kanban record - Reload the view (either reload the browser, or activate the debug, or change to dark mode on the user menu). Before this commit, on reloading the sign document page user was redirected back to kanban view. This occurs because, the client action 'sign.Document' requires attributes which are found in the context - { id, token, create_uid, state, request_item_states} that was lost when reloading. Now, { id, token, create_uid, state,
Original PR description
- Sign > Documents > Click on any of the Kanban record
- Reload the view (either reload the browser, or activate
the debug, or change to dark mode on the user menu).
Before this commit, on reloading the sign document page user was redirected back to kanban view. This occurs because, the client action 'sign.Document' requires attributes which are found in the context - { id, token, create_uid, state, request_item_states} that was lost when reloading.
Now, { id, token, create_uid, state, request_item_states} is put in the query string of the URL, in that way, when reloading, the client action 'sign.Document' will have the needed attributes. Note that, this is also the behavior of the base_import 'ImportAction' action [1].
task-4391729
[1] : https://github.com/odoo/odoo/pull/182744/commits/a6801ce4aa65cd023e2a762ab5c42755a4599c95
Forward-Port-Of: odoo/enterprise#77399task-4610498 Forward-Port-Of: odoo/enterprise#80929
Original PR description
task-4610498 Forward-Port-Of: odoo/enterprise#80929
19 changes
Enhancements to existing features
The point of sale delivery integration now includes Rappi as an available provider through UrbanPiper. This helps businesses manage more delivery channels directly from their Odoo POS setup.
Original PR description
In this commit: === - Integrated Rappi as a provider in pos_urban_piper. task-4632154
Draft entries in the General Ledger report will now display a default name instead of appearing blank. This makes reports easier to read and helps users identify draft accounting entries more clearly.
Original PR description
This is an enhancment on the fix **e68f4a0214053e** It adds a default name for the draft entries in the general ledger report, instead of leaving the entry empty and not showing anything for it. This change is simillar to https://github.com/odoo-dev/enterprise/commit/5743dd52af1060bc0d2c5d16021428bfdc626140 opw-4609221
Resolved issues and error corrections
Fixed an issue where subscriptions paid through the portal could receive the wrong deadline when their start date was in the past or future. This prevents duplicated quantities on invoices and removes an unnecessary message about an automated job running later.
Original PR description
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168
This fixes an issue where team-based commission plans could assign the full commission to the last salesperson instead of separating results by plan user. Businesses using sales commissions get more accurate payouts and reporting for team achievements.
Original PR description
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131
The Chilean electronic factoring module now handles unexpected or incorrectly encoded responses from the tax authority when uploading electronic yielding files. Instead of failing when the response is not valid XML, the system records the response in the document chatter so users are informed and can continue investigating with clearer context.
Original PR description
Before the PR: As could be experienced, the SII sometimes sends responses that are not encoded properly, or instead of responding with an XML, the response is an HTML instead. As a consequence of this, a bug was discovered in the response after uploading an AEC file (stands for electronic yielding file in Spanish). After the PR: We added a special parser method, that before transforming the response to a parsed XML, analyzes the encoding, and concludes in an html parsing and posting it to the chatter to inform the user. This is difficult to debug since the possible undocumented responses are not easy to reproduce in an SII test environment, so we applied this method only to a particular case, found in some situations for some users.
POS users in Ecuador can now validate invoiced POS orders without needing inventory administrator rights. This prevents an access error during order synchronization, helping sales continue smoothly at checkout.
Original PR description
### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a…
### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a custome linked to the EC localisation. - Try to validate the POS order that is invoiced using the cash payment method. #### > An access error is raised with respect to the `stock_valuation_layer_ids` fields of the account.move model ### Cause of the issue: Clicking on validate will launch a call of the `syncAllOrders` method. During this call, missing records will be fetched recursisvely here: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/static/src/app/store/pos_store.js#L1271 (Note that this call does not exist prior to 18.0). However, as the data contains a pos order that is related to account moves and since the `account.move` model of the localisation inherit from the `pos.load.mixin`: https://github.com/odoo/enterprise/blob/efa1853cf1f9bbd945a91971ffe40c6906482063/l10n_ec_edi_pos/models/account_move.py#L6-L8 the account move will be fetched as a related record to the pos order and we will launch a `read` for the `fields=[]`: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/static/src/app/models/data_service.js#L513-L515 https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/models/pos_load_mixin.py#L9-L11 However, a read performed with a false value in the `fields` tries to read the value of each field on the records: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/odoo/models.py#L3792-L3798 This includes protected fields such as the `stock_valuation_layer_ids` that can only be read by user's with administrator stock access rights. opw-4498024
This fixes an intermittent failure in a Web Studio automated tour caused by animations preventing the test from consistently finding the next step. The change helps keep automated checks stable, reducing false alarms during quality validation without changing user-facing behavior.
The Documents app now avoids loading embedded actions for folders a user cannot access. This prevents unnecessary access errors and helps users continue working smoothly when permissions limit folder visibility.
Original PR description
No need to fetch available embedded actions on inaccessible folders. FU of d391313e. Task-4525850
Fixes an issue where clicking a shared Documents link from a project note could show a missing action error instead of opening the document. Shared document links are now left to the normal redirect process, ensuring users reach the correct backend or portal page.
Original PR description
Steps to reproduce ================== - Install documents,project - Go to documents - Open any document - Click on share - Click on "Copy link" - Go to a project task - Click on a log note - Open the full composer - Type some text and select it - Paste the copied url - Post the log note - Click on the link => Missing Action: the action "..." does not exist Cause of the issue ================== Documents [redirects] `/odoo/documents/<access-token>` to either the backend or the portal. There is a global click handler in the router that intercepts click on links to update and push the router state. Solution ======== We should not handle those links, the http redirection will take care of it. --- [redirects]: https://github.com/odoo/enterprise/blob/882e4453c8eadae8e39ea02314377c617d3b9e0f/documents/controllers/home.py#L24 opw-4611260
The trash folder now hides unnecessary action buttons so users only see the Download option when viewing deleted documents. This reduces confusion and keeps available actions aligned with what can actually be done from the trash.
Original PR description
Specs: When documents are in the trash folder, no actions are required except for the Download button, which remains visible. After this commit: Remove action buttons from the control panel in the trash folder. Task-4574919
The Field Service product catalog no longer shows a blank image placeholder when a product has no image. This keeps the catalog consistent with the Sales app and avoids visual clutter, especially in dark mode.
Original PR description
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An image placeholder appears when no image is set for a product. This behavior is inconsistent with the product catalog page in the Sales app. Solution: - Removed the XPath that adds the image placeholder in the product catalog. task-4302221
This fixes an unstable automated test in Odoo Studio that could fail even when the product was working correctly. The change helps keep validation results consistent, reducing false alarms during development and release checks.
Miscellaneous changes
To reproduce: - create two repeating planning.slot records, Shift A and Shift B - delete Shift A and all of its repeats - delete only the last repeat of Shift B - run the "Planning: generate next recurring shifts" scheduled action - Cron fails with "record is missing or deleted" error Problem: The function to create the repeat shifts (planning.recurrency _repeat_slot) iterates over recurrences and deletes them if there are 0 existing shifts linked to them (i.e. Shift A's reccurency). On
Original PR description
To reproduce: - create two repeating planning.slot records, Shift A and Shift B - delete Shift A and all of its repeats - delete only the last repeat of Shift B - run the "Planning: generate next recurring shifts" scheduled action - Cron fails with "record is missing or deleted" error Problem: The function to create the repeat shifts (planning.recurrency _repeat_slot) iterates over recurrences and deletes them if there are 0 existing shifts linked to them (i.e. Shift A's reccurency). On a subsequent loop iteration, an attempt is made to access the company_id field of the recordset (self) which will now contain a deleted planning.recurrency record, causing the missing record error. Solution: Access the company_id field on the current iterated planning.recurrency record instead of the 'self' recordset. opw-4457844 Forward-Port-Of: odoo/enterprise#81166
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the com
Original PR description
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the company_id.check_account_audit_trail, but also we should consider move.posted_before and if not, it should be deleted not reversed. Fix: - Replace the company_id.check_account_audit_trail check with _is_protected_by_audit_trail() which includes checking if the move is posted before or not. opw - 4562732 Forward-Port-Of: odoo/enterprise#81061
Multiple problems can arise when a project has the documents feature enabled but no folder linked to it. This PR fixes two edge cases related to projects not having a folder. Task-4107728 Forward-Port-Of: odoo/enterprise#78825 Forward-Port-Of: odoo/enterprise#68688
Original PR description
Multiple problems can arise when a project has the documents feature enabled but no folder linked to it. This PR fixes two edge cases related to projects not having a folder. Task-4107728 Forward-Port-Of: odoo/enterprise#78825 Forward-Port-Of: odoo/enterprise#68688
In case of having two lines with the same product, the cfdi field `ValorUnitarioAduana` is wrong, it is set as the total of the two lines. With this commit, we set it as the average of the lines. Steps (with demo data, company `ESCUELA ...`): - Partner "Azure Interior" -> change `Tax ID` from `US12345677` to `123456779` - Product `[E-COM06]` -> - `UNSPC Catgegory`: `01010101` - `Tariff Fraction`: `0101290200` - `UMT Aduana`: `Units` - Make an invoice: - Currency: USD - Two lines for pro
Original PR description
In case of having two lines with the same product, the cfdi field `ValorUnitarioAduana` is wrong, it is set as the total of the two lines. With this commit, we set it as the average of the lines. Steps (with demo data, company `ESCUELA ...`): - Partner "Azure Interior" -> change `Tax ID` from `US12345677` to `123456779` - Product `[E-COM06]` -> - `UNSPC Catgegory`: `01010101` - `Tariff Fraction`: `0101290200` - `UMT Aduana`: `Units` - Make an invoice: - Currency: USD - Two lines for product `[E-COM06]` - Incoterm: `[EXW] EX WORKS` - External Trade: `Definitive` - Confirm and sent to cfdi -> Error opw-4596628 Forward-Port-Of: odoo/enterprise#81099 Forward-Port-Of: odoo/enterprise#80660
We support sending credit transfers using ISO 20022 to accommodate non SEPA bank transfers (any party having no IBAN number). However when generating the XML file, we assumed that our company always had an IBAN number and put it in an IBAN node. For non IBAN numbers however we need to put it in another node. This commit fixes that. [opw-4585994](https://www.odoo.com/odoo/project.task/4585994) Forward-Port-Of: odoo/enterprise#80757
Original PR description
We support sending credit transfers using ISO 20022 to accommodate non SEPA bank transfers (any party having no IBAN number). However when generating the XML file, we assumed that our company always had an IBAN number and put it in an IBAN node. For non IBAN numbers however we need to put it in another node. This commit fixes that. [opw-4585994](https://www.odoo.com/odoo/project.task/4585994) Forward-Port-Of: odoo/enterprise#80757
- Sign > Templates > Click on any of the kanban record - Reload the view (either reload the browser, or activate the debug, or change to dark mode on the user menu). Before this commit, on reloading the sign template page user was redirected back to kanban view. This occurs because, the client action 'sign.Template' required template_id (found in the context) that was lost when reloading. Now, template_id is put in the query string of the URL, in that way, when reloading, the client ac
Original PR description
- Sign > Templates > Click on any of the kanban record - Reload the view (either reload the browser, or activate the debug, or change to dark mode on the user menu). Before this commit, on reloading the sign template page user was redirected back to kanban view. This occurs because, the client action 'sign.Template' required template_id (found in the context) that was lost when reloading. Now, template_id is put in the query string of the URL, in that way, when reloading, the client action 'sign.Document' will have the needed template_id. Note that, this is also the behavior of the base_import 'ImportAction' action [1]. task-4391729 [1] : https://github.com/odoo/odoo/pull/182744/commits/a6801ce4aa65cd023e2a762ab5c42755a4599c95 Forward-Port-Of: odoo/enterprise#77400
[FIX] l10n_ar: price unit precision digits on invoice report. This pr was created to adapt l10n_ar_reports/tests/IVA_Ventas.txt and l10n_ar_reports/tests/Ventas.txt files to the changes of https://github.com/odoo/odoo/pull/171131/commits/95bd2d3677f6b534e9eb660e9757e87cf778d7b5 Ticket Adhoc side: 77471 Task latam: 1226 Forward-Port-Of: odoo/enterprise#80501 Forward-Port-Of: odoo/enterprise#77800
Original PR description
[FIX] l10n_ar: price unit precision digits on invoice report. This pr was created to adapt l10n_ar_reports/tests/IVA_Ventas.txt and l10n_ar_reports/tests/Ventas.txt files to the changes of https://github.com/odoo/odoo/pull/171131/commits/95bd2d3677f6b534e9eb660e9757e87cf778d7b5 Ticket Adhoc side: 77471 Task latam: 1226 Forward-Port-Of: odoo/enterprise#80501 Forward-Port-Of: odoo/enterprise#77800