Dokumentenmanagement
This commit is contained in:
parent
70ece97587
commit
c2c4ae3cbe
14 changed files with 759 additions and 13 deletions
82
vergabe_teilnahme/apps/dokumente/forms.py
Normal file
82
vergabe_teilnahme/apps/dokumente/forms.py
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
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'
|
||||
Loading…
Add table
Add a link
Reference in a new issue