File size: 4,281 Bytes
04477e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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, документ)')