Merge pull request #4651 from expsa/samir-aladawi-fix-login-otp-apis

[FIX] odex_benefit
This commit is contained in:
SamirLADOUI-sa 2025-09-15 11:39:15 +01:00 committed by GitHub
commit e7379bff7e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 65 additions and 31 deletions

View File

@ -46,45 +46,77 @@ class CreatePortalAccount(http.Controller):
force_format='E164',
raise_exception=False).replace('+', '')
benefit_data = {
# Create partner first
Partner = request.env['res.partner'].sudo()
partner_vals = {
'name': f'{first_name} {second_name}',
'father_name': first_name,
'father_family_name': second_name,
'sms_phone' : login,
'email' : email,
'is_from_portal': True,
'applicant_name': applicant_name,
'request_producer_relation': int(applicant_relation) if applicant_relation else False
'email': email,
'phone': formatted_phone,
'account_type': account_type,
}
# Check relation type
if relation_type and int(relation_type):
relation_record = request.env['relation.settings'].sudo().search([('id','=',relation_type)],limit = 1)
if relation_record:
benefit_data.update({'request_producer_relation':relation_record.id})
# Create the grant.benefit record
grant_benefit = request.env['grant.benefit'].sudo().with_context(force_website=True, is_benefit=True).create(benefit_data)
grant_benefit.create_user()
partner = Partner.create(partner_vals)
user = grant_benefit.user_id.sudo()
user.write({
# Create user and link to partner (no reset password)
Users = request.env['res.users'].sudo()
user = Users.with_context(no_reset_password=True).create({
'name': partner.name,
'login': login,
'partner_id': partner.id,
'active': True,
})
# Update user fields similar to create_user and original flow
user.sudo().write({
'password': password,
'otp_mobile_phone': login,
'email' : email,
'email': email,
'phone': formatted_phone,
'mobile': formatted_phone,
'account_type': account_type
})
# Make the user as portal
user.sudo().write({
'groups_id': [(3, request.env.ref('base.group_user', False).id)],
})
user.sudo().write({
'groups_id': [(4, request.env.ref('base.group_portal', False).id)],
})
# Generate OTP and enable it
user.generate_otp()
user.otp_enabled = True
# Only create a grant.benefit record for beneficiary/family account types
if account_type in ('beneficiary', 'family'):
benefit_data = {
'name': f'{first_name} {second_name}',
'father_name': first_name,
'father_family_name': second_name,
'sms_phone': login,
'email': email,
'is_from_portal': True,
'applicant_name': applicant_name,
'partner_id': partner.id,
'user_id': user.id,
'request_producer_relation': int(applicant_relation) if applicant_relation else False,
}
# Check relation type
if relation_type and int(relation_type):
relation_record = request.env['relation.settings'].sudo().search([('id', '=', relation_type)], limit=1)
if relation_record:
benefit_data.update({'request_producer_relation': relation_record.id})
# Create the grant.benefit record and let its create flow run
grant_benefit = request.env['grant.benefit'].sudo().with_context(force_website=True, is_benefit=True).create(benefit_data)
else:
grant_benefit = None
# Return success response
data = {
'status': True,
'message': 'User and benefit record created successfully.',
'user_id': user.id,
'grant_benefit_id': grant_benefit.id,
'grant_benefit_id': grant_benefit.id if grant_benefit else False,
}
return json.dumps(data)

View File

@ -2251,9 +2251,6 @@ class GrantBenefitProfile(models.Model):
user.sudo().write({
'groups_id': [(3, self.env.ref('base.group_user', False).id)],
})
# user.sudo().write({
# 'groups_id': [(4, self.env.ref('odex_benefit.group_benefit_user', False).id)],
# })
user.sudo().write({
'groups_id': [(4, self.env.ref('base.group_portal', False).id)],
})

View File

@ -7,15 +7,20 @@ import json
class AuthSignInHome(Home):
@http.route('/generate_otp', type='http', auth="public", website=True)
def generate_otp(self, **kw):
data = {'status': False,'msg': "",'otp':""}
data = {
'status': False,
'msg': 'No user linked to this phone number!'
}
if not kw.get('otp_mobile_phone'):
data['msg'] = 'No mobile phone number provided for OTP.'
data['msg'] = 'No mobile phone number provided for OTP!'
else:
user = request.env['res.users'].sudo().search([('login', '=', kw.get('otp_mobile_phone'))], limit=1)
user = request.env['res.users'].sudo().search([
('login', '=', kw.get('otp_mobile_phone')),
('partner_id.account_type', '=', kw.get('account_type'))
], limit=1)
if user:
data['status'] = True
data['msg'] = 'OTP is generated and sent successfully'
# data['otp'] = user.generate_otp() if user else ""
data['msg'] = 'OTP is generated and sent successfully!'
user.generate_otp()
return json.dumps(data)