
    (i"                         d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZmZ dd	lmZ dd
lmZmZ d dlmZ d dlmZ d dlm Z   G d dejB                        Z"y)    )viewsetsstatusfilters)action)Response)CountQMaxOuterRefSubqueryAvg)timezone)defaultdict)TRANSFER_STATUS	SENTIMENT   )Customer)CustomerSerializerCustomerHistorySerializer)Call)OurLimitOffsetPagination)DjangoFilterBackendc                       e Zd Zej                  j                         ZeZe	e
j                  gZddgZ eddgdee	e
j                  g      d        Z eddgde	      d
        Z eddgd      dd       Zy)CustomerViewSetnamephoneFgetzcustomer-stats)detailmethodsurl_pathpagination_classfilter_backendsc                    t         j                  j                         }t        | j                        D ]  } |       j                  |||       } |j                  }|j                  s)|j                  r|j                  |j                        }n*|j                  st        dg dt        j                        S t        j                  j                  t        d            j                  d      j!                  d      d d	 }|j#                  t%        |      
      j                  d      }t'               }|j)                  |||       }g }	|D ]_  }
t        j                  j                  |
j*                  |
j,                        }|j/                         }|j                  t0        j2                  j4                        j/                         }|j                  t0        j6                  j4                        j/                         }|j                  t0        j8                  j4                        j/                         }|	j;                  |
j<                  |
j>                  dk7  r|
j>                  nd|
j*                  |||||
j@                  r|
j@                  jC                         nd d       b |jE                  |	      S )N)companyzNo active company found)messagedatar   r   )from_number-created_at
created_atr   )last_call_timez-last_call_timeviewr(   r$   )transfer_statusUnknown)customer_idcustomer_namephone_numbertotal_callsmissed_callsreceived_callsnot_transferred_callsr+   )#r   objectsalllistr"   filter_querysetuseris_superuseractive_companyfilterr   r   HTTP_200_OKr   r   order_byvaluesannotater   r   paginate_querysetr   r$   countr   NOT_TRANSFERREDvalueFAILED
SUCCESSFULappendidr   r+   	isoformatget_paginated_response)selfrequestcustomers_querysetbackendr<   last_call_subquerycustomers_with_stats	paginatorpaginated_customersresultcustomercustomer_callsr4   r7   r5   r6   s                   =/var/www/html/dp2/backend_v2.1/server/apps/customers/views.pycustomer_statszCustomerViewSet.customer_stats   sf   
 &--113D001G!(!:!:7DVX\!] 2 ||  T%8%8!3!:!:4CVCV!:!W""4 ((* *
 "\\00 ) 1 

(=
!&&"6r;  2::#$67  ;  

($
% 	 -.	'99:NPW^b9c+H!\\00X^^U]UeUe0fN(..0K$2$9$9/JiJiJoJo$9$p$v$v$x!)00AWAWA]A]0^ddfL+22?C]C]CcCc2djjlNMM'{{2:--92LR[ (* ,"0)>IQI`I`("9"9"C"C"Efj	 	 ,$ //77    zcustomer-history)r   r   r    r!   c                    t        |j                        }|j                  d       |j                  }|d   }|d   j	                         }|d   j	                         }|j
                  }	 t        j                  j                  |      }|j                  sB|j                  r6|j                  |j                  k7  rt        dd	it        j                  
      S t         j                  j#                  |j$                  ||g      j'                  dd      j)                         j+                  d      }	t-               }
|
j/                  |	||       }g }|D ]Q  }t         j                  j#                  |j$                  |      j+                  d      }g }|D ]  }d }|j0                  rY|j0                  j2                  rC|j0                  j2                  j4                   d|j0                  j2                  j6                   }|j9                  |j:                  |j<                  |j>                  ||j@                  tC        |jD                        |jF                  jI                         |jJ                  |jL                  d	        |j9                  |jI                         |d       T t         j                  j#                  |j$                  ||g      jO                         }t        |
jN                  |
jQ                         |
jS                         |jT                  |j$                  ||d      S # t        j                  $ r  t        ddit        j                  
      cY S w xY w)N)r&   T)raise_exceptionr1   
