Thursday, January 30, 2025
47 changes · saas-18.1
Resolved issues and error corrections
The update adds several missing emoji shortcuts, making it easier for users to insert common emojis such as coffee while typing. Emoji suggestions are also displayed with cleaner spacing, improving readability and consistency in the message composer and emoji picker.
Original PR description
This commit adds a few shortcodes to emojis that felt missing such as `:coffee:`. Also use single space in the emoji suggestion when an emoji has more than 1 shortcode, for consistency with emoji picker search placeholder and also `,` is distracting: emoji shortcodes have no whitespace so whitespace is enough of a separator.
Users now get a larger editing area when updating longer messages, especially in chatter conversations. This reduces cramped editing and makes it easier to review and adjust message content before saving.
Original PR description
Edit of message was limited to 100px of height, which is too narrow especially when editing a message in chatter. This 100px made sense when chat windows were small, but now there's no point to restrict as much. This commit increases to up to 4 times the height, so 400px, giving much more room to edit long messages. Before <img width="2557" alt="Screenshot 2025-01-30 at 16 17 23" src="https://github.com/user-attachments/assets/eee3e2a9-e8db-4c3a-a7b0-02999d9f4c0b" /> After <img width="2558" alt="Screenshot 2025-01-30 at 16 17 00" src="https://github.com/user-attachments/assets/52a32b90-f8ce-4c51-9842-62a0d61307ef" />
The search bar now places the default grouping option before other filters. This helps prevent users from accidentally deleting the default grouping with backspace after a typo, keeping list views organized as intended.
Original PR description
This commit simply shifts the default_group_by facet's position to the front so that users won't accidentally remove it using backspace (after a typo for example). task-4523387
Deleting a live chat channel no longer triggers an unexpected error. This improves reliability for teams managing live chat channels and prevents disruption during routine cleanup.
Original PR description
Task-4504442
The call participant collapse control is now easier to click by making the full button respond instead of only the small icon. This improves usability during calls without changing the button's visual position.
Original PR description
The click was on the icon rather than button, and since icon is very small this is quite hard to click. This commit moves click handler to button, and also increase the click area of button without affecting it's position. <img width="292" alt="Screenshot 2025-01-30 at 11 57 29" src="https://github.com/user-attachments/assets/c8c5a8cd-f463-4440-a9ec-66b42a878aaa" /> Before / After (click area) <img width="293" alt="Screenshot 2025-01-30 at 11 58 12" src="https://github.com/user-attachments/assets/4e9acb87-e9f8-406d-aa57-48039daa5db7" /> <img width="290" alt="Screenshot 2025-01-30 at 11 58 57 (2)" src="https://github.com/user-attachments/assets/9b00e5f4-eb02-435b-93ca-b503412727ec" />
The Overdue Invoices button on a partner now shows only sales documents, preventing miscellaneous accounting entries from appearing in that view. This helps users focus on the relevant overdue customer invoices and reduces confusion during follow-up.
Original PR description
When opening the Invoice Overdue through the partner form: 1 - Create over due MISC entries (through deferred entries for example) 2 - Open a partner 3 - Go the the Accounting tab 4 - Click the Overdue Invoices button -> Some MISC entries show while we only want to view sale document. This commit fixes that by adding a filter on the domain to reduce the search scope to only sale documents. task-4523037
A test for the Planning Gantt view was updated to match a related platform change in how default grouping filters are ordered. This helps keep automated quality checks reliable and reduces the risk of regressions in planning schedule views.
Original PR description
This commit adapts a test to cope with changes made in https://github.com/odoo/odoo/pull/195630. task-4523387
Miscellaneous changes
The World Map view when you are on the "/partners" page doesn't zoom. This happens when any of the partners that are getting rendered doesn't have a location (longitude and latitude). Geocoder is then used to locate those addresses on the map. We use Promises, and when there is an error, we're not catching it where we are calling it from. The failed Geocode triggers the reject, which is not caught, and we're stuck in the await Promise. The zoom-in line never gets called. Steps to Rep
Original PR description
The World Map view when you are on the "/partners" page doesn't zoom. This happens when any of the partners that are getting rendered doesn't have a location (longitude and latitude). Geocoder is then used to locate those addresses on the map. We use Promises, and when there is an error, we're not catching it where we are calling it from. The failed Geocode triggers the reject, which is not caught, and we're stuck in the await Promise. The zoom-in line never gets called. Steps to Reproduce on Runbot: Integrate the Google Place Map key via Settings -> Geolocation -> Google Place Map. Go to "/partners." Toggle on the world map view for the page via the editor. Ensure one partner on the page lacks a location. Go to the "map" view, and the map will not zoom in. opw-4319619 Forward-Port-Of: odoo/odoo#189518
- open a record with an URL: `/{model}/{id}`; - delete or archive the record; Before this commit, an empty form view was displayed, with an incorrect URL: `/{model}/new`. This form view was inconsistent, and would throw an error in some applications (such as accounting). Even if no error was thrown, an error would be thrown if the user clicked on the 'back' button. This is not the correct behaviour, when deleting or archiving a record, the correct behaviour is : - if a pager exists, disp
Original PR description
- open a record with an URL: `/{model}/{id}`;
- delete or archive the record;
Before this commit, an empty form view was displayed, with an incorrect URL: `/{model}/new`. This form view was inconsistent, and would throw an error in some applications (such as accounting). Even if no error was thrown, an error would be thrown if the user clicked on the 'back' button.
This is not the correct behaviour, when deleting or archiving a record, the correct behaviour is :
- if a pager exists, display the next record;
- if not, return to the previous controller (the previous action, usually the multi-record view);
The issue here is that we don't have a previous action or a multi-record view.
Now, in this particular case, we will fallback to the default application.
opw-4354129
Forward-Port-Of: odoo/odoo#195670
Forward-Port-Of: odoo/odoo#195393This PR aims to fix an issue about the icon related to the hierarchy view not being rotated anymore. | 18.0 and above | This PR | |--------|--------| | <img width="529" alt="image" src="https://github.com/user-attachments/assets/11289aa4-948d-4725-b8d5-e91bf5d601fc" /> | <img width="531" alt="image" src="https://github.com/user-attachments/assets/bc74ef4e-6e74-47d1-ac06-6bde1d6ed933" /> | To render the icon of the hierarchy view, we use a little trick by rotating the `fa-share-alt` icon
Original PR description
This PR aims to fix an issue about the icon related to the hierarchy view not being rotated anymore. | 18.0 and above | This PR | |--------|--------| | <img width="529" alt="image"…
This PR aims to fix an issue about the icon related to the hierarchy view not being rotated anymore. | 18.0 and above | This PR | |--------|--------| | <img width="529" alt="image" src="https://github.com/user-attachments/assets/11289aa4-948d-4725-b8d5-e91bf5d601fc" /> | <img width="531" alt="image" src="https://github.com/user-attachments/assets/bc74ef4e-6e74-47d1-ac06-6bde1d6ed933" /> | To render the icon of the hierarchy view, we use a little trick by rotating the `fa-share-alt` icon so that it looks like a tree diagram one. Unfortunately, this does not work anymore in `18.0` and above. It seems the CSS won't be loaded until you entered the module, which leads to the icon being rendered to `fa-share-alt` by default and then rotated correctly once you click on it. To fix this issue, we actually make use of available utility classes `fa-rotate-90`to handle the icon rotation and `align-text-top` to handle the vertical alignment when the icon is rendered within a node. task-4501317 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194663
### Description of the issue/feature this PR addresses: Since this PR #162009, all uncommented invisible fields raise an error. This commit improves the error message from the method `test_uncommented_invisible_field` by showing which line of the view should be removed/commented. The error message before this commit : ``` Addons: 'module_name' Views: ['view_name1', 'view_name2'] ``` After: ``` Addon: 'module_name' View: view_name1 Fields: <field name="field1"
Original PR description
### Description of the issue/feature this PR addresses:
Since this PR #162009, all uncommented invisible fields raise an error.
This commit improves the error message from the method `test_uncommented_invisible_field` by showing which line of the view should be removed/commented.
The error message before this commit :
```
Addons: 'module_name' Views: ['view_name1', 'view_name2']
```
After:
```
Addon: 'module_name'
View: view_name1
Fields:
<field name="field1" invisible="1">
<field name="field2" invisible="1">
View: view_name2
Fields:
<field name="field1" invisible="1">
```
The main benefit of this change is to display in a single test all uncommented fields that need to be fixed.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#195605
Forward-Port-Of: odoo/odoo#195166In [1], we commented out the tour_automatic unit test file in the manifest to merge this PR as soon as possible. In this commit, we uncomment this file. The solution is to not patch browser.console because it can cause big problems in the Hoot unit test engine. Forward-Port-Of: odoo/odoo#194359
Original PR description
In [1], we commented out the tour_automatic unit test file in the manifest to merge this PR as soon as possible. In this commit, we uncomment this file. The solution is to not patch browser.console because it can cause big problems in the Hoot unit test engine. Forward-Port-Of: odoo/odoo#194359
The reCAPTCHA feature is currently controlled by the "Module Installation" setting: `module_google_recaptcha`, which, due to dependencies, caused the removal of many other modules when disabled. The goal of this commit is to simply hide this option in stable to prevent this misleading behaviour. A user can still disable the reCAPTCHA checks by removing API keys (Which was already mentioned on the setting block) The feature behaviour will be updated in master to allow disabling reCA
Original PR description
The reCAPTCHA feature is currently controlled by the "Module Installation" setting: `module_google_recaptcha`, which, due to dependencies, caused the removal of many other modules when disabled. The goal of this commit is to simply hide this option in stable to prevent this misleading behaviour. A user can still disable the reCAPTCHA checks by removing API keys (Which was already mentioned on the setting block) The feature behaviour will be updated in master to allow disabling reCAPTCHA without uninstalling the modules. task-3380702 Forward-Port-Of: odoo/odoo#194907
**Problem**: The cropper buttons are positioned at the end of the page instead of directly under the image being cropped. **Solution**: Remove `position: fixed` from the buttons container, allowing it to be positioned just below the image being cropped/edited. **Steps to Reproduce**: 1. Navigate to Email Marketing > Start from scratch. 2. Add "Blocks" > "Body" > "Columns". 3. Open the cropping tool on the first image. 4. Observe that the cropping buttons appear at the end of the page
Original PR description
**Problem**: The cropper buttons are positioned at the end of the page instead of directly under the image being cropped. **Solution**: Remove `position: fixed` from the buttons container, allowing it to be positioned just below the image being cropped/edited. **Steps to Reproduce**: 1. Navigate to Email Marketing > Start from scratch. 2. Add "Blocks" > "Body" > "Columns". 3. Open the cropping tool on the first image. 4. Observe that the cropping buttons appear at the end of the page, requiring scrolling to access them. opw-4461565 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194730 Forward-Port-Of: odoo/odoo#193016
### Steps to reproduce: - Go to Accounting > Reports > Aged Receivable - Unfold any customer shown, click on the three dots next to an invoice, and select "View Journal Entry" - On the Journal Entry, add the invoice sequence to Customer Reference and Payment Reference - Go back to the report, you should see the invoice name is now shown 4 times ### Cause: The bug appeared in this commit (https://github.com/odoo/odoo/commit/eb872c09897eb9edd5b6e5b9e8171fa6764be3dc). When computing the lin
Original PR description
### Steps to reproduce: - Go to Accounting > Reports > Aged Receivable - Unfold any customer shown, click on the three dots next to an invoice, and select "View Journal Entry" - On the Journal Entry,…
### Steps to reproduce:
- Go to Accounting > Reports > Aged Receivable
- Unfold any customer shown, click on the three dots next to an invoice, and select "View Journal Entry"
- On the Journal Entry, add the invoice sequence to Customer Reference and Payment Reference
- Go back to the report, you should see the invoice name is now shown 4 times
### Cause:
The bug appeared in this commit (https://github.com/odoo/odoo/commit/eb872c09897eb9edd5b6e5b9e8171fa6764be3dc). When computing the line `display_name`, if there is a name, a reference and `line_name`. The variable line_name already include the reference:
`name = f'{line.move_id.ref} - {line.move_id.payment_reference}'` (https://github.com/odoo/odoo/commit/a6cbb7c2d3538d57dc8498f0dacf4566ea1492e7)
So `line_name` is different from `move_name` and the result is:
`line.move_id.name (line.move_id.ref) line.move_id.ref - line.move_id.payment_reference`
### Solution:
Check if the move_ref and the payment ref are the same, in that case only put one of the two as line_name. Then when computing the display_name, line_name will equal to move_name so line_name will not be included.
opw-4492298
Forward-Port-Of: odoo/odoo#195449This PR addresses the layout issue in the sidebar of the portal, where a preview of the customer's invoice is displayed. Before this PR, users encountered a broken layout for large invoice amounts, making it difficult to read the total. This issue is resolved in this PR by adding a rules for the `h2` and `span` fields ensuring proper wrapping for better readability. Steps to reproduce: - Login as admin. - Go to Website app. - Navigate to "My account" at my/home url. - Click on "
Original PR description
This PR addresses the layout issue in the sidebar of the portal, where a preview of the customer's invoice is displayed. Before this PR, users encountered a broken layout for large invoice amounts, making it difficult to read the total. This issue is resolved in this PR by adding a rules for the `h2` and `span` fields ensuring proper wrapping for better readability. Steps to reproduce: - Login as admin. - Go to Website app. - Navigate to "My account" at my/home url. - Click on "My invoices" or navigate to my/invoices url. - Click on one invoice in order to see its preview. - Via the browser tools, edit the amount of on the left sidebar and insert a very big number. task-4435472 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194277 Forward-Port-Of: odoo/odoo#192769
Currently, when searching the through the customers loaded in pos you can search using the zip code but if the customer is not loaded you cannot search those in db using the zip code. Steps to reproduce: ------------------- * Create a customer and set his zip code. * Open pos shop * Search for customers * Enter the zip code, normally you shouldn't see the customer * Select "Search more" > Observation: No customer found Note: If you search with the customer name it will find it. W
Original PR description
Currently, when searching the through the customers loaded in pos you can search using the zip code but if the customer is not loaded you cannot search those in db using the zip code. Steps to reproduce: ------------------- * Create a customer and set his zip code. * Open pos shop * Search for customers * Enter the zip code, normally you shouldn't see the customer * Select "Search more" > Observation: No customer found Note: If you search with the customer name it will find it. Why the fix: ------------ Adding a few search values when loeading customers in the session. opw-4334412 Forward-Port-Of: odoo/odoo#191286 Forward-Port-Of: odoo/odoo#189164
This commit add support for comprenhension expression on assign node Forward-Port-Of: odoo/odoo#195486 Forward-Port-Of: odoo/odoo#194878
Original PR description
This commit add support for comprenhension expression on assign node Forward-Port-Of: odoo/odoo#195486 Forward-Port-Of: odoo/odoo#194878
Forward-Port-Of: odoo/odoo#195005 Forward-Port-Of: odoo/odoo#193276
Original PR description
Forward-Port-Of: odoo/odoo#195005 Forward-Port-Of: odoo/odoo#193276
Currently foot pedals often don't send their input to Odoo This is due to the fact that the foot pedals are detected as 1 usb device which is associated with 3 separate event files for its 3 different fonctionalities (a foot switch can work as a keyboard, a mouse and a joystick) Our current code only detects input from one of these 3 event files (the last one in the list) while the input is actually only sent to the keyboard event file. Since "evdev" and "usb core" libraries don't allow us t
Original PR description
Currently foot pedals often don't send their input to Odoo This is due to the fact that the foot pedals are detected as 1 usb device which is associated with 3 separate event files for its 3…
Currently foot pedals often don't send their input to Odoo This is due to the fact that the foot pedals are detected as 1 usb device which is associated with 3 separate event files for its 3 different fonctionalities (a foot switch can work as a keyboard, a mouse and a joystick) Our current code only detects input from one of these 3 event files (the last one in the list) while the input is actually only sent to the keyboard event file. Since "evdev" and "usb core" libraries don't allow us to determine which evdev device is the right one this PR allows listening to all of the event files associated to a usb device to read input from all of them. This PR also adds some comment to simplify the understanding of the input detection and event files structure on Linux. Note: on IoT Box images > 25.01 the user "odoo" which runs Odoo service needs to be in the group "input" to be able to correctly detect evdev devices and have access to their event files. task-4432802 Related PR: #195307 Forward-Port-Of: odoo/odoo#195306
### Steps to reproduce: - Install **pos_loyalty** module - Go to **Point of Sale** app > **Products** > **Discount & Loyalty** - Create a **New** program with: - **Program Type**: Next Order Coupons - **Validity**: Today's date for example - Conditional rule with a **Minimum Purchase** of 0.00 - Start a new POS session. Add a product and click **Payment**. - **Validate** the order. - In the receipt shown, notice how the text show **_'Valid until: no expiration'_** althoug
Original PR description
### Steps to reproduce: - Install **pos_loyalty** module - Go to **Point of Sale** app > **Products** > **Discount & Loyalty** - Create a **New** program with: - **Program Type**: Next Order Coupons…
### Steps to reproduce:
- Install **pos_loyalty** module
- Go to **Point of Sale** app > **Products** > **Discount & Loyalty**
- Create a **New** program with:
- **Program Type**: Next Order Coupons
- **Validity**: Today's date for example
- Conditional rule with a **Minimum Purchase** of 0.00
- Start a new POS session. Add a product and click **Payment**.
- **Validate** the order.
- In the receipt shown, notice how the text show **_'Valid until: no expiration'_** although a Validity date is defined!
### Investigation:
- In `confirm_coupon_programs`, `coupon_create_vals` lacks `expiration_date` https://github.com/odoo/odoo/blob/03856863a644fbc588edb6e63168a6c4e15d5d92/addons/pos_loyalty/models/pos_order.py#L72-L78
- To add the `expiration_date`, `date_to` has to be in `coupon_data` but it's not included.
- `coupon_data` comes from https://github.com/odoo/odoo/blob/03856863a644fbc588edb6e63168a6c4e15d5d92/addons/pos_loyalty/static/src/js/PaymentScreen.js#L78
opw-3838427
Forward-Port-Of: odoo/odoo#183044
Forward-Port-Of: odoo/odoo#160633### Description of the issue/feature this PR addresses: - Similar error: https://github.com/odoo/odoo/pull/194338 - In `_compute_plan_available_ids()` with `self` there can be multiple records but still use `self.department_id` in `for scheduler in todo`. ### Current behavior before PR: - The error ValueError: Expected singleton: mail.activity.schedule(1, 2) occurred Desired behavior after PR is merged: - The problem has been fixed. --- I confirm I have signed the CLA and read
Original PR description
### Description of the issue/feature this PR addresses: - Similar error: https://github.com/odoo/odoo/pull/194338 - In `_compute_plan_available_ids()` with `self` there can be multiple records but still use `self.department_id` in `for scheduler in todo`. ### Current behavior before PR: - The error ValueError: Expected singleton: mail.activity.schedule(1, 2) occurred Desired behavior after PR is merged: - The problem has been fixed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194650
### Steps to reproduce: - Create a product tracked by LOT (not SN) - Create a BOM for that product and a BOM line with a tracked product - Put a an SN for your component in STOCK. - Create an MO for 1 unit of your product and confirm. > The SN should be set on your component line. - Set an LOT on the finished product with the create option but without clicking on the [+] #### > The quantity of the component line was updated to 0 and the SN of the comp was removed. ### Cause of the is
Original PR description
### Steps to reproduce: - Create a product tracked by LOT (not SN) - Create a BOM for that product and a BOM line with a tracked product - Put a an SN for your component in STOCK. - Create an MO for…
### Steps to reproduce: - Create a product tracked by LOT (not SN) - Create a BOM for that product and a BOM line with a tracked product - Put a an SN for your component in STOCK. - Create an MO for 1 unit of your product and confirm. > The SN should be set on your component line. - Set an LOT on the finished product with the create option but without clicking on the [+] #### > The quantity of the component line was updated to 0 and the SN of the comp was removed. ### Cause of the issue: Changing the lot on the MO form will trigger the `_onchange_producing` which will in turn `_set_qty_producing`: https://github.com/odoo/odoo/blob/83445d91a588958417fef8a04d1187974d4b3d9a/addons/mrp/models/mrp_production.py#L797-L799 In case the product is tracked by SN this `_set_qty_producing` will set a qty_producing of 1 and the move raws will reserve a quantity accordingly but if the product is tracked by lot or not tracked at all the quantities of the move raw will just be adapted to match the `qty_producing` (that was at 0 from the start): https://github.com/odoo/odoo/blob/83445d91a588958417fef8a04d1187974d4b3d9a/addons/mrp/models/mrp_production.py#L1217-L1227 opw-4418809 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194956 Forward-Port-Of: odoo/odoo#192932
**Problem**: When an image inside a `<p>` tag (e.g., `<p><img></p>`) is deleted using the toolbar delete button, the selection is not properly restored, leaving an empty `<p>` in the DOM and the selection in the editor root. **Solution**: Restore the selection to the correct position after deleting the image to avoid leaving an empty `<p>`. **Steps to Reproduce**: 1. Open an empty editor and add an image. 2. Delete the image using the toolbar delete button. 3. Inspect the DOM: - A
Original PR description
**Problem**: When an image inside a `<p>` tag (e.g., `<p><img></p>`) is deleted using the toolbar delete button, the selection is not properly restored, leaving an empty `<p>` in the DOM and the selection in the editor root. **Solution**: Restore the selection to the correct position after deleting the image to avoid leaving an empty `<p>`. **Steps to Reproduce**: 1. Open an empty editor and add an image. 2. Delete the image using the toolbar delete button. 3. Inspect the DOM: - An empty `<p>` remains, and the selection is in the editor root. opw-4472173 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194996 Forward-Port-Of: odoo/odoo#193396
**Description of the issue/feature this PR addresses:** The user switch component fails in debug mode with the following error in the console log > Error message: > OwlError: Got duplicate key in t-foreach: [object Object] > at UserSwitch.template This error happens because we are using the user object as a key ([object Object]), instead we should use the user_index **Current behavior before PR:** 1. Open a runbot 2. Log in and log out with admin account 3. Log in and log out
Original PR description
**Description of the issue/feature this PR addresses:** The user switch component fails in debug mode with the following error in the console log > Error message: > OwlError: Got duplicate key in t-foreach: [object Object] > at UserSwitch.template This error happens because we are using the user object as a key ([object Object]), instead we should use the user_index **Current behavior before PR:** 1. Open a runbot 2. Log in and log out with admin account 3. Log in and log out with demo account 4. The user switch component appears on the login page 5. Adding ?debug=1 to the URL causes: - User switch component disappears - Console shows duplicate key error **Desired behavior after PR is merged:** - Having possibility to use switch user component in debug mode --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194149
Description of the issue/feature this PR addresses: In the company check warning message, self.model_name was used instead of self._name. Current behavior before PR: model_name is not an attribute of the class BaseModel, which causes an AttributeError when the warning message is triggered. Desired behavior after PR is merged: Warning message correctly logged without having an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-
Original PR description
Description of the issue/feature this PR addresses: In the company check warning message, self.model_name was used instead of self._name. Current behavior before PR: model_name is not an attribute of the class BaseModel, which causes an AttributeError when the warning message is triggered. Desired behavior after PR is merged: Warning message correctly logged without having an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193918
Steps to Reproduce: ========= - Install the modules: pos_razorpay, l10n_in, and pos_restaurant. - Create a payment method for the Razorpay terminal. - Open a restaurant register linked to an Indian company with the added Razorpay terminal payment method. - Create an order, add a Razorpay payment line, and navigate to the floor screen. Issue: ========== - A traceback occurs when completing a payment. Cause: ========= - Polling for the Razorpay terminal continues even after leaving
Original PR description
Steps to Reproduce: ========= - Install the modules: pos_razorpay, l10n_in, and pos_restaurant. - Create a payment method for the Razorpay terminal. - Open a restaurant register linked to an Indian company with the added Razorpay terminal payment method. - Create an order, add a Razorpay payment line, and navigate to the floor screen. Issue: ========== - A traceback occurs when completing a payment. Cause: ========= - Polling for the Razorpay terminal continues even after leaving the payment screen and navigating to the floor screen. Fix: ========= - Stop the polling process when the user leaves the payment screen. - Resume polling only when the user returns to the payment screen. task-4414016 Forward-Port-Of: odoo/odoo#192072
Steps to reproduce the bug: - Create a workcenter: Problem: All the resource calendar from all the companies are displayed. opw-4478393 Forward-Port-Of: odoo/odoo#193930 Forward-Port-Of: odoo/odoo#193634
Original PR description
Steps to reproduce the bug: - Create a workcenter: Problem: All the resource calendar from all the companies are displayed. opw-4478393 Forward-Port-Of: odoo/odoo#193930 Forward-Port-Of: odoo/odoo#193634
version: 18.0 Issue : When the "Select Quantity" button is hidden on the product page via the editor, it remains visible on the product configuration page. Fix: Added a condition for showQuantity to ensure the visibility of the "Select Quantity" button is consistently managed on both the product page and the product configuration page. With this fix, the visibility of the "Select Quantity" button can now be properly controlled for the product configuration page as well, aligning wi
Original PR description
version: 18.0 Issue : When the "Select Quantity" button is hidden on the product page via the editor, it remains visible on the product configuration page. Fix: Added a condition for showQuantity to ensure the visibility of the "Select Quantity" button is consistently managed on both the product page and the product configuration page. With this fix, the visibility of the "Select Quantity" button can now be properly controlled for the product configuration page as well, aligning with the editor's settings. opw-4316784 Forward-Port-Of: odoo/odoo#187556
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#195238
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#195238
Users currently cannot retrieve original bills attached to newly created draft moves, because an error is blocking the action Steps to reproduce: - Go to Accounting > Vendor > Bills - Upload a pdf - Back in list view, select the created bill, Download > Original Bills Issue: Traceback will raise `AttributeError: 'bool' object has no attribute 'decode'` This occurs because, after https://github.com/odoo/odoo/commit/ce73ed61bcf293953bc0c821ceaef3ddb9a47e3c, draft moves are not named
Original PR description
Users currently cannot retrieve original bills attached to newly created draft moves, because an error is blocking the action Steps to reproduce: - Go to Accounting > Vendor > Bills - Upload a pdf - Back in list view, select the created bill, Download > Original Bills Issue: Traceback will raise `AttributeError: 'bool' object has no attribute 'decode'` This occurs because, after https://github.com/odoo/odoo/commit/ce73ed61bcf293953bc0c821ceaef3ddb9a47e3c, draft moves are not named '/' anymore, the name field will be just `False`. However reportlab expects a string and it crashes opw-4502791 Forward-Port-Of: odoo/odoo#195483
When a note was logged or a message was posted on any move, the email recipients of that message would get an email with both the move name and the total move amount (without any context) in the header. For invoices and vendor bills, this makes sense. As these are typically amounts that can be paid or received. However, for miscellaneous moves this was confusing users. Often it means nothing, and users wonder if they have to pay something. We remove the amount from messages sent on miscell
Original PR description
When a note was logged or a message was posted on any move, the email recipients of that message would get an email with both the move name and the total move amount (without any context) in the header. For invoices and vendor bills, this makes sense. As these are typically amounts that can be paid or received. However, for miscellaneous moves this was confusing users. Often it means nothing, and users wonder if they have to pay something. We remove the amount from messages sent on miscellaneous moves here. [opw-4042715](https://www.odoo.com/odoo/project.task/4042715) Forward-Port-Of: odoo/odoo#195647 Forward-Port-Of: odoo/odoo#195541
This commit allows the user to put multiple accounts prefix on a single analytic plan line. So, if the user want to add the accounts 51000, 61000 and 71000, he can now add this: 51, 61, 71 in the same line. task-4294662 Forward-Port-Of: odoo/odoo#194355
Original PR description
This commit allows the user to put multiple accounts prefix on a single analytic plan line. So, if the user want to add the accounts 51000, 61000 and 71000, he can now add this: 51, 61, 71 in the same line. task-4294662 Forward-Port-Of: odoo/odoo#194355
`partner_gid` was missing from `res_company_form_view_onboarding` view which was creating a bug when applying the partner autocomplete. opw-4489441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195000
Original PR description
`partner_gid` was missing from `res_company_form_view_onboarding` view which was creating a bug when applying the partner autocomplete. opw-4489441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195000
Description of the issue/feature this PR addresses: Task ID: 4342267 Current behavior before PR: -Error When printing draft invoice due to unset invoice_date. -Report spacing between header & body in second page overlaps due to paperformat spacing. Due to the long address format of saudi arabia, the default paperformat header spacing and margin top are not enough to show the full address without overlapping the second and onward pages. -English labels on the exchange rate table in l1
Original PR description
Description of the issue/feature this PR addresses: Task ID: 4342267 Current behavior before PR: -Error When printing draft invoice due to unset invoice_date. -Report spacing between header & body in…
Description of the issue/feature this PR addresses: Task ID: 4342267 Current behavior before PR: -Error When printing draft invoice due to unset invoice_date. -Report spacing between header & body in second page overlaps due to paperformat spacing. Due to the long address format of saudi arabia, the default paperformat header spacing and margin top are not enough to show the full address without overlapping the second and onward pages. -English labels on the exchange rate table in l10n_sa_edi are translated and not shown together with the arabic labels. -Remove unnecessary spans in xpaths Desired behavior after PR is merged: -Fix printing draft invoice with invoice_date as today's date -Fix report spacing header by adding a new A4 paperformat for l10n_sa which is set as the saudi arabia companies default paper format. -Fix exchange rate table to show both arabic and english labels and remove unnecessary translations (no longer used) -Remove unnecessary spans in xpath. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195226 Forward-Port-Of: odoo/odoo#190172
Description of the issue this PR addresses: Pressing enter in the `s_popup` snippet after making it visible via the right panel would hide the popup. This occurred because the mutation observer detected changes which shows the modal and rolled them back during the `insertLineBreak` operation. This commit ensures that those mutations are not observed. task-4255083 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195016
Original PR description
Description of the issue this PR addresses: Pressing enter in the `s_popup` snippet after making it visible via the right panel would hide the popup. This occurred because the mutation observer detected changes which shows the modal and rolled them back during the `insertLineBreak` operation. This commit ensures that those mutations are not observed. task-4255083 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195016 Forward-Port-Of: odoo/odoo#191810
Due to an oversight when migrating documents share to documents in Sharepocalypse, documents were being deleted when their related website was deleted. This is not a desired behavior. Even though setting the "correct" website is possible (and desired) when there is a `company_id`, there is no problem with having empty `website_id` in the other case. opw-4494091 Forward-Port-Of: odoo/enterprise#78163
Original PR description
Due to an oversight when migrating documents share to documents in Sharepocalypse, documents were being deleted when their related website was deleted. This is not a desired behavior. Even though setting the "correct" website is possible (and desired) when there is a `company_id`, there is no problem with having empty `website_id` in the other case. opw-4494091 Forward-Port-Of: odoo/enterprise#78163
During this refactoring https://github.com/odoo/enterprise/commit/d023d914dce1b23bf321252fb844c780e831f003 it seems the impacted tax grid were broken. opw-4418348 Forward-Port-Of: odoo/enterprise#76513
Original PR description
During this refactoring https://github.com/odoo/enterprise/commit/d023d914dce1b23bf321252fb844c780e831f003 it seems the impacted tax grid were broken. opw-4418348 Forward-Port-Of: odoo/enterprise#76513
- make kiosk mode open in the same page and logout the user to avoid unwanted rights Task: 4509632 Forward-Port-Of: odoo/enterprise#77852
Original PR description
- make kiosk mode open in the same page and logout the user to avoid unwanted rights Task: 4509632 Forward-Port-Of: odoo/enterprise#77852
Issue: Translations for terms "month", "year," and "week" are missing in the eCommerce subscription. Steps to reproduce: - Navigate to the website shop. - Pick a subscription product. - Change the language. "month" (along with the other two alternatives) is not translated. opw-4404734 Forward-Port-Of: odoo/enterprise#77395
Original PR description
Issue: Translations for terms "month", "year," and "week" are missing in the eCommerce subscription. Steps to reproduce: - Navigate to the website shop. - Pick a subscription product. - Change the language. "month" (along with the other two alternatives) is not translated. opw-4404734 Forward-Port-Of: odoo/enterprise#77395
### Steps to reproduce the issue: 1. Create an clean Analytic Account and use it in a Budget 2. Create a Purchase Order with Analytic Account in the Distribution and a Discount then Confirm 3. In the Budget report, the Committed Amount does not include the Discount ### Explanation: In the `purchase.order.line` side of the calculation of the committed amount of the budget report, we are using `unit_price` as base, because of it having a `not null` constraint, then adding a lot of other
Original PR description
### Steps to reproduce the issue: 1. Create an clean Analytic Account and use it in a Budget 2. Create a Purchase Order with Analytic Account in the Distribution and a Discount then Confirm 3. In the Budget report, the Committed Amount does not include the Discount ### Explanation: In the `purchase.order.line` side of the calculation of the committed amount of the budget report, we are using `unit_price` as base, because of it having a `not null` constraint, then adding a lot of other variables to extract the correct amount: `currency_rate`, `analytic_distribution`, `product_qty` and `qty_invoiced`. This does not include `discount` nor price-included `taxes_id`. ### Fix reasoning: To avoid an issue regarding down payment lines, which have no `price_subtotal`, we will prioritize the field with a fallback on `price_unit`. opw-4391098 Forward-Port-Of: odoo/enterprise#75902
Migrated method to get the SAT status for EDI documents to zeep library. This because the old way have some errors when the VAT have some `Ñ`. The old way returns: Params: `<![CDATA[?id=E5E54D9B-8A18-4FD4-ACE4-135B6B7E7960&re=NSE111011M99&rr=LEÑ131002PN2&tt=552.99]]>` Response: ```<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFaile
Original PR description
Migrated method to get the SAT status for EDI documents to zeep library. This because the old way have some errors when the VAT have some `Ñ`. The old way returns: Params:…
Migrated method to get the SAT status for EDI documents to zeep library. This because the old way have some errors when the VAT have some `Ñ`. The old way returns: Params: `<![CDATA[?id=E5E54D9B-8A18-4FD4-ACE4-135B6B7E7960&re=NSE111011M99&rr=LEÑ131002PN2&tt=552.99]]>` Response: ```<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFailed</faultcode><faultstring xml:lang="en-US">The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:expresionImpresa. The InnerException message was \'There was an error deserializing the object of type System.String. \'�131002PN2&tt=552.99\' contains invalid UTF8 bytes.\'. Please see InnerException for more details.</faultstring><detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException><HelpLink i:nil="true"/><InnerException><HelpLink i:nil="true"/><InnerException><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>Unable to translate bytes [D1] at index 0 from specified code page to Unicode.</Message><StackTrace> at System.Text.DecoderExceptionFallbackBuffer.Throw(Byte[] bytesUnknown, Int32 index)
\n at System.Text.DecoderExceptionFallbackBuffer.Fallback(Byte[] bytesUnknown, Int32 index)
\n at System.Text.DecoderFallbackBuffer.InternalFallback(Byte[] bytes, Byte* pBytes, Char*& chars)
\n at System.Text.UTF8Encoding.GetChars(Byte* bytes, Int32 byteCount, Char* chars, Int32 charCount, DecoderNLS baseDecoder)
\n at System.Text.UTF8Encoding.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteCount, Char[] chars, Int32 charIndex)
\n at System.Xml.XmlConverter.ToChars(Byte[] buffer, Int32 offset, Int32 count, Char[] chars, Int32 charOffset)</StackTrace><Type>System.Text.DecoderFallbackException</Type></InnerException><Message>\'�131002PN2&tt=552.99\' contains invalid UTF8 bytes.</Message><StackTrace> at System.Xml.XmlConverter.ToChars(Byte[] buffer, Int32 offset, Int32 count, Char[] chars, Int32 charOffset)
\n at System.Xml.XmlBufferReader.GetChars(Int32 offset, Int32 length, Char[] chars)
\n at System.Xml.XmlBufferReader.GetString(Int32 offset, Int32 length)
\n at System.Xml.ValueHandle.GetString()
\n at System.Xml.XmlBaseReader.get_Value()
\n at System.Xml.XmlDictionaryReader.ReadContentAsString(Int32 maxStringContentLength)
\n at System.Xml.XmlBaseReader.ReadElementContentAsString()
\n at System.Runtime.Serialization.StringDataContract.ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context)
\n at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)</StackTrace><Type>System.Xml.XmlException</Type></InnerException><Message>There was an error deserializing the object of type System.String. \'�131002PN2&tt=552.99\' contains invalid UTF8 bytes.</Message><StackTrace> at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
\n at System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName)
\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo.ReadObject(XmlDictionaryReader reader, XmlObjectSerializer serializer)
\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)</StackTrace><Type>System.Runtime.Serialization.SerializationException</Type></InnerException><Message>The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:expresionImpresa. The InnerException message was \'There was an error deserializing the object of type System.String. \'�131002PN2&tt=552.99\' contains invalid UTF8 bytes.\'. Please see InnerException for more details.</Message><StackTrace> at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)
\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, Object[] parameters, Boolean isRequest)
\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
\n at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
\n at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
\n at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
\n at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
\n at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
\n at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.ServiceModel.Dispatcher.NetDispatcherFaultException</Type></ExceptionDetail></detail></s:Fault></s:Body></s:Envelope>' ``` Forward-Port-Of: odoo/enterprise#78031 Forward-Port-Of: odoo/enterprise#77616
**Issue** When sending a subscription payment reminder, customers were incorrectly notified to pay the full amount (amount_total) instead of the amount corresponding to subscription orders (recurring_total) only. This issue also occurs in cases of payment failure. opw-4224746 Forward-Port-Of: odoo/enterprise#75319
Original PR description
**Issue** When sending a subscription payment reminder, customers were incorrectly notified to pay the full amount (amount_total) instead of the amount corresponding to subscription orders (recurring_total) only. This issue also occurs in cases of payment failure. opw-4224746 Forward-Port-Of: odoo/enterprise#75319
### Description: When creating a loan, users encounter a memory error if they have used accounting. This occurs because the `currency_id` field is related to the company's `currency_id` and is not readonly, causing the ORM to perform an inverse related and update the company's `currency_id`. This is problematic since changing the currency triggers a massive recompute of nearly all accounting records unnecessarily. For example, in the case of this customer, it was trying to update 191219 account
Original PR description
### Description: When creating a loan, users encounter a memory error if they have used accounting. This occurs because the `currency_id` field is related to the company's `currency_id` and is not…
### Description: When creating a loan, users encounter a memory error if they have used accounting. This occurs because the `currency_id` field is related to the company's `currency_id` and is not readonly, causing the ORM to perform an inverse related and update the company's `currency_id`. This is problematic since changing the currency triggers a massive recompute of nearly all accounting records unnecessarily. For example, in the case of this customer, it was trying to update 191219 account.analytic.line, which caused this memory error. The initial design aimed to show the monetary symbol on the form when the `onchange` in `web/models/models.py` was triggered, but this approach led to the issue. ### Fix: By adding `company_id` to the view as an invisible field, the onchange can retrieve it to display the monetary symbol without triggering the problem. This change is backward-compatible; customers who haven't updated their views will only miss the monetary symbols on the form view until the record is saved. ### Reference: opw-4486739 Forward-Port-Of: odoo/enterprise#77990
Change an f-string into an sql.identifier for injection prevention Forward-Port-Of: odoo/enterprise#77956
Original PR description
Change an f-string into an sql.identifier for injection prevention Forward-Port-Of: odoo/enterprise#77956
Using a newly created payslip structure for Mexico it is not possible to generate payslips Steps to reproduce: - With an MX Company setup - Go to Payroll > Configuration > Salary > Structures - Create new structure with the following attributes: - Type: "Mexico: employee" - Country: "Mexico" - Go to Payroll > Payslips > Batches, create a new batch - Click "Generate Payslips" - Select the freshly created salary structure in the wizard, then click "Generate" Issue: An error is ra
Original PR description
Using a newly created payslip structure for Mexico it is not possible to generate payslips Steps to reproduce: - With an MX Company setup - Go to Payroll > Configuration > Salary > Structures - Create new structure with the following attributes: - Type: "Mexico: employee" - Country: "Mexico" - Go to Payroll > Payslips > Batches, create a new batch - Click "Generate Payslips" - Select the freshly created salary structure in the wizard, then click "Generate" Issue: An error is raised while creating the payslip Error: float() argument must be a string or a real number, not 'NoneType' This occurs because we don't have a fallback in `_get_paid_amount` opw-4328900 Forward-Port-Of: odoo/enterprise#78058 Forward-Port-Of: odoo/enterprise#77277
Steps to reproduce: - Create a new accounting report - Create a new line - Set a value in the groupby field -> A warning appears, stating that the line uses a custom user-defined "group by" value. This warning is only useful when modifying a groupby value for a line that has a xmlid. task-4286306 Forward-Port-Of: odoo/enterprise#78067 Forward-Port-Of: odoo/enterprise#74526
Original PR description
Steps to reproduce: - Create a new accounting report - Create a new line - Set a value in the groupby field -> A warning appears, stating that the line uses a custom user-defined "group by" value. This warning is only useful when modifying a groupby value for a line that has a xmlid. task-4286306 Forward-Port-Of: odoo/enterprise#78067 Forward-Port-Of: odoo/enterprise#74526