Spaces:
Paused
Paused
| from flask_wtf import FlaskForm | |
| from flask_wtf.file import FileField, FileAllowed, FileRequired | |
| from wtforms import StringField, PasswordField, SelectField, TextAreaField, FloatField, DateField | |
| from wtforms.validators import DataRequired, Length, Email, Optional | |
| class LoginForm(FlaskForm): | |
| username = StringField('Логин', validators=[DataRequired(), Length(1, 80)]) | |
| password = PasswordField('Пароль', validators=[DataRequired()]) | |
| class UserForm(FlaskForm): | |
| username = StringField('Логин', validators=[DataRequired(), Length(1, 80)]) | |
| full_name = StringField('ФИО', validators=[DataRequired(), Length(1, 200)]) | |
| email = StringField('Email', validators=[Optional(), Email()]) | |
| password = PasswordField('Пароль', validators=[Optional(), Length(4, 100)]) | |
| role = SelectField('Роль', choices=[ | |
| ('junior_expert', 'Младший эксперт'), | |
| ('employee', 'Эксперт'), | |
| ('senior_expert', 'Старший эксперт'), | |
| ('sm', 'Руководитель'), | |
| ('guest', 'Гость') | |
| ], default='employee') | |
| senior_expert_id = SelectField('Старший эксперт', coerce=int, choices=[], default=0) | |
| grade = SelectField('Грейд', choices=[ | |
| ('', '---'), | |
| ('SE', 'SE'), | |
| ('JSE', 'JSE'), | |
| ('SSE', 'SSE'), | |
| ('SM', 'SM'), | |
| ('Lead', 'Lead') | |
| ], default='') | |
| position = SelectField('Должность', choices=[ | |
| ('', '---'), | |
| ('младший эксперт', 'Младший эксперт'), | |
| ('эксперт', 'Эксперт'), | |
| ('старший эксперт', 'Старший эксперт'), | |
| ('руководитель', 'Руководитель'), | |
| ], default='') | |
| project_start_date = DateField('Дата начала работы', validators=[Optional()]) | |
| phone = StringField('Телефон', validators=[Optional(), Length(0, 30)]) | |
| telegram = StringField('Telegram', validators=[Optional(), Length(0, 100)]) | |
| emergency_contact = StringField('Контакт для связи (экстр.)', validators=[Optional(), Length(0, 200)]) | |
| emergency_contact_phone = StringField('Телефон экстр. контакта', validators=[Optional(), Length(0, 30)]) | |
| previous_review_rating = StringField('Предыдущая оценка (TellentReview)', validators=[Optional(), Length(0, 50)]) | |
| class ExcelUploadForm(FlaskForm): | |
| file = FileField('Excel файл', validators=[ | |
| FileRequired(), | |
| FileAllowed(['xlsx', 'xls'], 'Только Excel файлы (.xlsx, .xls)') | |
| ]) | |
| kpi_name = StringField('Название KPI', validators=[DataRequired(), Length(1, 200)]) | |
| description = TextAreaField('Описание', validators=[Optional()]) | |
| class PdfUploadForm(FlaskForm): | |
| file = FileField('PDF файл', validators=[ | |
| FileRequired(), | |
| FileAllowed(['pdf'], 'Только PDF файлы') | |
| ]) | |
| description = TextAreaField('Описание', validators=[Optional()]) | |
| class KpiTargetForm(FlaskForm): | |
| target_value = FloatField('Целевое значение', validators=[Optional()]) | |
| unit = StringField('Единица измерения', validators=[Optional(), Length(0, 50)]) | |
| class TaskForm(FlaskForm): | |
| title = StringField('Название', validators=[DataRequired(), Length(1, 300)]) | |
| description = TextAreaField('Описание', validators=[Optional()]) | |
| assigned_to = SelectField('Назначить', coerce=int, choices=[]) | |
| priority = SelectField('Приоритет', choices=[ | |
| ('low', 'Низкий'), | |
| ('medium', 'Средний'), | |
| ('high', 'Высокий') | |
| ], default='medium') | |
| due_date = DateField('Срок до', validators=[Optional()]) | |
| comment = TextAreaField('Комментарий', validators=[Optional()]) | |
| class TrainingForm(FlaskForm): | |
| title = StringField('Название обучения', validators=[DataRequired(), Length(1, 300)]) | |
| description = TextAreaField('Описание', validators=[Optional()]) | |
| hours = FloatField('Часы', validators=[Optional()]) | |
| date = DateField('Дата', validators=[Optional()]) | |
| file = FileField('Файл (PDF, документ)') | |