class RoomForm(Form): number = TextField(u"Nummer") level = TextField(u"Etage") inhabitable = BooleanField(u"Bewohnbar") dormitory_id = QuerySelectField(u"Wohnheim", get_label='short_name', query_factory=dormitory_query)
class UserCreateForm(SelectRoomFormOptional): name = TextField(u"Name", [DataRequired(message=u"Name wird benötigt!")]) login = TextField(u"Login", [ DataRequired(message=u"Login wird benötigt!"), Regexp(regex=User.login_regex_ci, message=u"Login ist ungültig!"), validate_unique_login ], filters=[to_lowercase]) email = TextField(u"E-Mail", [Email(message=u"E-Mail ist ungueltig!"), Optional()], filters=[empty_to_none]) birthdate = DateField(u"Geburtsdatum", [OptionalIf('mac', invert=True)]) mac = MacField(u"MAC", [MacAddress(message=u"MAC ist ungültig!"), Optional()]) property_groups = QuerySelectMultipleField( u"Gruppen", get_label='name', query_factory=property_group_user_create_query) annex = BooleanField(u"Host annektieren", [Optional()]) force = BooleanField(u"* Hinweise ignorieren", [Optional()]) _order = ("name", "building", "level", "room_number")
class UserCreateForm(UserEditNameForm, UserMoveForm): login = TextField(u"Login", [Required(message=u"Login?"), Regexp(regex=User.login_regex, message=u"Login ist ungültig!"), validate_unique_login]) mac = TextField(u"MAC", [Regexp(regex=NetDevice.mac_regex, message=u"MAC ist ungültig!")]) host = TextField(u"Host") email = TextField(u"E-Mail", [Regexp(regex=User.email_regex, message=u"E-Mail ist ungueltig!")]) semester = QuerySelectField(u"aktuelles Semester", get_label="name", query_factory=semester_query)
class UserMoveInForm(UserMoveForm): mac = TextField(u"MAC", [Regexp(regex=mac_regex, message=u"MAC ist ungültig!")]) birthdate = DateField( u"Geburtsdatum", [DataRequired(message=u"Geburtsdatum wird benötigt!")]) begin_membership = BooleanField(u"Mitgliedschaft beginnen", [Optional()])
class UserSearchForm(Form): id = TextField(u"Nutzer-ID") name = TextField(u"Name") login = TextField(u"Unix-Login") mac = MacField(u"MAC-Adresse") ip_address = TextField(u"IP-Adresse") property_group_id = QuerySelectField(u"Eigenschaftsgruppe", get_label='name', query_factory=property_group_query, allow_blank=True, blank_text=u"<Eigenschaftsgruppe>") building_id = QuerySelectField(u"Wohnheim", get_label='short_name', query_factory=building_query, allow_blank=True, blank_text=u"<Wohnheim>")
class SemesterCreateForm(Form): name = TextField(u"Semestername", validators=[DataRequired()]) registration_fee = IntegerField( u"Anmeldegebühr", validators=[DataRequired(), NumberRange(min=1)]) regular_semester_contribution = IntegerField( u"Regulärer Semesterbeitrag", validators=[DataRequired(), NumberRange(min=1)]) reduced_semester_contribution = IntegerField( u"Ermäßigter Semesterbeitrag", validators=[DataRequired(), NumberRange(min=1)]) overdue_fine = IntegerField( u"Versäumnisgebühr", validators=[DataRequired(), NumberRange(min=1)]) premature_begin_date = DateField(u"Vorzeitiger Anfang", validators=[DataRequired()], today_btn=True, today_highlight=True) begin_date = DateField(u"Anfang", validators=[DataRequired()], today_btn=True, today_highlight=True) end_date = DateField(u"Ende", validators=[DataRequired()], today_btn=True, today_highlight=True) belated_end_date = DateField(u"Verspätetes Ende", validators=[DataRequired()], today_btn=True, today_highlight=True)
class PropertyGroupForm(Form): name = TextField(u"Gruppenname", [ DataRequired(u"Name?"), Regexp(u"^[a-zA-Z0-9äöüÄÖÜ ]{3,}$", message=u"Namen ohne Sonderzeichen und mindestens 3 Buchstaben" u" eingeben! (RegEx: ^[a-zA-Z0-9äöüÄÖÜ ]{3,}$)") ])
class HostForm(SelectRoomForm): owner_id = UserIDField(u"Besitzer-ID") name = TextField( u"Name", validators=[Optional()], description=u"z.B. TP-LINK WR841, FritzBox 4040 oder MacBook") _order = ("name", "owner_id")
class SwitchPortForm(Form): name = TextField(label="Name", validators=[DataRequired()], filters=[to_uppercase]) patch_port = QuerySelectField(label="Patch-Port", get_label="name", allow_blank=True) default_vlans = QuerySelectMultipleField(label="Standard VLANs", get_label=lambda vlan: "{} ({})".format(vlan.name, vlan.vid), query_factory=vlan_query, allow_blank=True, render_kw={'size': 25})
class JournalCreateForm(Form): name = TextField(u"Name") bank = TextField(u"Bank") account_number = TextField(u"Kontonummer") routing_number = TextField(u"Bankleitzahl (BLZ)") iban = TextField(u"IBAN") bic = TextField(u"BIC") hbci_url = TextField(u"HBCI-URL")
class FinanceAccountCreateForm(Form): name = TextField(u"Name", validators=[DataRequired()]) type = SelectField(u"Typ", validators=[DataRequired()], choices=[ ("ASSET", "Aktivkonto"), ("LIABILITY", "Passivkonto"), ("EXPENSE", "Aufwandskonto"), ("REVENUE", "Ertragskonto"), ])
class BankAccountCreateForm(Form): name = TextField(u"Name") bank = TextField(u"Bank") account_number = TextField(u"Kontonummer") routing_number = TextField(u"Bankleitzahl (BLZ)") iban = TextField(u"IBAN") bic = TextField(u"BIC") fints = TextField(u"FinTS-Endpunkt", default="https://mybank.com/…") def validate_iban(self, field): if BankAccount.q.filter_by(iban=field.data).first() is not None: raise ValidationError("Konto existiert bereits.")
class UserCreateForm(UserMoveForm): name = TextField(u"Name", [DataRequired(message=u"Name wird benötigt!")]) login = TextField(u"Login", [ DataRequired(message=u"Login wird benötigt!"), Regexp(regex=User.login_regex, message=u"Login ist ungültig!"), validate_unique_login ]) email = TextField(u"E-Mail", [Email(message=u"E-Mail ist ungueltig!"), Optional()], filters=[empty_to_none]) mac = TextField(u"MAC", [ OptionalIf('room_number', invert=True), Regexp(regex=mac_regex, message=u"MAC ist ungültig!") ]) birthdate = DateField( u"Geburtsdatum", [DataRequired(message=u"Geburtsdatum wird benötigt!")]) property_group = QuerySelectField(u"Gruppe", get_label='name', query_factory=property_group_query) annex = BooleanField(u"Host annektieren", [Optional()]) force = BooleanField(u"* Hinweise ignorieren", [Optional()])
class TransactionCreateForm(Form): description = TextField(u"Beschreibung", validators=[DataRequired()]) valid_on = DateField(u"Gültig ab", validators=[Optional()], today_btn=True, today_highlight=True, default=datetime.date.today()) splits = FieldList(FormField(SplitCreateForm), validators=[DataRequired()], min_entries=2) def validate_splits(self, field): balance = sum(split_form['amount'].data for split_form in field if split_form['amount'].data is not None) if balance != 0: raise ValidationError(u"Buchung ist nicht ausgeglichen.")
class TrafficGroupForm(Form): name = TextField(u"Gruppenname", [ DataRequired(u"Name?"), Regexp(u"^[a-zA-Z0-9äöüÄÖÜ ]{3,}$", message=u"Namen ohne Sonderzeichen und mindestens 3 Buchstaben" u" eingeben! (RegEx: ^[a-zA-Z0-9äöüÄÖÜ ]{3,}$)") ]) credit_interval = IntervalField(u"Gutschritintervall") credit_amount = IntegerField(u"Gutschriftmenge (GiB)", [NumberRange(0, None, u"Muss positiv sein!")]) credit_limit = IntegerField(u"Anspargrenze (GiB)", [ DataRequired(u"Wie viel GB?"), NumberRange(0, None, u"Muss eine natürliche Zahl sein!") ]) initial_credit = IntegerField( u"Initialer Credit (GiB)", [NumberRange(0, None, u"Muss positiv sein!")])
class MembershipFeeCreateForm(Form): name = TextField(u"Beitragsname", validators=[DataRequired()]) regular_fee = MoneyField(u"Regulärer Beitrag", validators=[InputRequired(), NumberRange(min=0)]) # TODO Transform IntegerFields to IntervalFields booking_begin = IntegerField( u"Buchungsbeginn (Tage)", description=u"Ab diesem Tag im Zeitraum wird ein Mitglied " u"als zahlungspflichtig angesehen.", validators=[InputRequired(), NumberRange(min=1)]) booking_end = IntegerField( u"Buchungsende (Tage)", description=u"Bis zu diesem Tag im Zeitraum wird ein neues Mitglied " u"als zahlungspflichtig angesehen.", validators=[InputRequired(), NumberRange(min=1)]) payment_deadline = IntegerField( u"Zahlungsfrist (Tage)", description=u"Bleibt ein Mitglied mehr Tage als hier angegeben eine " u"Zahlung schuldig, so wird es Mitglied in der " u"Zahlungsrückstands-Gruppe.", validators=[InputRequired(), NumberRange(min=0)]) payment_deadline_final = IntegerField( u"Endgültige Zahlungsfrist (Tage)", description=u"Bleibt ein Mitglied mehr Tage als hier angegeben eine " u"Zahlung schuldig, so wird seine Mitgliedschaft beendet.", validators=[InputRequired(), NumberRange(min=0)]) begins_on = DateField(u"Anfang", validators=[DataRequired()], today_btn=True, today_highlight=True) ends_on = DateField(u"Ende", validators=[DataRequired()], today_btn=True, today_highlight=True)
class MembershipFeeCreateForm(Form): name = TextField(u"Beitragsname", validators=[DataRequired()]) regular_fee = MoneyField(u"Regulärer Beitrag", validators=[InputRequired(), NumberRange(min=0)]) # TODO Transform IntegerFields to IntervalFields grace_period = IntegerField( u"Kulanzfrist (Tage)", description=u"Ist ein Nutzer weniger oder gleich viele Tage innerhalb " u"des Zeitraums Mitglied, so entfällt jegliche " u"Gebühr.", validators=[InputRequired(), NumberRange(min=0)]) payment_deadline = IntegerField( u"Zahlungsfrist (Tage)", description=u"Bleibt ein Mitglied mehr Tage als hier angegeben eine " u"Zahlung schuldig, so fällt die Versäumnisgebühr an. " u"Der Nutzer wird zudem Mitglied in der " u"Zahlungsrückstands-Gruppe.", validators=[InputRequired(), NumberRange(min=0)]) payment_deadline_final = IntegerField( u"Endgültige Zahlungsfrist (Tage)", description=u"Bleibt ein Mitglied mehr Tage als hier angegeben eine " u"Zahlung schuldig, so wird die Mitgliedschaft beendet.", validators=[InputRequired(), NumberRange(min=0)]) begins_on = DateField(u"Anfang", validators=[DataRequired()], today_btn=True, today_highlight=True) ends_on = DateField(u"Ende", validators=[DataRequired()], today_btn=True, today_highlight=True)
class NetDeviceChangeMacForm(Form): mac = TextField(u"MAC", [Regexp(regex=NetDevice.mac_regex, message=u"MAC ist ungültig!")])
class UserSearchForm(Form): userid = TextField(u"Nutzerid") name = TextField(u"Name") login = TextField(u"Unix-Login")
class TrafficGroupForm(Form): name = TextField(u"Gruppenname", [Required(message=u"Name?")]) traffic_limit = TextField(u"Traffic Limit (GB)", [ Required(message=u"Wie viel GB?"), Regexp(regex=u"[0-9]+", message=u"Muss eine natürliche Zahl sein!") ])
class PropertyGroupForm(Form): name = TextField(u"Gruppenname", [Required(message=u"Name?")])
class UserEditForm(Form): name = TextField(u"Name", [DataRequired(message=u"Name wird benötigt!")]) email = TextField( u"E-Mail", [Optional(), Email(u"E-Mail-Adresse ist ungültig!")]) birthdate = DateField(u"Geburtsdatum", [Optional()])
class UserEditNameForm(Form): name = TextField(u"Name", [Required(message=u"Name wird benötigt!")])
class LoginForm(Form): login = TextField() password = PasswordField()
class UserEditEMailForm(Form): email = TextField(u"E-Mail", [Regexp(regex=User.email_regex, message=u"E-Mail-Adresse ist ungültig!")])
class CNAMERecordCreateForm(Form): name = TextField(u"Alias Name", [Required(message=u"Alias?")]) record_for = QuerySelectField(u"für", get_label='name')
class CNAMERecordEditForm(Form): name = TextField(u"Alias Name", [Required(message=u"Alias?")]) record_for = ReadonlyTextField(u"für")
class SwitchPortForm(Form): name = TextField(u"Port Name", [ Required(message=u"Name?"), Regexp(regex=Port.name_regex, message=u"Richtig ist z.B. A2") ])
class DormitoryForm(Form): short_name = TextField(u"Kürzel") number = TextField(u"Nummer") street = TextField(u"Straße", validators=[Length(min=5)])
class hostCreateForm(Form): name = TextField(u"Name")