diff --git a/dbapp/mainapp/forms.py b/dbapp/mainapp/forms.py index 0c5c71c..aa87df9 100644 --- a/dbapp/mainapp/forms.py +++ b/dbapp/mainapp/forms.py @@ -582,14 +582,14 @@ class KubsatFilterForm(forms.Form): queryset=None, label='Диапазоны работы спутника', required=False, - widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '4'}) + widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '5'}) ) polarization = forms.ModelMultipleChoiceField( queryset=Polarization.objects.all().order_by('name'), label='Поляризация', required=False, - widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '4'}) + widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '5'}) ) frequency_min = forms.FloatField( @@ -620,7 +620,7 @@ class KubsatFilterForm(forms.Form): queryset=Modulation.objects.all().order_by('name'), label='Модуляция', required=False, - widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '4'}) + widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '5'}) ) object_type = forms.ModelMultipleChoiceField( @@ -637,11 +637,18 @@ class KubsatFilterForm(forms.Form): widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '3'}) ) - objitem_count = forms.ChoiceField( - choices=[('', 'Все'), ('1', '1'), ('2+', '2 и более')], - label='Количество привязанных точек ГЛ', + objitem_count_min = forms.IntegerField( + label='Количество привязанных точек ГЛ от', required=False, - widget=forms.RadioSelect() + min_value=0, + widget=forms.NumberInput(attrs={'class': 'form-control', 'placeholder': 'От'}) + ) + + objitem_count_max = forms.IntegerField( + label='Количество привязанных точек ГЛ до', + required=False, + min_value=0, + widget=forms.NumberInput(attrs={'class': 'form-control', 'placeholder': 'До'}) ) # Фиктивные фильтры @@ -966,6 +973,26 @@ class SourceRequestForm(forms.ModelForm): }) ) + # Дополнительные поля для координат объекта + coords_object_lat = forms.FloatField( + required=False, + label='Широта объекта', + widget=forms.NumberInput(attrs={ + 'class': 'form-control', + 'step': '0.000001', + 'placeholder': 'Например: 55.751244' + }) + ) + coords_object_lon = forms.FloatField( + required=False, + label='Долгота объекта', + widget=forms.NumberInput(attrs={ + 'class': 'form-control', + 'step': '0.000001', + 'placeholder': 'Например: 37.618423' + }) + ) + class Meta: from .models import SourceRequest model = SourceRequest @@ -1101,6 +1128,9 @@ class SourceRequestForm(forms.ModelForm): if self.instance.coords_source: self.fields['coords_source_lat'].initial = self.instance.coords_source.y self.fields['coords_source_lon'].initial = self.instance.coords_source.x + if self.instance.coords_object: + self.fields['coords_object_lat'].initial = self.instance.coords_object.y + self.fields['coords_object_lon'].initial = self.instance.coords_object.x def _fill_from_source(self, source): """Заполняет поля формы данными из источника и его связанных объектов.""" @@ -1149,6 +1179,15 @@ class SourceRequestForm(forms.ModelForm): elif coords_source_lat is None and coords_source_lon is None: instance.coords_source = None + # Обрабатываем координаты объекта + coords_object_lat = self.cleaned_data.get('coords_object_lat') + coords_object_lon = self.cleaned_data.get('coords_object_lon') + + if coords_object_lat is not None and coords_object_lon is not None: + instance.coords_object = Point(coords_object_lon, coords_object_lat, srid=4326) + elif coords_object_lat is None and coords_object_lon is None: + instance.coords_object = None + if commit: instance.save() diff --git a/dbapp/mainapp/migrations/0023_add_coords_object_to_sourcerequest.py b/dbapp/mainapp/migrations/0023_add_coords_object_to_sourcerequest.py new file mode 100644 index 0000000..ccc0dfd --- /dev/null +++ b/dbapp/mainapp/migrations/0023_add_coords_object_to_sourcerequest.py @@ -0,0 +1,29 @@ +# Generated by Django 5.2.7 on 2025-12-11 12:08 + +import django.contrib.gis.db.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mainapp', '0022_change_objectmark_to_techanalyze'), + ] + + operations = [ + migrations.RenameIndex( + model_name='objectmark', + new_name='mainapp_obj_tech_an_b0c804_idx', + old_name='mainapp_obj_tech_an_idx', + ), + migrations.AddField( + model_name='sourcerequest', + name='coords_object', + field=django.contrib.gis.db.models.fields.PointField(blank=True, help_text='Координаты объекта (WGS84)', null=True, srid=4326, verbose_name='Координаты объекта'), + ), + migrations.AlterField( + model_name='objectmark', + name='mark', + field=models.BooleanField(blank=True, help_text='True - сигнал обнаружен, False - сигнал отсутствует', null=True, verbose_name='Наличие сигнала'), + ), + ] diff --git a/dbapp/mainapp/models.py b/dbapp/mainapp/models.py index fde75e6..531a667 100644 --- a/dbapp/mainapp/models.py +++ b/dbapp/mainapp/models.py @@ -1196,6 +1196,8 @@ class SourceRequest(models.Model): STATUS_CHOICES = [ ('planned', 'Запланировано'), + ('canceled_gso', 'Отменено ГСО'), + ('canceled_kub', 'Отменено МКА'), ('conducted', 'Проведён'), ('successful', 'Успешно'), ('no_correlation', 'Нет корреляции'), @@ -1346,6 +1348,15 @@ class SourceRequest(models.Model): help_text='Координаты источника (WGS84)', ) + # Координаты объекта + coords_object = gis.PointField( + srid=4326, + null=True, + blank=True, + verbose_name='Координаты объекта', + help_text='Координаты объекта (WGS84)', + ) + # Количество точек, использованных для расчёта координат points_count = models.PositiveIntegerField( default=0, diff --git a/dbapp/mainapp/templates/mainapp/components/_column_visibility_dropdown.html b/dbapp/mainapp/templates/mainapp/components/_column_visibility_dropdown.html index bde10ab..4370e6f 100644 --- a/dbapp/mainapp/templates/mainapp/components/_column_visibility_dropdown.html +++ b/dbapp/mainapp/templates/mainapp/components/_column_visibility_dropdown.html @@ -40,7 +40,6 @@ {% include 'mainapp/components/_column_toggle_item.html' with column_index=18 column_label="Усреднённое" checked=False %} {% include 'mainapp/components/_column_toggle_item.html' with column_index=19 column_label="Стандарт" checked=False %} {% include 'mainapp/components/_column_toggle_item.html' with column_index=20 column_label="Тип источника" checked=True %} - {% include 'mainapp/components/_column_toggle_item.html' with column_index=21 column_label="Sigma" checked=True %} - {% include 'mainapp/components/_column_toggle_item.html' with column_index=22 column_label="Зеркала" checked=True %} + {% include 'mainapp/components/_column_toggle_item.html' with column_index=21 column_label="Зеркала" checked=True %} \ No newline at end of file diff --git a/dbapp/mainapp/templates/mainapp/components/_kubsat_filters_tab.html b/dbapp/mainapp/templates/mainapp/components/_kubsat_filters_tab.html index 72f0dba..d6756eb 100644 --- a/dbapp/mainapp/templates/mainapp/components/_kubsat_filters_tab.html +++ b/dbapp/mainapp/templates/mainapp/components/_kubsat_filters_tab.html @@ -1,7 +1,6 @@ {% load l10n %}