Tuesday, August 13, 2024
36 changes · saas-17.4
Enhancements to existing features
This update prevents the system from sending the same internal notification multiple times after a reset. It improves reliability and efficiency for collaboration-related features in documents, chat, helpdesk live chat, and WhatsApp without changing how users interact with them.
Original PR description
* = documents_spreadsheet, website_helpdesk_livechat, whatsapp Enterprise counter-part. After a reset, the last id is always 0. https://github.com/odoo/odoo/pull/176340
Resolved issues and error corrections
The mail app now saves the user's choice when they close all chat conversations, so those chat windows do not reappear after refreshing the page. This prevents a frustrating repeat experience and keeps the workspace cleaner across sessions.
Original PR description
Before this commit, when having several chat windows open or folded, clicking on "Close all conversations" then page reload would show these chat windows again. This happens because the closing of chat windows and bubbles were only made client-side. Their state is saved server-side, so without telling the server to update state, they would simply have their state unchanged.
Miscellaneous changes
Before this commit: Unhandled python traceback will be tough to read as there is too much line breaks which was forcing each line to be logged. e.g: ```py 2024-08-12 09:33:49,426 2466 ERROR ? root: Exception in thread 2024-08-12 09:33:49,428 2466 ERROR ? root: Thread-9 2024-08-12 09:33:49,429 2466 ERROR ? root: : 2024-08-12 09:33:49,430 2466 ERROR ? root: 2024-08-12 09:33:49,430 2466 ERROR ? root: Traceback (most recent call last): 2024-08-12 09:33:49,430 2466 ERROR ? root: 202
Original PR description
Before this commit: Unhandled python traceback will be tough to read as there is too much line breaks which was forcing each line to be logged. e.g: ```py 2024-08-12 09:33:49,426 2466 ERROR ? root:…
Before this commit: Unhandled python traceback will be tough to read as there is too much line breaks which was forcing each line to be logged. e.g: ```py 2024-08-12 09:33:49,426 2466 ERROR ? root: Exception in thread 2024-08-12 09:33:49,428 2466 ERROR ? root: Thread-9 2024-08-12 09:33:49,429 2466 ERROR ? root: : 2024-08-12 09:33:49,430 2466 ERROR ? root: 2024-08-12 09:33:49,430 2466 ERROR ? root: Traceback (most recent call last): 2024-08-12 09:33:49,430 2466 ERROR ? root: 2024-08-12 09:33:49,430 2466 ERROR ? root: File "/usr/lib/python3.11/threading.py", line 1038, in _bootstrap_inner 2024-08-12 09:33:49,439 2466 ERROR ? root: 2024-08-12 09:33:49,439 2466 ERROR ? root: 2024-08-12 09:33:49,457 2466 ERROR ? root: self.run() 2024-08-12 09:33:49,459 2466 ERROR ? root: 2024-08-12 09:33:49,459 2466 ERROR ? root: File "/home/pi/odoo/addons/hw_drivers/interface.py", line 31, in run 2024-08-12 09:33:49,460 2466 ERROR ? root: 2024-08-12 09:33:49,461 2466 ERROR ? root: 2024-08-12 09:33:49,465 2466 ERROR ? root: self.update_iot_devices(self.get_devices()) 2024-08-12 09:33:49,466 2466 ERROR ? root: 2024-08-12 09:33:49,467 2466 ERROR ? root: 2024-08-12 09:33:49,467 2466 ERROR ? root: 2024-08-12 09:33:49,467 2466 ERROR ? root: 2024-08-12 09:33:49,468 2466 ERROR ? root: 2024-08-12 09:33:49,468 2466 ERROR ? root: 2024-08-12 09:33:49,468 2466 ERROR ? root: 2024-08-12 09:33:49,468 2466 ERROR ? root: 2024-08-12 09:33:49,468 2466 ERROR ? root: 2024-08-12 09:33:49,469 2466 ERROR ? root: 2024-08-12 09:33:49,469 2466 ERROR ? root: 2024-08-12 09:33:49,470 2466 ERROR ? root: 2024-08-12 09:33:49,473 2466 ERROR ? root: 2024-08-12 09:33:49,474 2466 ERROR ? root: 2024-08-12 09:33:49,474 2466 ERROR ? root: 2024-08-12 09:33:49,474 2466 ERROR ? root: 2024-08-12 09:33:49,480 2466 ERROR ? root: 2024-08-12 09:33:49,482 2466 ERROR ? root: 2024-08-12 09:33:49,487 2466 ERROR ? root: 2024-08-12 09:33:49,488 2466 ERROR ? root: 2024-08-12 09:33:49,488 2466 ERROR ? root: 2024-08-12 09:33:49,488 2466 ERROR ? root: 2024-08-12 09:33:49,488 2466 ERROR ? root: 2024-08-12 09:33:49,488 2466 ERROR ? root: 2024-08-12 09:33:49,495 2466 ERROR ? root: 2024-08-12 09:33:49,495 2466 ERROR ? root: 2024-08-12 09:33:49,496 2466 ERROR ? root: 2024-08-12 09:33:49,496 2466 ERROR ? root: 2024-08-12 09:33:49,497 2466 ERROR ? root: 2024-08-12 09:33:49,497 2466 ERROR ? root: ^ 2024-08-12 09:33:49,498 2466 ERROR ? root: ^ 2024-08-12 09:33:49,499 2466 ERROR ? root: ^ 2024-08-12 09:33:49,502 2466 ERROR ? root: ^ 2024-08-12 09:33:49,502 2466 ERROR ? root: ^ 2024-08-12 09:33:49,503 2466 ERROR ? root: ^ 2024-08-12 09:33:49,503 2466 ERROR ? root: ^ 2024-08-12 09:33:49,503 2466 ERROR ? root: ^ 2024-08-12 09:33:49,503 2466 ERROR ? root: ^ 2024-08-12 09:33:49,504 2466 ERROR ? root: ^ 2024-08-12 09:33:49,504 2466 ERROR ? root: ^ 2024-08-12 09:33:49,504 2466 ERROR ? root: ^ 2024-08-12 09:33:49,504 2466 ERROR ? root: ^ 2024-08-12 09:33:49,504 2466 ERROR ? root: ^ 2024-08-12 09:33:49,504 2466 ERROR ? root: ^ 2024-08-12 09:33:49,505 2466 ERROR ? root: ^ 2024-08-12 09:33:49,505 2466 ERROR ? root: ^ 2024-08-12 09:33:49,505 2466 ERROR ? root: ^ 2024-08-12 09:33:49,505 2466 ERROR ? root: 2024-08-12 09:33:49,505 2466 ERROR ? root: File "/home/pi/odoo/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface_L.py", line 21, in get_devices 2024-08-12 09:33:49,506 2466 ERROR ? root: 2024-08-12 09:33:49,506 2466 ERROR ? root: 2024-08-12 09:33:49,507 2466 ERROR ? root: 0/0 2024-08-12 09:33:49,507 2466 ERROR ? root: 2024-08-12 09:33:49,507 2466 ERROR ? root: 2024-08-12 09:33:49,507 2466 ERROR ? root: 2024-08-12 09:33:49,508 2466 ERROR ? root: 2024-08-12 09:33:49,508 2466 ERROR ? root: 2024-08-12 09:33:49,508 2466 ERROR ? root: ~ 2024-08-12 09:33:49,508 2466 ERROR ? root: ^ 2024-08-12 09:33:49,508 2466 ERROR ? root: ~ 2024-08-12 09:33:49,508 2466 ERROR ? root: 2024-08-12 09:33:49,508 2466 ERROR ? root: ZeroDivisionError 2024-08-12 09:33:49,509 2466 ERROR ? root: : 2024-08-12 09:33:49,509 2466 ERROR ? root: division by zero ``` After this commit: New lines are logged only if necessary, like in a regular tb: ```py 2024-08-12 09:41:06,197 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: Exception in thread Thread-9: 2024-08-12 09:41:06,199 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: Traceback (most recent call last): 2024-08-12 09:41:06,201 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: File "/usr/lib/python3.11/threading.py", line 1038, in _bootstrap_inner 2024-08-12 09:41:06,222 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: self.run() 2024-08-12 09:41:06,223 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: File "/home/pi/odoo/addons/hw_drivers/interface.py", line 31, in run 2024-08-12 09:41:06,233 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: self.update_iot_devices(self.get_devices()) 2024-08-12 09:41:06,234 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: ^^^^^^^^^^^^^^^^^^ 2024-08-12 09:41:06,234 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: File "/home/pi/odoo/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface_L.py", line 21, in get_devices 2024-08-12 09:41:06,235 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: 0/0 2024-08-12 09:41:06,236 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: ~^~ 2024-08-12 09:41:06,237 3093 ERROR ? odoo.addons.hw_drivers.exception_logger: ZeroDivisionError: division by zero ``` opw-4110599 Forward-Port-Of: odoo/odoo#176462
Users with the right permissions can now edit a Discuss channel's name or description directly from the header. This fixes an inconsistency where the same edits were allowed on the configuration page but blocked in the main Discuss view.
Original PR description
Edit channel name (or description) might be prevented on the header in discuss, even though it's possible from the form view (config page). If the ACL permits, it should be possible to edit from header too. task-4100348 https://github.com/odoo/enterprise/pull/68140 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Invoice product and label cells now resize to fit only the content entered. This removes an unnecessary blank row, making invoice entry cleaner and preventing awkward cell resizing.
Original PR description
Description of the issue this commit addresses: On the invoice form view, whatever the data entered in the product/label cell, an additionnal empty row is visible and brekas the resizing of the cell. The cell should be the exact size required for the data to be shown at all time --- Steps to reproduce: 1. Install Invoicing 2. Go to a new invoice 3. Add a line with a product 4. An empty row is at the bottom of the product/label cell --- Desired behavior after this commit is merged: Whatever the data entered in the product/label cell, there are no more rows than required to display the whole content of the cell. --- no task-feedback --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Chat bubbles now handle conversations where the latest message came from an email address rather than a registered contact. This prevents crashes when users hover over folded chat windows, keeping messaging access smooth and reliable.
Original PR description
Before this commit, when last message of a conversation comes from email, last message preview in chat bubble (i.e. a chat window in folded state) was crashing. Steps to reproduce: - Set Mitchell Admin user notification to "Handle in Odoo" - On a chatter, add a follower with just an email address - On the chatter, send a message with `@mention` to Mitchell (so that Mitchell has a messaging notification) - Have follower with email address reply to chatter from mail client - Michell Admin opens chatter conversation from messaging menu, which opens chat window, then fold - On folded chat window / bubble, mouse hover on it => Crash with following error: ``` Cannot read property of undefined (reading 'name') ``` This happens because the chat bubble mouseover displays last message preview, and this assumes the author was a partner. An author can be just an email address, which was not taken into account. This commit fixes the issue.
This change adds a missing software dependency needed to import Excel .xlsx files on newer Ubuntu installations. It prevents import failures for businesses that rely on spreadsheet uploads in Odoo.
Original PR description
As xlrd 2.0 removed support for xlsx and since #169482 the openpyxl lib is needed on Noble installations to import xlsx files.
This fix prevents spreadsheet records with empty attachment data from causing an error during system computations. It helps upgrades and menu loading continue smoothly when a spreadsheet file has no readable content.
Original PR description
if their is nothing to read in attachment file related spreadsheet. So, it will bring empty byte…
if their is nothing to read in attachment file related spreadsheet. So, it will bring empty byte [``b''``](https://github.com/odoo/odoo/blob/9bba9f8246a0a046a631fb849846109131e74750/odoo/addons/base/models/ir_attachment.py#L234) that is here and when it go for [decode](https://github.com/odoo/enterprise/blob/c072e9e104a4ed24d345062f66a44d84aaeb074b/spreadsheet_edition/models/spreadsheet_mixin.py#L233) it will raise this traceback
```
Traceback (most recent call last):
File "/tmp/tmp3fwx3zdj/migrations/base/tests/test_mock_crawl.py", line 256, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmp3fwx3zdj/migrations/base/tests/test_mock_crawl.py", line 429, in mock_action
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmp3fwx3zdj/migrations/base/tests/test_mock_crawl.py", line 532, in mock_view_kanban
self.mock_web_search_read(model, view, [domain], fields_list)
File "/tmp/tmp3fwx3zdj/migrations/base/tests/test_mock_crawl.py", line 591, in mock_web_search_read
data = model.search_read(domain=domain, fields=fields_list, limit=80)
File "/home/odoo/src/odoo/saas-17.4/odoo/models.py", line 5847, in search_read
return records._read_format(fnames=fields, **read_kwargs)
File "/home/odoo/src/odoo/saas-17.4/odoo/models.py", line 3902, in _read_format
vals[name] = convert(record[name], record, use_display_name)
File "/home/odoo/src/odoo/saas-17.4/odoo/models.py", line 6727, in __getitem__
return self._fields[key].__get__(self)
File "/home/odoo/src/odoo/saas-17.4/odoo/fields.py", line 1263, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/saas-17.4/odoo/fields.py", line 1445, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/saas-17.4/addons/mail/models/mail_thread.py", line 428, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/saas-17.4/odoo/models.py", line 5037, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/src/odoo/saas-17.4/odoo/fields.py", line 101, in determine
return needle(*args)
File "/home/odoo/src/enterprise/saas-17.4/spreadsheet_edition/models/spreadsheet_mixin.py", line 44, in _compute_current_revision_uuid
snapshot = spreadsheet._get_spreadsheet_snapshot()
File "/home/odoo/src/enterprise/saas-17.4/spreadsheet_edition/models/spreadsheet_mixin.py", line 233, in _get_spreadsheet_snapshot
return json.loads(base64.decodebytes(snapshot))
File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
```
for preventing this added a condition to return false because their is no meaning at all decoding this data
This taceback is raising during upgrade why field data is empty byte ``b''`` due to that above tracbeack is raised
why as this field introduced in kanban [view](https://github.com/odoo/enterprise/commit/a055dfeb84abc34015b269422264534d97a83d8f) on computing it blocking the upgrade process during read callUsers who are allowed to edit a Discuss channel’s name or description can now do so directly from the header, not only from the configuration page. This removes an inconsistency and makes everyday channel updates easier for authorized users.
Original PR description
Edit channel name (or description) might be prevented on the header in discuss, even though it's possible from the form view (config page). If the ACL permits, it should be possible to edit from header too. task-4100348 https://github.com/odoo/odoo/pull/175886
Room booking now waits properly before subscribing to presence updates, preventing related test errors and unnecessary notifications. This helps ensure only relevant users receive room presence information and keeps scheduling features more stable.
Original PR description
In the community counterpart of this PR, a debounce is added to the addition of bus channels in order to batch them as much as possible. The room module uses the `waitForSubscribe` bus helper but never awaits it which trigger errors in other tests. This PR fixes this issue. community: https://github.com/odoo/odoo/pull/175972
Rentals that start on Thursday and end on Saturday or Sunday now remain available instead of triggering an error. This prevents failures in the website rental flow and improves reliability for customers choosing weekend return dates.
Original PR description
The Issue: Prior to this commit, starting a tour on Thursday and setting the end date to Saturday or Sunday would cause a traceback error. This occurred because renting was not allowed on weekends, leading to the tour's failure. The Fix: The fix involved enabling availability for renting on Saturdays and Sundays. runbot-72624
Oversight from task-3637983 (https://github.com/odoo/odoo/pull/161265) task-4104583 Forward-Port-Of: odoo/odoo#176517 Forward-Port-Of: odoo/odoo#176147
Original PR description
Oversight from task-3637983 (https://github.com/odoo/odoo/pull/161265) task-4104583 Forward-Port-Of: odoo/odoo#176517 Forward-Port-Of: odoo/odoo#176147
This commit is a backport of odoo/odoo#173905, but for the qunit suite. This should prevent the qunit suite from running out of memory, which sometimes happens because the Chrome process running the qunit suites doesn't have access to its available memory and cannot run the garbage collection efficiently. Runbot error 53410 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
Original PR description
This commit is a backport of odoo/odoo#173905, but for the qunit suite. This should prevent the qunit suite from running out of memory, which sometimes happens because the Chrome process running the qunit suites doesn't have access to its available memory and cannot run the garbage collection efficiently. Runbot error 53410 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#176506
In this commit (https://github.com/odoo/odoo/commit/464090d8da5e7bc59a3afe4764b9235022ee75cd), we made the container for product images and media elements responsive. However, multiple clients did not appreciate the changes and like the images being highlighted. Additionally it was not the main focus of the ticket. opw-4056701 Forward-Port-Of: odoo/odoo#176034
Original PR description
In this commit (https://github.com/odoo/odoo/commit/464090d8da5e7bc59a3afe4764b9235022ee75cd), we made the container for product images and media elements responsive. However, multiple clients did not appreciate the changes and like the images being highlighted. Additionally it was not the main focus of the ticket. opw-4056701 Forward-Port-Of: odoo/odoo#176034
- Go to Project App; - Add a task in any project; - Move the task to "Cancelled State"; - Click on the progress bar above the stage. Before this commit, the task will get hidden but load more button appears. This occurs because the group bar, and the progress bar are out of sync with the latest search read (executed when clicking on a progress bar). Now, when filtering the progress bar is updated, and when removing the filtering the group count is updated, this maintains a correct synch
Original PR description
- Go to Project App; - Add a task in any project; - Move the task to "Cancelled State"; - Click on the progress bar above the stage. Before this commit, the task will get hidden but load more button appears. This occurs because the group bar, and the progress bar are out of sync with the latest search read (executed when clicking on a progress bar). Now, when filtering the progress bar is updated, and when removing the filtering the group count is updated, this maintains a correct synchronization between the current showing records and the group count and the progress bar. Note that, this commit also prevents to shown negative values for the "Other" progress bar. opw-3935547 Forward-Port-Of: odoo/odoo#176511
When importing a sale in PoS and doing a downpayment there was only one downpayment line created. And because of this the taxes where not always correct. If you do a 100% downpayment you would end up with negative untaxed amount on the invoice. Steps to reproduce: ------------------- * Create 2 taxes, A and B with 5% and 10% * Create 2 products, A and B. Assign the 2 taxes to the products * Create a sale order with the 2 products * Open the sale order in PoS and make a downpayment for it
Original PR description
When importing a sale in PoS and doing a downpayment there was only one downpayment line created. And because of this the taxes where not always correct. If you do a 100% downpayment you would end up…
When importing a sale in PoS and doing a downpayment there was only one downpayment line created. And because of this the taxes where not always correct. If you do a 100% downpayment you would end up with negative untaxed amount on the invoice. Steps to reproduce: ------------------- * Create 2 taxes, A and B with 5% and 10% * Create 2 products, A and B. Assign the 2 taxes to the products * Create a sale order with the 2 products * Open the sale order in PoS and make a downpayment for it > Observation: There is only one downpayment line when it should have 2. Why the fix: ------------ If you do the same flow in the sales app, you get 2 downpayment lines. We do this to allign the behavior in sales and PoS. For each unique tax combination we compute what part of the total downpayment should be assigned to it. Then we make sure that the taxes are assigned to the line and that the line has the right value. opw-3999047 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175236 Forward-Port-Of: odoo/odoo#174076
Before this commit, pressing backspace in the cashier selection password number popup when it was empty would cause an error. opw-4089617 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175357
Original PR description
Before this commit, pressing backspace in the cashier selection password number popup when it was empty would cause an error. opw-4089617 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175357
Some didn't export correctly during the last mass export
Original PR description
Some didn't export correctly during the last mass export
### Steps to reproduce: - Install eCommerce module - Go to Website > Cart - Click on Edit > Customize > Extra Info - Go to Website settings and Check 'Extra Step During Checkout' ### Current behavior before PR: The 'Extra Step During checkout' setting is not synchronized when turning on and off from website editor or from website settings. This actually leads sometimes that you might turn it on from website settings and it won't be visible in the checkout process. This is happening b
Original PR description
### Steps to reproduce: - Install eCommerce module - Go to Website > Cart - Click on Edit > Customize > Extra Info - Go to Website settings and Check 'Extra Step During Checkout' ### Current behavior…
### Steps to reproduce: - Install eCommerce module - Go to Website > Cart - Click on Edit > Customize > Extra Info - Go to Website settings and Check 'Extra Step During Checkout' ### Current behavior before PR: The 'Extra Step During checkout' setting is not synchronized when turning on and off from website editor or from website settings. This actually leads sometimes that you might turn it on from website settings and it won't be visible in the checkout process. This is happening because in the 'res.config.settings' we are dealing with 'ir.ui.view' that is not linked to any website but in the website editor we are dealing with 'ir.ui.view' that is linked to the website you are editing. https://github.com/odoo/odoo/blob/17.0/addons/website_sale/models/res_config_settings.py#L68 https://github.com/odoo/odoo/blob/17.0/addons/website_sale/models/website.py#L588 ### Desired behavior after PR is merged: When turning on/off the setting from the website settings now we are dealing with the 'ir.ui.view' that is linked to a website. So the setting is now website dependant. opw-3992571 Forward-Port-Of: odoo/odoo#176392 Forward-Port-Of: odoo/odoo#170639
- RPI 5 displays detection: `vcgencmd` outdated -> now using `xrandr`, - Odoo now automatically restarts on crash: replaced `init.d/odoo` by `systemd/system/odoo.service`, - Now using Chromium instead of Firefox, - Improved server connection behaviour: - prevent from calling `rename_iot.sh` if new name is same as hostname, - Updated HDMI display UI to improve coherence with IoTBox browser homepage, - Updated DNS configuration (use 1.1.1.1), - Cached `socket.gethostname()` insid
Original PR description
- RPI 5 displays detection: `vcgencmd` outdated -> now using `xrandr`,
- Odoo now automatically restarts on crash: replaced `init.d/odoo` by `systemd/system/odoo.service`,
- Now using Chromium instead of Firefox,
- Improved server connection behaviour:
- prevent from calling `rename_iot.sh` if new name is same as hostname,
- Updated HDMI display UI to improve coherence with IoTBox browser homepage,
- Updated DNS configuration (use 1.1.1.1),
- Cached `socket.gethostname()` inside of an `helper` method,
- Added missing packages leading to warnings and errors in logs: `vobject`, `num2words`, ...,
- Added missing `__manifest__.py` in `point_of_sale/` leading to a warning for missing licence.
Task: 3947355
Forward-Port-Of: odoo/odoo#169633In order to be more accessible, commit [1] allowed the hoverable menus to have an outline when they are focused by using the Tab key. When hovering these menus with the mouse, the outline should not appear, unless it was already focused (with the Tab key). Also, when hovering, the focus should stay on the already focused element. This last part causes some issues: indeed, the focus is kept by calling the `focus` function and the issue with it is that it scrolls to the element on which it is c
Original PR description
In order to be more accessible, commit [1] allowed the hoverable menus to have an outline when they are focused by using the Tab key. When hovering these menus with the mouse, the outline should not…
In order to be more accessible, commit [1] allowed the hoverable menus to have an outline when they are focused by using the Tab key. When hovering these menus with the mouse, the outline should not appear, unless it was already focused (with the Tab key). Also, when hovering, the focus should stay on the already focused element. This last part causes some issues: indeed, the focus is kept by calling the `focus` function and the issue with it is that it scrolls to the element on which it is called. This made the screen scroll unexpectedly anytime we hovered a hoverable menu, to bring the focused element into view. This commit fixes this issue by specifying that the screen should not scroll when focusing the element. Steps to reproduce: - In the menu editor, add some submenus. - In edit mode, click on the header and set the "Sub Menus" option to "On Hover" and the "Scroll Effect" option to "Scroll". - Go to the "/shop" page. - In edit mode, add the cart button on the products and then save. - Scroll down the page and add a product to the cart. - Scroll up the page and hover the menu with a submenu. => The page scrolls down to the product we just added, since it was the focused element. [1]: https://github.com/odoo/odoo/commit/0f7cbf2969b3c4b6c496e5b54814c4a9b3081af4 opw-4069610 Forward-Port-Of: odoo/odoo#175710
Before this commit, when a reward eligible for multiple products was claimed, only one product was added to the order regardless of the reward's configuration. opw-4066760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175834 Forward-Port-Of: odoo/odoo#174176
Original PR description
Before this commit, when a reward eligible for multiple products was claimed, only one product was added to the order regardless of the reward's configuration. opw-4066760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175834 Forward-Port-Of: odoo/odoo#174176
Before this commit, performing a cash in/out operation in a session without any other cash transactions would result in the cash in/out not appearing in the report. It will become like this:  opw-4076188 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175364
Original PR description
Before this commit, performing a cash in/out operation in a session without any other cash transactions would result in the cash in/out not appearing in the report. It will become like this:  opw-4076188 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175364
### Steps to reproduce: 1. Create a storable product and set the quantity on hand to 100 units 2. Create a delivery of 20 units and mark as to-do 3. In the detailed operations, change the quantity to 10 units 4. Validate the transfer without backorder 5. Go to Inventory > Reporting > Locations 6. Click on Inventory at Date, and select a date one month in the past 7. The on hand quantity for the product is 10 ### Before this commit: When viewing a product's quantity in the past, the va
Original PR description
### Steps to reproduce: 1. Create a storable product and set the quantity on hand to 100 units 2. Create a delivery of 20 units and mark as to-do 3. In the detailed operations, change the quantity to 10 units 4. Validate the transfer without backorder 5. Go to Inventory > Reporting > Locations 6. Click on Inventory at Date, and select a date one month in the past 7. The on hand quantity for the product is 10 ### Before this commit: When viewing a product's quantity in the past, the value was based on the `product_qty` of the done stock moves. However, this is the demand, and it is not always equals to the quantity that moved. ### After this commit: Use the quantity of the done stock move lines, which reflect better what really moved in the past. opw-3946354 Forward-Port-Of: odoo/odoo#168456
Current behavior before PR: - Selecting the last text of a paragraph and applying hex color on it resulted in a traceback. - Selecting the initial text of a long paragraph and applying hex color resulted in unintended coloring of other unselected text. Desired behavior after PR is merged: - Applying a hex color on text will no longer lead to a traceback. - Only the selected text will be colored. task-3578454 Forward-Port-Of: odoo/odoo#174039 Forward-Port-Of: odoo/odoo#158006
Original PR description
Current behavior before PR: - Selecting the last text of a paragraph and applying hex color on it resulted in a traceback. - Selecting the initial text of a long paragraph and applying hex color resulted in unintended coloring of other unselected text. Desired behavior after PR is merged: - Applying a hex color on text will no longer lead to a traceback. - Only the selected text will be colored. task-3578454 Forward-Port-Of: odoo/odoo#174039 Forward-Port-Of: odoo/odoo#158006
Description of the issue/feature this PR addresses: - Commit [1] changed `getDeepestPosition` to let it change the selection to its next block. This commit partially reverts commit [1] and ensures that it only changes blocks when the node is invisible. - Commit [2] changed the behavior of Ctrl+A when the first child of an editor was contenteditable false element, causing it to not select the first element. This behavior is incorrect, as Ctrl+A should always select all contents. This co
Original PR description
Description of the issue/feature this PR addresses: - Commit [1] changed `getDeepestPosition` to let it change the selection to its next block. This commit partially reverts commit [1] and ensures…
Description of the issue/feature this PR addresses: - Commit [1] changed `getDeepestPosition` to let it change the selection to its next block. This commit partially reverts commit [1] and ensures that it only changes blocks when the node is invisible. - Commit [2] changed the behavior of Ctrl+A when the first child of an editor was contenteditable false element, causing it to not select the first element. This behavior is incorrect, as Ctrl+A should always select all contents. This commit partially reverts commit [2] and provides an alternative solution to the original issue. - Inserting a horizontal rule was only possible on paragraph related elements. This PR makes sure horizontal rule can be inserted directly to block elements such as div. task-3850023 [1]: https://github.com/odoo/odoo/commit/ddc8587f8a712fdddaa714bee2931cb149c03a38 [2]: https://github.com/odoo/odoo/commit/530f102720458e5e1c224bf38073cd763309bf0a --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#173849 Forward-Port-Of: odoo/odoo#164345
### Description of the issue/feature this PR addresses: In Odoo 15, only stock.group_stock_manager can use the Lock and Unlock button on stock.move ( https://github.com/odoo/odoo/blob/b361be31e446919ffc0ee14e99f8b88fae630ede/addons/stock/views/stock_picking_views.xml#L257 ) When moving the button to an ir.actions.server, the group_ids was not ported properly in #116799 . This commit fixes it and restore the group restriction ### Current behavior before PR: Users without the group `
Original PR description
### Description of the issue/feature this PR addresses: In Odoo 15, only stock.group_stock_manager can use the Lock and Unlock button on stock.move ( https://github.com/odoo/odoo/blob/b361be31e446919ffc0ee14e99f8b88fae630ede/addons/stock/views/stock_picking_views.xml#L257 ) When moving the button to an ir.actions.server, the group_ids was not ported properly in #116799 . This commit fixes it and restore the group restriction ### Current behavior before PR: Users without the group `stock.group_stock_manager` (Administrator) can lock/unlock stock.picking ### Desired behavior after PR is merged: Only users with that group can lock/unlock stock.picking opw-4075127 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176442
Problem: When the user duplicates a rental order from a list view in the rental app, the order lines of the rental order were not getting computed to True for field is_rental during compute_is_rental. The compute method was checking if the 'in_rental_app' was passed into the line's context, which is not the case during the duplication. Solution: If a line has rentable products and it is from a rental order, then the line should be considered is_rental, rather than basing it on the context of
Original PR description
Problem: When the user duplicates a rental order from a list view in the rental app, the order lines of the rental order were not getting computed to True for field is_rental during compute_is_rental. The compute method was checking if the 'in_rental_app' was passed into the line's context, which is not the case during the duplication. Solution: If a line has rentable products and it is from a rental order, then the line should be considered is_rental, rather than basing it on the context of the method being called from the Rental app. Steps to Reproduce on Runbot: 1. Install Rental app 2. View the rental orders in list view 3. Select a rental order with a status and duplicate 4. Observe that duped rental order has no rental_status when you confirm it opw-4055493 Forward-Port-Of: odoo/enterprise#67670
When the public users access the `/knowledge/home` route, the system will open the first accessible, visible and published article using a domain involving different search compute methods. In the `_search_is_article_visible` search method, the system will fetch the members associated to the current user. However, the public users do not have access to that model. As a result, the public user will get an access error and the server will display the 403 error page. Steps to reproduce the er
Original PR description
When the public users access the `/knowledge/home` route, the system will open the first accessible, visible and published article using a domain involving different search compute methods. In the…
When the public users access the `/knowledge/home` route, the system will open the first accessible, visible and published article using a domain involving different search compute methods. In the `_search_is_article_visible` search method, the system will fetch the members associated to the current user. However, the public users do not have access to that model. As a result, the public user will get an access error and the server will display the 403 error page. Steps to reproduce the error: 1. Install `website_helpdesk_knowledge` module. 2. On the Odoo homepage, click on the helpdesk icon. 3. On the helpdesk overview, click on the vertical dots of the "Customer Care" team card. 4. On the dropdown menu, click on the "Settings" option. 5. On the "Help Center" section, click on the "Knowledge" option. 6. On the "Visibility & Assignment" section, click on "Invited portal users and all internal users" option. 7. Save the changes. 8. Open a new browser in incognito and go on your website. 9. Click on the "Customer Care" navbar link of your website. 10. Click on the "Browse articles" button 11. You should get a 403 error page => TO BE: You shouldn't get a 403 error page. Since the public users cannot be added to the article members list, we will skip the members fetching for those users and return an empty domain. The condition will then be ignored and the search method will not raise any exception. task-3980714 Forward-Port-Of: odoo/enterprise#64377
Instead of using the `bg-white` class from boostrap, which is translated to black in dark-mode, make use of the color-scheme from odoo. This avoids having a mismatch between light and dark mode. Before (Dark / Light):  After (Dark / Light):  Forward-Port-Of: odoo/enterprise#68231
Original PR description
Instead of using the `bg-white` class from boostrap, which is translated to black in dark-mode, make use of the color-scheme from odoo. This avoids having a mismatch between light and dark mode. Before (Dark / Light):  After (Dark / Light):  Forward-Port-Of: odoo/enterprise#68231
Before this commit, when scaning a GS1 barcode containing a packaging for a tracked product and a lot, it doesn't work. This commit fixes two issues: 1. Get back packaging data (product and quantity) when a GS1 barcode is scanned; 2. Be able to find the lot/serial number when a GS1 barcode with no product but a packaging is scanned. Forward-Port-Of: odoo/enterprise#68218 Forward-Port-Of: odoo/enterprise#67727
Original PR description
Before this commit, when scaning a GS1 barcode containing a packaging for a tracked product and a lot, it doesn't work. This commit fixes two issues: 1. Get back packaging data (product and quantity) when a GS1 barcode is scanned; 2. Be able to find the lot/serial number when a GS1 barcode with no product but a packaging is scanned. Forward-Port-Of: odoo/enterprise#68218 Forward-Port-Of: odoo/enterprise#67727
Issue ----- [Approvals, Purchase, Stock] 1. In approvals, set the current user as the approver for the "Create RFQ's" approval type. 2. Approvals > New Request > Create RFQ's > Select a product with a vendor setup ("Acoustic bloc screen" for example) > Submit > Approve > Create RFQ > Click smart button to navigate to the PO > Confirm the PO (should work) 4. Repeat step 2, ValidationError when trying to confirm the PO. Note: the issue only arises in this specific flow, the PO can still b
Original PR description
Issue ----- [Approvals, Purchase, Stock] 1. In approvals, set the current user as the approver for the "Create RFQ's" approval type. 2. Approvals > New Request > Create RFQ's > Select a product with…
Issue
-----
[Approvals, Purchase, Stock]
1. In approvals, set the current user as the approver for the "Create RFQ's" approval type.
2. Approvals > New Request > Create RFQ's > Select a product with a vendor setup ("Acoustic bloc screen" for example) > Submit > Approve > Create RFQ >
Click smart button to navigate to the PO > Confirm the PO (should work)
4. Repeat step 2, ValidationError when trying to confirm the PO.
Note: the issue only arises in this specific flow, the PO can still be confirmed by for example just refreshing the page.
Issue
-----
A 'default_name' key is added to the context when creating a request for a category which uses sequential names (which is the case for RFQ's approvals). https://github.com/odoo/enterprise/blob/65a8e25f1ff2d0faf17ad73c1402615d320ffc48/approvals/models/approval_category.py#L154
As a result, it gets propagated all the way to the creation of the picking when the PO is confirmed.
https://github.com/odoo/odoo/blob/beb8c7d86ae6062dbad9fcb17bc3141d14a9fcdc/addons/stock/models/stock_picking.py#L721 As pickings require a unique (name, company_id), a first picking can be created with the name 'New', but later ones will fail.
Fix
-----
Avoid propagating the default_name key when opening the purchase orders so the picking created when confirming the order will have the correct name.
opw-3990816
Forward-Port-Of: odoo/enterprise#66504Also delete some obsolete .po files (from modules that had their .pot files removed, but not their .po files)
Original PR description
Also delete some obsolete .po files (from modules that had their .pot files removed, but not their .po files)
To reproduce the issue, on a fresh db with nothing else: 1) Create a new accounting report from srcatch, so that: - it has 2 columns - it has 1 line, with two expressions: - the expression going in column 1 is a domain, doing [('debit', '>', 0)] - the expression going in column 2 is also a domain, doing [('balance', '>', 0)] - it has analytics groupby enabled 2) Create a vendor bill, with only 1 line of 100€. Assign it an analytic distribution of 100% into
Original PR description
To reproduce the issue, on a fresh db with nothing else: 1) Create a new accounting report from srcatch, so that: - it has 2 columns - it has 1 line, with two expressions: - the expression going in…
To reproduce the issue, on a fresh db with nothing else:
1) Create a new accounting report from srcatch, so that:
- it has 2 columns
- it has 1 line, with two expressions:
- the expression going in column 1 is a domain, doing [('debit', '>', 0)]
- the expression going in column 2 is also a domain, doing [('balance', '>', 0)]
- it has analytics groupby enabled
2) Create a vendor bill, with only 1 line of 100€. Assign it an analytic distribution of 100% into some analytic account.
3) Open your report, activate the analytic groupby on the analytic account used in point 2).
====> The column considering the balance shows 100€, while the one considering the debit shows 0. This is wrong; both columns should show 100€.
This is due to the fact the sign of the debit is inverted in the SQL shadowing of the move lines made to handle analytics in the report engine. Instead of 100, it sees -100 here, which does not match the domain.
Forward-Port-Of: odoo/enterprise#67018before this commit, on opening general ledger report shows traceback for the user  introduced in this commit: https://github.com/odoo/enterprise/commit/402ed134269db6b82679c32d21eb1122bbda7cfe after this commit, the report will be opened without any issues Forward-Port-Of: odoo/enterprise#68287
Original PR description
before this commit, on opening general ledger report shows traceback for the user  introduced in this commit: https://github.com/odoo/enterprise/commit/402ed134269db6b82679c32d21eb1122bbda7cfe after this commit, the report will be opened without any issues Forward-Port-Of: odoo/enterprise#68287
Issue ----- Trial report assumes the `comparison` key exists when generating report options. However, that won't be the case if `filter_period_comparison` (Period Comparison option) is false. Steps ----- - Go to Accounting -> Configuration -> Accounting Reports. - Choose Trial Balance then go to Options and disable 'Period Comparison'. - Now generate a trial balance report by going to Reporting -> Audio Reports -> Trial Balance. - A `KeyError` is thrown. opw-3991886 Forward-Po
Original PR description
Issue ----- Trial report assumes the `comparison` key exists when generating report options. However, that won't be the case if `filter_period_comparison` (Period Comparison option) is false. Steps ----- - Go to Accounting -> Configuration -> Accounting Reports. - Choose Trial Balance then go to Options and disable 'Period Comparison'. - Now generate a trial balance report by going to Reporting -> Audio Reports -> Trial Balance. - A `KeyError` is thrown. opw-3991886 Forward-Port-Of: odoo/enterprise#68000 Forward-Port-Of: odoo/enterprise#66049