Daily updates from Odoo
Navigate
Branch
Thursday, May 29, 2025
34 changes
20 changes
Enhancements to existing features
This update refreshes sample HR data used in salary configuration, referrals, and country-specific payroll demos. It makes demo environments more consistent by reusing standard HR job roles instead of creating duplicate local payroll jobs.
Original PR description
- Added demo data in hr_contract_salary - Added more utm_source data in hr_referral - Archived Experienced Developer US job position in l10n_us_hr_payroll - Some additional demo data added in hr_contract_salary and removed job Technical Lead US and Experienced Developer US in l10n_us_payroll task-4677938
UPS delivery carrier selection is now limited in warehouse transfers so users only see appropriate options. This helps prevent incorrect carrier choices and keeps delivery workflows aligned with recent stock picking changes.
Original PR description
This commit adjusts for the changes in odoo/odoo#203955 Task-4555994
The WhatsApp module's security test was updated to stay aligned with a related change in how message authors are handled. This helps keep automated checks reliable and reduces the risk of false test failures during future updates.
Original PR description
PR community: https://github.com/odoo/odoo/pull/211868 Task-4675767
Spreadsheet dashboards now support a search view, making it easier for users to find and filter relevant dashboard information. Filter values can also show a clear icon, helping users quickly remove a search or filter value when refining results.
Grid view column headers now use locale-aware date formatting, so dates appear in the correct word order and punctuation for each language. This improves readability for international users, such as French users seeing “19 mai” instead of the English-style “mai 19”.
Original PR description
The headers of the columns in the Grid view use a fixed format, which is too restrictive for languages where the order of words changes, or where additional literals like commas may or may not be present. With this commit, we use the Intl API to ensure that we produce a valid result in all languages. For instance, French becomes: > lun. 19 mai instead of: > lun., mai 19 Task-4801503
Users can now hide data point markers on line and combo charts, making charts with many data points easier to read. This improves chart clarity and helps teams interpret trends without visual clutter.
Original PR description
Given a line chart with lots and lots of data points, nothing is visible because the data point dots (data markers) are all mixed together. Add an option to hide the points on the line (line charts and combo charts). Task: 4757733
Resolved issues and error corrections
Template names were updated to use the correct module prefixes after the HTML builder integration. This reduces the risk of naming conflicts and helps appointment, knowledge, and studio website features behave consistently.
Original PR description
*: website_appintment, website_knowledge, website_studio This commit corrects improperly prefixed template names introduced during the integration of the new HTML builder. This ensures consistency and avoids conflicts or ambiguity when referencing templates across website modules. Community PR : - https://github.com/odoo/odoo/pull/211723
Features or functions removed from Odoo
The time off planning view was cleaned up by removing a manager field that is no longer used. This reduces unnecessary configuration in the HR holidays Gantt view without changing the employee-facing time off process.
Original PR description
The `manager_id` field is no longer used in the `hr_leave` model and is therefore removed from the hr_holidays_gantt_view.
Miscellaneous changes
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
Currently a ParseError is arising when the user installs the `pos_settle_due` module after deleting the `Services` in Product Categories/Configuration. Steps to reproduce: --- - Install `Invoicing` application (without demo data). - Invoicing > Configuration > Product Categories > Delete `Services` - Now install `pos_settle_due` module Traceback: --- ``` ValueError: External ID not found in the system: product.product_category_services ParseError: while parsing /home/odoo/src/ent
Original PR description
Currently a ParseError is arising when the user installs the `pos_settle_due` module after deleting the `Services` in Product Categories/Configuration. Steps to reproduce: --- - Install `Invoicing`…
Currently a ParseError is arising when the user installs the `pos_settle_due` module after deleting the `Services` in Product Categories/Configuration.
Steps to reproduce:
---
- Install `Invoicing` application (without demo data).
- Invoicing > Configuration > Product Categories > Delete `Services`
- Now install `pos_settle_due` module
Traceback:
---
```
ValueError: External ID not found in the system: product.product_category_services
ParseError: while parsing /home/odoo/src/enterprise/saas-18.3/pos_settle_due/data/pos_settle_due_data.xml:22, somewhere inside <record id="product_product_settle_invoice" model="product.product">
<field name="name">Settle Invoice</field>
<field name="categ_id" ref="product.product_category_services"/>
<field name="type">service</field>
<field name="weight">0.00</field>
<field name="available_in_pos">False</field>
<field name="taxes_id" eval="[]"/>
</record>
```
The error occurs because the user deleted `Services` in Product Categories, and then tried to install the other module.
This commit resolves the error by providing a False value for the field if the product category is missing.
sentry-6377659355
Forward-Port-Of: odoo/enterprise#85970When Invoicing Policy is set to Validated timesheets only, opening tasks in the portal view results in a traceback. Steps to reproduce the error: - Install ``sale_timesheet_enterprise`` - Go to Timesheets > Configuration > Settings > Invoicing Policy: ``Validated timesheets only`` - Switch to Portal View > Open Tasks Traceback: ``` ValueError: Aggregate method is mandatory for 'unit_amount' ``` https://github.com/odoo/enterprise/blob/3cfd66bfaf6a1fd58200b46b0c56330b8d96dcdd/sale_
Original PR description
When Invoicing Policy is set to Validated timesheets only, opening tasks in the portal view results in a traceback. Steps to reproduce the error: - Install ``sale_timesheet_enterprise`` - Go to Timesheets > Configuration > Settings > Invoicing Policy: ``Validated timesheets only`` - Switch to Portal View > Open Tasks Traceback: ``` ValueError: Aggregate method is mandatory for 'unit_amount' ``` https://github.com/odoo/enterprise/blob/3cfd66bfaf6a1fd58200b46b0c56330b8d96dcdd/sale_timesheet_enterprise/models/project_task.py#L130 Here, Aggregate method is missing for the ``unit_amount`` field. So, It will lead to the above traceback. sentry-6626038923 Forward-Port-Of: odoo/enterprise#86388
Before this PR: When generating the Libro Giornale Journal Audit report as PDF, journal items with long descriptions would cause rendering issues. The Name column would expand excessively to accommodate the long text, resulting in the Debit and Credit columns being cropped or completely missing from the printed report as seen in below image.  After this PR: The Libro Giornale Journal Audit report no
Original PR description
Before this PR: When generating the Libro Giornale Journal Audit report as PDF, journal items with long descriptions would cause rendering issues. The Name column would expand excessively to accommodate the long text, resulting in the Debit and Credit columns being cropped or completely missing from the printed report as seen in below image.  After this PR: The Libro Giornale Journal Audit report now correctly handles journal items with long descriptions. The report template has been modified to ensure proper column width distribution, preventing the Name column from expanding excessively. The Debit and Credit columns are now consistently displayed in the PDF report regardless of description length.  OPW-4788257 Forward-Port-Of: odoo/enterprise#86586 Forward-Port-Of: odoo/enterprise#86049
Bug === If a user creates a shortcut to a document he can read, (but he has no edit access on the target), he should have edit access on the shortcut. Task-4582290 Forward-Port-Of: odoo/enterprise#86461 Forward-Port-Of: odoo/enterprise#80018
Original PR description
Bug === If a user creates a shortcut to a document he can read, (but he has no edit access on the target), he should have edit access on the shortcut. Task-4582290 Forward-Port-Of: odoo/enterprise#86461 Forward-Port-Of: odoo/enterprise#80018
## Pull Request HOOT (PRHOOT) 31 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/205405 --- I confirm I have signed
Original PR description
## Pull Request HOOT (PRHOOT) 31 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/205405 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#85767 Forward-Port-Of: odoo/enterprise#83169
The aim of this commit is improving the way we can use the chatter with the bank reconciliation widget. It includes different improvements: - Chatter icon visible on hover (if chatter closed) - Attachments from reconciled moves, statements and original move are present in the chatter. - A small border is visible to let the user know which statement line is the selected one. - Chatter is opened with the attachment preview task-4808703 Forward-Port-Of: odoo/enterprise#85991
Original PR description
The aim of this commit is improving the way we can use the chatter with the bank reconciliation widget. It includes different improvements: - Chatter icon visible on hover (if chatter closed) - Attachments from reconciled moves, statements and original move are present in the chatter. - A small border is visible to let the user know which statement line is the selected one. - Chatter is opened with the attachment preview task-4808703 Forward-Port-Of: odoo/enterprise#85991
In PR https://github.com/odoo/enterprise/pull/75974, it was forgotten that the return value for _run_vat_checks had changed. Forward-Port-Of: odoo/enterprise#86088
Original PR description
In PR https://github.com/odoo/enterprise/pull/75974, it was forgotten that the return value for _run_vat_checks had changed. Forward-Port-Of: odoo/enterprise#86088
This commit modifies the icons displayed in the softphone interface to provide clearer feedback on call status. Now, when the ongoing call is on hold, the user will see a pause icon in the top bar and the systray item. Forward-Port-Of: odoo/enterprise#85616
Original PR description
This commit modifies the icons displayed in the softphone interface to provide clearer feedback on call status. Now, when the ongoing call is on hold, the user will see a pause icon in the top bar and the systray item. Forward-Port-Of: odoo/enterprise#85616
The failed WhatsApp message icon turns green after 15 days or once the message is deleted. PROBLEM: WhatsApp messages are deleted after 15 days, leading to data loss and causing the default green icon to be displayed. SOLUTION: Introduced `getWhatsappStatusClass` to display appropriate icons based on the message state: - Green icon for `sent`, `delivered`, `read`, and `received` states. - Orange icon for the `outgoing` state. - Red icon for the `error` and `cancel` states. - Grey ico
Original PR description
The failed WhatsApp message icon turns green after 15 days or once the message is deleted. PROBLEM: WhatsApp messages are deleted after 15 days, leading to data loss and causing the default green icon to be displayed. SOLUTION: Introduced `getWhatsappStatusClass` to display appropriate icons based on the message state: - Green icon for `sent`, `delivered`, `read`, and `received` states. - Orange icon for the `outgoing` state. - Red icon for the `error` and `cancel` states. - Grey icon for the `undefined` state (i.e., deleted WhatsApp message). Also introduced was `getWhatsappStatusTitle`, which returns the correct title based on the message state. Task-4481123 Forward-Port-Of: odoo/enterprise#86458 Forward-Port-Of: odoo/enterprise#77739
For languages with longer terms than the English ones, the labels in the date filter would overflow because they had a fixed width. We now change it to use a minimal width and expand with the content. Also, the quarter label was not translatable in other languages that do not use the notation "Q1 2025". It's made translatable now. Lastly, some padding caused custom date inputs to be too narrow, meaning a horizontal scroll was necessary to see the whole value. This was fixed as well. [ta
Original PR description
For languages with longer terms than the English ones, the labels in the date filter would overflow because they had a fixed width. We now change it to use a minimal width and expand with the content. Also, the quarter label was not translatable in other languages that do not use the notation "Q1 2025". It's made translatable now. Lastly, some padding caused custom date inputs to be too narrow, meaning a horizontal scroll was necessary to see the whole value. This was fixed as well. [task-4770592](https://www.odoo.com/odoo/project.task/4770592) Forward-Port-Of: odoo/enterprise#86465 Forward-Port-Of: odoo/enterprise#84662
After a recent change in German EDI, the data exported in CSV from the EC Sales List can no longer be uploaded because the expected structure has changed Steps to reproduce (with a DE Company): - Make an invoice to an EU Partner - Open EC Sales List - Export CSV When uploading the file on the Elster portal it will be rejected with an explicit error message, saying that we're using an old CSV format now deprecated, and prompts the user to refer to the new specifications Original mes
Original PR description
After a recent change in German EDI, the data exported in CSV from the EC Sales List can no longer be uploaded because the expected structure has changed Steps to reproduce (with a DE Company): -…
After a recent change in German EDI, the data exported in CSV from the EC Sales List can no longer be uploaded because the expected structure has changed Steps to reproduce (with a DE Company): - Make an invoice to an EU Partner - Open EC Sales List - Export CSV When uploading the file on the Elster portal it will be rejected with an explicit error message, saying that we're using an old CSV format now deprecated, and prompts the user to refer to the new specifications Original message: Ihre CSV-Datei wurde für eine ältere Version der CSV-Schnittstelle erstellt. Bitte informieren Sie sich in der Versionstabelle der Importhilfe über die aktuellste Version der Schnittstelle sowie Änderungen. Sind die Versionsangaben korrekt, prüfen Sie bitte das Encoding Ihrer CSV-Datei. Das zulässige Encoding ist UTF-8. Sources: https://www.elster.de/eportal/helpGlobal?themaGlobal=zmdo_import_eop https://www.datev-community.de/t5/Betriebliches-Rechnungswesen/Import-CSV-Daten-nacvh-Elster-f%C3%BCr-ZM/td-p/480079 opw-4751667 opw-4674533 Forward-Port-Of: odoo/enterprise#85992
14 changes
Resolved issues and error corrections
Manufacturing unbuild forms now allow quantities with the same decimal precision as the product's unit of measure. This prevents valid manufactured quantities, such as three-decimal amounts, from being rounded or blocked when reversing a production order.
Original PR description
Steps to reproduce the bug:
- Set the decimal precision and rounding accuracy for the unit of measure to more than 2 digits (e.g. 3)
- Create a storable product “P1”
- Create a manufacturing order to produce 1.234 units
- Confirm and validate it
- Try to unbuild the MO
Problem:
The unbuild form does not respect the product's UoM decimal precision, allowing only 2 digits for product_qty.
opw-4818591Point of Sale invoices now calculate and display discounts added directly to order lines even when pricelist discounts are also used. This prevents printed invoice totals from showing missing or incorrect discount amounts when prices are manually adjusted.
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-4776259When users work with multiple companies at once, product sale and purchase taxes now show which company they belong to. This removes ambiguity when selecting or reviewing taxes on products and helps avoid choosing the wrong company-specific tax.
Original PR description
Backport of some changes included here https://github.com/odoo/odoo/commit/2cf73ba8fe50288a0ea9d0ad4b8aeb51bc345740 (if this pr 212215 is merged then is not neccesary to merge the FW to master) The…
Backport of some changes included here https://github.com/odoo/odoo/commit/2cf73ba8fe50288a0ea9d0ad4b8aeb51bc345740 (if this pr 212215 is merged then is not neccesary to merge the FW to master) The goal of this pr is to see for which company belongs each sale/purchase tax in a product when more than one company is selected. This pr solves odoo task #4829985 and this issue https://github.com/odoo/odoo/issues/147673 Steps to reproduce: 1) Go to runbot odoo enterprise 18 instance and select companies "My Belgian Company" and "My Company (San Francisco)" taking position in "My Belgian Company". 2) Go to "Accounting / Customers / Products" and get into product with name "Bolt" and internal reference "CONS_89957". There is shown two taxes in "Sale Taxes" and "Purchase Taxes" fields but is not possible to distinguish for which company belongs each tax.  Current behavior: It can not be distinguished whenever for which company belongs each customer tax in a product if more than one company is selected. Expected behavior: It can be distinguished whenever for which company belongs each customer tax in a product if more than one company is selected. Task Adhoc side: 51853 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue in Discuss where someone writing a long message could disappear from the "is typing..." indicator before they stopped typing. The indicator now refreshes correctly, giving other users a more accurate view of ongoing conversations.
Original PR description
Before this commit, if a user is typing without interrupt for more than 1 minute, other members stop seeing this person from about 40 seconds. As a reminder, the "is typing..." feature in discuss is…
Before this commit, if a user is typing without interrupt for more than 1 minute, other members stop seeing this person from about 40 seconds. As a reminder, the "is typing..." feature in discuss is implemented as follow: - when typing, notify `is_typing: true` once every 50 seconds. - when stop typing for 5 seconds, notify `is_typing: false`. - other members assume stop typing if nothing received after 60 seconds. This logic is good, but there was a problem with current implementation: members only send and receive `isTyping: true` through `mail.record/insert` notification. This means a long typer is seen as follow ``` - time: 0sec. -> is_typing: true sent + received - time: 50sec. -> is_typing: true sent + received - time: 60sec. -> is_typing: false (assuming stop typing) - time: 100sec. -> is_typing: true sent + received ``` This is the case because the notification is `mail.record/insert` so from the store data, data of `isTyping` is unchanged. The timeout was made through a change of `isTyping` status, which doesn't in this scenario, hence the problem of assuming stop typing. This commit fixes the issue by sending the datetime of notified `is_typing` and linking the timeout to the datetime of last notified of `is_typing` of this member. This fix ensures that at the 50sec, the timeouts are refreshed and they have to wait until time 110sec. to assume stop typing, which is good in case the message is very long as typer will warn again at time 100sec. with refreshed datetime. runbot-223760
The event list view now correctly displays key card information such as sold out and unpublished statuses. This helps website visitors and event managers see accurate event availability and publication details when switching between grid and list views.
Original PR description
When changing the website view of the events from grid to list, we are losing the "Sold out, Unpublished, etc" information that was displayed on the card. This is due to loading the event calendar date widget before the rest of the elements which is provoking them to not properly load. opw-4597647 ## Before:  ## After: 
Removing a lot number from a manufacturing order no longer automatically marks components as consumed. This prevents unnecessary manual correction and lets users reassign lots and check component availability smoothly.
Original PR description
Issue: ------------------------- In a Manufacturing Order, when a lot number is assigned to a product and then removed, the components are consumed automatically. Steps to Reproduce:…
Issue: ------------------------- In a Manufacturing Order, when a lot number is assigned to a product and then removed, the components are consumed automatically. Steps to Reproduce: ------------------------- - Create an MO for a lot-tracked product. - Assign a lot number to the product, then remove the assigned lot number. - Notice that the component is automatically marked as Consumed. With this commit: ------------------------- Previously, removing the lot number triggered an `onchange`, which called `_set_qty_producing`. This method auto-marked the component as consumed. As a result, users cannot re-reserve the components using the Check Availability button unless they manually uncheck the Consumed field. This commit updates the logic to ensure that removing an assigned lot does not trigger component consumption. This allows users to reassign and re-reserve components smoothly in the production flow. Task ID: [4797711](https://www.odoo.com/odoo/all-tasks/4797711)
Code cleanup and technical improvements
The HTML editor now uses a dedicated state flag to decide when the link popover is in editing mode, instead of inferring it from whether a link has a web address. This makes link editing behavior more predictable and easier to maintain without changing the visible workflow for users.
Original PR description
### Current behavior before PR: - The popover's editing mode was determined by whether the link had an `href` attribute. ### Desired behavior after PR is merged: - Introduced _`LinkPopoverState`_ to control the editing mode instead of relying on `href`. task-4241464 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
### Before this PR The PUSH notifications on Edge PWA are not working. This is caused by the TTL 0 . Edge PUSH are not working if TTL 0 is used. ### After This PR I set the TTL to 1. It is a tricky way to make it work on Edge and also other browser. It is 1 seconds instead of 0(that means only if the browser is connected) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207209 Forward-Port-Of: odoo/odoo#199943
Original PR description
### Before this PR The PUSH notifications on Edge PWA are not working. This is caused by the TTL 0 . Edge PUSH are not working if TTL 0 is used. ### After This PR I set the TTL to 1. It is a tricky way to make it work on Edge and also other browser. It is 1 seconds instead of 0(that means only if the browser is connected) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207209 Forward-Port-Of: odoo/odoo#199943
Description of the issue/feature this PR addresses: Cash control is a basic operation in a point of sale and it shouldn't require permissions as big as Accounting/Billing to be performed Current behavior before PR: - A Point of Sale user with no Accounting/Billing permission can't do cash operations. Desired behavior after PR is merged: - Recover the paradigm present in versions <=v15: a pos user can record a cash in / out operation without the need of elevated permissions. TT5
Original PR description
Description of the issue/feature this PR addresses: Cash control is a basic operation in a point of sale and it shouldn't require permissions as big as Accounting/Billing to be performed Current behavior before PR: - A Point of Sale user with no Accounting/Billing permission can't do cash operations. Desired behavior after PR is merged: - Recover the paradigm present in versions <=v15: a pos user can record a cash in / out operation without the need of elevated permissions. TT51987 cc @Tecnativa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190342 Forward-Port-Of: odoo/odoo#188798
Fixes two issues with the customs form and the partner ref. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211837
Original PR description
Fixes two issues with the customs form and the partner ref. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211837
[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 a numeric field (float, integer, monetary) had a value of 0, it was evaluated to an empty string when called through an `odoo.list` formula. Task: 4805167 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#211638 Forward-Port-Of: odoo/odoo#210757
Original PR description
When a numeric field (float, integer, monetary) had a value of 0, it was evaluated to an empty string when called through an `odoo.list` formula. Task: 4805167 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#211638 Forward-Port-Of: odoo/odoo#210757
Currently, loyalty cards with 0 points are being created for programs that have exceeded their max usage. Loyalty points are also erroneously being displayed for usage-exceeded programs when the tab is opened for the first time. And, it is not clear to the user when the max usage has been exceeded. Steps to reproduce ----- 1. Create a loyalty program with a limited usage 2. Validate orders with the program up to the max usage 3. Refresh the tab and start another order with a new customer
Original PR description
Currently, loyalty cards with 0 points are being created for programs that have exceeded their max usage. Loyalty points are also erroneously being displayed for usage-exceeded programs when the tab…
Currently, loyalty cards with 0 points are being created for programs that have exceeded their max usage. Loyalty points are also erroneously being displayed for usage-exceeded programs when the tab is opened for the first time. And, it is not clear to the user when the max usage has been exceeded. Steps to reproduce ----- 1. Create a loyalty program with a limited usage 2. Validate orders with the program up to the max usage 3. Refresh the tab and start another order with a new customer 4. Won points are still being displayed in the left pane 5. Validate the order, a loyalty card with 0 points is created Cause ----- Programs over the max usage are not being filtered out. Fix ----- Apply similar logic from https://github.com/odoo/odoo/pull/208134 and filter out programs over the max usage in `_get_program_ids()` Also, add the `total_order_count` to the form view next to `max_usage` so that it is clear that when the max usage is hit.  opw-4744372 Forward-Port-Of: odoo/odoo#210507
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-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