Daily updates from Odoo
Wednesday, June 24, 2026
12 changes · 19.0
Enhancements to existing features
This update automatically sends emails to Odoo companies when Stripe restricts a connected account due to KYC requirements. It proactively alerts businesses to potential issues with their Stripe accounts, ensuring they address necessary documentation updates promptly. This prevents disruptions to expense processing and maintains compliance with Stripe's policies.
Original PR description
When a company tries to create a connected account, some official documentation need to be submitted to Stripe. Stripe takes care of the KYC steps and might restrict some account which don't meet the requirements. Odoo receives the details about the error and the date of the restriction. This task aims at sending automatic emails to the said companies to let them know that they need to fix the identified issues. task: 5441662
Resolved issues and error corrections
This update corrects a previous issue where warnings from the IoT device were incorrectly treated as errors. Now, when a warning code is received, a notification is displayed, providing clearer visibility into the status of transactions. This ensures more accurate and timely alerts for Point of Sale operations.
Original PR description
Before this commit, all errors returned by the iot after a call to the blackbox were considered as errors. Actually, the errors are only the ones that do not start with 0 (no error) or 1 (warning). This commit changes the behaviour when handling warning. We now show a notification. task-id: 5062178 Forward-Port-Of: odoo/enterprise#109251 Forward-Port-Of: odoo/enterprise#93896
This update ensures that partner data created in the POS system is automatically synchronized with the DIAN (Colombian tax authority) after a refresh. Previously, changes weren't reflected, leading to potential data inconsistencies. This fix guarantees accurate partner information for reporting and compliance.
Original PR description
Step to reproduce: - install l10n_co_dian and pos - open pos and click on create a new partner from partner list - enter name ex. "temp", identification number, click on form - notice a `refresh…
Step to reproduce: - install l10n_co_dian and pos - open pos and click on create a new partner from partner list - enter name ex. "temp", identification number, click on form - notice a `refresh icon` is visible: click on it. Observation: - the dialog is closed and partner is selected with "temp" name Expected: - with valid government credentials and a valid identification number, the refresh action should also update the partner data on the POS side Cause: - the refresh button triggers the `button_l10n_co_dian_refresh_data` action, which fetches the legal name and email from the government service - although the backend record is correctly updated, the new values are not immediately synchronized with the POS - when the refresh button is clicked, editPartner() first triggers `web_save` using the temporary "temp" name and immediately reads the partner data afterward - the refresh action executes later and updates the contact with the fetched legal information, but the POS is not aware of these subsequent changes Fix: - read the data again if there is any update caused by this action. - this is done by overriding `afterExecuteActionButton` of FormController class opw-6198035 Forward-Port-Of: odoo/enterprise#117527
This update fixes an issue where the Gantt chart would revert to displaying 'today' when changing its view scale (day, week, etc.). Now, the chart automatically centers on the date currently visible in the viewport, providing a more intuitive and accurate representation of the project timeline. This improves usability and ensures users always see the relevant time period.
Original PR description
This commit ensures that switching the Gantt view scale (day, week, month, year) anchors the new time period around the date currently centered in the viewport, rather than defaulting back to "today". Two coordinated changes make this possible: * **Range Selection:** `selectRangeId` now passes `getCurrentFocusDate()` (the pixel-computed center of the viewport) to `getRangeFromDate` instead of defaulting to `DateTime.now()`. * **Viewport Scrolling:** `focusDate` has been refactored to scroll the targeted date directly to the center of the viewport rather than its left edge. This is achieved by subtracting half the visible cell area width from the computed scroll position. The focusGroup behavior is removed since it is obsolete due to the fact that the default period only shows 1 group instead of 3. task-6314686
This update resolves a bug where the 'Suggest Forecasted Demand' button disappeared in the Master Production Schedule when the 'Forecasted Stock' row was hidden. Previously, the button's visibility was dependent on the 'Forecasted Stock' row being enabled, causing confusion for users. Now, the button remains visible regardless of the 'Forecasted Stock' row's status.
Original PR description
Steps to reproduce:
1. Install Manufacturing.
2. Enable 'Master Production Schedule' in the Settings.
3. Go to [Manufacturing -> Planning -> Master Production Schedule].
4. Ensure 'Demand Forecast' and 'Forecasted Stock' rows are enabled from the dropdown.
5. Observe the edit pencil button next to 'Forecasted Demand' is visible.
6. Hide 'Forecasted Stock' using the rows filter dropdown.
Issue:
The edit pencil button ("Suggest Forecasted Demand") next to the 'Forecasted Demand' row disappears when the 'Forecasted Stock' row is hidden.
Expected behavior:
The edit pencil visibility should not be affected by the 'Forecasted Stock' row.
opw-6240596This update resolves several errors in the Blackbox test suite for the Belgian POS system, ensuring accurate order processing and synchronization. Specifically, the tests were failing due to incorrect data setup, mismatched expectations regarding printer types, and issues with cost center assignments. These fixes improve the reliability of the testing process and the overall functionality of the system.
Original PR description
1. The `m160` and `m161` mutations for `sign_copy_sale` test didn't set the `l10n_be_short_signature` field on the order, so the `TicketScreen.print` override would fail the check and the…
1. The `m160` and `m161` mutations for `sign_copy_sale` test didn't set the `l10n_be_short_signature` field on the order, so the `TicketScreen.print` override would fail the check and the `blackbox.signCopy` would not be called, causing the test to fail. 2. The `l10n_be_pos_blackbox_urban_piper` tests would crash on `undefined id` on the prep display path of `pos_enterprise`, where the data service will try to load up the prep display data, but it's not loaded in the test bundle. So I created a special setupEnv method for blackbox with urban piper which unpatches the prep display (same mechanism as pos_enterprise) 3. After removing the path for the tests, they would fail for the `expectGeneralProperties` step. By default it expects the `ticketMedium` to be `PAPER`, but there is no printer configured on the tests, so the actual medium is `DIGITAL`. 4. The tests expect the cost center to be `PLATFORM`. There was a patch on `InputGenerator`, which would return platform if the order has a `delivery_provider_id` set. But the patch never fired. I moved the patch directly on the order model, which is where the cost center value is computed. 5. The `test_l10n_be_pos_blackbox_sign_sale_backend_offline` test would endTour prematurely before the orders finished syncing, then check that all the orders are synced. I added an extra isSynced() step to ensure the orders are synced before ending the tour Task-[6320705](https://www.odoo.com/odoo/1737/tasks/6320705)
This update fixes an issue where insurance information wasn't correctly transmitted to Envia, preventing insurance PDFs from being generated. The change updates how insurance details are sent to the Envia API, aligning with Envia's requirements for additional services. This ensures accurate insurance coverage is reflected in shipments.
Original PR description
Issue ----- Insurance set on the delivery method is not correctly being communicated to Envia. Steps to reproduce ----- - Create a MX company - Set up Envia - Fedex Nacional Economico (ground) - 10% insurance - Create a MX client - Create a product (with some weight) - Create a SO using the delivery method & confirm - Validate the picking > No insurance pdf is being printed Cause ----- We are passing the insurance value as a `insurance` field on the shipment, which is not what the API expects. We should instead pass it in `additionalServices` as shown in the example of https://docs.envia.com/docs/additional-services#how-to-add-services-to-a-shipment ----- Ticket: opw-5254952
This update fixes an issue where non-recurring products were incorrectly included in recurring revenue (MRR/YRR) calculations within subscription reports. This ensured accurate reporting regardless of user-selected filters, preventing misleading revenue figures. The change improves the reliability of subscription performance data.
Original PR description
While investigating a support ticket, we noticed that in subscription reports, recurring revenue values (MRR and YRR) are implicitly calculated for non-recurring products. This doesn't cause a direct problem when using the default search domains applied in Subscription > Reporting > Subscription > Pivot view, because a "Recurring" filter is pre-applied. But if the end user removes said filter, they might accidentally fudge the MRR and YRR numbers because the non-recurring products will contributed to the relevant grouping sums. We fix this by adding a CASE clause to explicitly ignore non-recurring products when calculating the report field for MRR and YRR , i.e. only consider `t.recurring_invoice = TRUE`. OPW-6315091
This update resolves an issue where the tooltip for list autofill features displayed error messages instead of correct information when the list data wasn't yet available. The fix ensures that tooltips display the intended data, improving the user experience and preventing misleading notifications.
Original PR description
The getter `getTooltipListFormula` would return the result of `getListHeaderValue` as the content of the tooltip, but this returned a loading error instead of a string if the list was not ready yet. Task: [6289944](https://www.odoo.com/web#id=6289944&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#121228 Forward-Port-Of: odoo/enterprise#119876
This update corrects a technical error preventing ‘Require Signature’ options for UPS deliveries within the US and some other regions. The fix adjusts the UPS API request to correctly handle signature requirements and ensures proper accessorial scope is applied, resolving delivery errors. This ensures accurate shipping and rating functionality for UPS shipments.
Original PR description
## Issue When a user configures a UPS REST delivery method with **"Require Signature"** enabled, the integration fails during both rating and shipping for US domestic shipments (and certain other…
## Issue When a user configures a UPS REST delivery method with **"Require Signature"** enabled, the integration fails during both rating and shipping for US domestic shipments (and certain other origin-destination pairs). The UPS API rejects the payload with the following error: > `The requested accessory option is unavailable between the selected locations.` ## Cause / Root Analysis There are two distinct issues in the current `ups_request.py` implementation: **1. Invalid Accessorial Scope (Shipment vs. Package level)** The current code unconditionally applies the `DeliveryConfirmation` node to `ShipmentServiceOptions`. However, according to the UPS Delivery Confirmation Origin-Destination rules, US domestic, CA domestic, and PR-to-US shipments **must** apply this accessorial at the package level (`PackageServiceOptions`). Applying it at the shipment level causes the UPS API to immediately reject the request. **2. Invalid DCISType Code** In both the rating and shipping methods, the code injects `'DCISType': '1'`. According to the UPS REST API schema, `1` does not actually request a signature: > `1` - Unsupported > `2` - Delivery Confirmation Signature Required > `3` - Delivery Confirmation Adult Signature Required *References to current implementation:* * [Rating: ups_request.py#L277](https://github.com/odoo/enterprise/blob/6d85b729b96f18df1cb5ecc429b79d3b37671c1f/delivery_ups_rest/models/ups_request.py#L277) * [Shipping: ups_request.py#L394](https://github.com/odoo/enterprise/blob/6d85b729b96f18df1cb5ecc429b79d3b37671c1f/delivery_ups_rest/models/ups_request.py#L394) ## Expected Behavior & Fix This PR aligns the Odoo payload with the official UPS REST routing matrix: 1. Changed `DCISType` from `'1'` to `'2'` to correctly request the signature. 2. Introduced a `_get_signature_scope` helper method that evaluates the origin and destination country codes. 3. Dynamically injects `DeliveryConfirmation` into either `PackageServiceOptions` (P) or `ShipmentServiceOptions` (S) based on the exact routing rules specified by UPS. ## Potential Future Enhancements While this PR resolves the immediate API crash, there are two UX/functional improvements that would better align with real-world shipping workflows: 1. **Move/Mirror Signature Toggle to Order/Transfer Level:** Currently, `ups_require_signature` sits on the `delivery.carrier` method. In practice, shippers rarely use a dedicated shipping method just for signatures; they usually apply a signature requirement dynamically based on order value or contents. Allowing a "Signature Required" boolean directly on the `sale.order` or `stock.picking` would vastly improve usability. 2. **Configurable Signature Type:** This fix defaults to `DCISType: '2'` (Signature Required) to resolve the bug, but exposing a configuration option to select between Standard Signature (`2`) and Adult Signature Required (`3`) would fully round out the integration. ## References (UPS Official Documentation) * [UPS Shipping API Documentation](https://developer.ups.com/tag/Shipping?loc=en_US) * [UPS Shipping Appendix (Delivery Confirmation Pairs)](https://developer.ups.com/api/reference/shipping/appendix1?loc=en_US) * [UPS Rating API Documentation](https://developer.ups.com/tag/Rating?loc=en_US) * [UPS Rating Appendix (Delivery Confirmation Pairs)](https://developer.ups.com/api/reference/rating/appendix?loc=en_US)
This update corrects an inconsistency in how completed document rights are managed within the Enterprise system. The change ensures that rights associated with finalized documents are accurately reflected, preventing potential access issues. This improves data integrity and reliability for document-related workflows.
This update resolves an issue in the website studio where switching between multiple form models through the 'More models' feature would cause a crash. The fix ensures both the original and newly selected models are retained in the system's memory, preventing data loss and improving stability.
Original PR description
Selecting a second model through the Action option's "More models" crashed because the current form model was dropped from the models cache while the new model was being applied. This commit keeps both the current form model and the model being applied in the cache. Steps to reproduce: - Add a form snippet - Click on the form - In the `Action` option, select `More models` - Select one model - Open `More models` again and select another model - Traceback appears: `TypeError: Cannot read properties of undefined (reading 'website_form_key')` task-6321878 Forward-Port-Of: odoo/enterprise#121492