Tuesday, November 19, 2024
122 changes
Enhancements to existing features
Adds documentation guidance for the GSTIN status feature in the India localization settings. This helps users understand where to find official information and how the feature supports GST compliance workflows.
Original PR description
task-4143187 Related PR - https://github.com/odoo/documentation/pull/11324 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The editor’s insert option now uses the clearer name “Media” instead of “Image,” matching the media selection dialog and better reflecting that it can handle more than images. Users can still find it by searching for image or icon, while video insertion remains available through the media dialog where enabled.
Original PR description
This commit:
- renames the Image command to Media to better reflect its broader functionality and match the dialog's title ("Select a media").
- adds search keywords so that both "image" and "icon" are aliases to the Media command, improving discoverability.
- removed the Video command as it is currently not used in html_field (it is still available as a tab in the media dialog when the "disableVideo" option is set to false, effectively merging the Video command into the Media command).
task-4264248This update marks the mail mailbox route as read-only, helping the system handle mailbox-related requests more efficiently. It is a behind-the-scenes improvement that can reduce unnecessary database overhead without changing the user experience.
Resolved issues and error corrections
The test mock server now correctly supports property-related fields, helping automated tests better reflect real application behavior. This reduces the risk of unnoticed issues in features that rely on those fields, without changing the end-user experience.
Original PR description
This commit allows the mock server to properly handle 'property' and 'property_definition' fields in tests. Enterprise: https://github.com/odoo/enterprise/pull/73851 Task: [4058174](https://www.odoo.com/odoo/project.task/4058174) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Currently, if an order has a downpayment made from the POS, when we invoice it, the unit price of the downpayment becomes 0 on the sale order. The same flow using only sale will correctly show the downpayment price. Steps to reproduce: ------------------- * Create a quotation in the **Sale** app * In the **Point of Sale** app, open shop session * Create a downpayment for the order * Go back in the **Sale** app * Open sale order > Observation: The downpayment line has a price unit set
Original PR description
Currently, if an order has a downpayment made from the POS, when we invoice it, the unit price of the downpayment becomes 0 on the sale order. The same flow using only sale will correctly show the…
The attendance schedule now hides archived employees by default, keeping views focused on active staff. Users can still include archived employees by selecting them directly or searching for their name when needed.
Original PR description
With this task, by default archived employees will not be displayed. If the user want to see them, he can select archived employees or write their name in the searchbar. task-4208052 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 fixes several unstable automated test tours across point of sale, project, website, and eLearning areas. It helps prevent false test failures by making checks more reliable without changing user-facing features.
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
The Certifications search view no longer shows an option to filter for non-certifications, because that option could never return results in this area. This reduces confusion and makes the search experience clearer for users managing certifications.
Original PR description
Problem: Surveys can be filtered by whether or not they are also Certifications, based on the boolean field `certification` on the `survey.survey` record. There is a separate menu item to display Certifications only, which uses a Window Action domain filtering for this field being True. In the inherited search view for Certifications, we already hide the filter for Certifications (since they are). But we still display the filter for non-Certifications, which is pointless given the domain. Purpose: Hide the additional filter for `Is not a Certification` since it will never return results via the Certification views after the domain filters them out. opw-4167285
This fixes a point-of-sale issue where sessions could not be closed if some orders did not have an assigned employee. It helps businesses using kiosks or self-ordering avoid blocked session closures and end-of-day disruptions.
Original PR description
Before this commit, it was not possible to close the session if an order was missing the employee_id field. This situation can occur when an order comes from a kiosk or self-order. opw-4325334 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where activity searches based on status could use an outdated user timezone. Business users should see more accurate activity filtering, especially around due dates across time zones.
Original PR description
The user timezone is not flushed and used in the SQL to search by `activity_state` in the activity mixin. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The recruitment job position screen now displays today’s activities and overdue activities on separate lines. This makes the activity information easier to read and helps recruiters quickly distinguish urgent follow-ups.
Original PR description
With this commit, today activities and late activities are not on the same line. task-4270265 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
Currently, if an order has a downpayment made from the POS, when we invoice it, the unit price of the downpayment becomes 0 on the sale order. The same flow using only sale will correctly show the downpayment price. Steps to reproduce: ------------------- * Create a quotation in the **Sale** app * In the **Point of Sale** app, open shop session * Create a downpayment for the order * Go back in the **Sale** app * Open sale order > Observation: The downpayment line has a price unit set * If needed, deliver the items * Create an invoice (regular invoice) * Confirm the invoice * Go back to the sale order > Observation: The downpayment line has a price unit of 0.0 Why the fix: ------------ The difference between the two flows (pos/sale) mainly resides in those few lines: https://github.com/odoo/odoo/blob/b3b1fe6a78f9e5b6f1d993b5aa2fed11e33c793e/addons/sale/models/account_move.py#L75-L85 `dpl.invoice_lines` will include 2 items when using the sale flow whereas only one when making the downpayment in pos. Downpayments from pos are not automatically invoiced and even if they are, the model `pos.order.line` does not have the field `invoice_lines`. However each downpayment **sale order line** that comes from the POS is linked to its downpayment **pos order line** with the field `pos_order_line_ids`. The only element left in `dpl.invoice_lines` will not be counted as it is included in `real_invoice` (the current invoice). The idea of the fix is to include the price unit of the downpayment made in pos in this sum. opw-4160111 Forward-Port-Of: odoo/odoo#187198 Forward-Port-Of: odoo/odoo#185788
Some users are using custom domains in their loyalty programs. This include using fields that are not loaded in the PoS. This will fix the specific usecase of one client. But this could be improved and fields should be loaded dynamically based on the needed fields. opw-4262960 Forward-Port-Of: odoo/odoo#187230 Forward-Port-Of: odoo/odoo#186804
Original PR description
Some users are using custom domains in their loyalty programs. This include using fields that are not loaded in the PoS. This will fix the specific usecase of one client. But this could be improved and fields should be loaded dynamically based on the needed fields. opw-4262960 Forward-Port-Of: odoo/odoo#187230 Forward-Port-Of: odoo/odoo#186804
Current behaviour: --- On Knowledge, when multiple people are looking at the same page, if one of them deletes the end of a sentence, the others have a traceback. Steps to reproduce: --- 1. Install knowledge 2. On one browser tab, connect admin 3. On another, connect demo 4. With admin, go to knowledge 5. Create a page in workspace 6. In Share, change visibility to everyone 7. With demo, join the page 8. With admin, write a long word 9. Place both cursors at the end of the word
Original PR description
Current behaviour: --- On Knowledge, when multiple people are looking at the same page, if one of them deletes the end of a sentence, the others have a traceback. Steps to reproduce: --- 1. Install knowledge 2. On one browser tab, connect admin 3. On another, connect demo 4. With admin, go to knowledge 5. Create a page in workspace 6. In Share, change visibility to everyone 7. With demo, join the page 8. With admin, write a long word 9. Place both cursors at the end of the word 10. With admin, select a few letters at the end of the word 11. Delete those letters 12. Demo should have a traceback Cause of the issue: --- In `getDeepestPosition` > `closestBlock` > `findNode` `findNode` can return `null` opw-4072333 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#177964
Versions -------- - 16.0+ Steps (17.0+) ------------- 1. Create a Sale Order for a new contact without phone number; 2. disable online signature; 3. add a deliverable product to the SO; 4. hit "Send by Email"; 5. open the sent mail (e.g. via Mailhog); 6. copy the payment link; 7. open in Safari on iOS; 8. pay the sales order. Issue ----- > ``` >TypeError: Attempted to assign to readonly property. > extractFilteredSchemaValuesFromMicroData@https... > extractSchemaValuesF
Original PR description
Versions -------- - 16.0+ Steps (17.0+) ------------- 1. Create a Sale Order for a new contact without phone number; 2. disable online signature; 3. add a deliverable product to the SO; 4. hit "Send…
Versions -------- - 16.0+ Steps (17.0+) ------------- 1. Create a Sale Order for a new contact without phone number; 2. disable online signature; 3. add a deliverable product to the SO; 4. hit "Send by Email"; 5. open the sent mail (e.g. via Mailhog); 6. copy the payment link; 7. open in Safari on iOS; 8. pay the sales order. Issue ----- > ``` >TypeError: Attempted to assign to readonly property. > extractFilteredSchemaValuesFromMicroData@https... > extractSchemaValuesFromSchemaOrg@https... > global code@https... > ``` Cause ----- `extractFilteredSchemaValuesFromMicroData` is a function internal to iOS Safari. It is bugged in that it tries to reassign a `const` in some scenarios where no elements with `itemprop="telephone"` attributes are found. More details in this comment: https://github.com/odoo/odoo/pull/187143#issuecomment-2475934797 Solution -------- If the contact doesn't have a mobile or phone number, add an empty `div` with `itemprop="telephone"`. > [!note] > I've also reported the bug to Apple, but who knows when/if they'll fix it. Related issue: https://github.com/odoo/odoo/issues/162145 opw-4072838 Forward-Port-Of: odoo/odoo#187380 Forward-Port-Of: odoo/odoo#187143
Updated the regex of the youtube videos to accept some of the latest links as shorts and lives, following the same behavior as in web_editor. Specifically the links generated using the share button. Steps to reproduce: 1. Install eLearning and create a course. 2. Add a new content as video. 3. Take the Youtube livestream url from share > copy. 4. Use this link for the video slide in the course. opw-4278811 I confirm I have signed the CLA and read the PR guidelines at www.odoo.co
Original PR description
Updated the regex of the youtube videos to accept some of the latest links as shorts and lives, following the same behavior as in web_editor. Specifically the links generated using the share button. Steps to reproduce: 1. Install eLearning and create a course. 2. Add a new content as video. 3. Take the Youtube livestream url from share > copy. 4. Use this link for the video slide in the course. opw-4278811 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187139 Forward-Port-Of: odoo/odoo#185518
Issue: when we import a data only module with unknown dependencies we allow it to be installed, and in the process we add wrong data to the dependencies table. Example manifest: ``` {'data': ['foo.xml'], 'depends': ['base', 'bar', 'baz']} ``` Will end up with: ``` test_17=> select id,name,latest_version,state from ir_module_module where name in ('base','foo', 'bar', 'baz') +------+------+----------------+-----------+ | id | name | latest_version | state | |------+------+-----
Original PR description
Issue: when we import a data only module with unknown dependencies we allow it to be installed, and in the process we add wrong data to the dependencies table. Example manifest: ``` {'data':…
Issue: when we import a data only module with unknown dependencies we
allow it to be installed, and in the process we add wrong data to the
dependencies table.
Example manifest:
```
{'data': ['foo.xml'], 'depends': ['base', 'bar', 'baz']}
```
Will end up with:
```
test_17=> select id,name,latest_version,state from ir_module_module where name in ('base','foo', 'bar', 'baz')
+------+------+----------------+-----------+
| id | name | latest_version | state |
|------+------+----------------+-----------|
| 84 | base | 17.0.1.3 | installed |
| 1148 | foo | <null> | installed |
+------+------+----------------+-----------+
test_17=> select * from ir_module_module_dependency where module_id=1148
+------+------+-----------+-----------------------+
| id | name | module_id | auto_install_required |
|------+------+-----------+-----------------------|
| 2468 | bar | 1148 | False |
| 2469 | baz | 1148 | False |
| 2470 | base | 1148 | False |
+------+------+-----------+-----------------------+
```
This later causes issues during the upgrade of the DB.
In this patch we reinstate the check for missing dependencies taking
into account only those that cannot be installed --i.e those that are
truly unknown to the ORM. The installation of such data modules with
wrong dependencies will now be blocked with a UserError.
See: odoo/odoo@234590f3
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#187626
Forward-Port-Of: odoo/odoo#187531**Issue:** An employee can't modify a `Payment Method` (other than "Manual" on a new payment entry). **Expected:** An employee should be able to change the payment provider to register a customer payment. **Steps to reproduce:** - Activate Accounting app and go to Configuration > Online Payments > Payment Providers; - Install any of these providers, configure it, activate the test mode and publish it; - Go to Customers Payments > Payments; - Open or create a payement record; - Try t
Original PR description
**Issue:** An employee can't modify a `Payment Method` (other than "Manual" on a new payment entry). **Expected:** An employee should be able to change the payment provider to register a customer payment. **Steps to reproduce:** - Activate Accounting app and go to Configuration > Online Payments > Payment Providers; - Install any of these providers, configure it, activate the test mode and publish it; - Go to Customers Payments > Payments; - Open or create a payement record; - Try to change the Payment Method field for . **Cause:** No rights have been given to users on the payment provider data lookup. https://github.com/odoo/odoo/blob/18.0/addons/payment/security/ir.model.access.csv **Fix:** Give temporary rights on payment provider token lookup. opw-4270781 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186890
Steps to reproduce: 1. Go to website --> forum 2. Click on "New Post," add a title/description, and post the question. 3. A pop-up appears --> close the pop-up. 4. Enter edit mode, resulting in a traceback. Before this fix, the `publicWidget` responsible for attaching the modal in DOM was bound to the `body` element, which led to the removal of the `body` on `widget_stop_request` when trying to open the editor. This commit addresses the issue by creating a dummy element to bind the `Fo
Original PR description
Steps to reproduce: 1. Go to website --> forum 2. Click on "New Post," add a title/description, and post the question. 3. A pop-up appears --> close the pop-up. 4. Enter edit mode, resulting in a traceback. Before this fix, the `publicWidget` responsible for attaching the modal in DOM was bound to the `body` element, which led to the removal of the `body` on `widget_stop_request` when trying to open the editor. This commit addresses the issue by creating a dummy element to bind the `ForumShare` publicWidget instead of the `body`, preventing its removal. Additionally, an event listener has been added to remove the modal from the DOM after it's closed, ensuring no further issues during the editor opening process. task-3834378 Forward-Port-Of: odoo/odoo#187577 Forward-Port-Of: odoo/odoo#181643
The function _validate_accounting_entries is notorious for not using proper batching which results in a lot of SQL queries. Originally, it had to iterate individual svls and invoke functions in an unbatched way, even when all svls belonged to the same product. The changes here are to use as much batching as possible and enforcing the use of prefetch_ids to lower the total number of queries. Benchmarks: |no. queries before| no. queries after | total time before | total time after| |-----|-
Original PR description
The function _validate_accounting_entries is notorious for not using proper batching which results in a lot of SQL queries. Originally, it had to iterate individual svls and invoke functions in an unbatched way, even when all svls belonged to the same product. The changes here are to use as much batching as possible and enforcing the use of prefetch_ids to lower the total number of queries. Benchmarks: |no. queries before| no. queries after | total time before | total time after| |-----|-----|------|-----| |95991|83352|1.59 min|1.48 min| opw-4283347 opw-4096108 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186434
Versions -------- - 17.4+ Steps ----- 1. Create a discount code with a free shipping reward with a max amount; 3. Create one or more shipping methods with a price higher than the max amount previously set; 4. in eCommerce, add a product to the cart, and go to checkout; 5. apply coupon; 6. open the express checkout form using Stripe 7. switch between shipping methods. Issue ----- The free shipping discount is not considered in the Express Checkout form. Cause ----- Commit 8e
Original PR description
Versions -------- - 17.4+ Steps ----- 1. Create a discount code with a free shipping reward with a max amount; 3. Create one or more shipping methods with a price higher than the max amount previously set; 4. in eCommerce, add a product to the cart, and go to checkout; 5. apply coupon; 6. open the express checkout form using Stripe 7. switch between shipping methods. Issue ----- The free shipping discount is not considered in the Express Checkout form. Cause ----- Commit 8e2b6ce accidentally removed `delivery_discount_minor_amount` from `_order_summary_values` (previously called `_update_website_sale_delivery_return`) introduced by commit c047cc8, preventing the express checkout to get the up to date value. Solution -------- Add `delivery_discount_minor_amount` back to `_order_summary_values`. opw-4204901 Forward-Port-Of: odoo/odoo#187450
Steps to reproduce the bug: - Create a storable product P1 - Go to the delivery method - Select the Standard delivery - Add this tracking link: “https://iel.co.th/tracking/?trackingNo=<shipmenttrackingnumber>” - Create a delivery for one unit of P1 - Go to the additional information: - carrier: Standard delivery - Tracking Reference: 1234 - Mark as todo - Click on the racking smartbutton Problem: The link is lowercase, so its become not valid (some URLs are CASE-s
Original PR description
Steps to reproduce the bug:
- Create a storable product P1
- Go to the delivery method
- Select the Standard delivery
- Add this tracking link: “https://iel.co.th/tracking/?trackingNo=<shipmenttrackingnumber>”
- Create a delivery for one unit of P1
- Go to the additional information:
- carrier: Standard delivery
- Tracking Reference: 1234
- Mark as todo
- Click on the racking smartbutton
Problem:
The link is lowercase, so its become not valid (some URLs are CASE-sensitiv)


