stc

a simple time card webapp
git clone _git@git.brennen.work:stc.git
Log | Files | Refs | README

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