Wednesday, October 25, 2023
64 changes · master
Enhancements to existing features
This update reorganizes part of the sales and stock workflow so rental-related deliveries can be supported more cleanly. It is an internal improvement that helps prepare the system for better rental picking behavior without changing day-to-day screens for most users.
Original PR description
Refactored _action_launch_stock_rule to create _create_procurement_group. Needed for rental pickings. task 3109952 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Print Labels option now appears only for products where labels are relevant: storable and consumable items. This reduces confusion by hiding the option for non-physical products such as event tickets, booths, or courses.
Original PR description
Before this commit, the "Print Labels" button shows for all products except services. However, this button does not make sense for event_booth, event_ticket, course, ... products So we only show this button for storable and consumable products. Task-3390587
Several user-facing buttons, actions, and notifications have been reworded across Discuss, Web, Calendar, CRM, and related tour screens. This makes common actions such as leaving conversations, deleting filters, stopping synchronization, and assigning leads easier to understand and reduces ambiguity for users.
Original PR description
This PR changes the wording of actions and notifications in the modules listed below: 1) Discuss (Leave Conversation) 2) Web (Delete Filter, Get View - Close, Tours - Close and property field access warning) 3) Calendar (Stop Synchronization, Configure, and Discard) 4) CRM (Assign Leads) 5) POS (replaced `this.env._t` with `_t`) **Task**-3390780
This update removes an older internal error-handling helper and replaces it with standard handling across several Odoo apps. It helps make browser-side errors more consistent and easier to maintain without changing business workflows.
Original PR description
This commit removes the promise extension which added the function `guardedCatch`. It was used to filter server and connection errors from javascript errors. Instead of using guardedCatch, we should use catch and check if the reason is a server or connection error if needed and re-throw the error if it's not handled. task: 3439226 Enterprise: https://github.com/odoo/enterprise/pull/48451
This update adds extra information fields used when importing industry-specific modules. It helps Odoo better recognize and handle these modules during import, making module management more complete and reliable.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes confusing internal details from some access-related error reports. It helps support and technical teams see the real cause of a problem faster, without misleading cache-related messages in the traceback.
Original PR description
Currently if a record is not in the cache it raises a `CacheMiss` the handling of which leads to loading the record from the database (or something). If an issue occurs during that loading, because the loading is an `except` scope the cache miss gets linked with the new one via > During handling of the above exception, another exception occurred: This is both noise (the cache miss is not actually relevant) and misleading, because the wording makes it look like an unrelated error occurred during handling. - move the loading of the record out of the `except` to limit the scope of the `KeyError` and avoid "inheriting" it - try to `from None` a few specific errors to remove implicit linkage, as the new error should have all relevant information, the key error / cache miss is just an implementation detail
The timesheet app now includes billing time targets for most demo employees, so the billing leaderboard displays meaningful sample data. The update also improves the leaderboard header layout and places related settings in the correct category, making demos and configuration clearer.
Original PR description
This PR adds a billing time target for most demo employees, as without it, they don't appear in the billing leaderboard. It also fixes a small visual bug related to the leaderboard: the timer header doesn't have a fixed height when the leaderboard is activated depending on whether or not there is data for it. Task-3570491
Brazilian AvaTax requests now send each line's unit price and quantity in addition to the existing tax information. This prepares the integration for future electronic invoicing needs while keeping the current tax calculation behavior unchanged.
Original PR description
Although not strictly needed for tax calculation, it doesn't hurt and will be necessary for EDI later. Since adding it cleanly requires a change in function signature we already do it now. This decreases the likelihood of somebody relying on this exact function signature in other code.
The spacing between appointment details and table visuals on restaurant floor plans has been reduced. This makes the point-of-sale floor view cleaner and easier for staff to read at a glance.
Original PR description
There used to be a big gap between the appointment information and the table on the pos_restaurant floor_plan. We've now reduced this gap.
This update removes older appraisal survey views and records that were only needed during a previous backport. It keeps the appraisal survey setup cleaner and easier to maintain without changing day-to-day business workflows.
Original PR description
Following this backport https://github.com/odoo/enterprise/pull/45465 , we cleanup in this PR the views and records that had to be added in stable and remove the old ones
This change removes an outdated error-handling helper and updates affected areas to use the standard approach for handling failed operations. It helps keep the platform easier to maintain while preserving expected behavior for server and connection issues.
Original PR description
This commit removes the promise extension which added the function `guardedCatch`. It was used to filter server and connection errors from javascript errors. Instead of using guardedCatch, we should use catch and check if the reason is a server or connection error if needed and re-throw the error if it's not handled. task: 3439226 Community: https://github.com/odoo/odoo/pull/137702
The wording of two Knowledge app buttons has been updated to make their actions clearer for users. This minor improvement helps users better understand where content will be moved when organizing articles.
Original PR description
This PR changes the wording of the buttons listed below: -Move to Workspace -Move to Private Task-3390780
Administrators now have dedicated permissions to delete approval requests, rather than relying on rules intended for approval officers. This makes access management clearer and easier to adjust in the future without affecting other roles.
Original PR description
I created basic rights for administrator to gives them permissions to delete approval requests (I also duplicate the other rules so if in the future if we want to change one of them it will be possible without affecting the admin) Before that it was limited to the domain for officer
Resolved issues and error corrections
The mail reaction menu now closes automatically when the last reaction is removed. This prevents users from seeing an empty menu and makes the messaging experience feel cleaner and less confusing.
Original PR description
Currently, if all reactions are deleted from reactions menu, the menu remains open. This commit force it close in case of having no reactions. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Features or functions removed from Odoo
Removed an outdated live chat code override that was accidentally left behind after a related field was removed. This is a minor internal cleanup that helps keep the live chat module consistent and easier to maintain, with no expected change for users.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/138330 The computed field was removed during dev from the base module but the override was left by mistake.
Code cleanup and technical improvements
This update reorganizes automated Point of Sale test tours to make them easier for developers to maintain. It does not change customer-facing POS behavior, but it helps reduce future maintenance effort and supports more reliable testing across POS-related modules.
Miscellaneous changes
Before this commit, when using a livechat chatbot from visitor and selecting a chatbot option, there was the following traceback: ``` UncaughtPromiseError > SyntaxError Uncaught Promise > JSON Parse error: Unterminated string SyntaxError: JSON Parse error: Unterminated string parse@[native code] updateSession ``` This happens because the session cookie had incorrect format for its content. This was caused by a history prop whose content had the character "→". When setting the cookie,
Original PR description
Before this commit, when using a livechat chatbot from visitor and selecting a chatbot option, there was the following traceback: ``` UncaughtPromiseError > SyntaxError Uncaught Promise > JSON Parse…
Before this commit, when using a livechat chatbot from visitor and selecting a chatbot option, there was the following traceback: ``` UncaughtPromiseError > SyntaxError Uncaught Promise > JSON Parse error: Unterminated string SyntaxError: JSON Parse error: Unterminated string parse@[native code] updateSession ``` This happens because the session cookie had incorrect format for its content. This was caused by a history prop whose content had the character "→". When setting the cookie, the stringified object is only partially inserted until this "→", which made the content non-JSON parseable as the string is incomplete. This commit fixes the issue by replacing all occurrences of the character "→" by a whitespace, so that the setting of the cookie works and insert the whole stringified object as intended. Note that this "→" is used for data that is not used in the context of livechat chatbot for the visitor, therefore this alteration of the content has functionally no effect. opw-3527969 Forward-Port-Of: odoo/odoo#139564
Receipts are now printed automatically only when customers use self-ordering in kiosk mode. This avoids unnecessary receipt generation on mobile self-ordering and prevents the confirmation screen from displaying incorrectly.
Original PR description
Before, a receipt was automatically generated in the mobile self order and the confirmation screen would glitch when it was generated. Now this receipt is only generated in kiosk mode and the confirmation screen no longer glitches due to a hidden overflow.
This fixes an issue where input fields inside popups did not automatically receive focus as expected. It also removes duplicate handling in the messaging area, making the behavior more consistent across Odoo.
Original PR description
Currently, when there is an input within a popover, the AutoFocus hook is not working well due to the check for activeElement. The fix is to provide a function parameter to check the situation rather than put it inside the hook thus, it can be used as a generic hook as it was. Also, remove the duplicate useAutofocus in `mail` code. Related PR: https://github.com/odoo/odoo/pull/139124 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A display issue was fixed so empty HTML content is treated correctly when deciding whether to show or hide elements on a page. This prevents blank alerts from appearing in forms, improving clarity for users.
Original PR description
Because `Markup("")` is not considered as falsy, computed and not stored HTML field used in invisible attribute on views were not rendered correctly.
Indeed, if a computed (and not stored) html field was used as a condition for the display of an alert. Then a void alert was displayed on the view.
Follow-up of odoo/odoo#130479Disabled input fields now use a background color that matches the updated website design. Placeholder text has also been darkened to improve readability on lighter backgrounds, creating a more consistent and accessible editing experience.
Original PR description
Before this commit, disabled inputs background color was set to Bootstrap default value (`$gray-200`). Since the input background color is now based on `o-color-3`, it was creating inconsistencies. This commit fixes that issue. This commit also darkens the placeholder color as it was not readable enough on the new light background. task-3565420 part-of-task-3097005 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mailing form no longer shows an extra duplicate domain field. This keeps the email campaign setup screen cleaner and reduces confusion for users configuring mailing recipients.
Original PR description
Remove the extra mailing_domain in the form view. task-3562293
Fixed an issue where quiz content in online courses could show unwanted HTML text to learners. This improves the course-taking experience by ensuring quiz text appears as intended.
Original PR description
**How to reproduce:** 1. Open any course having a quiz. 2. Select quiz content. -> In the quiz template we can see that the html content is not sanitized. **Technical:** I think the issue arises after this commit https://github.com/odoo/odoo/commit/0d7acf60b4cca84a8c700edd97af8c4de6b78010 **After this PR:** Now t-esc is deprecated and the HTML text is not sanitized in the template so instead of t-esc we are using t-out. Task-3555159
The Print Labels button now appears only for products where labels are useful, such as storable, consumable, and combo products. This avoids confusion by hiding the option for items like event tickets, booths, or courses where label printing does not apply.
Original PR description
Before this commit, the "Print Labels" button shows for all products except services. However, this button does not make sense for event_booth, event_ticket, course, ... products So we only show this button for storable, consumable and combo products. Task-3390587
This fixes an issue in the Argentinian localization where opening a customer or vendor contact form could fail because a hidden filter condition was evaluated incorrectly. Users can now access partner records normally without encountering an error.
Original PR description
It seems that the invisible is not working on filter and so the fiscal country_code cannot be evaluated which causes a Traceback when trying to access the res_partner form view. task: 3270458 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a small issue in the Mail app by removing repeated autofocus handling in the message search panel. The change helps keep the interface behavior consistent and reduces the chance of minor focus-related glitches for users.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts demo data and access settings across several business apps so demo users have more appropriate permissions. It also hides a point-of-sale preparation display menu from users who cannot use it, preventing an access error and making the demo experience smoother.
This fixes the automatic setup of the external tax connection for sales. It helps ensure the right supporting component is installed when needed, reducing manual setup issues for businesses using external tax services.
This fix prevents a Studio automated tour from failing when the Attendance app is not installed. It removes an irrelevant check so internal validation is more stable without changing user-facing features.
Original PR description
Since [1], the `/hr_attendance/attendance_user_data` route is asserted in a studio tour. This route is not called when `hr_attendance` is not installed making this tour fail in this case. This commit excludes this route from the assertions since it is not relevant. [1]: https://github.com/odoo/enterprise/pull/47384 fixes runbot-27902
Financial reports now keep total lines on the expected page when using the Total Below option. This prevents report layouts from adding unwanted page breaks inherited from section lines, making printed reports cleaner and more predictable.
Original PR description
By activating the "Total Below" section feature, the total line will adopt the attributes of the section. In the report settings, we have the option to define a page break attribute for a line. However, if the section's line possesses the page break attribute, this causes the total line to also have it, which is not the desired behavior. This commit aims to separate the "Total Below" sections from the "print_on_new_page" field. task: 3566903
Original PR description
pos*: l10n_es_pos, point_of_sale, pos_hr, pos_loyalty, pos_online_payment, pos_online_payment_self_order, pos_restaurant, pos_sale, pos_self_order In this commit we refactor all the pos tours.…
pos*: l10n_es_pos, point_of_sale, pos_hr, pos_loyalty, pos_online_payment,
pos_online_payment_self_order, pos_restaurant, pos_sale, pos_self_order
In this commit we refactor all the pos tours.
Changes:
- Removed the `startSteps`, `getSteps` functions as they were
no longer serving a purpose. We now simply put the tours steps
in the array returned by the function given to `steps`. We
apply `flat()` to this array in order to be able to provide both
single steps and arrays containing multiple steps;
- removed the classes from the tours. Now each helper function
is simply exported from it's file and is consumed as `import * as myHelpers`;
- removed the `do`, `check`, `exec` subpaths as they were not providing
a clearer api. The functions themselves already have descriptive names.
( writing `ProductScreen.do.clickHomeCategory()` is not clearer than
`ProductScreen.clickHomeCategory()` )
- formatted all files.
Task: 3565443
https://github.com/odoo/enterprise/pull/49313
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis change removes an outdated internal way of fetching display names in the web interface and updates related fields to use the newer approach. It helps keep the web client aligned with recent platform changes, reducing maintenance risk without changing normal user workflows.
Original PR description
This commit removes all usages of the nameGet method of the orm service following changes introduced by https://github.com/odoo/odoo/pull/122085 task-3377209
This update reorganizes the Mexican electronic invoicing Send & Print setup so related files are in the right place and easier to maintain. It also reduces unnecessary background calculations, which can improve reliability and keep the invoicing workflow cleaner without changing the user experience.
Original PR description
- move files to the correct folder - clean computes to avoid unnecessary computation
This update streamlines how bank reconciliation screens apply table highlighting styles. It reduces unnecessary generated styling code, which helps keep the interface code lighter without changing user workflows.
Original PR description
´extends´ generates a lot of css rules. So in this commit, we remove it by replacing it by adding the class directly on the node.
This update reorganizes internal automated test steps for several point-of-sale related apps, making them simpler and easier for developers to maintain. It does not change business features or user workflows, but helps reduce maintenance effort and supports more reliable future updates.
Original PR description
pos*: l10n_mx_edi_pos, pos_iot, pos_preparation_display,
pos_restaurant_preparation_display, pos_sale_stock_renting
In this commit we refactor all the pos tours.
Changes:
- Removed the `startSteps`, `getSteps` functions as they were
no longer serving a purpose. We now simply put the tours steps
in the array returned by the function given to `steps`. We
apply `flat()` to this array in order to be able to provide both
single steps and arrays containing multiple steps;
- removed the classes from the tours. Now each helper function
is simply exported from it's file and is consumed as `import * as myHelpers`;
- removed the `do`, `check`, `exec` subpaths as they were not providing
a clearer api. The functions themselves already have descriptive names.
( writing `ProductScreen.do.clickHomeCategory()` is not clearer than
`ProductScreen.clickHomeCategory()` )
- formatted all files.
Task: 3565443
https://github.com/odoo/odoo/pull/139317Embedded views in Knowledge now store less extra setup information and add needed details only when opened. This keeps saved content cleaner while preserving the same user experience for embedded views.
Original PR description
When inserting an embedded view, the key `knowledge_embedded_view_framework` is saved in the context of the action that is encoded and saved in the HTML tag that will be recognized by the editor as an embedded view. Instead of saving that key, the embedded view behavior will now dynamically add the id of the embedded view in the context of the action before executing it. We can then determine whether the view is an embedded view by checking whether the id is defined. We therefore no longer need to add a special key in the context and save it in the HTML tag to distinguish the embedded view from the standard views. task-3334536
This update cleans up how Documents, Helpdesk, and Quality Control handle incoming and outgoing message data. It reduces the risk of errors when message details are missing or inconsistent, making communication-related workflows more reliable and easier to maintain.
Original PR description
Task ID-2477479 (identity task) Followup of Task ID-2070632 (channel members main task) Followup of Task ID-2419762 (channel members followup task) COM PR odoo/odoo#67395 ENT PR odoo/enterprise#17617 UPG BR odoo/upgrade#2382
When the debug manager was migrated to OWL on ce559992, both `title` and `aria-label` attributes were removed from the button that opens the developer tools. However, the `aria-label` is actually required, because such button doesn't contain any text, just the bug icon. This commit restores (only) the `aria-label`text. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138591 Forward-Port-Of: odoo/odoo#138579
Original PR description
When the debug manager was migrated to OWL on ce559992, both `title` and `aria-label` attributes were removed from the button that opens the developer tools. However, the `aria-label` is actually required, because such button doesn't contain any text, just the bug icon. This commit restores (only) the `aria-label`text. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138591 Forward-Port-Of: odoo/odoo#138579
If you assign a different payment account per payment method line corresponding to the same journal (but different payment methods), The method that returns the possible liquidity accounts returns a tuple instead of a recordset, and the comparison is done with the operator `in`, so if any of the elements of the tuple is a recordset of more than one record, the match is not happening, which may be the case for `self.journal_id.inbound_payment_method_line_ids.payment_account_id` or `self.journa
Original PR description
If you assign a different payment account per payment method line corresponding to the same journal (but different payment methods), The method that returns the possible liquidity accounts returns a tuple instead of a recordset, and the comparison is done with the operator `in`, so if any of the elements of the tuple is a recordset of more than one record, the match is not happening, which may be the case for `self.journal_id.inbound_payment_method_line_ids.payment_account_id` or `self.journal_id.outbound_payment_method_line_ids.payment_account_id`. The solution is to return a recordset instead. @Tecnativa TT43014 Forward-Port-Of: odoo/odoo#120847
Change the disposition in Kanban card. Changes the behavior of the image in the kanban card: if a user no longer has an employee's image then the user image is taken. If no image; it's the avatar image. task : 3527398 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#137513
Original PR description
Change the disposition in Kanban card. Changes the behavior of the image in the kanban card: if a user no longer has an employee's image then the user image is taken. If no image; it's the avatar image. task : 3527398 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#137513
When the user tries to modify the view with an invalid xpath expression, an XPathSyntaxError traceback will appear. Steps to produce: - Install the Accounting module. - Settings > Technical > UI > Views > Open any view - Invalidate `expr` syntax and try to save, thus an error will be generated. Error: XPathSyntaxError: Invalid expression See traceback: ``` XPathSyntaxError: Invalid expression File "/home/odoo/odoo/odoo/odoo/http.py", line 2123, in __call__ response = requ
Original PR description
When the user tries to modify the view with an invalid xpath expression, an XPathSyntaxError traceback will appear. Steps to produce: - Install the Accounting module. - Settings > Technical > UI >…
When the user tries to modify the view with an invalid xpath expression,
an XPathSyntaxError traceback will appear.
Steps to produce:
- Install the Accounting module.
- Settings > Technical > UI > Views > Open any view
- Invalidate `expr` syntax and try to save, thus an error will be generated.
Error: XPathSyntaxError: Invalid expression
See traceback:
```
XPathSyntaxError: Invalid expression
File "/home/odoo/odoo/odoo/odoo/http.py", line 2123, in __call__
response = request._serve_db()
File "/home/odoo/odoo/odoo/odoo/http.py", line 1699, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/home/odoo/odoo/odoo/odoo/service/model.py", line 133, in retrying
result = func()
File "/home/odoo/odoo/odoo/odoo/http.py", line 1726, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/odoo/odoo/odoo/http.py", line 1927, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_http.py", line 190, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/odoo/odoo/odoo/http.py", line 716, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/odoo/odoo/addons/web/controllers/dataset.py", line 30, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/home/odoo/odoo/odoo/addons/web/controllers/dataset.py", line 26, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/odoo/odoo/odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/home/odoo/odoo/odoo/odoo/api.py", line 448, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 584, in write
res = super(View, self).write(self._compute_defaults(vals))
File "/home/odoo/odoo/odoo/odoo/models.py", line 4046, in write
fields[0].determine_inverse(real_recs)
File "/home/odoo/odoo/odoo/odoo/fields.py", line 1396, in determine_inverse
determine(self.inverse, records)
File "/home/odoo/odoo/odoo/odoo/fields.py", line 99, in determine
return needle(*args)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 363, in _inverse_arch_base
view_wo_lang.arch = view.arch_base
File "/home/odoo/odoo/odoo/odoo/fields.py", line 1320, in __set__
records.write({self.name: write_value})
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 584, in write
res = super(View, self).write(self._compute_defaults(vals))
File "/home/odoo/odoo/odoo/odoo/models.py", line 4046, in write
fields[0].determine_inverse(real_recs)
File "/home/odoo/odoo/odoo/odoo/fields.py", line 1396, in determine_inverse
determine(self.inverse, records)
File "/home/odoo/odoo/odoo/odoo/fields.py", line 99, in determine
return needle(*args)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 345, in _inverse_arch
view.write(data)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 584, in write
res = super(View, self).write(self._compute_defaults(vals))
File "/home/odoo/odoo/odoo/odoo/models.py", line 4036, in write
real_recs._validate_fields(vals, inverse_fields)
File "/home/odoo/odoo/odoo/odoo/models.py", line 1411, in _validate_fields
check(self)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 447, in _check_xml
combined_arch = view._get_combined_arch()
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 1010, in _get_combined_arch
arch = root.with_prefetch(tree_views._prefetch_ids)._combine(hierarchy)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 951, in _combine
combined_arch = view.apply_inheritance_specs(combined_arch, arch)
File "/home/odoo/odoo/odoo/odoo/addons/base/models/ir_ui_view.py", line 882, in apply_inheritance_specs
source = apply_inheritance_specs(
File "/home/odoo/odoo/odoo/odoo/tools/template_inheritance.py", line 147, in apply_inheritance_specs
node = locate_node(source, spec)
File "/home/odoo/odoo/odoo/odoo/tools/template_inheritance.py", line 78, in locate_node
xPath = etree.ETXPath(expr)
File "src/lxml/xpath.pxi", line 478, in lxml.etree.ETXPath.__init__
File "src/lxml/xpath.pxi", line 421, in lxml.etree.XPath.__init__
```
This commit handles XPathSyntaxError by raising ValidationError instead of a traceback.
sentry-4377014622
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#136565
Forward-Port-Of: odoo/odoo#131673Back-port tests with `contains` from `master` runbot-9203 Forward-Port-Of: odoo/odoo#138102 Forward-Port-Of: odoo/odoo#137316
Original PR description
Back-port tests with `contains` from `master` runbot-9203 Forward-Port-Of: odoo/odoo#138102 Forward-Port-Of: odoo/odoo#137316
**Current behavior before PR:** When you try to copy paste html in code view of email marketing then in preview it will show the code instead of template. **Desired behavior after PR is merged:** Now when you try to paste html in code view of email marketing then it will show template preview as a result. task-3473633 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139135 Forward-Port-Of: odoo/odoo#1330
Original PR description
**Current behavior before PR:** When you try to copy paste html in code view of email marketing then in preview it will show the code instead of template. **Desired behavior after PR is merged:** Now when you try to paste html in code view of email marketing then it will show template preview as a result. task-3473633 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139135 Forward-Port-Of: odoo/odoo#133032
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#139179 Forward-Port-Of: odoo/odoo#137444
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139179 Forward-Port-Of: odoo/odoo#137444
The onchange on the stage_id/project_id wasn't triggered when modifing tasks in batch we are now putting the same conditions as the onchange but in the task write() method --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139399 Forward-Port-Of: odoo/odoo#139249
Original PR description
The onchange on the stage_id/project_id wasn't triggered when modifing tasks in batch we are now putting the same conditions as the onchange but in the task write() method --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139399 Forward-Port-Of: odoo/odoo#139249
runbot-24463 runbot-24508 Forward-Port-Of: odoo/odoo#138103 Forward-Port-Of: odoo/odoo#137457
Original PR description
runbot-24463 runbot-24508 Forward-Port-Of: odoo/odoo#138103 Forward-Port-Of: odoo/odoo#137457
Description of the issue/feature this PR addresses: Before this commit it is impossible to find the qweb (or python) error when you preview an email template. Current behavior before PR:  Desired behavior after PR is merged:  @xmo-odoo --- I confirm I have signed the CLA and read the PR gui
Original PR description
Description of the issue/feature this PR addresses: Before this commit it is impossible to find the qweb (or python) error when you preview an email template. Current behavior before PR:  Desired behavior after PR is merged:  @xmo-odoo --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138564 Forward-Port-Of: odoo/odoo#123557
### Steps - Create a contact with 2 sub contacts Sub1 and Sub2. - Create a service product with project creation on order. - Create a quotation for Sub1 and the created product and confirm. - Go to the created project and create a task. - Edit the task and change the customer to Sub2. - Empty the sale order item. ### Issue The sale order doesn't appear in the drop list. ### Cause Wrong domain on ``ProjectTask.sale_line_id``. opw-3441194 Forward-Port-Of: odoo/odoo#139573 Forward
Original PR description
### Steps - Create a contact with 2 sub contacts Sub1 and Sub2. - Create a service product with project creation on order. - Create a quotation for Sub1 and the created product and confirm. - Go to the created project and create a task. - Edit the task and change the customer to Sub2. - Empty the sale order item. ### Issue The sale order doesn't appear in the drop list. ### Cause Wrong domain on ``ProjectTask.sale_line_id``. opw-3441194 Forward-Port-Of: odoo/odoo#139573 Forward-Port-Of: odoo/odoo#136379
Without the Accounting app and the Bank Reconciliation part, the menu item "Reconciliation Models" is irrelevant. We therefore move the menu item from account to account_accountant. task-3540705 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139553
Original PR description
Without the Accounting app and the Bank Reconciliation part, the menu item "Reconciliation Models" is irrelevant. We therefore move the menu item from account to account_accountant. task-3540705 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#139553
steps to reproduce: - create product A with optional product B - add product A as optional of product B - create SO with product A and add optional product B in configurator As we do not want support recursive optional products after this commit the optional products will be filtered in the form to disallow recursion opw-3388598 Forward-Port-Of: odoo/odoo#139471 Forward-Port-Of: odoo/odoo#138017
Original PR description
steps to reproduce: - create product A with optional product B - add product A as optional of product B - create SO with product A and add optional product B in configurator As we do not want support recursive optional products after this commit the optional products will be filtered in the form to disallow recursion opw-3388598 Forward-Port-Of: odoo/odoo#139471 Forward-Port-Of: odoo/odoo#138017
[FIX] account_peppol: hide peppol_move_state on vendor bills, refunds - `peppol_move_state` is only useful when sending an invoice/credit note. Hide this field from the form view and the tree view for vendor bills and refunds - when getting new documents from the IAP, ignore messages with peppol state `error` as these are not useful for the users. Also, if there is an error when creating an invoice from the attachment, the vendor bill should still have `peppol_move_state` set to `done`, becaus
Original PR description
[FIX] account_peppol: hide peppol_move_state on vendor bills, refunds - `peppol_move_state` is only useful when sending an invoice/credit note. Hide this field from the form view and the tree view…
[FIX] account_peppol: hide peppol_move_state on vendor bills, refunds - `peppol_move_state` is only useful when sending an invoice/credit note. Hide this field from the form view and the tree view for vendor bills and refunds - when getting new documents from the IAP, ignore messages with peppol state `error` as these are not useful for the users. Also, if there is an error when creating an invoice from the attachment, the vendor bill should still have `peppol_move_state` set to `done`, because we have received the vendor bill after all. Users can fill out missing details if necessary, by looking at the attachment. [FIX] account_peppol: remove inactive canceled edi users - If an edi user needs cancellation before they are registered on the SMP, we should let them cancel and return to the very first step. We don't need the edi user anymore in that case (no messages could've been received or sent) so we can safely unlink. The same is done on the proxy side. - With that, reopening the registration is no longer needed, as we currently don't let users reopen their application when they're rejected. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138215
…vents Before this commit, crap sql query were performed with a lot of recurring events were searched: ``` bad query: SELECT "calendar_recurrence".id FROM "calendar_recurrence" WHERE (((((([...] ((((((("calendar_recurrence"."microsoft_id"::text like '%:XX0') OR ( "calendar_recurrence"."microsoft_id"::text like '%:XX1')) OR ("calendar_recurrence"."microsoft_id"::text like '%:XX2')) OR ("calendar_recurr [...] ``` --- I confirm I have signed the CLA and read the PR guidelines at
Original PR description
…vents
Before this commit, crap sql query were performed with a lot of recurring events were searched:
```
bad query: SELECT "calendar_recurrence".id FROM "calendar_recurrence" WHERE (((((([...]
((((((("calendar_recurrence"."microsoft_id"::text like '%:XX0') OR (
"calendar_recurrence"."microsoft_id"::text like '%:XX1'))
OR ("calendar_recurrence"."microsoft_id"::text like '%:XX2')) OR ("calendar_recurr [...]
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#136938People must be able to install `point_of_sale` without `pos_restaurant` if they don't need it. But in order to let users know that they can install `pos_restaurant` directly, we make it an app, that will also be selectable from the Start Trial page. Forward-Port-Of: odoo/odoo#131697
Original PR description
People must be able to install `point_of_sale` without `pos_restaurant` if they don't need it. But in order to let users know that they can install `pos_restaurant` directly, we make it an app, that will also be selectable from the Start Trial page. Forward-Port-Of: odoo/odoo#131697
At the moment, the efaktur system will consume a number even for invoices not using any taxes. This change will try to avoid that by not consuming numbers for invoices when no lines has a tax_ids set. task id #3130665 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138726
Original PR description
At the moment, the efaktur system will consume a number even for invoices not using any taxes. This change will try to avoid that by not consuming numbers for invoices when no lines has a tax_ids set. task id #3130665 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138726
Steps: - Install fleet. - Create new. Select a car. - Goto `Model` page. - Below CO2 Emissions string there is Co2 Standard string. Issue: - In the Engine section, there is a `CO2 Emissions` and a `Co2 Standard` field. If these are both referring to carbon dioxide, then they should be written consistently in the same format (CO2). Currently, one has a lowercase `o` while the other (correct) one has a capital `O`. Improvement: - We are adding the necessary string. task-3498197 For
Original PR description
Steps: - Install fleet. - Create new. Select a car. - Goto `Model` page. - Below CO2 Emissions string there is Co2 Standard string. Issue: - In the Engine section, there is a `CO2 Emissions` and a `Co2 Standard` field. If these are both referring to carbon dioxide, then they should be written consistently in the same format (CO2). Currently, one has a lowercase `o` while the other (correct) one has a capital `O`. Improvement: - We are adding the necessary string. task-3498197 Forward-Port-Of: odoo/odoo#139500 Forward-Port-Of: odoo/odoo#135438
Current behavior: After uninstalling the PoS module, if you try to install it again, you get a traceback because Odoo is trying to create a sequence that already exists. Steps to reproduce: - install PoS - uninstall PoS - install PoS - you get a traceback opw-3515647 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138189
Original PR description
Current behavior: After uninstalling the PoS module, if you try to install it again, you get a traceback because Odoo is trying to create a sequence that already exists. Steps to reproduce: - install PoS - uninstall PoS - install PoS - you get a traceback opw-3515647 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138189
Current behaviour: --- When your current company is South Korean, The chart of account is generic. If you try to create a South Korean company branch, you'll get an error message: The Currency of a subsidiary must be the same as its root company. Steps to reproduce: --- 1. Install account_accountant 2. Go to Settings 3. Go to Users & Companies > Companies 4. Create a new company 5. Country: South Korea 6. Currency: KRW 7. Switch into the new company (top right) 8. Go to Account
Original PR description
Current behaviour: --- When your current company is South Korean, The chart of account is generic. If you try to create a South Korean company branch, you'll get an error message: The Currency of a…
Current behaviour: --- When your current company is South Korean, The chart of account is generic. If you try to create a South Korean company branch, you'll get an error message: The Currency of a subsidiary must be the same as its root company. Steps to reproduce: --- 1. Install account_accountant 2. Go to Settings 3. Go to Users & Companies > Companies 4. Create a new company 5. Country: South Korea 6. Currency: KRW 7. Switch into the new company (top right) 8. Go to Accounting 9. Go to Configuration > Settings 10. Fiscal Localization: Generic Chart Template 11. Save the changes 12. Fiscal Country: South Korea 13. Main currency: KRW 14. Save the changes 15. Go to Settings 16. Go to Users & Companies > Companies 17. Select the Korean company 18. Create a new branch 19. Country: South Korea 20. The Currency of a subsidiary must be the same as it's root company. Cause of the issue: --- The generic chart of account's currency is USD opw-3537346 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#138226
Center buttons vertically inside the toolbar instead of aligning them at the end. task-3554022 Forward-Port-Of: odoo/enterprise#48942
Original PR description
Center buttons vertically inside the toolbar instead of aligning them at the end. task-3554022 Forward-Port-Of: odoo/enterprise#48942
Currently, the error occurs when sending a push notification from a 'Visitor', who has multiple 'website visitors'. Steps to reproduce: - Install a `social_push_notifications` and 'web_studio' modules. - Go to Settings> General Settings, And Enable website push notifications in 'Email & Marketing' section. - Open another browser or an incognito window, Visit your website as a visitor, and allow notifications. - Go back to the main browser and open Website>Reporting>Visitors, Open 'Admin
Original PR description
Currently, the error occurs when sending a push notification from a 'Visitor', who has multiple 'website visitors'. Steps to reproduce: - Install a `social_push_notifications` and 'web_studio'…
Currently, the error occurs when sending a push notification from a 'Visitor', who has multiple 'website visitors'.
Steps to reproduce:
- Install a `social_push_notifications` and 'web_studio' modules.
- Go to Settings> General Settings, And Enable website push notifications in 'Email & Marketing' section.
- Open another browser or an incognito window, Visit your website as a visitor, and allow notifications.
- Go back to the main browser and open Website>Reporting>Visitors, Open 'Administrator' record
- Tick the boolean field 'Push Notifications Enabled' to enable push notifications.
- Add the 'Push Subscriptions' field using 'web_studio' This field is for testing purposes and will show how many website visitors are available.
- If there are multiple web visitor then Click on the 'Send Push Notification' button to open the 'Post' form view.
- Set a message and post it.
Traceback on sentry:
```
ValueError: too many values to unpack (expected 1)
File "odoo/models.py", line 5457, in ensure_one
_id, = self._ids
ValueError: Expected singleton: website.visitor.push.subscription(6, 8)
File "odoo/tools/safe_eval.py", line 362, in safe_eval
return unsafe_eval(c, globals_dict, locals_dict)
File "ir.actions.server(547,)", line 1, in <module>
File "home/odoo/src/enterprise/saas-16.4/social_push_notifications/models/social_post.py", line 48, in _cron_publish_scheduled
push_notifications_live_posts._post_push_notifications()
File "home/odoo/src/enterprise/saas-16.4/social_push_notifications/models/social_live_post.py", line 67, in _post_push_notifications
account._firebase_send_message({
File "home/odoo/src/enterprise/saas-16.4/social_push_notifications/models/social_account.py", line 48, in _firebase_send_message
visitors = visitors.filtered(lambda visitor: visitor.push_subscription_ids.push_token)
File "odoo/models.py", line 5723, in filtered
return self.browse([rec.id for rec in self if func(rec)])
File "odoo/models.py", line 5723, in <listcomp>
return self.browse([rec.id for rec in self if func(rec)])
File "home/odoo/src/enterprise/saas-16.4/social_push_notifications/models/social_account.py", line 48, in <lambda>
visitors = visitors.filtered(lambda visitor: visitor.push_subscription_ids.push_token)
File "odoo/fields.py", line 1153, in __get__
record.ensure_one()
File "odoo/models.py", line 5460, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: <class 'ValueError'>: "Expected singleton: website.visitor.push.subscription(6, 8)" while evaluating
'model._cron_publish_scheduled()'
File "odoo/addons/base/models/ir_cron.py", line 373, in _callback
self.env['ir.actions.server'].browse(server_action_id).run()
File "home/odoo/src/custom/trial/saas_trial/models/sentry.py", line 33, in run
res = super().run()
File "odoo/addons/base/models/ir_actions.py", line 688, in run
res = runner(run_self, eval_context=eval_context)
File "addons/website/models/ir_actions_server.py", line 61, in _run_action_code_multi
res = super(ServerAction, self)._run_action_code_multi(eval_context)
File "odoo/addons/base/models/ir_actions.py", line 558, in _run_action_code_multi
safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self)) # nocopy allows to return 'action'
File "odoo/tools/safe_eval.py", line 376, in safe_eval
raise ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr))
```
When sending a push notification from a particular visitor whose website has multiple 'website visitors', There's an issue where the system attempts to access the 'push_token' from the multiple records of 'push_subscription_ids'[1].
Line[1]: https://github.com/odoo/enterprise/blob/2784921e93853d09f5052b6054389e78c2af42fc/social_push_notifications/models/social_account.py#L70
This commit solves this issue by removing 'push_token' in the filter function as 'push_token' is a required field, so there's no need for an additional iteration to check 'push_token' separately.
sentry-4486410114
Forward-Port-Of: odoo/enterprise#47809Crete an invoice from a subscription Confirm the invoice Hit 'credit note' In the wizard use 'Reverse and Create Invoice' Confirm the new invoice Go back to the subscription Issue: invoiced quantity will be 0 This occurs because deferred_start_date and deferred_end_date are copied to the credit note but not to the new invoice opw-3441508 Forward-Port-Of: odoo/enterprise#46686
Original PR description
Crete an invoice from a subscription Confirm the invoice Hit 'credit note' In the wizard use 'Reverse and Create Invoice' Confirm the new invoice Go back to the subscription Issue: invoiced quantity will be 0 This occurs because deferred_start_date and deferred_end_date are copied to the credit note but not to the new invoice opw-3441508 Forward-Port-Of: odoo/enterprise#46686
With a CL company setup Create an invoice with 100% discount on a line Confirm Issue: Traceback caused by division by zero opw-3556443 Forward-Port-Of: odoo/enterprise#49484
Original PR description
With a CL company setup Create an invoice with 100% discount on a line Confirm Issue: Traceback caused by division by zero opw-3556443 Forward-Port-Of: odoo/enterprise#49484
Purpose ======== Currently the feedback is sent in the requester language, which is not the language spoken by the employee from whom a feedback is asked. Some cleaning is also made, user_body is not used anymore for instance. Moreover, we changed the template to sound more friendly. Forward-Port-Of: odoo/enterprise#49488
Original PR description
Purpose ======== Currently the feedback is sent in the requester language, which is not the language spoken by the employee from whom a feedback is asked. Some cleaning is also made, user_body is not used anymore for instance. Moreover, we changed the template to sound more friendly. Forward-Port-Of: odoo/enterprise#49488
Problem --------- When fetching online transactions, it can happen that no new transactions are found. In such a case, a nice helper with a message and an image is meant to be displayed on the screen. However, in some situations, this helper is not rendered, and only the plain HTML code is displayed. Objective --------- Fix this behavior so that the helper is always rendered. Solution --------- After investigating, it appeared that the helper would not be rendered when the call to `_
Original PR description
Problem --------- When fetching online transactions, it can happen that no new transactions are found. In such a case, a nice helper with a message and an image is meant to be displayed on the…
Problem --------- When fetching online transactions, it can happen that no new transactions are found. In such a case, a nice helper with a message and an image is meant to be displayed on the screen. However, in some situations, this helper is not rendered, and only the plain HTML code is displayed. Objective --------- Fix this behavior so that the helper is always rendered. Solution --------- After investigating, it appeared that the helper would not be rendered when the call to `_open_iframe()` is made prior to fetching for new transactions. Indeed, this function calls some JS code that performs an ORM call. The ORM call fetches for the new transactions and returns an `ir.actions.act_window` in JSON. The returned act_window includes the helper if no new transactions have been found. When doAction() is called with act_window as a parameter, the helper is transformed into a string and is thus not rendered on the screen. To solve the issue, 1. Make sure that the helper HTML code is safe using escape and Markup. 2. After the `orm.call` and before calling `doAction`, retransform the helper into a markup explicitly. Task-3553029 Forward-Port-Of: odoo/enterprise#49452 Forward-Port-Of: odoo/enterprise#49128
This PR addresses an issue in the 'hr_payroll_holidays' module where the calculation of time off differ. The problem was causing accessing in the calculation of payroll holidays work entry. The root cause of the problem was accessing the date_stop id. The fix ensures that time off is now accurately calculated, providing a reliable basis for employee leave tracking and ensuring accurate payroll computations. task: 3424006 Forward-Port-Of: odoo/enterprise#49190 Forward-Port-Of: odoo/enterp
Original PR description
This PR addresses an issue in the 'hr_payroll_holidays' module where the calculation of time off differ. The problem was causing accessing in the calculation of payroll holidays work entry. The root cause of the problem was accessing the date_stop id. The fix ensures that time off is now accurately calculated, providing a reliable basis for employee leave tracking and ensuring accurate payroll computations. task: 3424006 Forward-Port-Of: odoo/enterprise#49190 Forward-Port-Of: odoo/enterprise#47520
Steps to Reproduce =================== 1 Click on the request button. 2 Create the new workspace from there. 3 Clicking the save or discard button from the workspace form view closes the request wizard also. Technical ======== The reason behind this is the clicked button is of a special type (special='save' and special='cancel'), which means that the record will be saved or discarded, and an 'ir.actions.act_window_close' will be executed, which closes the dialog. After this co
Original PR description
Steps to Reproduce =================== 1 Click on the request button. 2 Create the new workspace from there. 3 Clicking the save or discard button from the workspace form view closes the request wizard also. Technical ======== The reason behind this is the clicked button is of a special type (special='save' and special='cancel'), which means that the record will be saved or discarded, and an 'ir.actions.act_window_close' will be executed, which closes the dialog. After this commit ================== Removed the footer, and used the default footer having a 'save and close' button instead of that solves the issue. Forward-Port-Of: odoo/enterprise#47748 Forward-Port-Of: odoo/enterprise#46134