59 lines
2.9 KiB
Python
59 lines
2.9 KiB
Python
|
|
# -*- 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
|