Ejemplo n.º 1
0
    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})
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
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
    )
Ejemplo n.º 4
0
 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
     )
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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})
Ejemplo n.º 7
0
    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)