Files
ksef_app/app/forms/admin.py
Mateusz Gruszczyński 35571df778 push
2026-03-13 11:03:13 +01:00

121 lines
5.6 KiB
Python

from flask_wtf import FlaskForm
from wtforms import (
BooleanField,
HiddenField,
IntegerField,
PasswordField,
SelectField,
StringField,
SubmitField,
TextAreaField,
)
from wtforms.validators import DataRequired, Email, NumberRange, Optional
class AdminUserForm(FlaskForm):
email = StringField('E-mail', validators=[DataRequired(), Email()])
name = StringField('Imię i nazwisko', validators=[DataRequired()])
role = SelectField('Rola globalna', choices=[('admin', 'Admin'), ('operator', 'Operator'), ('readonly', 'Readonly')], validators=[DataRequired()])
password = PasswordField('Hasło', validators=[Optional()])
company_id = SelectField('Dodaj dostęp do firmy', coerce=int, validators=[Optional()])
access_level = SelectField('Poziom dostępu do firmy', choices=[('full', 'Pełny'), ('readonly', 'Tylko odczyt')], validators=[Optional()])
force_password_change = BooleanField('Wymuś zmianę hasła')
is_blocked = BooleanField('Zablokowany')
submit = SubmitField('Zapisz użytkownika')
class AccessForm(FlaskForm):
company_id = SelectField('Firma', coerce=int, validators=[DataRequired()])
access_level = SelectField('Poziom dostępu', choices=[('full', 'Pełny'), ('readonly', 'Tylko odczyt')], validators=[DataRequired()])
submit = SubmitField('Zapisz dostęp')
class PasswordResetForm(FlaskForm):
password = PasswordField('Nowe hasło', validators=[DataRequired()])
force_password_change = BooleanField('Wymuś zmianę po logowaniu')
submit = SubmitField('Resetuj hasło')
class AdminCompanyForm(FlaskForm):
name = StringField('Nazwa firmy', validators=[Optional()])
tax_id = StringField('NIP', validators=[Optional()])
regon = StringField('REGON', validators=[Optional()])
address = StringField('Adres', validators=[Optional()])
bank_account = StringField('Numer rachunku bankowego', validators=[Optional()])
is_active = BooleanField('Aktywna')
sync_enabled = BooleanField('Automatyczne pobieranie')
sync_interval_minutes = StringField('Interwał sync (min)', validators=[Optional()])
note = TextAreaField('Opis / notatka', validators=[Optional()])
mock_mode = BooleanField('Włącz tryb mock dla tej firmy')
submit = SubmitField('Zapisz firmę')
fetch_submit = SubmitField('Pobierz dane z CEIDG')
def validate(self, extra_validators=None):
if not super().validate(extra_validators=extra_validators):
return False
is_fetch = bool(self.fetch_submit.data and not self.submit.data)
if is_fetch:
if not (self.tax_id.data or '').strip():
self.tax_id.errors.append('Podaj NIP, aby pobrać dane z CEIDG.')
return False
return True
if not (self.name.data or '').strip():
self.name.errors.append('To pole jest wymagane.')
return False
return True
class CeidgConfigForm(FlaskForm):
environment = HiddenField(default='production')
api_key = PasswordField('API KEY CEIDG', validators=[Optional()])
submit = SubmitField('Zapisz konfigurację CEIDG')
class LogCleanupForm(FlaskForm):
days = IntegerField('Usuń logi starsze niż (dni)', validators=[DataRequired(), NumberRange(min=1, max=3650)])
submit = SubmitField('Wyczyść logi')
class DatabaseBackupForm(FlaskForm):
submit = SubmitField('Wykonaj kopię bazy')
class GlobalMailSettingsForm(FlaskForm):
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')
submit = SubmitField('Zapisz SMTP globalne')
class GlobalNotificationSettingsForm(FlaskForm):
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', validators=[Optional()])
enabled = BooleanField('Włącz globalne powiadomienia')
submit = SubmitField('Zapisz Pushover globalnie')
class GlobalNfzSettingsForm(FlaskForm):
enabled = BooleanField('Włącz moduł NFZ globalnie')
submit = SubmitField('Zapisz NFZ globalnie')
class GlobalKsefDefaultsForm(FlaskForm):
environment = SelectField('Domyślne środowisko KSeF', choices=[('prod', 'PROD'), ('test', 'TEST')], validators=[Optional()])
auth_mode = SelectField('Domyślny tryb autoryzacji', choices=[('token', 'Token'), ('certificate', 'Certyfikat')])
client_id = StringField('Domyślny Client ID', validators=[Optional()])
submit = SubmitField('Zapisz domyślne parametry KSeF')
class SharedCompanyKsefForm(FlaskForm):
environment = SelectField('Środowisko współdzielonego profilu', 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_name = StringField('Nazwa certyfikatu', validators=[Optional()])
certificate_data = PasswordField('Treść certyfikatu / base64', validators=[Optional()])
submit = SubmitField('Zapisz współdzielony profil KSeF')