143 lines
4.9 KiB
Python
143 lines
4.9 KiB
Python
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) -> None:
|
||
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',
|
||
}
|
||
),
|
||
)
|
||
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',
|
||
}
|
||
),
|
||
)
|