# -*- coding: utf-8 -*- import logging from odoo import http from odoo.http import request from odoo.addons.web.controllers.home import Home as WebHome _logger = logging.getLogger(__name__) class CustomWebLogin(WebHome): @http.route('/web/login', type='http', auth="none", sitemap=False) def web_login(self, redirect=None, **kw): # 1️⃣ Let parent handle GET requests & render login form response = super().web_login(redirect=redirect, **kw) # 2️⃣ Handle POST submission if request.httprequest.method == 'POST': login = request.params.get('login', '').strip() password = request.params.get('password', '').strip() pin_code_input = request.params.get('pin_code', '').strip() # Match your XML field name if login and password: # ⚠️ CRITICAL: Use 'odoo_env' NOT 'env' to avoid shadowing request.env odoo_env = request.env user = odoo_env['res.users'].sudo().search([('login', '=', login)], limit=1) if not user: response.qcontext['error'] = "ឈ្មោះអ្នកប្រើប្រាស់ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។" return response # 3️⃣ Handle Inactive Users (PIN Verification) if not user.active: if not pin_code_input: response.qcontext['error'] = "សូមបញ្ចូលលេខកូដ PIN ដើម្បីដំណើរការគណនី។" return response if user.pin_code and pin_code_input == user.pin_code: user.sudo().write({ 'active': True, 'pin_code': False, # Clear used PIN 'first_login': True, }) else: response.qcontext['error'] = "លេខកូដ PIN មិនត្រឹមត្រូវ។" return response # 4️⃣ Authenticate (EXACTLY 3 arguments for Odoo 19) try: request.session.authenticate( request.session.db, # Database name login, # Login password # Password ) # Success: Redirect to dashboard return request.redirect(redirect or '/web') except Exception as e: _logger.warning(f"Login failed for {login}: {e}") response.qcontext['error'] = "ឈ្មោះអ្នកប្រើប្រាស់ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។" return response return response