82 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			82 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
from odoo.http import request, route
 | 
						|
from odoo.addons.portal.controllers.portal import CustomerPortal
 | 
						|
 
 | 
						|
class my_details(CustomerPortal):
 | 
						|
     
 | 
						|
    @route(['/my/account'], type='http', auth='user', website=True)
 | 
						|
    def account(self, redirect=None, **post):
 | 
						|
        values = self._prepare_portal_layout_values()
 | 
						|
        partner = request.env.user.partner_id
 | 
						|
        values.update({
 | 
						|
            'error': {},
 | 
						|
            'error_message': [],
 | 
						|
        })
 | 
						|
 
 | 
						|
        if post:
 | 
						|
            reset_password_fields=['old_pwd','new_password','confirm_pwd']
 | 
						|
            reset_password_fields_vals = {}
 | 
						|
              
 | 
						|
            for index in reset_password_fields:
 | 
						|
                if index in post:
 | 
						|
                    reset_password_fields_vals.update({index: post.get(index,0)})
 | 
						|
                    post.pop(index)
 | 
						|
              
 | 
						|
            error, error_message = self.details_form_validate(post)
 | 
						|
              
 | 
						|
            if reset_password_fields_vals:
 | 
						|
                old_password=reset_password_fields_vals.get('old_pwd',None)
 | 
						|
                new_password=reset_password_fields_vals.get('new_password',None)
 | 
						|
                confirm_password=reset_password_fields_vals.get('confirm_pwd',None)    
 | 
						|
             
 | 
						|
            if old_password or new_password or confirm_password:
 | 
						|
                # Validation
 | 
						|
                for field_name in reset_password_fields:
 | 
						|
                    if not reset_password_fields_vals.get(field_name):
 | 
						|
                        error[field_name] = 'missing'
 | 
						|
                          
 | 
						|
                # error message for empty required fields
 | 
						|
                if [err for err in list(error.values()) if err == 'missing']:
 | 
						|
                    if 'Some required fields are empty.' not in error_message:
 | 
						|
                        error_message.append('Some required fields are empty.')
 | 
						|
                 
 | 
						|
                # error message for compare a old_password and new_password
 | 
						|
                if new_password != confirm_password:
 | 
						|
                    error['new_password']= 'error'
 | 
						|
                    error['confirm_pwd']= 'error'
 | 
						|
                    error_message.append('The new password and its confirmation must be identical.')
 | 
						|
                elif not error:    
 | 
						|
                    try:
 | 
						|
                        if request.env['res.users'].change_password(old_password, new_password.strip()):
 | 
						|
                            print("password change")
 | 
						|
                    except Exception:
 | 
						|
                        #error message for old_password wrong
 | 
						|
                        error['old_pwd']= 'error'
 | 
						|
                        error_message.append('The old password you provided is incorrect, your password was not changed.')
 | 
						|
                         
 | 
						|
            values.update({'error': error, 'error_message': error_message})
 | 
						|
            values.update(post)
 | 
						|
            if not error:
 | 
						|
                values = {key: post[key] for key in self.MANDATORY_BILLING_FIELDS}
 | 
						|
                values.update({key: post[key] for key in self.OPTIONAL_BILLING_FIELDS if key in post})
 | 
						|
                values.update({'zip': values.pop('zipcode', '')})
 | 
						|
                partner.sudo().write(values)
 | 
						|
                if redirect:
 | 
						|
                    return request.redirect(redirect)
 | 
						|
                return request.redirect('/my/home')
 | 
						|
 
 | 
						|
        countries = request.env['res.country'].sudo().search([])
 | 
						|
        states = request.env['res.country.state'].sudo().search([])
 | 
						|
 
 | 
						|
        values.update({
 | 
						|
            'partner': partner,
 | 
						|
            'countries': countries,
 | 
						|
            'states': states,
 | 
						|
            'has_check_vat': hasattr(request.env['res.partner'], 'check_vat'),
 | 
						|
            'redirect': redirect,
 | 
						|
            'page_name': 'my_details',
 | 
						|
        })
 | 
						|
 
 | 
						|
        response = request.render("portal.portal_my_details", values)
 | 
						|
        response.headers['X-Frame-Options'] = 'DENY'
 | 
						|
        return response
 |