forms.py (12891B)
1 from flask_wtf import FlaskForm 2 from wtforms import StringField, SubmitField, PasswordField, BooleanField, SelectField, DateField, TelField, EmailField, FloatField, IntegerField, TimeField, DecimalField 3 from wtforms.validators import DataRequired, optional, length, InputRequired, EqualTo, NumberRange, ValidationError 4 5 class GreaterThan: 6 """ 7 Compares the values of two fields. 8 9 :param fieldname: 10 The name of the compared field. 11 :param message: 12 Error message to raise in case of validation error. 13 """ 14 def __init__(self, fieldname, message=None): 15 self.fieldname = fieldname 16 self.message = message 17 18 def __call__(self, form, field): 19 try: 20 other = form[self.fieldname] 21 except KeyError as exc: 22 raise ValidationError( 23 field.gettext("Invalid fieldname '$s'.") % self.fieldname 24 ) from exc 25 if field.data > other.data: 26 return 27 28 d = { 29 "other_label":hasattr(other,"label") 30 and other.label.text 31 or self.fieldname, 32 "other_name": self.fieldname, 33 } 34 message = self.message 35 if message is None: 36 message = field.gettext("Field must be Greater than %(other_name)s.") 37 38 raise ValidationError(message % d) 39 40 class LessThan: 41 """ 42 Compares the values of two fields 43 44 :param fieldname: 45 The name of the field to compare to. 46 :param message: 47 Error message to raise in case of validation error. 48 """ 49 def __init__(self, fieldname, message=None): 50 self.fieldname = fieldname 51 self.message = message 52 53 def __call__(self, form, field): 54 try: 55 other = form[self.fieldname] 56 except KeyError as exc: 57 raise ValidationError( 58 field.gettext("Invalid field name '%s'.") % self.fieldname 59 ) from exc 60 if field.data < other.data: 61 return 62 63 d = { 64 "other_label":hasattr(other, "label") 65 and other.label.text 66 or self.fieldname, 67 "other_name": self.fieldname, 68 } 69 message = self.message 70 if message is None: 71 message = field.gettext("Field must be less than %(other_label)s.") 72 73 raise ValidationError(message % d) 74 75 # Login class currently assumes mongodb collection(Users) with structure 76 # { 77 # Name: [username], 78 # Password: [hashed_password] 79 # } 80 ##### ##### 81 ### Sub Forms ### 82 ##### ##### 83 #class ContactForm(FlaskForm): #Fill out, can apply to volunteers as well as agreement/project contacts etc... 84 class BudgetForm(FlaskForm): #Iff ContactForm is completed change to be subform of ContactForm 85 laborBudget = FloatField('Labor', validators=[optional()]) 86 travelBudget = FloatField('Travel', validators=[optional()]) 87 suppliesBudget = FloatField('Supplies', validators=[optional()]) 88 perdiemBudget = FloatField('Per Diem', validators=[optional()]) 89 equipmentBudget = FloatField('Equipment', validators=[optional()]) 90 indirectBudget = FloatField('Indirect', validators=[optional()]) 91 contractingBudget = FloatField('Contracting', validators=[optional()]) 92 lodgingBudget = FloatField('Lodging', validators=[optional()]) 93 otherBudget = FloatField('Other', validators=[optional()]) 94 95 ##### ##### 96 ### Main Forms ### 97 ##### ##### 98 class LoginForm(FlaskForm): 99 username = StringField('Username', validators=[DataRequired()]) 100 password = PasswordField('Password', validators=[DataRequired()]) 101 login = SubmitField('Login') 102 103 #ATTEMPT AT SETTING A JOB APPLICATION FORM 104 #class NewUserApplicationForm(NewUserForm): 105 # paymentAddress = BooleanField('Address-is this the address you want your check sent to?',validators=[DataRequired()] 106 # reference1 = StringField('Please include name, phone number, and Title/Relationship.',validators=[optional()] 107 # reference2 = StringField('Please include name',validators=[optional()] 108 # reference3 = StringField('',validators=[optional()] 109 # priorEmployer = StringField('Please include Company name, phone number, and supervisor.',validators=[optional()] 110 111 112 class NewUserForm(FlaskForm): 113 fname = StringField('First Name', validators=[DataRequired()]) 114 mname = StringField('Middle Initial', validators=[DataRequired(),length(max=1)]) 115 lname = StringField('Last Name', validators=[DataRequired()]) 116 birthday = DateField('Birthday',validators=[DataRequired()])# Ought to change this to some validation for age range accepted 117 role = SelectField('Role',validators=[DataRequired()]) 118 address = StringField('Address',validators=[DataRequired()])# Require some sort of validator for check... 119 branch = SelectField('Branch',validators=[DataRequired(),length(max=200)]) 120 phonenumber = TelField('Phone Number',validators=[DataRequired(),length(max=12)])# Require some sort of validator for check... 121 email = EmailField('Email',validators=[DataRequired()])# Require some sort of validator for check... 122 payPeriod = StringField('Pay Period Override',validators=[optional()])# May not need this at all? 123 payValue = FloatField('Pay Value Override',validators=[optional()])# Require some sort of validator for check... 124 setActive = BooleanField('Active',default="checked")# Require some sort of validator for check... 125 createNewUser = SubmitField('Create New User') 126 127 class ChangePasswordForm(FlaskForm): 128 newpass = PasswordField('Password',[InputRequired(),EqualTo('confpass',message='Passwords must match')]) 129 confpass = PasswordField('Confirm',validators=[DataRequired()]) 130 changePassword = SubmitField('Change Password') 131 132 class ChangeBranchForm(FlaskForm): 133 branch = SelectField('Branch',validators=[DataRequired()]) 134 changeBranch = SubmitField('Change Branch') 135 136 class NewRoleForm(FlaskForm): 137 rolename = StringField('Role Name', validators=[DataRequired()]) 138 139 class ConfirmRemove(FlaskForm): 140 confirm = SubmitField('YES REMOVE') 141 142 class NewProjectForm(BudgetForm): 143 fenumber = IntegerField('FE #', validators=[DataRequired()]) 144 projectName = StringField('Project Name', validators=[DataRequired()]) 145 agreement = SelectField('Part of Agreement', validators=[DataRequired()]) 146 branch = SelectField('Organization Branch', validators=[DataRequired()]) 147 createNewProject = SubmitField('Create New Project') 148 149 class MoveProjectForm(FlaskForm): 150 newAgreement = SelectField('Parent Agreement', validators=[DataRequired()]) 151 moveProject = SubmitField('Update Project') 152 153 class RenameProjectForm(FlaskForm): 154 fenumber = IntegerField('FE #', validators=[DataRequired()]) 155 newName = StringField('Project Name', validators=[DataRequired()]) 156 renameProject = SubmitField('Update Project') 157 158 class NewProjectNote(FlaskForm): 159 projectNote = StringField('Project Note', validators=[DataRequired()]) 160 161 class NewAgreementForm(FlaskForm): 162 agreementName = StringField('Agreement Name', validators=[DataRequired()]) 163 agency = StringField('Signing Agency', validators=[DataRequired()]) 164 startDate = DateField('Start Date',validators=[DataRequired()]) 165 endDate = DateField('End Date') 166 createNewAgreement = SubmitField('Create New Agreement') 167 168 class RenameAgreementForm(FlaskForm): 169 newName = StringField('Agreement Name', validators=[DataRequired()]) 170 renameAgreement = SubmitField('Update Agreement') 171 172 class PunchclockoutWidget(FlaskForm): 173 #projectsSel = SelectField('Project', validators=[DataRequired()]) 174 #clockout = currenttime 175 recapOrNote = StringField('Notes or Recap') 176 lunchBox = BooleanField('Lunch') 177 per_diemBox = BooleanField('Per Diem') 178 # IFF user.role is_in(trusted_role[]) then allow lunch minute definition 179 clockout = SubmitField('Clock Out') 180 181 class PunchclockinWidget(FlaskForm): 182 projectsSel = SelectField('Project', validators=[DataRequired()]) 183 #clockin = currenttime 184 # IFF user.role is_in(trusted_role[]) then allow lunch minute definition 185 clockin = SubmitField('Clock In') 186 187 class CrewClockinWidget(FlaskForm): 188 userSel = SelectField('User:', validators=[DataRequired()]) 189 projectSel = SelectField('Project:', validators=[DataRequired()]) 190 time = TimeField('Started:') 191 submitEntr = SubmitField('Clock In') 192 #clockin = SubmitField('Clock In') 193 194 195 class NewHoursForm(FlaskForm): 196 dateSel = DateField('Date',validators=[DataRequired()]) 197 projectSel = SelectField('Project',validators=[DataRequired()]) 198 startTime = TimeField('Start',validators=[InputRequired(),LessThan('endTime')]) 199 #endTime = TimeField('End',validators=[DataRequired(),GreaterThan('startTime')]) 200 endTime = TimeField('End',validators=[DataRequired()]) 201 lunchSel = BooleanField('Lunch') 202 perDiemSel = BooleanField('Per Diem') 203 note = StringField('Notes') 204 submitEntr = SubmitField('Submit') 205 206 class NewUserHourForm(NewHoursForm): 207 userSel = SelectField('User',validators=[DataRequired()]) 208 209 class upDate(FlaskForm): 210 dateSel = DateField('Date', validators=[DataRequired()]) 211 submitEntr = SubmitField('Submit') 212 213 class updateTime(FlaskForm): 214 timeSel = TimeField('Time', validators=[DataRequired()]) 215 submitEntr = SubmitField('Submit') 216 217 class updateProject(FlaskForm): 218 projectSel = SelectField('Project', validators=[DataRequired()]) 219 submitEntr = SubmitField('Submit') 220 221 class newNote(FlaskForm): 222 note = StringField('Replace Note', validators=[optional()]) 223 submitEntr = SubmitField('Submit') 224 225 class FleetCheckoutForm(FlaskForm): 226 vehicle = SelectField('Vehicle', validators = [DataRequired()]) 227 start_mileage = IntegerField('Starting Mileage', validators=[DataRequired()])# Require some sort of validator for check... 228 horn = BooleanField('Horn') 229 signals = BooleanField('Signals') 230 tires = BooleanField('Tires') 231 mirrors = BooleanField('Mirrors') 232 enginefluid = BooleanField('Engine Fluids') 233 steeringfluid = BooleanField('Steering Fluid') 234 brakefluid = BooleanField('Brake Fluid') 235 transmissionfluid = BooleanField('Transmission Fluid') 236 windshield = BooleanField('Windshield') 237 wipers = BooleanField('Windshield Wipers') 238 towingequipment = BooleanField('Towing Equipment') 239 additionalnotes = StringField('Additional Notes',validators=[optional()])# May not need this at all? 240 checkout = SubmitField('Checkout Vehicle')#Update to take role name for pass to write fn 241 242 class FleetCheckinForm(FlaskForm): 243 end_mileage = IntegerField('Ending Mileage',validators=[DataRequired()])# Require some sort of validator for check... 244 incident_notes = StringField('Incident Notes',validators=[optional()])# May not need this at all? 245 checkin = SubmitField('Checkin Vehicle')#Update to take role name for pass to write fn 246 247 class dateRange(FlaskForm): 248 lowerBound = DateField('Start Date',validators=[DataRequired()]) 249 upperBound = DateField('End Date',validators=[DataRequired()]) 250 submitEntr = SubmitField('Submit') 251 252 class ChangeUserForm(FlaskForm): 253 fname = StringField('First Name', validators=[optional()]) 254 mname = StringField('Middle Initial', validators=[optional(),length(max=1)]) 255 lname = StringField('Last Name', validators=[optional()]) 256 birthday = DateField('Birthday',validators=[optional()])# Ought to change this to some validation for age range accepted 257 role = SelectField('Role',validators=[optional()]) 258 address = StringField('Address',validators=[optional()])# Require some sort of validator for check... 259 branch = SelectField('Branch',validators=[optional(),length(max=200)]) 260 phonenumber = TelField('Phone Number',validators=[optional(),length(max=12)])# Require some sort of validator for check... 261 email = EmailField('Email',validators=[optional()])# Require some sort of validator for check... 262 payPeriod = StringField('Pay Period Override',validators=[optional()])# May not need this at all? 263 payValue = FloatField('Pay Value Override',validators=[optional()])# Require some sort of validator for check... 264 modUser = SubmitField('Update User') 265 266 class DashPermissionsForm(FlaskForm):# for each module make Boolean field. Gets passed to fn writing to permissions_collection SET MANUALLY CURRENTLY 267 punchclock = BooleanField('Punch Clock',default="checked") 268 activecrew = BooleanField('Active Crew List') 269 fleet = BooleanField('Fleet') 270 ###### End Modules ##### 271 updaterole = SubmitField('Update')#Update to take role name for pass to write fn 272 273 class AdmnPermissionsForm(FlaskForm):# for each module make Boolean field. Gets passed to fn writing to permissions_collection SET MANUALLY CURRENTLY 274 agreements = BooleanField('Agreements') 275 updateEntr = SubmitField('Update') 276 reports = BooleanField('Reports') 277 manageusers = BooleanField('Manage Users') 278 ###### End Modules ##### 279 updaterole = SubmitField('Update')#Update to take role name for pass to write fn 280 281