team-3/src/c3nav/site/forms.py

68 lines
2.1 KiB
Python
Raw Normal View History

2019-12-27 16:51:06 +01:00
from operator import attrgetter
from django.db import transaction
2019-12-27 16:51:06 +01:00
from django.forms import Form, ModelChoiceField, ModelForm
from django.utils.translation import gettext_lazy as _
2019-12-24 17:28:41 +01:00
from c3nav.mapdata.forms import I18nModelFormMixin
2019-12-27 14:13:40 +01:00
from c3nav.mapdata.models.locations import Position
from c3nav.mapdata.models.report import Report, ReportUpdate
2019-12-24 17:28:41 +01:00
class ReportIssueForm(I18nModelFormMixin, ModelForm):
class Meta:
model = Report
fields = ['title', 'description']
class ReportMissingLocationForm(I18nModelFormMixin, ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['created_groups'].label_from_instance = lambda obj: obj.title
2019-12-24 17:28:41 +01:00
class Meta:
model = Report
fields = ['title', 'description', 'created_title', 'created_groups']
class ReportUpdateForm(ModelForm):
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
self.fields['open'].label = _('change status')
self.fields['open'].widget.choices = (
('unknown', _('don\'t change')),
('true', _('open')),
('false', _('closed')),
)
def save(self, commit=True):
with transaction.atomic():
super().save(commit=commit)
report = self.instance.report
if self.instance.open is not None:
report.open = self.instance.open
if self.instance.assigned_to:
report.assigned_to = self.instance.assigned_to
if commit:
report.save()
class Meta:
model = ReportUpdate
fields = ['open', 'comment', 'public']
2019-12-27 14:13:40 +01:00
class PositionForm(ModelForm):
class Meta:
model = Position
2019-12-27 18:31:54 +01:00
fields = ['name', 'timeout']
2019-12-27 16:51:06 +01:00
class PositionSetForm(Form):
position = ModelChoiceField(Position.objects.none())
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['position'].queryset = Position.objects.filter(owner=request.user)
self.fields['position'].label_from_instance = attrgetter('name')