generated from coulomb/repo-seed
83 lines
3.2 KiB
Python
83 lines
3.2 KiB
Python
import os
|
|
|
|
from django import forms
|
|
from django.conf import settings
|
|
|
|
from vergabe_teilnahme.apps.lose.models import Los
|
|
|
|
from .models import ALLOWED_EXTENSIONS, Dokument
|
|
|
|
|
|
class DokumentForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Dokument
|
|
fields = ['datei', 'kategorie', 'version', 'quelle', 'verantwortlicher', 'pruefer', 'los', 'beschreibung']
|
|
widgets = {
|
|
'datei': forms.FileInput(attrs={'class': 'form-input'}),
|
|
'kategorie': forms.Select(attrs={'class': 'form-input'}),
|
|
'version': forms.TextInput(attrs={'class': 'form-input'}),
|
|
'quelle': forms.TextInput(attrs={'class': 'form-input'}),
|
|
'verantwortlicher': forms.Select(attrs={'class': 'form-input'}),
|
|
'pruefer': forms.Select(attrs={'class': 'form-input'}),
|
|
'los': forms.Select(attrs={'class': 'form-input'}),
|
|
'beschreibung': forms.Textarea(attrs={'class': 'form-input', 'rows': 3}),
|
|
}
|
|
|
|
def __init__(self, *args, ausschreibung=None, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
if ausschreibung is not None:
|
|
self.fields['los'].queryset = Los.objects.filter(ausschreibung=ausschreibung)
|
|
self.fields['quelle'].required = False
|
|
self.fields['verantwortlicher'].required = False
|
|
self.fields['pruefer'].required = False
|
|
self.fields['los'].required = False
|
|
self.fields['beschreibung'].required = False
|
|
|
|
def clean_datei(self):
|
|
datei = self.cleaned_data.get('datei')
|
|
if datei:
|
|
ext = os.path.splitext(datei.name)[1].lower()
|
|
if ext not in ALLOWED_EXTENSIONS:
|
|
raise forms.ValidationError(
|
|
f'Dateityp "{ext}" nicht erlaubt. Erlaubt: {", ".join(sorted(ALLOWED_EXTENSIONS))}'
|
|
)
|
|
max_size = getattr(settings, 'MAX_UPLOAD_SIZE', 52428800)
|
|
if hasattr(datei, 'size') and datei.size > max_size:
|
|
raise forms.ValidationError(
|
|
f'Datei zu groß. Maximum: {max_size // 1024 // 1024} MB'
|
|
)
|
|
return datei
|
|
|
|
|
|
class DokumentVersionForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Dokument
|
|
fields = ['datei', 'version']
|
|
widgets = {
|
|
'datei': forms.FileInput(attrs={'class': 'form-input'}),
|
|
'version': forms.TextInput(attrs={'class': 'form-input'}),
|
|
}
|
|
|
|
def clean_datei(self):
|
|
datei = self.cleaned_data.get('datei')
|
|
if datei:
|
|
ext = os.path.splitext(datei.name)[1].lower()
|
|
if ext not in ALLOWED_EXTENSIONS:
|
|
raise forms.ValidationError(
|
|
f'Dateityp "{ext}" nicht erlaubt. Erlaubt: {", ".join(sorted(ALLOWED_EXTENSIONS))}'
|
|
)
|
|
max_size = getattr(settings, 'MAX_UPLOAD_SIZE', 52428800)
|
|
if hasattr(datei, 'size') and datei.size > max_size:
|
|
raise forms.ValidationError(
|
|
f'Datei zu groß. Maximum: {max_size // 1024 // 1024} MB'
|
|
)
|
|
return datei
|
|
|
|
|
|
def naechste_version(alte_version: str) -> str:
|
|
try:
|
|
major = int(alte_version.split('.')[0])
|
|
return f'{major + 1}.0'
|
|
except (ValueError, IndexError):
|
|
return '2.0'
|