Добавил работу с заявками на кубсат
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user