Thursday, May 29, 2025
13 changes · saas-18.1
Resolved issues and error corrections
This fixes an issue on mobile websites where the bottom of a mega menu could be cut off after scrolling down the page. Visitors can now access the full menu content, improving navigation on mobile devices.
Original PR description
Scenario: add a mega menu, in mobile scroll to not be at top of page, and click to open hamburger menu then click to open mega menu content. Result: the mega menu is mostly shown thanks to…
Scenario: add a mega menu, in mobile scroll to not be at top of page,
and click to open hamburger menu then click to open mega menu content.
Result: the mega menu is mostly shown thanks to
579160b08c6e73d809be79f561214118f1284532 but a small part at the bottom
is inaccessible.
Reason: the height needs to take into account the margin bottom so it
can be shown fully on the page.
Fix: add a calc to remove the height of the margin-top.
opw-4737577
opw-4737823
opw-4738673
__PR NOTE__: I'm not sure if all browser support of using calc with different units (maybe I'm confusing it with some less calculation), if the solution was not acceptable for that, the only other way I see to solve this, would be to put "position: relative" to the `#top_menu_collapse_mobile .offcanvas-body` element and let the mega menu take the whole space, i.e. something like that:
```diff
diff --git a/addons/website/static/src/scss/website.scss b/addons/website/static/src/scss/website.scss
index 16fdd05e006f..05c9dbbc88cd 100644
--- a/addons/website/static/src/scss/website.scss
+++ b/addons/website/static/src/scss/website.scss
@@ -1629,6 +1629,9 @@ header {
}
// Offcanvas mega menu on mobile or in sidebar/hamburger header
+#top_menu_collapse_mobile .offcanvas-body {
+ position: relative;
+}
.o_mega_menu_is_offcanvas {
.o_mega_nav, .o_mega_menu {
@include transition(opacity $offcanvas-transition-duration ease-in-out, visibility $offcanvas-transition-duration ease-in-out);
@@ -1664,7 +1667,6 @@ header {
inset: 0 0 0 auto !important;
display: block;
visibility: hidden;
- margin-top: $o-mega-menu-nav-height !important;
border: none;
max-height: 100vh;
background-color: o-color('menu-custom') or o-color('menu');
```Users can now follow a reply link even when the original message it refers to has been deleted. This prevents broken navigation in message threads and makes conversation history easier to follow.
Original PR description
**Current behavior before PR**: Reply backlink doesn't work for deleted parent message **Desired behavior after PR is merged**: Reply backlink works for deleted parent message task:4593352 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Before this commit: - A warning was shown in the TDS payment wizard when the base amount used for TDS calculation was greater than the amount being paid. - However, this warning was misleading, as the TDS base amount can exceed the paid amount. After this commit: - The warning has been removed from the TDS payment wizard. task-4787113 Forward-Port-Of: odoo/odoo#211957 Forward-Port-Of: odoo/odoo#209823
Original PR description
Before this commit: - A warning was shown in the TDS payment wizard when the base amount used for TDS calculation was greater than the amount being paid. - However, this warning was misleading, as the TDS base amount can exceed the paid amount. After this commit: - The warning has been removed from the TDS payment wizard. task-4787113 Forward-Port-Of: odoo/odoo#211957 Forward-Port-Of: odoo/odoo#209823
[FIX] calendar_sms: calendar reminder event matching The Issue SMS reminders are sent to customers for calendar events regardless of whether they are scheduled for 1 hour before or 24 hours before; both reminders are sent. Steps to Reproduce 1. Create two SMS reminders with different timings: one for 1 hour before the event and another for 24 hours before. 2. Create an attendee (since the calendar event administrator will not receive the SMS). Assign the attendee a phone number and an
Original PR description
[FIX] calendar_sms: calendar reminder event matching The Issue SMS reminders are sent to customers for calendar events regardless of whether they are scheduled for 1 hour before or 24 hours before;…
[FIX] calendar_sms: calendar reminder event matching
The Issue
SMS reminders are sent to customers for calendar events regardless of whether they are scheduled for 1 hour before or 24 hours before; both reminders are sent.
Steps to Reproduce
1. Create two SMS reminders with different timings: one for 1 hour before the event and another for 24 hours before.
2. Create an attendee (since the calendar event administrator will not receive the SMS). Assign the attendee a phone number and an email.
3. Configure your SMS account to receive free credits (for local: create a SaaS and use its IAP token and UUID to link the IAP service).
4. Create two calendar events:
- One that starts in 1 hour. (event_1h)
- One that starts in 24 hours. (event_24h)
5. Add both reminders (1-hour and 24-hour reminders that we will call reminder_1h and reminder_24h) to each event and include the attendee you created. Accept the event invitation on behalf of the attendee.
6. Run the scheduled action that triggers event reminders.
Actual Behavior
For both events, both reminders are triggered.
for event_1h, reminder_1h and reminder_24h are sent.
for event_24h, reminder_1h and reminder_24h are sent.
Expected behavior:
For event_1h, reminder_1h is sent.
For event_24h, reminder_24h is sent.
Why Does This Happen?
After the SQL query, the result is a dictionary:
{"reminder_1h": "event_1h", "reminder_24h": "event_24h"}
(In reality, these should be IDs, but they are represented as strings for clarity.)
The code in the calendar_sms module retrieves all events from the dictionary, so we have a list with [event_1h, event_24h].
It also fetches the reminders that are in the keys of the dictionary (reminder_1h, reminder_24h).
Then it iterates through the events and for each event, checks if the reminders we have exist in the event.
If it exists, it sends an SMS.
(e.g., event_24h has both reminder_1h and reminder_24h linked to it, so it will send both reminders even if one states it starts in one hour, whereas it really starts in 24h).
OPW-4473553
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#207446
Forward-Port-Of: odoo/odoo#195782When the user tries to export a file of attachment in xlsx format, A traceback will appear. Steps to reproduce the error: - Open attachments > Upload a file that does not contain base64-encoded content - Select that file > Actions > Export > Export Format: XLSX > Add File content(raw) field > Export Traceback: ``` AttributeError: 'ExportXlsxWriter' object has no attribute 'field_names' ``` In this commit: https://github.com/odoo/odoo/commit/a4e04518a437f09d6a10e25a35900c4adfe11
Original PR description
When the user tries to export a file of attachment in xlsx format, A traceback will appear. Steps to reproduce the error: - Open attachments > Upload a file that does not contain base64-encoded content - Select that file > Actions > Export > Export Format: XLSX > Add File content(raw) field > Export Traceback: ``` AttributeError: 'ExportXlsxWriter' object has no attribute 'field_names' ``` In this commit: https://github.com/odoo/odoo/commit/a4e04518a437f09d6a10e25a35900c4adfe11dc6 ``field_names`` is renamed to ``fields``. https://github.com/odoo/odoo/blob/0e98b684834cf9e1d646e55599e7bc00aa5997f0/addons/web/controllers/export.py#L231 Here, ``field_names`` is still used. So, it will lead to the above traceback. sentry-6096581800 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189110
**Behaviour before PR:** In website, in some snippets font-size of paragraph like elements is not displayed correctly in toolbar. This issue happens because in `getFontSizeDisplayValue` method if there is no font-size class applied to element then it will set the value of `--font-size-base` css variable which is `16px`. **Behaviour after PR is merged:** Now, `getFontSizeDisplayValue` method will set font-size using `getComputedStyle` if there is no font related class is applied to that
Original PR description
**Behaviour before PR:** In website, in some snippets font-size of paragraph like elements is not displayed correctly in toolbar. This issue happens because in `getFontSizeDisplayValue` method if there is no font-size class applied to element then it will set the value of `--font-size-base` css variable which is `16px`. **Behaviour after PR is merged:** Now, `getFontSizeDisplayValue` method will set font-size using `getComputedStyle` if there is no font related class is applied to that element. task-4420329 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191577
Fix the import of vendor bills that use per-line ScontoMaggiorazione. The discount/surcharge should be applied to the price unit before taxes, instead of summed and subtracted from the total. #### Correct | Product | Qty | Unit Price | Discount | VAT % | Formula | Total | |-----------|-----|------------|----------|-------|----------------------------------|-----------| | Product 1 | 2 | 5.00 | 3.00 | 22% | `2 * (5 - 3) * 1.22` | 4.8
Original PR description
Fix the import of vendor bills that use per-line ScontoMaggiorazione. The discount/surcharge should be applied to the price unit before taxes, instead of summed and subtracted from the total. ####…
Fix the import of vendor bills that use per-line ScontoMaggiorazione. The discount/surcharge should be applied to the price unit before taxes, instead of summed and subtracted from the total. #### Correct | Product | Qty | Unit Price | Discount | VAT % | Formula | Total | |-----------|-----|------------|----------|-------|----------------------------------|-----------| | Product 1 | 2 | 5.00 | 3.00 | 22% | `2 * (5 - 3) * 1.22` | 4.88 | | Product 2 | 1 | 10.00 | 3.00 | 10% | `1 * (10 - 3) * 1.10` | 7.70 | | | | | | | | **12.58** | #### Before the scontomaggiorazione is not managed line by line. We have to manage line by line because the ScontoMaggiorazione should decrease the "Imponibile" and than calculate the amount tax line by line because each line can have different tax % . ATTENTION: the ScontoMaggiorazione on ImportoTotaleDocumento is not the sum of the ScontoMaggiorazione on the lines. It is a discount on the amount tax included Forward-Port-Of: odoo/odoo#206238
Steps to reproduce: ---- - Install pos_self_order - Configuration > Settings > Under Mobile self-order & Kiosk - Select Self Ordering Mode as QR menu + Ordering and save changes - Click Preview Web Interface Issue: ---- - Slideshow is not working in QR menu + Ordering mode. Cause: ---- - It was intentionally bypassed for the QR menu + Ordering mode. Fix: ---- - Removed unnecessary code which caused the issue. --- task-4745666 Forward-Port-Of: odoo/odoo#207235
Original PR description
Steps to reproduce: ---- - Install pos_self_order - Configuration > Settings > Under Mobile self-order & Kiosk - Select Self Ordering Mode as QR menu + Ordering and save changes - Click Preview Web Interface Issue: ---- - Slideshow is not working in QR menu + Ordering mode. Cause: ---- - It was intentionally bypassed for the QR menu + Ordering mode. Fix: ---- - Removed unnecessary code which caused the issue. --- task-4745666 Forward-Port-Of: odoo/odoo#207235
### Problem: The discount display policy in POS invoices is designed to hide discounts when a pricelist with a percentage-based discount is applied to its items. However, if an additional discount is added directly to a POS order line, it will not be shown in the total. Additionally, if one of the lines has a manually modified price, the total will incorrectly reflect that line's discount. ### How to reproduce: * Add a percentage discount to one of the products in the pricelist
Original PR description
### Problem:
The discount display policy in POS invoices is designed to hide discounts when a pricelist with a percentage-based discount is applied to its items. However, if an additional discount is added directly to a POS order line, it will not be shown in the total.
Additionally, if one of the lines has a manually modified price, the total will incorrectly reflect that line's discount.
### How to reproduce:
* Add a percentage discount to one of the products in the pricelist
* Order two products and add a percentage discount to both
* Modify the price of the order line for one of them
* Complete the order (the printed invoice total discount is the total discount of the manually modified line)
opw-4776259
Forward-Port-Of: odoo/odoo#212099Purpose: Splitting QR codes should not be done in documents. They are unusable if broken and some of them have legal impications. Problem Cause: If the QR code is contained in `<div>` that has class `row`, the css property `display: flex;` would cause it to be split among pages when needed. All EDI modules with QR codes were visited, but the problem was only spotted in Mexico and Peru. Solution: `<div>` containing QR codes and having `row` class should also have class `avoid-pa
Original PR description
Purpose: Splitting QR codes should not be done in documents. They are unusable if broken and some of them have legal impications. Problem Cause: If the QR code is contained in `<div>` that has class `row`, the css property `display: flex;` would cause it to be split among pages when needed. All EDI modules with QR codes were visited, but the problem was only spotted in Mexico and Peru. Solution: `<div>` containing QR codes and having `row` class should also have class `avoid-page-break-inside` task-4756331 Forward-Port-Of: odoo/enterprise#85038
Creating documents through a mail alias for a folder that was not the default company on the database would cause an error. This was due to the company on the inactive alias that was being created for this new document not matching the company of the owner document. Added the company id to the vals_list before the creation of the document in order to use the proper company on the alias. opw-4717277 Forward-Port-Of: odoo/enterprise#84719
Original PR description
Creating documents through a mail alias for a folder that was not the default company on the database would cause an error. This was due to the company on the inactive alias that was being created for this new document not matching the company of the owner document. Added the company id to the vals_list before the creation of the document in order to use the proper company on the alias. opw-4717277 Forward-Port-Of: odoo/enterprise#84719
The system failed to retrieve `worked_days.payslip_id.date_to` because user remove end period Steps to Reproduce: 1. Switch to `My Mexican Company`. 2. Go to Payroll > click Payslips > To Pay > Click New 3. Select Employee from the selection 4. Remove end date from period (Right One). Error: `TypeError: unsupported operand type(s) for -: 'bool' and 'datetime.date'` Solution: Ensure that if worked_days.payslip_id.date_to, start_date, end_date are not present then continue the flo
Original PR description
The system failed to retrieve `worked_days.payslip_id.date_to` because user remove end period Steps to Reproduce: 1. Switch to `My Mexican Company`. 2. Go to Payroll > click Payslips > To Pay > Click New 3. Select Employee from the selection 4. Remove end date from period (Right One). Error: `TypeError: unsupported operand type(s) for -: 'bool' and 'datetime.date'` Solution: Ensure that if worked_days.payslip_id.date_to, start_date, end_date are not present then continue the flow Sentry - 6473512002 Forward-Port-Of: odoo/enterprise#82675
#PURPOSE: - Currently is the user is promoted as admin for accounting and he/she is try to generate/regenerate or view the gst report following Error is thrown. - Access Error ```Uh-oh! Looks like you have stumbled upon some top-secret records. Sorry, Marc Demo (id=5) doesn't have 'read' access to: - Document (documents.document)``` #STEPS TO REPRODUCE 1) Install necessary modules for indian accounting localization. 2) Enable GST E-Filing & Matching Fe
Original PR description
#PURPOSE: - Currently is the user is promoted as admin for accounting and he/she is try to generate/regenerate or view the gst report following Error is thrown. - Access Error ```Uh-oh! Looks like…
#PURPOSE:
- Currently is the user is promoted as admin for accounting and he/she is try
to generate/regenerate or view the gst report following Error is thrown.
- Access Error
```Uh-oh! Looks like you have stumbled upon some top-secret records.
Sorry, Marc Demo (id=5) doesn't have 'read' access to:
- Document (documents.document)```
#STEPS TO REPRODUCE
1) Install necessary modules for indian accounting localization.
2) Enable GST E-Filing & Matching Feature from account's configuration.
3) Go to Settings -> User & Companies -> Users
4) Click new if no user is there other then administrator else click on
another user.
5) Under Access Rights section , inside Accounting select Administrator & Save.
6) Now log in as new user in another tab.
7) Go to Accounting -> Reporting under 'India' section click on
GST Return Period.
8) Click on generate/regenerate or View option.
9) The above shown error will be raised.
#SPECIFICATION:
- The issue is with documents access rights
- After promoting user to admin of accounting, the document's folder right is
not properly assign to user.
- fix this by giving rights of GSTR folder to user if user is in accounting
manager group.
task-4770583
Forward-Port-Of: odoo/enterprise#84747