示例#1
0
class RegistrationForm(BaseModelForm):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(RegistrationForm, self).__init__(*args, **kwargs)
        if not self.next.data:
            self.next.data = request.args.get('next', '')

    first_name = StringField('First Name', [validators.length(min=2, max=50)])
    second_name = StringField('Last Name', [validators.length(min=2, max=50)])
    phone_number = StringField('Phone', [validators.length(min=10, max=18), Unique(User.phone_number)])
    username = StringField('Username', [validators.length(min=6, max=30), Unique(User.username)])
    email = StringField("Email", validators=[email_required, email_validator, Unique(User.email)])

    password = PasswordField("Password", validators=[password_required, password_length])

    password_confirm = PasswordField("Retype Password",
                                     validators=[EqualTo('password', message='RETYPE_PASSWORD_MISMATCH'),
                                                 password_required])

    next = HiddenField()
    submit = SubmitField('Register')

    def validate_next(self, field):
        if field.data and not validate_redirect_url(field.data):
            field.data = ''
            flash(*get_message('INVALID_REDIRECT'))
            raise ValidationError(get_message('INVALID_REDIRECT')[0])
示例#2
0
class SignupForm(ModelForm):
    username = StringField(validators=[
        DataRequired(),
        Unique(User.username, get_session=lambda: db.session)
    ])
    email = EmailField(validators=[
        DataRequired(),
        Email(),
        Unique(User.email, get_session=lambda: db.session)
    ])
    password = PasswordField(validators=[DataRequired(), Length(8, 128)])
    confirm_password = PasswordField(
        validators=[DataRequired(), EqualTo('password')])
示例#3
0
class NewCustomerForm(ModelForm):
    # Genral Info
    first_name = StringField('First Name', validators=[DataRequired()])
    last_name = StringField('Last Name')
    company = StringField('Company')
    display_name = StringField('Display Name',
                               validators=[
                                   DataRequired(),
                                   Unique(Customers.display_name,
                                          get_session=lambda: db.session)
                               ])
    customer_type = SelectField(u'Customers Type',
                                choices=[('Consumer', 'Consumer'),
                                         ('GST Registered', 'GST Registered'),
                                         ('GST Unregistered',
                                          'GST Unregistered')])

    # Contant Info
    phone = StringField('Phone', validators=[Optional(), Length(6, 13)])
    email = EmailField('Email', validators=[Optional(), Email()])
    website = StringField('Website')

    # Billing Address
    address = TextAreaField('Billing Address')
    pincode = StringField('Billing Pincode')
    city = StringField('Billing City')
    state = StringField('Billing State')
    country = StringField('Billing Country')

    # Shiping Address
    s_address = TextAreaField('Shipping Address')
    s_pincode = StringField('Shipping Pincode')
    s_city = StringField('Shipping City')
    s_state = StringField('Shipping State')
    s_country = StringField('Shipping Country')

    # Tax Info
    gst = StringField(
        'GST No.',
        validators=[
            Optional(),
            Unique(Customers.gst, get_session=lambda: db.session),
            Regexp(r'\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}[Z]{1}[A-Z\d]{1}')
        ])
    pan = StringField('PAN No.',
                      validators=[
                          Optional(),
                          Unique(Customers.pan,
                                 get_session=lambda: db.session),
                          Regexp(r'^[a-zA-Z]{5}[0-9]{4}[a-zA-Z]$')
                      ])
示例#4
0
class StudentForm(_PersonForm, ModelForm):
    class Meta:
        model = Student
        include_primary_keys = True

    id = IntegerField('Номер студенческого билета', [
        validators.DataRequired(),
        validators.NumberRange(min=1),
        Unique(Student.id,
               get_session=lambda: db.session,
               message='Номер студенческого билета занят')
    ])
    status = QuerySelectField('Состояние',
                              query_factory=lambda: StudentStates,
                              get_pk=lambda s: s,
                              get_label=lambda s: StudentStateDict[s],
                              allow_blank=False,
                              validators=[validators.DataRequired()])
    semester = IntegerField(
        'Семестр',
        [validators.NumberRange(min=1, max=10),
         validators.Optional()])
    stud_group = QuerySelectField(
        'Группа',
        query_factory=lambda: db.session.query(StudGroup).filter(
            StudGroup.active).order_by(StudGroup.year, StudGroup.semester,
                                       StudGroup.num, StudGroup.subnum).all(),
        get_pk=lambda g: g.id,
        get_label=lambda g: "%d курс группа %s" % (g.course, g.num_print),
        blank_text='Не указана',
        allow_blank=True)
    alumnus_year = IntegerField('Учебный год выпуск', [
        validators.NumberRange(min=2000, max=datetime.now().year + 1),
        validators.Optional()
    ])
    expelled_year = IntegerField('Учебный год отчисления', [
        validators.NumberRange(min=2000, max=datetime.now().year + 1),
        validators.Optional()
    ])

    card_number = IntegerField('Номер карты (пропуска)', [
        validators.Optional(),
        validators.NumberRange(min=1),
        Unique(Student.card_number,
               get_session=lambda: db.session,
               message='Номер занят')
    ])
    group_leader = BooleanField('Староста')

    button_save = SubmitField('Сохранить')
    button_delete = SubmitField('Удалить')
