Добавил работу с заявками на кубсат

This commit is contained in:
2025-12-08 15:37:23 +03:00
parent 2b856ff6dc
commit 8fb8b08c93
15 changed files with 3725 additions and 8 deletions

View File

@@ -48,6 +48,17 @@ class SourceListView(LoginRequiredMixin, View):
mark_date_from = request.GET.get("mark_date_from", "").strip()
mark_date_to = request.GET.get("mark_date_to", "").strip()
# Source request filters
has_requests = request.GET.get("has_requests")
selected_request_statuses = request.GET.getlist("request_status")
selected_request_priorities = request.GET.getlist("request_priority")
request_gso_success = request.GET.get("request_gso_success")
request_kubsat_success = request.GET.get("request_kubsat_success")
request_planned_from = request.GET.get("request_planned_from", "").strip()
request_planned_to = request.GET.get("request_planned_to", "").strip()
request_date_from = request.GET.get("request_date_from", "").strip()
request_date_to = request.GET.get("request_date_to", "").strip()
# Get filter parameters - ObjItem level (параметры точек)
geo_date_from = request.GET.get("geo_date_from", "").strip()
geo_date_to = request.GET.get("geo_date_to", "").strip()
@@ -423,6 +434,73 @@ class SourceListView(LoginRequiredMixin, View):
if mark_filter_q:
sources = sources.filter(mark_filter_q).distinct()
# Filter by source requests
if has_requests == "1":
# Has requests - apply subfilters
from ..models import SourceRequest
from django.db.models import Exists, OuterRef
# Build subquery for filtering requests
request_subquery = SourceRequest.objects.filter(source=OuterRef('pk'))
# Filter by request status
if selected_request_statuses:
request_subquery = request_subquery.filter(status__in=selected_request_statuses)
# Filter by request priority
if selected_request_priorities:
request_subquery = request_subquery.filter(priority__in=selected_request_priorities)
# Filter by GSO success
if request_gso_success == "true":
request_subquery = request_subquery.filter(gso_success=True)
elif request_gso_success == "false":
request_subquery = request_subquery.filter(gso_success=False)
# Filter by Kubsat success
if request_kubsat_success == "true":
request_subquery = request_subquery.filter(kubsat_success=True)
elif request_kubsat_success == "false":
request_subquery = request_subquery.filter(kubsat_success=False)
# Filter by planned date range
if request_planned_from:
try:
planned_from_obj = datetime.strptime(request_planned_from, "%Y-%m-%d")
request_subquery = request_subquery.filter(planned_at__gte=planned_from_obj)
except (ValueError, TypeError):
pass
if request_planned_to:
try:
from datetime import timedelta
planned_to_obj = datetime.strptime(request_planned_to, "%Y-%m-%d")
planned_to_obj = planned_to_obj + timedelta(days=1)
request_subquery = request_subquery.filter(planned_at__lt=planned_to_obj)
except (ValueError, TypeError):
pass
# Filter by request date range
if request_date_from:
try:
req_date_from_obj = datetime.strptime(request_date_from, "%Y-%m-%d")
request_subquery = request_subquery.filter(request_date__gte=req_date_from_obj)
except (ValueError, TypeError):
pass
if request_date_to:
try:
req_date_to_obj = datetime.strptime(request_date_to, "%Y-%m-%d")
request_subquery = request_subquery.filter(request_date__lte=req_date_to_obj)
except (ValueError, TypeError):
pass
# Apply the subquery filter using Exists
sources = sources.filter(Exists(request_subquery))
elif has_requests == "0":
# No requests
sources = sources.filter(source_requests__isnull=True)
# Filter by ObjItem count
if objitem_count_min:
try:
@@ -700,6 +778,16 @@ class SourceListView(LoginRequiredMixin, View):
'has_signal_mark': has_signal_mark,
'mark_date_from': mark_date_from,
'mark_date_to': mark_date_to,
# Source request filters
'has_requests': has_requests,
'selected_request_statuses': selected_request_statuses,
'selected_request_priorities': selected_request_priorities,
'request_gso_success': request_gso_success,
'request_kubsat_success': request_kubsat_success,
'request_planned_from': request_planned_from,
'request_planned_to': request_planned_to,
'request_date_from': request_date_from,
'request_date_to': request_date_to,
# ObjItem-level filters
'geo_date_from': geo_date_from,
'geo_date_to': geo_date_to,