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

77 lines
2.5 KiB
Python
Raw Normal View History

2023-11-10 16:08:55 +01:00
from dataclasses import dataclass
from dataclasses import replace as dataclass_replace
from functools import cached_property
2023-11-26 16:22:55 +01:00
from itertools import chain
2019-12-27 16:51:06 +01:00
from operator import attrgetter
2023-11-10 16:08:55 +01:00
from typing import Any, Sequence
2019-12-27 16:51:06 +01:00
from django.db import transaction
2023-11-10 16:08:55 +01:00
from django.forms import BooleanField, ChoiceField, 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
2023-11-10 16:08:55 +01:00
from c3nav.mesh.messages import MeshMessageType
2023-11-26 17:55:23 +01:00
from c3nav.mesh.models import (FirmwareBuild, HardwareDescription, MeshNode, OTARecipientStatus, OTAUpdate,
OTAUpdateRecipient)
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')
2023-11-10 16:08:55 +01:00