start_dateend_date)rK   r%   "Customer not found in your companyr'   Customer not found)r(   created_at__date__rangecreated_at__date)flatz-created_at__dater,   )r(   rc   r)    )	rK   twilio_call_id	sentimentadvisor_namesummarydurationtime
transcriptcall_id)datecalls)rE   nextpreviousr2   customer_phoner4   history)+r   query_paramsis_validvalidated_datarn   r<   r   r8   r   r=   r>   r$   r   r   HTTP_404_NOT_FOUNDDoesNotExistr   r?   r   values_listdistinctrA   r   rD   transfer_userprofile
first_name	last_namerJ   rK   twilio_call_sidrg   ri   floatrj   r*   rL   rl   rm   rE   get_next_linkget_previous_linkr   )rN   rO   
serializer	validatedr1   r^   r_   r<   rW   dates_querysetrT   paginated_datesrs   rn   calls_for_date
calls_datacallrh   r4   s                      rY   customer_historyz CustomerViewSet.customer_historyJ   s   .G4H4HI
D1--	.|,113
Z(--/||		1''++{+;H$$)<)<AQAQUYUhUhAhC! 335 5 ,, %/$: - 
 +(t+
4XXZI\@] 	
 -.	#55ngTX5Y#D!\\00$NN!% 1  h}% 
 J&#%%$*<*<*D*D&*&8&8&@&@&K&K%LAdN`N`NhNhNrNrMs#tL!!''&*&:&:!%$0#|| %dmm 4 OO557"&//#||
# 
 '$ NN(# 3 $< ll)) %/$: * 
 %' 	
 __++-!335%]]&nn&
  	c $$ 	1///1 1	1s   -A-L5 50M('M(Tzrecent-calls)r   r   r    Nc                 z   |j                   }	 | j                         }|j                  sB|j                  r6|j                  |j                  k7  rt        ddit        j                        S t        j                  j                  |j                  |j                        }|j                  d      d d }|j                  d	      j!                  t#        d
            d   }d }|r|d   j$                  }g }	|D ]P  }
d }|
j&                  t(        j*                  j,                  k(  r|
j.                  rt1        |
j.                  d      rh|
j.                  j2                  rR|
j.                  j2                  j4                   d|
j.                  j2                  j6                   j9                         }n|
j.                  j:                  }|	j=                  |
j>                  |
j@                  |
jB                  |jD                  |
j$                  jG                         |
jH                  |
jJ                  |
jL                  |
jN                  |d
       S |jD                  |j                  |r|jG                         nd ||	d}t        |      S # t        j                  $ r  t        ddit        j                        cY S w xY w)Nr%   r`   r'   ra   r.   r)   
   T)sentiment__isnullrg   )avg_sentimentr   r   r|   re   )
rK   rm   rf   r2   	timestampduration_secondsrl   sentiment_scoreri   rh   )r2   r   recent_call_datetimer   call_records)(r<   
get_objectr=   r>   r$   r   r   rw   r   rx   r   r8   r?   r   rA   exclude	aggregater   r*   r/   r   rI   rG   r{   hasattrr|   r}   r~   stripusernamerJ   rK   rm   r   r   rL   rj   rl   rg   ri   )rN   rO   pkr<   rW   	all_callsrecent_callssentiment_avgr   r   r   rh   response_datas                rY   r   zCustomerViewSet.recent_calls   sn   ||		1(H$$)<)<AQAQUYUhUhAhC! 335 5 LL'' $$ ( 
	
 !))-8"=!))D)AKKk* L 

  $#/?#=#=  DL##'A'A'G'GGDL^L^4--y9d>P>P>X>X&*&8&8&@&@&K&K%LAdN`N`NhNhNrNrMs#t#z#z#|L#'#5#5#>#>Lgg<<"&"6"6!)!__668$(MM"oo#'>><< ,!  !, &]]^^H\$8$B$B$Dbf*(
 &&e $$ 	1///1 1	1s   AJ 0J:9J:)N)__name__
__module____qualname__r   r8   r9   querysetr   serializer_classr   r   SearchFilterr"   search_fieldsr   r   rZ   r   r    r[   rY   r   r      s    ##%H)*G,@,@AOW%M55'4D50'2F2FG-8	-8^ 55'4FYqrJ sJX 4%>B;' C;'r[   r   N)#rest_frameworkr   r   r   rest_framework.decoratorsr   rest_framework.responser   django.db.modelsr   r	   r
   r   r   r   django.utilsr   collectionsr   apps.calls.constantsr   r   modelsr   serializersr   r   apps.calls.modelsr   utils.paginationsr   django_filters.rest_frameworkr   ModelViewSetr   r   r[   rY   <module>r      sC    4 4 , , C C ! # ;  F " 6 =B'h++ B'r[   