
    ~]i                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlZ ej.                  e      Z G d de	      Zy)    )ValidationError)Count)IsAuthenticated)SearchFilter)ListAPIView)DjangoFilterBackend)CallCatchPhrase)CallsRepository)CatchPhrasePagination)CallPhraseReportSerializer)CatchPhraseReportFilterNc                   @    e Zd ZegZeZeegZ	e
ZeZg dZd Zd Zd Zy)CatchPhraseReportAPIView)caller_namefrom_numbertwilio_call_sidc                 b    t        | j                  j                  dd       }|st        d      |S )Nactive_company_idz*User does not belong to an active company.)getattrrequestuserr   )selfr   s     F/var/www/html/dp2/backend_v2.1/server/apps/calls/views/catch_phrase.pyget_company_idz'CatchPhraseReportAPIView.get_company_id   s1    #DLL$5$57JDQ !"NOO      c                     | j                         }t        j                  j                  |      j	                  dd      j                         }t        j                  |      j                  |      S )u   
        Calls that have at least one catchphrase detected.
        If no phrases exist yet → return empty queryset safely.
        )
company_idcall_idTflat)id__in)r   r	   objectsfiltervalues_listdistinctr
   get_service_calls)r   r   call_idss      r   get_querysetz%CatchPhraseReportAPIView.get_queryset%   sg    
 ((*
 ##VzV*[[.XZ	 	 00!

&&
!	"r   c                     | j                         }| j                  | j                               }|j                  dd      }t        j
                  j                  ||      j                  dd      j                  t        d            j                  dd      }|D cg c]  }|d   |d   |d	   d
 }	}| j                  |      }
| j                  |
d      }| j                  |j                  |	d      S c c}w )NidTr   )r   call_id__in
phrase__idphrase__phrase)countz-countr.   )	phrase_idphraser.   )many)calls
graph_data)r   filter_querysetr(   r$   r	   r"   r#   valuesannotater   order_bypaginate_querysetget_serializerget_paginated_responsedata)r   r   argskwargsr   querysetr'   graph_counts_qsrowr3   page
serializers               r   listzCatchPhraseReportAPIView.list7   s   ((*
''(9(9(;<''4'8 ##V%$   VL"23XE$KX(Xh 01 	" '
 '	 !../W
 ' 	 
 %%h/((D(9
**__$,
  	
s   !C;N)__name__
__module____qualname__r   permission_classesr   serializer_classr   r   filter_backendsr   filterset_classr   pagination_classsearch_fieldsr   r(   rC    r   r   r   r      s<    )*1*L9O-O,M!"$"r   r   )django.core.exceptionsr   django.db.models.aggregatesr   rest_framework.permissionsr   rest_framework.filtersr   rest_framework.genericsr   django_filters.rest_frameworkr   apps.companies.modelsr	   apps.calls.repositoriesr
   apps.calls.paginationr   apps.calls.serializersr   apps.calls.filtersr   logging	getLoggerrD   loggerr   rM   r   r   <module>r\      sI    2 - 6 / / = 1 3 7 = 6 			8	$G{ Gr   