Daily updates from Odoo
Wednesday, June 11, 2025
5 changes · master
Enhancements to existing features
Users creating batch payments are now alerted when selected payments are not in a valid state. They can review the invalid payments and continue creating the batch while excluding those entries, helping prevent processing errors.
Original PR description
Added an error wizard to be displayed when there are payments with invalid state included when creating a batch payment. Giving the option to check the invalid payments and create the batch with discarding these invalid payments. task-4531618
Studio users can now adjust the width of fields in list views directly from the list view editor. This gives teams more control over how data is displayed, making important columns easier to read without custom development.
Original PR description
This commit adds support for customizing a field's column width in list views directly from Studio. task-4793106
This update makes Peruvian electronic invoice exports report both line-level and overall discounts in the compliant SUNAT format. Businesses can now apply discounts without masking them as lower product prices, reducing compliance risk and improving invoice accuracy.
Original PR description
Line level discounts were skipped in the previous rewrite of `l10n_pe_edi` as it had weird edge-cases at the time, so before we just manually reduced the prices of the products by the discount to account for the final cost of the invoice. However, this was not technically allowed or compliant with SUNAT, as such, this PR allows for the export of Global and Line Level discounts properly. Note that we had the field `l10n_pe_edi_allowance_charge_reason_code` defined previously in this module but it was not used anywhere. It could be used here for discounts, however, discounts will always be a specific value depending if it's global or line level so there is no need to allow the customer to select it or something different. As there is a chance that the future withholding tasks will need this field, it is staying but made hidden as it doesn't do anything for now. task-4605358
Resolved issues and error corrections
Employee managers can now create appraisal campaigns for their own team members, even if they do not have broader appraisal access rights. The update also makes the campaign launch option visible only to managers and simplifies the campaign setup screens by hiding fields that are not relevant to most users.
Original PR description
Currently, employees managers with no access rights are not allowed to create a new appraisal concern for their employees. To grant managers the access to create appraisal campaigns, new customized access rule for employees' managers has been created. Also, both the Kanban and List views have been modified so that only the managers can see the "Launch Campaign" button. Furthermore, some changes have been implemented in the UX for the appraisal campaign wizard, such as removing the mode field and hiding the manager field for non administrator/Officer users, as well as hiding the company,coach,and manager fields from the search employee view.
Code cleanup and technical improvements
This change streamlines how Odoo communicates with IoT Boxes by replacing separate communication services with one shared approach. It should make IoT-related operations such as printing, device actions, weighing, and delivery package workflows more consistent and easier to maintain.
Original PR description
### The communication between the IoT Box and a DB can be done using: - Longpolling, - Websocket, - Simple fetch from one side or the other. ### Problems: - The longpolling and the websocket can…
### The communication between the IoT Box and a DB can be done using: - Longpolling, - Websocket, - Simple fetch from one side or the other. ### Problems: - The longpolling and the websocket can theorically be substituted but don't have a common API, - The websocket service is currently designed to handle ONLY printing jobs, - The longpolling is barely used, often replaced by a simple "action", but never polling (~never listening for response from the IoT Box), ### Solution: We refactored all this in order to simplify the communication. - `iot_longpolling` and `iot_websocket` services are replaced by a single `iot_http` service exposing available methods, - Websocket can now call every IoT Box _action method_, - Longpolling and Websocket now have a common simple API (`sendMessage`/`onMessage`), - Longpolling can now fallback to websocket on every call (via `action` method), #### List of the methods: - `get`/`post`: base http methods to properly contact an IoT Box from the db client, - `websocket.sendMessage`/`websocket.onMessage`: websocket methods, - `longpolling.sendMessage`/`lonpolling.onMessage`: longpolling methods (+ `lonpolling.addListener`/`lonpolling.removeListener` kept for compatibility), - `action`: general method to properly handle a simple communication between the db and the IoT Box, Community PR: [https://github.com/odoo/odoo/pull/185506](https://github.com/odoo/odoo/pull/185506) Task: 4283647