Friday, August 14, 2026
2 changes · master
New functionality added to Odoo
Adds a lower-access internal user role designed for employees who need limited backend access without full regular-user privileges. HR teams can invite, monitor, deactivate, reactivate, and manage these employee users directly from employee records, improving onboarding and lifecycle management.
Original PR description
Light user group and access --------------------------- A light user is an internal user that have reduced privilege compared to a regular user. Technically speaking, the group_user is given to the…
Light user group and access --------------------------- A light user is an internal user that have reduced privilege compared to a regular user. Technically speaking, the group_user is given to the light users. A new regular user group is added to match the old 'user' role. (access are adapted accordingly so that the new regular group match the old user group) A light use have the following default groups: - Lunch : User : Order your meal - Attendance: User: Read his own attendances - HR: Employee - POS: User A light user can see its default privileges reduced (it remains a light user) but cannot have additional privileges. In that case, it will become a regular user. Light user use cases - One for each employee -------------------------------------------- A light user is meant to be created for each employee. The HR user can create one using the employee_user_widget or with a Invite button on the employee form. Each employee should have at least a light user (but this is not mandatory). The goal is to allow each employee to have a low access user (backend) without having to pay the full price of a regular user. -> A post init hook have been added to create a light user for each demo employee. Light user lifecycle for employees ---------------------------------- A new Employee user status widget is added to the employee form view. This widget allows the user to directly see if the employee has a user, and what is its status. The widget allows some actions depending on the status: - No user: create user (send invitation) - Invited: resend invitation / deactivate / copy invitation link - Confirmed: Deactivate / reset password - Archived: Reactivate When archiving the user, the end of collaboration is also called in the process, if the employee is under contract. Invitation Link --------------- For now, invitation flow involves only the standard sign up link, that targets one user at a time. Later, the invitation flow will be improved to ease the onboarding of multiple new employee at the same time. The final solution has not been found yet. Task-6112938
Self-ordering customers can now see and choose optional add-on products after adding an item to their cart. This helps businesses promote relevant extras while giving customers a clearer, more consistent product selection experience.
Original PR description
Add support for selecting optional products after adding a product to the cart, and introduce a shared layout for product-related pages. ### Optional product selection Products linked through…
Add support for selecting optional products after adding a product to the cart, and introduce a shared layout for product-related pages. ### Optional product selection Products linked through `pos_optional_product_ids` are proposed on a dedicated optional product page after adding a product. Customers can add and configure each suggestion, including attributes and combo choices, before continuing to the cart. Product selection is moved into a shared `ProductCard` component used by the product list, combo and optional product pages. This also centralizes product availability rules and the fly-to-cart animation. Self-order configurability helpers are moved from `SelfOrder` to `product.template`, and `product_name_widget` is replaced by the shared `ProductCard`. ### Shared product page layout The product, combo and optional product pages now use a shared `ProductInterface` component for their common layout: ```text +---------------------------+ | Header | +---------------------------+ | | | Scrollable Content | | +---------------------+ | | | Name & Image | | | +---------------------+ | | | | | | | Page Content | | | | | | | +---------------------+ | | | +---------------------------+ | Footer | +---------------------------+ ``` The component handles the shared header, sticky title, scroll shadow and footer, while exposing `content`, `scroll-end-content` and `footer` slots so each page only defines its specific content. Task-5441062