def contacts(self, request, *, customer=None, data=None): if request.method == "GET": obj = customer paginator = default_paginator() paged_list = paginator.paginate_queryset( request=request, queryset=get_customer_contacts(obj.pk), view=self, ) contacts = ContactSerializer(paged_list, many=True).data return paginator.get_paginated_response(contacts) elif request.method == "POST": contact = create_contact(customer, data) if data.contact_type == ContactType.family: action_type = CustomerActions.family_contacts_updated elif data.contact_type == ContactType.others: action_type = CustomerActions.other_contacts_updated ActivityService.log(action_type, customer, request=request) return Response({"id": contact.id}, status=201) else: update_contacts(data) if data.contact_type == ContactType.family: action_type = CustomerActions.family_contacts_updated elif data.contact_type == ContactType.others: action_type = CustomerActions.other_contacts_updated else: action_type = CustomerActions.direct_contacts_updated ActivityService.log(action_type, customer, request=request) return Response({"id": data.customer.id})
def customers_forest_contacts(self, request, *, forest: Forest): contacts = get_customer_contacts_of_forest(forest.pk) paginator = default_paginator() paged_list = paginator.paginate_queryset(request=request, queryset=contacts, view=self) return paginator.get_paginated_response( ContactSerializer(paged_list, many=True).data)
def contacts_list(request): paginator = default_paginator() paged_list = paginator.paginate_queryset( request=request, queryset=contacts_list_with_search(request.GET.get("search")), ) return paginator.get_paginated_response( ContactSerializer(paged_list, many=True).data )
def list(self, request): search = request.GET.get("search") paginator = default_paginator() paged_list = paginator.paginate_queryset( request=request, queryset=get_customers(search), view=self, ) return paginator.get_paginated_response( CustomerSerializer(paged_list, many=True).data )
def customers(self, request, **kwargs): obj = self.get_object() paginator = default_paginator() paged_list = paginator.paginate_queryset( request=request, queryset=get_forest_customers(obj.pk), view=self, ) if request.user.member_of(SystemGroups.GROUP_LIMITED_USER): return paginator.get_paginated_response( LimittedCustomerSerializer(paged_list, many=True).data) else: return paginator.get_paginated_response( CustomerSerializer(paged_list, many=True).data)
def forests(self, request, *, customer=None, data: ForestPksInput = None): if request.method == "GET": obj = customer paginator = default_paginator() paged_list = paginator.paginate_queryset( request=request, queryset=get_customer_forests(obj.pk), view=self, ) forests = ForestSerializer(paged_list, many=True).data return paginator.get_paginated_response(forests) else: update_forests(data) ActivityService.log( CustomerActions.forests_updated, customer, request=request ) return Response({"id": data.customer.pk})
def list_minimal(self, request): query = (self.get_queryset().annotate( customers_count=Count(F("forestcustomer__customer_id"))).annotate( tags_repr=RawSQL( "select string_agg(tags_repr, ',') tags_repr " "from (" "select concat_ws(':', key, value) as tags_repr " "from jsonb_each_text(tags) as x " "where value is not null" ") as ss", params=[], )).values( "id", "internal_id", "cadastral", "customers_count", "land_attributes", "attributes", )) search_str = request.GET.get("search") if search_str: query = query.filter( Q(pk__icontains=search_str) | Q(internal_id__icontains=search_str) | Q(cadastral__prefecture__icontains=search_str) | Q(cadastral__municipality__icontains=search_str) | Q(cadastral__sector__icontains=search_str) | Q(cadastral__subsector__icontains=search_str) | reduce( operator.and_, (Q(tags_repr__icontains=v) for v in search_str.split(",")), )) paginator = default_paginator() paged_list = paginator.paginate_queryset(request=request, queryset=query, view=self) return paginator.get_paginated_response(paged_list)