示例#5
0
class NewConsumableForm(ModelForm):
    name = StringField('Name',
                       validators=[
                           DataRequired(),
                           Unique(Consumable.name,
                                  get_session=lambda: dbt.session)
                       ])
    product_code = StringField('Product Code')
    category = StringField('Category')
    description = TextAreaField('Description')
    model = StringField('Model')
    unit = SelectField(u'Unit',
                       choices=[
                           ('BAG', 'BAG - BAGS'),
                           ('BOT', 'BOT - BOTTLES'),
                           ('BOX', 'BOX - BOXES'),
                           ('CMS', 'CMS - CENTIMETERS'),
                           ('CAN', 'CAN - CANS'),
                           ('DOZ', 'DOZ - DOZENS'),
                           ('DRUM', 'DRUM - DRUMS'),
                           ('KGS', 'KGS - KILLOGRAMS'),
                           ('PCS', 'PCS - PIECES'),
                           ('PAC', 'PAC - PACKS'),
                           ('TON', 'TON - TONES'),
                           ('UNT', 'UNT - UNITS'),
                           ('YDS', 'YDS - YARDS'),
                       ])
    qty = IntegerField("Qty", validators=[Optional()])
    sales_price = DecimalField("Sales Price",
                               validators=[Optional()],
                               places=2)
    low_stock_alert = IntegerField('Low Stock Alert', validators=[Optional()])
示例#6
0
class CampaignForm(FlaskForm):
    next = HiddenField()
    name = TextField(_('Campaign Name'), [Required(), Length(max=LONG_STRING_LEN), Unique(Campaign.name, message="Campaign with that name already exists")])
    campaign_country = DisabledSelectField(_('Country'), [Optional()], choices=COUNTRY_CHOICES)
    campaign_type = DisabledSelectField(_('Type'), [Optional()])
    campaign_state = SelectField(_('State'), [Optional()])
    campaign_subtype = SelectField(_('Subtype'), [Optional()])
    # nested_type passed to data-field in template, but starts empty

    segment_by = RadioField(_('Segment By'), [Required()], choices=choice_items(SEGMENT_BY_CHOICES),
                            description=True, default=SEGMENT_BY_CHOICES[0][0])
    locate_by = RadioField(_('Locate By'), [Optional()], choices=choice_items(LOCATION_CHOICES),
                           description=True, default=None)
    show_special = BooleanField(_('Include Special Targets'), [Optional()], default=False)
    include_special = SelectField(_('User\'s Representatives'), [Optional()], choices=choice_items(INCLUDE_SPECIAL_CHOCIES),
                           description=True, default=INCLUDE_SPECIAL_CHOCIES[0][0])
    target_set = FieldList(FormField(TargetForm, _('Choose Targets')), validators=[Optional()])
    target_ordering = RadioField(_('Target Order'), [Optional()], description=True)
    target_shuffle_chamber = BooleanField(_('Shuffle within Chamber'), [Optional()], default=True, description=True)
    target_offices = RadioField(_('Target Offices'), [Optional()], choices=choice_items(TARGET_OFFICE_CHOICES),
                            description=True, default=TARGET_OFFICE_CHOICES[0][0])

    call_limit = BooleanField(_('Limit Maximum Calls'), [Optional()], default=False)
    call_maximum = IntegerField(_('Call Maximum'), [Optional(), NumberRange(min=0)])

    phone_number_set = QuerySelectMultipleField(_('Select Phone Numbers'),
                                                query_factory=TwilioPhoneNumber.available_numbers,
                                                description=True, validators=[Required()])
    allow_call_in = BooleanField(_('Allow Call In'))
    allow_intl_calls = BooleanField(_('Allow International Calls'))
    prompt_schedule = BooleanField(_('Prompt to Schedule Recurring Calls'))

    submit = SubmitField(_('Edit Audio'))
    submit_skip_audio = SubmitField(_('Save and Test'))

    def __init__(self, campaign_data, *args, **kwargs):
        super(CampaignForm, self).__init__(*args, **kwargs)

        read_only(self.campaign_country)
        read_only(self.campaign_type)

        self.campaign_type.choices = choice_items(campaign_data.data_provider.campaign_type_choices)
        self.campaign_state.choices = choice_items(campaign_data.region_choices)
        self.campaign_subtype.choices = choice_items(campaign_data.subtype_choices)
        self.target_ordering.choices = choice_items(campaign_data.target_order_choices)

    def validate(self):
        # check default validation
        if not FlaskForm.validate(self):
            return False

        # check nested forms
        for t in self.target_set:
            if not t.form.validate():
                error_fields = ','.join(t.form.errors.keys())
                self.target_set.errors.append({'target': t.name, 'message': 'Invalid target ' + error_fields})
                return False

        return True
示例#7
0
class WelcomeForm(ModelForm):
    username_message = 'Letters, numbers and underscores only please.'

    username = StringField(validators=[
        Unique(User.username),
        DataRequired(),
        Length(1, 16),
        Regexp(r'^\w+$', message=username_message)
    ])
