Daily updates from Odoo
Navigate
Branch
Wednesday, July 16, 2025
22 changes
Security fixes and vulnerability patches
Barcode line descriptions now keep their line breaks without relying on a less safe rendering method. This preserves the same visual layout for users while reducing the risk of unsafe text handling in the barcode workflow.
Original PR description
This commit replaces the usage of unsafe `markup` with the CSS property: `white-space: pre-wrap` for showing the line description in barcode. Previously, `markup` was used to preserve the line breaks in the line description by replacing all `\n`s with `<br/>` which required using `markup` to render the text properly. However, the above mentioned CSS property achieves the same exact result by not ignoring the line breaks in the original string. Forward-Port-Of: odoo/enterprise#90145
New functionality added to Odoo
Spreadsheet dashboard users can now add global filters based on numeric values, making it easier to narrow dashboard data by exact amounts or identifiers. This initial version supports equality filtering, with room for more comparison options in future updates.
Original PR description
This commit introduces numeric global filters feature for spreadsheet dashboards, allowing users to filter data based on numeric values. At this stage, only the equal (=) operator is supported. Future improvements may extend this to include other domain operators. Task: [4032933](https://www.odoo.com/odoo/project/2328/tasks/4032933)
Enhancements to existing features
Spreadsheet users can now edit related filters directly from data source side panels, making it faster to adjust reports and dashboards. This reduces navigation friction when refining spreadsheet views, charts, and lists tied to business data.
This update aligns how WhatsApp, VoIP, live chat, and related recruitment/CRM tools identify contacts and guests with the underlying business data model. It should make contact-related behavior more consistent across communication features while mostly affecting internal structure rather than day-to-day workflows.
Original PR description
\* test_whatsapp, voip_hr_recruitment
This PR removes the `persona_model` and introduce {res_partner|mail_guest}_model
to be closer of the python part.
task-4675821The POS Urban Piper ticket screen layout was adjusted so the main action buttons appear correctly after the newly introduced reprint button. This keeps the ticket screen easier to use and prevents button placement issues for point-of-sale users.
Original PR description
In this commit: - We have introduced reprint button in ticket screen in related PR, to adapt the view and show main buttons afterthat reprint button we have changed the xpath here. Task: 4517972 Related PR: https://github.com/odoo/odoo/pull/198948
When an IoT Box detects a connected blackbox device but the required Belgian POS blackbox module is not installed, Odoo now shows a banner with a direct installation link. This helps businesses complete the required setup faster and avoid missing configuration for blackbox-connected POS operations.
Original PR description
If an IoT Box is connected and has a blackbox connected to it, but the module `pos_blackbox_be` is not yet installed, display a banner with a link to directly install the module. Task: 4942391 Forward-Port-Of: odoo/enterprise#90177
This update improves how Field Service tests simulate location data, making them more reliable and easier to maintain. It also makes a small wording display adjustment by adding spacing before the “View on Map” link.
Original PR description
[IMP] industry_fsm: use MockRequest to fake geoip In this commit: - MockRequest is used to fake geoip in industry_fsm tests instead of hard coding it with DotDict and manipulating the _request_stack. - space added before "View on Map". task-4745995 Forward-Port-Of: odoo/enterprise#88428 Forward-Port-Of: odoo/enterprise#84322
Resolved issues and error corrections
Live chat session avatars now open the correct operator card instead of showing the wrong person. This also prevents an error when the operator is a chatbot, improving reliability for teams reviewing chat sessions.
Original PR description
Before this commit, clicking on the avatar of the kanban view of live chat sessions (discuss.channel), would open a popup card of a different user than the operator. If the operator is a chatbot it produces a traceback. 1. Live Chat > Sessions 2. Click on the avatar of any operator -> wrong user 3. Click on the avatar of the odoo bot -> traceback This happens because the `many2one_avatar_user` widget expects a `res.users` value, but a `res.partner` value is passed (`livechat_operator_id`). This commit fixes the issue by changing the livechat_operator_id field from `res.partner` to `res.users`. task-4640810
This update corrects how the Belgian POS black box reads status responses from serial-connected devices. It helps ensure the POS receives the right device status, reducing failed or incorrect fiscal black box interactions.
Original PR description
As serial drivers use a different way of providing status, we need to check for the right value in the blackbox response. Community PR: odoo/odoo#218203 Forward-Port-Of: odoo/enterprise#89900
Fixed an issue where editing a reusable Sign template could replace field labels with previously entered signer values. This prevents template corruption and ensures future documents show the correct field names.
Original PR description
## Steps to reproduce: - Create a document using a sign template. - Add a new field or modify the placeholder of an existing one. - Save the template. - Refresh the page. - Notice field labels are…
## Steps to reproduce: - Create a document using a sign template. - Add a new field or modify the placeholder of an existing one. - Save the template. - Refresh the page. - Notice field labels are replaced with previously entered values. ## Issue: After editing a template that has already been used in a signed document, the `name` of each sign item is unexpectedly replaced with the last value stored in the database for that item. This corrupts the template and results in incorrect names being shown when the template is reused. ## Cause: The issue occurs because the field name was being updated with the value last stored in the database for that particular sign item. As a result, the popover title was also showing that value instead of the original label. ## Solution: Updated the header_title variable to use type_id[1] (the item’s label) if available; otherwise, it falls back to the sign item's name. Initially, type_id[1] is not set, so the header shows the name. After refreshing the document, type_id[1] becomes available, and the header updates accordingly. --- task-4872963
Draft assets without a computed depreciation board no longer cause an error when opening the depreciation schedule with draft entries. The system now uses the first available entry date when no prior asset date exists, keeping asset review workflows accessible.
Original PR description
Issue: https://github.com/odoo/odoo/issues/219112 Steps to reproduce:- - Minimum 1 asset in draft - Computation board not computed yet - Opening the depreciation schedule with draft entries. Cause:- - When asset is in draft and computation board is not computed yet no Journal Entries are created for that asset. - `asset_date` is minimum value among dates of related moves. - In this case there are no moves yet so `asset_date` is 'NoneType' - `asset_date = min([asset_date, move_vals['date']])` - In above line when we try to compare 'datetime.date' and 'NoneType' it gives rpc error. Fix: `min([asset_date, move_vals['date']]) if asset_date else move_vals['date']` Followup on commit: https://github.com/odoo/enterprise/commit/eb57a9bc4066ece08059384742d70705a646bbdc Forward-Port-Of: odoo/enterprise#90308
Fixed an issue where Odoo could move on before a user had time to choose a printer for IoT-connected reception documents. This ensures reception reports and labels are sent to the selected printer reliably during warehouse receiving.
Original PR description
Steps to reproduce: 1. Connect IoT Box and any printer that accepts PDF 2. Turn on Reception Report option on Inventory Settings 3. Set configuration of Receipts to print out Reception Report and…
Steps to reproduce: 1. Connect IoT Box and any printer that accepts PDF 2. Turn on Reception Report option on Inventory Settings 3. Set configuration of Receipts to print out Reception Report and Label 4. Assign Reception Report and label to the printer 5. Create a PO and run through the Reception process (PO > Reception of Delivery) 6. Validate the Reception of the order -> Result: Odoo will prompt the customer to select a printer, however we are not able to choose a printer in time as the process continues without selecting one. This in return does not send the report to the printer via IoT. The root cause of this bug is that the IoT report handler JS function returns too early, it resolves once the printer selection popup has appeared, instead of resolving once the printer has actually been selected and is starting to print. Therefore the multi-report printing code assumes the print is done and triggers the next print, which causes the popup to close before the user can select a printer. To solve this bug, we listen for a 'printer-selected' event in the handler, and resolve only once we have received this event. This fixes the flow, allowing a printer to be selected for each report that is being printed in sequence. opw-4790299 Forward-Port-Of: odoo/enterprise#89705 Forward-Port-Of: odoo/enterprise#88538
Odoo now includes previously depreciated amounts imported during migration when calculating asset depreciation totals and reports. This prevents depreciation boards and schedules from understating cumulative depreciation for assets moved from another accounting system.
Original PR description
Working:- - When migrating from any other accounting software to Odoo,in `Depreciated Amount(already_depreciated_amount_import)` field we put asset's depreciated amount till then(before migration).…
Working:- - When migrating from any other accounting software to Odoo,in `Depreciated Amount(already_depreciated_amount_import)` field we put asset's depreciated amount till then(before migration). This depreciation is recorded in each account when starting in Odoo(the original balances) and in Odoo creating Journal Entries are skipped for this imported depreciated amount. Example:- - Consider Asset with Original Value: \$10,000.00, Acquisition Date: 01/01/2020, Method: Straight Line, Duration: 10 Years, Computation: No Prorata. - Now according to our computation this asset will depreciate \$1000.00 for the years 2020 to 2029 each, and Journal Entries would be created on 31st December each year. - Now someone migrating from other software to Odoo in the year 2025 will put Depreciated Amount: \$5,000.00 . - Now Odoo will create Journal Entries for only years 2025 to 2029 and skip creating Journal Entries for the years 2020 to 2024 as these entries are created in previous accounting package and are recorded in original balances while migrating. Before this commit:- - In Depreciation Board, Cumulative Depreciation starts from \$1,000.00 for the year 2025 and goes till \$5,000.00 for the year 2029, ignoring imported depreciated amount. - Depreciation Schedule report displays constant \$5,000.00 as depreciated value for the years 2020 to 2024. After this commit:- - In Depreciation Board, imported depreciated amount is added in Cumulative Depreciation, so it starts from \$6,000.00 for the year 2025 and goes till \$10,000.00 for the year 2029. - In Depreciation Schedule Report, `_simulate_imported_depreciation` method will modify report values to simulated imported depreciation amount and skipped Journal Entries. task-4864528 Forward-Port-Of: odoo/enterprise#90214 Forward-Port-Of: odoo/enterprise#88127
The IoT setup process now checks whether an existing IoT box record has actually changed before saving updates. This reduces unnecessary system activity and helps keep setup operations more efficient without changing user-facing behavior.
Original PR description
Currently when /iot/setup method is called if the iot box record exists we always update the record with the received data, even if the data is the same as the record's data. This PR only updates it if the data changes Forward-Port-Of: odoo/enterprise#88210 Forward-Port-Of: odoo/enterprise#88043
Users can now remove a field matching from a spreadsheet global filter and have that change saved as expected. This prevents old filter settings from unexpectedly remaining in place after editing, improving reliability when managing spreadsheet filters.
Original PR description
Steps to reproduce: 1. Open a spreadsheet with global filters. 2. Open the global filter editor. 3. Open a global filter. 4. Delete the field matching (and nothing else). 5. Save the global filter. => The field matching is not saved. This was due to the fact that the removal of the field matching makes an early return in the `updateFieldMatching` method, which had for last instruction to set the `draft` property to mark the filter as dirty. This commit fixes the issue by ensuring that the `draft` property is set even when the field matching is removed. Task: 4882261 Forward-Port-Of: odoo/enterprise#89621
Restores a missing receipt registration step for Belgian POS blackbox setups. This ensures kiosk sales send the required blackbox response back to the server, helping receipt processing stay compliant and reliable.
Original PR description
- In this commit (f5cea73183c0a25039b44e8a16341095431de029), the `registerReceiptWeb` action was removed from the `pos_blackbox_be` module. This action was useful to call `registerReceipt` and then call `send_blackbox_response`. - This commit restores the `registerReceiptWeb` action in the `BlackBoxDriver`, ensuring that when calling it, we send the blackbox response to the server (which is used for Kiosk flows). task-id: 4901299 Forward-Port-Of: odoo/enterprise#90263
Deleting bank statement lines after applying a reconciliation model now keeps the model available by restoring it to the suspense line. This prevents losing reconciliation setup during accounting corrections and also cleans up demo data to avoid duplicate model assignment.
Original PR description
Before this commit when applying a reco model, the reco model is on the lines of the move except the liquidity line which means that when we delete the lines the reco models is lost. Now when deleting a line, if the statement line had a reco model, we place it back on the suspense. Also correcting some demo data where they added the reconcile model on the liquidity but since the reco model will be added at the creation of the reco model, that's not needed. task: 4908501 Forward-Port-Of: odoo/enterprise#89147
The update ensures the admin user has an email address during quality control worksheet tour tests. This prevents test failures caused by missing sender email configuration, improving reliability of automated checks without changing business functionality.
Original PR description
Set the admin user's email explicitly to prevent "Please configure the sender's email address" error when running the tour with login='admin'. build_error-226779 Forward-Port-Of: odoo/enterprise#88283
Facebook removed support for the metric previously used to report stories activity, which caused reporting errors and made other statistics show as zero. This update removes that unavailable Facebook stories statistic so the remaining social media metrics can load correctly.
Original PR description
Bug === `page_content_activity` has been deprecated, so the API return an error and the other statistics are set to zero. https://developers.facebook.com/docs/pages-api/changelog Now, the only equivalent is `post_activity_by_action_type`, but it needs to be called on all posts, and it does not support periods (so even if we call it for each post, we won't be able to compute the trend). So we simply removed the `stories` statistics for Facebook. Task-4914555 Forward-Port-Of: odoo/enterprise#89524 Forward-Port-Of: odoo/enterprise#89230
This update fixes how AS days are calculated in Swiss payroll processing. It helps ensure payroll reports and related calculations reflect the correct number of days, reducing the risk of incorrect payroll data.
Original PR description
Forward-Port-Of: odoo/enterprise#90191 Forward-Port-Of: odoo/enterprise#90153
Code cleanup and technical improvements
This update reorganizes how WhatsApp-related partner, user, and guest data is represented in the system. It supports cleaner maintenance and future improvements without changing day-to-day user workflows.
Original PR description
Enterprise counter-part.
Miscellaneous changes
This commit addresses the errors encountered by the SPF with blackbox - Transaction with kiosk put in journal file - Problem in the Journal file where the rounding was miscomputed - Precision of the amount on which the tax was applied on the receipt when only one tax applied. Forward-Port-Of: odoo/enterprise#86703 Forward-Port-Of: odoo/enterprise#82737
Original PR description
This commit addresses the errors encountered by the SPF with blackbox
- Transaction with kiosk put in journal file
- Problem in the Journal file where the rounding was miscomputed
- Precision of the amount on which the tax was applied on the receipt when only one tax applied.
Forward-Port-Of: odoo/enterprise#86703
Forward-Port-Of: odoo/enterprise#82737