Daily updates from Odoo
Wednesday, October 1, 2025
45 changes · saas-18.4
New functionality added to Odoo
This update adds standardized Brunei district names and codes to Odoo’s base localization data, so businesses no longer need to enter them manually. It also aligns Brunei address and currency formatting with recognized postal guidance, improving address consistency and local usability.
Original PR description
Added district names and codes based on government postal website, https://www.post.gov.bn/Documents/Buku%20Poskod%20Edisi%20ke%202%20(Kemaskini%2026122018).pdf Description of the issue/feature this PR addresses: Currently, the Brunei localisation does not include district names and codes, which requires users or system integrator to enter the district names manually before starting to use the system. Current behavior before PR: Partner addresses in Brunei cannot be assigned to a standardised district. District codes are missing from the localisation data. Desired behavior after PR is merged: Brunei district names and their respective codes are available in the localisation module. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229349 Forward-Port-Of: odoo/odoo#228664
Enhancements to existing features
The website generator now checks whether a provided website URL can be reached before starting the scraping process. This helps users catch typos or inaccessible pages earlier, saving time and providing clearer feedback.
Original PR description
This commit checks that the URL is reachable before making the scraper request. The goal is to help prevent clients from requesting pages that may have a typo or are not accessible. This reduces time wasting and gives a much clearer interface. <img width="967" height="604" alt="image" src="https://github.com/user-attachments/assets/70810b13-65bd-43a3-9fc1-125867290a9b" /> <img width="1690" height="961" alt="image" src="https://github.com/user-attachments/assets/df347756-85b0-451b-9cab-47d20097ed8b" /> <img width="976" height="751" alt="image" src="https://github.com/user-attachments/assets/bcea820b-ebe3-4b0f-875c-2b8f4fdf0404" />
This update restructures how product stock valuation-related information can be calculated, making it easier for custom modules to adapt those values to specific business needs. The change is internal and should not alter day-to-day workflows, but it improves flexibility for tailored inventory accounting setups.
Original PR description
FWP of https://github.com/odoo/odoo/pull/160201 cc @pfertyk @svs-odoo --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222410
Project templates can now define custom milestone percentages, giving teams more control over how milestone-based sales are calculated. If no custom percentages are set, the system continues to split milestone quantities evenly, preserving the existing behavior.
Original PR description
- ability to add a custom milestone percentage in project templates - keep the even distribution if no customization is set to the milestone quantity - Make the milestones page accessible in the project template page to edit them - Adjust the test so it can check the new quality calculation --- Task-4102768
Point of Sale now prevents keyboard input from changing order lines while a popup, such as customer selection, notes, or coupons, is open. This reduces accidental edits during checkout and creates a safer, more predictable cashier workflow.
Original PR description
Before this commit: - Even when a popup (e.g., customer selection, note, coupon) was open, unfocused keyboard inputs could still update orderline values. After this commit: - Orderline editing via keyboard is disabled whenever a popup is active. - Prevents unintended changes and ensures a safer user flow in POS. Task-5033716 Forward-Port-Of: odoo/odoo#229324 Forward-Port-Of: odoo/odoo#226300
Resolved issues and error corrections
Free products added through sales loyalty rewards now use the reward description as the order line name instead of the product’s default name. This makes sales orders clearer and keeps the behavior consistent with point of sale rewards when teams customize reward descriptions.
Original PR description
Currently, the reward's product name is used as the SOL name for the free product, which can be confusing. **To reproduce this issue:** 1) Install the sale_loyalty module. 2) Create a loyalty program…
Currently, the reward's product name is used as the SOL name for the free product, which can be confusing. **To reproduce this issue:** 1) Install the sale_loyalty module. 2) Create a loyalty program that grants a free product. 3) Manually update the reward's description. 4) Create a SO with a SOL containing that product 5) Apply the reward and observe the behavior. **Issue / Cause:** - The free product's description is taken from the reward product's name instead of the manually updated description. - This is incorrect because, in the point of sale, the name is taken from the reward's `discount_line_product_id` rather than the `reward_product_ids`. https://github.com/odoo/odoo/blob/0abdcd9ef6ad3fc932dc0eb46d8aa973b00c34c2/addons/pos_loyalty/static/src/overrides/models/pos_order.js#L1162 **Solution:** To resolve this inconsistent behavior, the free product name in the sale order line will now be taken from discount_line_product_id. opw-4982774 Forward-Port-Of: odoo/odoo#229152 Forward-Port-Of: odoo/odoo#223755
The cohort report export button is now disabled when there is no data to export. This prevents users from triggering an error on empty reports, such as Helpdesk Ticket Analysis without records, and provides a smoother reporting experience.
Original PR description
Currently, an error occurs when user tries to export data on cohort view with no data. Steps to replicate: - Install `helpdesk` (without demo data). - Go to `Helpdesk > reporting > Ticket Analysis` and go to cohort view. - Click download and error will occur. - If error doesnt occur, click on `Measure > Count`, and click Download again. Error: `IndexError: list index out of range` Cause: - The export button remained enabled even when no data available, this caused the export to be called without any data that caused the `Indexerror` at [1]. Solution: - Disabled the export button when no data in cohort view. [1]: https://github.com/odoo/enterprise/blob/475a802aa3e748a905be83c0f6408f8c20f03905/web_cohort/controllers/main.py#L30 sentry-6831823426 Forward-Port-Of: odoo/enterprise#93050
Customers viewing an online order that includes a manufactured product will now see the manufacturing date only once. This keeps the order portal cleaner and avoids confusion caused by repeated information.
Original PR description
**Steps to reproduce:** 1.Install `website_sale` and `sale_mrp`. 2.In settings, enable `multi-route` and `unarchive` the Replenish MTO route. 3.Create a product with routes -> `Replenish MTO` and…
**Steps to reproduce:** 1.Install `website_sale` and `sale_mrp`. 2.In settings, enable `multi-route` and `unarchive` the Replenish MTO route. 3.Create a product with routes -> `Replenish MTO` and `Manufacturing` then publish it on the website. 4.Buy the product from the website and make the payment. 5.Go to My Account → Your Orders → Open your sale order. 6.In the Manufacturing section, the date appears twice. **Issue-** <img width="604" height="186" alt="image" src="https://github.com/user-attachments/assets/e4164564-8555-4005-8282-20e6f5de7e55" /> - Date found twice in Portal View of sale order **Cause-** https://github.com/odoo/odoo/blob/097c04156517bd97a2789bde22ffd0c69c0bf6bf/addons/sale_mrp/views/sale_portal_templates.xml#L18-L27 - Here using same field two time one it with condition and other is without condition so in some case when condition satisfied then same field are coming twice **Solution-** - Remove Conditional field because no meaning of using same field inside and outside of the condition **opw - 5096009** Forward-Port-Of: odoo/odoo#227997
Saving a view or editing a report with an attribute tag missing its name no longer triggers an unexpected error. The system now skips these incomplete attributes safely, improving stability for users working with views or Web Studio reports.
Original PR description
Currently, an error occurs when user tries to save a view with an attribute node without name. **Steps to replicate:** - Initialize a DB and open Views. - Create a new view and fill in random values…
Currently, an error occurs when user tries to save a view with an attribute node without name.
**Steps to replicate:**
- Initialize a DB and open Views.
- Create a new view and fill in random values for name and give a View Type.
- In the Architecture give value as `<attribute></attribute>`.
- Save and you will get the error.
(Same error can also be produced with Web Studio report editor.)
**Error:**
`AttributeError: 'NoneType' object has no attribute 'endswith'`
**Cause:**
- The error occurred because we received **key** as `None` at [1], as it was called from an attribute node with no name [2].
- In `saas-18.2`, we only checked if `node.get('name') not in TRANSLATED_ATTRS`. Since `node.get('name')` was `None` and `None` was not included in the `TRANSLATED_ATTRS` list, no error occurred.
**Solution:**
- Added a conditional check, so that attributes with no name skip the function call.
[1]: https://github.com/odoo/odoo/blob/f254da2253e7ce9426e51112b513fa9e6a474ce4/odoo/tools/translate.py#L83
[2]: https://github.com/odoo/odoo/blob/f254da2253e7ce9426e51112b513fa9e6a474ce4/odoo/tools/translate.py#L190
[3]: https://github.com/odoo/odoo/blob/0b700ec3c08ecd9c6f1597f9d10f6c1eee06bcee/odoo/tools/translate.py#L255
sentry-6877030439
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#227221The stock receipt form now prevents users from entering lot information in a field that cannot correctly apply it for products tracked by lot. This avoids validation errors where a lot appears to be selected but is not actually assigned to the transfer.
Original PR description
### Steps to reproduce: - In the setting enable lots and serial numbers - Create a product tracked by LOT - Create and confirm a receipt for 1 unit of that product - Create a new lot: LOT001 from the…
### Steps to reproduce: - In the setting enable lots and serial numbers - Create a product tracked by LOT - Create and confirm a receipt for 1 unit of that product - Create a new lot: LOT001 from the move in the picking form - Click Validate #### > Invalid operation: you need to provide Lot/Serial numbers of the product ### Cause of the issue: The set method of the `lot_ids` field of the `stock.move` model does nothing for product tracked by lots: https://github.com/odoo/odoo/blob/7a8f9b7fe4dded4cfa140103d51b52e08149cadb/addons/stock/models/stock_move.py#L575-L579 In particular, while the lot appears on the move in the view, none of the move lines refer to it and the transfer can not be validated as indeed no lots are provided to these reservations. ### Fix: The feature of writing `lot_ids` for lots has been introduced in https://github.com/odoo/odoo/commit/4bb4e08066449177f89382718ceadd840ce90d0e https://github.com/odoo/odoo/blob/1c52e2e9e8e00a19e2db00bf70d658496f9a0f29/addons/stock/models/stock_move.py#L596-L600 But this major refactoring can of course not be backported in 18.0. Therefore, it was decided put the field in readonly when its set method is inefficient. opw-5093217 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228840
This fixes a Razorpay payment issue where accounts configured with both standard keys and OAuth could trigger failed mobile payments. Odoo now avoids mixing authentication methods, reducing 403 errors during customer checkout on iOS and Android.
Original PR description
In a specific context, Razorpay rejects connections using both Key ID/Secret and an access token simultaneously. To reproduce, it's require a real production Razorpay account since Oauth is not available in test mode. Step to reproduce: - Configure Key ID/Secret and connect via OAuth on the Razorpay payment provider. - On iOS/Android, making a payment on the website triggers a "403 Forbidden" error because Razorpay redirect to `/payment/razorpay/return` and the signature from Razorpay not correspond to the expected signature computed with the Key Secret. This fix prioritizes call with Key ID/Secret over token authentication. if not configured. opw-5100194 opw-4989944 opw-5039880
Manufacturing reports now include estimated employee costs correctly in cost and production analysis. This helps businesses get more accurate visibility into expected production costs and compare operations more reliably.
Original PR description
Make sure that operations with estimated costs are correctly computed in the Cost Analysis Report and the Production Analysis Report. task 4896715
Swedish payment export files now identify bankgiro accounts with the correct account type instead of treating them as standard bank accounts. This helps Swedish credit transfer files meet banking requirements and reduces rejected or incorrect payments.
Original PR description
Issue: The only possible value for the bank account type is "BBAN". For a 'bankgiro' account it should be "BGNR". Solution: Input "BGNR" in the XML if the bank account type is 'bankgiro'. opw-5063368 Forward-Port-Of: odoo/enterprise#95467
Belgian POS users can now sell products and close sessions even when multiple employees are clocked in on the same register. This prevents unexpected errors that could interrupt sales or end-of-day closing.
Original PR description
- Fix traceback when trying to sell a product with multiple employees clocked in on the same POS. - Fix traceback when trying to close a session with multiple employees clocked in. task-id: 4902090 Forward-Port-Of: odoo/enterprise#93942 Forward-Port-Of: odoo/enterprise#93273
The online shop now handles invalid category values in product page URLs more gracefully. Instead of triggering an unexpected server error, it returns a clearer validation message, improving reliability when links are mistyped or tampered with.
Original PR description
Currently, an error occurs when the `category` is received as a `string` and the code tries to evaluate `int(category)`. **Steps to reproduce:** - Install the `website_sale` module. - Open a product page in the website with an `invalid category` parameter, for example: `http://localhost:8069/shop/warranty-39?category=1;` **Error:** `ValueError: invalid literal for int() with base 10: '1;'` **Root Cause:** At [1], the code directly calls `int(category)` without validating the input. When the parameter contains `non-numeric` characters, Python raises an `error`. **Fix:** This commit ensures raising a `ValidationError`, improving the `error message` clarity, when users manually input `invalid or tampered` category values in the `URL`. [1]: https://github.com/odoo/odoo/blob/d32f98dd199f80d2b0031bd52a6ff74411c3e7e0/addons/website_sale/controllers/main.py#L1827 sentry-6658317828 Forward-Port-Of: odoo/odoo#226207
Nuvei payments no longer fail when a customer has a first or last name longer than Nuvei allows. The payment details are shortened automatically to meet Nuvei's limits, helping customers complete sales orders without errors.
Original PR description
Steps: - Install sales and payment Nuvei. - Set up payment Nuvei. - Set customer long name and last name. - Try to pay that SO with Nuvei. Issue: - Error. Cause: - Nuvei only accept 30 character for first_name and 40 for last name Fix: - Truncate first and last name to only take required character. opw-5083827 Forward-Port-Of: odoo/odoo#227191
Fixed an issue where Point of Sale receipts could show the selected shipping date as the previous day for users in time zones west of UTC. This helps avoid customer confusion and ensures ship-later orders display the correct delivery date on receipts.
Original PR description
In this bug, the shipping date in pos receipt is set to previous dates. To reproduce the bug: 1- Setup a database with point_of_sale app installed 2- In configuration -> Setting, check Allow Ship Later option for a pos shop. 3- Change the browser timezone to a US timezone. In chrome it can be in Console -> Sensors -> Location. 4- Open POS register, select a product, choose payment and use Ship Later, to pick a date. 5- After validating the order, you can see the wrong shipping date is shown in the recipt. This is related to #215140 in which the shipping date bug is fixed when the date is picked. However, in generation of receipt a new PosOrder object is created, in which there is a need to explictly deserilizing shippingDate to avoid unwanted timezone effects. opw-5009476 Forward-Port-Of: odoo/odoo#224586
The project dashboard now clearly prevents editing milestone quantity percentages when there is no linked sales order line. This avoids confusing behavior and helps users understand when milestone billing values can be changed.
Original PR description
**Steps to Reproduce:** - Install sale_project. - Go to the project dashboard. - Click on Edit milestones. **Isuue:** When a sales order line exists, the quantity percentage can be updated. When no sales order line exists, the quantity percentage cannot be updated. **Fix:** Make the field readonly when no sales order line is linked. task-5068312 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227922
A test for the HTML editor was updated to wait properly for the toolbar before continuing. This reduces intermittent automated test failures, helping keep releases and validation pipelines more reliable without changing user-facing behavior.
Original PR description
The editor toolbar is affected by [1] and therefore needs to be properly awaited for. This test was missed by [2], probably because it did not explicitly waited for the toolbar itself. runbot-231692 [1]: https://github.com/odoo/odoo/pull/211426/commits/54da715df84789f9a1acc0cfc91be41dcdbab140 [2]: https://github.com/odoo/odoo/pull/213090 Forward-Port-Of: odoo/odoo#227989
This fixes the product image viewer so the selected thumbnail stays centered when shoppers browse products with many images. It prevents thumbnails from being cut off and also improves mobile browsing with swipe support.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Add a bunch of extra images to a published product; 2. enable zoom-on-click via editor; 3. click on an image to zoom it; 4. scroll through images. Issue ----- With too many images added, the thumbnails on the bottom are cut off on the edges of the screen, making it impossible to click on them. Cause ----- The thumbnail row element doesn't get updated when selecting a new image. Solution -------- Define a `_updateCarousel` method which adds a `transform: translate` operation to the thumbnails, moving them such that the currently selected image's thumbnail gets centered on the screen. Call this method on mounting, and again on any render (image change). Bonus: add `touchstart` & `touchmove` hooks to enable easy swiping through the carousel on mobile. opw-4937009 opw-4908881 Forward-Port-Of: odoo/odoo#229256 Forward-Port-Of: odoo/odoo#224981
The mobile chatter now keeps the send button visible when users edit a message, preventing confusion and failed attempts to finish edits. The discard option has also been moved above the composer, making the editing controls clearer and easier to use on small screens.
Original PR description
**Purpose of this PR:** This PR addresses UI issues in the mobile view of the chatter during message editing. - Ensures the send button is properly displayed while editing messages on mobile. - Moves the "Discard Editing" action above the composer. **Before this PR:**  **After this PR:** <img width="446" height="132" alt="image" src="https://github.com/user-attachments/assets/1842f341-268a-40e3-8915-dc08fb9162b3" /> task-[4780731](https://www.odoo.com/odoo/project/1519/tasks/4780731) Forward-Port-Of: odoo/odoo#213943
Animated text and other elements in website footers now appear correctly when the footer is configured to slide over the page. This fixes a display issue where those animated elements could remain hidden while visitors scrolled, improving the reliability of website presentation.
Original PR description
Before this commit, using animation on text within the footer elements would not work if the footer was set on "slide over". The formula used to compute when to start the animation was incorrect. This commit fixes the formula. Steps to reproduce: - Set the Footer slideout to "Slide Over" - Set the Animation of an element to "On Appearance" - Save (when scrolling down, the animated element stay hidden) Forward-Port-Of: odoo/odoo#226562
Fixes an issue where duplicating a warehouse did not create a matching Point of Sale operation type for the copied warehouse. This ensures businesses using Inventory and Point of Sale get complete warehouse copies and avoid manual setup corrections.
Original PR description
## Short functional explanation of the error When duplicating a warehouse, if it has an PoS operation type, this operation type will not be duplicated. On the other hand, all other operation types…
## Short functional explanation of the error When duplicating a warehouse, if it has an PoS operation type, this operation type will not be duplicated. On the other hand, all other operation types will be duplicated. ## Reproduction Steps 1. Make sure PoS and inventory are well installed. 2. Go to inventory. 3. Click on configuration, then warehouse. 4. Select a warehouse, click on action, then duplicate. 5. Click on configuration, then on Operation Types. ### Expected behavior We should be able to see 2 instances of PoS operation type: one for the original company, and one for the copy. ### Unexpected behavior There's only one instance of PoS operation type, which is related to the original company. ## Origin of the issue PoS operation type is a model inherited from stock.warehouse, and no copy method was defined. Therefore, upon duplication, the copy method of the original stock.warehouse was called, leading to issues with the field created in the inherited version. __ opw-4991271 Forward-Port-Of: odoo/odoo#224064 Forward-Port-Of: odoo/odoo#222694
This fix ensures the IoT Box browser keeps using the web address set in its configuration file, even after orientation settings are saved. This prevents the browser from unexpectedly reverting to an older database-stored page after reopening or rebooting.
Original PR description
The browser on the IoT Box was always reopening on the url saved in the database instead of the one saved in odoo.conf. When opening the browser, we used to set the orientation and save it in the configuration. As we only set the orientation and not the url at this point, we were mistakenly removing the url from odoo.conf. As it was not set anymore, when reopening the browser later (e.g. after reboot), no url was available in conf, so we fell back on the db's one. Task: 5103536 Forward-Port-Of: odoo/odoo#229002
This fixes an internal purchase and inventory test so it works reliably even when localization settings change the default product type. It helps prevent false test failures and keeps purchase stock validation stable across module combinations.
Original PR description
The test `test_receive_negative_quantity` is failing when run with the `l10n_ke` module installed. The failure occurs during the validation of the picking created from a negative-quantity purchase…
The test `test_receive_negative_quantity` is failing when run with the `l10n_ke` module installed. The failure occurs during the validation of the picking created from a negative-quantity purchase order. The test assumes the product is of type `consu`, which bypasses stock reservation. However, the following [XML default](https://github.com/odoo/enterprise/blob/17.0/l10n_ke_edi_oscu_stock/data/ir_default.xml#L5) in l10n_ke forces the product type to `product` (stockable), triggering reservation logic. Since the ordered quantity is negative, no reservation occurs, and the `_sanity_check()` fails with: `You cannot validate a transfer if no quantities are reserved.` We fix this by explicitly setting a product with the type `consu` in the test. This ensures that reservation is skipped regardless of which modules are installed or what defaults they apply. runbot:[108147](https://runbot.odoo.com/odoo/error/108147) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228583 Forward-Port-Of: odoo/odoo#221042
The HTML editor toolbar now correctly disables the link button when users select table cells, preventing unsupported link actions on cell selections. It also improves single-cell selection behavior so a cell is only selected when its full content is selected, making table editing more predictable.
Original PR description
**Current behaviour before PR:** Steps to reproduce: - Create a 3 x 3 table. - Select first column. The link button in toolbar is enabled and it should not. This happens because after merging this commit [1], `isLinkAllowedOnSelection` method returns true if selected cells are not adjacent. **Desired behaviour after PR is merged:** Now, selecting cells open toolbar with disabled link button. [1]: https://github.com/odoo/odoo/commit/c0d07fdcf4cc139177524eb4ea22ab341b3da7fb task-4965270 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents an error when Odoo runs on Arch Linux systems where a standard operating system detail is not provided. It improves reliability for deployments on Arch Linux without changing business workflows or user-facing features.
Original PR description
The `platform.freedesktop_os_release()` function returns the content of the `/etc/os-release` file as a `dict[str, str]`. The entry `ID` is the name of the OS (`linuxmint` on Linux Mint) and `ID_LIKE` is the name of the OS `ID` is derived from (`ubuntu debian` on Mint). In ArchLinux the `ID` is `arch` and `ID_LIKE` entry is missing. Reported-By: Muhammad Al-Habib Ouadhour <houadhour@yandex.com> 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
Project-related guided walkthroughs now handle cases where the New button opens a template selection menu instead of directly opening the creation form. This prevents setup walkthroughs from failing when project templates are present, making onboarding and demos more consistent.
Original PR description
Before this commit, the project tours could fail at the project creation step because the 'New' button might open a dropdown menu instead of the project creation form, depending on whether project templates exist in the DB or not. After this commit, we add a conditional step to handle that case. version: saas-18.4 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
After DIOT 2025 rework in 4e6bee49e98b055e5aebe89fb19ab6317003b682 the report is missing some es translations Steps to reproduce: - With an MX Company and Spanish es_419 language set - Open Accounting > Reporting > Tax Report - Choose report Diot MX opw-5016650 Forward-Port-Of: odoo/odoo#229132 Forward-Port-Of: odoo/odoo#229085
Original PR description
After DIOT 2025 rework in 4e6bee49e98b055e5aebe89fb19ab6317003b682 the report is missing some es translations Steps to reproduce: - With an MX Company and Spanish es_419 language set - Open Accounting > Reporting > Tax Report - Choose report Diot MX opw-5016650 Forward-Port-Of: odoo/odoo#229132 Forward-Port-Of: odoo/odoo#229085
Fixes an issue where changing budget report date ranges and editing amounts could cause an error. This keeps budget items aligned to the correct monthly periods, so users can update budgets reliably without interruption.
Original PR description
Currently, an error occurs when user editing the budget report items. Steps to Reproduce [Video](https://drive.google.com/file/d/1bz0GEQjwxQrckzcEHdYPfvaA5M43lmFF/view): - Install the `Accounting`…
Currently, an error occurs when user editing the budget report items. Steps to Reproduce [Video](https://drive.google.com/file/d/1bz0GEQjwxQrckzcEHdYPfvaA5M43lmFF/view): - Install the `Accounting` module. - Go to `Profit and Loss` > `Budget` and `create a budget`. - Select `custom dates (e.g., start: 01/01/2025, end: 12/10/2025)` and change the amount of a budget line. - Change the `date range (e.g., start: 01/10/2025, end: 12/10/2025)` and change the amount again. - `Switch back to the first date range` (start: 01/01/2025, end: 12/10/2025) and try changing the amount once more. `TypeError: unsupported operand type(s) for +: 'float' and 'NoneType'` This error occurs when a user editing the budget report items. When user enters a date period, the system creates budget items for the first date of every month within that range. If the user then changes the date period to the next date of the same month, the system attempts to fetch the existing budget item `[1]` for that range. However, due to the start date alignment, it fails to fetch the correct budget item and instead creates an extra one `[2]`. Later, when the system checks again from the first date of the same month as the start date, it finds this extra budget item, for that the amount is None, which raises the error `[3]`. This commit ensures that when fetching existing items and generating the start month dates `[4]`, the system always uses the first day of the month as the `start date` so that the flow is maintained.. [1]- https://github.com/odoo/enterprise/blob/1df83837a2aec4801b34a9a7ab0cd68f640b4fd6/account_reports/models/budget.py#L44-L49 [2]- https://github.com/odoo/enterprise/blob/1df83837a2aec4801b34a9a7ab0cd68f640b4fd6/account_reports/models/budget.py#L75-L79 [3]- https://github.com/odoo/enterprise/blob/1df83837a2aec4801b34a9a7ab0cd68f640b4fd6/account_reports/models/budget.py#L72 [4]- https://github.com/odoo/enterprise/blob/1df83837a2aec4801b34a9a7ab0cd68f640b4fd6/account_reports/models/budget.py#L58-L61 sentry-6883207225 Forward-Port-Of: odoo/enterprise#95090
Customer statements sent by email from a child contact now include the correct statement details instead of an empty PDF. The Customer Statement button is also hidden when there are no transactions or no amount due, reducing confusion for accounting users.
Original PR description
**Steps to reproduce:** 1. Go to Accounting > Customers > create a company with child contact (invoice) (both having name and email). 2. Create an invoice with the child contact as customer and…
**Steps to reproduce:** 1. Go to Accounting > Customers > create a company with child contact (invoice) (both having name and email). 2. Create an invoice with the child contact as customer and confirm it. 3. Go to the child contact and open the Customer Statement smart button. 4. Download the PDF → data is shown correctly. 5. Send the statement → the attachment in the sent mail is empty. **Issue:** - When sending customer statements via email from a child contact, the generated PDF attachment contains no data, showing empty amounts and transactions. - Additionally, the "Customer Statement" button was still visible even when the total due was zero. **Cause:** - The button visibility condition checks for `total_due == 0.0 and not has_moves`, which didn’t properly cover all use cases. **Solution:** - Update button visibility condition to: `invisible="not has_moves or total_due == 0"` ensuring it is hidden when there are no moves or the total due is zero. **opw-5009182** Forward-Port-Of: odoo/enterprise#95356 Forward-Port-Of: odoo/enterprise#93162
This fixes an issue where some action buttons were missing from the payslip list when they were not explicitly defined in the page controller. Payroll users can now see and use the expected buttons consistently, reducing confusion and missed actions.
Original PR description
This commit fixes the display of conditional buttons in the payslips list view. The issue was that only buttons with actions defined in the list controller were displayed. This commit fixes the issue by displaying any button if the action is not specified in the list controller.
The chatter follower menu now stays open after removing a follower, making it easier to remove several followers in one session. The subscription edit action now closes the menu as expected, creating a more consistent user experience.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ Removing multiple followers from the chatter is cumbersome because the followers dropdown closes immediately after each removal. Additionally, clicking 'Edit Subscription' next to 'Unfollow' did not close the dropdown, which was inconsistent with expected behavior. **Current behavior before PR:** --------------------------------- - Removing a follower from the chatter closes the followers dropdown immediately - Clicking 'Edit Subscription' next to 'Unfollow' leaves the dropdown open **Desired behavior after PR is merged:** ----------------------------------------- - The followers dropdown remains open after removing a follower, allowing multiple removals without interruption - Clicking 'Edit Subscription' next to 'Unfollow' closes the dropdown as expected **Task:** 4943867 Forward-Port-Of: odoo/odoo#222154
This update corrects a sales test so it checks the currently configured order confirmation email template instead of assuming a fixed one. This helps ensure partial payment order confirmation works reliably when businesses customize their email settings.
Original PR description
The email template for the sale confirmation can be changed through the config parameters so it's better to read it directly from there instead of having it hard-coded. This now correctly tests the function it's testing. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226240
The POS quotation and order list now filters results to the customer currently selected at checkout. This prevents staff from seeing unrelated customer orders and helps them find the correct sales documents faster.
Original PR description
Before this commit, when selecting a customer in the POS and clicking Actions → Quotation/Order, all quotations and orders were displayed instead of filtering by the selected customer. This commit ensures that only the quotations/orders of the selected customer are shown. opw-5074052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228795 Forward-Port-Of: odoo/odoo#227448
This fixes an issue in the HTML editor where opening the color picker from a link popover could create an extra button and leave preview colors in the wrong state. Users can now adjust or reset button colors without unexpected duplicate buttons or incorrect color previews.
Original PR description
Before this commit: the onchange is applied when the color picker closes, it has a few issues, 1. adding duplicate button cause the reference of the link element is not passed correctly 2. the preview color isn't reset when mouse no longer hovering on the colors After this commit: The onchange is applied when on color reset. No more additional button inserted and color of the button is properly restored after the cursor is out of color picker task-4966317 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Active payment providers can no longer have their linked payment journal removed from the journal settings. This prevents payment failures caused by missing journal information, especially in multi-company branch setups.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have an active payment provider; 2. create a branch company; 3. set payment provider's company to branch; 4. leave Payment Journal unchanged (parent company Bank); 5. go to Accounting / Configuration / Accounting / Journals; 6. open Bank journal; 7. open "Incoming Payments" tab; 8. enable the "Payment Provider" column; 9. unset the payment provider on the active provider's line & save; 10. attempt paying using the provider. Issue ----- > Error: psycopg2.errors.NotNullViolation: > null value in column "journal_id" of relation "account_payment" violates not-null constraint Cause ----- We shouldn't be able to change the related journal of active providers. Solution -------- Make the field read-only if the payment method is active. opw-5045000 Forward-Port-Of: odoo/odoo#229342 Forward-Port-Of: odoo/odoo#225187
This fixes incorrect buyer document type values used on Indonesian e-Faktur invoices. It ensures customers marked with Other ID or National ID are reported with the right document label, reducing tax document errors.
Original PR description
the byer document has a wrong value in others and NIT. so this commit change the values to `Other ID` and `National ID` To check values: go to fields and search for `l10n_id_buyer_document_type` opw-4974469 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222346
This fixes an issue that stopped portal users from creating project tasks by sending emails to a project alias. Restoring this workflow helps customers and external collaborators submit work requests without needing direct backend access.
Original PR description
The new safety belt introduced in 745f3accaf775550294d6f1bf562a0dcc15f7a08 made it impossible for portal users to create tasks by sending emails to the project alias. @moduon MT-11332 Forward-Port-Of: odoo/odoo#228986 Forward-Port-Of: odoo/odoo#225321
Survey descriptions and end messages now avoid a content option that only works inside the editor. This ensures embedded videos and similar content display properly when respondents open a shared survey link.
Original PR description
Embedded components do not render when the html field content is displayed outside the editor, as their mechanism relies on the editor plugin. Solution: --------- Disable embedded components for the…
Embedded components do not render when the html field content is displayed outside the editor, as their mechanism relies on the editor plugin. Solution: --------- Disable embedded components for the survey messages (Description and End Message). Steps to reproduce: ------------------- * Create a new survey * Add a video as End Message or Description * Use the share link to view de survey * Video not showing Cause of the issue: ------------------- The new web_editor has a plugin system, and one option that is enabled by default is embedded_components. This option has been introduced in: https://github.com/odoo/odoo/commit/03f495c696030214c17e6479076571823513f60e According to the description: "It is forcibly set to false in HtmlMailField since embedded components can only be rendered inside Odoo." Observation : ------------ similar fix: https://github.com/odoo/odoo/commit/1446167e482745c71725563e56411948c3dd1f41 opw-5005752 Forward-Port-Of: odoo/odoo#224808
This fixes an issue where manufacturing engineering change orders could not correctly record very small component quantity updates when products used more than two decimal places. Businesses using precise units of measure can now track BoM quantity changes accurately, reducing errors in product revisions.
Original PR description
Steps to reproduce the bug:
- Go to Decimal Accuracy → Product Unit of Measure → set digits to 4
- Go to Units of Measure Categories → select a unit → set rounding to 0.0001
- Create a storable product “P1” with a BoM:
- Component C1: 1.0000 unit
- Create an ECO for the BoM with type BoM update
- Start the revision
- Go to V2
Problem:
You cannot update the quantity of C1 to 1.0003 (for example) because the system uses the default 2 digits instead of the UoM digits.
opw-5082488
Forward-Port-Of: odoo/enterprise#95470
Forward-Port-Of: odoo/enterprise#95180This fixes an issue that could prevent users from opening OSS reports when a tax setup used a fiscal position linked to a country group instead of a specific country. Businesses can now handle cases such as mainland Spain VAT separately from the Canary Islands without report access errors.
Original PR description
To be able to deal with Spain with Canary Islands and mainland, we have a country group that is Mainland Spain VAT, with Spain minus several states (Canary basically). People want to be able to use it for OSS. But currently, if you have an entry with a tax with a fp with this country group (and no country), you can't open your OSS Report. So take the countries of the country group if there is none in the fiscal position. Forward-Port-Of: odoo/enterprise#95795
Helpdesk ticket lists now sort ticket references in the expected numeric order, even after the count passes 100. This makes it easier for users to find the oldest or newest tickets without confusing results caused by text-based sorting.
Original PR description
**Issue** With the default `helpdesk.ticket` sequence, once users reach 100 tickets, ordering tickets by `ticket_ref` in the list view is unintuitive as it is a Char field (so '11' > '100') and the results are not useful if the user wants to see the oldest/newest tickets. opw-4891916 Forward-Port-Of: odoo/enterprise#95548 Forward-Port-Of: odoo/enterprise#93058
This fix updates internal spreadsheet test helpers so they can handle sorting behavior more accurately. It helps ensure future spreadsheet changes are tested against realistic sorted data, reducing the risk of regressions for users.
Original PR description
Task: 4962837 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#223561 Forward-Port-Of: odoo/odoo#223011
Spreadsheet list side panels now open even when a saved sort refers to a field that was removed or renamed after an upgrade. This lets users fix or remove the outdated sorting instead of being blocked by an error.
Original PR description
If a list is sorted on an invalid field and you try to open the list side panel, it crashes. It should open to allow the user to remove the sorting. A list with an invalid sorting field if the spreadsheet was created in a given version, then upgrades to a version where that field has been removed or renamed. Task: 4962837 Forward-Port-Of: odoo/enterprise#92749 Forward-Port-Of: odoo/enterprise#92393