Daily updates from Odoo
Wednesday, May 14, 2025
40 changes · 18.0
Enhancements to existing features
This change adjusts how email recipients are handled in Odoo's Mail app. It is likely intended to improve how outgoing messages and composed emails manage the “To” field, helping messages reach the right recipients more reliably.
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
This update improves and fixes automated tests for Hoot and several Odoo Enterprise test areas, including Gantt views, dashboards, Studio, and the web client. It helps Odoo maintain product quality while keeping changes limited to internal testing, so business impact and rollout risk are low.
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
Resolved issues and error corrections
This update improves Odoo's internal Hoot testing tools and related unit tests so developers can run tests more consistently and with fewer false failures. The changes are intentionally limited to the test ecosystem, reducing risk to day-to-day business features while improving product quality assurance.
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. Enterprise: https://github.com/odoo/enterprise/pull/83169 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Customers can now complete Stripe payments even when the option to save payment methods is turned off. This fixes a checkout issue and ensures both saved-payment and non-saved-payment Stripe setups can receive payments reliably.
Original PR description
177d4cb fixed an issue that prevented to use of a non-tokenizable payment method to pay for a subscription if the "Allow saving payment method" setting was enabled on a Stripe provider. This fix introduced a bug that prevented customers from paying if the "Allow saving payment method" setting was disabled on a Stripe provider. After this commit, both behaviors should allow receiving payment with Stripe. opw-4787854
The Time Off dashboard now includes the expiration dates for carried-over leave when calculating an employee’s expiring balance. This helps employees see when unused days will expire and plan their time off before losing them.
Original PR description
In the Time Off app dashboard, employees can view whether some of their unused time off days are set to expire and the exact expiration date. At the accrual plan level, a validity period can be…
In the Time Off app dashboard, employees can view whether some of their unused time off days are set to expire and the exact expiration date. At the accrual plan level, a validity period can be defined for carried-over days, after which they expire. However, the expiration date of these carried-over days hasn't been considered when calculating the employee's expiring balance. Steps to reproduce: 1. Create a new accrual plan. 2. Define a new accrual plan level. 3. Configure the level to accrue 10 days annually. 4. Set the carryover validity to 2 months. 5. Keep all other settings as default. 6. Create a new allocation. 7. Apply the previously defined accrual plan. 8. Set the start date to 01/01/20xx (where xx is the previous year). 9. Confirm the employee's balance is now 10 days. 10. Navigate to the dashboard. 11. Set the date to 01/01/(20xx + 2), corresponding to the carryover date. 12. Notice that no expiration date is displayed on the dashboard. 13. The expiration date should be displayed as 01/03/(20xx + 2). This update addresses the issue by incorporating the expiration dates of carried-over days into the calculation. task-4207987
Viewing completed activities could fail when an activity was still linked to a record that had already been deleted. The fix skips those missing records so users can continue reviewing activities without hitting an error.
Original PR description
How to reproduce: – Revert fix: odoo/odoo#206361 which fix archived activities not being deleted when their related record are – Install project and log as admin – In Settings -> Activity Type ->…
How to reproduce: – Revert fix: odoo/odoo#206361 which fix archived activities not being deleted when their related record are – Install project and log as admin – In Settings -> Activity Type -> To-Do -> check “Keep Done” – In Project -> Office Design -> Energy Certificate -> Schedule an activity To-Do for “Marc Demo” (it must be another user) – Mark it as done – Delete the task (cog menu) – Click on the clock on the top right – And then on “View all activities” – Remove all filters – Add filter “Done” You get a “Missing Record” error: “Record does not exist or has been deleted.” The error happens on allowed_ids[res_model] = set(records._filtered_access(operation)._ids) because records contains the deleted task. Note that this line is bypassed for activities of the current user, that’s why it is important to assign the test activity to another user. We solve the problem by restraining the records to the existing one (using .exists on the recordset). Note that in v17, there is no problem because _filter_access_rules (with check_access_right) was used instead of _filtered_access. We've considered to clean the records as they were detected in the mail_activity _search method but that was not straightforward as it is usually executed with a readonly transaction (web_search_read) and there is any way already an upgrade script which suppress all orphan activities: https://github.com/odoo/upgrade/pull/6952. Technical note: the test doesn't reproduce exactly the problem (no exception) but we check that the records are filtered as explained above. Task-4730338
The HTML editor now hides its floating toolbar when scrolling would push it outside the editable area. This prevents the toolbar from covering fixed page elements like headers, improving the editing experience in scrollable content.
Original PR description
Problem: In a scrollable editable, the floating toolbar may overflow and appear on top of fixed elements like headers. Solution: Detect overflow relative to the scrollable container and hide the toolbar when it is no longer fully visible. Before:  After:  Steps to reproduce: 1. Open the TODO app. 2. Add enough content to make the editable scrollable. 3. Open the floating toolbar on the first element. 4. Scroll down. → The toolbar overlaps with the page header. opw-4770575 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where Firefox could delete a backtick character while users were typing in the HTML editor. The editor now avoids interrupting Firefox's text input process unless it is actually applying inline code formatting, helping preserve what users type.
Original PR description
Problem: In Firefox, typing the backtick character "`" can cause it to be automatically deleted. Cause: Typing "`" initiates a composition session. If the selection is changed while `isComposing` is true, Firefox cancels the session and deletes the character. Solution: In `InlineCodePlugin.onInput`, the selection is now modified only when the `<code>` tag is applied. This intentional change ends the composition safely. In all other cases, we avoid changing the selection during composition to preserve user input. Steps to reproduce: 1. Open the HTML editor in Firefox. 2. Type "`". → The character disappears unexpectedly. opw-4760478 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Freelancers using the Bizkaia tax agency can now cancel TicketBAI invoices without generating an invalid XML error. The cancellation format has been aligned with Bizkaia's official requirements, reducing failed cancellation submissions.
Original PR description
The XML format used to cancel invoices for freelancers in Bizkaia was invalid. Steps to reproduce: - Configure a freelance company with Bizkaia as tax agency - Create and send an invoice to TicketBAI - Cancel it using "TicketBAI Cancel" - You get an error: "Invalid content was found starting with element 'Renta'. One of '(AnulacionTicketBai)' is expected." This fix follows the official Bizkaia documentation: https://www.batuz.eus/fitxategiak/batuz/lroe/Batuz_LROE_Especificaciones_Env%C3%ADo_Masivo_V1_0_7.pdf (see page 30) and the example provided here: https://www.batuz.eus/fitxategiak/batuz/LROE/ejemplos/Ejemplo_Anulacion_1_LROE_PF_140_IngresosConFacturaConSG_79732487C.xml opw-4634677
This fix prevents duplicate records from being created when the same paid point of sale order is synced more than once. It helps avoid duplicate invoices, stock transfers, and related operational cleanup for businesses using the point of sale app.
Original PR description
Before this commit, if a paid order request was sent twice, duplicate records such as pickings or invoices could be created in the system. opw-4788967 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now edit sections and notes on accounting-related documents until the parent document is cancelled, locked, or posted. This prevents notes added during normal workflow steps, such as after confirming a purchase order, from becoming unexpectedly locked after focus is lost.
Original PR description
Description of the issue this commit addresses: In the move form view, the sections and notes are made readonly too soon. For example in a purchase order form, when the PO is confirmed, it is still…
Description of the issue this commit addresses: In the move form view, the sections and notes are made readonly too soon. For example in a purchase order form, when the PO is confirmed, it is still possible to add notes and sections but not to edit them so they are locked once the focus is lost. As it is intended to be able to add notes at such point so it should be possible to edit them too. --- Desired behavior after this commit is merged: This commit makes it so that the readonly attribute of the sections and notes depends on the state of the move of the form. Currently, we want the readonly only if the parent is cancelled (cancel), locked (done) or posted (posted). --- Note on the fix: The addition of the sectionAndNoteIsReadonly() getter is the part of the fix that really allows the user to edit text that was previously uneditable. On the other hand, the override of the isCellReadonly method is only here to make sure no readonly classes like text-muted are applied if the cell is still editable. --- opw-4744367 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now prevents invited attendees from syncing older Outlook calendar events that they do not own before the organizer syncs them. This keeps meeting ownership correct and helps avoid duplicate or organizer-less events in Odoo and Outlook.
Original PR description
Before this commit, when an user A is invited by an event of user B and none of these users are synchronized with Outlook, when the synchronization of user A starts or resumes, the event will be…
Before this commit, when an user A is invited by an event of user B and none of these users are synchronized with Outlook, when the synchronization of user A starts or resumes, the event will be synchronized without any organizer in user A's Outlook calendar due to a limitation of Microsoft of not accepting creating events for other users (user B) directly. In the meanwhile, in Odoo, the event ownership will be transferred from user B to user A, which is also wrong. After this commit, when user A starts or resumes its synchronization with Outlook, previous Odoo events which user A is attendee but not organizer won't be synchronized until the organizer synchronizes its calendar. This will keep the ownership of the event intact in Odoo, and when the organizer synchronizes its calendar with Outlook, it will be correctly synchronized in Outlook as well. This approach will also reduce the possibility of duplicated events in Odoo side (and by transitivity, in Outlook side). task-4269432
This fixes an issue where invited calendar events could be sent to Google with the attendee incorrectly set as the organizer. Events now wait for the actual organizer to synchronize, keeping ownership consistent between Odoo and Google Calendar.
Original PR description
Before this commit, when an user A is invited by an event of user B and none of these users are synchronized with Google, when the synchronization of user A starts or resumes, the event will be synchronized with the user A as organizer in Google. In the meanwhile, in Odoo, the event ownership will be shown as user B, mismatching the organizer field between the two ends. This is problematic because the ownership of the event will be forever wrong in Google. After this commit, when user A starts or resumes its synchronization with Outlook, previous Odoo events which user A is attendee but not organizer won't be synchronized until the organizer synchronizes its calendar. This will keep the ownership of the event intact in Odoo, and when the organizer synchronizes its calendar with Google, it will be correctly synchronized in Google as well. task-4269432
Sharing a project no longer removes the project manager from the follower list. This keeps the responsible manager informed after collaborators are added, avoiding missed project updates.
Original PR description
**Issue:** When sharing a project, the project manager was accidentally removed from the project's followers **Steps to reproduce:** - create a new project. - in the project settings, click “Share Project”. - add a collaborator and share. The project manager disappears from the follower list, leaving only the new collaborator. opw-4764035
This fix stops the Point of Sale system from creating duplicate stock picking records when an existing order is paid. It ensures already-processed orders are not processed again, helping keep inventory movements and order records accurate.
Original PR description
Before this commit: =================== Two pickings were being created for existing POS orders when the order was paid. After this commit: =================== If an order is not in the draft state, there's no need to call _process_order, which was causing multiple pickings to be created for a single POS order. A check has been added to verify the state of the existing order before processing. opw-4790841 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When viewing a task in debug mode, opening a timesheet line from the embedded list now shows the dedicated timesheet form instead of the generic analytic item form. This reduces confusion and helps users edit timesheet details in the expected screen.
Original PR description
Before this commit, when the user is in debug mode and go to the form view of a task with some timesheets, he can optionally display the view button in the sub list view of timesheets. The problem is the view button will return the first form view found in timesheet model. Since timesheet model is in fact `account.analytic.line`, the first form view opened is the one used for Analytic Items and not for the timesheets. This commit alters the form view by using `form_view_ref` context key on timesheet_ids field to be able to load the expected form view. task-4781729
This fixes an issue where imported records could have user-provided property values replaced by default values during creation. Defaults are now only applied when no value was provided, helping preserve imported business data as intended.
Original PR description
When importing records that include values for "properties" fields, the current logic in `_add_missing_default_values` overwrites those values with defaults, even if the user explicitly provided them. After this commit we'll only use defaults if the value is not already set. opw-4714901
Fixed an issue where activating multiple empty analytic plans could cause the Profit and Loss report columns to display incorrectly. This helps accounting users rely on accurate report layouts when using analytic accounting configurations.
Original PR description
Steps to reproduce - Install Accounting - Go to settings and activate Analytic Accounting - Go to Configuration and create two analytic plans without any analytic accounts - Go to the Profit and Loss report - Activate the two new analytic plans -> the report is messed up in its columns Cause of the issue: When two analytic plans without any analytic account are present, they have the exact same forced_options, leading to the same column_group_key. task-4675686
Fixes an issue where the Timesheets custom grouping dropdown could close immediately in some browsers. Users can now select custom groups without the timer button unexpectedly taking focus.
Original PR description
**Steps to reproduce** Reproduced on Linux/Firefox. Not reproducible on all browsers. - Open Timesheets app. - Try to add a custom grouping via the "Add Custom Group" select. Bug: the dropdown closes immediately **Cause** Commit 72af4ca4d9859e7236a21cb71401d9f690c42eb6 added an event listener https://github.com/odoo/enterprise/blob/72af4ca4d9859e7236a21cb71401d9f690c42eb6/timesheet_grid/static/src/components/timesheet_timer_header/timesheet_timer_header.js#L41-L48 Depending on the browser, the first click on a `select` may not propagate to its anchestors all the way to the document `body`. However, if it does, the timer button is focused and the dropdown closes. **Solution** Exlude clicks on popover elments from focusing the timer Start/Stop button. opw-4768571
Portal users will no longer see internal document details such as company, website, locking user, or alias email in list views. This keeps customer-facing document views cleaner and prevents exposing fields meant for internal staff.
Original PR description
'website_id' and 'company_id' should be not visible to portal users
Uploaded documents on projects and tasks now inherit the related customer, so they appear from the customer's Documents smart button as expected. This helps users find customer-related project files consistently without manual correction.
Original PR description
### Steps to reproduce: - Navigate to any task that has a customer assigned to it - Upload a document using the attachment button in the chatter - Click on the Documents smart button in the task's form - Notice the document is shown there - Naviagte to the customer's profile and click on Documents smart button - Notice the document is not shown ### Cause: This is happening because when creating a document for the attachment we uploaded we don't assign a partner for it as we don't have an override for _get_document_partner neither in project.project nor project.task https://github.com/odoo/enterprise/blob/9b133b2cd03a726d330c87a1227903fc925b0ed5/documents/models/documents_mixin.py#L37 ### Fix: We override _get_document_partner in project.project and project.task to get the partner related to this project/task opw-4718592
Automatically created approval actions in Studio are no longer counted as custom code lines. This prevents automated system-generated items from affecting usage or billing metrics intended for user-created customizations.
Original PR description
…d not CLOC Before this commit, when approvals created action servers, there were part of the CLOC After this commit, they are not. opw-4784181
This fix makes an automated rental checkout test wait until rental time options are fully loaded before continuing. It reduces false build failures caused by timing issues, helping teams get more dependable test results without changing customer-facing behavior.
Original PR description
The rental_cart_update_duration tour was failing due to a timeout while selecting for the .o_time_picker_select:eq(0) element. This change add a wait step was to ensure the rental options are fully loaded before proceeding. Avoiding flaky behavior caused by timing issues in the UI. build_error-161173
This fixes an uninstall issue where worksheet templates could prevent related database tables from being cleaned up properly. It helps ensure modules can be removed and reinstalled cleanly, reducing failures in automated maintenance tests and avoiding leftover data problems.
Original PR description
During uninstall, fields (columns) bound to the module get deleted first, so the columns used for the search don't exist anymore and the search fails, which leads to the tables not being properly dropped, which can then lead to the module reinstallation not being clean e.g. because there are rows left in the table which can lead to constraints not being addable on install. This has been the cause of `resource` failing forever in the uninstall nightly test: it's most likely been failing since this hook was introduced.
WhatsApp message templates now use the web address tied to the specific customer record's company instead of a generic template value. This prevents customers from receiving links for the wrong company in multi-company setups, reducing confusion and failed interactions.
Original PR description
Previously, the WhatsApp template used the `base_url` from the template variable instead of deriving it from the specific `record`, leading to incorrect URLs in a multi-company environment. This caused issues where messages contained URLs from the wrong company, potentially confusing customers and breaking expected functionality. This fix ensures that the base URL is correctly retrieved from the `record`, aligning it with the active company context and preventing cross-company URL mismatches.
This fix prevents the automated subscription expiration process from replacing an already defined end date with the current date. Businesses keep accurate contract and billing period records when subscriptions are closed after their planned end date.
Original PR description
- 18.0 **Steps to Reproduce:** - Create a subscription with a custom end date (e.g., 2025-04-09). - Manually generate an invoice covering a specific period (e.g., March 10 to April 9). - Wait until after the end date has passed (e.g., run expiration cron on 10 April or later). - The expiration cron triggers and overwrites the manually set end_date with the current date **Issue:** - The expiration cron overrides the existing end_date of the subscription. **Cause:** - The _get_closing_end_date method sets the end_date unconditionally during closure, even when an end_date is already defined. **Solution:** - Update the _get_closing_end_date logic to return the existing end_date if it is already set and valid, preventing it from being overridden when called by the expiration cron. task-4703577
Miscellaneous changes
When the invoice can't be sent via Peppol, we are adding a footer in the Invoice email. We sent this regardless of the partner Peppol status. This PR narrows the cases when we sent the footer. Another issue is that "we recommend" Odoo, we are speaking in the name of our user. A better phrasing will make things fairer, such as this footer keeps its informative value, without being too pushy. task-4782004 Forward-Port-Of: odoo/odoo#209707 Forward-Port-Of: odoo/odoo#209432
Original PR description
When the invoice can't be sent via Peppol, we are adding a footer in the Invoice email. We sent this regardless of the partner Peppol status. This PR narrows the cases when we sent the footer. Another issue is that "we recommend" Odoo, we are speaking in the name of our user. A better phrasing will make things fairer, such as this footer keeps its informative value, without being too pushy. task-4782004 Forward-Port-Of: odoo/odoo#209707 Forward-Port-Of: odoo/odoo#209432
Versions -------- - 16.0+ Steps ----- 1. Enable abandoned cart reminder emails; 2. have an event with a limited number of seats; 3. open a cart for a ticket to the event; 4. abandon the cart; 5. have available seats fill up. Issue ----- You still get an email reminding you to buy the ticket, even though it's no longer available. As a consequence, you can still pay the sales order, but it won't get confirmed. Cause ----- There is no custom logic in place for `website_event_sa
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Enable abandoned cart reminder emails; 2. have an event with a limited number of seats; 3. open a cart for a ticket to the event; 4. abandon the cart; 5. have…
Versions -------- - 16.0+ Steps ----- 1. Enable abandoned cart reminder emails; 2. have an event with a limited number of seats; 3. open a cart for a ticket to the event; 4. abandon the cart; 5. have available seats fill up. Issue ----- You still get an email reminding you to buy the ticket, even though it's no longer available. As a consequence, you can still pay the sales order, but it won't get confirmed. Cause ----- There is no custom logic in place for `website_event_sale` to filter out abandoned carts with tickets that are no longer eligible. Additionally, the `is_sold_out` field of tickets can be `False` while the event's `event_registrations_sold_out` field is `True`. Solution -------- - Add the event's `event_registrations_sold_out` field as a dependency to `event.event.ticket`'s `_comute_is_sold_out` method. - Add an override for `_filter_can_send_abandoned_cart_mail` which filters out carts with tickets that are sold out, or events with no free places remaining. opw-4453539 Forward-Port-Of: odoo/odoo#209565 Forward-Port-Of: odoo/odoo#199877
On slow networks, users or runbot may click checkboxes before the JavaScript is fully loaded by the lazy loader, causing event handlers to not be attached. Fix: Split the test into two separate tours. One while logged in for donation configuration, and another while logged out to test it, since the issue does not occur when the iframe is not present. **Tested with a custom multi-build and the test do not fail anymore** runbot-77224 Forward-Port-Of: odoo/odoo#179885
Original PR description
On slow networks, users or runbot may click checkboxes before the JavaScript is fully loaded by the lazy loader, causing event handlers to not be attached. Fix: Split the test into two separate tours. One while logged in for donation configuration, and another while logged out to test it, since the issue does not occur when the iframe is not present. **Tested with a custom multi-build and the test do not fail anymore** runbot-77224 Forward-Port-Of: odoo/odoo#179885
With Jordan Company setup: - Set dummy values on the Jordan electronic invoicing settings - Enable USD, set a rate and currency precision to 5 - Set the Product Price decimal accuracy to 5 - Make an invoice in USD adding a line as follows: - Price 0.13793 - Qty 9 - Discount 100% - Tax: 16% - Confirm - Send & Print, activate e-invoice (JoFotara (Jordan EDI)) Issue will raise: ``` odoo.addons.base.models.ir_qweb.QWebException: Error while render the template Template: accou
Original PR description
With Jordan Company setup: - Set dummy values on the Jordan electronic invoicing settings - Enable USD, set a rate and currency precision to 5 - Set the Product Price decimal accuracy to 5 - Make an…
With Jordan Company setup: - Set dummy values on the Jordan electronic invoicing settings - Enable USD, set a rate and currency precision to 5 - Set the Product Price decimal accuracy to 5 - Make an invoice in USD adding a line as follows: - Price 0.13793 - Qty 9 - Discount 100% - Tax: 16% - Confirm - Send & Print, activate e-invoice (JoFotara (Jordan EDI)) Issue will raise: ``` odoo.addons.base.models.ir_qweb.QWebException: Error while render the template Template: account_edi_ubl_cii.ubl_20_MonetaryTotalType Path: /t/t/cbc:TaxInclusiveAmount Node: <ns0:TaxInclusiveAmount xmlns:ns0="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" t-att-currencyID="vals[\'currency\'].name" t-out="format_float(vals.get(\'tax_inclusive_amount\'), vals.get(\'currency_dp\'))"/> ``` This occurs because on high currency precision we may work with numbers that are represented in scientific notation (-2e-09) that when converted to string may keep the literal form unless using a specific format opw-4739342 Forward-Port-Of: odoo/odoo#209624
**Issue:** Some tests are failing when "account" module is not installed because they use "account.group_account_invoice". **Solution:** Skip these tests if "account" module is not installed. runbot-163123 runbot-163124 runbot-163125 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209719 Forward-Port-Of: odoo/odoo#209661
Original PR description
**Issue:** Some tests are failing when "account" module is not installed because they use "account.group_account_invoice". **Solution:** Skip these tests if "account" module is not installed. runbot-163123 runbot-163124 runbot-163125 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209719 Forward-Port-Of: odoo/odoo#209661
Before this commit, when a product had multiple taxes, the X report was displaying a wrong total base tax amount. This was due to the fact that the tax amount was being calculated as the sum of all the tax bases. This was wrong as the amount tax excluded of the product sold was included twice in this sum. opw-4727830 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208642
Original PR description
Before this commit, when a product had multiple taxes, the X report was displaying a wrong total base tax amount. This was due to the fact that the tax amount was being calculated as the sum of all the tax bases. This was wrong as the amount tax excluded of the product sold was included twice in this sum. opw-4727830 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208642
Versions -------- - 16.0+ Steps ----- 1. Have multiple companies; 2. create an eWallet program available to all companies; 3. set its email template to "Gift Card: Gift Card Information"; 4. create & confirm an order containing the "Top-up eWallet" product; 5. switch to a different company; 6. create an new order for the same client. Issue ----- Access Error Cause ----- Commit eaa6f6c5a415f added the `_get_mail_author` method to ensure gift card emails always have an author
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have multiple companies; 2. create an eWallet program available to all companies; 3. set its email template to "Gift Card: Gift Card Information"; 4. create &…
Versions -------- - 16.0+ Steps ----- 1. Have multiple companies; 2. create an eWallet program available to all companies; 3. set its email template to "Gift Card: Gift Card Information"; 4. create & confirm an order containing the "Top-up eWallet" product; 5. switch to a different company; 6. create an new order for the same client. Issue ----- Access Error Cause ----- Commit eaa6f6c5a415f added the `_get_mail_author` method to ensure gift card emails always have an author. When using the gift card template for eWallets, this can cause an issue for 2 reasons: 1. When creating an eWallet via the top-up product, its `order_id` is the order that created the eWallet. This order may belong to a different company than the one it is getting used for. 2. The `send_reward_coupon_mail` method fetches its coupons by calling `_get_reward_coupons` on the order. This returns any applied eWallets, therefore calling `_send_creation_communication` whenever the eWallet gets used. The reason it returns applied eWallets as a "reward coupon" is because `_update_programs_and_rewards` creates `sale.order.coupon.points` records with 0 points when applying a `loyalty.card`, which then get assumed to be a reward, despite not granting any points: https://github.com/odoo/odoo/blob/9e22dbb7b6fb581d2f11bf0ec48b230047686050/addons/sale_loyalty/models/sale_order.py#L499-L504 Solution -------- 1. In the `_get_mail_author` yield to `super` if the order's company isn't in `self.env.companies`. 2. In the `_get_points_programs` and `_get_reward_coupons` methods, filter out `coupon_point_ids` that don't grant any points. (Alternatively, we could avoid creating `sale.order.coupon.points` records with 0 points, but this might be risky for stable.) opw-4731588 Forward-Port-Of: odoo/odoo#209515 Forward-Port-Of: odoo/odoo#208637
Steps to reporduce: - Make two orderlines that are cannot be merged with same product (add a comment, combo, etc ...) - Open the split bill screen - Selecet any of the orderlines and try to unselect it - Impossible to unselect the orderlines with same product but different line Fix: Calculate the line quantity selected based on the linked order line quantity and not the total number of same product in the order. Description of the issue/feature this PR addresses: Current behavior
Original PR description
Steps to reporduce: - Make two orderlines that are cannot be merged with same product (add a comment, combo, etc ...) - Open the split bill screen - Selecet any of the orderlines and try to unselect it - Impossible to unselect the orderlines with same product but different line Fix: Calculate the line quantity selected based on the linked order line quantity and not the total number of same product in the order. 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#209332 Forward-Port-Of: odoo/odoo#208640
In the case where the name of the related partner is changed, the bank account holder name will not reflect the changes, we add here a dependency on partner_id.name Forward-Port-Of: odoo/odoo#209436
Original PR description
In the case where the name of the related partner is changed, the bank account holder name will not reflect the changes, we add here a dependency on partner_id.name Forward-Port-Of: odoo/odoo#209436
This commit adds an `await animationFrame()` in a reference field test. This makes the first assertion relevant, as it wasn't before (the view could never be there instantly). It also makes the test more robust as it could sometimes fail for the second assertions (race condition), see https://runbot.odoo.com/runbot/build/80157085 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the
Original PR description
This commit adds an `await animationFrame()` in a reference field test. This makes the first assertion relevant, as it wasn't before (the view could never be there instantly). It also makes the test more robust as it could sometimes fail for the second assertions (race condition), see https://runbot.odoo.com/runbot/build/80157085 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#209474
The live chat uses a shadow DOM to preserve its styles. However, shopify hides empty block. Since the live chat root only contains the shadow DOM, it is considered empty which leads to the chat bubble not being displayed. This commit fixes the issue by explicitly setting the "display" style on the live chat root. opw-4768389 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CL
Original PR description
The live chat uses a shadow DOM to preserve its styles. However, shopify hides empty block. Since the live chat root only contains the shadow DOM, it is considered empty which leads to the chat bubble not being displayed. This commit fixes the issue by explicitly setting the "display" style on the live chat root. opw-4768389 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#209592
Issue: ------------ The width of the "Upload and Set" button did not adjust based on its text, resulting in the text being clipped. Fix: ----------- This commit enables automatic width adjustment for the "Upload and Set" button to ensure both the button and its text are fully visible on the same line. Steps to Reproduce (mobile view): ------------------ - Install the project module - Open the task Kanban view - Click on Set Cover Image task-3761269 Forward-P
Original PR description
Issue: ------------ The width of the "Upload and Set" button did not adjust based on its text, resulting in the text being clipped. Fix: ----------- This commit enables automatic width adjustment for the "Upload and Set" button to ensure both the button and its text are fully visible on the same line. Steps to Reproduce (mobile view): ------------------ - Install the project module - Open the task Kanban view - Click on Set Cover Image task-3761269 Forward-Port-Of: odoo/odoo#160913
Description of the issue this commit addresses: When multiple lines that are in budget on their own are above budget when summed together, neither the lines nor the budget button show that the budget will be exceeded. This leads to making purchase orders that shouldn't be made. --- Desired behavior after this commit is merged: This commit makes it so that when the lines together will exceed the budget, the budget smart button and all the lines become red as a single line would.
Original PR description
Description of the issue this commit addresses: When multiple lines that are in budget on their own are above budget when summed together, neither the lines nor the budget button show that the budget will be exceeded. This leads to making purchase orders that shouldn't be made. --- Desired behavior after this commit is merged: This commit makes it so that when the lines together will exceed the budget, the budget smart button and all the lines become red as a single line would. --- task-4710838 Forward-Port-Of: odoo/enterprise#84653
In case of a multi-company enabled database, it was possible to assign a journal to an online account of a different company, which didn't make much sense. Forward-Port-Of: odoo/enterprise#84909 Forward-Port-Of: odoo/enterprise#82080
Original PR description
In case of a multi-company enabled database, it was possible to assign a journal to an online account of a different company, which didn't make much sense. Forward-Port-Of: odoo/enterprise#84909 Forward-Port-Of: odoo/enterprise#82080