Daily updates from Odoo
Monday, September 1, 2025
19 changes · 18.0
Enhancements to existing features
This change adds support for official Turkish company information codes needed for compliant Nilvera invoice submissions. It prevents invoices from being sent when required codes are missing or empty, and ensures those codes appear consistently in both PDF and XML outputs.
Original PR description
Description of the issue/feature this PR addresses: Nilvera requires official codes on company contacts for submission to be compliant. Current behavior before PR: Invoices may be sent to Nilvera…
Description of the issue/feature this PR addresses: Nilvera requires official codes on company contacts for submission to be compliant. Current behavior before PR: Invoices may be sent to Nilvera without the required codes, resulting in non-compliance. Currently, only the VKN and TCKN codes are sent, while other required codes are not supported. Desired behavior after PR is merged: Official codes are added as non-deletable tags (non-mandatory ones archived). An error is raised when required tags are missing or empty. Invoices cannot be sent to Nilvera without valid codes. Codes are always reflected in both PDF and XML. [IMP] l10n_tr_nilvera: support for official information codes Added codes as tags from the official list and archived non-mandatory ones. These tags cannot be deleted, and an error is shown on attempt. Invoices are blocked from being sent to Nilvera if either MERSISNO or TICARETSICILNO is missing, or if assigned but without a value. Codes are reflected in both PDF and XML. task-4992049 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223182
Resolved issues and error corrections
This fix ensures employee time-off timesheets are recreated correctly when a related public holiday is deleted or its working calendar changes. It prevents missing or duplicated timesheet entries, helping payroll and project reporting remain accurate after holiday schedule updates.
Original PR description
…ay change **Steps to reproduce** - Create a public holiday without a calendar during a work day. - Create a leave for an employee overlapping the public holiday for a time off type generating…
…ay change **Steps to reproduce** - Create a public holiday without a calendar during a work day. - Create a leave for an employee overlapping the public holiday for a time off type generating Timesheets. Validate it. - Expected: on the day of the public holiday, no timesheet is generated for the `hr.leave` to avoid duplication. - Either delete the public holiday, or set a calendar on it different than the one defined on the employee. - Issue: the public holiday timesheet has been deleted, but its deletion should've lead to the creation of the `hr.leave` timesheet that we didn't create at the time the public holiday existed. - Second issue: after that, change the calendar of the public holiday to the same as the employee's. Still a missing timesheet. **Solution** We can use `_reevaluate_leaves` to find the leaves affected by changes in public holidays. `_generate_timesheets` then re-generates the timesheets as if the leave was just validated (the call to `list_work_time_per_day` ignores the already present resource.calendar.leave). We also check missing public holidays timesheets to fix the second issue. opw-4819697 Forward-Port-Of: odoo/odoo#216901
This change restores the ability to find products in purchase orders using a vendor's product code or name. It reverses a previous display change that showed extra vendor information but unintentionally made supplier-based product searches fail.
Original PR description
This reverts commit 28d53e0e565e266ca3fa2b67e359b4383fa42c36. The commit displayed both product name and vendor name in a purchase order form. However, it breaks the search using the vendor code/name. https://github.com/odoo/odoo/pull/223250 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Hungarian electronic invoicing now classifies credit notes more accurately when an invoice has already received a payment. This prevents incorrect STORNO submissions to NAV and helps businesses keep tax reporting aligned with the actual payment history.
Original PR description
Before this PR: - Previously, a credit note was marked as STORNO if the base invoice's residual amount was zero, regardless of whether any payments had been made. This led to incorrect STORNO reports being sent to NAV in cases where the invoice had been partially or fully paid before reversal. After this PR: - If any payment was made, the credit note is marked as MODIFY instead of STORNO. Example: - Case 1: No payments before reversal Invoice: 1000 Credit Note 1: -100 Credit Note 2: -900 => Credit Note 1 should be sent as a Modification, Credit Note 2 as STORNO. - Case 2: Payments before reversal Invoice: 1000 Payment: -100 Credit Note: -900 => The Credit Note should be sent as a Modification. task-4818762 Forward-Port-Of: odoo/odoo#211831
This fix prevents projects from failing to open when a saved embedded action points to a module that has since been uninstalled. It cleans up those saved actions properly, so users are not blocked by outdated Timesheets-related filters after uninstalling the app.
Original PR description
The system failed to evaluate the embedded action, which refers to the Uninstalled module. Steps to produce: 1. Install `Project` and `Timesheets`. 2. Go to Project and open any project. 3. Click on…
The system failed to evaluate the embedded action, which refers to the Uninstalled module.
Steps to produce:
1. Install `Project` and `Timesheets`.
2. Go to Project and open any project.
3. Click on the embedded action icon and select `Timesheets`.
4. Save the view from the embedded action's icon.
5. Now, Uninstall `Timesheets`.
6. Now, go to that Project and try to open it.
Error:-
`KeyError: 'allow_timesheets'`
`ValueError: Invalid field in filter of project.project:
[('allow_timesheets', '=', True)]`
Solution:-
- Here,
https://github.com/odoo/odoo/blob/e7efc2c3ad70aa9273412b089a71a9ade75ad525/odoo/addons/base/models/ir_embedded_actions.py#L19
- Also, use `ondelete="cascade"`. but `ondelete="cascade"` not works on `ir.actions.actions`.
https://github.com/odoo/odoo/blob/e7efc2c3ad70aa9273412b089a71a9ade75ad525/odoo/addons/base/models/ir_actions.py#L117-L127
We should remove `ondelete="cascade"` from the `action_id` field and add explicit unlink logic for `ir.embedded.actions`in the unlink method.
Sentry - 6495174314
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix prevents an error when sales teams use lead assignment filters based on custom CRM lead properties. Businesses can now use property-based rules reliably to route leads to the right salespeople.
Original PR description
The system gives an error if we set the filter in the relation of lead_properties. Steps to Produce: 1. Install the `CRM` module. 2. CRM > Configuration > Settings. 3. Enable the `Rule-Based…
The system gives an error if we set the filter in the relation of lead_properties. Steps to Produce: 1. Install the `CRM` module. 2. CRM > Configuration > Settings. 3. Enable the `Rule-Based Assignment` and save the changes. 4. CRM > Reporting > Leads, then go to list view. 5. Click on NEW and add the required values. 6. From the gear icon, click on Add properties, set a random value, and then save. 7. CRM > Sales > Teams. 8. Click on the 3 dots of any team and click on Configuration. 9. Add the new salesperson and set the Lead Assignment Filter like Properties > Property 1(name of the property you added in lead form view) - is equal - demo (values of that property that you gave previously) and then save. 10. Click the gear icon and select the CRM: Lead Assignment. Error: `AttributeError: ' dict ' object has no attribute '_fields'` Solution: The code filters records based on complex domain conditions and combines matching IDs using logical operators. It also supports special fields like properties. Sentry - 6544761414
This fixes a mismatch where quality checks could remain linked to the original receipt after part of a transfer was moved into a new wave. Users will now see and process the right quality checks on the correct picking, reducing errors during receipt and wave operations.
Original PR description
*{quality_control,stock}_picking_batch ### Steps to reproduce: - Got to Quality > Quality control > Control Point - Create a quality control point: - Operation: receipt - Control per quantity or…
*{quality_control,stock}_picking_batch
### Steps to reproduce:
- Got to Quality > Quality control > Control Point
- Create a quality control point:
- Operation: receipt
- Control per quantity or product
- Create a and confirm a receipt transfer with 2 products
- Go to the receipt list view > select your receipt > Wheel action > Add to wave > Add to a new wave > Add only one of the move line to the wave
#### > A new picking is created and the move line reassigned to it but the related quality check picking_id is not updated.
> In particular, there is no "quality check" button on the new picking and the "quality check" button of the first picking allows you to process a QC related to the wave transfer.
### Cause of the issue:
While the move lines or move are can be moved to a new picking during the `_add_to_wave` call:
https://github.com/odoo/odoo/blob/605e47a85561614c17fe2e6f59618610f87c69bb/addons/stock_picking_batch/models/stock_move_line.py#L69-L90 Nothing is done with respect to the quality check which pciking_id field is not computed:
https://github.com/odoo/enterprise/blob/d73f7ef6fe61ccddbe1fe4e32c1670611ba3c5d2/quality/models/quality.py#L185
### Fix:
While the quality check measured on move_line are linked to a move line, the quality checks measured on products and operation are not. For the first kind, we rely on an override of the write method of stock move lines to reassign the check to the apporpiate picking. For the other kinds, we add a post batch hook to unlink the obsolete checks and recreate the appropiate one. Note that since operation and product types are created during the action confirm of moves and since certain moves will be created and auto confirm during the new picking creation here: https://github.com/odoo/odoo/blob/73fd3af560c967f41339bfc4c71a51dc5baba4a8/addons/stock_picking_batch/models/stock_move_line.py#L90 https://github.com/odoo/odoo/blob/73fd3af560c967f41339bfc4c71a51dc5baba4a8/addons/stock/models/stock_picking.py#L857 https://github.com/odoo/odoo/blob/73fd3af560c967f41339bfc4c71a51dc5baba4a8/addons/stock/models/stock_picking.py#L1263-L1267 https://github.com/odoo/enterprise/blob/b99d7073a34b24d4d3b863278e68f292fdd3c0b0/quality_control/models/stock_move.py#L12-L15 we rely on the `extra_move_mode` to avoid quality check creation during this step (as they will be created in the hook).
Enterprise: https://github.com/odoo/enterprise/pull/92951
opw-5009635
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#223852This fix prevents Odoo from crashing when a user saves a report or view with empty source content. Instead of failing with an error, the system now handles the empty content safely, improving stability for users working with Studio and reports.
Original PR description
The system will crash when they get the view where the arch is null. Steps to Produce: 1. Install `Sales` and `Studio`. 2. Sales > Toggle studio > Reports. 3. Click on New > External. 4. `Add a separator` to the page after `Expression` and save the report. 5. On the right side, click on `Edit Source`. 6. Remove all content and save the report. Error: `lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1` Solution: - I used the try-except block to prevent the application from crashing when `view.arch` is empty. Sentry - 6288795955 Related Enterprise PR-https://github.com/odoo/enterprise/pull/84503 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Sales orders now correctly remove all nested combo product lines when a parent combo product is deleted. This prevents an error that could block users from saving orders after replacing combo items with another combo product.
Original PR description
Currently, an error occurs when a combo product is added to a sales order, and one of its combo items is replaced with another combo product, then the original parent combo product is deleted. Steps…
Currently, an error occurs when a combo product is added to a sales order, and one of its combo items is replaced with another combo product, then the original parent combo product is deleted. Steps to reproduce: - Create a sales order and add a combo product to it. - Modify one of the combo items by replacing it with another combo product. - Delete the original parent combo product from the order lines and save. Error: `ValueError: Expected singleton: sale.order.line()` The error occurs because the parent combo item is deleted, which causes `line.virtual_id` to become False. As a result, the filter [1] returns no matching records, and ensure_one() fails by raising a singleton error due to receiving zero records. This happens because the function [2] called from onchange in `sales_order` [3] that performs all the changes only checks the first level of combo items and doesn’t handle cases where those items are also combo products with their own linked items. This commit fixes the error by properly deleting all nested combo items in the sales order, ensuring no leftover items from nested combos remain that could cause errors. [1] - https://github.com/odoo/odoo/blob/7bb84621b773cdd7e9984222d61d70d622f8ac43/addons/sale/models/sale_order_line.py#L1567-L1569 [2] - https://github.com/odoo/odoo/blob/57b4056798b9a380027fd3da1c4f3965249a4509/addons/sale/models/sale_order_line.py#L1572-L1591 [3] - https://github.com/odoo/odoo/blob/7bb84621b773cdd7e9984222d61d70d622f8ac43/addons/sale/models/sale_order.py#L922 sentry-6653847384 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing setup now requires a reference sequence, preventing users from saving an incomplete operation type that can later break sample loading or manufacturing order creation. This avoids a confusing system error and makes the manufacturing workflow more reliable when demo data is not installed.
Original PR description
The error was caused by missing `sequence_id` during Manufacturing Order creation. This led to an invalid SQL query where `id = False`. Steps to Replicate: - Install `MRP` without any demo data (--without-demo=1). - Go to `Inventory > Configuration > Operation Types`, click on `Manufacturing`. - Remove the value from the field `Reference Sequence` and Save. - Go to Shop Floor and then click on `Load Samples` and the error should occur. Error: `UndefinedFunction: operator does not exist: integer = boolean LINE 1: SELECT number_next FROM ir_sequence WHERE id=false FOR UPDAT...` Solution: - Made the `Reference Sequence` field required to prevent errors caused by leaving it empty during record creation. sentry-6589772561 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Editing a reordering rule linked to an existing manufacturing order no longer triggers an unexpected error. This keeps inventory planning updates working smoothly when businesses adjust replenishment settings for manufactured products.
Original PR description
Currently, an error is encountered while editing a Reordering Rule which is already related to some confirmed MO. **Setup:** - Install mrp and sale_management. - Create a storable product with the…
Currently, an error is encountered while editing a Reordering Rule which is already related to some confirmed MO. **Setup:** - Install mrp and sale_management. - Create a storable product with the Manufacture route enabled and its on-hand quantity set to 0. - Create a Bill of Materials (BoM) for the product and also add at least 1 component. - Create a Reordering Rule for the product with Min Quantity 0 and Max Quantity 0. **steps to reproduce:** - Create and confirm a Sales Order for 40 units of the product. This generates a Manufacturing Order (MO). - Navigate to the generated MO and add a line for Work Order(set Expected Duration: 1000min). - Edit the product's Reordering Rule (e.g., change the min Quantity). for steps reference you can use [this video](https://drive.google.com/file/d/120srSySVHI0FzaWCruz0LVIBKCjK4oOL/view?usp=sharing) **Error:** `KeyError: 1` **Root Cause:** - The KeyError is triggered when a reordering rule is edited. At this moment, the system calls the `_quantity_in_progress` method to update the forecast. This method prepares a results dictionary (res) that only knows about the ID of the record currently being edited (which might be a new, unsaved record with a temporary ID). - The issue arises in the loop that processes confirmed Manufacturing Orders, at [1], the value of orderpoint.id is still `<NewId origin=2>` and on trying to access it at [1] causing an error [1]- https://github.com/odoo/odoo/blob/f1e11af050aa4d7be40e5179dc67a74ff81de076/addons/mrp/models/stock_orderpoint.py#L138 **Solution:** This commit ensures that only valid orderpoint IDs are processed at [1] Sentry-**6135193468**
This fix stops spreadsheet pivots from offering JSON-based fields, such as Analytic Distribution, as grouping columns. Users can build Sales Order Line pivots without hitting a crash caused by unsupported field types.
Original PR description
Steps to reproduce: - Create a spreadsheet with a pivot on Sales Order Lines - Add "Analytic Distribution" as column => Boom Note that the test for this fix is add in the enterprise codebase Task-5055300 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
Uploading a file to a request or replacing a file through the manage versions dialog now shows progress on the existing document instead of creating a duplicate card or row. This reduces confusion for users and keeps the document list accurate during uploads.
Original PR description
Step to reproduce: 1. Upload a file to a request: - Create a Request. - Upload a file for that request. - Another Kanban card / List row is created showing the upload progression. 2. Upload a file into the manage version dialog. - Manage version for an existing document. - Upload a new document. - Another Kanban card / List row is created showing the upload progression. The upload progression should be shown on the existing document. Task-4863051
The XML export for Belgium’s EC Sales List now includes the expected month or quarter when opened from the VAT Return, even if the user did not manually choose a period. This prevents incomplete tax report exports and reduces the risk of filing issues caused by missing period information.
Original PR description
**Issue** When accessing the EC Sales List report via the smart button from the VAT Return page, downloading the XML without explicitly selecting a period omits the <Month> element—even though a…
**Issue** When accessing the EC Sales List report via the smart button from the VAT Return page, downloading the XML without explicitly selecting a period omits the <Month> element—even though a month is visibly preselected. **Steps to Reproduce** 1. Install the Accounting module and Belgium localization. 2. Go to the Accounting dashboard. 3. Open the VAT Return via the "Miscellaneous Operations" section. 4. Click the smart button to access the EC Sales List report. 5. Use the gear icon to export the XML. 6. Observe that the XML <Period> section only includes the <Year>—the <Month> is missing. **Root Cause** If no period is explicitly selected, the report uses a period_type of "tax_period". However, this value was not handled when generating the XML, so the logic to include the \<Month> or \<Quarter> elements skipped it. As a result, only the \<Year>, which is always included, was rendered. **Fix** Extend the handling of tax_period to derive the period from the company’s tax periodicity settings and adjust the filter accordingly. This ensures that the generated XML always includes the \<Month> or \<Quarter> element, in addition to \<Year>, whenever the report is based on a tax period. Opw-4702613
The tax report no longer fails with a server error after changing its root report configuration. This keeps accounting users from being blocked when opening tax reports and improves reliability of financial reporting workflows.
Original PR description
**[FIX] account_reports: ensure join on account_move for tax report base amount calculation** Fixes a server error in the generic tax report where `account_move_line__move_id` was referenced without an explicit join. The fix adds a conditional join on `account_move` to make fields like `always_tax_exigible` available, preventing `UndefinedTable` during SQL execution. Steps to reproduce: 1 - in a fresh db or runbot go to `Accounting > Config > Accounting Reports`. 2 - Open the Tax Report and change the `Root Report` to Balance Sheet. 3 - Save and try to open the tax report. opw-4990771
Fixes an issue where a website form configured through Studio to send an email could fail during submission. This helps prevent lost customer inquiries and avoids error logs when businesses customize website forms for outgoing emails.
Original PR description
Currently, an error occurs when submitting the 'Send Email' form. Steps to Reproduce: - Install the `website` and `web_studio` modules. - Go to `website` > `Click on Edit` > `Drag and drop form`. -…
Currently, an error occurs when submitting the 'Send Email' form. Steps to Reproduce: - Install the `website` and `web_studio` modules. - Go to `website` > `Click on Edit` > `Drag and drop form`. - click the form and in actions select the `more models`, and select `outgoing mails(mail.mail)` model and `save`. - `Submit` the form, and the error appears in the `logs`. **Error:** `KeyError: 'website_form_signature'` **Cause:** This error occurs when submitting the "Send Email" form from the website. By default, the form action is `"Send an E-mail"`, and when the user `changes` the form’s model to outgoing mails (mail.mail), which also has the action "Send an E-mail," the system checks the existing model [1] and retrieves it. Since `shouldRerender` is set to false, [2] is not executed, and as a result, the `email_to(hidden field)` is not present in the form. And the website_form_signature is added from [3], but due to the condition at [4], the code at [3] is not executed. When it is accessed at [5], KeyError is raised. **Fix:** This commit ensures that when the user changes the model, `rerenderXml` is executed so that the `hidden field` is also added. [1]: https://github.com/odoo/enterprise/blob/359a1c546fc9e4bc113517bf6ea912a70a9ea123/website_studio/static/src/website_form_editor.js#L155-L156 [2]: https://github.com/odoo/enterprise/blob/359a1c546fc9e4bc113517bf6ea912a70a9ea123/website_studio/static/src/website_form_editor.js#L174-L178 [3]: https://github.com/odoo/odoo/blob/82639728f2bcb4e7786f120de2aeba3f5fbab209/addons/website/tools.py#L252 [4]: https://github.com/odoo/odoo/blob/82639728f2bcb4e7786f120de2aeba3f5fbab209/addons/website/tools.py#L236 [5]: https://github.com/odoo/odoo/blob/82639728f2bcb4e7786f120de2aeba3f5fbab209/addons/website/controllers/form.py#L88 sentry-6746753251
When items from a receipt are moved into a new wave transfer, their related quality checks are now moved or recreated on the correct transfer. This prevents staff from missing required checks on the new transfer or completing checks from the wrong receipt.
Original PR description
*{quality_control,stock}_picking_batch ### Steps to reproduce: - Got to Quality > Quality control > Control Point - Create a quality control point: - Operation: receipt - Control per quantity or…
*{quality_control,stock}_picking_batch
### Steps to reproduce:
- Got to Quality > Quality control > Control Point
- Create a quality control point:
- Operation: receipt
- Control per quantity or product
- Create a and confirm a receipt transfer with 2 products
- Go to the receipt list view > select your receipt > Wheel action > Add to wave > Add to a new wave > Add only one of the move line to the wave
#### > A new picking is created and the move line reassigned to it but the related quality check picking_id is not updated.
> In particular, there is no "quality check" button on the new picking and the "quality check" button of the first picking allows you to process a QC related to the wave transfer.
### Cause of the issue:
While the move lines or move are can be moved to a new picking during the `_add_to_wave` call:
https://github.com/odoo/odoo/blob/605e47a85561614c17fe2e6f59618610f87c69bb/addons/stock_picking_batch/models/stock_move_line.py#L69-L90 Nothing is done with respect to the quality check which pciking_id field is not computed:
https://github.com/odoo/enterprise/blob/d73f7ef6fe61ccddbe1fe4e32c1670611ba3c5d2/quality/models/quality.py#L185
### Fix:
While the quality check measured on move_line are linked to a move line, the quality checks measured on products and operation are not. For the first kind, we rely on an override of the write method of stock move lines to reassign the check to the apporpiate picking. For the other kinds, we add a post batch hook to unlink the obsolete checks and recreate the appropiate one. Note that since operation and product types are created during the action confirm of moves and since certain moves will be created and auto confirm during the new picking creation here: https://github.com/odoo/odoo/blob/73fd3af560c967f41339bfc4c71a51dc5baba4a8/addons/stock_picking_batch/models/stock_move_line.py#L90 https://github.com/odoo/odoo/blob/73fd3af560c967f41339bfc4c71a51dc5baba4a8/addons/stock/models/stock_picking.py#L857 https://github.com/odoo/odoo/blob/73fd3af560c967f41339bfc4c71a51dc5baba4a8/addons/stock/models/stock_picking.py#L1263-L1267 https://github.com/odoo/enterprise/blob/b99d7073a34b24d4d3b863278e68f292fdd3c0b0/quality_control/models/stock_move.py#L12-L15 we rely on the `extra_move_mode` to avoid quality check creation during this step (as they will be created in the hook).
Community: https://github.com/odoo/odoo/pull/223852
opw-5009635
Forward-Port-Of: odoo/enterprise#92951Odoo Studio now avoids crashing when a report's source content is accidentally left empty. This helps users continue working safely instead of hitting an error page when editing custom reports.
Original PR description
The system will crash when they get the view where the arch is null. Steps to Produce: 1. Install `Sales` and `Studio`. 2. Sales > Toggle studio > Reports. 3. Click on New > External. 4. `Add a separator` to the page after `Expression` and save the report. 5. On the right side, click on `Edit Source`. 6. Remove all content and save the report. Error: `lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1` Solution: - I used the try-except block to prevent the application from crashing when `arch` is empty. Sentry - 6288795955
Fixes an issue where a reconnected blackbox could be treated as a new device if the Raspberry Pi assigned it a different serial port. Existing blackbox configurations are now preserved by matching the device name and updating its identifier instead of creating a duplicate.
Original PR description
Before this commit, if a blackbox was unplugged and re-plugged, and it was assigned a different serial port by the Raspberry Pi, it would show up as a new device in the database meaning the existing…
Before this commit, if a blackbox was unplugged and re-plugged, and it was assigned a different serial port by the Raspberry Pi, it would show up as a new device in the database meaning the existing configuration wouldn't work. After this commit, we handle the blackbox as a special case, and if the name of the device matches exactly with our existing blackbox, we update its identifier instead of creating a new device. This does require a new device specific check in the controller which is quite ugly. Another approach would have been to make the identifier of the blackbox equal its FDM ID instead of the serial port, but this was not done for the following reasons: - Changing the identifier format in stable would cause all existing clients' blackboxes to become unconfigured once their IoT box restarts. - Making the identifier different to the serial port would require a hack in the blackbox driver to change its own identifier and update the devices dictionary, since the serial interface assumes all devices use the port as their identifier. task-5055027