<<<<<<< HEAD from django.contrib import admin from django.contrib.auth.forms import UserChangeForm, UsernameField ======= # This file is no longer used. All admin classes are now in user.pyfrom django.contrib import admin from django.contrib.auth.forms import UserChangeForm, UsernameField, UserCreationForm >>>>>>> develop from django.contrib.auth.admin import UserAdmin from django.utils.translation import gettext_lazy as _ from rest_framework.authtoken.models import TokenProxy from ajaxdatatable.admin import AjaxDatatable from django.contrib import admin from apps.account.models import User from django import forms <<<<<<< HEAD from django.contrib import admin from django.urls import path, reverse from django.shortcuts import render, redirect from django.contrib import messages ======= from django.urls import path, reverse from django.shortcuts import render, redirect from django.contrib import messages from django.contrib.auth.models import Group from phonenumber_field.formfields import PhoneNumberField >>>>>>> develop from apps.account.models import ProfessorUser <<<<<<< HEAD @admin.register(ProfessorUser) class ProfessorUserAdmin(UserAdmin, AjaxDatatable): list_display = ( 'device_id', 'email', 'fullname', 'user_type','last_login', 'date_joined', ======= class ProfessorUserCreationForm(UserCreationForm): phone_number = PhoneNumberField( help_text="Enter the phone number in international format. Example: +989012023212", required=False ) class Meta: model = ProfessorUser fields = ('fullname', 'email', 'phone_number') @admin.register(ProfessorUser) class ProfessorUserAdmin(UserAdmin, AjaxDatatable): add_form = ProfessorUserCreationForm list_display = ( 'email', 'fullname', 'last_login', 'date_joined', >>>>>>> develop ) ordering = 'last_login', readonly_fields = ('date_joined',) exclude = ('password', 'user_permissions') add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('fullname', 'email', 'phone_number',), }), ('other', { 'classes': ('wide',), 'fields': ('avatar', 'info', 'skill'), }), ('Password', { 'classes': ('wide',), 'fields': ('password1', 'password2'), }), ) search_fields = ( 'email', 'fullname', ) fieldsets = ( (_('Personal info'), {'fields': ('fullname', 'email', 'phone_number', 'avatar', 'info', 'skill')}), (_('Permissions'), { 'fields': ('is_active', 'groups', 'password'), }), (_('Important dates'), {'fields': ('last_login', 'date_joined', 'fcm')}), ) def save_model(self, request, obj, form, change): <<<<<<< HEAD if not change: obj.set_password(form.cleaned_data['password1']) obj.user_type = User.UserType.PROFESSOR super().save_model(request, obj, form, change) ======= if not change: # Creating a new professor # Check if a user with this email already exists email = form.cleaned_data.get('email') existing_user = User.objects.filter(email=email).first() if existing_user: # If user exists and is already a professor, show error if existing_user.user_type == User.UserType.PROFESSOR: messages.error(request, f"A professor with the email {email} already exists.") return # اضافه کردن نقش professor بدون حذف نقش‌های قبلی existing_user.add_role('professor') # Update user fields from form data existing_user.fullname = form.cleaned_data.get('fullname') existing_user.phone_number = form.cleaned_data.get('phone_number') existing_user.avatar = form.cleaned_data.get('avatar') existing_user.info = form.cleaned_data.get('info') existing_user.skill = form.cleaned_data.get('skill') # Set password if provided if 'password1' in form.cleaned_data and form.cleaned_data['password1']: existing_user.set_password(form.cleaned_data['password1']) # Save the user existing_user.save() # Show success message messages.success(request, f"The user with email {email} has been converted to a professor.") # Set obj to None to prevent further processing obj = None return else: # New user, set password obj.set_password(form.cleaned_data['password1']) if obj: # Only proceed if obj is not None obj.add_role('professor') super().save_model(request, obj, form, change) >>>>>>> develop @admin.display(description='Phone Number') def _phone_number(self, obj): return obj.phone_number def get_readonly_fields(self, request, obj=None): """ Restrict the ability to modify groups to superusers only. """ readonly = list(self.readonly_fields) if not request.user.is_superuser: readonly.append('groups') return readonly