示例#8
0
class UserForm(ModelForm):
    class Meta:
        model = User
        only = ["birth_date", "email"]

    username = TextField("username",
                         validators=[Length(max=80),
                                     Unique(User.username)])
    password = PasswordField("password")
    first_name = TextField("first_name", validators=[Length(max=80)])
    last_name = TextField("last_name", validators=[Length(max=80)])
示例#9
0
class PersonForm(ModelForm):
    class Meta:
        model = Person
        strip_string_fields = True

    first_name = StringField(
        validators=[DataRequired(), Length(min=3, max=50)])

    last_name = StringField(validators=[DataRequired(), Length(min=3, max=50)])

    email = StringField(validators=[DataRequired(), Email(), Unique('email')])

    phone = StringField(validators=[DataRequired(), Regexp('\d{9}')])
示例#10
0
class UserForm(ModelForm):
    username_message = 'Letters, numbers and underscores only please.'

    username = StringField(validators=[
        Unique(User.username),
        Optional(),
        Length(1, 16),
        Regexp(r'^\w+$', message=username_message)
    ])

    role = SelectField('Privileges', [DataRequired()],
                       choices=choices_from_dict(User.ROLE,
                                                 prepend_blank=False))
    active = BooleanField('Yes, allow this user to sign in')
示例#11
0
class SubjectForm(ModelForm):
    class Meta:
        model = Subject

    name = StringField('Название предмета', [
        validators.DataRequired(),
        validators.Length(min=3,
                          max=Subject.name.property.columns[0].type.length),
        Unique(Subject.name,
               get_session=lambda: db.session,
               message='Предмет с таким названием существует')
    ])
    button_save = SubmitField('Сохранить')
    button_delete = SubmitField('Удалить')
示例#12
0
class SubjectForm(ModelForm):
    """Форма для добавления/удаления учебного предмета"""

    class Meta:
        """Метаданные для формы"""
        model = Subject

    name = StringField('Название предмета',
                       [validators.DataRequired(),
                        Unique(Subject.name,
                               get_session=lambda: DB.session,
                               message='Предмет с таким названием существует')])
    button_save = SubmitField('Сохранить')
    button_delete = SubmitField('Удалить')
示例#13
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     clazz = self.Meta.model
     self.login.validators = [
         validators.Optional(),
         validators.Length(min=3, max=45),
         validators.Regexp(
             "^[a-z0-9_]+$",
             message=
             "Учётное имя может содержать только латинкие символы, цифры и знак подчёркивания"
         ),
         Unique(clazz.login,
                get_session=lambda: db.session,
                message='Логин занят')
     ]
示例#14
0
class NewMachineForm(ModelForm):
    # Genral Info
    name = StringField('Name',
                       validators=[
                           DataRequired(),
                           Unique(Machine.name,
                                  get_session=lambda: dbt.session)
                       ])
    product_code = StringField('Product Code')
    category = StringField('Category')
    description = TextAreaField('Description')

    model = StringField('Model')
    serial = StringField('Serial No.')
    instdate = DateField('Installation Date')
示例#15
0
class StudentForm(ModelForm):
    """Форма для добавления/удаления студента"""

    class Meta:
        """Метаданные для формы"""
        model = Student
        include_primary_keys = True

    id = IntegerField('Номер студенческого билета',
                      [validators.DataRequired(),
                       validators.NumberRange(min=1),
                       Unique(Student.id,
                              get_session=lambda: DB.session,
                              message='Номер студенческого билета занят')])
    surname = StringField('Фамилия', [validators.DataRequired()])
    firstname = StringField('Имя', [validators.DataRequired()])
    middlename = StringField('Отчество')
    semester = IntegerField('Семестр',
                            [validators.NumberRange(min=1, max=10),
                             validators.Optional()])
    stud_group = QuerySelectField('Группа',
                                  query_factory=
                                  lambda: DB.session.query(StudGroup).
                                  filter(StudGroup.active).order_by(
                                      StudGroup.year,
                                      StudGroup.semester,
                                      StudGroup.num,
                                      StudGroup.subnum
                                  ).all(),
                                  get_pk=lambda g: g.id,
                                  get_label=lambda g: "%d курс группа %s" % (g.course, g.num_print),
                                  blank_text='Не указана', allow_blank=True)
    alumnus_year = IntegerField('Учебный год выпуск',
                                [validators.NumberRange(min=2000, max=datetime.now().year + 1),
                                 validators.Optional()])
    expelled_year = IntegerField('Учебный год отчисления',
                                 [validators.NumberRange(min=2000, max=datetime.now().year + 1),
                                  validators.Optional()])

    button_save = SubmitField('Сохранить')
    button_delete = SubmitField('Удалить')
示例#16
0
class SignupForm(ModelForm):
    email = EmailField(
        validators=[DataRequired(),
                    Email(), Unique(User.email)])
    password = PasswordField('Password', [DataRequired(), Length(8, 128)])
示例#17
0
class EmailForm(ModelForm):
    email = EmailField(validators=[
        DataRequired(),
        Email(),
        Unique(User.email)
    ])