from flask_wtf import FlaskForm from flask_wtf.file import FileAllowed, FileField from wtforms import BooleanField, IntegerField, PasswordField, RadioField, SelectField, StringField, SubmitField from wtforms.validators import DataRequired, Email, Optional class KSeFSettingsForm(FlaskForm): source_mode = RadioField('Źródło ustawień', choices=[('user', 'Moje ustawienia'), ('global', 'Profil współdzielony firmy')], default='user') environment = SelectField( 'Środowisko KSeF', choices=[('prod', 'PROD'), ('test', 'TEST')], validators=[Optional()], ) auth_mode = SelectField('Tryb autoryzacji', choices=[('token', 'Token'), ('certificate', 'Certyfikat')]) token = PasswordField('Token', validators=[Optional()]) client_id = StringField('Client ID', validators=[Optional()]) certificate_file = FileField('Certyfikat', validators=[Optional(), FileAllowed(['pem', 'crt', 'cer', 'p12', 'pfx'], 'Dozwolone: pem, crt, cer, p12, pfx')]) submit = SubmitField('Zapisz KSeF') class MailSettingsForm(FlaskForm): source_mode = RadioField('Źródło SMTP', choices=[('global', 'Użyj ustawień globalnych'), ('user', 'Podaj indywidualne ustawienia')], default='global') server = StringField('SMTP host', validators=[Optional()]) port = StringField('SMTP port', validators=[Optional()]) username = StringField('SMTP login', validators=[Optional()]) password = PasswordField('SMTP hasło', validators=[Optional()]) sender = StringField('Nadawca', validators=[Optional(), Email()]) security_mode = SelectField('Zabezpieczenie połączenia', choices=[('tls', 'TLS / STARTTLS'), ('ssl', 'SSL'), ('none', 'Brak')], validators=[Optional()], default='tls') test_recipient = StringField('Adres testowy', validators=[Optional(), Email()]) submit = SubmitField('Zapisz SMTP') test_submit = SubmitField('Wyślij test maila') class NotificationSettingsForm(FlaskForm): source_mode = RadioField('Źródło Pushover', choices=[('global', 'Użyj ustawień globalnych'), ('user', 'Podaj indywidualne ustawienia')], default='global') pushover_user_key = StringField('Pushover user key', validators=[Optional()]) pushover_api_token = PasswordField('Pushover API token', validators=[Optional()]) min_amount = StringField('Powiadom od kwoty', validators=[Optional()]) quiet_hours = StringField('Cichy harmonogram, np. 22:00-07:00', validators=[Optional()]) enabled = BooleanField('Włącz powiadomienia') submit = SubmitField('Zapisz powiadomienia') test_submit = SubmitField('Wyślij test Pushover') class AppearanceSettingsForm(FlaskForm): theme_preference = SelectField('Motyw interfejsu', choices=[('light', 'Jasny'), ('dark', 'Ciemny')], validators=[DataRequired()]) submit = SubmitField('Zapisz wygląd') class CompanyForm(FlaskForm): name = StringField('Nazwa firmy', validators=[DataRequired()]) tax_id = StringField('NIP', validators=[Optional()]) sync_enabled = BooleanField('Włącz harmonogram pobierania') sync_interval_minutes = IntegerField('Interwał sync (min)', validators=[Optional()]) bank_account = StringField('Numer rachunku bankowego', validators=[Optional()]) read_only_mode = BooleanField('Tryb tylko odczyt (R/O)') submit = SubmitField('Zapisz firmę') class UserForm(FlaskForm): email = StringField('E-mail', validators=[DataRequired(), Email()]) name = StringField('Imię i nazwisko', validators=[DataRequired()]) password = PasswordField('Hasło', validators=[Optional()]) role = SelectField('Rola globalna', choices=[('admin', 'Admin'), ('operator', 'Operator'), ('readonly', 'Readonly')]) company_id = SelectField('Firma', coerce=int, validators=[Optional()]) access_level = SelectField('Dostęp do firmy', choices=[('full', 'Pełny'), ('readonly', 'Tylko odczyt')]) submit = SubmitField('Dodaj / przypisz użytkownika') class NfzModuleSettingsForm(FlaskForm): source_mode = RadioField('Źródło konfiguracji NFZ', choices=[('global', 'Użyj ustawień globalnych'), ('user', 'Ustaw indywidualnie')], default='global') enabled = BooleanField('Włącz moduł faktur NFZ') submit = SubmitField('Zapisz moduł NFZ')