class BankAccountActivitiesImportForm(Form): account = SelectField(u"Bankkonto", coerce=int) user = StringField(u"Loginname", validators=[DataRequired()]) pin = PasswordField(u"PIN", validators=[DataRequired()]) start_date = DateField(u"Startdatum") end_date = DateField(u"Enddatum") do_import = BooleanField(u"Import durchführen", default=False)
class BankAccountActivityReadForm(Form): bank_account_name = static(StringField(u"Bankkonto")) amount = disabled(MoneyField(u"Wert")) reference = static(StringField(u"Verwendungszweck")) other_account_number = static(StringField(u"Kontonummer")) other_routing_number = static(StringField(u"Bankleitzahl (BLZ)")) other_name = static(StringField(u"Name")) valid_on = static(DateField(u"Valutadatum")) posted_on = static(DateField(u"Buchungsdatum"))
class PreMemberEditForm(UserBaseDataForm, SelectRoomForm): # overrides `email` from UserBaseDataForm email = TextField("E-Mail", [DataRequired("Mitgliedschaftsanfragen benötigen E-Mail"), Email(message="E-Mail ist ungueltig!")], filters=[empty_to_none]) birthdate = DateField(u"Geburtsdatum", [DataRequired("Das Geburtsdatum wird benötigt!")]) move_in_date = DateField("Einzugsdatum", [Optional()]) person_id = IntegerField("Debitorennummer", [Optional()], filters=[empty_to_none]) force = ConfirmCheckboxField("* Hinweise ignorieren") _order = ("name", "building", "level", "room_number")
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!")]) email_forwarded = BooleanField("E-Mail Weiterleitung", default=True) birthdate = DateField(u"Geburtsdatum", [Optional()]) person_id = IntegerField("Debitorennummer", [Optional()], filters=[empty_to_none])
class RescheduleTaskForm(BaseForm): when = DateField("Neues Datum") when_time = TimeField("Genaue Zeit", [Optional()], description="Optional. In UTC angeben.", render_kw={'placeholder': 'hh:mm'}) @property def full_datetime(self) -> DateTimeTz: return combine_or_midnight(self.when.data, self.when_time.data)
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 UserCreateForm(UserBaseDataForm, SelectRoomForm): birthdate = DateField(u"Geburtsdatum", [OptionalIf('mac', invert=True)]) mac = MacField(u"MAC", [Optional(), MacAddress(message=u"MAC ist ungültig!"), UniqueMac()]) property_groups = QuerySelectMultipleField(u"Gruppen", get_label='name', query_factory=property_group_user_create_query) annex = ConfirmCheckboxField(u"Host annektieren") force = ConfirmCheckboxField("* Hinweise ignorieren") _order = ("name", "building", "level", "room_number")
def test_0010_convert_format_string(self): for directive, replacement in DateField.supported_directives.items(): self.assertEqual(DateField.convert_format_string("%" + directive), replacement) self.assertEqual(DateField.convert_format_string("%%" + directive), "%" + directive) for directive in DateField.unsupported_directives: self.assertRaises(ValueError, DateField.convert_format_string, "%" + directive) self.assertEqual(DateField.convert_format_string("%%" + directive), "%" + directive) unknown_directives = set(string.ascii_letters).difference( set(DateField.supported_directives.keys()), set(DateField.unsupported_directives)) for directive in unknown_directives: self.assertRaises(ValueError, DateField.convert_format_string, "%" + directive) self.assertEqual("", "") self.assertEqual(DateField.convert_format_string("%%"), "%") self.assertEqual(DateField.convert_format_string("%%%%"), "%%")
class NonResidentUserCreateForm(UserBaseDataForm, CreateAddressForm): """User creation form for non-resident folks. Does not contain mac, since created hosts would not have a room set, anyway. If necessary, a device can be created afterwards. """ birthdate = DateField("Geburtsdatum") property_groups = QuerySelectMultipleField( "Gruppen", get_label='name', query_factory=property_group_user_create_query) _order = ('name', 'login', *iter_prefixed_field_names(CreateAddressForm, 'address_'), 'email', 'birthdate', 'property_groups')
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.")
def test_date_field_format_strings(): for directive, replacement in DateField.supported_directives.items(): assert DateField.convert_format_string("%" + directive) == replacement assert DateField.convert_format_string("%%" + directive) == "%" + directive for directive in DateField.unsupported_directives: with pytest.raises(ValueError): DateField.convert_format_string("%" + directive) assert DateField.convert_format_string("%%" + directive) == "%" + directive unknown_directives = set(string.ascii_letters).difference( set(DateField.supported_directives.keys()), set(DateField.unsupported_directives)) for directive in unknown_directives: with pytest.raises(ValueError): DateField.convert_format_string("%" + directive) assert DateField.convert_format_string("%%") == "%" assert DateField.convert_format_string("%%%%") == "%%"
class UserMoveForm(SelectRoomForm): comment = TextAreaField( "Kommentar", description='Wenn gegeben Referenz zum Ticket', render_kw={ 'placeholder': 'ticket#<TicketNr> / <TicketNr> / ticket:<ticketId>' }) now = BooleanField("Sofort", default=False) when = DateField("Umzug am", [OptionalIf("now")]) when_time = TimeField("Genaue Zeit", [Optional()], description="Optional. In UTC angeben.", render_kw={'placeholder': 'hh:mm'}) def get_execution_time(self, now: datetime) -> datetime: if self.now.data: return now assert self.when.data, "`now` checkbox deselected but no date given!" return utc.combine_or_midnight(self.when.data, self.when_time.data)
class UserMoveOutForm(Form): now = BooleanField(u"Sofort", default=False) when = DateField(u"Auszug am", [OptionalIf("now")]) comment = TextAreaField(u"Kommentar") end_membership = BooleanField(u"Mitgliedschaft/Extern beenden", [Optional()])
class UserEditGroupMembership(Form): begins_at = DateField(u"Beginn", [DataRequired()]) ends_at = FormField(OptionallyUnlimitedEndDateForm)
class OptionallyUnlimitedEndDateForm(Form): unlimited = BooleanField(u"Unbegrenzte Dauer", default=False) date = DateField(u"Ende", [OptionalIf("unlimited")])
class OptionallyDirectBeginDateForm(Form): now = BooleanField(u"Sofort", default=False) date = DateField(u"Beginn", [OptionalIf("now")])
class UserMoveInForm(UserMoveForm): now = BooleanField(u"Sofort", default=False) when = DateField(u"Einzug am", [OptionalIf("now")]) birthdate = DateField(u"Geburtsdatum", [OptionalIf('mac', invert=True)]) mac = MacField(u"MAC", [Optional()]) begin_membership = BooleanField(u"Mitgliedschaft beginnen", [Optional()])
class UserMoveForm(SelectRoomForm): now = BooleanField(u"Sofort", default=False) when = DateField(u"Umzug am", [OptionalIf("now")])