opw-4296872
Forward-Port-Of: odoo/odoo#186818Partner was not created during import because `bank_details` was an iterator instead of a list/collection. So once it was consummed for the search, nothing was created. Moreover, this function is called in the context of a file import which may have a default journal_id which is not the same as the journal of the partner. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187583 Forward-Port-Of: odoo/odoo#187415
Original PR description
Partner was not created during import because `bank_details` was an iterator instead of a list/collection. So once it was consummed for the search, nothing was created. Moreover, this function is called in the context of a file import which may have a default journal_id which is not the same as the journal of the partner. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187583 Forward-Port-Of: odoo/odoo#187415
**Current behavior before PR:** When a user leaves a group chat from the Discuss sidebar, an `AccessError` occurs because `thread.delete()` is not called, allowing `thread.markAsFetched()` to run even though the user is no longer a member. **Desired behavior after PR is merged:** This commit resolves the issue by ensuring that no access error occurs when a non-admin user leaves a group chat. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Fo
Original PR description
**Current behavior before PR:** When a user leaves a group chat from the Discuss sidebar, an `AccessError` occurs because `thread.delete()` is not called, allowing `thread.markAsFetched()` to run even though the user is no longer a member. **Desired behavior after PR is merged:** This commit resolves the issue by ensuring that no access error occurs when a non-admin user leaves a group chat. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187170
Before this commit, a rtcSession was required to display the connection state. Which meant that the receiving end of a peer-to-peer offer was not displaying the connection state until the offer was received, which was hiding early connection issues (pre-offer) like missing bus messages. Forward-Port-Of: odoo/odoo#186788
Original PR description
Before this commit, a rtcSession was required to display the connection state. Which meant that the receiving end of a peer-to-peer offer was not displaying the connection state until the offer was received, which was hiding early connection issues (pre-offer) like missing bus messages. Forward-Port-Of: odoo/odoo#186788
**Steps:** - Create a new pricelist - Apply pricelist rules - For eg: Apply it on Acoustic Bloc Screen, with a fixed price of 20. - When seen on the shop page or product page, it shows a strikethrough price along with the original price - Same happens when we use formula instead of fixed price. **Changes:** Changed some test cases because currently, the pricelist had fixed price which was causing the strikethrough to not appear. But due to the code change, it will now not appear, hen
Original PR description
**Steps:** - Create a new pricelist - Apply pricelist rules - For eg: Apply it on Acoustic Bloc Screen, with a fixed price of 20. - When seen on the shop page or product page, it shows a…
**Steps:** - Create a new pricelist - Apply pricelist rules - For eg: Apply it on Acoustic Bloc Screen, with a fixed price of 20. - When seen on the shop page or product page, it shows a strikethrough price along with the original price - Same happens when we use formula instead of fixed price. **Changes:** Changed some test cases because currently, the pricelist had fixed price which was causing the strikethrough to not appear. But due to the code change, it will now not appear, hence giving the percentage price to the tour to run it smoothly. **Before this commit:** The strikethrough prices on the shop page were shown for all the pricelist rules **After this commit:** The strikethrough prices are now shown everywhere only if the pricelist rule is a 'discount'. Formula based discount rules strikethrough prices are also displayed on the shop/configurator and product pages, but not on the cart and subsequent steps of the checkout to allow customer to apply discounts while still keeping 'beautiful' prices. **Affected version:** saas-17.4~master opw-4181825 Forward-Port-Of: odoo/odoo#181014 Enterprise PR: odoo/enterprise#73993