121 lines
5.6 KiB
Python
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')
|