Визуальные изменение. Доработки и фиксы багов
This commit is contained in:
@@ -61,7 +61,9 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
selected_satellites = request.GET.getlist("satellite_id")
|
||||
selected_polarizations = request.GET.getlist("polarization_id")
|
||||
selected_modulations = request.GET.getlist("modulation_id")
|
||||
selected_standards = request.GET.getlist("standard_id")
|
||||
selected_mirrors = request.GET.getlist("mirror_id")
|
||||
selected_complexes = request.GET.getlist("complex_id")
|
||||
freq_min = request.GET.get("freq_min", "").strip()
|
||||
freq_max = request.GET.get("freq_max", "").strip()
|
||||
freq_range_min = request.GET.get("freq_range_min", "").strip()
|
||||
@@ -96,10 +98,11 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
.order_by("name")
|
||||
)
|
||||
|
||||
# Get all polarizations, modulations for filters
|
||||
from ..models import Polarization, Modulation, ObjectInfo
|
||||
# Get all polarizations, modulations, standards for filters
|
||||
from ..models import Polarization, Modulation, ObjectInfo, Standard
|
||||
polarizations = Polarization.objects.all().order_by("name")
|
||||
modulations = Modulation.objects.all().order_by("name")
|
||||
standards = Standard.objects.all().order_by("name")
|
||||
|
||||
# Get all ObjectInfo for filter
|
||||
object_infos = ObjectInfo.objects.all().order_by("name")
|
||||
@@ -167,6 +170,11 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
objitem_filter_q &= Q(source_objitems__parameter_obj__modulation_id__in=selected_modulations)
|
||||
has_objitem_filter = True
|
||||
|
||||
# Add standard filter
|
||||
if selected_standards:
|
||||
objitem_filter_q &= Q(source_objitems__parameter_obj__standard_id__in=selected_standards)
|
||||
has_objitem_filter = True
|
||||
|
||||
# Add frequency filter
|
||||
if freq_min:
|
||||
try:
|
||||
@@ -240,6 +248,11 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
objitem_filter_q &= Q(source_objitems__geo_obj__mirrors__id__in=selected_mirrors)
|
||||
has_objitem_filter = True
|
||||
|
||||
# Add complex filter
|
||||
if selected_complexes:
|
||||
objitem_filter_q &= Q(source_objitems__parameter_obj__id_satellite__location_place__in=selected_complexes)
|
||||
has_objitem_filter = True
|
||||
|
||||
# Add polygon filter
|
||||
if polygon_geom:
|
||||
objitem_filter_q &= Q(source_objitems__geo_obj__coords__within=polygon_geom)
|
||||
@@ -291,6 +304,8 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__polarization_id__in=selected_polarizations)
|
||||
if selected_modulations:
|
||||
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__modulation_id__in=selected_modulations)
|
||||
if selected_standards:
|
||||
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__standard_id__in=selected_standards)
|
||||
if freq_min:
|
||||
try:
|
||||
freq_min_val = float(freq_min)
|
||||
@@ -341,6 +356,8 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
pass
|
||||
if selected_mirrors:
|
||||
filtered_objitems_qs = filtered_objitems_qs.filter(geo_obj__mirrors__id__in=selected_mirrors)
|
||||
if selected_complexes:
|
||||
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__id_satellite__location_place__in=selected_complexes)
|
||||
if polygon_geom:
|
||||
filtered_objitems_qs = filtered_objitems_qs.filter(geo_obj__coords__within=polygon_geom)
|
||||
|
||||
@@ -548,6 +565,12 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
source_objitems__parameter_obj__modulation_id__in=selected_modulations
|
||||
).distinct()
|
||||
|
||||
# Filter by standards
|
||||
if selected_standards:
|
||||
sources = sources.filter(
|
||||
source_objitems__parameter_obj__standard_id__in=selected_standards
|
||||
).distinct()
|
||||
|
||||
# Filter by frequency range
|
||||
if freq_min:
|
||||
try:
|
||||
@@ -614,6 +637,12 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
source_objitems__geo_obj__mirrors__id__in=selected_mirrors
|
||||
).distinct()
|
||||
|
||||
# Filter by complex
|
||||
if selected_complexes:
|
||||
sources = sources.filter(
|
||||
source_objitems__parameter_obj__id_satellite__location_place__in=selected_complexes
|
||||
).distinct()
|
||||
|
||||
# Filter by polygon
|
||||
if polygon_geom:
|
||||
sources = sources.filter(
|
||||
@@ -760,6 +789,10 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
'selected_modulations': [
|
||||
int(x) if isinstance(x, str) else x for x in selected_modulations if (isinstance(x, int) or (isinstance(x, str) and x.isdigit()))
|
||||
],
|
||||
'standards': standards,
|
||||
'selected_standards': [
|
||||
int(x) if isinstance(x, str) else x for x in selected_standards if (isinstance(x, int) or (isinstance(x, str) and x.isdigit()))
|
||||
],
|
||||
'freq_min': freq_min,
|
||||
'freq_max': freq_max,
|
||||
'freq_range_min': freq_range_min,
|
||||
@@ -772,6 +805,9 @@ class SourceListView(LoginRequiredMixin, View):
|
||||
'selected_mirrors': [
|
||||
int(x) if isinstance(x, str) else x for x in selected_mirrors if (isinstance(x, int) or (isinstance(x, str) and x.isdigit()))
|
||||
],
|
||||
# Complex filter choices
|
||||
'complexes': [('kr', 'КР'), ('dv', 'ДВ')],
|
||||
'selected_complexes': selected_complexes,
|
||||
'object_infos': object_infos,
|
||||
'polygon_coords': json.dumps(polygon_coords) if polygon_coords else None,
|
||||
'full_width_page': True,
|
||||
@@ -1113,12 +1149,7 @@ class MergeSourcesView(LoginRequiredMixin, AdminModeratorMixin, View):
|
||||
target_source.update_confirm_at()
|
||||
target_source.save()
|
||||
|
||||
# Delete sources_to_merge (without cascade deleting objitems since we moved them)
|
||||
# We need to delete marks first (they have CASCADE)
|
||||
from ..models import ObjectMark
|
||||
ObjectMark.objects.filter(source__in=sources_to_merge).delete()
|
||||
|
||||
# Now delete the sources
|
||||
# Delete sources_to_merge (objitems already moved to target)
|
||||
deleted_count = sources_to_merge.count()
|
||||
sources_to_merge.delete()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user