Monday, February 2, 2026
21 changes · saas-19.1
New functionality added to Odoo
This update adds support for processing payments through Mollie payment terminals directly in the Point of Sale (POS) system. Users can link their Mollie account and the system will initiate payments via the Mollie API, with automatic notifications upon completion. Refunds are also supported without requiring customers to re-enter their card details.
Original PR description
This commit adds the `pos_mollie` module which implements payments via Mollie payment terminals in the POS. Since Mollie was already supported for online payments via the `payment_mollie` module, this module depends on it so they can share the same API credentials. The user links their Mollie account via an API key, and provides the ID of their payment terminal in the payment method. The Odoo DB can then initiate payments on the terminal via the Mollie API. When the payment completes, Mollie calls a webhook endpoint on the Odoo DB which then notifies the POS of the outcome. Refunds are also supported, they do not require the client to present their card again, the payment is simply reversed. task-5474076 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242836
This update allows the POS system to automatically send SMS or WhatsApp messages to customers regarding their order status – from initial placement to completion. This enhances customer communication and provides real-time updates, improving the overall customer experience. The changes were made to support both WhatsApp and SMS notifications for self-service orders.
Original PR description
… to warn the client about order status This task aims to provide a solution for communicating the status of various customer orders. Now, the POS can send an SMS or a WhatsApp message when an order at the self-service is placed, either through WhatsApp, SMS, or both. When the order is completed, the customer can also be notified. task : 5246552 enterprise pr : https://github.com/odoo/enterprise/pull/99318 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235389
Enhancements to existing features
This update ensures the TDS XLSX report for Russian tax compliance is now aligned with official utility formats. By integrating partner data from AML records, the report now accurately handles miscellaneous entries, resolving previous formatting issues and improving data reliability for tax reporting.
Original PR description
This commit aligns the TDS XLSX report with the official TDS utility format. Additionally, We now fetch the partner from AML record, so even miscellaneous entries generate a correctly formatted XLSX sheet. task-5237518 Forward-Port-Of: odoo/enterprise#104753
Resolved issues and error corrections
This update fixes an issue where users couldn't edit the 'Email From' and 'Reply To' fields in marketing email templates. Previously, these fields were automatically set to 'done', preventing customization. Now, these fields are fully editable, allowing for greater flexibility in campaign design and communication.
Original PR description
Currently when a user creates a new template from a marketing campaign, they can’t edit the `email_from` and `reply_to` fields, even though these should be editable in the template. **Steps to…
This update allows you to easily update all your Odoo modules using a single command. Previously, updating modules was limited and could cause unexpected issues. Now, the `odoo-bin` command can update all installed modules with the latest versions, streamlining the update process.
Original PR description
Before this commit: Using the CLI, there is no practical way to update any modules with an updated version. Running: `$ odoo-bin module upgrade base --outdated` would not work as intended as it would…
Before this commit: Using the CLI, there is no practical way to update any modules with an updated version. Running: `$ odoo-bin module upgrade base --outdated` would not work as intended as it would check version change only on the `base` module. Even if it worked, this would update every module. This is not the point here as it could cause side effects if not used properly After this commit: Enhanced module update logic to support updating all installed modules when `all` is passed in the argument. Running: `$ odoo-bin module upgrade all --outdated` will update all modules for which the version has been updated Note: `all` keyword as been used to be coherent with `--update all` CLI command, see: https://www.odoo.com/documentation/19.0/developer/reference/cli.html#cmdoption-odoo-bin-u Documentation PR: odoo/documentation#15513 Extension from: https://github.com/odoo/odoo/pull/202571 Feature proposed on: https://github.com/odoo/odoo/pull/202571#discussion_r2128993414 Task [link](https://www.odoo.com/odoo/project.task/4585261) task-4585261 Forward-Port-Of: odoo/odoo#237780
This update simplifies the setup of salary rules within Odoo by improving the display of options in the list view and streamlining the selection process. The changes enhance readability and ensure that salary rules are configured more efficiently, reducing potential errors.
Original PR description
This commit refactors the way input default values are handled in the Salary Rule configuration to support dynamic data types and improves the readability of the rule selector list view. Changes: 1. List View Improvements: - Added a computed field `list_display_default_value` to `hr.salary.rule`. - This field dynamically returns the correct default value string based onnthe `input_unit` (Text, Selection, or Checkbox), ensuring the List View displays a single, populated column instead of multiple sparse columns. 2. Dynamic Selection Options: - Replaced the `input_default_selection` dropdown on the parent record with an `is_default` boolean flag on the child options line. - Added a Python constraint to ensure only one option can be flagged as default per rule. 3. Views: - Updated `hr.salary.rule` form view to include the new One2many options list. - Updated `hr.salary.rule.selector.list` to use the new smart display field.
This update enhances the POS system by automatically sending SMS and WhatsApp messages to customers regarding their order status – from initial placement to completion. This provides real-time updates, improving customer satisfaction and streamlining the ordering process. The changes impact the POS and related order management modules.
Original PR description
… to warn the client about order status This task aims to provide a solution for communicating the status of various customer orders. Now, the POS can send an SMS or a WhatsApp message when an order at the self-service is placed, either through WhatsApp, SMS, or both. When the order is completed, the customer can also be notified. task : 5246552 community pr : https://github.com/odoo/odoo/pull/235389 Forward-Port-Of: odoo/enterprise#99318
Currently when a user creates a new template from a marketing campaign, they can’t edit the `email_from` and `reply_to` fields, even though these should be editable in the template. **Steps to replicate:** * Install `marketing_automation` * marketing automation > Create a New campaign > Add a new activity * Mail template > Create a new template > Settings **Observed Behavior:** The fields `Send From` and `Reply To` are not editable which should be editable. **Root cause:** * After commit [1], the form view `mailing_mailing_view_form_marketing_activity` [2] was removed, so `email_from` and `reply_to` now come from the view [3]. Because that view inherits the `mass-mailing form`, its `readonly` rules apply (see [4]), and with `default_state` set to “done” (see [5]), those fields become `readonly` when creating a new mail template. **Solution:** Modify the readonly conditions to match how they were handled in earlier versions (see [6]). **Before:** <img width="1182" height="591" alt="image" src="https://github.com/user-attachments/assets/72006a7f-1ee5-40dd-8899-4eb932f503b7" /> **After:** <img width="1182" height="591" alt="image" src="https://github.com/user-attachments/assets/d5d6bdf2-1fb6-4e7b-9527-412c44986050" /> [1]: https://github.com/odoo/enterprise/commit/a469218b32943ddaa83271565e73311cfd188f84 [2]: https://github.com/odoo/enterprise/blob/97f6f87cca3939e48d3488672aba0df68acd8f9b/marketing_automation/views/mailing_mailing_views.xml#L75-L143 [3]: https://github.com/odoo/enterprise/blob/307b23b0f6b377c43463a04aabf0b2f03c256072/marketing_automation/views/mailing_mailing_views.xml#L107 [4]: https://github.com/odoo/odoo/blob/9e04aadb83d482d05fc2fa66fa3c3bebb6ac1528/addons/mass_mailing/views/mailing_mailing_views.xml#L328-L337 [5]: https://github.com/odoo/enterprise/blob/97f6f87cca3939e48d3488672aba0df68acd8f9b/marketing_automation/views/marketing_activity_views.xml#L23 [6]: https://github.com/odoo/enterprise/blob/97f6f87cca3939e48d3488672aba0df68acd8f9b/marketing_automation/views/mailing_mailing_views.xml#L96 opw-5401422,5449345,5369836 Forward-Port-Of: odoo/enterprise#101807
This update resolves an issue in the report editor where Chrome browsers incorrectly handled selections within t-if/t-else structures. This fix ensures that editor commands like adding fields work reliably across Chrome, improving the user experience for PDF quote report editing. The change was triggered by a bug in Chrome's selection API.
Original PR description
This happens only on Chrome, when switching between two identical t-if/else structures. In Odoo's t-if/t-else structures, Chromium may fail to properly update the selection when switching between two…
This happens only on Chrome, when switching between two identical t-if/else structures. In Odoo's t-if/t-else structures, Chromium may fail to properly update the selection when switching between two structurally identical elements via the group switcher. This happens because Chrome's implementation of the [Selection API](https://www.w3.org/TR/selection-api/#selectionchange-event) contains an optimization that suppresses the 'selectionchange' event if the new Range has the same logical coordinates (Node type and Offset) as the previous one, even if the underlying DOM node reference has changed. This can break editor commands such as `/table` or `/field` like in the following steps: Steps: - Install `sale_management` and `web_studio` - Open report editor on PDF Quote - Add a new column to the left in the table - Click on the table body - Select `t-else` in the group switcher - Click again at the same place - (Here the selection is not correctly set by chromium) - Try to use `/field` to add a field - It will not work as field selector doesn't have the right selection You can use this [video](https://drive.google.com/file/d/1ua7nlla7km1_l-wqgL8zeHaM-tFLA9jJ/view) to reproduce it easily or you reproduce it [here](https://stackblitz.com/edit/javascript-v65edaq5?file=index.html,index.js) If you click after the “1” and then after the “2,” you will see that Chromium does not fire the selectionchange event, whereas Firefox does. This commit fixes this by adding a "removeAllRanges()" to force Chrome to "forget" the old range. This ensures that the next selection is correctly treated. opw-5219989 Forward-Port-Of: odoo/odoo#244743
This update resolves an issue where users couldn't see all available Starshipit delivery services. The fix ensures Odoo sends complete shipment details to Starshipit, allowing users to select the correct service based on their order information, leading to a smoother and more accurate delivery setup process.
Original PR description
Current behaviour: Users are unable to select certain Starshipit delivery services. Delivery methods are configured in Odoo before address or package data is available. Since Starshipit requires this…
Current behaviour: Users are unable to select certain Starshipit delivery services. Delivery methods are configured in Odoo before address or package data is available. Since Starshipit requires this data to determine availability, it returns an incomplete list during setup. Expected behaviour: Users should be able to view and select from the complete list of valid delivery services based on the actual Sales Order details (address, weight, and volume). Steps to reproduce: 1. Create new delivery method 2. Configure Starshipit API credentials. 3. Attempt to select a service. 4. Observe that not all service is shown from the available options. Cause of the issue: Starshipit filters services based on sender, receiver, and package info. Odoo requests the service list during initial configuration without this context, resulting in an incomplete list of methods. Fix: Introduce a mechanism in the Sales Order flow to add delivery methods. Send the complete shipment details (addresses, weight) to Starshipit to retrieve the accurate list of services and allow the user to select them. Forward-Port-Of: odoo/enterprise#103316
This update resolves an issue where the UBL export incorrectly interpreted VAT indicators (specifically the '/' symbol). It ensures that VAT information is accurately represented in UBL documents, complying with PEPPOL standards. This fix is important for accurate invoice processing and compliance with international regulations.
Original PR description
To signify that you know a partner does not have vat, we advise using '/'. But we should take care of that in the UBL export, to not consider it a real vat Also, in the cases where we don't have the vat, the CompanyID is supposed to be mandatory. https://docs.peppol.eu/poacc/billing/3.0/syntax/ubl-invoice/cac-TaxRepresentativeParty/cac-PartyTaxScheme/ So, remove the whole PartyTaxScheme if vat is not present. Zatca does not override that rule (except enforcing that seller must have vat, which raises a constraint), so we modify the tests for the simplified documents. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245627 Forward-Port-Of: odoo/odoo#238499
This update corrects a bug that caused incorrect overtime calculations when multiple overtime lines were assigned to consecutive time periods. The fix ensures that each overtime line is properly tracked and allocated, preventing errors in overtime reporting. This improves the accuracy of time tracking for employees.
Original PR description
To reproduce: ============= 1. Create an new Overtime Ruleset using these options: - The rule is based on: Timing - With tolerance in favor of the employer of: 00:00 - If the employer works: Outside…
To reproduce: ============= 1. Create an new Overtime Ruleset using these options: - The rule is based on: Timing - With tolerance in favor of the employer of: 00:00 - If the employer works: Outside of a specific schedule - Schedule: 40/hour work week - Pay extra hours: with rate of 100% - Work entry type to use: Overtime Hours - Give back as time off 2. Create an employee or edit an existing employee to use the overtime ruleset in the settings of the form view of the employee. 3. Navigate to attendance and create a new entry for that employee. 4. Make clock in time and clock out time run through a Friday. For example: Clock in: 12/22/2025 12:00:00 AM Clock out: 12/26/2025 6:30:00 AM 5. Then edit the entry to run through the Saturday or Sunday. For example: Clock out: 12/27/2025 6:30:00 AM 6. Navigate to Work Entries and navigate to the month or week that that entry was made at. 7. There should be a traceback error for more than one overtime line related to that specific entry. Problem: ======== When allocating multiple overtime lines to consecutive time periods, the `_set_real_overtime_intervals` method was merging them into single intervals with recordsets of overtime lines (e.g., hr.attendance.overtime.line(102, 106, 103, 104)) instead of keeping each overtime line in its own separate interval. This happened because the allocation logic incorrectly calculated the position within intervals and subtracted the wrong duration from remaining overtime, causing the `|=` merge operator to combine adjacent allocations into recordsets. Solution: ========= Refactored the overtime allocation loop to maintain singletons opw-[5468598](https://www.odoo.com/web#id=5468598&view_type=form&model=project.task) Forward-Port-Of: odoo/enterprise#105555
This update fixes an issue where attendee information wasn't correctly populated during event registration in the POS system. The change ensures that the first valid answer to identification questions (name, email, etc.) is used, prioritizing it over subsequent answers. This improves data accuracy and consistency for event attendee records.
Original PR description
When pos_event was added, a difference in behavior with the existing registration flow in website_event was missed. When answering an 'identification question' (name, email, phone, company_type) with…
When pos_event was added, a difference in behavior with the existing registration flow in website_event was missed. When answering an 'identification question' (name, email, phone, company_type) with the 'once per order' enabled, the values should be used and propagated directly on the created event.registration records, with precedence over other answers given to individual questions (not once per order) STEPS ===== 1. Create a new event with name, email questions, once per order ticked. 2. Go to POS (reload data if needed) 3. Register and answer both questions 4. Continue the pos flow until both registrations are created 5. Go to backend > your event > registrations 6. You can see that even if the answers are propagated in the o2m field registration_answer_ids, which is expected, the attendee's name and attendee's email fields are empty. They should contain the values of step 3. FIX === Align the website_event flow and precedence of OPO questions over individual answers in pos_event. Now, the first non-null answer of an OPO question will be used for each of the question_type values listed above, if any, over answers to individual questions. Also align the fact that after OPO answers, precedence should be given to the first non-null answer to a given question type for identification questions, and not the last as it is currently. Task-4919080 Forward-Port-Of: odoo/odoo#231502
This update addresses a potential source of instability in Odoo by ensuring SQL queries only access tables within the current database schema. Previously, Odoo was unintentionally using older schema data, leading to unexpected bugs and inconsistent behavior during startup and add-on installations. This change improves overall Odoo stability and reliability.
Original PR description
Description of the issue/feature this PR addresses: This is an addition to: - [x] #243833 - [x] #243967 Current behavior before PR (use case): - in database `odoodb` there's 2 PG schema `odoo_data` and `data_backup` - schema `data_backup` contains tables from an old version of Odoo - search_path is set to `odoo_data, "$user", public` (seen with `SHOW search_path;`) - so the `data_backup` schema should be ignored Then when you start Odoo, or install add-ons: - you experience inconsistent behavior, and strange bugs - this is due to SQL queries having access to the tables, and indexes in the other schema `data_backup` Desired behavior after PR is merged: - Odoo should ignore tables, indexes and objects which are not in the `current_schema`. @kmagusiak --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246440
This update ensures that delivery carriers set on pickings are consistently applied to subsequent transfers, even when not initially defined in the sales order. This change addresses a previous limitation where carrier settings weren't automatically propagated, particularly in multi-step delivery flows managed by logistics teams. It improves delivery accuracy and streamlines the carrier selection process.
Original PR description
Issue Before This Commit: ================================ Previously, the delivery carrier was only propagated between pickings when it was set from the sale order. If the carrier was manually set…
Issue Before This Commit: ================================ Previously, the delivery carrier was only propagated between pickings when it was set from the sale order. If the carrier was manually set on a picking (e.g., during the packing step in a multi-step delivery flow), it was not propagated to the consequent pickings, even when the stock rules had `Propagation of carrier` enabled. Steps to reproduce: ================================ 1. Activate Multi-Step Routes and Delivery Methods. 2. Configure a 3-step delivery route in the warehouse and enable Propagate Carrier on all rules. 3. Create a sale order with a product but without setting a delivery carrier. 4. Confirm the sale order to generate picking. 5. On the first picking (i.e., pick), manually set a delivery carrier (e.g., Local Delivery) and validate. 6. On the next transfer (i.e., pack), observe that the delivery carrier is not propagated. After this commit: ================================ The delivery carrier set on any picking is propagated to subsequent transfers when the corresponding stock rule has `Propagation of carrier` enabled and no carrier is already configured on the next picking. This ensures consistent carrier propagation across all routing configurations (all pull rules, all push rules, and mixed push/pull flows), even when the carrier is configured at the picking level rather than on the sale order. This behavior is required because, in many business scenarios, carrier selection is managed by the logistics team rather than the sales team. task-4454313 Forward-Port-Of: odoo/odoo#243597 Forward-Port-Of: odoo/odoo#202700
This update resolves an issue where canceling multiple Point of Sale orders caused a system crash. The fix ensures the correct argument format is passed to the cancellation function, allowing users to reliably cancel multiple orders at once. This improves the stability and functionality of the Point of Sale module.
Original PR description
In 3f95dd4413d3e72637ef92a1b02bddc1d9c6d165, we can call `cancel_order_from_pos` with either one or more orders; In the case of calling it with multiple orders, we were passing as argument an array of order ids as params for the python method, but since the method only expects a single argumetn, `self`, it will crash if we passed an array. The fix is to pass `[[1, 2, 3]]` instead of `[1, 2, 3]` for multiple orders. This still works for a single order too as both `[1]` and `[[1]]` works.
This update resolves an issue where parallax labels were missing when editing custom website snippets. By registering snippet models during the builder process, the editor and preloaded versions now share consistent overrides, ensuring that parallax labels are correctly computed and displayed in the snippet preview modal. This improves the user experience for customizing website content.
Original PR description
Steps to reproduce: - Go to a website page. - Enter Edit mode. - Save a "s_cover" snippet as a custom block. - Reopen the snippet preview modal. => The "Parallax" label is missing for the custom "s_cover" snippet. Before this commit, website and mass mailing snippet overrides were patched only when the builder mounted, while snippets were already preloaded before entering edit mode (since this commit [1]). After this commit, snippet models are registered per snippets set and are used when the model is created, so preload and editor share the same overrides and parallax labels are computed correctly. [1]: https://github.com/odoo/odoo/commit/06ad29904cc8c2d93b61fcf7f6a111e10de23a2e task-5156137
This update corrects a bug that prevented users from clicking the 'Validate' button after an invalid barcode scan within stock picking workflows. The fix reverts a previous attempt to manage concurrency, relying instead on the framework's built-in mutex mechanism for reliable validation processing. This ensures accurate stock updates and avoids potential errors.
Original PR description
### Steps to reproduce: - In the settings enable: Multi-Steps route - Create a product tracked by SN - In the barcode app > Operations > Internal transfers > New - Scan you tracked product - Click on…
### Steps to reproduce: - In the settings enable: Multi-Steps route - Create a product tracked by SN - In the barcode app > Operations > Internal transfers > New - Scan you tracked product - Click on Validate > Invalid operation - Scan a Serial number #### > You can not click on validate anymore ### Cause of the issue: The issue has been introduced in 41c6e7a90fd4f0cf84e74cf0ed036f4da0ec6112 in a try to avoid concurrency issue when calling the barcode validation too quickly. To be more precise, this commit added a `isValidating` property to the barcode model that is set prior to the rpc call and suppose to remove after in order tobypass subsequence calls of the `validate` method when a call is already in progress: https://github.com/odoo/enterprise/blob/099c7b94ad08f83873c05ec528e16fbf806f47f2/stock_barcode/static/src/models/barcode_model.js#L477-L494 However, in the present case and since orm call returns an error the the call the validate method is interupted at this orm call and the line https://github.com/odoo/enterprise/blob/099c7b94ad08f83873c05ec528e16fbf806f47f2/stock_barcode/static/src/models/barcode_model.js#L494 is not executed so that the this.Validating stays true and the button can not be clicked nor executed anymore: https://github.com/odoo/enterprise/blob/099c7b94ad08f83873c05ec528e16fbf806f47f2/stock_barcode/static/src/models/barcode_model.js#L131-L133 ### Fix: We revert the incorrect fix: 42d77e751cb5e049ea1e81b44fca0d07e8f45b32 and we rather rely on the Mutex class of the JS framework just as done in the `_processBarcode`: https://github.com/odoo/enterprise/blob/099c7b94ad08f83873c05ec528e16fbf806f47f2/stock_barcode/static/src/models/barcode_model.js#L505-L507 This will ensure that the validation calls will be processed sequentially and since the `button_validate` of stock pickings is ignored on done pickings because of the first soft fix https://github.com/odoo/odoo/pull/204790 : https://github.com/odoo/odoo/blob/1664daf894ec878b64af8ab75c0d10f05e00df80/addons/stock/models/stock_picking.py#L1134-L1135 we have the guarantee that the records will not be validated twice. opw-5388297 Forward-Port-Of: odoo/enterprise#105542 Forward-Port-Of: odoo/enterprise#103835
This update resolves a technical issue that caused the builder interface to crash when a specific review option was selected. The fix ensures the necessary components are correctly linked, preventing the builder from becoming unusable. This improves the stability and reliability of the mass mailing builder for all users.
Original PR description
This commit fixes an issue with the s_reviews_wall snippet which makes the builder crash if it selected. The issue was that the BorderConfigurator used on the option's template wasn't specified in the option's components. Leading to a crash that renders the builder inoperable. task-5380467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246505
This update fixes an issue where credit notes weren't properly reversing commissions, leading to inaccurate purchase order reporting. The change creates a new, negative commission line for credit notes, ensuring accurate commission reversals and proper accounting for refunds. This improves the reliability of commission tracking.
Original PR description
**Steps to reproduce:** * Install the **Accounting** and **partner_commission** modules. * Create a contact and set a **commission plan (e.g. 50%)** in the *Partner Assignment* tab. * Create and…
**Steps to reproduce:** * Install the **Accounting** and **partner_commission** modules. * Create a contact and set a **commission plan (e.g. 50%)** in the *Partner Assignment* tab. * Create and confirm a customer invoice with multiple lines (e.g. 750, 750). * Then go to **Dashboard → Transactions**, create a new transaction (e.g. 750) and reconcile it with the created invoice. * Create a **credit note** from the invoice and confirm it. * Open the contact and access **Purchase Orders** from the stat button. **Observed behavior:** * Only the commission line from the original invoice appears in the partner purchase order. * No **negative commission line** is created for the credit note. **Cause:** * Credit notes reused the original commission linkage instead of generating a dedicated commission entry. * This prevented commission reversal from being recorded for refunds. **Fix:** * Generate a **separate commission line** with a negative amount for each credit note. * Assign a dedicated `commission_po_line_id` to credit notes. * Copy only the `referrer_id` to credit notes, not the original commission line reference. opw-5357773 Forward-Port-Of: odoo/enterprise#103328
This update enhances how users access messages within Odoo, ensuring consistent behavior for searching and reading. Specifically, it corrects a previous issue where message access checks were not applied correctly, leading to inconsistencies across different user contexts and portal access. This improves the overall user experience and data accuracy.
Original PR description
Message access is notably based on related document, given their (model, res_id) pair. Model may customize the required access on it in order to access their message. For example, you generally need…
Message access is notably based on related document, given their (model, res_id) pair. Model may customize the required access on it in order to access their message. For example, you generally need write access to create a message (post) but on some models you can post when you can read. Calendar events message access depends on calendar privacy settings. This is controlled via '_get_mail_message_access'. However currently it is "globally called", for all documents. It should be done on a per-document basis, as each document could define different access check. Keep code somewhat optimized by doing access checks in batch for a given operation. Make _search and read symmetric. Reading documents should be allowed on search results, and search results should match what is available for reading. Portal users have some specific domains applied when accessing messages, see notably odoo/odoo@9cd9aaaa174ae1f2a0af12143a34eb4682ea6f59 (but also check for 'website_message_ids' domain, mail controllers, ...). However there are still some cases where search and read are not coherent with portal users. This is not really annoying as most messages are accessed using sudo and correctly tailored domains via controllers but let us try to have a more correct code. Fix discuss display of chatter-related buttons * not taking into account '_get_mail_message_access' to check if user has right to post (generally used to indicate users can post on readonly records, but not limited to that); * not adding the same check on Activities button as on Send message and Log note. We consider generally that rights should be aligned and UX should match that behavior; * not adding the same check on attachments buttons, currently limited to write access (or always accessible). This is a preliminary work for attachments, further fixes are probably incoming; Mainly a backport of master improvement done at https://github.com/odoo/odoo/pull/214705 . Task-5138368 opw-4785878 Forward-Port-Of: odoo/odoo#245736 Forward-Port-Of: odoo/odoo#233725
This update resolves an issue that occurred when orders with 100% discounts and shipping costs were processed through the Express Stripe checkout. The fix allows for a zero minor amount, preventing a technical error and ensuring correct discount application. This improves the reliability of the checkout process for all users.
Original PR description
### Issue: Due to this issue, there is a traceback, in express stripe checkout when there is a 100% discount and shipping cost. Steps to reproduce: 1- Setup `Stripe` as the only payment provider in the db. 2- Create a discount code with 100% discount on order. 3- Set a fixed price on the delivery method. 4- On shop, add a product to cart, and then enter the discount code. 5- Refresh the page. There is a traceback. #### Cause: This issue is introduced after #209103, which set `minor_amount` to amount excluding delivery. In the case it's 0, it's not going to be rendered on express_checkout view as it is false. Which cause a traceback here: https://github.com/odoo/odoo/blob/8f7e3d588c6c1189e64442a33037666d5d70aae7/addons/payment_stripe/static/src/js/express_checkout_form.js#L73-L81 opw-5482646 Forward-Port-Of: odoo/odoo#246643 Forward-Port-Of: odoo/odoo#246355