-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathforms.py
More file actions
111 lines (97 loc) · 4.56 KB
/
forms.py
File metadata and controls
111 lines (97 loc) · 4.56 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
"""
WTForms for Simple Project Management System
"""
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, DateField, SelectField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from models import User, Project, Task
from datetime import datetime, date
class LoginForm(FlaskForm):
"""Login form"""
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
submit = SubmitField('Login')
class RegistrationForm(FlaskForm):
"""User registration form"""
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
password2 = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
role = SelectField('Role', choices=[('team_member', 'Team Member'), ('project_manager', 'Project Manager')])
submit = SubmitField('Register')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError('Username already exists. Please choose a different one.')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user:
raise ValidationError('Email already registered. Please use a different email.')
class ProjectForm(FlaskForm):
"""Project creation/editing form"""
name = StringField('Project Name', validators=[DataRequired(), Length(min=3, max=200)])
description = TextAreaField('Description', validators=[Length(max=1000)])
start_date = DateField('Start Date', validators=[DataRequired()], default=date.today)
end_date = DateField('End Date', validators=[DataRequired()])
status = SelectField('Status', choices=[
('active', 'Active'),
('completed', 'Completed'),
('on_hold', 'On Hold'),
('cancelled', 'Cancelled')
])
submit = SubmitField('Save Project')
def validate_end_date(self, end_date):
if end_date.data <= self.start_date.data:
raise ValidationError('End date must be after start date.')
class TaskForm(FlaskForm):
"""Task creation/editing form"""
title = StringField('Task Title', validators=[DataRequired(), Length(min=3, max=200)])
description = TextAreaField('Description', validators=[Length(max=1000)])
status = SelectField('Status', choices=[
('To Do', 'To Do'),
('In Progress', 'In Progress'),
('Done', 'Done')
])
priority = SelectField('Priority', choices=[
('low', 'Low'),
('medium', 'Medium'),
('high', 'High'),
('urgent', 'Urgent')
])
due_date = DateField('Due Date')
assigned_to = SelectField('Assign To', coerce=int)
submit = SubmitField('Save Task')
class CommentForm(FlaskForm):
"""Comment form for tasks"""
message = TextAreaField('Comment', validators=[DataRequired(), Length(min=1, max=500)])
submit = SubmitField('Add Comment')
class UserForm(FlaskForm):
"""User management form (admin only)"""
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[Length(min=6)])
role = SelectField('Role', choices=[
('team_member', 'Team Member'),
('project_manager', 'Project Manager'),
('admin', 'Admin')
])
is_active = BooleanField('Active')
submit = SubmitField('Save User')
def __init__(self, user_id=None, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.user_id = user_id
def validate_username(self, username):
if self.user_id:
user = User.query.filter(User.username == username.data, User.id != self.user_id).first()
else:
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError('Username already exists.')
def validate_email(self, email):
if self.user_id:
user = User.query.filter(User.email == email.data, User.id != self.user_id).first()
else:
user = User.query.filter_by(email=email.data).first()
if user:
raise ValidationError('Email already registered.')