first commit
This commit is contained in:
		
						commit
						b71ea45681
					
				
					 898 changed files with 138202 additions and 0 deletions
				
			
		
							
								
								
									
										157
									
								
								accounts/forms.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								accounts/forms.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,157 @@
 | 
			
		|||
from django import forms
 | 
			
		||||
from django.contrib.auth import get_user_model
 | 
			
		||||
from django.contrib.auth.forms import UserCreationForm
 | 
			
		||||
from .models import Profile, Role
 | 
			
		||||
from common.consts import UserRoles
 | 
			
		||||
 | 
			
		||||
User = get_user_model()
 | 
			
		||||
 | 
			
		||||
class CustomerForm(forms.ModelForm):
 | 
			
		||||
    """فرم برای افزودن مشترک جدید"""
 | 
			
		||||
    first_name = forms.CharField(
 | 
			
		||||
        max_length=150,
 | 
			
		||||
        label="نام",
 | 
			
		||||
        widget=forms.TextInput(attrs={
 | 
			
		||||
            'class': 'form-control',
 | 
			
		||||
            'placeholder': 'نام'
 | 
			
		||||
        })
 | 
			
		||||
    )
 | 
			
		||||
    last_name = forms.CharField(
 | 
			
		||||
        max_length=150,
 | 
			
		||||
        label="نام خانوادگی",
 | 
			
		||||
        widget=forms.TextInput(attrs={
 | 
			
		||||
            'class': 'form-control',
 | 
			
		||||
            'placeholder': 'نام خانوادگی'
 | 
			
		||||
        })
 | 
			
		||||
    )
 | 
			
		||||
    
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Profile
 | 
			
		||||
        fields = [
 | 
			
		||||
            'phone_number_1', 'phone_number_2', 'national_code', 
 | 
			
		||||
            'address', 'card_number', 'account_number'
 | 
			
		||||
        ]
 | 
			
		||||
        widgets = {
 | 
			
		||||
            'phone_number_1': forms.TextInput(attrs={
 | 
			
		||||
                'class': 'form-control',
 | 
			
		||||
                'placeholder': '09123456789'
 | 
			
		||||
            }),
 | 
			
		||||
            'phone_number_2': forms.TextInput(attrs={
 | 
			
		||||
                'class': 'form-control',
 | 
			
		||||
                'placeholder': '02112345678'
 | 
			
		||||
            }),
 | 
			
		||||
            'national_code': forms.TextInput(attrs={
 | 
			
		||||
                'class': 'form-control',
 | 
			
		||||
                'placeholder': '1234567890',
 | 
			
		||||
                'maxlength': '10',
 | 
			
		||||
                'required': 'required'
 | 
			
		||||
            }),
 | 
			
		||||
            'address': forms.Textarea(attrs={
 | 
			
		||||
                'class': 'form-control',
 | 
			
		||||
                'placeholder': 'آدرس کامل',
 | 
			
		||||
                'rows': '3'
 | 
			
		||||
            }),
 | 
			
		||||
            'card_number': forms.TextInput(attrs={
 | 
			
		||||
                'class': 'form-control',
 | 
			
		||||
                'placeholder': 'شماره کارت بانکی',
 | 
			
		||||
                'maxlength': '16'
 | 
			
		||||
            }),
 | 
			
		||||
            'account_number': forms.TextInput(attrs={
 | 
			
		||||
                'class': 'form-control',
 | 
			
		||||
                'placeholder': 'شماره حساب بانکی',
 | 
			
		||||
                'maxlength': '20'
 | 
			
		||||
            }),
 | 
			
		||||
        }
 | 
			
		||||
        labels = {
 | 
			
		||||
            'phone_number_1': 'تلفن ۱',
 | 
			
		||||
            'phone_number_2': 'تلفن ۲',
 | 
			
		||||
            'national_code': 'کد ملی',
 | 
			
		||||
            'address': 'آدرس',
 | 
			
		||||
            'card_number': 'شماره کارت',
 | 
			
		||||
            'account_number': 'شماره حساب',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def clean_national_code(self):
 | 
			
		||||
        national_code = self.cleaned_data.get('national_code')
 | 
			
		||||
        if national_code:
 | 
			
		||||
            # Check if user with this national code exists
 | 
			
		||||
            existing_user = User.objects.filter(username=national_code).first()
 | 
			
		||||
            if existing_user:
 | 
			
		||||
                # If we're editing and the user is the same, it's OK
 | 
			
		||||
                if self.instance and self.instance.user and existing_user == self.instance.user:
 | 
			
		||||
                    return national_code
 | 
			
		||||
                # Otherwise, it's a duplicate
 | 
			
		||||
                raise forms.ValidationError('این کد ملی قبلاً استفاده شده است.')
 | 
			
		||||
        return national_code
 | 
			
		||||
 | 
			
		||||
    def save(self, commit=True):
 | 
			
		||||
        # Check if this is an update (instance exists)
 | 
			
		||||
        if self.instance and self.instance.pk:
 | 
			
		||||
            # Update existing profile
 | 
			
		||||
            profile = super().save(commit=False)
 | 
			
		||||
            
 | 
			
		||||
            # Update user information
 | 
			
		||||
            user = profile.user
 | 
			
		||||
            user.first_name = self.cleaned_data['first_name']
 | 
			
		||||
            user.last_name = self.cleaned_data['last_name']
 | 
			
		||||
            user.save()
 | 
			
		||||
            
 | 
			
		||||
            # Set affairs, county, and broker from current user's profile
 | 
			
		||||
            if hasattr(self, 'request') and self.request.user.is_authenticated:
 | 
			
		||||
                current_user_profile = getattr(self.request.user, 'profile', None)
 | 
			
		||||
                if current_user_profile:
 | 
			
		||||
                    profile.affairs = current_user_profile.affairs
 | 
			
		||||
                    profile.county = current_user_profile.county
 | 
			
		||||
                    profile.broker = current_user_profile.broker
 | 
			
		||||
            
 | 
			
		||||
            if commit:
 | 
			
		||||
                profile.save()
 | 
			
		||||
                self.save_m2m()
 | 
			
		||||
            
 | 
			
		||||
            return profile
 | 
			
		||||
        else:
 | 
			
		||||
            # Create new profile
 | 
			
		||||
            # Get national code as username
 | 
			
		||||
            national_code = self.cleaned_data.get('national_code')
 | 
			
		||||
            if not national_code:
 | 
			
		||||
                raise forms.ValidationError('کد ملی الزامی است.')
 | 
			
		||||
            
 | 
			
		||||
            # Create User with default password
 | 
			
		||||
            user = User.objects.create_user(
 | 
			
		||||
                username=national_code,
 | 
			
		||||
                email='',  # Empty email
 | 
			
		||||
                password='sooha1234',  # Default password
 | 
			
		||||
                first_name=self.cleaned_data['first_name'],
 | 
			
		||||
                last_name=self.cleaned_data['last_name']
 | 
			
		||||
            )
 | 
			
		||||
            
 | 
			
		||||
            # Create Profile
 | 
			
		||||
            profile = super().save(commit=False)
 | 
			
		||||
            profile.user = user
 | 
			
		||||
            profile.owner = user
 | 
			
		||||
            
 | 
			
		||||
            # Set affairs, county, and broker from current user's profile
 | 
			
		||||
            if hasattr(self, 'request') and self.request.user.is_authenticated:
 | 
			
		||||
                current_user_profile = getattr(self.request.user, 'profile', None)
 | 
			
		||||
                if current_user_profile:
 | 
			
		||||
                    profile.affairs = current_user_profile.affairs
 | 
			
		||||
                    profile.county = current_user_profile.county
 | 
			
		||||
                    profile.broker = current_user_profile.broker
 | 
			
		||||
            
 | 
			
		||||
            if commit:
 | 
			
		||||
                profile.save()
 | 
			
		||||
                self.save_m2m()
 | 
			
		||||
                
 | 
			
		||||
                # Add customer role after profile is saved
 | 
			
		||||
                customer_role = Role.objects.filter(slug=UserRoles.CUSTOMER.value).first()
 | 
			
		||||
                if customer_role:
 | 
			
		||||
                    profile.roles.add(customer_role)
 | 
			
		||||
                else:
 | 
			
		||||
                    # Create customer role if it doesn't exist
 | 
			
		||||
                    customer_role = Role.objects.create(
 | 
			
		||||
                        name='مشترک',
 | 
			
		||||
                        slug=UserRoles.CUSTOMER.value
 | 
			
		||||
                    )
 | 
			
		||||
                    profile.roles.add(customer_role)
 | 
			
		||||
            
 | 
			
		||||
            return profile 
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue