from django import forms from django.contrib.auth.forms import AuthenticationForm from django_registration.forms import RegistrationFormUniqueEmail from main.models import UserProfile class CustomRegistrationForm(RegistrationFormUniqueEmail): """ Форма для регистрации :class:`django_registration.forms.RegistrationFormUniqueEmail` с добавлением bootstrap-класса "form-control". :param visible_fields.email: Поле для ввода email, зарегистрированного на Zendesk :type visible_fields.email: :class:`django_registration.forms.RegistrationFormUniqueEmail` """ def __init__(self, *args, **kwargs) -> RegistrationFormUniqueEmail: super().__init__(*args, **kwargs) for visible in self.visible_fields(): if visible.field.widget.attrs.get('class', False): if visible.field.widget.attrs['class'].find('form-control') < 0: visible.field.widget.attrs['class'] += 'form-control' else: visible.field.widget.attrs['class'] = 'form-control' if visible.html_name != 'email': visible.field.required = False class Meta(RegistrationFormUniqueEmail.Meta): fields = RegistrationFormUniqueEmail.Meta.fields class AdminPageUsers(forms.Form): """ Форма для установки статусов engineer или light_agent пользователям. :param users: Поле для установки статуса :type users: :class:`ModelMultipleChoiceField` """ users = forms.ModelMultipleChoiceField( queryset=UserProfile.objects.filter(role='agent'), widget=forms.CheckboxSelectMultiple( attrs={ 'class': 'form-check-input', } ), label='' ) class CustomAuthenticationForm(AuthenticationForm): """ Форма для авторизации :class:`django.contrib.auth.forms.AuthenticationForm` с изменением поля username на email. :param username: Поле для ввода email пользователя :type username: :class:`django.forms.fields.CharField` """ username = forms.CharField( label="Электронная почта", widget=forms.EmailInput(), ) error_messages = { 'invalid_login': "Пожалуйста, введите правильные электронную почту и пароль. Оба поля " "могут быть чувствительны к регистру." , 'inactive': "Аккаунт не активен.", } INTERVAL_CHOICES = [ ('days', 'Дни'), ('months', 'Месяцы') ] DISPLAY_CHOICES = [ ('hours', 'Часы'), ('days', 'Дни/Смены') ] class StatisticForm(forms.Form): """ Форма отображения интервалов работы пользователя. :param email: Поле для ввода email пользователя :type email: :class:`django.forms.fields.EmailField` :param interval: Расчет интервала рабочего времени :type interval: :class:`django.forms.fields.CharField` :param display_format: Формат отображения данных :type display_format: :class:`django.forms.fields.CharField` :param range_start: Дата и время начала работы :type range_start: :class:`django.forms.fields.DateField` :param range_end: Дата и время окончания работы :type range_end: :class:`django.forms.fields.DateField` """ email = forms.EmailField( label='Электроная почта', widget=forms.EmailInput( attrs={ 'placeholder': 'example@ngenix.ru', 'class': 'form-control', 'style': 'background-color:#f2f2f2;' } ), ) interval = forms.ChoiceField( label='Выберите интервалы времени работы', choices=INTERVAL_CHOICES, widget=forms.RadioSelect( attrs={ 'class': 'btn-check', } ) ) display_format = forms.ChoiceField( label='Выберите формат отображения', choices=DISPLAY_CHOICES, widget=forms.RadioSelect( attrs={ 'class': 'btn-check', } ) ) range_start = forms.DateField( label='Начало статистики', widget=forms.DateInput( attrs={ 'type': 'date', 'class': 'btn btn-secondary text-primary bg-white', } ), ) range_end = forms.DateField( label='Конец статистики', widget=forms.DateInput( attrs={ 'type': 'date', 'class': 'btn btn-secondary text-primary bg-white', } ), )