Friday, May 9, 2025
4 changes · saas-18.1
Enhancements to existing features
Connecting to an IoT Box access point now more reliably prompts users, especially on Android devices, to sign in instead of requiring them to manually open a web page. The underlying web server setup was also simplified to make the IoT Box image easier to maintain.
Original PR description
Before this commit, when connecting to the IoT box access point on some devices (e.g. Android phone), there would be no popup to sign in to the network. Instead, the user would have to manually navigate to any URL, which would then load the IoT box homepage. After this commit, all HTTP requests on the access point will send a 301 redirect to the IoT box homepage. When Android sees that it gets redirected, it interprets this as a login page and triggers the 'sign-in' popup. In this commit we are also refactoring the structure of the nginx config files. Previously, we had configuration both in `/etc/nginx/nginx.conf` and `/etc/nginx/sites-enabled/default`. Now, we are using the modern structure of simply adding our config in the `/etc/nginx/conf.d/` folder. In addition, some redundant settings were removed to simplify the config. task-4724110 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Point of Sale now blocks deletion of a login number sequence while its related session is still open. This prevents users from being locked out or seeing backend errors when reopening an active register.
Original PR description
Currently, an error occurs on reopening a POS session if its 'Login Number Sequence' record has been deleted. This results in preventing the user from accessing the session. **Steps to produce:** -…
Currently, an error occurs on reopening a POS session if its 'Login Number Sequence' record has been deleted. This results in preventing the user from accessing the session.
**Steps to produce:**
- Install the `point_of_sale` module (with demo data).
- Open the register of the **Furniture Shop** from the POS dashboard.
- Now, without closing the register of shop, Navigate to:
`Settings > Technical > Sequences & Identifiers > Sequences (list)`.
- Delete the `Login Number Sequence of Session 3` sequence record.
- Reopen that shop session again.
- Observe the error at the backend.
**Error:**
```
UndefinedFunction
operator does not exist: integer = boolean
LINE 1: SELECT number_next FROM ir_sequence WHERE id=false FOR UPDAT...
^
HINT: No operator matches the given name and argument types. You might need
to add explicit type casts.
```
The error occurs because the system attempts to access the `login_number_seq_id` of the POS session at [1], but it is unavailable as the user has already deleted it.
This commit adds validation to prevent deletion of the 'Login Number Sequence' if the associated POS session is not closed.
[1] - https://github.com/odoo/odoo/blob/948f6c5afdf76b9a25daa120fec1edd21c5c08d6/addons/point_of_sale/models/pos_session.py#L404-L406
Sentry-6276299189
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes an issue where reopening the same Point of Sale session from another browser tab could fail after a related internal counter was deleted too early. The change keeps the needed counters available until the session is fully removed, reducing interruptions for cashiers and store staff.
Original PR description
Currently, an error occurs on reopening a POS session if its `Login Number Sequence` record has been deleted. ## **Steps to Reproduce:** 1) Install **Point of Sale** 2) Open POS and **duplicate** the…
Currently, an error occurs on reopening a POS session if its `Login Number Sequence` record has been deleted.
## **Steps to Reproduce:**
1) Install **Point of Sale**
2) Open POS and **duplicate** the tab (Assume Tab A and Tab B) 3) In **Tab A**, open any POS session (e.g., Bakery Shop). Ensure the session is in the **Opening Control** state either right after
clicking **Open Register** (when the Opening Control popup appears), or after clicking **Close Register** (when Open Register and Backend buttons are shown).
4) In **Tab B**, open **same** pos session(e.g Bakery Shop).
## **Note:**
- The error may not occur on the first attempt — multiple tries may be necessary to reproduce the issue.
## **Error:**
**UndefinedTable: relation `ir_sequence_235` does not exist** **LINE 1: SELECT nextval('ir_sequence_235')**
## **Root Cause:**
- The custom `unlink()` override was deleting the session’s `order_seq_id` and `login_number_seq_id` **before** the POS session itself was fully removed at [1]. As a result, any immediate client‐side call to `pos_session.login()` still referenced a sequence that had just been dropped, causing the `UndefinedTable` error when `nextval()` was invoked.
[1]- https://github.com/odoo/odoo/blob/d87ca9b15ae0742ff03ddbfdf4233e22857926a3/addons/point_of_sale/models/pos_session.py#L419
## **Solution:**
1) we remember which two sequences `(order_seq_id and login_number_seq_id)` belong to this session.
2) **Then**, we call **super().unlink()**, which actually removes the session record and all its related data (but doesn’t yet touch our remembered sequences).
3) **Finally**, once the session is fully deleted and no code will try to nextval() on its sequences, we delete those two sequences safely.
- with this commit we ensure that, when the POS UI immediately tries to log in (and calls `nextval()`), the sequences are still there. Only afterward do we clean them up.
Sentry-6233486197Rescheduling call activities in VoIP now includes the required contact/person information needed to display activity avatars. This prevents users from hitting an error popover crash during normal call activity management.
Original PR description
Before this commit, when rescheduling call activities, this could lead to the following crash: ``` Caused by: TypeError: Cannot read properties of undefined (reading 'avatarUrl') at ActivityListPopoverItem.template ``` This error state that the activity has no related persona in order to display its avatar in the popover. The persona data must be returned with activity data, and this is a required field therefore any activity should necessarily have a persona in their data. The reason of crash comes from voip method `_format_call_activities` that returns custom activity data that do not pass `persona`. This commit fixes the issue by passing `persona` data like in the usual `_to_store` of activity. The crash occurs since https://github.com/odoo/odoo/pull/190161 opw-4586756