Daily updates from Odoo
Monday, February 2, 2026
53 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
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 simplifies the mention plugin in Odoo by removing unnecessary protections around mention nodes. This change improves performance and reduces complexity within the composer interface. Additionally, redundant code related to mentions has been removed.
Original PR description
Currently, mention nodes are protected using the ProtectedNode plugin to avoid issues when editing the content of the composer. Considering we don't nessecarily need to protect mention nodes with no mutation allowed on them, we can remove the protection on mention nodes. Also, remove reduntant MENTION_SELECTORS task-5264818 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237351
This update adjusts the National Social Security Fund (NSSF) contribution limits to align with the latest regulations under the NSSF Act 2013. Specifically, the lower and upper earnings limits have been revised, impacting the maximum combined contribution a worker can make. This ensures compliance with current Kenyan tax laws.
Original PR description
This commit updates the NSSF Lower and Upper Earnings Limits in accordance with the 4th year of implementation of the NSSF Act 2013. - Set Lower Earnings Limit (Tier 1) to 9,000. - Set Upper Earnings Limit (Tier 2) to 108,000. - Resulting max combined contribution is now 6,480. Task: 5485002 Forward-Port-Of: odoo/enterprise#105019
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
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…
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 fixes an issue where users wouldn't receive a warning when entering invalid email addresses during shared sign request declines. Now, the system validates email formats and displays a clear warning message, preventing incorrect data entry and improving the user experience. This ensures data integrity for shared agreements.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Create a shared sign request. - Try to decline the sign request. - Enter an email address in an invalid format. Issue: - No warning is shown to the user for an invalid email and An RPC_ERROR appears in the console. - This happens because the _check_signer_email_validity constraint fails when signer_email is not valid. Solution: - Validate the email format when the user submits the refusal request. - Show a warning message if the email format is invalid. task-5454929 Forward-Port-Of: odoo/enterprise#103146
This update fixes an issue where the UrbanPiper store identifier field was visually overflowing its container. The changes include wrapping the field and button in a container with flexible width and overflow-hidden styling, resulting in a cleaner and more user-friendly display of this key information.
Original PR description
Before this commit: --- - The UrbanPiper store identifier field could overflow its container. After this commit: --- - Wrap the store identifier field and action button in a container. - Apply `overflow-hidden` and flexible width to the store identifier field. task-5472992 Forward-Port-Of: odoo/enterprise#103464
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 that previously prevented users from duplicating journal entries containing outdated accounts. Now, users can successfully duplicate entries with deprecated accounts, correct the accounts in the draft, and post the entry. The system validates only during the posting stage, ensuring flexibility in using historical entries as templates.
Original PR description
Before this commit, duplicating a journal entry that contained a deprecated account raised a validation error immediately. This blocked the duplication process entirely, preventing users from using historical entries as templates. This commit changes the validation to be done in write function and post. Now, users can duplicate an entry with a deprecated account, correct the account in the draft, and post successfully. Validation only blocks the user if they attempt to post the entry without fixing the deprecated account. or if the user inserted a deprecating account while editing the move. task-5417810 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#243782 Forward-Port-Of: odoo/odoo#240230
This change clarifies how product settings are managed by preventing users from editing the 'Packagings' field directly within the product view. Previously, editing was possible from both the product and product template views, causing confusion. This fix ensures 'Packagings' settings are consistently managed on the product template, aligning with user expectations.
Original PR description
## Short functional explanation of the error When creating a variant, we can click on it and it will show the field "packagings" on the product view, which is editable. However, packagings are…
## Short functional explanation of the error When creating a variant, we can click on it and it will show the field "packagings" on the product view, which is editable. However, packagings are managed on the product template view, where the field is also editable. This creates confusion for the users, as it doesn't align with the sentence on the view "All general settings about this product are managed on the product template". ## Reproduction Steps 1. Create a product. In the Attributes & Variants tab, create a variant. 2. The smart button Variants should appear. Click on it. 3. In the list view, click on the variant you just created. 4. Under Sales, modify the Packagings field. 5. Click on 'the product template' blue text. The product template popup appears. 6. Go to Sales tab and modify the Packagings Field. ### Expected behavior The packagings should be editable only on the product template view. ### Unexpected behavior The packagings is also editable on the product.product view. ## Origin of the issue Missing a readonly="1" in the xml of product.product view __ opw-5065419 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent update caused a crash when uploading images with URLs, specifically when the URL was provided as a 'bytearray'. This fix ensures that bytearrays are correctly converted to standard 'bytes' before URL detection, resolving the error and restoring reliable image uploads. This prevents disruptions to the import process.
Original PR description
The recent mimetype refactor reintroduced a crash where `python-magic` fails on `bytearray` inputs with a `TypeError` (ctypes buffer mismatch). Steps to reproduce: - Have python-magic library installed - Products > Import records - Upload a file containing an URL as image_1920 - Test upload The upload fails with error: `Could not retrieve URL: <img-url> [image_1920: L1]: argument 2: TypeError: wrong type` This restores the fix from 7f36e380c0b175d0046a19f49e572944a5b307d9 by ensuring `bytearray` inputs are converted to `bytes` before detection. opw-5893097
This update fixes a technical error in the attendance and overtime system, preventing a system crash when approving overtime. The issue stemmed from a misconfigured link between attendances and overtime records. This ensures the system functions correctly when managing overtime approvals.
Original PR description
…vertime
STEP TO REPRODUCE: (hr_Work_entry need to be installed to be tested fromt he frontend) ------------------
1- Create an overtime rule with this configuration :
quantity rule differs from hours defined in the contract
2- Create two attendances on the same day (should be a worked day and should not be today)
one from 1AM-2PM
second from 2PM-undefined
3- Approve the overtime of the first attendance
REASON:
------
If hr_work_entry is installed a traceback will be raised because the link between overtime to attendance is not correctly done Attendance -> overtime (only the first attendance have a link with overtime) overtime, attendance -> the two will be returned
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#246478This update resolves an issue where overtime approvals weren't consistently linked to employee attendance records. Previously, only one attendance was associated with overtime, leading to inaccurate reporting. This fix ensures all relevant attendance records are correctly linked to overtime, improving the reliability of time tracking data.
Original PR description
…dance and overtime
STEP TO REPRODUCE:
------------------
1- Create an overtime rule with this configuration :
quantity rule differs from hours defined in the contract
2- Create two attendances on the same day (should be a worked day and should not be today)
one from 1AM-2PM
second from 2PM-undefined
3- Approve the overtime of the first attendance
REASON:
------
The link between overtime to attendance is not correctly done Attendance -> overtime (only the first attendance have a link with overtime) overtime, attendance -> the two will be returned
Forward-Port-Of: odoo/enterprise#105988This update corrects a bug that caused duplicate default appointment slots to be created when scheduling appointments. The fix ensures that slots are only added once, preventing scheduling conflicts and improving appointment booking accuracy. This resolves a user-reported issue impacting appointment scheduling functionality.
Original PR description
Steps to reproduce: - Install website_appointment - Go to the frontend and create a new appointment from there - The appointment created has its default slots duplicated When creating an appointment type, it's possible that we end up creating the default slots two times by passing in the compute of the category and then the onchange linked to category_slot_scheduling. Technically, when we were in the onchange after the compute, slot_ids was populated by NewId records. So when assigning and creating a second time the default slots, the NewId would at the end become real records and the new one were added on top. Now we add a check on the previous category to create the default slot only when we came from a custom appointment and reset them if it is now a custom one. task-5499200 Forward-Port-Of: odoo/enterprise#104482
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 resolves a problem that occurred during Odoo upgrades where the system incorrectly processed partner information. Specifically, the system expected only one record per partner when calculating document counts, but multiple records were found. This fix ensures accurate document counts during upgrades and normal operation.
Original PR description
When trying to compute the document count during the upgrade, we encountered a ValueError because multiple records were found for a partner. The system expected a singleton ``` File…
When trying to compute the document count
during the upgrade, we encountered a ValueError
because multiple records were found for a partner. The system expected a singleton
```
File "/home/odoo/src/enterprise/19.0/documents_hr/models/hr_employee.py", line 34, in _compute_document_count
('partner_id', '=', self.work_contact_id.id)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields_misc.py", line 112, in __get__
raise ValueError("Expected singleton: %s" % record)
ValueError: Expected singleton: res.partner(11393, 11612, 13026, 13085, 13066, 11674, 13007, 11240, 11420, 13086, 2687, 8998, 10309, 8195, 8468, 6439, 8151, 6580, 7928, 10301, 11058, 10515, 5274, 9243, 8141, 8435, 8889, 7761, 7733, 8443, 8545, 9252, 8457, 9980, 5495, 11424, 6458, 10558, 11070, 8924, 11731, 11528, 11615, 11766, 13021, 13080, 11758, 11742, 9306, 8826, 11004, 9393, 8879, 9317, 11652, 13075, 11744, 11160, 11644, 11763, 11416, 11618, 11732, 7931, 3846, 8442, 10299, 7916, 8429, 8057, 11061, 9342, 6435, 6553, 6512)
```
Forward-Port-Of: odoo/enterprise#101902This update resolves a technical issue preventing "Access Rights" users from accessing the documents application. The change restricts access to certain features and visibility within the application, ensuring only administrators can utilize advanced functionalities. This improves the user experience for a broader range of users.
Original PR description
Internal Users with the "Access Rights" access right were not able to open the documents application, which raised an access error traceback on the `ai_sort_prompt` field - which has restricted access to only admins. The access error was raised because the `ai_sort_prompt` field was added to the search_panel_fields for users with Access Rights access rights. We changed it so it is only added when users have the document system adminstrator role. We also changed the document_service's start method to also define the documentSystem user which is the system adminstrator user. With that we could limit visibility of the System Prompt item in the cog menu to those users. task-5375110 Forward-Port-Of: odoo/enterprise#105741
This fix ensures that Swiss payroll payslips generated from payruns display the employee's full name instead of a generic 'new payslip' title. The change corrects a technical issue where the system wasn't properly formatting the payslip name, leading to an inconsistent user experience. This improves clarity and professionalism for Swiss clients.
Original PR description
_ ## Short functional explanation of the error When generating a payslip from a payrun for an employee on the swiss localization, the name of the PDF payslip is simply "new payslip" instead of…
_ ## Short functional explanation of the error When generating a payslip from a payrun for an employee on the swiss localization, the name of the PDF payslip is simply "new payslip" instead of "Salary Slip - <name of employee> - <time period of the slip>" ## Reproduction Steps 1. Install the app l10n_ch_hr_payroll. 2. Make sure you use a Swiss company. 3. Go to Payroll and click on the Payslips tab > payslips. 4. Click on Pay Run. Select Switzerland: ELM salaries and click Continue. 5. Select an employee for which you'd like to generate the payslip. 6. Click on the employee row in the list view. 7. Click Compute sheet > Print. ## Expected behavior A PDF with name "Salary Slip - <employee name> - <time period>" is generated. ## Unexpected Behavior A PDF with name "new Payslip" is generated. ## Origin of the issue When printing the slip with this flow, we don't call the method ```_compute_name()``` used to compute the name of the current slip. Therefore, it stays at 'New Slip', which is the default name. Henceforth, we have to call this method manually when printing the slip. _ opw-5253811 Forward-Port-Of: odoo/enterprise#103471
This update resolves an issue where service products were missing a default packaging type. The previous XML ID was incorrect and no longer functional. This ensures service products are properly configured for EDI reporting in Kenya.
Original PR description
Update the xmlid for the default packaging type for service products, the previous one `l10n_ke_edi_oscu.packaging_type_ou` seems to have never existed. opw-5220129 Forward-Port-Of: odoo/enterprise#105905
This update resolves an issue where actions in the Documents app would fail when switching between languages. The system now filters actions to only include those associated with the currently active languages, ensuring a smoother user experience and preventing errors during language transitions. This improves stability and usability.
Original PR description
Filter Embedded Actions Based on Active Languages ### Impacted versions: 18.0 and later ### Steps to reproduce: - Install at least 2 languages - Install documents and accounting or other app to have actions on select - Uninstall one language - You will get an error when trying to activate again actions on select (also appears on network interface) ### Current behavior: When a language is deactivated, its corresponding translations may still appear in server actions, leading to errors when trying to add them to the context. This issue is now resolved by filtering actions to only include those linked to active languages. Task: [5420820](https://www.odoo.com/odoo/project/49/tasks/5420820) Forward-Port-Of: odoo/enterprise#102938
This update prevents visitors from seeing or attempting to use live chat commands like `/help` or `/leave`. Previously, these commands were visible, even though they weren't functional for non-users. This change improves the user experience and security by removing potentially confusing and unusable options.
Original PR description
**Current behavior before PR:** channel commands like `/help ` or `/leave` are visible to visitors even it is not functional for them. **Desired behavior after PR is merged:** commands are now hidden from visitors. task-4552209 related: [PR](https://github.com/odoo/enterprise/pull/82963) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246120 Forward-Port-Of: odoo/odoo#196737
This update hides live chat commands (like `/help`) from website visitors and guests. Previously, these commands were visible, creating a potential security risk and a confusing experience for non-users. This change enhances website security and provides a cleaner, more intuitive interface for legitimate users.
Original PR description
**Before PR:** channel commands like `/help ` or `/leave` and more are visible to visitors or guest even it is not functional for them. **After PR:** all commands are now hidden from visitors/guests. task-4548666 Forward-Port-Of: odoo/enterprise#105777 Forward-Port-Of: odoo/enterprise#82963
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 enhances the performance of account reporting by optimizing the way data is filtered within key tables. The change ensures more efficient report generation, leading to faster processing times and improved user experience. This resolves a technical issue impacting report loading speed.
Original PR description
In addition to: - [x] #104936 And other PRs in Odoo core: - [x] odoo/odoo#243833 - [x] odoo/odoo#243967 - [ ] odoo/odoo#246440 Forward-Port-Of: odoo/enterprise#105960
This update fixes an issue where product names weren't consistently displayed in the correct language based on the user's current language setting. Previously, accessing a product name twice with different language contexts would result in the incorrect language being used. Now, the system always uses the specified language context when calculating and displaying product names, ensuring accurate translations for all users.
Original PR description
Description of the issue/feature this PR addresses: Compute of display_name in different languages that can be returned incorrect Current behavior before PR: When accessing two times in the same method the display_name of a configured product but the second time having a .with_context(lang=lang) other than the previous language, the returned display name will not be in the specified language as the cached value will be returned. Desired behavior after PR is merged: _compute_display_name should always take into account a change of language in context when the value is accessed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246489 Forward-Port-Of: odoo/odoo#242829
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 prevents the eCommerce reporting menu from appearing to users without the necessary permissions. Previously, users were redirected to the website without a clear error message. The fix ensures a more user-friendly experience by displaying an access error when the menu is unavailable.
Original PR description
__Steps to reproduce on runbot:__ 1. Login with Mitchell Admin 2. Remove Marc Demo from the `sales_team.group_sale_salesman` access group (User: Own Documents Only) 3. Login with Marc Demo 4. Open…
__Steps to reproduce on runbot:__ 1. Login with Mitchell Admin 2. Remove Marc Demo from the `sales_team.group_sale_salesman` access group (User: Own Documents Only) 3. Login with Marc Demo 4. Open the Website app and go to Reporting > eCommerce => You are redirected to the website in frontend mode __Reason:__ Clicking on the eCommerce reporting menu calls `action_dashboard_redirect`, which redirects to the website if the user is not in `base.group_system`, `website.group_website_designer`, or `sales_team.group_sale_salesman`. Since Marc Demo is not in any of these groups, he is redirected to the website without any message, which is not very user friendly. __Fix:__ - Add the groups to the menu to prevent showing it if the user does not have access to it anyway. - Raise an access error instead of redirecting to the website to make it clear to the user that they cannot open the dashboard even if they could see it. This also fixes [`TestMenusDemo`] by preventing this menu from being tested with the demo user in case he doesn't have access to it. [`TestMenusDemo`]: https://github.com/odoo/odoo/blob/736b71202db840ba6a7ed7e7f014b5b7c493d589/addons/web/tests/test_click_everywhere.py#L41C9-L41C41 runbot-234747 Forward-Port-Of: odoo/odoo#244963
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
A test error was caused by inconsistent values used when creating payment provider records, specifically when the 'payment_custom' module was installed. This update ensures tests always use 'none', resolving the error and improving test stability.
Original PR description
Depending on the modules installed, the tests sometimes use a different value for creating the `payment.provider` record. The code is sometimes set to custom if the `payment_custom` module is installed. This causes a runbot error. To avoid this, we force the code `none` in our tests. This will have no impact and will fix the indeterminate error. RunbotID: 237707
This update fixes a critical issue where payroll sheet computations continued even when errors were detected on payslips. Now, the system will raise an alert when errors occur, providing clearer guidance on resolving issues like missing contracts. This ensures accurate payroll processing and prevents incorrect calculations.
Original PR description
Bug: When there is an issue on a payslip with an error level, and we try to compute the sheet, the sheet is computed. Instead of computing, it should raise and the message should specify what errors need to be resolved first. Cause: When computing the sheet, we were calling the self._get_error_message() without using the result, which is a string. Fix: Actually raise a ValidationError and use the result of self._get_error_message() for the error message. Introducing the raise brought other problems because some code supposed to fail was running seamlessly fine. But now, the raise is called and those needed to be solved as well. The issue raised multiple times is the "No contract in the payslip period". Task: 5153497 Forward-Port-Of: odoo/enterprise#104137
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 corrects a bug that prevented the system from creating vendor partners when the vendor bill XML data lacked a 'Departamento' value. The fix ensures accurate vendor partner creation, streamlining invoice processing and avoiding data entry errors. This resolves an issue impacting the l10n_uy_edi module.
Original PR description
If the xml file has a tag "Departamento" without a value, the vendor partner creation fails because the state is searched with an empty string and detects a state that is not correct because the xml has no state value. Task Adhoc side: 109004 Forward-Port-Of: odoo/enterprise#105801
This update ensures that when a user confirms an upsell on a subscription, all remaining alternative quotations are automatically cancelled. Previously, confirming one upsell would leave others in a pending state. This change improves the subscription management process and prevents unnecessary quotes from being created.
Original PR description
Currently, when creating multiple upsells for a specific subscription, confirming one of them leaves the others in the sent state instead of cancelling them. This fix ensures that all other upsells for the same subscription are cancelled once one upsell is confirmed. task-5270139 Forward-Port-Of: odoo/enterprise#105694 Forward-Port-Of: odoo/enterprise#100058
This update fixes an issue where a work center wouldn't be blocked after a work order was deleted. The timer continued running, preventing proper resource management. Now, deleting a work order correctly stops the timer and prevents the work center from being blocked.
Original PR description
Steps to reproduce: - Start the timer on the work order - Delete the work order - Try to block the work center Current behavior: - The work center is not blocked because the latest mrp.workcenter.productivity is still active Expected behavior: - The work center is blocked - mrp.workcenter.productivity is stopped opw-5475227 Forward-Port-Of: odoo/odoo#245815
This update fixes a problem where product barcodes weren't printing correctly, resulting in blank pages. The issue stemmed from a change in how report templates were configured. The fix ensures that product barcodes are generated accurately across all supported printing formats.
Original PR description
## Issue When printing the barcode for a product, only a blank page would be printed. ## Steps to reproduce 1. Install Barcode (`stock_barcode`) 2. Create a product and set a barcode 3. On the…
## Issue
When printing the barcode for a product, only a blank page would be printed.
## Steps to reproduce
1. Install Barcode (`stock_barcode`)
2. Create a product and set a barcode
3. On the product page, click Actions (cog wheel) > Print Labels
4. Print with any of the following format:
- Dymo
- 2 x 7 with price
- 4 x 7 with price
- 4 x 12
- 4 x 12 with price
5. **For the Dymo format, the barcode is not displayed properly. For the four other formats, a blank page is printed**
## Cause
[This commit](https://github.com/odoo/odoo/commit/b7ec60d68c6ee23f7684960e33e5bd6290c9d829) made the `t-call` tag parametric, replacing the `t-set` and `t-value` pairs in various contexts. In this case, the parameters were not added to the correct `t-call`. Without `columns` and `rows` defined, the `report_productlabel` template would not produce anything:
https://github.com/odoo/odoo/blob/b6598c11a3580cfc6ff1ffeb67b0d388c55383d1/addons/product/report/product_product_templates.xml#L129-L131
opw-5877421This update enhances the security and reliability of our Peppol integration by allowing servers to initiate deregistration when a client is no longer active. The Peppol system now uses a 'soft reset' to allow users to re-register, addressing a previous incident. This change improves the overall stability and compliance of the account_peppol module.
Original PR description
Reintroduce server-initiated deregistration on `client_gone`, but only for implementations that explicitly handle it. The base proxy client now just raises the error. Peppol opts in by soft-resetting its configuration so users can re-register. See the IAP postmortem for the rationale and incident history. https://github.com/odoo/iap-apps/pull/1317 no-task Forward-Port-Of: odoo/odoo#246002 Forward-Port-Of: odoo/odoo#239254
This update ensures that IoT printers can utilize LNA (Line Notification Access) when enabled in the printer settings. Previously, this setting was hidden for IoT printers, preventing their use. This change makes LNA accessible for all printers, including IoT, enhancing POS functionality.
Original PR description
This PR https://github.com/odoo/enterprise/pull/102622 activates lna for the iot box requests if "use_lna" is active in the printer settings. However the field is invisible for the iot printers. This PR makes it visible for all printers, including iot to use lna with iot in saas-19.1
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
A recent test failure related to the restaurant appointment tour has been resolved. The fix ensures the test consistently simulates the correct time, preventing inconsistencies in how the tour behaves. This improves the reliability of our automated testing process.
Original PR description
The `RestaurantAppointmentTour` was failing inconsistently because the browser used the real system clock during the initial Point of Sale load, while the test data was created for a specific mock date (Jan 28). Because the PoS logic filters appointments based on the current time, the test data was being misinterpreted or "normalized" by the application before the tour had a chance to freeze the clock. Moving `Chrome.freezeDateTime` to the absolute first step of the tour ensures the simulated time is applied as early as possible, making the test deterministic. runbot-232601 Forward-Port-Of: odoo/enterprise#106024
This update corrects a visual issue where an extra checkbox was appearing in the active action dropdowns, causing layout problems. The fix removes the unnecessary styling and ensures consistent display of active actions within the dropdown menu. This improves the user experience by preventing visual overflow and ensuring proper item representation.
Original PR description
Webclient style has style to apply checkbox next to active dropdown item when it doesn't have the `.dropdown-item_active_noarrow`, through adding some content in `.dropdown-item:before`. This checkbox is problematic because it overflows with `Dropdown`, and items in a discuss action list dropdown already have enough to show when they are active or not. This commit cancels the webclient style of adding the checkbox by adding `dropdown-item_active_noarrow` on ActionList's dropdown items. Part of Task-5867464 Before / After (see barely checkbox overflows on "Unmute" item): <img width="254" height="268" alt="Screenshot 2026-01-30 at 18 06 27" src="https://github.com/user-attachments/assets/196ec808-c22c-41f0-9ab3-c8f9b9a52535" /> <img width="254" height="264" alt="Screenshot 2026-01-30 at 18 17 42" src="https://github.com/user-attachments/assets/77a918db-fd55-4a09-8c47-ec615bd4f280" /> Forward-Port-Of: odoo/odoo#246586
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
Features or functions removed from Odoo
This update streamlines the demo data for the Indian payroll module (l10n_in_hr_payroll) by removing redundant working schedules. The change consolidates the demo data to use a standard 40-hour work week, improving data consistency and reducing complexity. This simplifies the demo experience for users.
Original PR description
### Aim - In the demo data, there is no need to create multiple working schedules for Indian locations. - We can use a single working schedule of 40 hours per week. Task: 5899739
This update removes the 'Add Note' button from the kiosk interface within the Odoo POS Self-Order module. This simplifies the kiosk experience for customers, reducing potential confusion and improving ease of use. The change was implemented as part of a standard improvement.
Original PR description
The goal of this pr was to remove the "Add note" button in the Kiosk. task: 5470923 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr